1
0

Adding Memoize v1

This commit is contained in:
2020-03-06 13:08:45 -05:00
parent 62ab887ada
commit fa38bb6b4e
4 changed files with 43 additions and 0 deletions

19
src/decorators/memoize.ts Normal file
View File

@@ -0,0 +1,19 @@
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;
}
}