@iotize/tap
Version:
IoTize Device client for Javascript
66 lines • 4.24 kB
JavaScript
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