12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
- 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(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(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(key, options, fn) {
- return this.for(key).tapPromise(options, fn);
- }, "HookMap#tapPromise(key,…) is deprecated. Use HookMap#for(key).tapPromise(…) instead.");
- module.exports = HookMap;
|