UNPKG

ts-simple-ast

Version:

TypeScript compiler wrapper for AST navigation and code generation.

37 lines (35 loc) 1.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function Memoize(target, propertyName, descriptor) { if (descriptor.value != null) descriptor.value = getNewFunction(descriptor.value); else if (descriptor.get != null) descriptor.get = getNewFunction(descriptor.get); else throw new Error("Only put a Memoize decorator on a method or get accessor."); } exports.Memoize = Memoize; let counter = 0; function getNewFunction(originalFunction) { const identifier = ++counter; function decorator() { const propName = `__memoized_value_${identifier}`; let returnedValue; if (arguments.length > 0) throw new Error("Should not use memoize with a function that requires arguments."); if (this.hasOwnProperty(propName)) returnedValue = this[propName]; else { returnedValue = originalFunction.apply(this, arguments); Object.defineProperty(this, propName, { configurable: false, enumerable: false, writable: false, value: returnedValue }); } return returnedValue; } return decorator; } //# sourceMappingURL=Memoize.js.map