UNPKG

@openhps/core

Version:

Open Hybrid Positioning System - Core component

134 lines 4.13 kB
import { __decorate, __metadata } from "tslib"; import { SerializableMember, SerializableObject, createChangeLog } from '../data/decorators'; import { DataServiceDriver } from './DataServiceDriver'; import { Service } from './Service'; /** * DataService * * ## Usage * * ### Finding a DataService * ```typescript * import { Node, DataFrame } from '@openhps/core'; * * export class CustomNode extends Node<DataFrame> { * // Data services can be found in any function inside a node * // that is added to a model * functionInsideNode(): void { * // Get a service by its type * let service = this.model.findDataService(DataObject); * let service = this.model.findDataServiceByName("DataObject"); * } * } * ``` */ let DataService = class DataService extends Service { constructor(dataServiceDriver) { super(); this.priority = -1; this.driver = dataServiceDriver; if (this.driver && this.driver.dataType) { this.uid = this.driver.dataType.name; } this.once('build', this._buildDriver.bind(this)); this.once('destroy', this._destroyDriver.bind(this)); } _buildDriver() { return new Promise((resolve, reject) => { if (this.driver) { this.driver.model = this.model; this.driver.emitAsync('build').then(() => resolve()).catch(reject); } else { resolve(); } }); } _destroyDriver() { return new Promise((resolve, reject) => { if (this.driver) { this.driver.emitAsync('destroy').then(() => resolve()).catch(reject); } else { resolve(); } }); } get dataType() { if (this.driver) { return this.driver.dataType; } return undefined; } get driverOptions() { if (this.driver) { return this.driver['options']; } return undefined; } /** * Set the priority of the data service * a higher number means a higher priority. * @param {number} value Priority value * @returns {DataService} data service instance */ setPriority(value) { this.priority = value; return this; } findByUID(uid) { return new Promise((resolve, reject) => { this.driver.findByUID(uid).then(object => { if (this.driver && this.driverOptions.keepChangelog) { resolve(typeof object === 'object' ? createChangeLog(object) : object); } else { resolve(object); } }).catch(reject); }); } findOne(query, options) { return new Promise((resolve, reject) => { this.driver.findOne(query, options).then(object => { if (this.driver && this.driverOptions.keepChangelog) { resolve(typeof object === 'object' ? createChangeLog(object) : object); } else { resolve(object); } }).catch(reject); }); } findAll(query, options) { return new Promise((resolve, reject) => { this.driver.findAll(query, options).then(objects => { if (this.driver && this.driverOptions.keepChangelog) { resolve(objects.map(o => typeof o === 'object' ? createChangeLog(o) : o)); } else { resolve(objects); } }).catch(reject); }); } insert(id, object) { return new Promise((resolve, reject) => { this.driver.insert(id, object).then(object => { if (this.driver && this.driverOptions.keepChangelog) { resolve(typeof object === 'object' ? createChangeLog(object) : object); } else { resolve(object); } }).catch(reject); }); } count(query) { return this.driver.count(query); } delete(id) { return this.driver.delete(id); } deleteAll(filter) { return this.driver.deleteAll(filter); } }; __decorate([SerializableMember(), __metadata("design:type", DataServiceDriver)], DataService.prototype, "driver", void 0); __decorate([SerializableMember(), __metadata("design:type", Object)], DataService.prototype, "priority", void 0); DataService = __decorate([SerializableObject(), __metadata("design:paramtypes", [DataServiceDriver])], DataService); export { DataService };