UNPKG

helene

Version:
52 lines 2.07 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NodeStorage = void 0; /** * Way data is stored for this database * For a Node.js/Node Webkit database it's the file system * For a browser-side database it's localforage which chooses the best option depending on user browser (IndexedDB then WebSQL then localStorage) * * This version is the Node.js/Node Webkit version * It's essentially fs, mkdirp and crash safe write and read functions */ const fs_1 = __importDefault(require("fs")); const mkdirp_1 = require("mkdirp"); const path_1 = __importDefault(require("path")); const utils_1 = require("./utils"); class NodeStorage { async read(name) { await (0, mkdirp_1.mkdirp)(path_1.default.dirname(name)); await (0, utils_1.ensureDatafileIntegrity)(name); return await fs_1.default.promises.readFile(name, 'utf8'); } /** * Fully write or rewrite the datafile, immune to crashes during the write operation (data will not be lost) */ async write(name, data) { // eslint-disable-next-line @typescript-eslint/no-empty-function const tempFilename = name + '~'; await (0, utils_1.flushToStorage)({ filename: path_1.default.dirname(name), isDir: true, }); const exists = fs_1.default.existsSync(name); if (exists) { await (0, utils_1.flushToStorage)(name); } fs_1.default.writeFileSync(tempFilename, data); await (0, utils_1.flushToStorage)(tempFilename); await fs_1.default.promises.rename(tempFilename, name); await (0, utils_1.flushToStorage)({ filename: path_1.default.dirname(name), isDir: true, }); } async append(name, data) { await fs_1.default.promises.appendFile(name, data, 'utf8'); } } exports.NodeStorage = NodeStorage; //# sourceMappingURL=node-storage.js.map