@openhps/core
Version:
Open Hybrid Positioning System - Core component
134 lines • 4.13 kB
JavaScript
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 };