UNPKG

@triviality/core

Version:
107 lines 4.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ServiceFactory_1 = require("../ServiceFactory"); var ImmutableServiceReferenceList_1 = require("./ImmutableServiceReferenceList"); var AsyncServiceFunctionReferenceError_1 = require("./AsyncServiceFunctionReferenceError"); /** * Purpose is to hold information about a service function connection. * * TODO: Convert mayhem/inheritance, state machine classes. * The ideal world there is only 1 service factory reference for each service, now there are multiple. */ var BaseServiceFactoryReference = /** @class */ (function () { function BaseServiceFactoryReference(_a) { var factory = _a.factory, feature = _a.feature; /** * If the original service is invoked. */ this.serviceFactoryInvoked = false; /** * If the service factory created instance. */ this.serviceDefined = false; /** * The instance created by the service factory. */ this.service = undefined; this._configuration = null; ServiceFactory_1.assetServiceFactory(factory); this.factory = factory; this.feature = feature; this.dependencies = new ImmutableServiceReferenceList_1.ImmutableServiceReferenceList(); } Object.defineProperty(BaseServiceFactoryReference.prototype, "configuration", { get: function () { if (this._configuration === null) { throw new Error('Service reference not yet configured.'); } return this._configuration; }, enumerable: true, configurable: true }); BaseServiceFactoryReference.prototype.getUuid = function () { return this.configuration.uuid; }; BaseServiceFactoryReference.prototype.callServiceFactory = function (thisReference) { this.assertServiceFunctionNotYetInvoked(); this.serviceFactoryInvoked = true; try { this.service = this.factory.bind(thisReference)(); } catch (e) { if (e instanceof AsyncServiceFunctionReferenceError_1.AsyncServiceFunctionReferenceError) { this.serviceFactoryInvoked = false; } throw e; } this.serviceDefined = true; }; BaseServiceFactoryReference.prototype.getService = function () { this.assertHasServiceInstance(); return this.service; }; BaseServiceFactoryReference.prototype.setContainerConfiguration = function (configuration) { this.assertNotYetConfigured(); this._configuration = configuration; }; BaseServiceFactoryReference.prototype.getFactory = function () { return this.factory; }; BaseServiceFactoryReference.prototype.getFeature = function () { return this.feature; }; BaseServiceFactoryReference.prototype.getProxy = function () { return this.configuration.proxy; }; BaseServiceFactoryReference.prototype.hasServiceInstance = function () { return this.serviceDefined; }; BaseServiceFactoryReference.prototype.addDependency = function (dependency) { this.dependencies = this.dependencies.add(dependency); }; BaseServiceFactoryReference.prototype.getDependencies = function () { return this.dependencies; }; BaseServiceFactoryReference.prototype.label = function () { return "#" + this.getUuid() + " " + (this.feature.name || '?'); }; BaseServiceFactoryReference.prototype.assertServiceFunctionNotYetInvoked = function () { if (this.serviceFactoryInvoked) { throw new Error('Service factory is already invoked.'); } }; BaseServiceFactoryReference.prototype.assertNotYetConfigured = function () { if (this._configuration !== null) { throw new Error('Service reference already configured.'); } }; BaseServiceFactoryReference.prototype.assertHasServiceInstance = function () { if (!this.hasServiceInstance()) { throw new Error('No service instance'); } }; return BaseServiceFactoryReference; }()); exports.BaseServiceFactoryReference = BaseServiceFactoryReference; //# sourceMappingURL=BaseServiceFactoryReference.js.map