123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- /*
- 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;
|