simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

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;