UNPKG

@baizey/dependency-injection

Version:
96 lines (95 loc) 3.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.services = exports.ServiceCollection = void 0; var utils_1 = require("../utils"); var mockUtils_1 = require("./mockUtils"); var ServiceProvider_1 = require("../ServiceProvider"); var ServiceCollection = /** @class */ (function () { function ServiceCollection(dependencies) { Object.defineProperty(this, "lifetimes", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.lifetimes = Object.entries(dependencies).map(function (_a) { var name = _a[0], data = _a[1]; var factory = 'factory' in data ? data.factory // @ts-ignore the factory can be either p => new or (p, props) => new, but ts don't know this : function (p, props) { return new data.constructor(p, props); }; var Lifetime = data.lifetime; return new Lifetime(name, factory); }).reduce(function (a, b) { a[b.name] = b; return a; }, {}); } Object.defineProperty(ServiceCollection.prototype, "get", { enumerable: false, configurable: true, writable: true, value: function (selector) { return this.lifetimes[(0, utils_1.extractSelector)(selector)]; } }); Object.defineProperty(ServiceCollection.prototype, "replace", { enumerable: false, configurable: true, writable: true, value: function (dependencies) { var _this = this; Object.entries(dependencies).forEach(function (_a) { var name = _a[0], data = _a[1]; var factory = 'factory' in data ? data.factory // @ts-ignore the factory can be either p => new or (p, props) => new, but ts don't know this : function (p, props) { return new data.constructor(p, props); }; var Lifetime = data.lifetime; _this.lifetimes[name] = new Lifetime(name, factory); }); return this; } }); Object.defineProperty(ServiceCollection.prototype, "build", { enumerable: false, configurable: true, writable: true, value: function () { var lifetimes = Object.values(this.lifetimes) .map(function (e) { return e.clone(); }) .reduce(function (a, b) { a[b.name] = b; return a; }, {}); return new ServiceProvider_1.ServiceProvider(lifetimes); } }); Object.defineProperty(ServiceCollection.prototype, "buildDebug", { enumerable: false, configurable: true, writable: true, value: function () { var lifetimes = Object.values(this.lifetimes) .map(function (e) { return e.clone(); }) .reduce(function (a, b) { a[b.name] = b; return a; }, {}); return new ServiceProvider_1.DebugServiceProvider(lifetimes); } }); Object.defineProperty(ServiceCollection.prototype, "buildMock", { enumerable: false, configurable: true, writable: true, value: function (mock) { if (mock === void 0) { mock = {}; } return (0, mockUtils_1.proxyLifetimes)(this, mock); } }); return ServiceCollection; }()); exports.ServiceCollection = ServiceCollection; var services = function (dependencies) { return new ServiceCollection(dependencies); }; exports.services = services;