|
|
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- "use strict";
-
- class HookMap {
- constructor(factory) {
- this._map = new Map();
- 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: (key, hook) => hook
- },
- interceptor
- )
- );
- }
-
- tap(key, options, fn) {
- return this.for(key).tap(options, fn);
- }
-
- tapAsync(key, options, fn) {
- return this.for(key).tapAsync(options, fn);
- }
-
- tapPromise(key, options, fn) {
- return this.for(key).tapPromise(options, fn);
- }
- }
-
- module.exports = HookMap;
|