@openhps/core
Version:
Open Hybrid Positioning System - Core component
128 lines • 4.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MemoryDataService = void 0;
const DataServiceDriver_1 = require("./DataServiceDriver");
const MemoryQueryEvaluator_1 = require("./MemoryQueryEvaluator");
class MemoryDataService extends DataServiceDriver_1.DataServiceDriver {
constructor(dataType, options) {
super(dataType, options);
this._data = new Map();
}
findByUID(uid) {
return new Promise((resolve, reject) => {
if (this._data.has(uid)) {
resolve(this.options.deserialize(this._data.get(uid)));
}
else {
reject(`${this.dataType.name} with identifier #${uid} not found!`);
}
});
}
findOne(query, options = {}) {
return new Promise((resolve, reject) => {
this.findAll(query, {
limit: 1,
sort: options.sort,
})
.then((results) => {
if (results.length > 0) {
return resolve(results[0]);
}
else {
resolve(undefined);
}
})
.catch(reject);
});
}
findAll(query, options = {}) {
return new Promise((resolve) => {
options.limit = options.limit || this._data.size;
let data = [];
this._data.forEach((object) => {
if (MemoryQueryEvaluator_1.MemoryQueryEvaluator.evaluate(object, query)) {
data.push(object);
if (!options.sort && data.length >= options.limit) {
return;
}
}
});
if (options.sort) {
data = data
.sort((a, b) => options.sort
.map((s) => {
const res1 = MemoryQueryEvaluator_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? a : b, s[0])[1];
const res2 = MemoryQueryEvaluator_1.MemoryQueryEvaluator.getValueFromPath(s[1] > 0 ? b : a, s[0])[1];
if (typeof res1 === 'number') {
return res1 - res2;
}
else if (typeof res1 === 'string') {
return res1.localeCompare(res2);
}
else {
return 0;
}
})
.reduce((a, b) => a + b))
.slice(0, options.limit);
}
data = data.map(this.options.deserialize);
resolve(data);
});
}
insert(id, object) {
return new Promise((resolve) => {
if (id && object) {
this._data.set(id, this.options.serialize(object));
resolve(object);
}
else {
resolve(undefined);
}
});
}
delete(id) {
return new Promise((resolve, reject) => {
if (this._data.has(id)) {
this._data.delete(id);
resolve();
}
else {
reject(`Unable to delete! ${this.dataType.name} with identifier #${id} not found!`);
}
});
}
count(filter) {
return new Promise((resolve) => {
if (filter === undefined) {
resolve(this._data.size);
}
else {
let count = 0;
for (const [, value] of this._data) {
if (MemoryQueryEvaluator_1.MemoryQueryEvaluator.evaluate(value, filter)) {
count++;
}
}
resolve(count);
}
});
}
deleteAll(filter) {
return new Promise((resolve) => {
if (filter === undefined) {
this._data = new Map();
}
else {
for (const [key, value] of this._data) {
if (MemoryQueryEvaluator_1.MemoryQueryEvaluator.evaluate(value, filter)) {
this.delete(key);
}
}
}
resolve();
});
}
}
exports.MemoryDataService = MemoryDataService;
//# sourceMappingURL=MemoryDataService.js.map