AsyncSeriesWaterfallHook.js (1261B)
1 /* 2 MIT License http://www.opensource.org/licenses/mit-license.php 3 Author Tobias Koppers @sokra 4 */ 5 "use strict"; 6 7 const Hook = require("./Hook"); 8 const HookCodeFactory = require("./HookCodeFactory"); 9 10 class AsyncSeriesWaterfallHookCodeFactory extends HookCodeFactory { 11 content({ onError, onResult, onDone }) { 12 return this.callTapsSeries({ 13 onError: (i, err, next, doneBreak) => onError(err) + doneBreak(true), 14 onResult: (i, result, next) => { 15 let code = ""; 16 code += `if(${result} !== undefined) {\n`; 17 code += `${this._args[0]} = ${result};\n`; 18 code += `}\n`; 19 code += next(); 20 return code; 21 }, 22 onDone: () => onResult(this._args[0]) 23 }); 24 } 25 } 26 27 const factory = new AsyncSeriesWaterfallHookCodeFactory(); 28 29 const COMPILE = function(options) { 30 factory.setup(this, options); 31 return factory.create(options); 32 }; 33 34 function AsyncSeriesWaterfallHook(args = [], name = undefined) { 35 if (args.length < 1) 36 throw new Error("Waterfall hooks must have at least one argument"); 37 const hook = new Hook(args, name); 38 hook.constructor = AsyncSeriesWaterfallHook; 39 hook.compile = COMPILE; 40 hook._call = undefined; 41 hook.call = undefined; 42 return hook; 43 } 44 45 AsyncSeriesWaterfallHook.prototype = null; 46 47 module.exports = AsyncSeriesWaterfallHook;