UNPKG

web-atoms-core

Version:
63 lines 2.67 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "../core/types", "./TypeKey"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var types_1 = require("../core/types"); var TypeKey_1 = require("./TypeKey"); var Scope; (function (Scope) { Scope[Scope["Global"] = 1] = "Global"; Scope[Scope["Scoped"] = 2] = "Scoped"; Scope[Scope["Transient"] = 3] = "Transient"; })(Scope = exports.Scope || (exports.Scope = {})); var ServiceDescription = /** @class */ (function () { function ServiceDescription(id, scope, type, factory) { this.id = id; this.scope = scope; this.type = type; this.factory = factory; this.factory = this.factory || (function (sp) { return sp.create(type); }); } return ServiceDescription; }()); exports.ServiceDescription = ServiceDescription; var ServiceCollection = /** @class */ (function () { function ServiceCollection() { this.registrations = []; this.ids = 1; } ServiceCollection.prototype.register = function (type, factory, scope, id) { if (scope === void 0) { scope = Scope.Transient; } types_1.ArrayHelper.remove(this.registrations, function (r) { return id ? r.id === id : r.type === type; }); if (!id) { id = TypeKey_1.TypeKey.get(type) + this.ids; this.ids++; } var sd = new ServiceDescription(id, scope, type, factory); this.registrations.push(sd); return sd; }; ServiceCollection.prototype.registerScoped = function (type, factory, id) { return this.register(type, factory, Scope.Scoped, id); }; ServiceCollection.prototype.registerSingleton = function (type, factory, id) { return this.register(type, factory, Scope.Global, id); }; ServiceCollection.prototype.get = function (type) { return this.registrations.find(function (s) { return s.id === type || s.type === type; }); }; ServiceCollection.instance = new ServiceCollection(); return ServiceCollection; }()); exports.ServiceCollection = ServiceCollection; }); //# sourceMappingURL=ServiceCollection.js.map