UNPKG

@launchtray/tsyringe-async

Version:

Lightweight dependency injection container for JavaScript/TypeScript, with asynchronous resolution

43 lines (42 loc) 1.69 kB
import { __awaiter } from "tslib"; import { resolveParams } from "../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 __awaiter(this, void 0, void 0, function* () { const args = yield resolveParams(container, target, propertyKey); yield originalMethod.apply(object, args); }); }); }; } function createInitializationPromise(container, object) { return __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); } } }); } export function callInitializers(container, object) { return __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]; } }); } export default initializer;