@openhps/core
Version:
Open Hybrid Positioning System - Core component
65 lines • 1.81 kB
JavaScript
import { __decorate, __metadata } from "tslib";
import { AsyncEventEmitter } from '../_internal/AsyncEventEmitter';
import { v4 as uuidv4 } from 'uuid';
import { SerializableMember, SerializableObject } from '../data/decorators';
/**
* Service is accessible by each {@link Node} inside the {@link Model}
*/
let Service = class Service extends AsyncEventEmitter {
constructor(options = {}) {
var _a;
super();
this._ready = false;
/**
* Dependencies that need to be resolved before the service is ready
*/
this.dependencies = [];
this.uid = (_a = options.uid) !== null && _a !== void 0 ? _a : this.constructor.name;
this.prependOnceListener('ready', () => {
this._ready = true;
});
}
/**
* Add a dependency to the service
* @param dependency Service dependency
* @returns {this} Service instance
*/
addDependency(dependency) {
this.dependencies.push(dependency);
return this;
}
generateUUID() {
return uuidv4();
}
setUID(uid) {
this.uid = uid;
return this;
}
isReady() {
return this._ready;
}
emit(name, ...args) {
return super.emit(name, ...args);
}
once(name, listener) {
if (name === 'ready' && this.isReady()) {
listener();
return this;
}
return super.once(name, listener);
}
/**
* Graph logger
* @param {string} level Logging level
* @param {string} message Message
* @param {any} data Data to include in log
*/
logger(level, message, data) {
if (this.model) {
this.model.logger(level, message, data);
}
}
};
__decorate([SerializableMember(), __metadata("design:type", String)], Service.prototype, "uid", void 0);
Service = __decorate([SerializableObject(), __metadata("design:paramtypes", [Object])], Service);
export { Service };