ts-simple-ast
Version:
TypeScript compiler wrapper for static analysis and code manipulation.
39 lines (38 loc) • 1.34 kB
JavaScript
;
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;
var counter = 0;
function getNewFunction(originalFunction) {
var identifier = ++counter;
function decorator() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var propName = "__memoized_value_" + identifier;
if (arguments.length > 0)
propName += "_" + JSON.stringify(args);
var returnedValue;
if (this.hasOwnProperty(propName))
returnedValue = this[propName];
else {
returnedValue = originalFunction.apply(this, args);
Object.defineProperty(this, propName, {
configurable: false,
enumerable: false,
writable: false,
value: returnedValue
});
}
return returnedValue;
}
return decorator;
}