diff --git a/index.d.ts b/index.d.ts index 3df7276..345f2fd 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,4 +1,6 @@ /// -declare var through: any; -declare var path: any; -declare var beautylog: any; +declare var plugins: { + beautylog: any; + Q: any; + through: any; +}; diff --git a/index.js b/index.js index ccc50ed..136d768 100644 --- a/index.js +++ b/index.js @@ -1,41 +1,57 @@ #!/usr/bin/env node /// -var through = require("through2"); -var path = require("path"); -var beautylog = require("beautylog"); +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 gulpFunction = { - executionMode: executionModeArg, - functionsToExecute: functionsToExecuteArg - }; - var runFunctionNames = function () { - if (typeof gulpFunction.functionsToExecute === "function") { - gulpFunction.functionsToExecute(); + 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); } - else if (Array.isArray(gulpFunction.functionsToExecute)) { - for (var anyFunction in gulpFunction.functionsToExecute) { - gulpFunction.functionsToExecute[anyFunction](); + }; + var checkAndRunFunction = function () { + if (typeof functionsToExecute === "function") { + runFunction(functionsToExecute); + } + else if (Array.isArray(functionsToExecute)) { + for (var anyFunction in functionsToExecute) { + runFunction(functionsToExecute[anyFunction]); } } else { - beautylog.error('gulp-callfunction: something is strange with the given arguments'); + plugins.beautylog.error('gulp-callfunction: something is strange with the given arguments'); } + return plugins.Q.all(promiseArray); }; var forEach = function (file, enc, cb) { - if (gulpFunction.executionMode === 'forEach') { - runFunctionNames(); + if (executionMode === 'forEach') { + checkAndRunFunction().then(function () { + cb(null, file); + }); + } + else { + cb(null, file); } //tell gulp that we are complete - return cb(null, file); }; var atEnd = function (cb) { - if (gulpFunction.executionMode === "atEnd") { - runFunctionNames(); + if (executionMode === "atEnd") { + checkAndRunFunction().then(function () { + cb(); + }); + } + else { + cb(); } - cb(); }; - return through.obj(forEach, atEnd); + return plugins.through.obj(forEach, atEnd); }; diff --git a/package.json b/package.json index 125e988..b4d5a8d 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,9 @@ }, "homepage": "https://github.com/pushrocks/gulp-function", "dependencies": { - "beautylog": "2.1.1", - "through2": "2.0.1" + "beautylog": "^2.1.1", + "q": "^1.4.1", + "through2": "^2.0.1" }, "devDependencies": { "gulp": "^3.9.1", diff --git a/test/test.d.ts b/test/test.d.ts index 6365bab..881b555 100644 --- a/test/test.d.ts +++ b/test/test.d.ts @@ -2,5 +2,7 @@ declare var gulp: any; declare var gulpFunction: any; declare var beautylog: any; -declare var myFunction: () => void; -declare var myFunction2: () => void; +declare var Q: any; +declare var myFunction: () => any; +declare var myFunction2: () => any; +declare var myFunction3: () => any; diff --git a/test/test.js b/test/test.js index 7937a8d..07b4b60 100644 --- a/test/test.js +++ b/test/test.js @@ -4,27 +4,42 @@ 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 () { - beautylog.log("Function2 executed"); + 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 () { + 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([myFunction, myFunction2], 'forEach')) - .pipe(gulp.dest("./test/result/")); + .pipe(gulpFunction([myFunction2, myFunction3], 'forEach')) + .pipe(gulp.dest("./test/result/")) + .pipe(gulpFunction(done, "atEnd")); }); - it("should run through smoothly with " + "'atEnd'".blue, function () { + 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([myFunction, myFunction2], 'atEnd')) - .pipe(gulp.dest("./test/result/")); + .pipe(gulpFunction([myFunction2, myFunction3], 'atEnd')) + .pipe(gulp.dest("./test/result/")) + .pipe(gulpFunction(done, "atEnd")); }); }); diff --git a/ts/index.ts b/ts/index.ts index 15b1e15..ee9ee42 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1,42 +1,60 @@ /// -var through = require("through2"); -var path = require("path"); -var beautylog = require("beautylog"); + +var plugins = { + beautylog: require("beautylog"), + Q: require("q"), + through: require("through2") +} + + module.exports = function (functionsToExecuteArg:any|any[],executionModeArg:string = 'forEach') { //important vars - var gulpFunction = { - executionMode: executionModeArg, //can be forEach or atEnd - functionsToExecute: functionsToExecuteArg + 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 runFunctionNames = function () { - if (typeof gulpFunction.functionsToExecute === "function" ) { - gulpFunction.functionsToExecute(); - } else if (Array.isArray(gulpFunction.functionsToExecute)) { - for (var anyFunction in gulpFunction.functionsToExecute) { - gulpFunction.functionsToExecute[anyFunction](); + var checkAndRunFunction = function () { + if (typeof functionsToExecute === "function" ) { + runFunction(functionsToExecute); + } else if (Array.isArray(functionsToExecute)) { + for (var anyFunction in functionsToExecute) { + runFunction(functionsToExecute[anyFunction]); } } else { - beautylog.error('gulp-callfunction: something is strange with the given arguments'); + plugins.beautylog.error('gulp-callfunction: something is strange with the given arguments'); } + return plugins.Q.all(promiseArray); }; var forEach = function (file, enc, cb) { - if (gulpFunction.executionMode === 'forEach') { - runFunctionNames(); + if (executionMode === 'forEach') { + checkAndRunFunction().then(function(){ + cb(null, file); + }); + } else { + cb(null, file); } //tell gulp that we are complete - return cb(null, file); + }; var atEnd = function(cb) { - if (gulpFunction.executionMode === "atEnd") { - runFunctionNames(); + if (executionMode === "atEnd") { + checkAndRunFunction().then(function(){ + cb(); + }); + } else { + cb(); } - cb(); }; - return through.obj(forEach,atEnd); + return plugins.through.obj(forEach,atEnd); }; diff --git a/ts/test.ts b/ts/test.ts index 56540e6..178c15e 100644 --- a/ts/test.ts +++ b/ts/test.ts @@ -2,32 +2,49 @@ 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 () { - beautylog.log("Function2 executed"); + 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(){ + 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([myFunction,myFunction2],'forEach')) - .pipe(gulp.dest("./test/result/")); + .pipe(gulpFunction([myFunction2,myFunction3],'forEach')) + .pipe(gulp.dest("./test/result/")) + .pipe(gulpFunction(done,"atEnd")); }); - it("should run through smoothly with " + "'atEnd'".blue,function(){ + 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([myFunction,myFunction2],'atEnd')) - .pipe(gulp.dest("./test/result/")); + .pipe(gulpFunction([myFunction2,myFunction3],'atEnd')) + .pipe(gulp.dest("./test/result/")) + .pipe(gulpFunction(done,"atEnd")); }); });