pax_global_header00006660000000000000000000000064132434736520014523gustar00rootroot0000000000000052 comment=f2718e63bfede29cbc81cda3ee79a6933ec5af8d tapable-1.0.0/000077500000000000000000000000001324347365200131315ustar00rootroot00000000000000tapable-1.0.0/.babelrc000066400000000000000000000001211324347365200145160ustar00rootroot00000000000000{ "presets": [ ["env", { "targets": { "node": "current" } }] ] } tapable-1.0.0/.editorconfig000066400000000000000000000005321324347365200156060ustar00rootroot00000000000000root = true [*] indent_style = tab indent_size = 4 charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true max_line_length = 233 [*.json] indent_style = space indent_size = 2 [*.yml] indent_style = space indent_size = 2 [test/cases/parsing/bom/bomfile.{css,js}] charset = utf-8-bom [*.md] trim_trailing_whitespace = falsetapable-1.0.0/.eslintrc000066400000000000000000000004411324347365200147540ustar00rootroot00000000000000{ "env": { "node": true }, "rules": { "strict": 0, "curly": 0, "eol-last": 1, "no-shadow": 0, "no-redeclare": 1, "no-extra-bind": 1, "no-underscore-dangle": 0, "no-use-before-define": 0, "consistent-return": 0, "no-inner-declarations": 1, "no-loop-func": 1 } } tapable-1.0.0/.gitattributes000066400000000000000000000000141324347365200160170ustar00rootroot00000000000000* text=auto tapable-1.0.0/.gitignore000066400000000000000000000002071324347365200151200ustar00rootroot00000000000000/node_modules /coverage ############ ## Windows ############ # Windows image file caches Thumbs.db # Folder config file Desktop.ini tapable-1.0.0/.travis.yml000066400000000000000000000001301324347365200152340ustar00rootroot00000000000000sudo: false language: node_js node_js: - "8" - "6" - "4" script: yarn run travis tapable-1.0.0/README.md000066400000000000000000000137751324347365200144250ustar00rootroot00000000000000# Tapable The tapable packages exposes many Hook classes, which can be used to create hooks for plugins. ``` javascript const { SyncHook, SyncBailHook, SyncWaterfallHook, SyncLoopHook, AsyncParallelHook, AsyncParallelBailHook, AsyncSeriesHook, AsyncSeriesBailHook, AsyncSeriesWaterfallHook } = require("tapable"); ``` ## Usage All Hook constructors take one optional argument, which is a list of argument names as strings. ``` js const hook = new SyncHook(["arg1", "arg2", "arg3"]); ``` The best practice is to expose all hooks of a class in a `hooks` property: ``` js class Car { constructor() { this.hooks = { accelerate: new SyncHook(["newSpeed"]), break: new SyncHook(), calculateRoutes: new AsyncParallelHook(["source", "target", "routesList"]) }; } /* ... */ } ``` Other people can now use these hooks: ``` js const myCar = new Car(); // Use the tap method to add a consument myCar.hooks.break.tap("WarningLampPlugin", () => warningLamp.on()); ``` It's required to pass a name to identify the plugin/reason. You may receive arguments: ``` js myCar.hooks.accelerate.tap("LoggerPlugin", newSpeed => console.log(`Accelerating to ${newSpeed}`)); ``` For sync hooks `tap` is the only valid method to add a plugin. Async hooks also support async plugins: ``` js myCar.hooks.calculateRoutes.tapPromise("GoogleMapsPlugin", (source, target, routesList) => { // return a promise return google.maps.findRoute(source, target).then(route => { routesList.add(route); }); }); myCar.hooks.calculateRoutes.tapAsync("BingMapsPlugin", (source, target, routesList, callback) => { bing.findRoute(source, target, (err, route) => { if(err) return callback(err); routesList.add(route); // call the callback callback(); }); }); // You can still use sync plugins myCar.hooks.calculateRoutes.tap("CachedRoutesPlugin", (source, target, routesList) => { const cachedRoute = cache.get(source, target); if(cachedRoute) routesList.add(cachedRoute); }) ``` The class declaring these hooks need to call them: ``` js class Car { /* ... */ setSpeed(newSpeed) { this.hooks.accelerate.call(newSpeed); } useNavigationSystemPromise(source, target) { const routesList = new List(); return this.hooks.calculateRoutes.promise(source, target, routesList).then(() => { return routesList.getRoutes(); }); } useNavigationSystemAsync(source, target, callback) { const routesList = new List(); this.hooks.calculateRoutes.callAsync(source, target, routesList, err => { if(err) return callback(err); callback(null, routesList.getRoutes()); }); } } ``` The Hook will compile a method with the most efficient way of running your plugins. It generates code depending on: * The number of registered plugins (none, one, many) * The kind of registered plugins (sync, async, promise) * The used call method (sync, async, promise) * The number of arguments * Whether interception is used This ensures fastest possible execution. ## Interception All Hooks offer an additional interception API: ``` js myCar.hooks.calculateRoutes.intercept({ call: (source, target, routesList) => { console.log("Starting to calculate routes"); }, tap: (tapInfo) => { // tapInfo = { type: "promise", name: "GoogleMapsPlugin", fn: ... } console.log(`${tapInfo.name} is doing it's job`); return tapInfo; // may return a new tapInfo object } }) ``` **call**: `(...args) => void` Adding `call` to your interceptor will trigger when hooks are triggered. You have access to the hooks arguments. **tap**: `(tap: Tap) => void` Adding `tap` to your interceptor will trigger when a plugin taps into a hook. Provided is the `Tap` object. `Tap` object can't be changed. **loop**: `(...args) => void` Adding `loop` to your interceptor will trigger for each loop of a looping hook. **register**: `(tap: Tap) => Tap | undefined` Adding `register` to your interceptor will trigger for each added `Tap` and allows to modify it. ## HookMap A HookMap is a helper class for a Map with Hooks ``` js const keyedHook = new HookMap(key => new SyncHook(["arg"])) ``` ``` js keyedHook.tap("some-key", "MyPlugin", (arg) => { /* ... */ }); keyedHook.tapAsync("some-key", "MyPlugin", (arg, callback) => { /* ... */ }); keyedHook.tapPromise("some-key", "MyPlugin", (arg) => { /* ... */ }); ``` ``` js const hook = keyedHook.get("some-key"); if(hook !== undefined) { hook.callAsync("arg", err => { /* ... */ }); } ``` ## Hook/HookMap interface Public: ``` ts interface Hook { tap: (name: string | Tap, fn: (context?, ...args) => Result) => void, tapAsync: (name: string | Tap, fn: (context?, ...args, callback: (err, result: Result) => void) => void) => void, tapPromise: (name: string | Tap, fn: (context?, ...args) => Promise) => void, intercept: (interceptor: HookInterceptor) => void } interface HookInterceptor { call: (context?, ...args) => void, loop: (context?, ...args) => void, tap: (context?, tap: Tap) => void, register: (tap: Tap) => Tap, context: boolean } interface HookMap { for: (key: any) => Hook, tap: (key: any, name: string | Tap, fn: (context?, ...args) => Result) => void, tapAsync: (key: any, name: string | Tap, fn: (context?, ...args, callback: (err, result: Result) => void) => void) => void, tapPromise: (key: any, name: string | Tap, fn: (context?, ...args) => Promise) => void, intercept: (interceptor: HookMapInterceptor) => void } interface HookMapInterceptor { factory: (key: any, hook: Hook) => Hook } interface Tap { name: string, type: string fn: Function, stage: number, context: boolean } ``` Protected (only for the class containing the hook): ``` ts interface Hook { isUsed: () => boolean, call: (...args) => Result, promise: (...args) => Promise, callAsync: (...args, callback: (err, result: Result) => void) => void, } interface HookMap { get: (key: any) => Hook | undefined, for: (key: any) => Hook } ``` ## MultiHook A helper Hook-like class to redirect taps to multiple other hooks: ``` js const { MultiHook } = require("tapable"); this.hooks.allHooks = new MultiHook([this.hooks.hookA, this.hooks.hookB]); ``` tapable-1.0.0/lib/000077500000000000000000000000001324347365200136775ustar00rootroot00000000000000tapable-1.0.0/lib/AsyncParallelBailHook.js000066400000000000000000000041741324347365200204060ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class AsyncParallelBailHookCodeFactory extends HookCodeFactory { content({ onError, onResult, onDone }) { let code = ""; code += `var _results = new Array(${this.options.taps.length});\n`; code += "var _checkDone = () => {\n"; code += "for(var i = 0; i < _results.length; i++) {\n"; code += "var item = _results[i];\n"; code += "if(item === undefined) return false;\n"; code += "if(item.result !== undefined) {\n"; code += onResult("item.result"); code += "return true;\n"; code += "}\n"; code += "if(item.error) {\n"; code += onError("item.error"); code += "return true;\n"; code += "}\n"; code += "}\n"; code += "return false;\n"; code += "}\n"; code += this.callTapsParallel({ onError: (i, err, done, doneBreak) => { let code = ""; code += `if(${i} < _results.length && ((_results.length = ${i + 1}), (_results[${i}] = { error: ${err} }), _checkDone())) {\n`; code += doneBreak(true); code += "} else {\n"; code += done(); code += "}\n"; return code; }, onResult: (i, result, done, doneBreak) => { let code = ""; code += `if(${i} < _results.length && (${result} !== undefined && (_results.length = ${i + 1}), (_results[${i}] = { result: ${result} }), _checkDone())) {\n`; code += doneBreak(true); code += "} else {\n"; code += done(); code += "}\n"; return code; }, onTap: (i, run, done, doneBreak) => { let code = ""; if(i > 0) { code += `if(${i} >= _results.length) {\n`; code += done(); code += "} else {\n"; } code += run(); if(i > 0) code += "}\n"; return code; }, onDone }); return code; } } const factory = new AsyncParallelBailHookCodeFactory(); class AsyncParallelBailHook extends Hook { constructor(args) { super(args); this.call = this._call = undefined; } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = AsyncParallelBailHook; tapable-1.0.0/lib/AsyncParallelHook.js000066400000000000000000000013211324347365200176050ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class AsyncParallelHookCodeFactory extends HookCodeFactory { content({ onError, onDone }) { return this.callTapsParallel({ onError: (i, err, done, doneBreak) => onError(err) + doneBreak(true), onDone }); } } const factory = new AsyncParallelHookCodeFactory(); class AsyncParallelHook extends Hook { constructor(args) { super(args); this.call = this._call = undefined; } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = AsyncParallelHook; tapable-1.0.0/lib/AsyncSeriesBailHook.js000066400000000000000000000015231324347365200200770ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class AsyncSeriesBailHookCodeFactory extends HookCodeFactory { content({ onError, onResult, onDone }) { return this.callTapsSeries({ onError: (i, err, next, doneBreak) => onError(err) + doneBreak(true), onResult: (i, result, next) => `if(${result} !== undefined) {\n${onResult(result)};\n} else {\n${next()}}\n`, onDone }); } } const factory = new AsyncSeriesBailHookCodeFactory(); class AsyncSeriesBailHook extends Hook { constructor(args) { super(args); this.call = this._call = undefined; } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = AsyncSeriesBailHook; tapable-1.0.0/lib/AsyncSeriesHook.js000066400000000000000000000013071324347365200173070ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class AsyncSeriesHookCodeFactory extends HookCodeFactory { content({ onError, onDone }) { return this.callTapsSeries({ onError: (i, err, next, doneBreak) => onError(err) + doneBreak(true), onDone }); } } const factory = new AsyncSeriesHookCodeFactory(); class AsyncSeriesHook extends Hook { constructor(args) { super(args); this.call = this._call = undefined; } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = AsyncSeriesHook; tapable-1.0.0/lib/AsyncSeriesLoopHook.js000066400000000000000000000013301324347365200201350ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class AsyncSeriesLoopHookCodeFactory extends HookCodeFactory { content({ onError, onDone }) { return this.callTapsLooping({ onError: (i, err, next, doneBreak) => onError(err) + doneBreak(true), onDone }); } } const factory = new AsyncSeriesLoopHookCodeFactory(); class AsyncSeriesLoopHook extends Hook { constructor(args) { super(args); this.call = this._call = undefined; } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = AsyncSeriesLoopHook; tapable-1.0.0/lib/AsyncSeriesWaterfallHook.js000066400000000000000000000021011324347365200211420ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class AsyncSeriesWaterfallHookCodeFactory extends HookCodeFactory { content({ onError, onResult, onDone }) { return this.callTapsSeries({ onError: (i, err, next, doneBreak) => onError(err) + doneBreak(true), onResult: (i, result, next) => { let code = ""; code += `if(${result} !== undefined) {\n`; code += `${this._args[0]} = ${result};\n`; code += `}\n`; code += next(); return code; }, onDone: () => onResult(this._args[0]) }); } } const factory = new AsyncSeriesWaterfallHookCodeFactory(); class AsyncSeriesWaterfallHook extends Hook { constructor(args) { super(args); if(args.length < 1) throw new Error("Waterfall hooks must have at least one argument"); this.call = this._call = undefined; } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = AsyncSeriesWaterfallHook; tapable-1.0.0/lib/Hook.js000066400000000000000000000104501324347365200151350ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; class Hook { constructor(args) { if(!Array.isArray(args)) args = []; this._args = args; this.taps = []; this.interceptors = []; this.call = this._call = this._createCompileDelegate("call", "sync"); this.promise = this._promise = this._createCompileDelegate("promise", "promise"); this.callAsync = this._callAsync = this._createCompileDelegate("callAsync", "async"); this._x = undefined; } compile(options) { throw new Error("Abstract: should be overriden"); } _createCall(type) { return this.compile({ taps: this.taps, interceptors: this.interceptors, args: this._args, type: type }); } _createCompileDelegate(name, type) { const lazyCompileHook = (...args) => { this[name] = this._createCall(type); return this[name](...args); }; return lazyCompileHook; } tap(options, fn) { if(typeof options === "string") options = { name: options }; if(typeof options !== "object" || options === null) throw new Error("Invalid arguments to tap(options: Object, fn: function)"); options = Object.assign({ type: "sync", fn: fn }, options); if(typeof options.name !== "string" || options.name === "") throw new Error("Missing name for tap"); options = this._runRegisterInterceptors(options); this._insert(options); } tapAsync(options, fn) { if(typeof options === "string") options = { name: options }; if(typeof options !== "object" || options === null) throw new Error("Invalid arguments to tapAsync(options: Object, fn: function)"); options = Object.assign({ type: "async", fn: fn }, options); if(typeof options.name !== "string" || options.name === "") throw new Error("Missing name for tapAsync"); options = this._runRegisterInterceptors(options); this._insert(options); } tapPromise(options, fn) { if(typeof options === "string") options = { name: options }; if(typeof options !== "object" || options === null) throw new Error("Invalid arguments to tapPromise(options: Object, fn: function)"); options = Object.assign({ type: "promise", fn: fn }, options); if(typeof options.name !== "string" || options.name === "") throw new Error("Missing name for tapPromise"); options = this._runRegisterInterceptors(options); this._insert(options); } _runRegisterInterceptors(options) { for(const interceptor of this.interceptors) { if(interceptor.register) { const newOptions = interceptor.register(options); if(newOptions !== undefined) options = newOptions; } } return options; } withOptions(options) { const mergeOptions = opt => Object.assign({}, options, typeof opt === "string" ? { name: opt } : opt); // Prevent creating endless prototype chains options = Object.assign({}, options, this._withOptions); const base = this._withOptionsBase || this; const newHook = Object.create(base); newHook.tapAsync = (opt, fn) => base.tapAsync(mergeOptions(opt), fn), newHook.tap = (opt, fn) => base.tap(mergeOptions(opt), fn); newHook.tapPromise = (opt, fn) => base.tapPromise(mergeOptions(opt), fn); newHook._withOptions = options; newHook._withOptionsBase = base; return newHook; } isUsed() { return this.taps.length > 0 || this.interceptors.length > 0; } intercept(interceptor) { this._resetCompilation(); this.interceptors.push(Object.assign({}, interceptor)); if(interceptor.register) { for(let i = 0; i < this.taps.length; i++) this.taps[i] = interceptor.register(this.taps[i]); } } _resetCompilation() { this.call = this._call; this.callAsync = this._callAsync; this.promise = this._promise; } _insert(item) { this._resetCompilation(); let before; if(typeof item.before === "string") before = new Set([item.before]); else if(Array.isArray(item.before)) { before = new Set(item.before); } let stage = 0; if(typeof item.stage === "number") stage = item.stage; let i = this.taps.length; while(i > 0) { i--; const x = this.taps[i]; this.taps[i+1] = x; const xStage = x.stage || 0; if(before) { if(before.has(x.name)) { before.delete(x.name); continue; } if(before.size > 0) { continue; } } if(xStage > stage) { continue; } i++; break; } this.taps[i] = item; } } module.exports = Hook; tapable-1.0.0/lib/HookCodeFactory.js000066400000000000000000000214521324347365200172640ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; class HookCodeFactory { constructor(config) { this.config = config; this.options = undefined; } create(options) { this.init(options); switch(this.options.type) { case "sync": return new Function(this.args(), "\"use strict\";\n" + this.header() + this.content({ onError: err => `throw ${err};\n`, onResult: result => `return ${result};\n`, onDone: () => "", rethrowIfPossible: true })); case "async": return new Function(this.args({ after: "_callback" }), "\"use strict\";\n" + this.header() + this.content({ onError: err => `_callback(${err});\n`, onResult: result => `_callback(null, ${result});\n`, onDone: () => "_callback();\n" })); case "promise": let code = ""; code += "\"use strict\";\n"; code += "return new Promise((_resolve, _reject) => {\n"; code += "var _sync = true;\n"; code += this.header(); code += this.content({ onError: err => { let code = ""; code += "if(_sync)\n"; code += `_resolve(Promise.resolve().then(() => { throw ${err}; }));\n`; code += "else\n"; code += `_reject(${err});\n`; return code; }, onResult: result => `_resolve(${result});\n`, onDone: () => "_resolve();\n" }); code += "_sync = false;\n"; code += "});\n"; return new Function(this.args(), code); } } setup(instance, options) { instance._x = options.taps.map(t => t.fn); } /** * @param {{ type: "sync" | "promise" | "async", taps: Array, interceptors: Array }} options */ init(options) { this.options = options; this._args = options.args.slice(); } header() { let code = ""; if(this.needContext()) { code += "var _context = {};\n"; } else { code += "var _context;\n"; } code += "var _x = this._x;\n"; if(this.options.interceptors.length > 0) { code += "var _taps = this.taps;\n"; code += "var _interceptors = this.interceptors;\n"; } for(let i = 0; i < this.options.interceptors.length; i++) { const interceptor = this.options.interceptors[i]; if(interceptor.call) { code += `${this.getInterceptor(i)}.call(${this.args({ before: interceptor.context ? "_context" : undefined })});\n`; } } return code; } needContext() { for(const tap of this.options.taps) if(tap.context) return true; return false; } callTap(tapIndex, { onError, onResult, onDone, rethrowIfPossible }) { let code = ""; let hasTapCached = false; for(let i = 0; i < this.options.interceptors.length; i++) { const interceptor = this.options.interceptors[i]; if(interceptor.tap) { if(!hasTapCached) { code += `var _tap${tapIndex} = ${this.getTap(tapIndex)};\n`; hasTapCached = true; } code += `${this.getInterceptor(i)}.tap(${interceptor.context ? "_context, " : ""}_tap${tapIndex});\n`; } } code += `var _fn${tapIndex} = ${this.getTapFn(tapIndex)};\n`; const tap = this.options.taps[tapIndex]; switch(tap.type) { case "sync": if(!rethrowIfPossible) { code += `var _hasError${tapIndex} = false;\n`; code += "try {\n"; } if(onResult) { code += `var _result${tapIndex} = _fn${tapIndex}(${this.args({ before: tap.context ? "_context" : undefined })});\n`; } else { code += `_fn${tapIndex}(${this.args({ before: tap.context ? "_context" : undefined })});\n`; } if(!rethrowIfPossible) { code += "} catch(_err) {\n"; code += `_hasError${tapIndex} = true;\n`; code += onError("_err"); code += "}\n"; code += `if(!_hasError${tapIndex}) {\n`; } if(onResult) { code += onResult(`_result${tapIndex}`); } if(onDone) { code += onDone(); } if(!rethrowIfPossible) { code += "}\n"; } break; case "async": let cbCode = ""; if(onResult) cbCode += `(_err${tapIndex}, _result${tapIndex}) => {\n`; else cbCode += `_err${tapIndex} => {\n`; cbCode += `if(_err${tapIndex}) {\n`; cbCode += onError(`_err${tapIndex}`); cbCode += "} else {\n"; if(onResult) { cbCode += onResult(`_result${tapIndex}`); } if(onDone) { cbCode += onDone(); } cbCode += "}\n"; cbCode += "}"; code += `_fn${tapIndex}(${this.args({ before: tap.context ? "_context" : undefined, after: cbCode })});\n`; break; case "promise": code += `var _hasResult${tapIndex} = false;\n`; code += `_fn${tapIndex}(${this.args({ before: tap.context ? "_context" : undefined })}).then(_result${tapIndex} => {\n`; code += `_hasResult${tapIndex} = true;\n`; if(onResult) { code += onResult(`_result${tapIndex}`); } if(onDone) { code += onDone(); } code += `}, _err${tapIndex} => {\n`; code += `if(_hasResult${tapIndex}) throw _err${tapIndex};\n`; code += onError(`_err${tapIndex}`); code += "});\n"; break; } return code; } callTapsSeries({ onError, onResult, onDone, rethrowIfPossible }) { if(this.options.taps.length === 0) return onDone(); const firstAsync = this.options.taps.findIndex(t => t.type !== "sync"); const next = i => { if(i >= this.options.taps.length) { return onDone(); } const done = () => next(i + 1); const doneBreak = (skipDone) => { if(skipDone) return ""; return onDone(); } return this.callTap(i, { onError: error => onError(i, error, done, doneBreak), onResult: onResult && ((result) => { return onResult(i, result, done, doneBreak); }), onDone: !onResult && (() => { return done(); }), rethrowIfPossible: rethrowIfPossible && (firstAsync < 0 || i < firstAsync) }); }; return next(0); } callTapsLooping({ onError, onDone, rethrowIfPossible }) { if(this.options.taps.length === 0) return onDone(); const syncOnly = this.options.taps.every(t => t.type === "sync"); let code = ""; if(!syncOnly) { code += "var _looper = () => {\n"; code += "var _loopAsync = false;\n"; } code += "var _loop;\n"; code += "do {\n"; code += "_loop = false;\n"; for(let i = 0; i < this.options.interceptors.length; i++) { const interceptor = this.options.interceptors[i]; if(interceptor.loop) { code += `${this.getInterceptor(i)}.loop(${this.args({ before: interceptor.context ? "_context" : undefined })});\n`; } } code += this.callTapsSeries({ onError, onResult: (i, result, next, doneBreak) => { let code = ""; code += `if(${result} !== undefined) {\n`; code += "_loop = true;\n"; if(!syncOnly) code += "if(_loopAsync) _looper();\n"; code += doneBreak(true); code += `} else {\n`; code += next(); code += `}\n`; return code; }, onDone: onDone && (() => { let code = ""; code += "if(!_loop) {\n"; code += onDone(); code += "}\n"; return code; }), rethrowIfPossible: rethrowIfPossible && syncOnly }) code += "} while(_loop);\n"; if(!syncOnly) { code += "_loopAsync = true;\n"; code += "};\n"; code += "_looper();\n"; } return code; } callTapsParallel({ onError, onResult, onDone, rethrowIfPossible, onTap = (i, run) => run() }) { if(this.options.taps.length <= 1) { return this.callTapsSeries({ onError, onResult, onDone, rethrowIfPossible }) } let code = ""; code += "do {\n"; code += `var _counter = ${this.options.taps.length};\n`; if(onDone) { code += "var _done = () => {\n"; code += onDone(); code += "};\n"; } for(let i = 0; i < this.options.taps.length; i++) { const done = () => { if(onDone) return "if(--_counter === 0) _done();\n"; else return "--_counter;"; }; const doneBreak = (skipDone) => { if(skipDone || !onDone) return "_counter = 0;\n"; else return "_counter = 0;\n_done();\n"; } code += "if(_counter <= 0) break;\n"; code += onTap(i, () => this.callTap(i, { onError: error => { let code = ""; code += "if(_counter > 0) {\n"; code += onError(i, error, done, doneBreak); code += "}\n"; return code; }, onResult: onResult && ((result) => { let code = ""; code += "if(_counter > 0) {\n"; code += onResult(i, result, done, doneBreak); code += "}\n"; return code; }), onDone: !onResult && (() => { return done(); }), rethrowIfPossible }), done, doneBreak); } code += "} while(false);\n"; return code; } args({ before, after } = {}) { let allArgs = this._args; if(before) allArgs = [before].concat(allArgs); if(after) allArgs = allArgs.concat(after); if(allArgs.length === 0) { return ""; } else { return allArgs.join(", "); } } getTapFn(idx) { return `_x[${idx}]`; } getTap(idx) { return `_taps[${idx}]`; } getInterceptor(idx) { return `_interceptors[${idx}]`; } } module.exports = HookCodeFactory; tapable-1.0.0/lib/HookMap.js000066400000000000000000000017431324347365200156000ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; class HookMap { constructor(factory) { this._map = new Map(); this._factory = factory; this._interceptors = []; } get(key) { return this._map.get(key); } for(key) { const hook = this.get(key); if(hook !== undefined) { return hook; } let newHook = this._factory(key); const interceptors = this._interceptors; for(let i = 0; i < interceptors.length; i++) { newHook = interceptors[i].factory(key, newHook); } this._map.set(key, newHook); return newHook; } intercept(interceptor) { this._interceptors.push(Object.assign({ factory: (key, hook) => hook }, interceptor)); } tap(key, options, fn) { return this.for(key).tap(options, fn); } tapAsync(key, options, fn) { return this.for(key).tapAsync(options, fn); } tapPromise(key, options, fn) { return this.for(key).tapPromise(options, fn); } } module.exports = HookMap; tapable-1.0.0/lib/MultiHook.js000066400000000000000000000015051324347365200161510ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); class MultiHook { constructor(hooks) { this.hooks = hooks; } tap(options, fn) { for(const hook of this.hooks) { hook.tap(options, fn); } } tapAsync(options, fn) { for(const hook of this.hooks) { hook.tapAsync(options, fn); } } tapPromise(options, fn) { for(const hook of this.hooks) { hook.tapPromise(options, fn); } } isUsed() { for(const hook of this.hooks) { if(hook.isUsed()) return true; } return false; } intercept(interceptor) { for(const hook of this.hooks) { hook.intercept(interceptor); } } withOptions(options) { return new MultiHook(this.hooks.map(h => h.withOptions(options))); } } module.exports = MultiHook; tapable-1.0.0/lib/SyncBailHook.js000066400000000000000000000016321324347365200165640ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class SyncBailHookCodeFactory extends HookCodeFactory { content({ onError, onResult, onDone, rethrowIfPossible }) { return this.callTapsSeries({ onError: (i, err) => onError(err), onResult: (i, result, next) => `if(${result} !== undefined) {\n${onResult(result)};\n} else {\n${next()}}\n`, onDone, rethrowIfPossible }); } } const factory = new SyncBailHookCodeFactory(); class SyncBailHook extends Hook { tapAsync() { throw new Error("tapAsync is not supported on a SyncBailHook"); } tapPromise() { throw new Error("tapPromise is not supported on a SyncBailHook"); } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = SyncBailHook; tapable-1.0.0/lib/SyncHook.js000066400000000000000000000014211324347365200157700ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class SyncHookCodeFactory extends HookCodeFactory { content({ onError, onResult, onDone, rethrowIfPossible }) { return this.callTapsSeries({ onError: (i, err) => onError(err), onDone, rethrowIfPossible }); } } const factory = new SyncHookCodeFactory(); class SyncHook extends Hook { tapAsync() { throw new Error("tapAsync is not supported on a SyncHook"); } tapPromise() { throw new Error("tapPromise is not supported on a SyncHook"); } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = SyncHook; tapable-1.0.0/lib/SyncLoopHook.js000066400000000000000000000014521324347365200166260ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class SyncLoopHookCodeFactory extends HookCodeFactory { content({ onError, onResult, onDone, rethrowIfPossible }) { return this.callTapsLooping({ onError: (i, err) => onError(err), onDone, rethrowIfPossible }); } } const factory = new SyncLoopHookCodeFactory(); class SyncLoopHook extends Hook { tapAsync() { throw new Error("tapAsync is not supported on a SyncLoopHook"); } tapPromise() { throw new Error("tapPromise is not supported on a SyncLoopHook"); } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = SyncLoopHook; tapable-1.0.0/lib/SyncWaterfallHook.js000066400000000000000000000022731324347365200176400ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Hook = require("./Hook"); const HookCodeFactory = require("./HookCodeFactory"); class SyncWaterfallHookCodeFactory extends HookCodeFactory { content({ onError, onResult, onDone, rethrowIfPossible }) { return this.callTapsSeries({ onError: (i, err) => onError(err), onResult: (i, result, next) => { let code = ""; code += `if(${result} !== undefined) {\n`; code += `${this._args[0]} = ${result};\n`; code += `}\n`; code += next(); return code; }, onDone: () => onResult(this._args[0]), rethrowIfPossible }); } } const factory = new SyncWaterfallHookCodeFactory(); class SyncWaterfallHook extends Hook { constructor(args) { super(args); if(args.length < 1) throw new Error("Waterfall hooks must have at least one argument"); } tapAsync() { throw new Error("tapAsync is not supported on a SyncWaterfallHook"); } tapPromise() { throw new Error("tapPromise is not supported on a SyncWaterfallHook"); } compile(options) { factory.setup(this, options); return factory.create(options); } } module.exports = SyncWaterfallHook; tapable-1.0.0/lib/Tapable.js000066400000000000000000000036441324347365200156140ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const util = require("util"); const SyncBailHook = require("./SyncBailHook"); function Tapable() { this._pluginCompat = new SyncBailHook(["options"]); this._pluginCompat.tap({ name: "Tapable camelCase", stage: 100 }, options => { options.names.add(options.name.replace(/[- ]([a-z])/g, str => str.substr(1).toUpperCase())); }); this._pluginCompat.tap({ name: "Tapable this.hooks", stage: 200 }, options => { let hook; for(const name of options.names) { hook = this.hooks[name]; if(hook !== undefined) { break; } } if(hook !== undefined) { const tapOpt = { name: options.fn.name || "unnamed compat plugin", stage: options.stage || 0 }; if(options.async) hook.tapAsync(tapOpt, options.fn); else hook.tap(tapOpt, options.fn); return true; } }); } module.exports = Tapable; Tapable.addCompatLayer = function addCompatLayer(instance) { Tapable.call(instance); instance.plugin = Tapable.prototype.plugin; instance.apply = Tapable.prototype.apply; }; Tapable.prototype.plugin = util.deprecate(function plugin(name, fn) { if(Array.isArray(name)) { name.forEach(function(name) { this.plugin(name, fn); }, this); return; } const result = this._pluginCompat.call({ name: name, fn: fn, names: new Set([name]) }); if(!result) { throw new Error(`Plugin could not be registered at '${name}'. Hook was not found.\n` + "BREAKING CHANGE: There need to exist a hook at 'this.hooks'. " + "To create a compatiblity layer for this hook, hook into 'this._pluginCompat'."); } }, "Tapable.plugin is deprecated. Use new API on `.hooks` instead"); Tapable.prototype.apply = util.deprecate(function apply() { for(var i = 0; i < arguments.length; i++) { arguments[i].apply(this); } }, "Tapable.apply is deprecated. Call apply on the plugin directly instead"); tapable-1.0.0/lib/__tests__/000077500000000000000000000000001324347365200156355ustar00rootroot00000000000000tapable-1.0.0/lib/__tests__/AsyncParallelHooks.js000066400000000000000000000014371324347365200217360ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const HookTester = require("./HookTester"); const AsyncParallelHook = require("../AsyncParallelHook"); const AsyncParallelBailHook = require("../AsyncParallelBailHook"); describe("AsyncParallelHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new AsyncParallelHook(args)); const result = await tester.run(); expect(result).toMatchSnapshot(); }, 15000) }) describe("AsyncParallelBailHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new AsyncParallelBailHook(args)); const result = await tester.run(); expect(result).toMatchSnapshot(); }, 15000) }) tapable-1.0.0/lib/__tests__/AsyncSeriesHooks.js000066400000000000000000000026161324347365200214340ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const HookTester = require("./HookTester"); const AsyncSeriesHook = require("../AsyncSeriesHook"); const AsyncSeriesBailHook = require("../AsyncSeriesBailHook"); const AsyncSeriesWaterfallHook = require("../AsyncSeriesWaterfallHook"); const AsyncSeriesLoopHook = require("../AsyncSeriesLoopHook"); describe("AsyncSeriesHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new AsyncSeriesHook(args)); const result = await tester.run(); expect(result).toMatchSnapshot(); }) }) describe("AsyncSeriesBailHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new AsyncSeriesBailHook(args)); const result = await tester.run(); expect(result).toMatchSnapshot(); }) }) describe("AsyncSeriesWaterfallHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new AsyncSeriesWaterfallHook(args)); const result = await tester.run(); expect(result).toMatchSnapshot(); }) }) describe("AsyncSeriesLoopHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new AsyncSeriesLoopHook(args)); const result = await tester.runForLoop(); expect(result).toMatchSnapshot(); }) }) tapable-1.0.0/lib/__tests__/Hook.js000066400000000000000000000020231324347365200170700ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const SyncHook = require("../SyncHook"); describe("Hook", () => { it("should allow to insert hooks before others and in stages", () => { const hook = new SyncHook(); const calls = []; hook.tap("A", () => calls.push("A")); hook.tap({ name: "B", before: "A" }, () => calls.push("B")); calls.length = 0; hook.call(); expect(calls).toEqual(["B", "A"]); hook.tap({ name: "C", before: ["A", "B"] }, () => calls.push("C")); calls.length = 0; hook.call(); expect(calls).toEqual(["C", "B", "A"]); hook.tap({ name: "D", before: "B" }, () => calls.push("D")); calls.length = 0; hook.call(); expect(calls).toEqual(["C", "D", "B", "A"]); hook.tap({ name: "E", stage: -5 }, () => calls.push("E")); hook.tap({ name: "F", stage: -3 }, () => calls.push("F")); calls.length = 0; hook.call(); expect(calls).toEqual(["E", "F", "C", "D", "B", "A"]); }); }); tapable-1.0.0/lib/__tests__/HookCodeFactory.js000066400000000000000000000123641324347365200212240ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const HookCodeFactory = require("../HookCodeFactory"); const expectNoSyntaxError = (code) => { new Function("a, b, c", code); }; describe("HookCodeFactory", () => { describe("callTap", () => { const factoryConfigurations = { "no args, no intercept": { args: [], taps: [ { type: "sync" }, { type: "async" }, { type: "promise" } ], interceptors: [] }, "with args, no intercept": { args: ["a", "b", "c"], taps: [ { type: "sync" }, { type: "async" }, { type: "promise" } ], interceptors: [] }, "with args, with intercept": { args: ["a", "b", "c"], taps: [ { type: "sync" }, { type: "async" }, { type: "promise" } ], interceptors: [ { call: () => {}, tap: () => {} }, { tap: () => {} }, { call: () => {} }, ] } } for(const configurationName in factoryConfigurations) { describe(`(${configurationName})`, () => { let factory; beforeEach(() => { factory = new HookCodeFactory(); factory.init(factoryConfigurations[configurationName]); }); it("sync without onResult", () => { const code = factory.callTap(0, { onError: err => `onError(${err});\n`, onDone: () => "onDone();\n" }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); it("sync with onResult", () => { const code = factory.callTap(0, { onError: err => `onError(${err});\n`, onResult: result => `onResult(${result});\n` }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); it("async without onResult", () => { const code = factory.callTap(1, { onError: err => `onError(${err});\n`, onDone: () => "onDone();\n" }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); it("async with onResult", () => { const code = factory.callTap(1, { onError: err => `onError(${err});\n`, onResult: result => `onResult(${result});\n` }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); it("promise without onResult", () => { const code = factory.callTap(2, { onError: err => `onError(${err});\n`, onDone: () => "onDone();\n" }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); it("promise with onResult", () => { const code = factory.callTap(2, { onError: err => `onError(${err});\n`, onResult: result => `onResult(${result});\n` }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); }); } }); describe("taps", () => { const factoryConfigurations = { "none": { args: ["a", "b", "c"], taps: [], interceptors: [] }, "single sync": { args: ["a", "b", "c"], taps: [ { type: "sync" } ], interceptors: [] }, "multiple sync": { args: ["a", "b", "c"], taps: [ { type: "sync" }, { type: "sync" }, { type: "sync" } ], interceptors: [] }, "single async": { args: ["a", "b", "c"], taps: [ { type: "async" } ], interceptors: [] }, "single promise": { args: ["a", "b", "c"], taps: [ { type: "promise" } ], interceptors: [] }, "mixed": { args: ["a", "b", "c"], taps: [ { type: "sync" }, { type: "async" }, { type: "promise" } ], interceptors: [] }, "mixed2": { args: ["a", "b", "c"], taps: [ { type: "async" }, { type: "promise" }, { type: "sync" }, ], interceptors: [] }, } for(const configurationName in factoryConfigurations) { describe(`(${configurationName})`, () => { let factory; beforeEach(() => { factory = new HookCodeFactory(); factory.init(factoryConfigurations[configurationName]); }); it("callTapsSeries", () => { const code = factory.callTapsSeries({ onError: (i, err) => `onError(${i}, ${err});\n`, onResult: (i, result, next, doneBreak) => `onResult(${i}, ${result}, () => {\n${next()}}, () => {\n${doneBreak()}});\n`, onDone: () => "onDone();\n", rethrowIfPossible: true }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); it("callTapsParallel", () => { const code = factory.callTapsParallel({ onError: (i, err) => `onError(${i}, ${err});\n`, onResult: (i, result, done, doneBreak) => `onResult(${i}, ${result}, () => {\n${done()}}, () => {\n${doneBreak()}});\n`, onDone: () => "onDone();\n", rethrowIfPossible: true }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); it("callTapsLooping", () => { const code = factory.callTapsLooping({ onError: (i, err) => `onError(${i}, ${err});\n`, onDone: () => "onDone();\n", rethrowIfPossible: true }); expect(code).toMatchSnapshot(); expectNoSyntaxError(code); }); }); } }); }); tapable-1.0.0/lib/__tests__/HookTester.js000066400000000000000000000770361324347365200202770ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; require("babel-polyfill"); describe("HookTester", () => { it("should run", () => {}); }); process.on("unhandledRejection", err => console.error(err.stack)); class HookTester { constructor(hookCreator, sync) { this.hookCreator = hookCreator; this.sync = sync; } async run(syncOnly) { const result = { sync: {}, async: {}, intercept: {} }; if(syncOnly) { await this.runSync(result.sync, "call"); } else { await this.runAsync(result.async, "callAsync"); await this.runAsync(result.async, "promise"); await this.runIntercept(result.intercept, "callAsync"); await this.runIntercept(result.intercept, "promise"); } await this.runSync(result.sync, "callAsync"); await this.runSync(result.sync, "promise"); return result; } async runForLoop(syncOnly) { const result = { sync: {}, async: {} }; if(syncOnly) { await this.runForLoopSync(result.sync, "call"); } else { await this.runForLoopAsync(result.async, "callAsync"); await this.runForLoopAsync(result.async, "promise"); } await this.runForLoopSync(result.sync, "callAsync"); await this.runForLoopSync(result.sync, "promise"); return result; } async runForLoopAsync(result, method) { { const hook = this.createHook([], `${method}SinglePromise`); hook.tapPromise("promise", () => { result[`${method}SinglePromiseCalled`] = (result[`${method}SinglePromiseCalled`] || 0) + 1; if(result[`${method}SinglePromiseCalled`] < 42) return Promise.resolve().then(() => true); return Promise.resolve().then(() => {}); }); result[`${method}SinglePromise`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook([], `${method}MultiplePromise`); hook.tapPromise("promise1", () => { result[`${method}MultiplePromiseCalled1`] = (result[`${method}MultiplePromiseCalled1`] || 0) + 1; if(result[`${method}MultiplePromiseCalled1`] < 42) return Promise.resolve().then(() => true); return Promise.resolve().then(() => {}); }); hook.tapPromise("promise2", () => { result[`${method}MultiplePromiseCalled2`] = (result[`${method}MultiplePromiseCalled2`] || 0) + 1; if(result[`${method}MultiplePromiseCalled2`] < 42) return Promise.resolve().then(() => true); return Promise.resolve().then(() => {}); }); result[`${method}MultiplePromise`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook([], `${method}SingleAsync`); hook.tapAsync("async", (callback) => { result[`${method}SingleAsyncCalled`] = (result[`${method}SingleAsyncCalled`] || 0) + 1; if(result[`${method}SingleAsyncCalled`] < 42) return Promise.resolve().then(() => callback(null, true)); return Promise.resolve().then(() => callback()); }); result[`${method}SingleAsync`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook([], `${method}MultipleAsync`); hook.tapAsync("async1", (callback) => { result[`${method}MultipleAsyncCalled1`] = (result[`${method}MultipleAsyncCalled1`] || 0) + 1; if(result[`${method}MultipleAsyncCalled1`] < 42) return Promise.resolve().then(() => callback(null, true)); return Promise.resolve().then(() => callback()); }); hook.tapAsync("async2", (callback) => { result[`${method}MultipleAsyncCalled2`] = (result[`${method}MultipleAsyncCalled2`] || 0) + 1; if(result[`${method}MultipleAsyncCalled2`] < 42) return Promise.resolve().then(() => callback(null, true)); return Promise.resolve().then(() => callback()); }); result[`${method}MultipleAsync`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook([], `${method}Mixed`); hook.tapAsync("async1", (callback) => { result[`${method}MixedCalled1`] = (result[`${method}MixedCalled1`] || 0) + 1; if(result[`${method}MixedCalled1`] < 42) return Promise.resolve().then(() => callback(null, true)); return Promise.resolve().then(() => callback()); }); hook.tap("sync2", () => { result[`${method}MixedCalled2`] = (result[`${method}MixedCalled2`] || 0) + 1; if(result[`${method}MixedCalled2`] < 42) return true; }); hook.tapPromise("promise3", () => { result[`${method}MixedCalled3`] = (result[`${method}MixedCalled3`] || 0) + 1; if(result[`${method}MixedCalled3`] < 42) return Promise.resolve().then(() => true); return Promise.resolve().then(() => {}); }); result[`${method}Mixed`] = await this.gainResult(cb => hook[method](cb)); } } async runForLoopSync(result, method) { { const hook = this.createHook([], `${method}None`); result[`${method}None`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook(["arg"], `${method}NoneWithArg`); result[`${method}NoneWithArg`] = await this.gainResult(cb => hook[method](42, cb)); } { const hook = this.createHook([], `${method}SingleSync`); hook.tap("sync", () => { result[`${method}SingleSyncCalled`] = (result[`${method}SingleSyncCalled`] || 0) + 1; if(result[`${method}SingleSyncCalled`] < 42) return true; }); result[`${method}SingleSync`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook([], `${method}MultipleSync`); hook.tap("sync1", () => { result[`${method}MultipleSyncCalled1`] = (result[`${method}MultipleSyncCalled1`] || 0) + 1; if(result[`${method}MultipleSyncCalled1`] < 42) return true; }); hook.tap("sync2", () => { result[`${method}MultipleSyncCalled2`] = (result[`${method}MultipleSyncCalled2`] || 0) + 1; if(result[`${method}MultipleSyncCalled2`] < 42) return true; }); result[`${method}MultipleSync`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook([], `${method}InterceptedSync`); hook.tap("sync1", () => { result[`${method}InterceptedSyncCalled1`] = (result[`${method}InterceptedSyncCalled1`] || 0) + 1; if(result[`${method}InterceptedSyncCalled1`] < 42) return true; }); hook.tap("sync2", () => { result[`${method}InterceptedSyncCalled2`] = (result[`${method}InterceptedSyncCalled2`] || 0) + 1; if(result[`${method}InterceptedSyncCalled2`] < 42) return true; }); hook.intercept({ call: (a) => result[`${method}InterceptedSyncCalledCall`] = (result[`${method}InterceptedSyncCalledCall`] || 0) + 1, loop: (a) => result[`${method}InterceptedSyncCalledLoop`] = (result[`${method}InterceptedSyncCalledLoop`] || 0) + 1, tap: (tap) => { result[`${method}InterceptedSyncCalledTap`] = (result[`${method}InterceptedSyncCalledTap`] || 0) + 1 }, }) result[`${method}InterceptedSync`] = await this.gainResult(cb => hook[method](cb)); } } async runSync(result, method) { { const hook = this.createHook([], `${method}None`); result[`${method}None`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook(["arg"], `${method}NoneWithArg`); result[`${method}NoneWithArg`] = await this.gainResult(cb => hook[method](42, cb)); } { const hook = this.createHook([], `${method}SingleSync`); hook.tap("sync", () => { result[`${method}SingleSyncCalled`] = true; return 42; }); result[`${method}SingleSync`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook(["myArg"], `${method}SingleSyncWithArg`); hook.tap("sync", (nr) => { result[`${method}SingleSyncWithArgCalled`] = nr; return nr; }); result[`${method}SingleSyncWithArg`] = await this.gainResult(cb => hook[method](42, cb)); } { const hook = this.createHook([], `${method}MultipleSync`); hook.tap("sync1", () => { result[`${method}MultipleSyncCalled1`] = true; return 42; }); hook.tap("sync2", () => { result[`${method}MultipleSyncCalled2`] = true; return 43; }); result[`${method}MultipleSync`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook(["a"], `${method}MultipleSyncWithArg`); hook.tap("sync1", (a) => { result[`${method}MultipleSyncWithArgCalled1`] = a; return 42 + a; }); hook.tap("sync2", (a) => { result[`${method}MultipleSyncWithArgCalled2`] = a; return 43 + a; }); result[`${method}MultipleSyncWithArg`] = await this.gainResult(cb => hook[method](42, cb)); } { const hook = this.createHook(["a"], `${method}MultipleSyncWithArgNoReturn`); hook.tap("sync1", (a) => { result[`${method}MultipleSyncWithArgNoReturnCalled1`] = a; }); hook.tap("sync2", (a) => { result[`${method}MultipleSyncWithArgNoReturnCalled2`] = a; }); result[`${method}MultipleSyncWithArgNoReturn`] = await this.gainResult(cb => hook[method](42, cb)); } { const hook = this.createHook(["a"], `${method}MultipleSyncWithArgFirstReturn`); hook.tap("sync1", (a) => { result[`${method}MultipleSyncWithArgFirstReturnCalled1`] = a; return 42 + a; }); hook.tap("sync2", (a) => { result[`${method}MultipleSyncWithArgFirstReturnCalled2`] = a; }); result[`${method}MultipleSyncWithArgFirstReturn`] = await this.gainResult(cb => hook[method](42, cb)); } { const hook = this.createHook(["a"], `${method}MultipleSyncWithArgLastReturn`); hook.tap("sync1", (a) => { result[`${method}MultipleSyncWithArgLastReturnCalled1`] = a; }); hook.tap("sync2", (a) => { result[`${method}MultipleSyncWithArgLastReturnCalled2`] = a; return 43 + a; }); result[`${method}MultipleSyncWithArgLastReturn`] = await this.gainResult(cb => hook[method](42, cb)); } { const hook = this.createHook(["a", "b", "c"], `${method}MultipleSyncWithArgs`); hook.tap("sync1", (a, b, c) => { result[`${method}MultipleSyncWithArgsCalled1`] = [a, b, c]; return a + b + c; }); hook.tap("sync2", (a, b, c) => { result[`${method}MultipleSyncWithArgsCalled2`] = [a, b, c]; return a + b + c + 1; }); result[`${method}MultipleSyncWithArgs`] = await this.gainResult(cb => hook[method](42, 43, 44, cb)); } { const hook = this.createHook([], `${method}MultipleSyncError`); hook.tap("sync1", () => { result[`${method}MultipleSyncErrorCalled1`] = true; }); hook.tap("sync2", () => { result[`${method}MultipleSyncErrorCalled2`] = true; throw new Error("Error in sync2") }); hook.tap("sync3", () => { result[`${method}MultipleSyncErrorCalled3`] = true; }); result[`${method}MultipleSyncError`] = await this.gainResult(cb => hook[method](cb)); } { const hook = this.createHook(["a", "b", "c"], `${method}Intercepted`); hook.intercept({ call: (a, b, c) => { result[`${method}InterceptedCall1`] = [a, b, c]; }, tap: (tap) => { result[`${method}InterceptedTap1`] = Object.assign({}, tap, { fn: tap.fn.length }); } }); hook.intercept({ call: (a, b, c) => { result[`${method}InterceptedCall2`] = [a, b, c]; }, tap: (tap) => { if(!result[`${method}InterceptedTap2`]) result[`${method}InterceptedTap2`] = Object.assign({}, tap, { fn: tap.fn.length }); } }); hook.tap("sync1", (a, b, c) => a + b + c); hook.tap("sync2", (a, b) => a + b + 1); result[`${method}Intercepted`] = await this.gainResult((cb) => hook[method](1, 2, 3, cb)); } } async runAsync(result, type) { { const hook = this.createHook([], `${type}None`); result[`${type}None`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook(["arg"], `${type}NoneWithArg`); result[`${type}NoneWithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook([], `${type}SingleSync`); hook.tap("sync", () => { result[`${type}SingleSyncCalled1`] = true; return 42; }); result[`${type}SingleSync`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook(["x"], `${type}SingleSyncWithArg`); hook.tap("sync", arg => { result[`${type}SingleSyncWithArgCalled1`] = arg; return arg + 1; }); result[`${type}SingleSyncWithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}SingleSyncWithArgNoReturn`); hook.tap("sync", arg => { result[`${type}SingleSyncWithArgNoReturnCalled1`] = arg; }); result[`${type}SingleSyncWithArgNoReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook([], `${type}MultipleSync`); hook.tap("sync1", () => { result[`${type}MultipleSyncCalled1`] = true; return 42; }); hook.tap("sync2", () => { result[`${type}MultipleSyncCalled2`] = true; return 43; }); result[`${type}MultipleSync`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultipleSyncLastReturn`); hook.tap("sync1", () => { result[`${type}MultipleSyncLastReturnCalled1`] = true; }); hook.tap("sync2", () => { result[`${type}MultipleSyncLastReturnCalled2`] = true; return 43; }); result[`${type}MultipleSyncLastReturn`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultipleSyncNoReturn`); hook.tap("sync1", () => { result[`${type}MultipleSyncNoReturnCalled1`] = true; }); hook.tap("sync2", () => { result[`${type}MultipleSyncNoReturnCalled2`] = true; }); result[`${type}MultipleSyncNoReturn`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook(["arg"], `${type}MultipleSyncWithArg`); hook.tap("sync1", arg => { result[`${type}MultipleSyncWithArgCalled1`] = arg; return arg + 1; }); hook.tap("sync2", arg => { result[`${type}MultipleSyncWithArgCalled2`] = arg; return arg + 2; }); result[`${type}MultipleSyncWithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["arg"], `${type}MultipleSyncWithArgNoReturn`); hook.tap("sync1", arg => { result[`${type}MultipleSyncWithArgNoReturnCalled1`] = arg; }); hook.tap("sync2", arg => { result[`${type}MultipleSyncWithArgNoReturnCalled2`] = arg; }); result[`${type}MultipleSyncWithArgNoReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["arg"], `${type}MultipleSyncWithArgLastReturn`); hook.tap("sync1", arg => { result[`${type}MultipleSyncWithArgLastReturnCalled1`] = arg; }); hook.tap("sync2", arg => { result[`${type}MultipleSyncWithArgLastReturnCalled2`] = arg; return arg + 2; }); result[`${type}MultipleSyncWithArgLastReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["arg"], `${type}MultipleSyncWithArgFirstReturn`); hook.tap("sync1", arg => { result[`${type}MultipleSyncWithArgFirstReturnCalled1`] = arg; return arg + 1; }); hook.tap("sync2", arg => { result[`${type}MultipleSyncWithArgFirstReturnCalled2`] = arg; }); result[`${type}MultipleSyncWithArgFirstReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}SingleAsyncWithArg`); hook.tapAsync("async", (arg, callback) => { result[`${type}SingleAsyncWithArgCalled1`] = arg; callback(null, arg); }); result[`${type}SingleAsyncWithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleAsyncWithArg`); hook.tapAsync("async1", (arg, callback) => { result[`${type}MultipleAsyncWithArgCalled1`] = arg; callback(null, arg + 1); }); hook.tapAsync("async2", (arg, callback) => { result[`${type}MultipleAsyncWithArgCalled2`] = arg; callback(null, arg + 2); }); result[`${type}MultipleAsyncWithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleAsyncWithArgNoReturn`); hook.tapAsync("async1", (arg, callback) => { result[`${type}MultipleAsyncWithArgNoReturnCalled1`] = arg; callback(); }); hook.tapAsync("async2", (arg, callback) => { result[`${type}MultipleAsyncWithArgNoReturnCalled2`] = arg; callback(); }); result[`${type}MultipleAsyncWithArgNoReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleAsyncWithArgFirstReturn`); hook.tapAsync("async1", (arg, callback) => { result[`${type}MultipleAsyncWithArgFirstReturnCalled1`] = arg; callback(null, arg + 1); }); hook.tapAsync("async2", (arg, callback) => { result[`${type}MultipleAsyncWithArgFirstReturnCalled2`] = arg; callback(); }); result[`${type}MultipleAsyncWithArgFirstReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleAsyncWithArgLastReturn`); hook.tapAsync("async1", (arg, callback) => { result[`${type}MultipleAsyncWithArgLastReturnCalled1`] = arg; callback(); }); hook.tapAsync("async2", (arg, callback) => { result[`${type}MultipleAsyncWithArgLastReturnCalled2`] = arg; callback(null, arg + 2); }); result[`${type}MultipleAsyncWithArgLastReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}SinglePromiseWithArg`); hook.tapPromise("promise", arg => { result[`${type}SinglePromiseWithArgCalled1`] = arg; return Promise.resolve(arg + 1); }); result[`${type}SinglePromiseWithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultiplePromiseWithArg`); hook.tapPromise("promise1", arg => { result[`${type}MultiplePromiseWithArgCalled1`] = arg; return Promise.resolve(arg + 1); }); hook.tapPromise("promise2", arg => { result[`${type}MultiplePromiseWithArgCalled2`] = arg; return Promise.resolve(arg + 2); }); result[`${type}MultiplePromiseWithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultiplePromiseWithArgNoReturn`); hook.tapPromise("promise1", arg => { result[`${type}MultiplePromiseWithArgNoReturnCalled1`] = arg; return Promise.resolve(); }); hook.tapPromise("promise2", arg => { result[`${type}MultiplePromiseWithArgNoReturnCalled2`] = arg; return Promise.resolve(); }); result[`${type}MultiplePromiseWithArgNoReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultiplePromiseWithArgFirstReturn`); hook.tapPromise("promise1", arg => { result[`${type}MultiplePromiseWithArgFirstReturnCalled1`] = arg; return Promise.resolve(arg + 1); }); hook.tapPromise("promise2", arg => { result[`${type}MultiplePromiseWithArgFirstReturnCalled2`] = arg; return Promise.resolve(); }); result[`${type}MultiplePromiseWithArgFirstReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultiplePromiseWithArgLastReturn`); hook.tapPromise("promise1", arg => { result[`${type}MultiplePromiseWithArgLastReturnCalled1`] = arg; return Promise.resolve(); }); hook.tapPromise("promise2", arg => { result[`${type}MultiplePromiseWithArgLastReturnCalled2`] = arg; return Promise.resolve(arg + 2); }); result[`${type}MultiplePromiseWithArgLastReturn`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleMixed1WithArg`); hook.tapAsync("async", (arg, callback) => { result[`${type}MultipleMixed1WithArgCalled1`] = arg; callback(null, arg + 1); }); hook.tapPromise("promise", arg => { result[`${type}MultipleMixed1WithArgCalled2`] = arg; return Promise.resolve(arg + 2); }); hook.tap("sync", arg => { result[`${type}MultipleMixed1WithArgCalled3`] = arg; return arg + 3; }); result[`${type}MultipleMixed1WithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleMixed2WithArg`); hook.tapAsync("async", (arg, callback) => { result[`${type}MultipleMixed2WithArgCalled1`] = arg; setTimeout(() => callback(null, arg + 1), 100); }); hook.tapPromise("promise", arg => { result[`${type}MultipleMixed2WithArgCalled2`] = arg; return Promise.resolve(arg + 2); }); result[`${type}MultipleMixed2WithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleMixed3WithArg`); hook.tapAsync("async1", (arg, callback) => { result[`${type}MultipleMixed3WithArgCalled1`] = arg; callback(null, arg + 1); }); hook.tapPromise("promise", arg => { result[`${type}MultipleMixed3WithArgCalled2`] = arg; return Promise.resolve(arg + 2); }); hook.tapAsync("async2", (arg, callback) => { result[`${type}MultipleMixed3WithArgCalled3`] = arg; setTimeout(() => callback(null, arg + 3), 100); }); result[`${type}MultipleMixed3WithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook([], `${type}MultipleSyncError`); hook.tap("sync1", () => { result[`${type}MultipleSyncErrorCalled1`] = true; }); hook.tap("sync2", () => { throw new Error("Error in sync2") }); hook.tap("sync3", () => { result[`${type}MultipleSyncErrorCalled3`] = true; }); result[`${type}MultipleSyncError`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultipleAsyncError`); hook.tapAsync("async1", (callback) => { result[`${type}MultipleAsyncErrorCalled1`] = true; callback(); }); hook.tapAsync("async2", (callback) => { callback(new Error("Error in async2")); }); hook.tapAsync("async3", (callback) => { result[`${type}MultipleAsyncErrorCalled3`] = true; callback(); }); result[`${type}MultipleAsyncError`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultipleAsyncLateError`); hook.tapAsync("async1", (callback) => { result[`${type}MultipleAsyncLateErrorCalled1`] = true; callback(); }); hook.tapAsync("async2", (callback) => { setTimeout(() => callback(new Error("Error in async2")), 100); }); hook.tapAsync("async3", (callback) => { result[`${type}MultipleAsyncLateErrorCalled3`] = true; callback(); }); result[`${type}MultipleAsyncLateError`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultipleAsyncLateErrorEarlyResult1`); hook.tapAsync("async1", (callback) => { result[`${type}MultipleAsyncLateErrorEarlyResult1Called1`] = true; callback(); }); hook.tapAsync("async2", (callback) => { setTimeout(() => callback(new Error("Error in async2")), 100); }); hook.tapAsync("async3", (callback) => { result[`${type}MultipleAsyncLateErrorEarlyResult1Called3`] = true; callback(null, 7); }); result[`${type}MultipleAsyncLateErrorEarlyResult1`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultipleAsyncLateErrorEarlyResult2`); hook.tapAsync("async1", (callback) => { result[`${type}MultipleAsyncLateErrorEarlyResult2Called1`] = true; setTimeout(() => callback(null, 42), 200); }); hook.tapAsync("async2", (callback) => { setTimeout(() => callback(new Error("Error in async2")), 100); }); hook.tapAsync("async3", (callback) => { result[`${type}MultipleAsyncLateErrorEarlyResult2Called3`] = true; callback(null, 7); }); result[`${type}MultipleAsyncLateErrorEarlyResult2`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultipleAsyncEarlyError`); hook.tapAsync("async1", (callback) => { result[`${type}MultipleAsyncEarlyErrorCalled1`] = true; setTimeout(() => callback(), 100); }); hook.tapAsync("async2", (callback) => { callback(new Error("Error in async2")); }); hook.tapAsync("async3", (callback) => { result[`${type}MultipleAsyncEarlyErrorCalled3`] = true; setTimeout(() => callback(), 100); }); result[`${type}MultipleAsyncEarlyError`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultiplePromiseError`); hook.tapPromise("promise1", () => { result[`${type}MultiplePromiseErrorCalled1`] = true; return Promise.resolve(); }); hook.tapPromise("promise2", () => { return Promise.resolve().then(() => { throw new Error("Error in async2"); }); }); hook.tapPromise("promise3", () => { result[`${type}MultiplePromiseErrorCalled3`] = true; return Promise.resolve(); }); result[`${type}MultiplePromiseError`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultiplePromiseLateError`); hook.tapPromise("promise1", () => { result[`${type}MultiplePromiseLateErrorCalled1`] = true; return Promise.resolve(); }); hook.tapPromise("promise2", () => { return new Promise((resolve, reject) => { setTimeout(() => reject(new Error("Error in async2")), 100); }); }); hook.tapPromise("promise3", () => { result[`${type}MultiplePromiseLateErrorCalled3`] = true; return Promise.resolve(); }); result[`${type}MultiplePromiseLateError`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook([], `${type}MultiplePromiseEarlyError`); hook.tapPromise("promise1", () => { result[`${type}MultiplePromiseEarlyErrorCalled1`] = true; return new Promise(resolve => setTimeout(() => resolve(), 100)); }); hook.tapPromise("promise2", () => { return Promise.resolve().then(() => { throw new Error("Error in async2"); }); }); hook.tapPromise("promise3", () => { result[`${type}MultiplePromiseEarlyErrorCalled3`] = true; return new Promise(resolve => setTimeout(() => resolve(), 100)); }); result[`${type}MultiplePromiseEarlyError`] = await this.gainResult((cb) => hook[type](cb)); } { const hook = this.createHook(["x"], `${type}MultipleMixedError1WithArg`); hook.tapAsync("async", (arg, callback) => { result[`${type}MultipleMixedError1WithArgCalled1`] = arg; callback(null, arg); }); hook.tapPromise("promise", arg => { result[`${type}MultipleMixedError1WithArgCalled2`] = arg; return Promise.resolve(arg + 1); }); hook.tap("sync", arg => { result[`${type}MultipleMixedError1WithArgCalled3`] = arg; throw new Error("Error in sync"); }); result[`${type}MultipleMixedError1WithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleMixedError2WithArg`); hook.tapAsync("async", (arg, callback) => { result[`${type}MultipleMixedError2WithArgCalled1`] = arg; callback(null, arg); }); hook.tapPromise("promise", arg => { result[`${type}MultipleMixedError2WithArgCalled2`] = arg; return Promise.resolve().then(() => { throw new Error("Error in promise"); }); }); hook.tap("sync", arg => { result[`${type}MultipleMixedError2WithArgCalled3`] = arg; return arg + 2; }); result[`${type}MultipleMixedError2WithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook(["x"], `${type}MultipleMixedError3WithArg`); hook.tapAsync("async", (arg, callback) => { result[`${type}MultipleMixedError3WithArgCalled1`] = arg; callback(new Error("Error in async")); }); hook.tapPromise("promise", arg => { result[`${type}MultipleMixedError3WithArgCalled2`] = arg; return Promise.resolve(arg + 1); }); hook.tap("sync", arg => { result[`${type}MultipleMixedError3WithArgCalled3`] = arg; return arg + 2; }); result[`${type}MultipleMixedError3WithArg`] = await this.gainResult((cb) => hook[type](42, cb)); } { const hook = this.createHook([], `${type}MultipleMixedLateError`); hook.tapAsync("async", (callback) => { result[`${type}MultipleMixedLateErrorCalled1`] = true; setTimeout(() => callback(new Error("Error in async")), 100); }); hook.tapPromise("promise", () => { result[`${type}MultipleMixedLateErrorCalled2`] = true; return Promise.resolve(42); }); hook.tap("sync", () => { result[`${type}MultipleMixedLateErrorCalled3`] = true; return 43; }); result[`${type}MultipleMixedLateError`] = await this.gainResult((cb) => hook[type](cb)); } } async runIntercept(result, type) { { const hook = this.createHook(["a", "b", "c"], `${type}Intercepted`); hook.intercept({ call: (a, b, c) => { result[`${type}InterceptedCall1`] = [a, b, c]; }, tap: (tap) => { result[`${type}InterceptedTap1`] = Object.assign({}, tap, { fn: tap.fn.length }); } }); hook.intercept({ call: (a, b, c) => { result[`${type}InterceptedCall2`] = [a, b, c]; }, tap: (tap) => { if(!result[`${type}InterceptedTap2`]) result[`${type}InterceptedTap2`] = Object.assign({}, tap, { fn: tap.fn.length }); } }); hook.tap("sync", (a, b, c) => a + b + c); hook.tapPromise("promise", (a, b) => Promise.resolve(a + b + 1)); result[`${type}Intercepted`] = await this.gainResult((cb) => hook[type](1, 2, 3, cb)); } { const hook = this.createHook(["a", "b", "c"], `${type}ContextIntercepted`); hook.intercept({ call: (context, a, b, c) => { context.number = 42; result[`${type}ContextInterceptedCall1`] = [context, a, b, c]; }, loop: (context, a, b, c) => { context.number2 = 88; result[`${type}ContextInterceptedLoop1`] = [context, a, b, c]; }, tap: (context, tap) => { result[`${type}ContextInterceptedTap1`] = context; }, context: true }); hook.intercept({ call: (a, b, c) => { result[`${type}ContextInterceptedCall2`] = [a, b, c]; } }); hook.tap({ name: "sync", context: true }, (context, a, b, c) => context.number + a + b + c); result[`${type}ContextIntercepted`] = await this.gainResult((cb) => hook[type](1, 2, 3, cb)); } { const hook = this.createHook(["a", "b", "c"], `${type}UnusedContextIntercepted`); hook.intercept({ call: (context, a, b, c) => { result[`${type}UnusedContextInterceptedCall1`] = [context, a, b, c]; }, tap: (context, tap) => { result[`${type}UnusedContextInterceptedTap1`] = context; }, context: true }); hook.intercept({ call: (a, b, c) => { result[`${type}UnusedContextInterceptedCall2`] = [a, b, c]; } }); hook.tap("sync", (a, b, c) => a + b + c); result[`${type}UnusedContextIntercepted`] = await this.gainResult((cb) => hook[type](1, 2, 3, cb)); } } gainResult(fn) { return Promise.race([new Promise(resolve => { try { const ret = fn((err, result) => { if(err) { resolve({ type: "async", error: err.message }); } else { resolve({ type: "async", value: result }); } }); if(ret instanceof Promise) { resolve(ret.then(res => ({ type: "promise", value: res }), err => ({ type: "promise", error: err.message }))); } else if(ret !== undefined) { resolve({ type: "return", value: ret }) } } catch(e) { resolve({ error: e.message }); } }), new Promise(resolve => { setTimeout(() => resolve({ type: "no result" }), 1000); })]); } createHook(args, name) { try { return this.hookCreator(args, name); } catch(err) { return { tap: () => {}, tapPromise: () => {}, tapAsync: () => {}, intercept: () => {}, call: () => { throw err; }, callAsync: () => { throw err; }, promise: () => { throw err; }, } } } } module.exports = HookTester; tapable-1.0.0/lib/__tests__/MultiHook.js000066400000000000000000000036121324347365200201100ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; require("babel-polyfill"); const MultiHook = require("../MultiHook"); describe("MultiHook", () => { const redirectedMethods = ["tap", "tapAsync", "tapPromise"]; for(const name of redirectedMethods) { it(`should redirect ${name}`, () => { const calls = []; const fakeHook = { [name]: (options, fn) => { calls.push({ options, fn }); } }; new MultiHook([fakeHook, fakeHook])[name]("options", "fn"); expect(calls).toEqual([ { options: "options", fn: "fn" }, { options: "options", fn: "fn" } ]); }); } it("should redirect intercept", () => { const calls = []; const fakeHook = { intercept: (interceptor) => { calls.push(interceptor); } }; new MultiHook([fakeHook, fakeHook]).intercept("interceptor"); expect(calls).toEqual([ "interceptor", "interceptor" ]); }); it("should redirect withOptions", () => { const calls = []; const fakeHook = { withOptions: (options) => { calls.push(options); return { tap: (options, fn) => { calls.push({ options, fn }); } } } }; const newHook = new MultiHook([fakeHook, fakeHook]).withOptions("options"); newHook.tap("options", "fn") expect(calls).toEqual([ "options", "options", { options: "options", fn: "fn" }, { options: "options", fn: "fn" } ]); }); it("should redirect isUsed", () => { const calls = []; const fakeHook1 = { isUsed: () => { return true; } }; const fakeHook2 = { isUsed: () => { return false; } }; expect(new MultiHook([fakeHook1, fakeHook1]).isUsed()).toEqual(true); expect(new MultiHook([fakeHook1, fakeHook2]).isUsed()).toEqual(true); expect(new MultiHook([fakeHook2, fakeHook1]).isUsed()).toEqual(true); expect(new MultiHook([fakeHook2, fakeHook2]).isUsed()).toEqual(false); }); }); tapable-1.0.0/lib/__tests__/SyncBailHook.js000066400000000000000000000035141324347365200205230ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; require("babel-polyfill"); const SyncBailHook = require("../SyncBailHook"); describe("SyncBailHook", () => { it("should allow to create sync bail hooks", async () => { const h1 = new SyncBailHook(["a"]); const h2 = new SyncBailHook(["a", "b"]); const h3 = new SyncBailHook(["a"]); let r = h1.call(1); expect(r).toEqual(undefined); h1.tap("A", (a) => undefined); h2.tap("A", (a, b) => [a, b]); expect(h1.call(1)).toEqual(undefined); expect(await h1.promise(1)).toEqual(undefined); expect(await pify(cb => h1.callAsync(1, cb))).toEqual(undefined); expect(h2.call(1, 2)).toEqual([1, 2]); expect(await h2.promise(1, 2)).toEqual([1, 2]); expect(await pify(cb => h2.callAsync(1, 2, cb))).toEqual([1, 2]); h1.tap("B", (a) => "ok" + a); h2.tap("B", (a, b) => "wrong"); expect(h1.call(10)).toEqual("ok10"); expect(await h1.promise(10)).toEqual("ok10"); expect(await pify(cb => h1.callAsync(10, cb))).toEqual("ok10"); expect(h2.call(10, 20)).toEqual([10, 20]); expect(await h2.promise(10, 20)).toEqual([10, 20]); expect(await pify(cb => h2.callAsync(10, 20, cb))).toEqual([10, 20]); }); it("should allow to intercept calls", () => { const hook = new SyncBailHook(["x"]); const mockCall = jest.fn(); const mockTap = jest.fn(x => x); hook.intercept({ call: mockCall, tap: mockTap }); hook.call(5); expect(mockCall).toHaveBeenLastCalledWith(5); expect(mockTap).not.toHaveBeenCalled(); hook.tap("test", () => 10); hook.call(7); expect(mockCall).toHaveBeenLastCalledWith(7); expect(mockTap).toHaveBeenCalled(); }); }); function pify(fn) { return new Promise((resolve, reject) => { fn((err, result) => { if(err) reject(err); else resolve(result); }); }); } tapable-1.0.0/lib/__tests__/SyncHook.js000066400000000000000000000047061324347365200177370ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; require("babel-polyfill"); const SyncHook = require("../SyncHook"); describe("SyncHook", () => { it("should allow to create sync hooks", async () => { const h0 = new SyncHook(); const h1 = new SyncHook(["test"]); const h2 = new SyncHook(["test", "arg2"]); const h3 = new SyncHook(["test", "arg2", "arg3"]); h0.call(); await h0.promise(); await new Promise(resolve => h0.callAsync(resolve)); const mock0 = jest.fn(); h0.tap("A", mock0); h0.call(); expect(mock0).toHaveBeenLastCalledWith(); const mock1 = jest.fn(); h0.tap("B", mock1) h0.call(); expect(mock1).toHaveBeenLastCalledWith(); const mock2 = jest.fn(); const mock3 = jest.fn(); const mock4 = jest.fn(); const mock5 = jest.fn(); h1.tap("C", mock2); h2.tap("D", mock3); h3.tap("E", mock4); h3.tap("F", mock5); h1.call("1"); h2.call("1", 2); h3.call("1", 2, 3); expect(mock2).toHaveBeenLastCalledWith("1"); expect(mock3).toHaveBeenLastCalledWith("1", 2); expect(mock4).toHaveBeenLastCalledWith("1", 2, 3); expect(mock5).toHaveBeenLastCalledWith("1", 2, 3); await new Promise(resolve => h1.callAsync("a", resolve)); await h2.promise("a", "b"); await new Promise(resolve => h3.callAsync("a", "b", "c", resolve)); expect(mock2).toHaveBeenLastCalledWith("a"); expect(mock3).toHaveBeenLastCalledWith("a", "b"); expect(mock4).toHaveBeenLastCalledWith("a", "b", "c"); expect(mock5).toHaveBeenLastCalledWith("a", "b", "c"); await h3.promise("x", "y"); expect(mock4).toHaveBeenLastCalledWith("x", "y", undefined); expect(mock5).toHaveBeenLastCalledWith("x", "y", undefined); }); it("should allow to intercept calls", () =>{ const hook = new SyncHook(["arg1", "arg2"]); const mockCall = jest.fn(); const mock0 = jest.fn(); const mockRegister = jest.fn(x => ({ name: "huh", type: "sync", fn: mock0 })); const mock1 = jest.fn(); hook.tap("Test1", mock1); hook.intercept({ call: mockCall, register: mockRegister }); const mock2 = jest.fn(); hook.tap("Test2", mock2); hook.call(1, 2); expect(mockCall).toHaveBeenLastCalledWith(1, 2); expect(mockRegister).toHaveBeenLastCalledWith({ type: "sync", name: "Test2", fn: mock2 }); expect(mock1).not.toHaveBeenLastCalledWith(1, 2); expect(mock2).not.toHaveBeenLastCalledWith(1, 2); expect(mock0).toHaveBeenLastCalledWith(1, 2); }) }); tapable-1.0.0/lib/__tests__/SyncHooks.js000066400000000000000000000025121324347365200201130ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const HookTester = require("./HookTester"); const SyncHook = require("../SyncHook"); const SyncBailHook = require("../SyncBailHook"); const SyncWaterfallHook = require("../SyncWaterfallHook"); const SyncLoopHook = require("../SyncLoopHook"); describe("SyncHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new SyncHook(args)); const result = await tester.run(true); expect(result).toMatchSnapshot(); }, 15000) }) describe("SyncBailHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new SyncBailHook(args)); const result = await tester.run(true); expect(result).toMatchSnapshot(); }, 15000) }) describe("SyncWaterfallHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new SyncWaterfallHook(args)); const result = await tester.run(true); expect(result).toMatchSnapshot(); }, 15000) }) describe("SyncLoopHook", () => { it("should have to correct behavior", async () => { const tester = new HookTester((args) => new SyncLoopHook(args)); const result = await tester.runForLoop(true); expect(result).toMatchSnapshot(); }, 15000) }) tapable-1.0.0/lib/__tests__/Tapable.js000066400000000000000000000027661324347365200175560ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const Tapable = require("../Tapable"); const SyncHook = require("../SyncHook"); const HookMap = require("../HookMap"); describe("Tapable", () => { it("should use same name or camelCase hook by default", () => { const t = new Tapable(); t.hooks = { myHook: new SyncHook() }; let called = 0; t.plugin("my-hook", () => called++); t.hooks.myHook.call(); t.plugin("myHook", () => called += 10); t.hooks.myHook.call(); expect(called).toEqual(12); }); it("should throw on unknown hook", () => { const t = new Tapable(); t.hooks = { myHook: new SyncHook() }; expect(() => { t.plugin("some-hook", () => {}); }).toThrow(/some-hook/); t.hooks.myHook.call(); }); it("should use custom mapping", () => { const t = new Tapable(); t.hooks = { myHook: new SyncHook(), hookMap: new HookMap(name => new SyncHook()) }; let called = 0; t._pluginCompat.tap("hookMap custom mapping", options => { const match = /^hookMap (.+)$/.exec(options.name); if(match) { t.hooks.hookMap.tap(match[1], options.fn.name || "unnamed compat plugin", options.fn); return true; } }) t.plugin("my-hook", () => called++); t.plugin("hookMap test", () => called += 10); t.hooks.myHook.call(); expect(called).toEqual(1); t.hooks.hookMap.for("test").call(); expect(called).toEqual(11); t.hooks.hookMap.for("other").call(); expect(called).toEqual(11); }); }) tapable-1.0.0/lib/__tests__/__snapshots__/000077500000000000000000000000001324347365200204535ustar00rootroot00000000000000tapable-1.0.0/lib/__tests__/__snapshots__/AsyncParallelHooks.js.snap000066400000000000000000001240171324347365200255140ustar00rootroot00000000000000// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`AsyncParallelBailHook should have to correct behavior 1`] = ` Object { "async": Object { "callAsyncMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncEarlyErrorCalled1": true, "callAsyncMultipleAsyncError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncErrorCalled1": true, "callAsyncMultipleAsyncLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorCalled1": true, "callAsyncMultipleAsyncLateErrorCalled3": true, "callAsyncMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorEarlyResult1Called1": true, "callAsyncMultipleAsyncLateErrorEarlyResult1Called3": true, "callAsyncMultipleAsyncLateErrorEarlyResult2": Object { "type": "async", "value": 42, }, "callAsyncMultipleAsyncLateErrorEarlyResult2Called1": true, "callAsyncMultipleAsyncLateErrorEarlyResult2Called3": true, "callAsyncMultipleAsyncWithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleAsyncWithArgCalled1": 42, "callAsyncMultipleAsyncWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleAsyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleAsyncWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultipleAsyncWithArgLastReturnCalled1": 42, "callAsyncMultipleAsyncWithArgLastReturnCalled2": 42, "callAsyncMultipleAsyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgNoReturnCalled1": 42, "callAsyncMultipleAsyncWithArgNoReturnCalled2": 42, "callAsyncMultipleMixed1WithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleMixed1WithArgCalled1": 42, "callAsyncMultipleMixed2WithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleMixed2WithArgCalled1": 42, "callAsyncMultipleMixed2WithArgCalled2": 42, "callAsyncMultipleMixed3WithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleMixed3WithArgCalled1": 42, "callAsyncMultipleMixedError1WithArg": Object { "type": "async", "value": 42, }, "callAsyncMultipleMixedError1WithArgCalled1": 42, "callAsyncMultipleMixedError2WithArg": Object { "type": "async", "value": 42, }, "callAsyncMultipleMixedError2WithArgCalled1": 42, "callAsyncMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedError3WithArgCalled1": 42, "callAsyncMultipleMixedLateError": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedLateErrorCalled1": true, "callAsyncMultipleMixedLateErrorCalled2": true, "callAsyncMultipleMixedLateErrorCalled3": true, "callAsyncMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseEarlyErrorCalled1": true, "callAsyncMultiplePromiseEarlyErrorCalled3": true, "callAsyncMultiplePromiseError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseErrorCalled1": true, "callAsyncMultiplePromiseErrorCalled3": true, "callAsyncMultiplePromiseLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseLateErrorCalled1": true, "callAsyncMultiplePromiseLateErrorCalled3": true, "callAsyncMultiplePromiseWithArg": Object { "type": "async", "value": 43, }, "callAsyncMultiplePromiseWithArgCalled1": 42, "callAsyncMultiplePromiseWithArgCalled2": 42, "callAsyncMultiplePromiseWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultiplePromiseWithArgFirstReturnCalled1": 42, "callAsyncMultiplePromiseWithArgFirstReturnCalled2": 42, "callAsyncMultiplePromiseWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultiplePromiseWithArgLastReturnCalled1": 42, "callAsyncMultiplePromiseWithArgLastReturnCalled2": 42, "callAsyncMultiplePromiseWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgNoReturnCalled1": 42, "callAsyncMultiplePromiseWithArgNoReturnCalled2": 42, "callAsyncMultipleSync": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncLastReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleSyncLastReturnCalled1": true, "callAsyncMultipleSyncLastReturnCalled2": true, "callAsyncMultipleSyncNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncNoReturnCalled1": true, "callAsyncMultipleSyncNoReturnCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleAsyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleAsyncWithArgCalled1": 42, "callAsyncSinglePromiseWithArg": Object { "type": "async", "value": 43, }, "callAsyncSinglePromiseWithArgCalled1": 42, "callAsyncSingleSync": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncCalled1": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 43, }, "callAsyncSingleSyncWithArgCalled1": 42, "callAsyncSingleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncEarlyErrorCalled1": true, "promiseMultipleAsyncError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncErrorCalled1": true, "promiseMultipleAsyncLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorCalled1": true, "promiseMultipleAsyncLateErrorCalled3": true, "promiseMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorEarlyResult1Called1": true, "promiseMultipleAsyncLateErrorEarlyResult1Called3": true, "promiseMultipleAsyncLateErrorEarlyResult2": Object { "type": "promise", "value": 42, }, "promiseMultipleAsyncLateErrorEarlyResult2Called1": true, "promiseMultipleAsyncLateErrorEarlyResult2Called3": true, "promiseMultipleAsyncWithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleAsyncWithArgCalled1": 42, "promiseMultipleAsyncWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleAsyncWithArgFirstReturnCalled1": 42, "promiseMultipleAsyncWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultipleAsyncWithArgLastReturnCalled1": 42, "promiseMultipleAsyncWithArgLastReturnCalled2": 42, "promiseMultipleAsyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncWithArgNoReturnCalled2": 42, "promiseMultipleMixed1WithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleMixed1WithArgCalled1": 42, "promiseMultipleMixed2WithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleMixed2WithArgCalled1": 42, "promiseMultipleMixed2WithArgCalled2": 42, "promiseMultipleMixed3WithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleMixed3WithArgCalled1": 42, "promiseMultipleMixedError1WithArg": Object { "type": "promise", "value": 42, }, "promiseMultipleMixedError1WithArgCalled1": 42, "promiseMultipleMixedError2WithArg": Object { "type": "promise", "value": 42, }, "promiseMultipleMixedError2WithArgCalled1": 42, "promiseMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedError3WithArgCalled1": 42, "promiseMultipleMixedLateError": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedLateErrorCalled1": true, "promiseMultipleMixedLateErrorCalled2": true, "promiseMultipleMixedLateErrorCalled3": true, "promiseMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseEarlyErrorCalled1": true, "promiseMultiplePromiseEarlyErrorCalled3": true, "promiseMultiplePromiseError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseErrorCalled1": true, "promiseMultiplePromiseErrorCalled3": true, "promiseMultiplePromiseLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseLateErrorCalled1": true, "promiseMultiplePromiseLateErrorCalled3": true, "promiseMultiplePromiseWithArg": Object { "type": "promise", "value": 43, }, "promiseMultiplePromiseWithArgCalled1": 42, "promiseMultiplePromiseWithArgCalled2": 42, "promiseMultiplePromiseWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultiplePromiseWithArgFirstReturnCalled1": 42, "promiseMultiplePromiseWithArgFirstReturnCalled2": 42, "promiseMultiplePromiseWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultiplePromiseWithArgLastReturnCalled1": 42, "promiseMultiplePromiseWithArgLastReturnCalled2": 42, "promiseMultiplePromiseWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgNoReturnCalled1": 42, "promiseMultiplePromiseWithArgNoReturnCalled2": 42, "promiseMultipleSync": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncLastReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleSyncLastReturnCalled1": true, "promiseMultipleSyncLastReturnCalled2": true, "promiseMultipleSyncNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncNoReturnCalled1": true, "promiseMultipleSyncNoReturnCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleAsyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleAsyncWithArgCalled1": 42, "promiseSinglePromiseWithArg": Object { "type": "promise", "value": 43, }, "promiseSinglePromiseWithArgCalled1": 42, "promiseSingleSync": Object { "type": "promise", "value": 42, }, "promiseSingleSyncCalled1": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 43, }, "promiseSingleSyncWithArgCalled1": 42, "promiseSingleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgNoReturnCalled1": 42, }, "intercept": Object { "callAsyncContextIntercepted": Object { "type": "async", "value": 48, }, "callAsyncContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "callAsyncContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncContextInterceptedTap1": Object { "number": 42, }, "callAsyncIntercepted": Object { "type": "async", "value": 6, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 3, "name": "sync", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "callAsyncUnusedContextIntercepted": Object { "type": "async", "value": 6, }, "callAsyncUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "callAsyncUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncUnusedContextInterceptedTap1": undefined, "promiseContextIntercepted": Object { "type": "promise", "value": 48, }, "promiseContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "promiseContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseContextInterceptedTap1": Object { "number": 42, }, "promiseIntercepted": Object { "type": "promise", "value": 6, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 3, "name": "sync", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "promiseUnusedContextIntercepted": Object { "type": "promise", "value": 6, }, "promiseUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "promiseUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseUnusedContextInterceptedTap1": undefined, }, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": 6, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncErrorCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 85, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": 129, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncCalled": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": 6, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncErrorCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 85, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": 129, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": 42, }, "promiseSingleSyncCalled": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleSyncWithArgCalled": 42, }, } `; exports[`AsyncParallelHook should have to correct behavior 1`] = ` Object { "async": Object { "callAsyncMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncEarlyErrorCalled1": true, "callAsyncMultipleAsyncError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncErrorCalled1": true, "callAsyncMultipleAsyncLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorCalled1": true, "callAsyncMultipleAsyncLateErrorCalled3": true, "callAsyncMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorEarlyResult1Called1": true, "callAsyncMultipleAsyncLateErrorEarlyResult1Called3": true, "callAsyncMultipleAsyncLateErrorEarlyResult2": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorEarlyResult2Called1": true, "callAsyncMultipleAsyncLateErrorEarlyResult2Called3": true, "callAsyncMultipleAsyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgCalled1": 42, "callAsyncMultipleAsyncWithArgCalled2": 42, "callAsyncMultipleAsyncWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleAsyncWithArgFirstReturnCalled2": 42, "callAsyncMultipleAsyncWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgLastReturnCalled1": 42, "callAsyncMultipleAsyncWithArgLastReturnCalled2": 42, "callAsyncMultipleAsyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgNoReturnCalled1": 42, "callAsyncMultipleAsyncWithArgNoReturnCalled2": 42, "callAsyncMultipleMixed1WithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleMixed1WithArgCalled1": 42, "callAsyncMultipleMixed1WithArgCalled2": 42, "callAsyncMultipleMixed1WithArgCalled3": 42, "callAsyncMultipleMixed2WithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleMixed2WithArgCalled1": 42, "callAsyncMultipleMixed2WithArgCalled2": 42, "callAsyncMultipleMixed3WithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleMixed3WithArgCalled1": 42, "callAsyncMultipleMixed3WithArgCalled2": 42, "callAsyncMultipleMixed3WithArgCalled3": 42, "callAsyncMultipleMixedError1WithArg": Object { "error": "Error in sync", "type": "async", }, "callAsyncMultipleMixedError1WithArgCalled1": 42, "callAsyncMultipleMixedError1WithArgCalled2": 42, "callAsyncMultipleMixedError1WithArgCalled3": 42, "callAsyncMultipleMixedError2WithArg": Object { "error": "Error in promise", "type": "async", }, "callAsyncMultipleMixedError2WithArgCalled1": 42, "callAsyncMultipleMixedError2WithArgCalled2": 42, "callAsyncMultipleMixedError2WithArgCalled3": 42, "callAsyncMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedError3WithArgCalled1": 42, "callAsyncMultipleMixedLateError": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedLateErrorCalled1": true, "callAsyncMultipleMixedLateErrorCalled2": true, "callAsyncMultipleMixedLateErrorCalled3": true, "callAsyncMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseEarlyErrorCalled1": true, "callAsyncMultiplePromiseEarlyErrorCalled3": true, "callAsyncMultiplePromiseError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseErrorCalled1": true, "callAsyncMultiplePromiseErrorCalled3": true, "callAsyncMultiplePromiseLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseLateErrorCalled1": true, "callAsyncMultiplePromiseLateErrorCalled3": true, "callAsyncMultiplePromiseWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgCalled1": 42, "callAsyncMultiplePromiseWithArgCalled2": 42, "callAsyncMultiplePromiseWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgFirstReturnCalled1": 42, "callAsyncMultiplePromiseWithArgFirstReturnCalled2": 42, "callAsyncMultiplePromiseWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgLastReturnCalled1": 42, "callAsyncMultiplePromiseWithArgLastReturnCalled2": 42, "callAsyncMultiplePromiseWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgNoReturnCalled1": 42, "callAsyncMultiplePromiseWithArgNoReturnCalled2": 42, "callAsyncMultipleSync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncCalled2": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncLastReturnCalled1": true, "callAsyncMultipleSyncLastReturnCalled2": true, "callAsyncMultipleSyncNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncNoReturnCalled1": true, "callAsyncMultipleSyncNoReturnCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleAsyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleAsyncWithArgCalled1": 42, "callAsyncSinglePromiseWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSinglePromiseWithArgCalled1": 42, "callAsyncSingleSync": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncCalled1": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgCalled1": 42, "callAsyncSingleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncEarlyErrorCalled1": true, "promiseMultipleAsyncError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncErrorCalled1": true, "promiseMultipleAsyncLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorCalled1": true, "promiseMultipleAsyncLateErrorCalled3": true, "promiseMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorEarlyResult1Called1": true, "promiseMultipleAsyncLateErrorEarlyResult1Called3": true, "promiseMultipleAsyncLateErrorEarlyResult2": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorEarlyResult2Called1": true, "promiseMultipleAsyncLateErrorEarlyResult2Called3": true, "promiseMultipleAsyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgCalled1": 42, "promiseMultipleAsyncWithArgCalled2": 42, "promiseMultipleAsyncWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgFirstReturnCalled1": 42, "promiseMultipleAsyncWithArgFirstReturnCalled2": 42, "promiseMultipleAsyncWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgLastReturnCalled1": 42, "promiseMultipleAsyncWithArgLastReturnCalled2": 42, "promiseMultipleAsyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncWithArgNoReturnCalled2": 42, "promiseMultipleMixed1WithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleMixed1WithArgCalled1": 42, "promiseMultipleMixed1WithArgCalled2": 42, "promiseMultipleMixed1WithArgCalled3": 42, "promiseMultipleMixed2WithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleMixed2WithArgCalled1": 42, "promiseMultipleMixed2WithArgCalled2": 42, "promiseMultipleMixed3WithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleMixed3WithArgCalled1": 42, "promiseMultipleMixed3WithArgCalled2": 42, "promiseMultipleMixed3WithArgCalled3": 42, "promiseMultipleMixedError1WithArg": Object { "error": "Error in sync", "type": "promise", }, "promiseMultipleMixedError1WithArgCalled1": 42, "promiseMultipleMixedError1WithArgCalled2": 42, "promiseMultipleMixedError1WithArgCalled3": 42, "promiseMultipleMixedError2WithArg": Object { "error": "Error in promise", "type": "promise", }, "promiseMultipleMixedError2WithArgCalled1": 42, "promiseMultipleMixedError2WithArgCalled2": 42, "promiseMultipleMixedError2WithArgCalled3": 42, "promiseMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedError3WithArgCalled1": 42, "promiseMultipleMixedLateError": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedLateErrorCalled1": true, "promiseMultipleMixedLateErrorCalled2": true, "promiseMultipleMixedLateErrorCalled3": true, "promiseMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseEarlyErrorCalled1": true, "promiseMultiplePromiseEarlyErrorCalled3": true, "promiseMultiplePromiseError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseErrorCalled1": true, "promiseMultiplePromiseErrorCalled3": true, "promiseMultiplePromiseLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseLateErrorCalled1": true, "promiseMultiplePromiseLateErrorCalled3": true, "promiseMultiplePromiseWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgCalled1": 42, "promiseMultiplePromiseWithArgCalled2": 42, "promiseMultiplePromiseWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgFirstReturnCalled1": 42, "promiseMultiplePromiseWithArgFirstReturnCalled2": 42, "promiseMultiplePromiseWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgLastReturnCalled1": 42, "promiseMultiplePromiseWithArgLastReturnCalled2": 42, "promiseMultiplePromiseWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgNoReturnCalled1": 42, "promiseMultiplePromiseWithArgNoReturnCalled2": 42, "promiseMultipleSync": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncCalled2": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncLastReturnCalled1": true, "promiseMultipleSyncLastReturnCalled2": true, "promiseMultipleSyncNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncNoReturnCalled1": true, "promiseMultipleSyncNoReturnCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleAsyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleAsyncWithArgCalled1": 42, "promiseSinglePromiseWithArg": Object { "type": "promise", "value": undefined, }, "promiseSinglePromiseWithArgCalled1": 42, "promiseSingleSync": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncCalled1": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgCalled1": 42, "promiseSingleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgNoReturnCalled1": 42, }, "intercept": Object { "callAsyncContextIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "callAsyncContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncContextInterceptedTap1": Object { "number": 42, }, "callAsyncIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "promise", "type": "promise", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "callAsyncUnusedContextIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "callAsyncUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncUnusedContextInterceptedTap1": undefined, "promiseContextIntercepted": Object { "type": "promise", "value": undefined, }, "promiseContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "promiseContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseContextInterceptedTap1": Object { "number": 42, }, "promiseIntercepted": Object { "type": "promise", "value": undefined, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "promise", "type": "promise", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "promiseUnusedContextIntercepted": Object { "type": "promise", "value": undefined, }, "promiseUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "promiseUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseUnusedContextInterceptedTap1": undefined, }, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncCalled2": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncErrorCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncMultipleSyncWithArgsCalled2": Array [ 42, 43, 44, ], "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncCalled": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": undefined, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncCalled2": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncErrorCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseMultipleSyncWithArgsCalled2": Array [ 42, 43, 44, ], "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncCalled": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgCalled": 42, }, } `; tapable-1.0.0/lib/__tests__/__snapshots__/AsyncSeriesHooks.js.snap000066400000000000000000001743571324347365200252260ustar00rootroot00000000000000// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`AsyncSeriesBailHook should have to correct behavior 1`] = ` Object { "async": Object { "callAsyncMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncEarlyErrorCalled1": true, "callAsyncMultipleAsyncError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncErrorCalled1": true, "callAsyncMultipleAsyncLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorCalled1": true, "callAsyncMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorEarlyResult1Called1": true, "callAsyncMultipleAsyncLateErrorEarlyResult2": Object { "type": "async", "value": 42, }, "callAsyncMultipleAsyncLateErrorEarlyResult2Called1": true, "callAsyncMultipleAsyncWithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleAsyncWithArgCalled1": 42, "callAsyncMultipleAsyncWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleAsyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleAsyncWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultipleAsyncWithArgLastReturnCalled1": 42, "callAsyncMultipleAsyncWithArgLastReturnCalled2": 42, "callAsyncMultipleAsyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgNoReturnCalled1": 42, "callAsyncMultipleAsyncWithArgNoReturnCalled2": 42, "callAsyncMultipleMixed1WithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleMixed1WithArgCalled1": 42, "callAsyncMultipleMixed2WithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleMixed2WithArgCalled1": 42, "callAsyncMultipleMixed3WithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleMixed3WithArgCalled1": 42, "callAsyncMultipleMixedError1WithArg": Object { "type": "async", "value": 42, }, "callAsyncMultipleMixedError1WithArgCalled1": 42, "callAsyncMultipleMixedError2WithArg": Object { "type": "async", "value": 42, }, "callAsyncMultipleMixedError2WithArgCalled1": 42, "callAsyncMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedError3WithArgCalled1": 42, "callAsyncMultipleMixedLateError": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedLateErrorCalled1": true, "callAsyncMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseEarlyErrorCalled1": true, "callAsyncMultiplePromiseError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseErrorCalled1": true, "callAsyncMultiplePromiseLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseLateErrorCalled1": true, "callAsyncMultiplePromiseWithArg": Object { "type": "async", "value": 43, }, "callAsyncMultiplePromiseWithArgCalled1": 42, "callAsyncMultiplePromiseWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultiplePromiseWithArgFirstReturnCalled1": 42, "callAsyncMultiplePromiseWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultiplePromiseWithArgLastReturnCalled1": 42, "callAsyncMultiplePromiseWithArgLastReturnCalled2": 42, "callAsyncMultiplePromiseWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgNoReturnCalled1": 42, "callAsyncMultiplePromiseWithArgNoReturnCalled2": 42, "callAsyncMultipleSync": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncLastReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleSyncLastReturnCalled1": true, "callAsyncMultipleSyncLastReturnCalled2": true, "callAsyncMultipleSyncNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncNoReturnCalled1": true, "callAsyncMultipleSyncNoReturnCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 43, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleAsyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleAsyncWithArgCalled1": 42, "callAsyncSinglePromiseWithArg": Object { "type": "async", "value": 43, }, "callAsyncSinglePromiseWithArgCalled1": 42, "callAsyncSingleSync": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncCalled1": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 43, }, "callAsyncSingleSyncWithArgCalled1": 42, "callAsyncSingleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncEarlyErrorCalled1": true, "promiseMultipleAsyncError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncErrorCalled1": true, "promiseMultipleAsyncLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorCalled1": true, "promiseMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorEarlyResult1Called1": true, "promiseMultipleAsyncLateErrorEarlyResult2": Object { "type": "promise", "value": 42, }, "promiseMultipleAsyncLateErrorEarlyResult2Called1": true, "promiseMultipleAsyncWithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleAsyncWithArgCalled1": 42, "promiseMultipleAsyncWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleAsyncWithArgFirstReturnCalled1": 42, "promiseMultipleAsyncWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultipleAsyncWithArgLastReturnCalled1": 42, "promiseMultipleAsyncWithArgLastReturnCalled2": 42, "promiseMultipleAsyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncWithArgNoReturnCalled2": 42, "promiseMultipleMixed1WithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleMixed1WithArgCalled1": 42, "promiseMultipleMixed2WithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleMixed2WithArgCalled1": 42, "promiseMultipleMixed3WithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleMixed3WithArgCalled1": 42, "promiseMultipleMixedError1WithArg": Object { "type": "promise", "value": 42, }, "promiseMultipleMixedError1WithArgCalled1": 42, "promiseMultipleMixedError2WithArg": Object { "type": "promise", "value": 42, }, "promiseMultipleMixedError2WithArgCalled1": 42, "promiseMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedError3WithArgCalled1": 42, "promiseMultipleMixedLateError": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedLateErrorCalled1": true, "promiseMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseEarlyErrorCalled1": true, "promiseMultiplePromiseError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseErrorCalled1": true, "promiseMultiplePromiseLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseLateErrorCalled1": true, "promiseMultiplePromiseWithArg": Object { "type": "promise", "value": 43, }, "promiseMultiplePromiseWithArgCalled1": 42, "promiseMultiplePromiseWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultiplePromiseWithArgFirstReturnCalled1": 42, "promiseMultiplePromiseWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultiplePromiseWithArgLastReturnCalled1": 42, "promiseMultiplePromiseWithArgLastReturnCalled2": 42, "promiseMultiplePromiseWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgNoReturnCalled1": 42, "promiseMultiplePromiseWithArgNoReturnCalled2": 42, "promiseMultipleSync": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncLastReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleSyncLastReturnCalled1": true, "promiseMultipleSyncLastReturnCalled2": true, "promiseMultipleSyncNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncNoReturnCalled1": true, "promiseMultipleSyncNoReturnCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 43, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleAsyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleAsyncWithArgCalled1": 42, "promiseSinglePromiseWithArg": Object { "type": "promise", "value": 43, }, "promiseSinglePromiseWithArgCalled1": 42, "promiseSingleSync": Object { "type": "promise", "value": 42, }, "promiseSingleSyncCalled1": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 43, }, "promiseSingleSyncWithArgCalled1": 42, "promiseSingleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgNoReturnCalled1": 42, }, "intercept": Object { "callAsyncContextIntercepted": Object { "type": "async", "value": 48, }, "callAsyncContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "callAsyncContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncContextInterceptedTap1": Object { "number": 42, }, "callAsyncIntercepted": Object { "type": "async", "value": 6, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 3, "name": "sync", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "callAsyncUnusedContextIntercepted": Object { "type": "async", "value": 6, }, "callAsyncUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "callAsyncUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncUnusedContextInterceptedTap1": undefined, "promiseContextIntercepted": Object { "type": "promise", "value": 48, }, "promiseContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "promiseContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseContextInterceptedTap1": Object { "number": 42, }, "promiseIntercepted": Object { "type": "promise", "value": 6, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 3, "name": "sync", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "promiseUnusedContextIntercepted": Object { "type": "promise", "value": 6, }, "promiseUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "promiseUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseUnusedContextInterceptedTap1": undefined, }, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": 6, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncErrorCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 85, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": 129, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncCalled": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": 6, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncErrorCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 85, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": 129, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": 42, }, "promiseSingleSyncCalled": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleSyncWithArgCalled": 42, }, } `; exports[`AsyncSeriesHook should have to correct behavior 1`] = ` Object { "async": Object { "callAsyncMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncEarlyErrorCalled1": true, "callAsyncMultipleAsyncError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncErrorCalled1": true, "callAsyncMultipleAsyncLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorCalled1": true, "callAsyncMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorEarlyResult1Called1": true, "callAsyncMultipleAsyncLateErrorEarlyResult2": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultipleAsyncLateErrorEarlyResult2Called1": true, "callAsyncMultipleAsyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgCalled1": 42, "callAsyncMultipleAsyncWithArgCalled2": 42, "callAsyncMultipleAsyncWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleAsyncWithArgFirstReturnCalled2": 42, "callAsyncMultipleAsyncWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgLastReturnCalled1": 42, "callAsyncMultipleAsyncWithArgLastReturnCalled2": 42, "callAsyncMultipleAsyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncWithArgNoReturnCalled1": 42, "callAsyncMultipleAsyncWithArgNoReturnCalled2": 42, "callAsyncMultipleMixed1WithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleMixed1WithArgCalled1": 42, "callAsyncMultipleMixed1WithArgCalled2": 42, "callAsyncMultipleMixed1WithArgCalled3": 42, "callAsyncMultipleMixed2WithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleMixed2WithArgCalled1": 42, "callAsyncMultipleMixed2WithArgCalled2": 42, "callAsyncMultipleMixed3WithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleMixed3WithArgCalled1": 42, "callAsyncMultipleMixed3WithArgCalled2": 42, "callAsyncMultipleMixed3WithArgCalled3": 42, "callAsyncMultipleMixedError1WithArg": Object { "error": "Error in sync", "type": "async", }, "callAsyncMultipleMixedError1WithArgCalled1": 42, "callAsyncMultipleMixedError1WithArgCalled2": 42, "callAsyncMultipleMixedError1WithArgCalled3": 42, "callAsyncMultipleMixedError2WithArg": Object { "error": "Error in promise", "type": "async", }, "callAsyncMultipleMixedError2WithArgCalled1": 42, "callAsyncMultipleMixedError2WithArgCalled2": 42, "callAsyncMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedError3WithArgCalled1": 42, "callAsyncMultipleMixedLateError": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedLateErrorCalled1": true, "callAsyncMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseEarlyErrorCalled1": true, "callAsyncMultiplePromiseError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseErrorCalled1": true, "callAsyncMultiplePromiseLateError": Object { "error": "Error in async2", "type": "async", }, "callAsyncMultiplePromiseLateErrorCalled1": true, "callAsyncMultiplePromiseWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgCalled1": 42, "callAsyncMultiplePromiseWithArgCalled2": 42, "callAsyncMultiplePromiseWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgFirstReturnCalled1": 42, "callAsyncMultiplePromiseWithArgFirstReturnCalled2": 42, "callAsyncMultiplePromiseWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgLastReturnCalled1": 42, "callAsyncMultiplePromiseWithArgLastReturnCalled2": 42, "callAsyncMultiplePromiseWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseWithArgNoReturnCalled1": 42, "callAsyncMultiplePromiseWithArgNoReturnCalled2": 42, "callAsyncMultipleSync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncCalled2": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncLastReturnCalled1": true, "callAsyncMultipleSyncLastReturnCalled2": true, "callAsyncMultipleSyncNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncNoReturnCalled1": true, "callAsyncMultipleSyncNoReturnCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleAsyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleAsyncWithArgCalled1": 42, "callAsyncSinglePromiseWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSinglePromiseWithArgCalled1": 42, "callAsyncSingleSync": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncCalled1": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgCalled1": 42, "callAsyncSingleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncEarlyErrorCalled1": true, "promiseMultipleAsyncError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncErrorCalled1": true, "promiseMultipleAsyncLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorCalled1": true, "promiseMultipleAsyncLateErrorEarlyResult1": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorEarlyResult1Called1": true, "promiseMultipleAsyncLateErrorEarlyResult2": Object { "error": "Error in async2", "type": "promise", }, "promiseMultipleAsyncLateErrorEarlyResult2Called1": true, "promiseMultipleAsyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgCalled1": 42, "promiseMultipleAsyncWithArgCalled2": 42, "promiseMultipleAsyncWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgFirstReturnCalled1": 42, "promiseMultipleAsyncWithArgFirstReturnCalled2": 42, "promiseMultipleAsyncWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgLastReturnCalled1": 42, "promiseMultipleAsyncWithArgLastReturnCalled2": 42, "promiseMultipleAsyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncWithArgNoReturnCalled2": 42, "promiseMultipleMixed1WithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleMixed1WithArgCalled1": 42, "promiseMultipleMixed1WithArgCalled2": 42, "promiseMultipleMixed1WithArgCalled3": 42, "promiseMultipleMixed2WithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleMixed2WithArgCalled1": 42, "promiseMultipleMixed2WithArgCalled2": 42, "promiseMultipleMixed3WithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleMixed3WithArgCalled1": 42, "promiseMultipleMixed3WithArgCalled2": 42, "promiseMultipleMixed3WithArgCalled3": 42, "promiseMultipleMixedError1WithArg": Object { "error": "Error in sync", "type": "promise", }, "promiseMultipleMixedError1WithArgCalled1": 42, "promiseMultipleMixedError1WithArgCalled2": 42, "promiseMultipleMixedError1WithArgCalled3": 42, "promiseMultipleMixedError2WithArg": Object { "error": "Error in promise", "type": "promise", }, "promiseMultipleMixedError2WithArgCalled1": 42, "promiseMultipleMixedError2WithArgCalled2": 42, "promiseMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedError3WithArgCalled1": 42, "promiseMultipleMixedLateError": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedLateErrorCalled1": true, "promiseMultiplePromiseEarlyError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseEarlyErrorCalled1": true, "promiseMultiplePromiseError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseErrorCalled1": true, "promiseMultiplePromiseLateError": Object { "error": "Error in async2", "type": "promise", }, "promiseMultiplePromiseLateErrorCalled1": true, "promiseMultiplePromiseWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgCalled1": 42, "promiseMultiplePromiseWithArgCalled2": 42, "promiseMultiplePromiseWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgFirstReturnCalled1": 42, "promiseMultiplePromiseWithArgFirstReturnCalled2": 42, "promiseMultiplePromiseWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgLastReturnCalled1": 42, "promiseMultiplePromiseWithArgLastReturnCalled2": 42, "promiseMultiplePromiseWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseWithArgNoReturnCalled1": 42, "promiseMultiplePromiseWithArgNoReturnCalled2": 42, "promiseMultipleSync": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncCalled2": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncLastReturnCalled1": true, "promiseMultipleSyncLastReturnCalled2": true, "promiseMultipleSyncNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncNoReturnCalled1": true, "promiseMultipleSyncNoReturnCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleAsyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleAsyncWithArgCalled1": 42, "promiseSinglePromiseWithArg": Object { "type": "promise", "value": undefined, }, "promiseSinglePromiseWithArgCalled1": 42, "promiseSingleSync": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncCalled1": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgCalled1": 42, "promiseSingleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgNoReturnCalled1": 42, }, "intercept": Object { "callAsyncContextIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "callAsyncContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncContextInterceptedTap1": Object { "number": 42, }, "callAsyncIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "promise", "type": "promise", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "callAsyncUnusedContextIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "callAsyncUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncUnusedContextInterceptedTap1": undefined, "promiseContextIntercepted": Object { "type": "promise", "value": undefined, }, "promiseContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "promiseContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseContextInterceptedTap1": Object { "number": 42, }, "promiseIntercepted": Object { "type": "promise", "value": undefined, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "promise", "type": "promise", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "promiseUnusedContextIntercepted": Object { "type": "promise", "value": undefined, }, "promiseUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "promiseUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseUnusedContextInterceptedTap1": undefined, }, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncCalled2": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncErrorCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncMultipleSyncWithArgsCalled2": Array [ 42, 43, 44, ], "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncCalled": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": undefined, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncCalled2": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncErrorCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseMultipleSyncWithArgsCalled2": Array [ 42, 43, 44, ], "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncCalled": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgCalled": 42, }, } `; exports[`AsyncSeriesLoopHook should have to correct behavior 1`] = ` Object { "async": Object { "callAsyncMixed": Object { "type": "async", "value": undefined, }, "callAsyncMixedCalled1": 124, "callAsyncMixedCalled2": 83, "callAsyncMixedCalled3": 42, "callAsyncMultipleAsync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleAsyncCalled1": 83, "callAsyncMultipleAsyncCalled2": 42, "callAsyncMultiplePromise": Object { "type": "async", "value": undefined, }, "callAsyncMultiplePromiseCalled1": 83, "callAsyncMultiplePromiseCalled2": 42, "callAsyncSingleAsync": Object { "type": "async", "value": undefined, }, "callAsyncSingleAsyncCalled": 42, "callAsyncSinglePromise": Object { "type": "async", "value": undefined, }, "callAsyncSinglePromiseCalled": 42, "promiseMixed": Object { "type": "promise", "value": undefined, }, "promiseMixedCalled1": 124, "promiseMixedCalled2": 83, "promiseMixedCalled3": 42, "promiseMultipleAsync": Object { "type": "promise", "value": undefined, }, "promiseMultipleAsyncCalled1": 83, "promiseMultipleAsyncCalled2": 42, "promiseMultiplePromise": Object { "type": "promise", "value": undefined, }, "promiseMultiplePromiseCalled1": 83, "promiseMultiplePromiseCalled2": 42, "promiseSingleAsync": Object { "type": "promise", "value": undefined, }, "promiseSingleAsyncCalled": 42, "promiseSinglePromise": Object { "type": "promise", "value": undefined, }, "promiseSinglePromiseCalled": 42, }, "sync": Object { "callAsyncInterceptedSync": Object { "type": "async", "value": undefined, }, "callAsyncInterceptedSyncCalled1": 83, "callAsyncInterceptedSyncCalled2": 42, "callAsyncInterceptedSyncCalledCall": 1, "callAsyncInterceptedSyncCalledLoop": 83, "callAsyncInterceptedSyncCalledTap": 125, "callAsyncMultipleSync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncCalled1": 83, "callAsyncMultipleSyncCalled2": 42, "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncCalled": 42, "promiseInterceptedSync": Object { "type": "promise", "value": undefined, }, "promiseInterceptedSyncCalled1": 83, "promiseInterceptedSyncCalled2": 42, "promiseInterceptedSyncCalledCall": 1, "promiseInterceptedSyncCalledLoop": 83, "promiseInterceptedSyncCalledTap": 125, "promiseMultipleSync": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncCalled1": 83, "promiseMultipleSyncCalled2": 42, "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncCalled": 42, }, } `; exports[`AsyncSeriesWaterfallHook should have to correct behavior 1`] = ` Object { "async": Object { "callAsyncMultipleAsyncEarlyError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleAsyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleAsyncLateError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleAsyncLateErrorEarlyResult1": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleAsyncLateErrorEarlyResult2": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleAsyncWithArg": Object { "type": "async", "value": 45, }, "callAsyncMultipleAsyncWithArgCalled1": 42, "callAsyncMultipleAsyncWithArgCalled2": 43, "callAsyncMultipleAsyncWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleAsyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleAsyncWithArgFirstReturnCalled2": 43, "callAsyncMultipleAsyncWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultipleAsyncWithArgLastReturnCalled1": 42, "callAsyncMultipleAsyncWithArgLastReturnCalled2": 42, "callAsyncMultipleAsyncWithArgNoReturn": Object { "type": "async", "value": 42, }, "callAsyncMultipleAsyncWithArgNoReturnCalled1": 42, "callAsyncMultipleAsyncWithArgNoReturnCalled2": 42, "callAsyncMultipleMixed1WithArg": Object { "type": "async", "value": 48, }, "callAsyncMultipleMixed1WithArgCalled1": 42, "callAsyncMultipleMixed1WithArgCalled2": 43, "callAsyncMultipleMixed1WithArgCalled3": 45, "callAsyncMultipleMixed2WithArg": Object { "type": "async", "value": 45, }, "callAsyncMultipleMixed2WithArgCalled1": 42, "callAsyncMultipleMixed2WithArgCalled2": 43, "callAsyncMultipleMixed3WithArg": Object { "type": "async", "value": 48, }, "callAsyncMultipleMixed3WithArgCalled1": 42, "callAsyncMultipleMixed3WithArgCalled2": 43, "callAsyncMultipleMixed3WithArgCalled3": 45, "callAsyncMultipleMixedError1WithArg": Object { "error": "Error in sync", "type": "async", }, "callAsyncMultipleMixedError1WithArgCalled1": 42, "callAsyncMultipleMixedError1WithArgCalled2": 42, "callAsyncMultipleMixedError1WithArgCalled3": 43, "callAsyncMultipleMixedError2WithArg": Object { "error": "Error in promise", "type": "async", }, "callAsyncMultipleMixedError2WithArgCalled1": 42, "callAsyncMultipleMixedError2WithArgCalled2": 42, "callAsyncMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "async", }, "callAsyncMultipleMixedError3WithArgCalled1": 42, "callAsyncMultipleMixedLateError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultiplePromiseEarlyError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultiplePromiseError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultiplePromiseLateError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultiplePromiseWithArg": Object { "type": "async", "value": 45, }, "callAsyncMultiplePromiseWithArgCalled1": 42, "callAsyncMultiplePromiseWithArgCalled2": 43, "callAsyncMultiplePromiseWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultiplePromiseWithArgFirstReturnCalled1": 42, "callAsyncMultiplePromiseWithArgFirstReturnCalled2": 43, "callAsyncMultiplePromiseWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultiplePromiseWithArgLastReturnCalled1": 42, "callAsyncMultiplePromiseWithArgLastReturnCalled2": 42, "callAsyncMultiplePromiseWithArgNoReturn": Object { "type": "async", "value": 42, }, "callAsyncMultiplePromiseWithArgNoReturnCalled1": 42, "callAsyncMultiplePromiseWithArgNoReturnCalled2": 42, "callAsyncMultipleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncLastReturn": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncNoReturn": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 45, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 43, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 43, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 43, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 44, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncNone": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncNoneWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleAsyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleAsyncWithArgCalled1": 42, "callAsyncSinglePromiseWithArg": Object { "type": "async", "value": 43, }, "callAsyncSinglePromiseWithArgCalled1": 42, "callAsyncSingleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 43, }, "callAsyncSingleSyncWithArgCalled1": 42, "callAsyncSingleSyncWithArgNoReturn": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncEarlyError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleAsyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleAsyncLateError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleAsyncLateErrorEarlyResult1": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleAsyncLateErrorEarlyResult2": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleAsyncWithArg": Object { "type": "promise", "value": 45, }, "promiseMultipleAsyncWithArgCalled1": 42, "promiseMultipleAsyncWithArgCalled2": 43, "promiseMultipleAsyncWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleAsyncWithArgFirstReturnCalled1": 42, "promiseMultipleAsyncWithArgFirstReturnCalled2": 43, "promiseMultipleAsyncWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultipleAsyncWithArgLastReturnCalled1": 42, "promiseMultipleAsyncWithArgLastReturnCalled2": 42, "promiseMultipleAsyncWithArgNoReturn": Object { "type": "promise", "value": 42, }, "promiseMultipleAsyncWithArgNoReturnCalled1": 42, "promiseMultipleAsyncWithArgNoReturnCalled2": 42, "promiseMultipleMixed1WithArg": Object { "type": "promise", "value": 48, }, "promiseMultipleMixed1WithArgCalled1": 42, "promiseMultipleMixed1WithArgCalled2": 43, "promiseMultipleMixed1WithArgCalled3": 45, "promiseMultipleMixed2WithArg": Object { "type": "promise", "value": 45, }, "promiseMultipleMixed2WithArgCalled1": 42, "promiseMultipleMixed2WithArgCalled2": 43, "promiseMultipleMixed3WithArg": Object { "type": "promise", "value": 48, }, "promiseMultipleMixed3WithArgCalled1": 42, "promiseMultipleMixed3WithArgCalled2": 43, "promiseMultipleMixed3WithArgCalled3": 45, "promiseMultipleMixedError1WithArg": Object { "error": "Error in sync", "type": "promise", }, "promiseMultipleMixedError1WithArgCalled1": 42, "promiseMultipleMixedError1WithArgCalled2": 42, "promiseMultipleMixedError1WithArgCalled3": 43, "promiseMultipleMixedError2WithArg": Object { "error": "Error in promise", "type": "promise", }, "promiseMultipleMixedError2WithArgCalled1": 42, "promiseMultipleMixedError2WithArgCalled2": 42, "promiseMultipleMixedError3WithArg": Object { "error": "Error in async", "type": "promise", }, "promiseMultipleMixedError3WithArgCalled1": 42, "promiseMultipleMixedLateError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultiplePromiseEarlyError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultiplePromiseError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultiplePromiseLateError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultiplePromiseWithArg": Object { "type": "promise", "value": 45, }, "promiseMultiplePromiseWithArgCalled1": 42, "promiseMultiplePromiseWithArgCalled2": 43, "promiseMultiplePromiseWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultiplePromiseWithArgFirstReturnCalled1": 42, "promiseMultiplePromiseWithArgFirstReturnCalled2": 43, "promiseMultiplePromiseWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultiplePromiseWithArgLastReturnCalled1": 42, "promiseMultiplePromiseWithArgLastReturnCalled2": 42, "promiseMultiplePromiseWithArgNoReturn": Object { "type": "promise", "value": 42, }, "promiseMultiplePromiseWithArgNoReturnCalled1": 42, "promiseMultiplePromiseWithArgNoReturnCalled2": 42, "promiseMultipleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncLastReturn": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncNoReturn": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 45, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 43, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 43, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 43, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 44, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseNone": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseNoneWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleAsyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleAsyncWithArgCalled1": 42, "promiseSinglePromiseWithArg": Object { "type": "promise", "value": 43, }, "promiseSinglePromiseWithArgCalled1": 42, "promiseSingleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 43, }, "promiseSingleSyncWithArgCalled1": 42, "promiseSingleSyncWithArgNoReturn": Object { "type": "promise", "value": 42, }, "promiseSingleSyncWithArgNoReturnCalled1": 42, }, "intercept": Object { "callAsyncContextIntercepted": Object { "type": "async", "value": 48, }, "callAsyncContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "callAsyncContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncContextInterceptedTap1": Object { "number": 42, }, "callAsyncIntercepted": Object { "type": "async", "value": 9, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "promise", "type": "promise", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "callAsyncUnusedContextIntercepted": Object { "type": "async", "value": 6, }, "callAsyncUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "callAsyncUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncUnusedContextInterceptedTap1": undefined, "promiseContextIntercepted": Object { "type": "promise", "value": 48, }, "promiseContextInterceptedCall1": Array [ Object { "number": 42, }, 1, 2, 3, ], "promiseContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseContextInterceptedTap1": Object { "number": 42, }, "promiseIntercepted": Object { "type": "promise", "value": 9, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "promise", "type": "promise", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync", "type": "sync", }, "promiseUnusedContextIntercepted": Object { "type": "promise", "value": 6, }, "promiseUnusedContextInterceptedCall1": Array [ undefined, 1, 2, 3, ], "promiseUnusedContextInterceptedCall2": Array [ 1, 2, 3, ], "promiseUnusedContextInterceptedTap1": undefined, }, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": 9, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 127, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 84, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 84, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 85, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": 217, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncMultipleSyncWithArgsCalled2": Array [ 129, 43, 44, ], "callAsyncNone": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncNoneWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": 9, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 127, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 84, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 84, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 85, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": 217, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseMultipleSyncWithArgsCalled2": Array [ 129, 43, 44, ], "promiseNone": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseNoneWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleSyncWithArgCalled": 42, }, } `; tapable-1.0.0/lib/__tests__/__snapshots__/HookCodeFactory.js.snap000066400000000000000000000341051324347365200247770ustar00rootroot00000000000000// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`HookCodeFactory callTap (no args, no intercept) async with onResult 1`] = ` "var _fn1 = this._x[1]; _fn1((_err1, _result1) => { if(_err1) { onError(_err1); } else { onResult(_result1); } }); " `; exports[`HookCodeFactory callTap (no args, no intercept) async without onResult 1`] = ` "var _fn1 = this._x[1]; _fn1(_err1 => { if(_err1) { onError(_err1); } else { onDone(); } }); " `; exports[`HookCodeFactory callTap (no args, no intercept) promise with onResult 1`] = ` "var _fn2 = this._x[2]; var _hasResult2 = false; _fn2().then(_result2 => { _hasResult2 = true; onResult(_result2); }, _err2 => { if(_hasResult2) throw _err2; onError(_err2); }); " `; exports[`HookCodeFactory callTap (no args, no intercept) promise without onResult 1`] = ` "var _fn2 = this._x[2]; var _hasResult2 = false; _fn2().then(_result2 => { _hasResult2 = true; onDone(); }, _err2 => { if(_hasResult2) throw _err2; onError(_err2); }); " `; exports[`HookCodeFactory callTap (no args, no intercept) sync with onResult 1`] = ` "var _fn0 = this._x[0]; var _hasError0 = false; try { var _result0 = _fn0(); } catch(_err) { _hasError0 = true; onError(_err); } if(!_hasError0) { onResult(_result0); } " `; exports[`HookCodeFactory callTap (no args, no intercept) sync without onResult 1`] = ` "var _fn0 = this._x[0]; var _hasError0 = false; try { _fn0(); } catch(_err) { _hasError0 = true; onError(_err); } if(!_hasError0) { onDone(); } " `; exports[`HookCodeFactory callTap (with args, no intercept) async with onResult 1`] = ` "var _fn1 = this._x[1]; _fn1(a, b, c, (_err1, _result1) => { if(_err1) { onError(_err1); } else { onResult(_result1); } }); " `; exports[`HookCodeFactory callTap (with args, no intercept) async without onResult 1`] = ` "var _fn1 = this._x[1]; _fn1(a, b, c, _err1 => { if(_err1) { onError(_err1); } else { onDone(); } }); " `; exports[`HookCodeFactory callTap (with args, no intercept) promise with onResult 1`] = ` "var _fn2 = this._x[2]; var _hasResult2 = false; _fn2(a, b, c).then(_result2 => { _hasResult2 = true; onResult(_result2); }, _err2 => { if(_hasResult2) throw _err2; onError(_err2); }); " `; exports[`HookCodeFactory callTap (with args, no intercept) promise without onResult 1`] = ` "var _fn2 = this._x[2]; var _hasResult2 = false; _fn2(a, b, c).then(_result2 => { _hasResult2 = true; onDone(); }, _err2 => { if(_hasResult2) throw _err2; onError(_err2); }); " `; exports[`HookCodeFactory callTap (with args, no intercept) sync with onResult 1`] = ` "var _fn0 = this._x[0]; var _hasError0 = false; try { var _result0 = _fn0(a, b, c); } catch(_err) { _hasError0 = true; onError(_err); } if(!_hasError0) { onResult(_result0); } " `; exports[`HookCodeFactory callTap (with args, no intercept) sync without onResult 1`] = ` "var _fn0 = this._x[0]; var _hasError0 = false; try { _fn0(a, b, c); } catch(_err) { _hasError0 = true; onError(_err); } if(!_hasError0) { onDone(); } " `; exports[`HookCodeFactory callTap (with args, with intercept) async with onResult 1`] = ` "var _tap1 = this.taps[1]; this.interceptors[0].tap(_tap1); this.interceptors[1].tap(_tap1); var _fn1 = this._x[1]; _fn1(a, b, c, (_err1, _result1) => { if(_err1) { onError(_err1); } else { onResult(_result1); } }); " `; exports[`HookCodeFactory callTap (with args, with intercept) async without onResult 1`] = ` "var _tap1 = this.taps[1]; this.interceptors[0].tap(_tap1); this.interceptors[1].tap(_tap1); var _fn1 = this._x[1]; _fn1(a, b, c, _err1 => { if(_err1) { onError(_err1); } else { onDone(); } }); " `; exports[`HookCodeFactory callTap (with args, with intercept) promise with onResult 1`] = ` "var _tap2 = this.taps[2]; this.interceptors[0].tap(_tap2); this.interceptors[1].tap(_tap2); var _fn2 = this._x[2]; var _hasResult2 = false; _fn2(a, b, c).then(_result2 => { _hasResult2 = true; onResult(_result2); }, _err2 => { if(_hasResult2) throw _err2; onError(_err2); }); " `; exports[`HookCodeFactory callTap (with args, with intercept) promise without onResult 1`] = ` "var _tap2 = this.taps[2]; this.interceptors[0].tap(_tap2); this.interceptors[1].tap(_tap2); var _fn2 = this._x[2]; var _hasResult2 = false; _fn2(a, b, c).then(_result2 => { _hasResult2 = true; onDone(); }, _err2 => { if(_hasResult2) throw _err2; onError(_err2); }); " `; exports[`HookCodeFactory callTap (with args, with intercept) sync with onResult 1`] = ` "var _tap0 = this.taps[0]; this.interceptors[0].tap(_tap0); this.interceptors[1].tap(_tap0); var _fn0 = this._x[0]; var _hasError0 = false; try { var _result0 = _fn0(a, b, c); } catch(_err) { _hasError0 = true; onError(_err); } if(!_hasError0) { onResult(_result0); } " `; exports[`HookCodeFactory callTap (with args, with intercept) sync without onResult 1`] = ` "var _tap0 = this.taps[0]; this.interceptors[0].tap(_tap0); this.interceptors[1].tap(_tap0); var _fn0 = this._x[0]; var _hasError0 = false; try { _fn0(a, b, c); } catch(_err) { _hasError0 = true; onError(_err); } if(!_hasError0) { onDone(); } " `; exports[`HookCodeFactory taps (mixed) callTapsLooping 1`] = ` "var _looper = () => { var _loopAsync = false; var _loop; do { _loop = false; var _fn0 = this._x[0]; var _hasError0 = false; try { var _result0 = _fn0(a, b, c); } catch(_err) { _hasError0 = true; onError(0, _err); } if(!_hasError0) { if(_result0 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { var _fn1 = this._x[1]; _fn1(a, b, c, (_err1, _result1) => { if(_err1) { onError(1, _err1); } else { if(_result1 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { var _fn2 = this._x[2]; var _hasResult2 = false; _fn2(a, b, c).then(_result2 => { _hasResult2 = true; if(_result2 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { if(!_loop) { onDone(); } } }, _err2 => { if(_hasResult2) throw _err2; onError(2, _err2); }); } } }); } } } while(_loop); _loopAsync = true; }; _looper(); " `; exports[`HookCodeFactory taps (mixed) callTapsParallel 1`] = ` "do { var _counter = 3; var _done = () => { onDone(); }; if(_counter <= 0) break; var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); if(_counter > 0) { onResult(0, _result0, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } if(_counter <= 0) break; var _fn1 = this._x[1]; _fn1(a, b, c, (_err1, _result1) => { if(_err1) { if(_counter > 0) { onError(1, _err1); } } else { if(_counter > 0) { onResult(1, _result1, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } } }); if(_counter <= 0) break; var _fn2 = this._x[2]; var _hasResult2 = false; _fn2(a, b, c).then(_result2 => { _hasResult2 = true; if(_counter > 0) { onResult(2, _result2, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } }, _err2 => { if(_hasResult2) throw _err2; if(_counter > 0) { onError(2, _err2); } }); } while(false); " `; exports[`HookCodeFactory taps (mixed) callTapsSeries 1`] = ` "var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); onResult(0, _result0, () => { var _fn1 = this._x[1]; _fn1(a, b, c, (_err1, _result1) => { if(_err1) { onError(1, _err1); } else { onResult(1, _result1, () => { var _fn2 = this._x[2]; var _hasResult2 = false; _fn2(a, b, c).then(_result2 => { _hasResult2 = true; onResult(2, _result2, () => { onDone(); }, () => { onDone(); }); }, _err2 => { if(_hasResult2) throw _err2; onError(2, _err2); }); }, () => { onDone(); }); } }); }, () => { onDone(); }); " `; exports[`HookCodeFactory taps (mixed2) callTapsLooping 1`] = ` "var _looper = () => { var _loopAsync = false; var _loop; do { _loop = false; var _fn0 = this._x[0]; _fn0(a, b, c, (_err0, _result0) => { if(_err0) { onError(0, _err0); } else { if(_result0 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { var _fn1 = this._x[1]; var _hasResult1 = false; _fn1(a, b, c).then(_result1 => { _hasResult1 = true; if(_result1 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { var _fn2 = this._x[2]; var _hasError2 = false; try { var _result2 = _fn2(a, b, c); } catch(_err) { _hasError2 = true; onError(2, _err); } if(!_hasError2) { if(_result2 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { if(!_loop) { onDone(); } } } } }, _err1 => { if(_hasResult1) throw _err1; onError(1, _err1); }); } } }); } while(_loop); _loopAsync = true; }; _looper(); " `; exports[`HookCodeFactory taps (mixed2) callTapsParallel 1`] = ` "do { var _counter = 3; var _done = () => { onDone(); }; if(_counter <= 0) break; var _fn0 = this._x[0]; _fn0(a, b, c, (_err0, _result0) => { if(_err0) { if(_counter > 0) { onError(0, _err0); } } else { if(_counter > 0) { onResult(0, _result0, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } } }); if(_counter <= 0) break; var _fn1 = this._x[1]; var _hasResult1 = false; _fn1(a, b, c).then(_result1 => { _hasResult1 = true; if(_counter > 0) { onResult(1, _result1, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } }, _err1 => { if(_hasResult1) throw _err1; if(_counter > 0) { onError(1, _err1); } }); if(_counter <= 0) break; var _fn2 = this._x[2]; var _result2 = _fn2(a, b, c); if(_counter > 0) { onResult(2, _result2, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } } while(false); " `; exports[`HookCodeFactory taps (mixed2) callTapsSeries 1`] = ` "var _fn0 = this._x[0]; _fn0(a, b, c, (_err0, _result0) => { if(_err0) { onError(0, _err0); } else { onResult(0, _result0, () => { var _fn1 = this._x[1]; var _hasResult1 = false; _fn1(a, b, c).then(_result1 => { _hasResult1 = true; onResult(1, _result1, () => { var _fn2 = this._x[2]; var _hasError2 = false; try { var _result2 = _fn2(a, b, c); } catch(_err) { _hasError2 = true; onError(2, _err); } if(!_hasError2) { onResult(2, _result2, () => { onDone(); }, () => { onDone(); }); } }, () => { onDone(); }); }, _err1 => { if(_hasResult1) throw _err1; onError(1, _err1); }); }, () => { onDone(); }); } }); " `; exports[`HookCodeFactory taps (multiple sync) callTapsLooping 1`] = ` "var _loop; do { _loop = false; var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); if(_result0 !== undefined) { _loop = true; } else { var _fn1 = this._x[1]; var _result1 = _fn1(a, b, c); if(_result1 !== undefined) { _loop = true; } else { var _fn2 = this._x[2]; var _result2 = _fn2(a, b, c); if(_result2 !== undefined) { _loop = true; } else { if(!_loop) { onDone(); } } } } } while(_loop); " `; exports[`HookCodeFactory taps (multiple sync) callTapsParallel 1`] = ` "do { var _counter = 3; var _done = () => { onDone(); }; if(_counter <= 0) break; var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); if(_counter > 0) { onResult(0, _result0, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } if(_counter <= 0) break; var _fn1 = this._x[1]; var _result1 = _fn1(a, b, c); if(_counter > 0) { onResult(1, _result1, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } if(_counter <= 0) break; var _fn2 = this._x[2]; var _result2 = _fn2(a, b, c); if(_counter > 0) { onResult(2, _result2, () => { if(--_counter === 0) _done(); }, () => { _counter = 0; _done(); }); } } while(false); " `; exports[`HookCodeFactory taps (multiple sync) callTapsSeries 1`] = ` "var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); onResult(0, _result0, () => { var _fn1 = this._x[1]; var _result1 = _fn1(a, b, c); onResult(1, _result1, () => { var _fn2 = this._x[2]; var _result2 = _fn2(a, b, c); onResult(2, _result2, () => { onDone(); }, () => { onDone(); }); }, () => { onDone(); }); }, () => { onDone(); }); " `; exports[`HookCodeFactory taps (none) callTapsLooping 1`] = ` "onDone(); " `; exports[`HookCodeFactory taps (none) callTapsParallel 1`] = ` "onDone(); " `; exports[`HookCodeFactory taps (none) callTapsSeries 1`] = ` "onDone(); " `; exports[`HookCodeFactory taps (single async) callTapsLooping 1`] = ` "var _looper = () => { var _loopAsync = false; var _loop; do { _loop = false; var _fn0 = this._x[0]; _fn0(a, b, c, (_err0, _result0) => { if(_err0) { onError(0, _err0); } else { if(_result0 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { if(!_loop) { onDone(); } } } }); } while(_loop); _loopAsync = true; }; _looper(); " `; exports[`HookCodeFactory taps (single async) callTapsParallel 1`] = ` "var _fn0 = this._x[0]; _fn0(a, b, c, (_err0, _result0) => { if(_err0) { onError(0, _err0); } else { onResult(0, _result0, () => { onDone(); }, () => { onDone(); }); } }); " `; exports[`HookCodeFactory taps (single async) callTapsSeries 1`] = ` "var _fn0 = this._x[0]; _fn0(a, b, c, (_err0, _result0) => { if(_err0) { onError(0, _err0); } else { onResult(0, _result0, () => { onDone(); }, () => { onDone(); }); } }); " `; exports[`HookCodeFactory taps (single promise) callTapsLooping 1`] = ` "var _looper = () => { var _loopAsync = false; var _loop; do { _loop = false; var _fn0 = this._x[0]; var _hasResult0 = false; _fn0(a, b, c).then(_result0 => { _hasResult0 = true; if(_result0 !== undefined) { _loop = true; if(_loopAsync) _looper(); } else { if(!_loop) { onDone(); } } }, _err0 => { if(_hasResult0) throw _err0; onError(0, _err0); }); } while(_loop); _loopAsync = true; }; _looper(); " `; exports[`HookCodeFactory taps (single promise) callTapsParallel 1`] = ` "var _fn0 = this._x[0]; var _hasResult0 = false; _fn0(a, b, c).then(_result0 => { _hasResult0 = true; onResult(0, _result0, () => { onDone(); }, () => { onDone(); }); }, _err0 => { if(_hasResult0) throw _err0; onError(0, _err0); }); " `; exports[`HookCodeFactory taps (single promise) callTapsSeries 1`] = ` "var _fn0 = this._x[0]; var _hasResult0 = false; _fn0(a, b, c).then(_result0 => { _hasResult0 = true; onResult(0, _result0, () => { onDone(); }, () => { onDone(); }); }, _err0 => { if(_hasResult0) throw _err0; onError(0, _err0); }); " `; exports[`HookCodeFactory taps (single sync) callTapsLooping 1`] = ` "var _loop; do { _loop = false; var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); if(_result0 !== undefined) { _loop = true; } else { if(!_loop) { onDone(); } } } while(_loop); " `; exports[`HookCodeFactory taps (single sync) callTapsParallel 1`] = ` "var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); onResult(0, _result0, () => { onDone(); }, () => { onDone(); }); " `; exports[`HookCodeFactory taps (single sync) callTapsSeries 1`] = ` "var _fn0 = this._x[0]; var _result0 = _fn0(a, b, c); onResult(0, _result0, () => { onDone(); }, () => { onDone(); }); " `; tapable-1.0.0/lib/__tests__/__snapshots__/SyncHooks.js.snap000066400000000000000000000535451324347365200237050ustar00rootroot00000000000000// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`SyncBailHook should have to correct behavior 1`] = ` Object { "async": Object {}, "intercept": Object {}, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": 6, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncErrorCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 85, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": 129, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncCalled": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncWithArgCalled": 42, "callIntercepted": Object { "type": "return", "value": 6, }, "callInterceptedCall1": Array [ 1, 2, 3, ], "callInterceptedCall2": Array [ 1, 2, 3, ], "callInterceptedTap1": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callMultipleSync": Object { "type": "return", "value": 42, }, "callMultipleSyncCalled1": true, "callMultipleSyncError": Object { "error": "Error in sync2", }, "callMultipleSyncErrorCalled1": true, "callMultipleSyncErrorCalled2": true, "callMultipleSyncWithArg": Object { "type": "return", "value": 84, }, "callMultipleSyncWithArgCalled1": 42, "callMultipleSyncWithArgFirstReturn": Object { "type": "return", "value": 84, }, "callMultipleSyncWithArgFirstReturnCalled1": 42, "callMultipleSyncWithArgLastReturn": Object { "type": "return", "value": 85, }, "callMultipleSyncWithArgLastReturnCalled1": 42, "callMultipleSyncWithArgLastReturnCalled2": 42, "callMultipleSyncWithArgNoReturn": Object { "type": "no result", }, "callMultipleSyncWithArgNoReturnCalled1": 42, "callMultipleSyncWithArgNoReturnCalled2": 42, "callMultipleSyncWithArgs": Object { "type": "return", "value": 129, }, "callMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callNone": Object { "type": "no result", }, "callNoneWithArg": Object { "type": "no result", }, "callSingleSync": Object { "type": "return", "value": 42, }, "callSingleSyncCalled": true, "callSingleSyncWithArg": Object { "type": "return", "value": 42, }, "callSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": 6, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncErrorCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 85, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": 129, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": 42, }, "promiseSingleSyncCalled": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleSyncWithArgCalled": 42, }, } `; exports[`SyncHook should have to correct behavior 1`] = ` Object { "async": Object {}, "intercept": Object {}, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": undefined, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncCalled1": true, "callAsyncMultipleSyncCalled2": true, "callAsyncMultipleSyncError": Object { "error": "Error in sync2", "type": "async", }, "callAsyncMultipleSyncErrorCalled1": true, "callAsyncMultipleSyncErrorCalled2": true, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 42, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 42, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncMultipleSyncWithArgsCalled2": Array [ 42, 43, 44, ], "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncCalled": true, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncWithArgCalled": 42, "callIntercepted": Object { "type": "no result", }, "callInterceptedCall1": Array [ 1, 2, 3, ], "callInterceptedCall2": Array [ 1, 2, 3, ], "callInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "callInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callMultipleSync": Object { "type": "no result", }, "callMultipleSyncCalled1": true, "callMultipleSyncCalled2": true, "callMultipleSyncError": Object { "error": "Error in sync2", }, "callMultipleSyncErrorCalled1": true, "callMultipleSyncErrorCalled2": true, "callMultipleSyncWithArg": Object { "type": "no result", }, "callMultipleSyncWithArgCalled1": 42, "callMultipleSyncWithArgCalled2": 42, "callMultipleSyncWithArgFirstReturn": Object { "type": "no result", }, "callMultipleSyncWithArgFirstReturnCalled1": 42, "callMultipleSyncWithArgFirstReturnCalled2": 42, "callMultipleSyncWithArgLastReturn": Object { "type": "no result", }, "callMultipleSyncWithArgLastReturnCalled1": 42, "callMultipleSyncWithArgLastReturnCalled2": 42, "callMultipleSyncWithArgNoReturn": Object { "type": "no result", }, "callMultipleSyncWithArgNoReturnCalled1": 42, "callMultipleSyncWithArgNoReturnCalled2": 42, "callMultipleSyncWithArgs": Object { "type": "no result", }, "callMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callMultipleSyncWithArgsCalled2": Array [ 42, 43, 44, ], "callNone": Object { "type": "no result", }, "callNoneWithArg": Object { "type": "no result", }, "callSingleSync": Object { "type": "no result", }, "callSingleSyncCalled": true, "callSingleSyncWithArg": Object { "type": "no result", }, "callSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": undefined, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncCalled1": true, "promiseMultipleSyncCalled2": true, "promiseMultipleSyncError": Object { "error": "Error in sync2", "type": "promise", }, "promiseMultipleSyncErrorCalled1": true, "promiseMultipleSyncErrorCalled2": true, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 42, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 42, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseMultipleSyncWithArgsCalled2": Array [ 42, 43, 44, ], "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncCalled": true, "promiseSingleSyncWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncWithArgCalled": 42, }, } `; exports[`SyncLoopHook should have to correct behavior 1`] = ` Object { "async": Object {}, "sync": Object { "callAsyncInterceptedSync": Object { "type": "async", "value": undefined, }, "callAsyncInterceptedSyncCalled1": 83, "callAsyncInterceptedSyncCalled2": 42, "callAsyncInterceptedSyncCalledCall": 1, "callAsyncInterceptedSyncCalledLoop": 83, "callAsyncInterceptedSyncCalledTap": 125, "callAsyncMultipleSync": Object { "type": "async", "value": undefined, }, "callAsyncMultipleSyncCalled1": 83, "callAsyncMultipleSyncCalled2": 42, "callAsyncNone": Object { "type": "async", "value": undefined, }, "callAsyncNoneWithArg": Object { "type": "async", "value": undefined, }, "callAsyncSingleSync": Object { "type": "async", "value": undefined, }, "callAsyncSingleSyncCalled": 42, "callInterceptedSync": Object { "type": "no result", }, "callInterceptedSyncCalled1": 83, "callInterceptedSyncCalled2": 42, "callInterceptedSyncCalledCall": 1, "callInterceptedSyncCalledLoop": 83, "callInterceptedSyncCalledTap": 125, "callMultipleSync": Object { "type": "no result", }, "callMultipleSyncCalled1": 83, "callMultipleSyncCalled2": 42, "callNone": Object { "type": "no result", }, "callNoneWithArg": Object { "type": "no result", }, "callSingleSync": Object { "type": "no result", }, "callSingleSyncCalled": 42, "promiseInterceptedSync": Object { "type": "promise", "value": undefined, }, "promiseInterceptedSyncCalled1": 83, "promiseInterceptedSyncCalled2": 42, "promiseInterceptedSyncCalledCall": 1, "promiseInterceptedSyncCalledLoop": 83, "promiseInterceptedSyncCalledTap": 125, "promiseMultipleSync": Object { "type": "promise", "value": undefined, }, "promiseMultipleSyncCalled1": 83, "promiseMultipleSyncCalled2": 42, "promiseNone": Object { "type": "promise", "value": undefined, }, "promiseNoneWithArg": Object { "type": "promise", "value": undefined, }, "promiseSingleSync": Object { "type": "promise", "value": undefined, }, "promiseSingleSyncCalled": 42, }, } `; exports[`SyncWaterfallHook should have to correct behavior 1`] = ` Object { "async": Object {}, "intercept": Object {}, "sync": Object { "callAsyncIntercepted": Object { "type": "async", "value": 9, }, "callAsyncInterceptedCall1": Array [ 1, 2, 3, ], "callAsyncInterceptedCall2": Array [ 1, 2, 3, ], "callAsyncInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "callAsyncInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callAsyncMultipleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncMultipleSyncWithArg": Object { "type": "async", "value": 127, }, "callAsyncMultipleSyncWithArgCalled1": 42, "callAsyncMultipleSyncWithArgCalled2": 84, "callAsyncMultipleSyncWithArgFirstReturn": Object { "type": "async", "value": 84, }, "callAsyncMultipleSyncWithArgFirstReturnCalled1": 42, "callAsyncMultipleSyncWithArgFirstReturnCalled2": 84, "callAsyncMultipleSyncWithArgLastReturn": Object { "type": "async", "value": 85, }, "callAsyncMultipleSyncWithArgLastReturnCalled1": 42, "callAsyncMultipleSyncWithArgLastReturnCalled2": 42, "callAsyncMultipleSyncWithArgNoReturn": Object { "type": "async", "value": 42, }, "callAsyncMultipleSyncWithArgNoReturnCalled1": 42, "callAsyncMultipleSyncWithArgNoReturnCalled2": 42, "callAsyncMultipleSyncWithArgs": Object { "type": "async", "value": 217, }, "callAsyncMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callAsyncMultipleSyncWithArgsCalled2": Array [ 129, 43, 44, ], "callAsyncNone": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncNoneWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callAsyncSingleSyncWithArg": Object { "type": "async", "value": 42, }, "callAsyncSingleSyncWithArgCalled": 42, "callIntercepted": Object { "type": "return", "value": 9, }, "callInterceptedCall1": Array [ 1, 2, 3, ], "callInterceptedCall2": Array [ 1, 2, 3, ], "callInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "callInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "callMultipleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callMultipleSyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "callMultipleSyncWithArg": Object { "type": "return", "value": 127, }, "callMultipleSyncWithArgCalled1": 42, "callMultipleSyncWithArgCalled2": 84, "callMultipleSyncWithArgFirstReturn": Object { "type": "return", "value": 84, }, "callMultipleSyncWithArgFirstReturnCalled1": 42, "callMultipleSyncWithArgFirstReturnCalled2": 84, "callMultipleSyncWithArgLastReturn": Object { "type": "return", "value": 85, }, "callMultipleSyncWithArgLastReturnCalled1": 42, "callMultipleSyncWithArgLastReturnCalled2": 42, "callMultipleSyncWithArgNoReturn": Object { "type": "return", "value": 42, }, "callMultipleSyncWithArgNoReturnCalled1": 42, "callMultipleSyncWithArgNoReturnCalled2": 42, "callMultipleSyncWithArgs": Object { "type": "return", "value": 217, }, "callMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "callMultipleSyncWithArgsCalled2": Array [ 129, 43, 44, ], "callNone": Object { "error": "Waterfall hooks must have at least one argument", }, "callNoneWithArg": Object { "type": "return", "value": 42, }, "callSingleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "callSingleSyncWithArg": Object { "type": "return", "value": 42, }, "callSingleSyncWithArgCalled": 42, "promiseIntercepted": Object { "type": "promise", "value": 9, }, "promiseInterceptedCall1": Array [ 1, 2, 3, ], "promiseInterceptedCall2": Array [ 1, 2, 3, ], "promiseInterceptedTap1": Object { "fn": 2, "name": "sync2", "type": "sync", }, "promiseInterceptedTap2": Object { "fn": 3, "name": "sync1", "type": "sync", }, "promiseMultipleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncError": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseMultipleSyncWithArg": Object { "type": "promise", "value": 127, }, "promiseMultipleSyncWithArgCalled1": 42, "promiseMultipleSyncWithArgCalled2": 84, "promiseMultipleSyncWithArgFirstReturn": Object { "type": "promise", "value": 84, }, "promiseMultipleSyncWithArgFirstReturnCalled1": 42, "promiseMultipleSyncWithArgFirstReturnCalled2": 84, "promiseMultipleSyncWithArgLastReturn": Object { "type": "promise", "value": 85, }, "promiseMultipleSyncWithArgLastReturnCalled1": 42, "promiseMultipleSyncWithArgLastReturnCalled2": 42, "promiseMultipleSyncWithArgNoReturn": Object { "type": "promise", "value": 42, }, "promiseMultipleSyncWithArgNoReturnCalled1": 42, "promiseMultipleSyncWithArgNoReturnCalled2": 42, "promiseMultipleSyncWithArgs": Object { "type": "promise", "value": 217, }, "promiseMultipleSyncWithArgsCalled1": Array [ 42, 43, 44, ], "promiseMultipleSyncWithArgsCalled2": Array [ 129, 43, 44, ], "promiseNone": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseNoneWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleSync": Object { "error": "Waterfall hooks must have at least one argument", }, "promiseSingleSyncWithArg": Object { "type": "promise", "value": 42, }, "promiseSingleSyncWithArgCalled": 42, }, } `; tapable-1.0.0/lib/index.js000066400000000000000000000014261324347365200153470ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; exports.__esModule = true; exports.Tapable = require("./Tapable"); exports.SyncHook = require("./SyncHook"); exports.SyncBailHook = require("./SyncBailHook"); exports.SyncWaterfallHook = require("./SyncWaterfallHook"); exports.SyncLoopHook = require("./SyncLoopHook"); exports.AsyncParallelHook = require("./AsyncParallelHook"); exports.AsyncParallelBailHook = require("./AsyncParallelBailHook"); exports.AsyncSeriesHook = require("./AsyncSeriesHook"); exports.AsyncSeriesBailHook = require("./AsyncSeriesBailHook"); exports.AsyncSeriesWaterfallHook = require("./AsyncSeriesWaterfallHook"); exports.HookMap = require("./HookMap"); exports.MultiHook = require("./MultiHook"); tapable-1.0.0/lib/simpleAsyncCases.js000066400000000000000000000107561324347365200175140ustar00rootroot00000000000000/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; exports.notBailing = (options) => { const args = options.args.join(", "); const argsWithCallback = args ? `${args}, _callback` : "_callback"; const argsWithComma = args ? `${args}, ` : ""; const tap = options.tap; const type = options.type; switch(`${tap} ${type}`) { case "none async": return `function(${argsWithCallback}) { _callback(); }`; case "none promise": return `function(${args}) { return Promise.resolve(); }`; case "sync async": return `function(${argsWithCallback}) { try { this._x(${args}); } catch(_e) { _callback(_e); return; } _callback(); }`; case "sync promise": return `function(${args}) { return Promise.resolve().then(() => { this._x(${args}); }); }`; case "async async": return `function(${argsWithCallback}) { this._x(${argsWithComma}(_err) => { if(_err) { _callback(_err); return; } _callback(); }); }`; case "async promise": return `function(${args}) { return new Promise((_resolve, _reject) => { let _isSync = true; this._x(${argsWithComma}_err => { if(_err) { if(_isSync) Promise.resolve().then(() => _reject(_err)); else _reject(_err); return; } _resolve(); }); _isSync = false; }); }`; case "promise async": return `function(${argsWithCallback}) { Promise.resolve(this._x(${args})).then(() => { _callback(); }, _err => { _callback(_err); }); }`; case "promise promise": return `function(${args}) { return Promise.resolve(this._x(${args})).then(() => {}); }`; case "multiple-sync async": return `function(${argsWithCallback}) { try { const _fns = this._x; for(let _i = 0; _i < _fns.length; _i++) { _fns[_i](${args}); } } catch(_err) { _callback(_err); return; } _callback(); }`; case "multiple-sync promise": return `function(${args}) { return Promise.resolve().then(() => { const _fns = this._x; for(let _i = 0; _i < _fns.length; _i++) { _fns[_i](${args}); } }); }`; } } exports.bailing = (options) => { const args = options.args.join(", "); const argsWithCallback = args ? `${args}, _callback` : "_callback"; const argsWithComma = args ? `${args}, ` : ""; const tap = options.tap; const type = options.type; switch(`${tap} ${type}`) { case "none async": return `function(${argsWithCallback}) { _callback(); }`; case "none promise": return `function(${args}) { return Promise.resolve(); }`; case "sync async": return `function(${argsWithCallback}) { let _result; try { _result = this._x(${args}); } catch(_e) { _callback(_e); return; } _callback(null, _result); }`; case "sync promise": return `function(${args}) { return Promise.resolve().then(() => this._x(${args})); }`; case "async async": return `function(${argsWithCallback}) { this._x(${argsWithCallback}); }`; case "async promise": return `function(${args}) { return new Promise((_resolve, _reject) => { let _isSync = true; this._x(${argsWithComma}(_err, _result) => { if(_err) { if(_isSync) Promise.resolve().then(() => _reject(_err)); else _reject(_err); return; } _resolve(_result); }); _isSync = false; }); }`; case "promise async": return `function(${argsWithCallback}) { Promise.resolve(this._x(${args})).then(_result => { _callback(null, _result); }, _err => { _callback(_err); }); }`; case "promise promise": return `function(${args}) { return this._x(${args}); }`; case "multiple-sync async": return `function(${argsWithCallback}) { try { const _fns = this._x; for(let _i = 0; _i < _fns.length; _i++) { const _result = _fns[_i](${args}); if(_result !== undefined) { _callback(null, _result); return; } } } catch(_err) { _callback(_err); return; } _callback(); }`; case "multiple-sync promise": return `function(${args}) { return new Promise(_resolve => { const _fns = this._x; for(let _i = 0; _i < _fns.length; _i++) { const _result = _fns[_i](${args}); if(_result !== undefined) { _resolve(_result); return; } } _resolve(); }); }`; } } tapable-1.0.0/package.json000066400000000000000000000013761324347365200154260ustar00rootroot00000000000000{ "name": "tapable", "version": "1.0.0", "author": "Tobias Koppers @sokra", "description": "Just a little module for plugins.", "license": "MIT", "repository": { "type": "git", "url": "http://github.com/webpack/tapable.git" }, "devDependencies": { "babel-core": "^6.26.0", "babel-jest": "^21.0.2", "babel-polyfill": "^6.26.0", "babel-preset-env": "^1.6.0", "codecov": "^2.3.0", "jest": "^21.0.4" }, "engines": { "node": ">=6" }, "files": [ "lib" ], "homepage": "https://github.com/webpack/tapable", "main": "lib/index.js", "scripts": { "test": "jest", "travis": "jest --coverage && codecov" }, "jest": { "transform": { "__tests__[\\\\/].+\\.js$": "babel-jest" } } } tapable-1.0.0/yarn.lock000066400000000000000000003123621324347365200147630ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 abab@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" abbrev@1: version "1.1.0" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" acorn-globals@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" dependencies: acorn "^4.0.4" acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" dependencies: kind-of "^3.0.2" longest "^1.0.1" repeat-string "^1.5.2" amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" ansi-escapes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-styles@^3.1.0, ansi-styles@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: color-convert "^1.9.0" anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" dependencies: default-require-extensions "^1.0.0" aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" are-we-there-yet@~1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" argparse@^1.0.7: version "1.0.9" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: sprintf-js "~1.0.2" argv@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" dependencies: arr-flatten "^1.0.1" arr-flatten@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" dependencies: lodash "^4.14.0" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws4@^1.2.1: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: chalk "^1.1.3" esutils "^2.0.2" js-tokens "^3.0.2" babel-core@^6.0.0, babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" babel-helpers "^6.24.1" babel-messages "^6.23.0" babel-register "^6.26.0" babel-runtime "^6.26.0" babel-template "^6.26.0" babel-traverse "^6.26.0" babel-types "^6.26.0" babylon "^6.18.0" convert-source-map "^1.5.0" debug "^2.6.8" json5 "^0.5.1" lodash "^4.17.4" minimatch "^3.0.4" path-is-absolute "^1.0.1" private "^0.1.7" slash "^1.0.0" source-map "^0.5.6" babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" babel-types "^6.26.0" detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.17.4" source-map "^0.5.6" trim-right "^1.0.1" babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" babel-types "^6.24.1" babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" babel-traverse "^6.24.1" babel-types "^6.24.1" babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" babel-types "^6.26.0" lodash "^4.17.4" babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" babel-types "^6.24.1" babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-traverse "^6.24.1" babel-types "^6.24.1" babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" lodash "^4.17.4" babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-traverse "^6.24.1" babel-types "^6.24.1" babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-traverse "^6.24.1" babel-types "^6.24.1" babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" babel-jest@^21.0.2: version "21.0.2" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-21.0.2.tgz#817ea52c23f1c6c4b684d6960968416b6a9e9c6c" dependencies: babel-plugin-istanbul "^4.0.0" babel-preset-jest "^21.0.2" babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" dependencies: babel-runtime "^6.22.0" babel-plugin-istanbul@^4.0.0: version "4.1.5" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: find-up "^2.1.0" istanbul-lib-instrument "^1.7.5" test-exclude "^4.1.1" babel-plugin-jest-hoist@^21.0.2: version "21.0.2" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.0.2.tgz#cfdce5bca40d772a056cb8528ad159c7bb4bb03d" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" babel-plugin-transform-async-to-generator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" babel-traverse "^6.26.0" babel-types "^6.26.0" lodash "^4.17.4" babel-plugin-transform-es2015-classes@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" babel-helper-optimise-call-expression "^6.24.1" babel-helper-replace-supers "^6.24.1" babel-messages "^6.23.0" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-traverse "^6.24.1" babel-types "^6.24.1" babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" babel-types "^6.24.1" babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" babel-template "^6.26.0" babel-types "^6.26.0" babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" babel-template "^6.24.1" babel-traverse "^6.24.1" babel-types "^6.24.1" babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" babel-types "^6.24.1" babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" regexpu-core "^2.0.0" babel-plugin-transform-exponentiation-operator@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-polyfill@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" regenerator-runtime "^0.10.5" babel-preset-env@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.0.tgz#2de1c782a780a0a5d605d199c957596da43c44e4" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-async-to-generator "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" babel-plugin-transform-es2015-block-scoping "^6.23.0" babel-plugin-transform-es2015-classes "^6.23.0" babel-plugin-transform-es2015-computed-properties "^6.22.0" babel-plugin-transform-es2015-destructuring "^6.23.0" babel-plugin-transform-es2015-duplicate-keys "^6.22.0" babel-plugin-transform-es2015-for-of "^6.23.0" babel-plugin-transform-es2015-function-name "^6.22.0" babel-plugin-transform-es2015-literals "^6.22.0" babel-plugin-transform-es2015-modules-amd "^6.22.0" babel-plugin-transform-es2015-modules-commonjs "^6.23.0" babel-plugin-transform-es2015-modules-systemjs "^6.23.0" babel-plugin-transform-es2015-modules-umd "^6.23.0" babel-plugin-transform-es2015-object-super "^6.22.0" babel-plugin-transform-es2015-parameters "^6.23.0" babel-plugin-transform-es2015-shorthand-properties "^6.22.0" babel-plugin-transform-es2015-spread "^6.22.0" babel-plugin-transform-es2015-sticky-regex "^6.22.0" babel-plugin-transform-es2015-template-literals "^6.22.0" babel-plugin-transform-es2015-typeof-symbol "^6.23.0" babel-plugin-transform-es2015-unicode-regex "^6.22.0" babel-plugin-transform-exponentiation-operator "^6.22.0" babel-plugin-transform-regenerator "^6.22.0" browserslist "^2.1.2" invariant "^2.2.2" semver "^5.3.0" babel-preset-jest@^21.0.2: version "21.0.2" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-21.0.2.tgz#9db25def2329f49eace3f5ea0de42a0b898d12cc" dependencies: babel-plugin-jest-hoist "^21.0.2" babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" core-js "^2.5.0" home-or-tmp "^2.0.0" lodash "^4.17.4" mkdirp "^0.5.1" source-map-support "^0.4.15" babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" babel-types "^6.26.0" babylon "^6.18.0" lodash "^4.17.4" babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" babel-runtime "^6.26.0" babel-types "^6.26.0" babylon "^6.18.0" debug "^2.6.8" globals "^9.18.0" invariant "^2.2.2" lodash "^4.17.4" babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" lodash "^4.17.4" to-fast-properties "^1.0.3" babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: inherits "~2.0.0" boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" dependencies: hoek "2.x.x" brace-expansion@^1.1.7: version "1.1.8" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" dependencies: expand-range "^1.8.1" preserve "^0.2.0" repeat-element "^1.1.2" browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" dependencies: resolve "1.1.7" browserslist@^2.1.2: version "2.4.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" dependencies: caniuse-lite "^1.0.30000718" electron-to-chromium "^1.3.18" bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" dependencies: node-int64 "^0.4.0" builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" caniuse-lite@^1.0.30000718: version "1.0.30000733" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000733.tgz#ebfc48254117cc0c66197a4536cb4397a6cfbccd" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" has-ansi "^2.0.0" strip-ansi "^3.0.0" supports-color "^2.0.0" chalk@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" supports-color "^4.0.0" ci-info@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.1.tgz#47b44df118c48d2597b56d342e7e25791060171a" cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" dependencies: center-align "^0.1.1" right-align "^0.1.1" wordwrap "0.0.2" cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" wrap-ansi "^2.0.0" co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" codecov@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/codecov/-/codecov-2.3.0.tgz#ad25a2c6e0442d13740d9d4ddbb9a3e2714330f4" dependencies: argv "0.0.2" request "2.81.0" urlgrey "0.4.4" color-convert@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" dependencies: color-name "^1.1.1" color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" content-type-parser@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" convert-source-map@^1.4.0, convert-source-map@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" core-js@^2.4.0, core-js@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" "cssstyle@>= 0.2.37 < 0.3.0": version "0.2.37" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" dependencies: cssom "0.3.x" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" debug@^2.2.0, debug@^2.6.3, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: ms "2.0.0" decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" dependencies: strip-bom "^2.0.0" define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" dependencies: foreach "^2.0.5" object-keys "^1.0.8" defined@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" dependencies: repeating "^2.0.0" diff@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" electron-to-chromium@^1.3.18: version "1.3.21" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.21.tgz#a967ebdcfe8ed0083fc244d1894022a8e8113ea2" errno@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: prr "~0.0.0" error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" es-abstract@^1.5.0: version "1.8.2" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.2.tgz#25103263dc4decbda60e0c737ca32313518027ee" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" has "^1.0.1" is-callable "^1.1.3" is-regex "^1.0.4" es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" dependencies: is-callable "^1.1.1" is-date-object "^1.0.1" is-symbol "^1.0.1" escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@^1.6.1: version "1.9.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: source-map "~0.5.6" esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" exec-sh@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" dependencies: merge "^1.1.3" execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" dependencies: is-posix-bracket "^0.1.0" expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" dependencies: fill-range "^2.1.0" expect@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/expect/-/expect-21.1.0.tgz#1c138ec803c72d28cbd10dfe97104966d967c24a" dependencies: ansi-styles "^3.2.0" jest-diff "^21.1.0" jest-get-type "^21.0.2" jest-matcher-utils "^21.1.0" jest-message-util "^21.1.0" jest-regex-util "^21.1.0" extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" dependencies: is-extglob "^1.0.0" extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" dependencies: bser "^2.0.0" filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fileset@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" dependencies: glob "^7.0.3" minimatch "^3.0.3" fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" dependencies: is-number "^2.1.0" isobject "^2.0.0" randomatic "^1.1.3" repeat-element "^1.1.2" repeat-string "^1.5.2" find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: locate-path "^2.0.0" for-each@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4" dependencies: is-function "~1.0.0" for-in@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: for-in "^1.0.1" foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" mime-types "^2.1.12" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.36" fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: fstream "^1.0.0" inherits "2" minimatch "^3.0.0" fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" mkdirp ">=0.5 0" rimraf "2" function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" has-unicode "^2.0.0" object-assign "^4.1.0" signal-exit "^3.0.0" string-width "^1.0.1" strip-ansi "^3.0.1" wide-align "^1.1.0" get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" dependencies: is-glob "^2.0.0" glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" graceful-fs@^4.1.11, graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" handlebars@^4.0.3: version "4.0.10" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" dependencies: async "^1.4.0" optimist "^0.6.1" source-map "^0.4.4" optionalDependencies: uglify-js "^2.6" har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" dependencies: ajv "^4.9.1" har-schema "^1.0.5" has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" has@^1.0.1, has@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: function-bind "^1.0.2" hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: boom "2.x.x" cryptiles "2.x.x" hoek "2.x.x" sntp "1.x.x" hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" html-encoding-sniffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" dependencies: whatwg-encoding "^1.0.1" http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" sshpk "^1.7.0" iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@~2.0.0, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" is-buffer@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" dependencies: builtin-modules "^1.0.0" is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" is-ci@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: ci-info "^1.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" dependencies: is-primitive "^2.0.0" is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" is-function@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: kind-of "^3.0.2" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: has "^1.0.1" is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: isarray "1.0.0" isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.1: version "1.1.14" resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.14.tgz#25bc5701f7c680c0ffff913de46e3619a3a6e680" dependencies: async "^2.1.4" fileset "^2.0.2" istanbul-lib-coverage "^1.1.1" istanbul-lib-hook "^1.0.7" istanbul-lib-instrument "^1.8.0" istanbul-lib-report "^1.1.1" istanbul-lib-source-maps "^1.2.1" istanbul-reports "^1.1.2" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" istanbul-lib-hook@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz#dd6607f03076578fe7d6f2a630cf143b49bacddc" dependencies: append-transform "^0.4.0" istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz#66f6c9421cc9ec4704f76f2db084ba9078a2b532" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.18.0" istanbul-lib-coverage "^1.1.1" semver "^5.3.0" istanbul-lib-report@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#f0e55f56655ffa34222080b7a0cd4760e1405fc9" dependencies: istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" dependencies: debug "^2.6.3" istanbul-lib-coverage "^1.1.1" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" istanbul-reports@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.2.tgz#0fb2e3f6aa9922bd3ce45d05d8ab4d5e8e07bd4f" dependencies: handlebars "^4.0.3" jest-changed-files@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.1.0.tgz#e70f6b33b75d5987f4eae07e35bea5525635f92a" dependencies: throat "^4.0.0" jest-cli@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.1.0.tgz#4f671885ea3521803c96a1fd95baaa6a1ba8d70f" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" glob "^7.1.2" graceful-fs "^4.1.11" is-ci "^1.0.10" istanbul-api "^1.1.1" istanbul-lib-coverage "^1.0.1" istanbul-lib-instrument "^1.4.2" istanbul-lib-source-maps "^1.1.0" jest-changed-files "^21.1.0" jest-config "^21.1.0" jest-environment-jsdom "^21.1.0" jest-haste-map "^21.1.0" jest-message-util "^21.1.0" jest-regex-util "^21.1.0" jest-resolve-dependencies "^21.1.0" jest-runner "^21.1.0" jest-runtime "^21.1.0" jest-snapshot "^21.1.0" jest-util "^21.1.0" micromatch "^2.3.11" node-notifier "^5.0.2" pify "^3.0.0" slash "^1.0.0" string-length "^2.0.0" strip-ansi "^4.0.0" which "^1.2.12" worker-farm "^1.3.1" yargs "^9.0.0" jest-config@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.1.0.tgz#7ef8778af679de30dad75e355a0dfbb0330b8d2f" dependencies: chalk "^2.0.1" glob "^7.1.1" jest-environment-jsdom "^21.1.0" jest-environment-node "^21.1.0" jest-get-type "^21.0.2" jest-jasmine2 "^21.1.0" jest-regex-util "^21.1.0" jest-resolve "^21.1.0" jest-util "^21.1.0" jest-validate "^21.1.0" pretty-format "^21.1.0" jest-diff@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.1.0.tgz#ca4c9d40272a6901dcde6c4c0bb2f568c363cc42" dependencies: chalk "^2.0.1" diff "^3.2.0" jest-get-type "^21.0.2" pretty-format "^21.1.0" jest-docblock@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.1.0.tgz#43154be2441fb91403e36bb35cb791a5017cea81" jest-environment-jsdom@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.1.0.tgz#40729a60cd4544625f7d3a33c32bdaad63e57db7" dependencies: jest-mock "^21.1.0" jest-util "^21.1.0" jsdom "^9.12.0" jest-environment-node@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.1.0.tgz#a11fd611e8ae6c3e02b785aa1b12a3009f4fd0f1" dependencies: jest-mock "^21.1.0" jest-util "^21.1.0" jest-get-type@^21.0.2: version "21.0.2" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.0.2.tgz#304e6b816dd33cd1f47aba0597bcad258a509fc6" jest-haste-map@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.1.0.tgz#08e7a8c584008d4b790b8dddf7dd3e3db03b75d3" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" jest-docblock "^21.1.0" micromatch "^2.3.11" sane "^2.0.0" worker-farm "^1.3.1" jest-jasmine2@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.1.0.tgz#975c3cd3ecd9d50d385bfe3c680dd61979f50c9c" dependencies: chalk "^2.0.1" expect "^21.1.0" graceful-fs "^4.1.11" jest-diff "^21.1.0" jest-matcher-utils "^21.1.0" jest-message-util "^21.1.0" jest-snapshot "^21.1.0" p-cancelable "^0.3.0" jest-matcher-utils@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.1.0.tgz#b02e237b287c58915ce9a5bf3c7138dba95125a7" dependencies: chalk "^2.0.1" jest-get-type "^21.0.2" pretty-format "^21.1.0" jest-message-util@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.1.0.tgz#7f9a52535d1a640af0d4c800edde737e14ea0526" dependencies: chalk "^2.0.1" micromatch "^2.3.11" slash "^1.0.0" jest-mock@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.1.0.tgz#c4dddfa893a0b120b72b5ae87c7506745213a790" jest-regex-util@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.1.0.tgz#59e4bad74f5ffd62a3835225f9bc1ee3796b5adb" jest-resolve-dependencies@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.1.0.tgz#9f78852e65d864d04ad0919ac8226b3f1434e7b0" dependencies: jest-regex-util "^21.1.0" jest-resolve@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.1.0.tgz#6bb806ca5ad876c250044fe62f298321d2da5c06" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" is-builtin-module "^1.0.0" jest-runner@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.1.0.tgz#d7ea7e2fa10ed673d4dd25ba2f3faae2efb89a07" dependencies: jest-config "^21.1.0" jest-docblock "^21.1.0" jest-haste-map "^21.1.0" jest-jasmine2 "^21.1.0" jest-message-util "^21.1.0" jest-runtime "^21.1.0" jest-util "^21.1.0" pify "^3.0.0" throat "^4.0.0" worker-farm "^1.3.1" jest-runtime@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.1.0.tgz#c9a180a9e06ef046d0ad157dea52355abb7cbad4" dependencies: babel-core "^6.0.0" babel-jest "^21.0.2" babel-plugin-istanbul "^4.0.0" chalk "^2.0.1" convert-source-map "^1.4.0" graceful-fs "^4.1.11" jest-config "^21.1.0" jest-haste-map "^21.1.0" jest-regex-util "^21.1.0" jest-resolve "^21.1.0" jest-util "^21.1.0" json-stable-stringify "^1.0.1" micromatch "^2.3.11" slash "^1.0.0" strip-bom "3.0.0" write-file-atomic "^2.1.0" yargs "^9.0.0" jest-snapshot@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.1.0.tgz#a5fa9d52847d8f52e19a1df6ccae9de699193ccc" dependencies: chalk "^2.0.1" jest-diff "^21.1.0" jest-matcher-utils "^21.1.0" mkdirp "^0.5.1" natural-compare "^1.4.0" pretty-format "^21.1.0" jest-util@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.1.0.tgz#f92ff756422cc0609ddf5a9bfa4d34b2835d8c30" dependencies: callsites "^2.0.0" chalk "^2.0.1" graceful-fs "^4.1.11" jest-message-util "^21.1.0" jest-mock "^21.1.0" jest-validate "^21.1.0" mkdirp "^0.5.1" jest-validate@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.1.0.tgz#39d01115544a758bce49f221a5fcbb24ebdecc65" dependencies: chalk "^2.0.1" jest-get-type "^21.0.2" leven "^2.1.0" pretty-format "^21.1.0" jest@^21.0.4: version "21.1.0" resolved "https://registry.yarnpkg.com/jest/-/jest-21.1.0.tgz#77c7baa8aa9e8bace7fe41a30d748ab56e89476a" dependencies: jest-cli "^21.1.0" js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@^3.7.0: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" dependencies: abab "^1.0.3" acorn "^4.0.4" acorn-globals "^3.1.0" array-equal "^1.0.0" content-type-parser "^1.0.1" cssom ">= 0.3.2 < 0.4.0" cssstyle ">= 0.2.37 < 0.3.0" escodegen "^1.6.1" html-encoding-sniffer "^1.0.1" nwmatcher ">= 1.3.9 < 2.0.0" parse5 "^1.5.1" request "^2.79.0" sax "^1.2.1" symbol-tree "^3.2.1" tough-cookie "^2.3.2" webidl-conversions "^4.0.0" whatwg-encoding "^1.0.1" whatwg-url "^4.3.0" xml-name-validator "^2.0.1" jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: jsonify "~0.0.0" json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" extsprintf "1.3.0" json-schema "0.2.3" verror "1.10.0" kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: is-buffer "^1.1.5" lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" dependencies: invert-kv "^1.0.0" leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" pinkie-promise "^2.0.0" strip-bom "^2.0.0" load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" strip-bom "^3.0.0" locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" dependencies: p-locate "^2.0.0" path-exists "^3.0.0" lodash@^4.14.0, lodash@^4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" loose-envify@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: js-tokens "^3.0.0" lru-cache@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" dependencies: tmpl "1.0.x" mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: mimic-fn "^1.0.0" merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" braces "^1.8.2" expand-brackets "^0.1.4" extglob "^0.3.1" filename-regex "^2.0.0" is-extglob "^1.0.0" is-glob "^2.0.1" kind-of "^3.0.2" normalize-path "^2.0.1" object.omit "^2.0.0" parse-glob "^3.0.4" regex-cache "^0.4.2" mime-db@~1.30.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" mime-types@^2.1.12, mime-types@~2.1.7: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: mime-db "~1.30.0" mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" minimist@^1.1.1, minimist@^1.2.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" "mkdirp@>=0.5 0", mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" nan@^2.3.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" node-notifier@^5.0.2: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" dependencies: growly "^1.3.0" semver "^5.3.0" shellwords "^0.1.0" which "^1.2.12" node-pre-gyp@^0.6.36: version "0.6.37" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.37.tgz#3c872b236b2e266e4140578fe1ee88f693323a05" dependencies: mkdirp "^0.5.1" nopt "^4.0.1" npmlog "^4.0.2" rc "^1.1.7" request "^2.81.0" rimraf "^2.6.1" semver "^5.3.0" tape "^4.6.3" tar "^2.2.1" tar-pack "^3.4.0" nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: abbrev "1" osenv "^0.1.4" normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" gauge "~2.7.3" set-blocking "~2.0.0" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" "nwmatcher@>= 1.3.9 < 2.0.0": version "1.4.1" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.1.tgz#7ae9b07b0ea804db7e25f05cb5fe4097d4e4949f" oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object-inspect@~1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d" object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" dependencies: for-own "^0.1.4" is-extendable "^0.1.1" once@^1.3.0, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: minimist "~0.0.1" wordwrap "~0.0.2" optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" wordwrap "~1.0.0" os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" dependencies: execa "^0.7.0" lcid "^1.0.0" mem "^1.1.0" os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" osenv@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" is-extglob "^1.0.0" is-glob "^2.0.0" parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" dependencies: error-ex "^1.2.0" parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" dependencies: graceful-fs "^4.1.2" pify "^2.0.0" pinkie-promise "^2.0.0" path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" dependencies: pify "^2.0.0" performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" pretty-format@^21.1.0: version "21.1.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.1.0.tgz#557428254323832ee8b7c971cb613442bea67f61" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" private@^0.1.6, private@^0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" prr@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: is-number "^3.0.0" kind-of "^4.0.0" rc@^1.1.7: version "1.2.1" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" dependencies: deep-extend "~0.4.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" dependencies: find-up "^1.0.0" read-pkg "^1.0.0" read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" dependencies: find-up "^2.0.0" read-pkg "^2.0.0" read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" path-type "^1.0.0" read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" path-type "^2.0.0" readable-stream@^2.0.6, readable-stream@^2.1.4: version "2.3.3" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~1.0.6" safe-buffer "~5.1.1" string_decoder "~1.0.3" util-deprecate "~1.0.1" regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-runtime@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" private "^0.1.6" regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" regjsparser "^0.1.4" regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" dependencies: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" repeat-string@^1.5.2: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" dependencies: is-finite "^1.0.0" request@2.81.0, request@^2.79.0, request@^2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" caseless "~0.12.0" combined-stream "~1.0.5" extend "~3.0.0" forever-agent "~0.6.1" form-data "~2.1.1" har-validator "~4.2.1" hawk "~3.1.3" http-signature "~1.1.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" mime-types "~2.1.7" oauth-sign "~0.8.1" performance-now "^0.2.0" qs "~6.4.0" safe-buffer "^5.0.1" stringstream "~0.0.4" tough-cookie "~2.3.0" tunnel-agent "^0.6.0" uuid "^3.0.0" require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" dependencies: path-parse "^1.0.5" resumer@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" dependencies: through "~2.3.4" right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" sane@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sane/-/sane-2.0.0.tgz#99cb79f21f4a53a69d4d0cd957c2db04024b8eb2" dependencies: anymatch "^1.3.0" exec-sh "^0.2.0" fb-watchman "^2.0.0" minimatch "^3.0.2" minimist "^1.1.1" walker "~1.0.5" watch "~0.10.0" optionalDependencies: fsevents "^1.1.1" sax@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" "semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" shellwords@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" dependencies: hoek "2.x.x" source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" dependencies: spdx-license-ids "^1.0.2" spdx-expression-parse@~1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" dashdash "^1.12.0" getpass "^0.1.1" optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" jsbn "~0.1.0" tweetnacl "~0.14.0" string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" dependencies: astral-regex "^1.0.0" strip-ansi "^4.0.0" string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" string-width@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" string.prototype.trim@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" dependencies: define-properties "^1.1.2" es-abstract "^1.5.0" function-bind "^1.0.2" string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: safe-buffer "~5.1.0" stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: ansi-regex "^3.0.0" strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" dependencies: is-utf8 "^0.2.0" strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" supports-color@^3.1.2: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" dependencies: has-flag "^1.0.0" supports-color@^4.0.0: version "4.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: has-flag "^2.0.0" symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" tape@^4.6.3: version "4.8.0" resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e" dependencies: deep-equal "~1.0.1" defined "~1.0.0" for-each "~0.3.2" function-bind "~1.1.0" glob "~7.1.2" has "~1.0.1" inherits "~2.0.3" minimist "~1.2.0" object-inspect "~1.3.0" resolve "~1.4.0" resumer "~0.0.0" string.prototype.trim "~1.1.2" through "~2.3.8" tar-pack@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" dependencies: debug "^2.2.0" fstream "^1.0.10" fstream-ignore "^1.0.5" once "^1.3.3" readable-stream "^2.1.4" rimraf "^2.5.1" tar "^2.2.1" uid-number "^0.0.6" tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: block-stream "*" fstream "^1.0.2" inherits "2" test-exclude@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" dependencies: arrify "^1.0.1" micromatch "^2.3.11" object-assign "^4.1.0" read-pkg-up "^1.0.1" require-main-filename "^1.0.1" throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" tough-cookie@^2.3.2, tough-cookie@~2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" dependencies: punycode "^1.4.1" tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: prelude-ls "~1.1.2" uglify-js@^2.6: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: source-map "~0.5.1" yargs "~3.10.0" optionalDependencies: uglify-to-browserify "~1.0.0" uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" urlgrey@0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" uuid@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" dependencies: makeerror "1.0.x" watch@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc" webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" webidl-conversions@^4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" whatwg-encoding@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" dependencies: iconv-lite "0.4.13" whatwg-url@^4.3.0: version "4.8.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0" dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" which@^1.2.12, which@^1.2.9: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: string-width "^1.0.2" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" worker-farm@^1.3.1: version "1.5.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.0.tgz#adfdf0cd40581465ed0a1f648f9735722afd5c8d" dependencies: errno "^0.1.4" xtend "^4.0.1" wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" write-file-atomic@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" signal-exit "^3.0.2" xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" xtend@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" dependencies: camelcase "^4.1.0" yargs@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" dependencies: camelcase "^4.1.0" cliui "^3.2.0" decamelize "^1.1.1" get-caller-file "^1.0.1" os-locale "^2.0.0" read-pkg-up "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1" yargs-parser "^7.0.0" yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" dependencies: camelcase "^1.0.2" cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0"