ts-ioc-container
Version:
Fast, lightweight TypeScript dependency injection container with a clean API, scoped lifecycles, decorators, tokens, hooks, lazy injection, customizable providers, and no global container objects.
17 lines (16 loc) • 527 B
JavaScript
export const once = ({ onRepeat } = {}) => (target, propertyKey, descriptor) => {
const originalMethod = descriptor.value;
const cacheMap = new WeakMap();
let index = 0;
descriptor.value = function (...args) {
index++;
if (cacheMap.has(this)) {
onRepeat?.({ index: index - 1, args });
return cacheMap.get(this);
}
const result = originalMethod.apply(this, args);
cacheMap.set(this, result);
return result;
};
return descriptor;
};