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