UNPKG

smart-factory

Version:

functional programming-ready dependancy injector/ioc container library

52 lines 2.66 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const errors_1 = require("./errors"); const types_1 = require("./types"); const container_helpers_1 = require("./container-helpers"); const instantiator_1 = require("./instantiator"); exports.injectableFunc = (srcOpts, candidates) => (key, deps, instantiator, multiInstance) => __awaiter(this, void 0, void 0, function* () { let multi = false; if (multiInstance === true) multi = true; candidates.push({ key, deps, instantiator, multi }); return new types_1.Injectable(key); }); exports.readyFunc = (srcOpts, logger, candidates, instances) => () => __awaiter(this, void 0, void 0, function* () { if (candidates.length === 0) { throw new errors_1.EmptyDependencyError('at least one dependency required.'); } logger.debug(`* ${candidates.length} injection candidates found:`); logger.debug(candidates.map((c) => c.key)); try { container_helpers_1.checkDepNotfound(candidates); logger.debug('* [inspection] dependency missing not found'); container_helpers_1.checkKeyDuplicates(candidates); logger.debug('* [inspection] duplicated dependency key not found'); container_helpers_1.checkCyclicReference(candidates); logger.debug('* [inspection] cyclic dependency not found'); container_helpers_1.checkSelfReference(candidates); logger.debug('* [inspection] self-referencing dependency not found'); } catch (err) { throw err; } logger.debug('* dependency inspection completed'); const instantiate = instantiator_1.default(logger, instances); yield instantiate(candidates); logger.debug(`* modules in container`); logger.debug(instances); }); exports.resolveFunc = (srcOpts, instances) => (key) => { return instances.get(key); }; exports.setFunc = (srcOpts, instances) => (key, instance) => instances.set(key, instance); exports.clearFunc = (srcOpts, instances) => () => instances.clear(); //# sourceMappingURL=container.js.map