mirror of
https://github.com/webpack/tapable.git
synced 2026-01-18 14:28:32 +00:00
198 lines
4.5 KiB
JavaScript
198 lines
4.5 KiB
JavaScript
/*
|
|
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();
|
|
});
|
|
}`;
|
|
}
|
|
}
|