UNPKG

@iotize/tap

Version:

IoTize Device client for Javascript

66 lines 4.24 kB
import { AbstractService } from './abstract-service'; /** * This class will be augmented when importing specific service * For example: * ```typescript * const container: ServiceContainer; * expect(container.interface).to.be.undefined; * import '@iotize/tap/service/interface'; * expect(container.interface).to.be.not.undefined; * * ``` */ export class ServiceContainer { constructor(serviceCallRunner) { this.serviceCallRunner = serviceCallRunner; } /** * List loaded services */ services() { return Object.values(this.servicesMap()); } servicesMap() { const services = {}; for (const key in this) { const hasDescriptor = Object.getOwnPropertyDescriptor(ServiceContainer.prototype, key); const value = this[key]; if (hasDescriptor === null || hasDescriptor === void 0 ? void 0 : hasDescriptor.enumerable) { if (value instanceof AbstractService) { services[key] = value; } } } return services; } /** * List all loaded resources */ resources() { return this.services().reduce((prev, service) => { prev.push(...Object.values(service.resources)); return prev; }, []); } } export function extendServiceContainer(attrName, serviceConstructor) { const hiddenAttrName = `__${attrName}__`; Object.defineProperty(ServiceContainer.prototype, hiddenAttrName, { enumerable: false, configurable: true, writable: true, value: undefined, }); return Object.defineProperty(ServiceContainer.prototype, attrName, { get() { const that = this; if (!that[hiddenAttrName]) { that[hiddenAttrName] = new serviceConstructor(this.serviceCallRunner); } return that[hiddenAttrName]; }, enumerable: true, configurable: true, }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1jb250YWluZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2UtY29udGFpbmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUlyRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUE0QixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFHLENBQUM7SUFFcEU7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxRQUFRLEdBQW9DLEVBQUUsQ0FBQztRQUNyRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUN0QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQ25ELGdCQUFnQixDQUFDLFNBQVMsRUFDMUIsR0FBRyxDQUNKLENBQUM7WUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsSUFBSSxhQUFhLGFBQWIsYUFBYSx1QkFBYixhQUFhLENBQUUsVUFBVSxFQUFFO2dCQUM3QixJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUU7b0JBQ3BDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7aUJBQ3ZCO2FBQ0Y7U0FDRjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNILFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQzNCLENBQUMsSUFBdUIsRUFBRSxPQUF3QixFQUFFLEVBQUU7WUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFFBQWdCLEVBQ2hCLGtCQUFtRTtJQUVuRSxNQUFNLGNBQWMsR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRTtRQUNoRSxVQUFVLEVBQUUsS0FBSztRQUNqQixZQUFZLEVBQUUsSUFBSTtRQUNsQixRQUFRLEVBQUUsSUFBSTtRQUNkLEtBQUssRUFBRSxTQUFTO0tBQ2pCLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFO1FBQ2pFLEdBQUc7WUFDRCxNQUFNLElBQUksR0FBRyxJQUFXLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDdkU7WUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsVUFBVSxFQUFFLElBQUk7UUFDaEIsWUFBWSxFQUFFLElBQUk7S0FDbkIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9