UNPKG

@launchtray/tsyringe-async

Version:

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

46 lines (45 loc) 1.85 kB
"use strict"; 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;