Compare commits

..

32 Commits

Author SHA1 Message Date
077834f7a4 2.2.16 2018-12-09 01:19:44 +01:00
ca348b5475 fix(license): switch to company name from brand name 2018-12-09 01:19:44 +01:00
2c9ab52cee 2.2.15 2018-12-09 01:19:02 +01:00
7d35f4c90b fix(core): update to latest gitzone standards 2018-12-09 01:19:01 +01:00
a05253bdcd Merge branch 'patch-1' into 'master'
Fix sample code in README.md

See merge request pushrocks/gulp-function!2
2018-12-09 00:08:24 +00:00
54b80098d2 Fix sample code in README.md 2018-12-08 18:57:10 +00:00
c39a4a6cb0 2.2.14 2018-01-29 23:54:02 +01:00
f325479a11 update ci 2018-01-29 23:53:58 +01:00
c79f443c18 2.2.13 2018-01-29 23:30:12 +01:00
14bb4a90bb update README 2018-01-29 23:30:09 +01:00
98a583bae1 2.2.12 2018-01-29 23:28:06 +01:00
848d9ac1e0 update to latest standards 2018-01-29 23:28:03 +01:00
e7ccd9aec4 2.2.11 2017-10-27 12:49:45 +02:00
63bf7204dd update 2017-10-27 12:49:43 +02:00
a34a1b89fe 2.2.10 2017-09-07 22:33:43 +02:00
f4455a9b91 update dependencies 2017-09-07 22:33:40 +02:00
1a01198d7f 2.2.9 2017-04-30 17:28:18 +02:00
b3ec364a1d 2.2.8 2017-04-30 17:23:26 +02:00
5d15c96511 update docs and .gitignore 2017-04-30 17:23:22 +02:00
f6e071156b 2.2.7 2017-04-30 17:11:50 +02:00
63fe7c7423 update README 2017-04-30 17:11:40 +02:00
c8dcdc0df4 update README 2017-04-30 17:11:19 +02:00
743c7a03a5 2.2.6 2017-04-30 01:07:35 +02:00
f9e7bf450b now cleans pipe correctly 2017-04-30 01:07:30 +02:00
b55a511fcb 2.2.5 2017-04-30 00:45:23 +02:00
96c15cb90a update ci 2017-04-30 00:45:19 +02:00
0d772e8ab0 2.2.4 2017-04-30 00:44:14 +02:00
a324deb942 clean up 2017-04-30 00:44:11 +02:00
cb60bec110 2.2.3 2016-12-04 21:33:05 +01:00
291583b17a update tests 2016-12-04 21:32:56 +01:00
9d54da207f 2.2.2 2016-11-25 11:21:59 +01:00
7aad993847 improve README 2016-11-25 11:21:55 +01:00
35 changed files with 4302 additions and 468 deletions

8
.gitignore vendored
View File

@ -1,13 +1,5 @@
node_modules/ node_modules/
.settings/
.idea/
coverage/ coverage/
docs/
public/ public/
pages/ pages/
ts/*.js
ts/*.js.map
ts/typings/
test/result/

View File

@ -1,53 +1,125 @@
image: hosttoday/ht-docker-node:npmts # gitzone standard
image: hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci_cache/
key: "$CI_BUILD_STAGE"
stages: stages:
- security
- test - test
- release - release
- trigger - metadata
- pages
testLEGACY: # ====================
stage: test # security stage
# ====================
mirror:
stage: security
script: script:
- npmci test legacy - npmci git mirror
tags: tags:
- docker - docker
allow_failure: true - notpriv
snyk:
stage: security
script:
- npmci npm prepare
- npmci command npm install -g snyk
- npmci command npm install --ignore-scripts
- npmci command snyk test
tags:
- docker
- notpriv
# ====================
# test stage
# ====================
testLTS: testLTS:
stage: test stage: test
script: script:
- npmci test lts - npmci npm prepare
- npmci node install lts
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- notpriv
testSTABLE: testSTABLE:
stage: test stage: test
script: script:
- npmci test stable - npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- docker - docker
- notpriv
release: release:
stage: release stage: release
script: script:
- npmci publish - npmci node install stable
- npmci npm publish
only: only:
- tags - tags
tags: tags:
- docker - docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
image: docker:stable
allow_failure: true
services:
- docker:stable-dind
script:
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
- docker run
--env SOURCE_CODE="$PWD"
--volume "$PWD":/code
--volume /var/run/docker.sock:/var/run/docker.sock
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
artifacts:
paths: [codeclimate.json]
tags:
- docker
- priv
trigger: trigger:
stage: trigger stage: metadata
script: script:
- npmci trigger - npmci trigger
only: only:
- tags - tags
tags:
- docker
- notpriv
pages:
image: hosttoday/ht-docker-node:npmci
stage: metadata
script:
- npmci command npm install -g typedoc typescript
- npmci npm prepare
- npmci npm install
- npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/
tags: tags:
- docker - docker
pages: - notpriv
image: hosttoday/ht-docker-node:npmpage
stage: pages
script:
- npmci command npmpage --host gitlab
only: only:
- tags - tags
artifacts: artifacts:
expire_in: 1 week expire_in: 1 week
paths: paths:
- public - public
allow_failure: true

View File

@ -1,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2015 Push.Rocks Copyright (c) 2015 Lossless GmbH
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

View File

@ -1,61 +1,61 @@
# gulp-function # gulp-function
accepts call to execute in gulp pipeline.
accepts a function call as parameter to execute in gulp pipeline
## Availabililty ## Availabililty
[![npm](https://push.rocks/assets/repo-button-npm.svg)](https://www.npmjs.com/package/gulp-function)
[![git](https://push.rocks/assets/repo-button-git.svg)](https://gitlab.com/pushrocks/gulp-function) [![npm](https://pushrocks.gitlab.io/assets/repo-button-npm.svg)](https://www.npmjs.com/package/gulp-function)
[![git](https://push.rocks/assets/repo-button-mirror.svg)](https://github.com/pushrocks/gulp-function) [![git](https://pushrocks.gitlab.io/assets/repo-button-git.svg)](https://GitLab.com/pushrocks/gulp-function)
[![docs](https://push.rocks/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/gulp-function/) [![git](https://pushrocks.gitlab.io/assets/repo-button-mirror.svg)](https://github.com/pushrocks/gulp-function)
[![docs](https://pushrocks.gitlab.io/assets/repo-button-docs.svg)](https://pushrocks.gitlab.io/gulp-function/)
## Status for master ## Status for master
[![build status](https://gitlab.com/pushrocks/gulp-function/badges/master/build.svg)](https://gitlab.com/pushrocks/gulp-function/commits/master)
[![coverage report](https://gitlab.com/pushrocks/gulp-function/badges/master/coverage.svg)](https://gitlab.com/pushrocks/gulp-function/commits/master) [![build status](https://GitLab.com/pushrocks/gulp-function/badges/master/build.svg)](https://GitLab.com/pushrocks/gulp-function/commits/master)
[![coverage report](https://GitLab.com/pushrocks/gulp-function/badges/master/coverage.svg)](https://GitLab.com/pushrocks/gulp-function/commits/master)
[![npm downloads per month](https://img.shields.io/npm/dm/gulp-function.svg)](https://www.npmjs.com/package/gulp-function)
[![Dependency Status](https://david-dm.org/pushrocks/gulp-function.svg)](https://david-dm.org/pushrocks/gulp-function) [![Dependency Status](https://david-dm.org/pushrocks/gulp-function.svg)](https://david-dm.org/pushrocks/gulp-function)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/gulp-function/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/gulp-function/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/gulp-function/badges/code.svg)](https://www.bithound.io/github/pushrocks/gulp-function)
[![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![TypeScript](https://img.shields.io/badge/TypeScript-2.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/) [![node](https://img.shields.io/badge/node->=%206.x.x-blue.svg)](https://nodejs.org/dist/latest-v6.x/docs/api/)
[![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/) [![JavaScript Style Guide](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)
### Usage ### Usage
```javascript
import * as gulp from 'gulp'; ```typescript
import gulpFunction from 'gulp-function' // default ES6 export import gulp = require('gulp');
import gulpFunction from 'gulp-function'; // default ES6 export
// import {forFirst, forEach, atEnd} from 'gulp-function' // import {forFirst, forEach, atEnd} from 'gulp-function'
let Q = require("q");
let myFunction = function (file, enc) { // file and enc are optional in case you want to modify the file object let myAsyncFunction = async (file, enc) => {
let done = Q.defer(); // await some async stuff
console.log("Hello World!") };
// NOTE:
// you can use done.resolve as callback function
// of any async tasks within this function
done.resolve();
return done.promise;
}
gulp.task('gulpTest',function() { gulp.task('gulpTest', function() {
let stream = gulp.src('./mydir/*.something') let stream = gulp
.pipe(gulpFunction(myFunction,'forEach')) //read the notes below .src('./mydir/*.something')
// .pipe(gulpFunction.forEach(myFunction)) .pipe(gulpFunction(myAsyncFunction, 'forEach')) //read the notes below
.pipe(gulp.dest("./build/")); // .pipe(forEach(myAsyncFunction)) // if imported as >> import { forEach } from 'gulp-function' <<
return stream; // by returning the stream gulp knows when our task has finished. .pipe(gulp.dest('./build/'));
return stream; // by returning the stream gulp knows when our task has finished.
}); });
``` ```
### Notes: ### Notes
* The first argument of gulpFunction can also be an **array of multiple functionnames**. - The first argument of gulpFunction can also be an **array of multiple functionnames**.
Each function can return a promise. The pipe stop will finish when every promise is fullfilled. Each function can return a promise. The pipe stop will finish when every promise is fullfilled.
When providing an array of functions be careful with modifying the file object -> race condition When providing an array of functions be careful with modifying the file object -> race condition
* The second argument can be empty, it defaults to "forEach" - The second argument can be empty, it defaults to "forEach"
* The following options are available: - The following options are available:
* "forFirst" - executes when first chunk/vinylfile of the stream reaches the pipestop. - "forFirst" - executes when first chunk/vinylfile of the stream reaches the pipestop.
file is pushed further down the line when function's returned promise is fullfilled. file is pushed further down the line when function's returned promise is fullfilled.
* "forEach" - executes like "forFirst" but with every chunk/vinylfile in the stream; - "forEach" - executes like "forFirst" but with every chunk/vinylfile in the stream;
* "atEnd" - executes after all chunks have passed and are processed in full. - "atEnd" - executes after all chunks have passed and are processed in full.
That means the stream's "finish" event fires **before "atLast" is executed**!!! That means the stream's "finish" event fires **before "atLast" is executed**!!!
[![npm](https://push.rocks/assets/repo-header.svg)](https://push.rocks) For further information read the linked docs at the top of this README.
> MIT licensed | **&copy;** [Lossless GmbH](https://lossless.gmbh)
> | By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy.html)
[![repo-footer](https://pushrocks.gitlab.io/assets/repo-footer.svg)](https://push.rocks)

12
dist/index.d.ts vendored
View File

@ -1,12 +0,0 @@
/// <reference types="node" />
import 'typings-global';
import { Transform } from 'stream';
export declare type TExecutionMode = 'forEach' | 'forFirst' | 'atEnd';
export interface IPromiseFunction {
(file?: any, enc?: any): PromiseLike<any>;
}
declare let defaultExport: (functionsToExecuteArg: IPromiseFunction | IPromiseFunction[], executionModeArg?: TExecutionMode) => Transform;
export declare let forEach: (funcArg: IPromiseFunction) => Transform;
export declare let forFirst: (funcArg: IPromiseFunction) => Transform;
export declare let atEnd: (funcArg: IPromiseFunction) => Transform;
export default defaultExport;

77
dist/index.js vendored
View File

@ -1,77 +0,0 @@
"use strict";
require("typings-global");
const q = require("q");
const through2 = require("through2");
let defaultExport = (functionsToExecuteArg, executionModeArg = 'forEach') => {
let promiseArray = [];
let runFunction = function (functionArg, file, enc) {
let returnValue = functionArg(file, enc);
if (typeof returnValue !== 'undefined' && typeof returnValue.then !== 'undefined') {
promiseArray.push(returnValue);
}
};
let checkAndRunFunction = function (file, enc) {
if (typeof functionsToExecuteArg === 'function') {
runFunction(functionsToExecuteArg, file, enc);
}
else if (Array.isArray(functionsToExecuteArg)) {
for (let anyFunction in functionsToExecuteArg) {
runFunction(functionsToExecuteArg[anyFunction], file, enc);
}
}
else {
throw new Error('gulp-callfunction: something is strange with the given arguments');
}
return q.all(promiseArray);
};
let hasExecutedOnce = false;
let forEach = function (file, enc, cb) {
switch (executionModeArg) {
case 'forEach':
checkAndRunFunction(file, enc).then(function () {
cb(null, file);
});
break;
case 'forFirst':
if (hasExecutedOnce) {
checkAndRunFunction(file, enc)
.then(function () {
cb(null, file);
});
}
else {
cb(null, file);
}
hasExecutedOnce = true;
break;
case 'atEnd':
cb(null, file);
break;
default:
break;
}
};
let atEnd = function (cb) {
if (executionModeArg === 'atEnd') {
checkAndRunFunction(null, null).then(function () {
cb();
});
}
else {
cb();
}
};
return through2.obj(forEach, atEnd);
};
exports.forEach = (funcArg) => {
return defaultExport(funcArg, 'forEach');
};
exports.forFirst = (funcArg) => {
return defaultExport(funcArg, 'forFirst');
};
exports.atEnd = (funcArg) => {
return defaultExport(funcArg, 'atEnd');
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = defaultExport;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBQ3ZCLHVCQUFzQjtBQUN0QixxQ0FBb0M7QUFTcEMsSUFBSSxhQUFhLEdBQUcsQ0FDaEIscUJBQTRELEVBQzVELG1CQUFtQyxTQUFTO0lBRzVDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQTtJQUNyQixJQUFJLFdBQVcsR0FBRyxVQUFVLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRztRQUM5QyxJQUFJLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ3hDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sV0FBVyxLQUFLLFdBQVcsSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNoRixZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2xDLENBQUM7SUFDTCxDQUFDLENBQUE7SUFFRCxJQUFJLG1CQUFtQixHQUFHLFVBQVUsSUFBSSxFQUFFLEdBQUc7UUFDekMsRUFBRSxDQUFDLENBQUMsT0FBTyxxQkFBcUIsS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzlDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDakQsQ0FBQztRQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLEdBQUcsQ0FBQyxDQUFDLElBQUksV0FBVyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQztnQkFDNUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUM5RCxDQUFDO1FBQ0wsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFBO1FBQ3ZGLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUM5QixDQUFDLENBQUE7SUFFRCxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUE7SUFDM0IsSUFBSSxPQUFPLEdBQUcsVUFBVSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDakMsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLEtBQUssU0FBUztnQkFDVixtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUNoQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO2dCQUNsQixDQUFDLENBQUMsQ0FBQTtnQkFDRixLQUFLLENBQUE7WUFDVCxLQUFLLFVBQVU7Z0JBQ1gsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDbEIsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQzt5QkFDekIsSUFBSSxDQUFDO3dCQUNGLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7b0JBQ2xCLENBQUMsQ0FBQyxDQUFBO2dCQUNWLENBQUM7Z0JBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ0osRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDbEIsQ0FBQztnQkFDRCxlQUFlLEdBQUcsSUFBSSxDQUFBO2dCQUN0QixLQUFLLENBQUE7WUFDVCxLQUFLLE9BQU87Z0JBQ1IsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDZCxLQUFLLENBQUE7WUFDVDtnQkFDSSxLQUFLLENBQUE7UUFDYixDQUFDO0lBQ0wsQ0FBQyxDQUFBO0lBRUQsSUFBSSxLQUFLLEdBQUcsVUFBVSxFQUFFO1FBQ3BCLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDL0IsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDakMsRUFBRSxFQUFFLENBQUE7WUFDUixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLEVBQUUsRUFBRSxDQUFBO1FBQ1IsQ0FBQztJQUNMLENBQUMsQ0FBQTtJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUN2QyxDQUFDLENBQUE7QUFFVSxRQUFBLE9BQU8sR0FBRyxDQUFDLE9BQXlCO0lBQzNDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0FBQzVDLENBQUMsQ0FBQTtBQUVVLFFBQUEsUUFBUSxHQUFHLENBQUMsT0FBeUI7SUFDNUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUE7QUFDN0MsQ0FBQyxDQUFBO0FBRVUsUUFBQSxLQUFLLEdBQUcsQ0FBQyxPQUF5QjtJQUN6QyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUMxQyxDQUFDLENBQUE7O0FBRUQsa0JBQWUsYUFBYSxDQUFBIn0=

View File

@ -1,5 +1,10 @@
{ {
"npmts": { "npmts": {
"mode": "default" "mode": "default"
},
"npmci": {
"npmGlobalTools": [
"npmts"
]
} }
} }

4015
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,12 @@
{ {
"name": "gulp-function", "name": "gulp-function",
"version": "2.2.1", "version": "2.2.16",
"description": "accepts a function call as parameter to execute in gulp pipeline", "description": "accepts a function call as parameter to execute in gulp pipeline",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
"scripts": { "scripts": {
"test": "(npmts)", "test": "(tstest test/)",
"reinstall": "(rm -r node_modules && npm install)", "build": "(tsbuild)"
"release": "(git pull origin master && npm version patch && git push origin master && git checkout release && git merge master && git push origin release && git checkout master)",
"startdev": "(git checkout master && git pull origin master)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -17,7 +15,8 @@
"keywords": [ "keywords": [
"gulpplugin", "gulpplugin",
"gulp", "gulp",
"function" "function",
"pushrocks"
], ],
"author": "Lossless GmbH <office@lossless.com> (https://lossless.com)", "author": "Lossless GmbH <office@lossless.com> (https://lossless.com)",
"license": "MIT", "license": "MIT",
@ -26,16 +25,18 @@
}, },
"homepage": "https://gitlab.com/pushrocks/gulp-function", "homepage": "https://gitlab.com/pushrocks/gulp-function",
"dependencies": { "dependencies": {
"@types/q": "0.0.32", "@pushrocks/smartpromise": "^2.0.5",
"@types/through2": "^2.0.31", "@types/through2": "^2.0.32",
"q": "^1.4.1", "through2": "^3.0.0"
"through2": "^2.0.1",
"typings-global": "^1.0.14"
}, },
"devDependencies": { "devDependencies": {
"beautylog": "^6.0.0", "@gitzone/tsbuild": "^2.1.3",
"@gitzone/tstest": "^1.0.18",
"@pushrocks/smartgulp": "^2.0.1",
"@pushrocks/tapbundle": "^3.0.7",
"gulp": "^3.9.1", "gulp": "^3.9.1",
"npmts-g": "^5.2.8", "tslint": "^5.11.0",
"typings-test": "^1.0.3" "tslint-config-prettier": "^1.17.0"
} },
"private": true
} }

1
test/test.d.ts vendored
View File

@ -1 +0,0 @@
import 'typings-test';

View File

@ -1,102 +0,0 @@
"use strict";
require("typings-test");
let gulp = require('gulp');
const index_1 = require("../dist/index");
const beautylog = require("beautylog");
let Q = require('q');
let myFunction = function () {
let done = Q.defer();
beautylog.log('Function executed');
done.resolve();
return done.promise;
};
let myFunction2 = function () {
let done = Q.defer();
beautylog.ok('Function2 executed');
done.resolve();
return done.promise;
};
let myFunction3 = function () {
let done = Q.defer();
beautylog.success('Function3 executed');
done.resolve();
return done.promise;
};
let beforeFunction = function () {
let done = Q.defer();
beautylog.success('beforeFunction executed');
done.resolve();
return done.promise;
};
let middleFunctionRun = false;
let middleFunction = function () {
let done = Q.defer();
beautylog.success('middleFunction executed');
setTimeout(function () {
beautylog.log('timeout fired');
middleFunctionRun = true;
done.resolve();
}, 500);
return done.promise;
};
let afterFunction = function () {
let done = Q.defer();
beautylog.success('afterFunction executed');
done.resolve();
return done.promise;
};
let timeoutFunction = function () {
let done = Q.defer();
setTimeout(function () {
beautylog.log('largeTimeout fired');
done.resolve();
}, 2000);
return done.promise;
};
describe('gulpFunction', function () {
it('should run through smoothly with ' + "'forEach'", function (done) {
gulp.src('./test/*.md')
.pipe(index_1.default(myFunction, 'forEach'))
.pipe(gulp.dest('./test/result/'));
gulp.src('./test/*.md')
.pipe(index_1.default([myFunction2, myFunction3], 'forEach'))
.pipe(gulp.dest('./test/result/'))
.pipe(index_1.default(done, 'atEnd'));
});
it('should run through smoothly with ' + "'atEnd'", function (done) {
gulp.src('./test/*.md')
.pipe(index_1.default(myFunction, 'atEnd'))
.pipe(gulp.dest('./test/result/'));
gulp.src('./test/*.md')
.pipe(index_1.default([myFunction2, myFunction3], 'atEnd'))
.pipe(gulp.dest('./test/result/'))
.pipe(index_1.default(done, 'atEnd'));
});
it('should run through smoothly once with ' + "'atFirst'", function (done) {
gulp.src('./test/*.md')
.pipe(index_1.default([myFunction2, myFunction3], 'forFirst'))
.pipe(gulp.dest('./test/result/'))
.pipe(index_1.default(done, 'atEnd'));
});
it('should run in order', function (done) {
this.timeout(5000);
let stream = gulp.src('./test/*.md')
.pipe(index_1.default([beforeFunction, middleFunction, middleFunction], 'atEnd'))
.pipe(index_1.default(function () {
beautylog.log('stream progressed');
let done2 = Q.defer();
done2.resolve();
return done2.promise;
}, 'forEach'))
.pipe(index_1.default(function () {
beautylog.log('nextStep');
}))
.pipe(index_1.default(afterFunction, 'atEnd'))
.pipe(index_1.default(timeoutFunction, 'atEnd'));
stream.on('finish', function () {
beautylog.info('stream finished');
done();
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDMUIseUNBQXdDO0FBRXhDLHVDQUFzQztBQUN0QyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7QUFFcEIsSUFBSSxVQUFVLEdBQUc7SUFDYixJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7SUFDcEIsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFBO0FBQ3ZCLENBQUMsQ0FBQTtBQUNELElBQUksV0FBVyxHQUFHO0lBQ2QsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3BCLFNBQVMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtBQUN2QixDQUFDLENBQUE7QUFDRCxJQUFJLFdBQVcsR0FBRztJQUNkLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNwQixTQUFTLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7QUFDdkIsQ0FBQyxDQUFBO0FBRUQsSUFBSSxjQUFjLEdBQUc7SUFDakIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ3BCLFNBQVMsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FB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

View File

@ -1 +0,0 @@
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}

View File

@ -1,119 +1,35 @@
import 'typings-test' import { expect, tap } from '@pushrocks/tapbundle';
let gulp = require('gulp')
import gulpFunction from '../dist/index'
import * as beautylog from 'beautylog' import * as smartgulp from '@pushrocks/smartgulp';
let Q = require('q') let gulp = require('gulp');
import * as gulpFunction from '../ts/index';
let myFunction = function () { import * as smartpromise from '@pushrocks/smartpromise';
let done = Q.defer()
beautylog.log('Function executed')
done.resolve()
return done.promise
}
let myFunction2 = function () {
let done = Q.defer()
beautylog.ok('Function2 executed')
done.resolve()
return done.promise
}
let myFunction3 = function () {
let done = Q.defer()
beautylog.success('Function3 executed')
done.resolve()
return done.promise
}
let beforeFunction = function () {
let done = Q.defer()
beautylog.success('beforeFunction executed')
done.resolve()
return done.promise
}
let middleFunctionRun = false
let middleFunction = function () {
let done = Q.defer()
beautylog.success('middleFunction executed')
setTimeout(function(){
beautylog.log('timeout fired')
middleFunctionRun = true
done.resolve()
}, 500)
return done.promise
}
let afterFunction = function () {
let done = Q.defer()
beautylog.success('afterFunction executed')
done.resolve()
return done.promise
}
let timeoutFunction = function(){
let done = Q.defer()
setTimeout(function(){
beautylog.log('largeTimeout fired')
done.resolve()
},2000)
return done.promise
}
describe('gulpFunction',function(){
it('should run through smoothly with ' + "'forEach'",function(done){
gulp.src('./test/*.md')
.pipe(gulpFunction(myFunction,'forEach'))
.pipe(gulp.dest('./test/result/'))
gulp.src('./test/*.md')
.pipe(gulpFunction([myFunction2,myFunction3],'forEach'))
.pipe(gulp.dest('./test/result/'))
.pipe(gulpFunction(done,'atEnd'))
tap.test('should run through smoothly with ' + "'forEach'", async tools => {
let done = smartpromise.defer();
let counter = 0;
gulp.src('./test/testfiles/*.md').pipe(
gulpFunction.forEach(async () => {
counter++;
if (counter === 2) {
done.resolve();
}
}) })
);
await done.promise;
});
it('should run through smoothly with ' + "'atEnd'",function(done){ tap.test('should run through smoothly with ' + "'forEach'", async tools => {
gulp.src('./test/*.md') let done = smartpromise.defer();
.pipe(gulpFunction(myFunction,'atEnd')) let counter = 0;
.pipe(gulp.dest('./test/result/')) smartgulp.src(['./test/testfiles/*.md']).pipe(
gulpFunction.atEnd(async () => {
gulp.src('./test/*.md') console.log('atEnd');
.pipe(gulpFunction([myFunction2,myFunction3],'atEnd')) done.resolve();
.pipe(gulp.dest('./test/result/'))
.pipe(gulpFunction(done,'atEnd'))
}) })
);
await done.promise;
});
it('should run through smoothly once with ' + "'atFirst'",function(done){ tap.start();
gulp.src('./test/*.md')
.pipe(gulpFunction([myFunction2,myFunction3],'forFirst'))
.pipe(gulp.dest('./test/result/'))
.pipe(gulpFunction(done,'atEnd'))
})
it('should run in order',function(done){
this.timeout(5000)
let stream = gulp.src('./test/*.md')
.pipe(gulpFunction([beforeFunction,middleFunction,middleFunction],'atEnd'))
.pipe(gulpFunction(function(){
beautylog.log('stream progressed')
let done2 = Q.defer()
done2.resolve()
return done2.promise
},'forEach'))
.pipe(gulpFunction(function(){
beautylog.log('nextStep')
}))
.pipe(gulpFunction(afterFunction,'atEnd'))
.pipe(gulpFunction(timeoutFunction,'atEnd'))
stream.on('finish',function(){
beautylog.info('stream finished')
done()
})
})
})

View File

@ -1,2 +0,0 @@
# Test.md
This is a test file for the test.js gulp pipeline

View File

@ -1,2 +0,0 @@
# Test.md
This is another test file for the test.js gulp pipeline

1
test/testfiles/test01.md Normal file
View File

@ -0,0 +1 @@
# the 1st testfile

1
test/testfiles/test02.md Normal file
View File

@ -0,0 +1 @@
# the second testfile

1
test/testfiles/test03.md Normal file
View File

@ -0,0 +1 @@
# the third testfile

1
test/testfiles/test04.md Normal file
View File

@ -0,0 +1 @@
# the fourth testfile

1
test/testfiles/test05.md Normal file
View File

@ -0,0 +1 @@
# the fifth testfile

1
test/testfiles/test06.md Normal file
View File

@ -0,0 +1 @@
# the sixth testfile

1
test/testfiles/test07.md Normal file
View File

@ -0,0 +1 @@
# the seventh testfile

1
test/testfiles/test08.md Normal file
View File

@ -0,0 +1 @@
# the eighth testfile

1
test/testfiles/test09.md Normal file
View File

@ -0,0 +1 @@
# the nineth testfile

1
test/testfiles/test10.md Normal file
View File

@ -0,0 +1 @@
# the tenth testfile

1
test/testfiles/test11.md Normal file
View File

@ -0,0 +1 @@
# the eleventh testfile

1
test/testfiles/test12.md Normal file
View File

@ -0,0 +1 @@
# the twelveth testfile

1
test/testfiles/test13.md Normal file
View File

@ -0,0 +1 @@
# the second testfile

1
test/testfiles/test14.md Normal file
View File

@ -0,0 +1 @@
# the second testfile

1
test/testfiles/test15.md Normal file
View File

@ -0,0 +1 @@
# the second testfile

1
test/testfiles/test16.md Normal file
View File

@ -0,0 +1 @@
# the second testfile

1
test/testfiles/test17.md Normal file
View File

@ -0,0 +1 @@
# the second testfile

1
test/testfiles/test18.md Normal file
View File

@ -0,0 +1 @@
# the 18th testfile

View File

@ -1,89 +1,87 @@
import 'typings-global' import * as smartpromise from '@pushrocks/smartpromise';
import * as q from 'q' import * as through2 from 'through2';
import * as through2 from 'through2' import { Transform } from 'stream';
import { Transform } from 'stream'
export type TExecutionMode = 'forEach' | 'forFirst' | 'atEnd' export type TExecutionMode = 'forEach' | 'forFirst' | 'atEnd';
export interface IPromiseFunction { export interface IPromiseFunction {
(file?, enc?): PromiseLike<any> (file?, enc?): PromiseLike<any>;
} }
let defaultExport = ( let defaultExport = (
functionsToExecuteArg: IPromiseFunction | IPromiseFunction[], functionsToExecuteArg: IPromiseFunction | IPromiseFunction[],
executionModeArg: TExecutionMode = 'forEach' executionModeArg: TExecutionMode = 'forEach'
): Transform => { ): Transform => {
let promiseArray = [];
let promiseArray = [] let runFunction = function(functionArg, file, enc) {
let runFunction = function (functionArg, file, enc) { let returnValue = functionArg(file, enc);
let returnValue = functionArg(file, enc) if (typeof returnValue !== 'undefined' && typeof returnValue.then !== 'undefined') {
if (typeof returnValue !== 'undefined' && typeof returnValue.then !== 'undefined') { promiseArray.push(returnValue);
promiseArray.push(returnValue)
}
} }
};
let checkAndRunFunction = function (file, enc) { let checkAndRunFunction = function(file, enc) {
if (typeof functionsToExecuteArg === 'function') { if (typeof functionsToExecuteArg === 'function') {
runFunction(functionsToExecuteArg, file, enc) runFunction(functionsToExecuteArg, file, enc);
} else if (Array.isArray(functionsToExecuteArg)) { } else if (Array.isArray(functionsToExecuteArg)) {
for (let anyFunction in functionsToExecuteArg) { for (let anyFunction in functionsToExecuteArg) {
runFunction(functionsToExecuteArg[anyFunction], file, enc) runFunction(functionsToExecuteArg[anyFunction], file, enc);
} }
} else {
throw new Error('gulp-callfunction: something is strange with the given arguments');
}
return Promise.all(promiseArray);
};
let hasExecutedOnce = false;
let forEach = function(file, enc, cb) {
// the forEach function is called for every chunk
switch (executionModeArg) {
case 'forEach':
checkAndRunFunction(file, enc).then(function() {
cb(null, file);
});
break;
case 'forFirst':
if (hasExecutedOnce) {
checkAndRunFunction(file, enc).then(function() {
cb(null, file);
});
} else { } else {
throw new Error('gulp-callfunction: something is strange with the given arguments') cb(null, file);
} }
return q.all(promiseArray) hasExecutedOnce = true;
break;
case 'atEnd':
cb();
break;
default:
break;
} }
};
let hasExecutedOnce = false let atEnd = function(cb) {
let forEach = function (file, enc, cb) { // the forEach function is called for every chunk if (executionModeArg === 'atEnd') {
switch (executionModeArg) { checkAndRunFunction(null, null).then(function() {
case 'forEach': cb();
checkAndRunFunction(file, enc).then(function () { });
cb(null, file) } else {
}) cb();
break
case 'forFirst':
if (hasExecutedOnce) {
checkAndRunFunction(file, enc)
.then(function () {
cb(null, file)
})
} else {
cb(null, file)
}
hasExecutedOnce = true
break
case 'atEnd':
cb(null, file)
break
default:
break
}
} }
};
let atEnd = function (cb) { return through2.obj(forEach, atEnd);
if (executionModeArg === 'atEnd') { };
checkAndRunFunction(null, null).then(function () {
cb()
})
} else {
cb()
}
}
return through2.obj(forEach, atEnd)
}
export let forEach = (funcArg: IPromiseFunction) => { export let forEach = (funcArg: IPromiseFunction) => {
return defaultExport(funcArg, 'forEach') return defaultExport(funcArg, 'forEach');
} };
export let forFirst = (funcArg: IPromiseFunction) => { export let forFirst = (funcArg: IPromiseFunction) => {
return defaultExport(funcArg, 'forFirst') return defaultExport(funcArg, 'forFirst');
} };
export let atEnd = (funcArg: IPromiseFunction) => { export let atEnd = (funcArg: IPromiseFunction) => {
return defaultExport(funcArg, 'atEnd') return defaultExport(funcArg, 'atEnd');
} };
export default defaultExport export default defaultExport;

View File

@ -1,3 +1,17 @@
{ {
"extends": "tslint-config-standard" "extends": ["tslint:latest", "tslint-config-prettier"],
"rules": {
"semicolon": [true, "always"],
"no-console": false,
"ordered-imports": false,
"object-literal-sort-keys": false,
"member-ordering": {
"options":{
"order": [
"static-method"
]
}
}
},
"defaultSeverity": "warning"
} }