smart-factory
Version:
functional programming-ready dependancy injector/ioc container library
52 lines • 2.66 kB
JavaScript
;
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