UNPKG

node-red-contrib-home-assistant-websocket

Version:
111 lines (110 loc) 5.63 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _Storage_instances, _Storage_adapter, _Storage_DB, _Storage_initialized, _Storage_path, _Storage_nodeSlug; Object.defineProperty(exports, "__esModule", { value: true }); exports.PACKAGE_NAME = void 0; const fs_1 = __importDefault(require("fs")); const lowdb_1 = __importDefault(require("lowdb")); const FileAsync_1 = __importDefault(require("lowdb/adapters/FileAsync")); const globals_1 = require("../../globals"); exports.PACKAGE_NAME = 'node-red-contrib-home-assistant-websocket'; const FILENAME = `${exports.PACKAGE_NAME}.json`; class Storage { constructor({ path, adapter, } = {}) { _Storage_instances.add(this); _Storage_adapter.set(this, void 0); _Storage_DB.set(this, void 0); _Storage_initialized.set(this, false); _Storage_path.set(this, void 0); __classPrivateFieldSet(this, _Storage_adapter, adapter, "f"); __classPrivateFieldSet(this, _Storage_path, path, "f"); } // check permissions off file path checkPermissions(path) { if (!path) return true; try { fs_1.default.accessSync(path, fs_1.default.constants.R_OK | fs_1.default.constants.W_OK); } catch (err) { throw new Error('Cannot read/write to storage file for Home Assistant nodes'); } return true; } async init() { var _a, _b; if (__classPrivateFieldGet(this, _Storage_initialized, "f")) { return; } __classPrivateFieldSet(this, _Storage_initialized, true, "f"); const path = (_a = __classPrivateFieldGet(this, _Storage_path, "f")) !== null && _a !== void 0 ? _a : globals_1.RED.settings.userDir; const dbLocation = `${path}/${FILENAME}`; if (this.checkPermissions(path)) { const adapter = (_b = __classPrivateFieldGet(this, _Storage_adapter, "f")) !== null && _b !== void 0 ? _b : new FileAsync_1.default(dbLocation); __classPrivateFieldSet(this, _Storage_DB, await (0, lowdb_1.default)(adapter), "f"); await __classPrivateFieldGet(this, _Storage_DB, "f").defaults({ nodes: {} }).write(); } } async saveNodeData(nodeId, key, value) { if (!__classPrivateFieldGet(this, _Storage_DB, "f")) { throw new Error('cannot save node data without a db'); } const path = `nodes.${__classPrivateFieldGet(this, _Storage_instances, "m", _Storage_nodeSlug).call(this, nodeId)}.${key}`; return __classPrivateFieldGet(this, _Storage_DB, "f").set(path, value).write(); } getNodeData(nodeId, key) { if (!__classPrivateFieldGet(this, _Storage_DB, "f")) { throw new Error('cannot get node data without a db'); } const nodes = __classPrivateFieldGet(this, _Storage_DB, "f").get('nodes').value(); const node = nodes[__classPrivateFieldGet(this, _Storage_instances, "m", _Storage_nodeSlug).call(this, nodeId)]; if (!node) { return; } if (!key) { return node; } return node[key]; } async removeNodeData(nodeId) { if (!__classPrivateFieldGet(this, _Storage_DB, "f")) { throw new Error('cannot remove node data without a db'); } await __classPrivateFieldGet(this, _Storage_DB, "f").unset(`nodes.${__classPrivateFieldGet(this, _Storage_instances, "m", _Storage_nodeSlug).call(this, nodeId)}`).write(); return true; } async saveIssues(ids) { if (!__classPrivateFieldGet(this, _Storage_DB, "f")) { throw new Error('cannot save node data without a db'); } const path = `issues.hidden`; return __classPrivateFieldGet(this, _Storage_DB, "f").set(path, ids).write(); } getIssues() { if (!__classPrivateFieldGet(this, _Storage_DB, "f")) { throw new Error('cannot get node data without a db'); } const issues = __classPrivateFieldGet(this, _Storage_DB, "f").get('issues.hidden').value(); if (!issues) { return []; } return issues; } } _Storage_adapter = new WeakMap(), _Storage_DB = new WeakMap(), _Storage_initialized = new WeakMap(), _Storage_path = new WeakMap(), _Storage_instances = new WeakSet(), _Storage_nodeSlug = function _Storage_nodeSlug(nodeId) { return nodeId.replace(/\./g, '_'); }; exports.default = new Storage();