UNPKG

helene

Version:
46 lines 1.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ensureFileDoesntExist = ensureFileDoesntExist; exports.ensureDatafileIntegrity = ensureDatafileIntegrity; exports.flushToStorage = flushToStorage; const fs_1 = __importDefault(require("fs")); async function ensureFileDoesntExist(filename) { if (fs_1.default.existsSync(filename)) await fs_1.default.promises.unlink(filename); } async function ensureDatafileIntegrity(filename) { const tempFilename = filename + '~'; // Write was successful if (fs_1.default.existsSync(filename)) { return null; } // New database if (!fs_1.default.existsSync(tempFilename)) { return await fs_1.default.promises.writeFile(filename, '', 'utf8'); } // Write failed, use old version await fs_1.default.promises.rename(tempFilename, filename); } async function flushToStorage(options) { let filename, flags; if (typeof options === 'string') { filename = options; flags = 'r+'; } else { filename = options.filename; flags = options.isDir ? 'r' : 'r+'; } // Windows can't fsync (FlushFileBuffers) directories. We can live with this as it cannot cause 100% dataloss // except in the very rare event of the first time database is loaded and a crash happens if (flags === 'r' && ['win32', 'win64'].includes(process.platform)) { return null; } const fd = fs_1.default.openSync(filename, flags); fs_1.default.fsyncSync(fd); fs_1.default.closeSync(fd); } //# sourceMappingURL=utils.js.map