tapable
Advanced tools
Comparing version 2.0.0-beta.3 to 2.0.0-beta.4
@@ -11,3 +11,3 @@ /* | ||
class AsyncSeriesBailHookCodeFactory extends HookCodeFactory { | ||
content({ onError, onResult, onDone }) { | ||
content({ onError, onResult, resultReturns, onDone }) { | ||
return this.callTapsSeries({ | ||
@@ -19,2 +19,3 @@ onError: (i, err, next, doneBreak) => onError(err) + doneBreak(true), | ||
)};\n} else {\n${next()}}\n`, | ||
resultReturns, | ||
onDone | ||
@@ -21,0 +22,0 @@ }); |
@@ -26,2 +26,3 @@ /* | ||
onResult: result => `return ${result};\n`, | ||
resultReturns: true, | ||
onDone: () => "", | ||
@@ -47,15 +48,7 @@ rethrowIfPossible: true | ||
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({ | ||
let errorHelperUsed = false; | ||
const content = 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; | ||
errorHelperUsed = true; | ||
return `_error(${err});\n`; | ||
}, | ||
@@ -65,3 +58,19 @@ onResult: result => `_resolve(${result});\n`, | ||
}); | ||
code += "_sync = false;\n"; | ||
let code = ""; | ||
code += '"use strict";\n'; | ||
code += "return new Promise((_resolve, _reject) => {\n"; | ||
if (errorHelperUsed) { | ||
code += "var _sync = true;\n"; | ||
code += "function _error(_err) {\n"; | ||
code += "if(_sync)\n"; | ||
code += "_resolve(Promise.resolve().then(() => { throw _err; }));\n"; | ||
code += "else\n"; | ||
code += "_reject(_err);\n"; | ||
code += "};\n"; | ||
} | ||
code += this.header(); | ||
code += content; | ||
if (errorHelperUsed) { | ||
code += "_sync = false;\n"; | ||
} | ||
code += "});\n"; | ||
@@ -213,10 +222,25 @@ fn = new Function(this.args(), code); | ||
callTapsSeries({ onError, onResult, onDone, rethrowIfPossible }) { | ||
callTapsSeries({ | ||
onError, | ||
onResult, | ||
resultReturns, | ||
onDone, | ||
doneReturns, | ||
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 somethingReturns = resultReturns || doneReturns || false; | ||
let code = ""; | ||
let current = onDone; | ||
for (let j = this.options.taps.length - 1; j >= 0; j--) { | ||
const i = j; | ||
const unroll = current !== onDone && this.options.taps[i].type !== "sync"; | ||
if (unroll) { | ||
code += `function _next${i}() {\n`; | ||
code += current(); | ||
code += `}\n`; | ||
current = () => `${somethingReturns ? "return " : ""}_next${i}();\n`; | ||
} | ||
const done = () => next(i + 1); | ||
const done = current; | ||
const doneBreak = skipDone => { | ||
@@ -226,3 +250,3 @@ if (skipDone) return ""; | ||
}; | ||
return this.callTap(i, { | ||
const content = this.callTap(i, { | ||
onError: error => onError(i, error, done, doneBreak), | ||
@@ -234,12 +258,10 @@ onResult: | ||
}), | ||
onDone: | ||
!onResult && | ||
(() => { | ||
return done(); | ||
}), | ||
onDone: !onResult && done, | ||
rethrowIfPossible: | ||
rethrowIfPossible && (firstAsync < 0 || i < firstAsync) | ||
}); | ||
}; | ||
return next(0); | ||
current = () => content; | ||
} | ||
code += current(); | ||
return code; | ||
} | ||
@@ -246,0 +268,0 @@ |
@@ -11,3 +11,3 @@ /* | ||
class SyncBailHookCodeFactory extends HookCodeFactory { | ||
content({ onError, onResult, onDone, rethrowIfPossible }) { | ||
content({ onError, onResult, resultReturns, onDone, rethrowIfPossible }) { | ||
return this.callTapsSeries({ | ||
@@ -19,2 +19,3 @@ onError: (i, err) => onError(err), | ||
)};\n} else {\n${next()}}\n`, | ||
resultReturns, | ||
onDone, | ||
@@ -21,0 +22,0 @@ rethrowIfPossible |
@@ -11,3 +11,3 @@ /* | ||
class SyncHookCodeFactory extends HookCodeFactory { | ||
content({ onError, onResult, onDone, rethrowIfPossible }) { | ||
content({ onError, onDone, rethrowIfPossible }) { | ||
return this.callTapsSeries({ | ||
@@ -14,0 +14,0 @@ onError: (i, err) => onError(err), |
@@ -11,3 +11,3 @@ /* | ||
class SyncLoopHookCodeFactory extends HookCodeFactory { | ||
content({ onError, onResult, onDone, rethrowIfPossible }) { | ||
content({ onError, onDone, rethrowIfPossible }) { | ||
return this.callTapsLooping({ | ||
@@ -14,0 +14,0 @@ onError: (i, err) => onError(err), |
@@ -11,3 +11,3 @@ /* | ||
class SyncWaterfallHookCodeFactory extends HookCodeFactory { | ||
content({ onError, onResult, onDone, rethrowIfPossible }) { | ||
content({ onError, onResult, resultReturns, rethrowIfPossible }) { | ||
return this.callTapsSeries({ | ||
@@ -24,2 +24,3 @@ onError: (i, err) => onError(err), | ||
onDone: () => onResult(this._args[0]), | ||
doneReturns: resultReturns, | ||
rethrowIfPossible | ||
@@ -26,0 +27,0 @@ }); |
{ | ||
"name": "tapable", | ||
"version": "2.0.0-beta.3", | ||
"version": "2.0.0-beta.4", | ||
"author": "Tobias Koppers @sokra", | ||
@@ -26,2 +26,3 @@ "description": "Just a little module for plugins.", | ||
"lib", | ||
"!lib/__tests__", | ||
"tapable.d.ts" | ||
@@ -28,0 +29,0 @@ ], |
@@ -91,3 +91,2 @@ # Tapable | ||
``` | ||
The class declaring these hooks need to call them: | ||
@@ -97,5 +96,9 @@ | ||
class Car { | ||
/* ... */ | ||
/** | ||
* You won't get returned value from SyncHook or AsyncParallelHook, | ||
* to do that, use SyncWaterfallHook and AsyncSeriesWaterfallHook respectively | ||
**/ | ||
setSpeed(newSpeed) { | ||
// following call returns undefined even when you returned values | ||
this.hooks.accelerate.call(newSpeed); | ||
@@ -106,3 +109,4 @@ } | ||
const routesList = new List(); | ||
return this.hooks.calculateRoutes.promise(source, target, routesList).then(() => { | ||
return this.hooks.calculateRoutes.promise(source, target, routesList).then((res) => { | ||
// res is undefined for AsyncParallelHook | ||
return routesList.getRoutes(); | ||
@@ -109,0 +113,0 @@ }); |
@@ -44,3 +44,3 @@ type FixedSizeArray<T extends number, U> = T extends 0 | ||
declare class Hook<T extends any[], R> { | ||
constructor(args: ArgumentNames<T>); | ||
constructor(args?: ArgumentNames<T>); | ||
intercept(interceptor: HookInterceptor<Hook<T, R>>): void; | ||
@@ -47,0 +47,0 @@ isUsed(): boolean; |
Uses eval
Supply chain riskPackage uses eval() which is a dangerous function. This prevents the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
299
0
41677
19
1105