UNPKG

sg-service-registry

Version:
67 lines (52 loc) 2.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var NULL_INSTANCE = {}; var Service = function () { function Service(name, factory) { _classCallCheck(this, Service); this.name = name; this.factory = factory; this.instance = NULL_INSTANCE; } _createClass(Service, [{ key: 'getInstance', value: function getInstance() { if (this.instance == NULL_INSTANCE) { this.instance = this.factory(); } return this.instance; } }]); return Service; }(); var ServiceRegistry = exports.ServiceRegistry = function () { function ServiceRegistry() { _classCallCheck(this, ServiceRegistry); this.servicesMap = new Map(); } _createClass(ServiceRegistry, [{ key: 'register', value: function register(name, factory) { var _this = this; this.servicesMap.set(name, new Service(name, function () { return factory(_this); })); } }, { key: 'get', value: function get(name) { if (this.servicesMap.has(name)) { return this.servicesMap.get(name).getInstance(); } else { var err = new Error(name + ' is not registered service'); err.serviceName = name; throw err; } } }]); return ServiceRegistry; }();