Spaces:
Running
Running
| /* | |
| MIT License http://www.opensource.org/licenses/mit-license.php | |
| Author Tobias Koppers @sokra | |
| */ | |
| ; | |
| const util = require("util"); | |
| const defaultFactory = (key, hook) => hook; | |
| class HookMap { | |
| constructor(factory, name = undefined) { | |
| this._map = new Map(); | |
| this.name = name; | |
| 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: defaultFactory | |
| }, | |
| interceptor | |
| ) | |
| ); | |
| } | |
| } | |
| HookMap.prototype.tap = util.deprecate(function tap(key, options, fn) { | |
| return this.for(key).tap(options, fn); | |
| }, "HookMap#tap(key,…) is deprecated. Use HookMap#for(key).tap(…) instead."); | |
| HookMap.prototype.tapAsync = util.deprecate(function tapAsync( | |
| key, | |
| options, | |
| fn | |
| ) { | |
| return this.for(key).tapAsync(options, fn); | |
| }, "HookMap#tapAsync(key,…) is deprecated. Use HookMap#for(key).tapAsync(…) instead."); | |
| HookMap.prototype.tapPromise = util.deprecate(function tapPromise( | |
| key, | |
| options, | |
| fn | |
| ) { | |
| return this.for(key).tapPromise(options, fn); | |
| }, "HookMap#tapPromise(key,…) is deprecated. Use HookMap#for(key).tapPromise(…) instead."); | |
| module.exports = HookMap; | |