diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-03 15:35:00 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-03 15:35:00 +0200 |
commit | de98e0b232509d5f40c135d540a70e415272ff85 (patch) | |
tree | a79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/tapable/lib/Tapable.js | |
parent | e0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff) |
node_modules
Diffstat (limited to 'node_modules/tapable/lib/Tapable.js')
-rw-r--r-- | node_modules/tapable/lib/Tapable.js | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/node_modules/tapable/lib/Tapable.js b/node_modules/tapable/lib/Tapable.js new file mode 100644 index 000000000..c7521baf7 --- /dev/null +++ b/node_modules/tapable/lib/Tapable.js @@ -0,0 +1,308 @@ +/*
+ MIT License http://www.opensource.org/licenses/mit-license.php
+ Author Tobias Koppers @sokra
+*/
+
+// polyfill from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
+// using the polyfill specifically to avoid the call to `Object.defineProperty` for performance reasons
+function fastFilter(fun/*, thisArg*/) {
+ 'use strict';
+
+ if (this === void 0 || this === null) {
+ throw new TypeError();
+ }
+
+ var t = Object(this);
+ var len = t.length >>> 0;
+ if (typeof fun !== 'function') {
+ throw new TypeError();
+ }
+
+ var res = [];
+ var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
+ for (var i = 0; i < len; i++) {
+ if (i in t) {
+ var val = t[i];
+
+ // NOTE: Technically this should Object.defineProperty at
+ // the next index, as push can be affected by
+ // properties on Object.prototype and Array.prototype.
+ // But that method's new, and collisions should be
+ // rare, so use the more-compatible alternative.
+ if (fun.call(thisArg, val, i, t)) {
+ res.push(val);
+ }
+ }
+ }
+
+ return res;
+}
+
+function Tapable() {
+ this._plugins = {};
+}
+module.exports = Tapable;
+
+function copyProperties(from, to) {
+ for(var key in from)
+ to[key] = from[key];
+ return to;
+}
+
+Tapable.mixin = function mixinTapable(pt) {
+ copyProperties(Tapable.prototype, pt);
+};
+
+Tapable.prototype.applyPlugins = function applyPlugins(name) {
+ if(!this._plugins[name]) return;
+ var args = Array.prototype.slice.call(arguments, 1);
+ var plugins = this._plugins[name];
+ for(var i = 0; i < plugins.length; i++)
+ plugins[i].apply(this, args);
+};
+
+Tapable.prototype.applyPlugins0 = function applyPlugins0(name) {
+ var plugins = this._plugins[name];
+ if(!plugins) return;
+ for(var i = 0; i < plugins.length; i++)
+ plugins[i].call(this);
+};
+
+Tapable.prototype.applyPlugins1 = function applyPlugins1(name, param) {
+ var plugins = this._plugins[name];
+ if(!plugins) return;
+ for(var i = 0; i < plugins.length; i++)
+ plugins[i].call(this, param);
+};
+
+Tapable.prototype.applyPlugins2 = function applyPlugins2(name, param1, param2) {
+ var plugins = this._plugins[name];
+ if(!plugins) return;
+ for(var i = 0; i < plugins.length; i++)
+ plugins[i].call(this, param1, param2);
+};
+
+Tapable.prototype.applyPluginsWaterfall = function applyPluginsWaterfall(name, init) {
+ if(!this._plugins[name]) return init;
+ var args = Array.prototype.slice.call(arguments, 2);
+ var plugins = this._plugins[name];
+ var current = init;
+ for(var i = 0; i < plugins.length; i++)
+ current = plugins[i].apply(this, [current].concat(args));
+ return current;
+};
+
+Tapable.prototype.applyPluginsWaterfall0 = function applyPluginsWaterfall0(name, init) {
+ var plugins = this._plugins[name];
+ if(!plugins) return init;
+ var current = init;
+ for(var i = 0; i < plugins.length; i++)
+ current = plugins[i].call(this, current);
+ return current;
+};
+
+Tapable.prototype.applyPluginsBailResult = function applyPluginsBailResult(name) {
+ if(!this._plugins[name]) return;
+ var args = Array.prototype.slice.call(arguments, 1);
+ var plugins = this._plugins[name];
+ for(var i = 0; i < plugins.length; i++) {
+ var result = plugins[i].apply(this, args);
+ if(typeof result !== "undefined") {
+ return result;
+ }
+ }
+};
+
+Tapable.prototype.applyPluginsBailResult1 = function applyPluginsBailResult1(name, param) {
+ if(!this._plugins[name]) return;
+ var plugins = this._plugins[name];
+ for(var i = 0; i < plugins.length; i++) {
+ var result = plugins[i].call(this, param);
+ if(typeof result !== "undefined") {
+ return result;
+ }
+ }
+};
+
+Tapable.prototype.applyPluginsAsyncSeries = Tapable.prototype.applyPluginsAsync = function applyPluginsAsyncSeries(name) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var callback = args.pop();
+ var plugins = this._plugins[name];
+ if(!plugins || plugins.length === 0) return callback();
+ var i = 0;
+ var _this = this;
+ args.push(copyProperties(callback, function next(err) {
+ if(err) return callback(err);
+ i++;
+ if(i >= plugins.length) {
+ return callback();
+ }
+ plugins[i].apply(_this, args);
+ }));
+ plugins[0].apply(this, args);
+};
+
+Tapable.prototype.applyPluginsAsyncSeries1 = function applyPluginsAsyncSeries1(name, param, callback) {
+ var plugins = this._plugins[name];
+ if(!plugins || plugins.length === 0) return callback();
+ var i = 0;
+ var _this = this;
+ var innerCallback = copyProperties(callback, function next(err) {
+ if(err) return callback(err);
+ i++;
+ if(i >= plugins.length) {
+ return callback();
+ }
+ plugins[i].call(_this, param, innerCallback);
+ });
+ plugins[0].call(this, param, innerCallback);
+};
+
+Tapable.prototype.applyPluginsAsyncSeriesBailResult = function applyPluginsAsyncSeriesBailResult(name) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var callback = args.pop();
+ if(!this._plugins[name] || this._plugins[name].length === 0) return callback();
+ var plugins = this._plugins[name];
+ var i = 0;
+ var _this = this;
+ args.push(copyProperties(callback, function next() {
+ if(arguments.length > 0) return callback.apply(null, arguments);
+ i++;
+ if(i >= plugins.length) {
+ return callback();
+ }
+ plugins[i].apply(_this, args);
+ }));
+ plugins[0].apply(this, args);
+};
+
+Tapable.prototype.applyPluginsAsyncSeriesBailResult1 = function applyPluginsAsyncSeriesBailResult1(name, param, callback) {
+ var plugins = this._plugins[name];
+ if(!plugins || plugins.length === 0) return callback();
+ var i = 0;
+ var _this = this;
+ var innerCallback = copyProperties(callback, function next(err, result) {
+ if(arguments.length > 0) return callback(err, result);
+ i++;
+ if(i >= plugins.length) {
+ return callback();
+ }
+ plugins[i].call(_this, param, innerCallback);
+ });
+ plugins[0].call(this, param, innerCallback);
+};
+
+Tapable.prototype.applyPluginsAsyncWaterfall = function applyPluginsAsyncWaterfall(name, init, callback) {
+ if(!this._plugins[name] || this._plugins[name].length === 0) return callback(null, init);
+ var plugins = this._plugins[name];
+ var i = 0;
+ var _this = this;
+ var next = copyProperties(callback, function(err, value) {
+ if(err) return callback(err);
+ i++;
+ if(i >= plugins.length) {
+ return callback(null, value);
+ }
+ plugins[i].call(_this, value, next);
+ });
+ plugins[0].call(this, init, next);
+};
+
+Tapable.prototype.applyPluginsParallel = function applyPluginsParallel(name) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var callback = args.pop();
+ if(!this._plugins[name] || this._plugins[name].length === 0) return callback();
+ var plugins = this._plugins[name];
+ var remaining = plugins.length;
+ args.push(copyProperties(callback, function(err) {
+ if(remaining < 0) return; // ignore
+ if(err) {
+ remaining = -1;
+ return callback(err);
+ }
+ remaining--;
+ if(remaining === 0) {
+ return callback();
+ }
+ }));
+ for(var i = 0; i < plugins.length; i++) {
+ plugins[i].apply(this, args);
+ if(remaining < 0) return;
+ }
+};
+
+Tapable.prototype.applyPluginsParallelBailResult = function applyPluginsParallelBailResult(name) {
+ var args = Array.prototype.slice.call(arguments, 1);
+ var callback = args[args.length - 1];
+ if(!this._plugins[name] || this._plugins[name].length === 0) return callback();
+ var plugins = this._plugins[name];
+ var currentPos = plugins.length;
+ var currentResult;
+ var done = [];
+ for(var i = 0; i < plugins.length; i++) {
+ args[args.length - 1] = (function(i) {
+ return copyProperties(callback, function() {
+ if(i >= currentPos) return; // ignore
+ done.push(i);
+ if(arguments.length > 0) {
+ currentPos = i + 1;
+ done = fastFilter.call(done, function(item) {
+ return item <= i;
+ });
+ currentResult = Array.prototype.slice.call(arguments);
+ }
+ if(done.length === currentPos) {
+ callback.apply(null, currentResult);
+ currentPos = 0;
+ }
+ });
+ }(i));
+ plugins[i].apply(this, args);
+ }
+};
+
+Tapable.prototype.applyPluginsParallelBailResult1 = function applyPluginsParallelBailResult1(name, param, callback) {
+ var plugins = this._plugins[name];
+ if(!plugins || plugins.length === 0) return callback();
+ var currentPos = plugins.length;
+ var currentResult;
+ var done = [];
+ for(var i = 0; i < plugins.length; i++) {
+ var innerCallback = (function(i) {
+ return copyProperties(callback, function() {
+ if(i >= currentPos) return; // ignore
+ done.push(i);
+ if(arguments.length > 0) {
+ currentPos = i + 1;
+ done = fastFilter.call(done, function(item) {
+ return item <= i;
+ });
+ currentResult = Array.prototype.slice.call(arguments);
+ }
+ if(done.length === currentPos) {
+ callback.apply(null, currentResult);
+ currentPos = 0;
+ }
+ });
+ }(i));
+ plugins[i].call(this, param, innerCallback);
+ }
+};
+
+
+Tapable.prototype.plugin = function plugin(name, fn) {
+ if(Array.isArray(name)) {
+ name.forEach(function(name) {
+ this.plugin(name, fn);
+ }, this);
+ return;
+ }
+ if(!this._plugins[name]) this._plugins[name] = [fn];
+ else this._plugins[name].push(fn);
+};
+
+Tapable.prototype.apply = function apply() {
+ for(var i = 0; i < arguments.length; i++) {
+ arguments[i].apply(this);
+ }
+};
|