simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

HookMap.js (1517B)


      1 /*
      2 	MIT License http://www.opensource.org/licenses/mit-license.php
      3 	Author Tobias Koppers @sokra
      4 */
      5 "use strict";
      6 
      7 const util = require("util");
      8 
      9 const defaultFactory = (key, hook) => hook;
     10 
     11 class HookMap {
     12 	constructor(factory, name = undefined) {
     13 		this._map = new Map();
     14 		this.name = name;
     15 		this._factory = factory;
     16 		this._interceptors = [];
     17 	}
     18 
     19 	get(key) {
     20 		return this._map.get(key);
     21 	}
     22 
     23 	for(key) {
     24 		const hook = this.get(key);
     25 		if (hook !== undefined) {
     26 			return hook;
     27 		}
     28 		let newHook = this._factory(key);
     29 		const interceptors = this._interceptors;
     30 		for (let i = 0; i < interceptors.length; i++) {
     31 			newHook = interceptors[i].factory(key, newHook);
     32 		}
     33 		this._map.set(key, newHook);
     34 		return newHook;
     35 	}
     36 
     37 	intercept(interceptor) {
     38 		this._interceptors.push(
     39 			Object.assign(
     40 				{
     41 					factory: defaultFactory
     42 				},
     43 				interceptor
     44 			)
     45 		);
     46 	}
     47 }
     48 
     49 HookMap.prototype.tap = util.deprecate(function(key, options, fn) {
     50 	return this.for(key).tap(options, fn);
     51 }, "HookMap#tap(key,…) is deprecated. Use HookMap#for(key).tap(…) instead.");
     52 
     53 HookMap.prototype.tapAsync = util.deprecate(function(key, options, fn) {
     54 	return this.for(key).tapAsync(options, fn);
     55 }, "HookMap#tapAsync(key,…) is deprecated. Use HookMap#for(key).tapAsync(…) instead.");
     56 
     57 HookMap.prototype.tapPromise = util.deprecate(function(key, options, fn) {
     58 	return this.for(key).tapPromise(options, fn);
     59 }, "HookMap#tapPromise(key,…) is deprecated. Use HookMap#for(key).tapPromise(…) instead.");
     60 
     61 module.exports = HookMap;