1
0
Files
es6-models/src/decorators/memoize.ts
2020-03-06 13:08:45 -05:00

19 lines
755 B
TypeScript

export function Memoize(): Function {
return function(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function(this: any, ...args: any[]) {
const reflectKey = `${JSON.stringify(this)}_${JSON.stringify(args)}_${propertyKey}`;
const hasReflectData = Reflect.hasMetadata(reflectKey, target);
if (hasReflectData) {
return Reflect.getMetadata(reflectKey, target)
} else {
const result = originalMethod.apply(this, args);
Reflect.defineMetadata(reflectKey, result, target);
return result;
}
}
return descriptor;
}
}