helene
Version:
Real-time Web Apps for Node.js
52 lines • 2.07 kB
JavaScript
;
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