react-obsidian
Version:
Dependency injection framework for React and React Native applications
34 lines • 1.46 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.modernDecorator = modernDecorator;
const ProvidedPropertiesStore_1 = __importDefault(require("../../ProvidedPropertiesStore"));
const reflect_1 = require("../../utils/reflect");
function modernDecorator(name, target, context) {
context.addInitializer(function initializer() {
const mangledProperty = String(context.name);
// @ts-ignore
this[mangledProperty] = this[mangledProperty].bind(this);
ProvidedPropertiesStore_1.default.set(this, mangledProperty, name);
});
function getMemoizationTarget(zis) {
if (reflect_1.Reflect.getMetadata('isSingleton', target)) {
return zis.constructor;
}
return zis;
}
function replacementMethod(...args) {
const memoizationTarget = getMemoizationTarget(this);
const memoizedResult = reflect_1.Reflect.getMetadata(`memoized${name}`, memoizationTarget);
if (memoizedResult === undefined) {
const result = target.call(this, ...args);
reflect_1.Reflect.defineMetadata(`memoized${name}`, result, memoizationTarget);
return result;
}
return memoizedResult;
}
return replacementMethod;
}
//# sourceMappingURL=provides.modern.js.map