added forFirst
This commit is contained in:
parent
5a9cd96bed
commit
71bdcce41d
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@ node_modules/
|
||||
.settings/
|
||||
.idea/
|
||||
coverage/
|
||||
docs/
|
||||
|
||||
ts/*.js
|
||||
ts/*.js.map
|
||||
|
@ -40,4 +40,4 @@ gulp.task('gulpTest',function() {
|
||||
|
||||
> Note: 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.
|
||||
> Note: the second argument can be empty (defaults to 'forEach') or 'atEnd'
|
||||
> Note: the second argument can be empty, "forEach" (default), "forFirst" or "atEnd";
|
67
dist/index.js
vendored
Normal file
67
dist/index.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6
index.d.ts
vendored
6
index.d.ts
vendored
@ -1,6 +0,0 @@
|
||||
/// <reference path="ts/typings/main.d.ts" />
|
||||
declare var plugins: {
|
||||
beautylog: any;
|
||||
Q: any;
|
||||
through: any;
|
||||
};
|
57
index.js
57
index.js
@ -1,57 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/// <reference path="typings/main.d.ts" />
|
||||
var plugins = {
|
||||
beautylog: require("beautylog"),
|
||||
Q: require("q"),
|
||||
through: require("through2")
|
||||
};
|
||||
module.exports = function (functionsToExecuteArg, executionModeArg) {
|
||||
if (executionModeArg === void 0) { executionModeArg = 'forEach'; }
|
||||
//important vars
|
||||
var executionMode = executionModeArg; //can be forEach or atEnd
|
||||
var functionsToExecute = functionsToExecuteArg;
|
||||
var promiseArray = [];
|
||||
var runFunction = function (functionArg) {
|
||||
var returnValue = functionArg();
|
||||
if (typeof returnValue !== "undefined" && typeof returnValue.then !== "undefined") {
|
||||
promiseArray.push(returnValue);
|
||||
}
|
||||
};
|
||||
var checkAndRunFunction = function () {
|
||||
if (typeof functionsToExecute === "function") {
|
||||
runFunction(functionsToExecute);
|
||||
}
|
||||
else if (Array.isArray(functionsToExecute)) {
|
||||
for (var anyFunction in functionsToExecute) {
|
||||
runFunction(functionsToExecute[anyFunction]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
plugins.beautylog.error('gulp-callfunction: something is strange with the given arguments');
|
||||
}
|
||||
return plugins.Q.all(promiseArray);
|
||||
};
|
||||
var forEach = function (file, enc, cb) {
|
||||
if (executionMode === 'forEach') {
|
||||
checkAndRunFunction().then(function () {
|
||||
cb(null, file);
|
||||
});
|
||||
}
|
||||
else {
|
||||
cb(null, file);
|
||||
}
|
||||
//tell gulp that we are complete
|
||||
};
|
||||
var atEnd = function (cb) {
|
||||
if (executionMode === "atEnd") {
|
||||
checkAndRunFunction().then(function () {
|
||||
cb();
|
||||
});
|
||||
}
|
||||
else {
|
||||
cb();
|
||||
}
|
||||
};
|
||||
return plugins.through.obj(forEach, atEnd);
|
||||
};
|
@ -2,7 +2,7 @@
|
||||
"name": "gulp-function",
|
||||
"version": "1.1.1",
|
||||
"description": "accepts a function call as parameter to execute in gulp pipeline",
|
||||
"main": "index.js",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
"test": "(npmts)",
|
||||
"reinstall": "(rm -r node_modules && npm install)",
|
||||
@ -18,19 +18,19 @@
|
||||
"gulp",
|
||||
"function"
|
||||
],
|
||||
"author": "Smart Coordination GmbH <office@push.rocks> (https://push.rocks)",
|
||||
"author": "Lossless GmbH <office@lossless.com> (https://lossless.com)",
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/pushrocks/gulp-function/issues"
|
||||
},
|
||||
"homepage": "https://github.com/pushrocks/gulp-function",
|
||||
"dependencies": {
|
||||
"beautylog": "^2.1.1",
|
||||
"beautylog": "^3.1.2",
|
||||
"q": "^1.4.1",
|
||||
"through2": "^2.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"gulp": "^3.9.1",
|
||||
"npmts": "^2.2.3"
|
||||
"npmts": "^3.6.4"
|
||||
}
|
||||
}
|
||||
|
8
test/test.d.ts
vendored
8
test/test.d.ts
vendored
@ -1,8 +0,0 @@
|
||||
/// <reference path="ts/typings/main.d.ts" />
|
||||
declare var gulp: any;
|
||||
declare var gulpFunction: any;
|
||||
declare var beautylog: any;
|
||||
declare var Q: any;
|
||||
declare var myFunction: () => any;
|
||||
declare var myFunction2: () => any;
|
||||
declare var myFunction3: () => any;
|
65
test/test.js
65
test/test.js
File diff suppressed because one or more lines are too long
1
test/test.js.map
Normal file
1
test/test.js.map
Normal file
@ -0,0 +1 @@
|
||||
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
|
118
test/test.ts
Normal file
118
test/test.ts
Normal file
@ -0,0 +1,118 @@
|
||||
/// <reference path="../ts/typings/main.d.ts" />
|
||||
var gulp = require("gulp");
|
||||
var gulpFunction = require("../dist/index.js");
|
||||
var beautylog = require("beautylog");
|
||||
var Q = require("q");
|
||||
|
||||
var myFunction = function () {
|
||||
var done = Q.defer()
|
||||
beautylog.log("Function executed");
|
||||
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 () {
|
||||
var done = Q.defer();
|
||||
beautylog.success("beforeFunction executed");
|
||||
done.resolve();
|
||||
return done.promise;
|
||||
};
|
||||
|
||||
var middleFunctionRun = false;
|
||||
|
||||
var middleFunction = function () {
|
||||
var done = Q.defer();
|
||||
beautylog.success("middleFunction executed");
|
||||
setTimeout(function(){
|
||||
beautylog.log("timeout fired");
|
||||
middleFunctionRun = true;
|
||||
done.resolve();
|
||||
}, 500);
|
||||
return 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();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
43
ts/index.ts
43
ts/index.ts
@ -11,21 +11,21 @@ var plugins = {
|
||||
|
||||
module.exports = function (functionsToExecuteArg:any|any[],executionModeArg:string = 'forEach') {
|
||||
//important vars
|
||||
var executionMode = executionModeArg; //can be forEach or atEnd
|
||||
var functionsToExecute = functionsToExecuteArg;
|
||||
var promiseArray = [];
|
||||
var runFunction = function(functionArg){
|
||||
var returnValue = functionArg();
|
||||
let executionMode = executionModeArg; //can be forEach or atEnd
|
||||
let functionsToExecute = functionsToExecuteArg;
|
||||
let promiseArray = [];
|
||||
let runFunction = function(functionArg){
|
||||
let returnValue = functionArg();
|
||||
if (typeof returnValue !== "undefined" && typeof returnValue.then !== "undefined") {
|
||||
promiseArray.push(returnValue);
|
||||
}
|
||||
};
|
||||
|
||||
var checkAndRunFunction = function () {
|
||||
let checkAndRunFunction = function () {
|
||||
if (typeof functionsToExecute === "function" ) {
|
||||
runFunction(functionsToExecute);
|
||||
} else if (Array.isArray(functionsToExecute)) {
|
||||
for (var anyFunction in functionsToExecute) {
|
||||
for (let anyFunction in functionsToExecute) {
|
||||
runFunction(functionsToExecute[anyFunction]);
|
||||
}
|
||||
} else {
|
||||
@ -34,20 +34,29 @@ module.exports = function (functionsToExecuteArg:any|any[],executionModeArg:stri
|
||||
return plugins.Q.all(promiseArray);
|
||||
};
|
||||
|
||||
|
||||
var forEach = function (file, enc, cb) {
|
||||
if (executionMode === 'forEach') {
|
||||
checkAndRunFunction().then(function(){
|
||||
let hasExecutedOnce = false;
|
||||
let forEach = function (file, enc, cb) { //the forEach function is called for every chunk
|
||||
switch (executionMode){
|
||||
case "forEach":
|
||||
checkAndRunFunction().then(function(){
|
||||
cb(null, file);
|
||||
});
|
||||
break;
|
||||
case "forFirst":
|
||||
!hasExecutedOnce ? checkAndRunFunction().then(function(){
|
||||
cb(null, file);
|
||||
}) : cb(null, file);
|
||||
hasExecutedOnce = true;
|
||||
break;
|
||||
case "atEnd":
|
||||
cb(null, file);
|
||||
});
|
||||
} else {
|
||||
cb(null, file);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
//tell gulp that we are complete
|
||||
|
||||
};
|
||||
|
||||
var atEnd = function(cb) {
|
||||
let atEnd = function(cb) {
|
||||
if (executionMode === "atEnd") {
|
||||
checkAndRunFunction().then(function(){
|
||||
cb();
|
||||
|
50
ts/test.ts
50
ts/test.ts
@ -1,50 +0,0 @@
|
||||
/// <reference path="typings/main.d.ts" />
|
||||
var gulp = require("gulp");
|
||||
var gulpFunction = require("../index.js");
|
||||
var beautylog = require("beautylog");
|
||||
var Q = require("q");
|
||||
|
||||
var myFunction = function () {
|
||||
var done = Q.defer()
|
||||
beautylog.log("Function executed");
|
||||
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;
|
||||
};
|
||||
|
||||
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"));
|
||||
});
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user