Compare commits

...

42 Commits

Author SHA1 Message Date
1008c3f103 3.0.1 2018-12-09 01:34:30 +01:00
c366bde211 fix(npm): permissions 2018-12-09 01:34:30 +01:00
e22c6764b7 3.0.0 2018-12-09 01:27:25 +01:00
50836eab06 BREAKING CHANGE(npm scope): update 2018-12-09 01:27:24 +01:00
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
c208f04e23 2.2.1 2016-11-25 11:19:16 +01:00
54d8ef2576 fixed .forEach return 2016-11-25 11:19:12 +01:00
8b891c74e4 2.2.0 2016-10-19 07:36:42 +02:00
1d8de68a66 add .forEach .atEnd .forFirst 2016-10-19 07:36:32 +02:00
a2b37a066d 2.1.0 2016-10-19 01:11:06 +02:00
8a2c516274 switched to ES6 default import 2016-10-19 01:10:45 +02:00
35 changed files with 4312 additions and 442 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,59 +1,62 @@
# 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/)
[![Known Vulnerabilities](https://snyk.io/test/npm/{name}/badge.svg)](https://snyk.io/test/npm/@pushrocks/gulp-function)
### Usage ### Usage
```javascript
let gulp = require("gulp");
let gulpFunction = require("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 ```typescript
let done = Q.defer(); import gulp = require('gulp');
console.log("Hello World!") import gulpFunction from 'gulp-function'; // default ES6 export
// import {forFirst, forEach, atEnd} from 'gulp-function'
// 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() { let myAsyncFunction = async (file, enc) => {
let stream = gulp.src('./mydir/*.something') // await some async stuff
.pipe(gulpFunction(myFunction,'forEach')) //read the notes below };
.pipe(gulp.dest("./build/"));
return stream; // by returning the stream gulp knows when our task has finished. gulp.task('gulpTest', function() {
let stream = gulp
.src('./mydir/*.something')
.pipe(gulpFunction(myAsyncFunction, 'forEach')) //read the notes below
// .pipe(forEach(myAsyncFunction)) // if imported as >> import { forEach } from 'gulp-function' <<
.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)

5
dist/index.d.ts vendored
View File

@ -1,5 +0,0 @@
import 'typings-global';
export declare type TExecutionMode = 'forEach' | 'forFirst' | 'atEnd';
export interface IPromiseFunction {
(file?: any, enc?: any): PromiseLike<any>;
}

66
dist/index.js vendored
View File

@ -1,66 +0,0 @@
"use strict";
require("typings-global");
const q = require("q");
const through2 = require("through2");
module.exports = (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);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsMEJBQXVCO0FBQ3ZCLHVCQUFzQjtBQUN0QixxQ0FBb0M7QUFTcEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUNiLHFCQUE0RCxFQUM1RCxnQkFBZ0IsR0FBbUIsU0FBUztJQUc1QyxJQUFJLFlBQVksR0FBRyxFQUFFLENBQUE7SUFDckIsSUFBSSxXQUFXLEdBQUcsVUFBVSxXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUc7UUFDOUMsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN4QyxFQUFFLENBQUMsQ0FBQyxPQUFPLFdBQVcsS0FBSyxXQUFXLElBQUksT0FBTyxXQUFXLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNsQyxDQUFDO0lBQ0wsQ0FBQyxDQUFBO0lBRUQsSUFBSSxtQkFBbUIsR0FBRyxVQUFVLElBQUksRUFBRSxHQUFHO1FBQ3pDLEVBQUUsQ0FBQyxDQUFDLE9BQU8scUJBQXFCLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5QyxXQUFXLENBQUMscUJBQXFCLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ2pELENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxHQUFHLENBQUMsQ0FBQyxJQUFJLFdBQVcsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDOUQsQ0FBQztRQUNMLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLE1BQU0sSUFBSSxLQUFLLENBQUMsa0VBQWtFLENBQUMsQ0FBQTtRQUN2RixDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDOUIsQ0FBQyxDQUFBO0lBRUQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFBO0lBQzNCLElBQUksT0FBTyxHQUFHLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pDLE1BQU0sQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN2QixLQUFLLFNBQVM7Z0JBQ1YsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDaEMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQTtnQkFDbEIsQ0FBQyxDQUFDLENBQUE7Z0JBQ0YsS0FBSyxDQUFBO1lBQ1QsS0FBSyxVQUFVO2dCQUNYLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xCLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7eUJBQ3pCLElBQUksQ0FBQzt3QkFDRixFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO29CQUNsQixDQUFDLENBQUMsQ0FBQTtnQkFDVixDQUFDO2dCQUFDLElBQUksQ0FBQyxDQUFDO29CQUNKLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2xCLENBQUM7Z0JBQ0QsZUFBZSxHQUFHLElBQUksQ0FBQTtnQkFDdEIsS0FBSyxDQUFBO1lBQ1QsS0FBSyxPQUFPO2dCQUNSLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ2QsS0FBSyxDQUFBO1lBQ1Q7Z0JBQ0ksS0FBSyxDQUFBO1FBQ2IsQ0FBQztJQUNMLENBQUMsQ0FBQTtJQUVELElBQUksS0FBSyxHQUFHLFVBQVUsRUFBRTtRQUNwQixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQy9CLG1CQUFtQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLEVBQUUsRUFBRSxDQUFBO1lBQ1IsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixFQUFFLEVBQUUsQ0FBQTtRQUNSLENBQUM7SUFDTCxDQUFDLENBQUE7SUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7QUFDdkMsQ0FBQyxDQUFBIn0=

View File

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

4015
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +1,13 @@
{ {
"name": "gulp-function", "name": "@pushrocks/gulp-function",
"version": "2.0.2", "private": false,
"version": "3.0.1",
"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 +16,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 +26,17 @@
}, },
"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"
} }
} }

1
test/test.d.ts vendored
View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

@ -1,118 +1,35 @@
import "typings-test" import { expect, tap } from '@pushrocks/tapbundle';
var gulp = require("gulp");
var gulpFunction = require("../dist/index.js");
var beautylog = require("beautylog");
var Q = require("q");
var myFunction = function () { import * as smartgulp from '@pushrocks/smartgulp';
var done = Q.defer() let gulp = require('gulp');
beautylog.log("Function executed"); import * as gulpFunction from '../ts/index';
done.resolve();
return done.promise;
};
var myFunction2 = function () {
var done = Q.defer();
beautylog.ok("Function2 executed");
done.resolve();
return done.promise;
};
var myFunction3 = function () {
var done = Q.defer();
beautylog.success("Function3 executed");
done.resolve();
return done.promise;
};
var beforeFunction = function () { import * as smartpromise from '@pushrocks/smartpromise';
var done = Q.defer();
beautylog.success("beforeFunction executed");
done.resolve();
return done.promise;
};
var middleFunctionRun = false; tap.test('should run through smoothly with ' + "'forEach'", async tools => {
let done = smartpromise.defer();
var middleFunction = function () { let counter = 0;
var done = Q.defer(); gulp.src('./test/testfiles/*.md').pipe(
beautylog.success("middleFunction executed"); gulpFunction.forEach(async () => {
setTimeout(function(){ counter++;
beautylog.log("timeout fired"); if (counter === 2) {
middleFunctionRun = true;
done.resolve(); done.resolve();
}, 500); }
return done.promise; })
}; );
await done.promise;
var afterFunction = function () {
var done = Q.defer();
beautylog.success("afterFunction executed");
done.resolve();
return done.promise;
};
let timeoutFunction = function(){
var 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'".blue,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"));
});
it("should run through smoothly with " + "'atEnd'".blue,function(done){
gulp.src('./test/*.md')
.pipe(gulpFunction(myFunction,'atEnd'))
.pipe(gulp.dest("./test/result/"));
gulp.src('./test/*.md')
.pipe(gulpFunction([myFunction2,myFunction3],'atEnd'))
.pipe(gulp.dest("./test/result/"))
.pipe(gulpFunction(done,"atEnd"));
});
it("should run through smoothly once with " + "'atFirst'".blue,function(done){
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");
var 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();
});
});
}); });
tap.test('should run through smoothly with ' + "'forEach'", async tools => {
let done = smartpromise.defer();
let counter = 0;
smartgulp.src(['./test/testfiles/*.md']).pipe(
gulpFunction.atEnd(async () => {
console.log('atEnd');
done.resolve();
})
);
await done.promise;
});
tap.start();

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,75 +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>;
} }
module.exports = ( 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
}
} }
};
return through2.obj(forEach, atEnd);
};
let atEnd = function (cb) { export let forEach = (funcArg: IPromiseFunction) => {
if (executionModeArg === 'atEnd') { return defaultExport(funcArg, 'forEach');
checkAndRunFunction(null, null).then(function () { };
cb()
}) export let forFirst = (funcArg: IPromiseFunction) => {
} else { return defaultExport(funcArg, 'forFirst');
cb() };
}
} export let atEnd = (funcArg: IPromiseFunction) => {
return through2.obj(forEach, atEnd) return defaultExport(funcArg, 'atEnd');
} };
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"
} }