@launchtray/tsyringe-async
Version:
Lightweight dependency injection container for JavaScript/TypeScript, with asynchronous resolution
46 lines (45 loc) • 1.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const resolve_params_1 = require("../resolve-params");
const initializersKey = Symbol("initializers");
const initializationPromiseKey = Symbol("initializationPromise");
function initializer() {
return function (target, propertyKey, descriptor) {
const originalMethod = descriptor.value;
if (target[initializersKey] == null) {
target[initializersKey] = [];
}
target[initializersKey].push(function (container, object) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const args = yield resolve_params_1.resolveParams(container, target, propertyKey);
yield originalMethod.apply(object, args);
});
});
};
}
function createInitializationPromise(container, object) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
const initializers = object.constructor.prototype[initializersKey];
if (initializers != null) {
for (const initializer of initializers) {
yield initializer(container, object);
}
}
});
}
function callInitializers(container, object) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
if (object != null &&
object.constructor != null &&
object.constructor.prototype != null &&
object.constructor.prototype[initializersKey] != null) {
if (object[initializationPromiseKey] == null) {
object[initializationPromiseKey] = createInitializationPromise(container, object);
}
yield object[initializationPromiseKey];
}
});
}
exports.callInitializers = callInitializers;
exports.default = initializer;