datanautics
Version:
**Datanautics** is a lightweight key-value storage system with support for nested property access and persistent dumps to disk.
69 lines • 2.39 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Datanautics = void 0;
const fs_1 = require("fs");
const property_accessor_1 = require("property-accessor");
const _const_1 = require("./constants");
class Datanautics {
options;
data;
constructor(options) {
this.options = { ..._const_1.defaultDatanauticsOptions, ...(options || {}) };
this.data = {};
if ((0, fs_1.existsSync)(this.options.dumpPath)) {
this.useDump();
}
(0, fs_1.watchFile)(this.options.dumpPath, () => {
this.useDump();
});
}
store() {
return this.createDump();
}
createDump() {
try {
const flat = property_accessor_1.PropertyAccessor.flat(this.data);
const data = [];
for (const key in flat) {
const value = property_accessor_1.PropertyAccessor.get(key, this.data);
if (value !== undefined) {
data.push(`${key} ${value.toString()}`);
}
}
(0, fs_1.writeFileSync)(this.options.dumpPath, data.join('\n'), 'utf8');
return true;
}
catch (e) {
if (this.options.verbose) {
this.options.logger.error(e);
}
return false;
}
}
useDump() {
const data = (0, fs_1.readFileSync)(this.options.dumpPath).toString('utf8');
const lines = data.split('\n');
for (const line of lines) {
const [k, v,] = line.split(' ');
const key = k.trim();
if (v !== undefined) {
let value = v.trim();
if (/^[+-]?\d+(\.\d+)?$/.test(value)) {
value = /^[+-]?\d+$/.test(value) ? parseInt(value, 10) : parseFloat(value);
}
else if (/^false|true$/.test(value)) {
value = /^true$/.test(value);
}
property_accessor_1.PropertyAccessor.set(key, value, this.data);
}
}
}
set(key, value) {
return property_accessor_1.PropertyAccessor.set(key, value, this.data) && this.createDump();
}
get(key) {
return property_accessor_1.PropertyAccessor.get(key, this.data);
}
}
exports.Datanautics = Datanautics;
//# sourceMappingURL=datanautics.js.map