1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- var cacheProp = Symbol.for('[memoize]');
- function Memoize(keyBuilder) {
- return function (_, propertyKey, descriptor) {
- if (descriptor.value != null) {
- descriptor.value = memoize(propertyKey, descriptor.value, keyBuilder || (function (v) { return v; }));
- }
- else if (descriptor.get != null) {
- descriptor.get = memoize(propertyKey, descriptor.get, keyBuilder || (function () { return propertyKey; }));
- }
- };
- }
- exports.Memoize = Memoize;
- function ensureCache(target, reset) {
- if (reset === void 0) { reset = false; }
- if (reset || !target[cacheProp]) {
- Object.defineProperty(target, cacheProp, {
- value: Object.create(null),
- configurable: true,
- });
- }
- return target[cacheProp];
- }
- function ensureChildCache(target, key, reset) {
- if (reset === void 0) { reset = false; }
- var dict = ensureCache(target);
- if (reset || !dict[key]) {
- dict[key] = new Map();
- }
- return dict[key];
- }
- function memoize(namespace, func, keyBuilder) {
- return function () {
- var args = [];
- for (var _i = 0; _i < arguments.length; _i++) {
- args[_i] = arguments[_i];
- }
- var cache = ensureChildCache(this, namespace);
- var key = keyBuilder.apply(this, args);
- if (cache.has(key))
- return cache.get(key);
- var res = func.apply(this, args);
- cache.set(key, res);
- return res;
- };
- }
|