UNPKG

@x5e/gink

Version:

an eventually consistent database

37 lines 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LockableLog = void 0; const utils_1 = require("./utils"); const builders_1 = require("./builders"); const LockableFile_1 = require("./LockableFile"); class LockableLog extends LockableFile_1.LockableFile { async writeMagicNumber() { (0, utils_1.ensure)(this.fileLocked); const size = await this.getFileLength(); if (size !== 0) throw new Error("file not empty!"); const logFragment = new builders_1.LogFileBuilder(); logFragment.setMagicNumber(1263421767); return await this.writeLogFragment(logFragment, true); } async writeLogFragment(fragment, sync) { (0, utils_1.ensure)(this.fileLocked); const bytes = fragment.serializeBinary(); await this.fileHandle.writeFile(bytes); if (sync) await this.fileHandle.sync(); return bytes.byteLength; } async getLogContents(start = 0, finish) { // I could imagine replacing this with a async iterator that only reads fragments of the // file, though that would only be worth the trouble if the file gets large enough that // the memory required to read the whole thing is an expensive resource. finish = finish !== null && finish !== void 0 ? finish : (await this.getFileLength()); const needToReed = finish - start; const uint8Array = new Uint8Array(needToReed); await this.fileHandle.read(uint8Array, 0, needToReed, start); return builders_1.LogFileBuilder.deserializeBinary(uint8Array); } } exports.LockableLog = LockableLog; //# sourceMappingURL=LockableLog.js.map