UNPKG

@logtape/file

Version:

File sink and rotating file sink for LogTape

67 lines (65 loc) 1.54 kB
import { getBaseFileSink, getBaseRotatingFileSink } from "./filesink.base.js"; import fs from "node:fs"; import { promisify } from "node:util"; //#region filesink.node.ts /** * A Node.js-specific file sink driver. */ const nodeDriver = { openSync(path) { return fs.openSync(path, "a"); }, writeSync: fs.writeSync, writeManySync(fd, chunks) { if (chunks.length === 0) return; if (chunks.length === 1) { fs.writeSync(fd, chunks[0]); return; } fs.writevSync(fd, chunks); }, flushSync: fs.fsyncSync, closeSync: fs.closeSync, statSync: fs.statSync, renameSync: fs.renameSync }; /** * A Node.js-specific async file sink driver. * @since 1.0.0 */ const nodeAsyncDriver = { ...nodeDriver, async writeMany(fd, chunks) { if (chunks.length === 0) return; if (chunks.length === 1) { await promisify(fs.write)(fd, chunks[0]); return; } await promisify(fs.writev)(fd, chunks); }, flush: promisify(fs.fsync), close: promisify(fs.close) }; function getFileSink(path, options = {}) { if (options.nonBlocking) return getBaseFileSink(path, { ...options, ...nodeAsyncDriver }); return getBaseFileSink(path, { ...options, ...nodeDriver }); } function getRotatingFileSink(path, options = {}) { if (options.nonBlocking) return getBaseRotatingFileSink(path, { ...options, ...nodeAsyncDriver }); return getBaseRotatingFileSink(path, { ...options, ...nodeDriver }); } //#endregion export { getFileSink, getRotatingFileSink, nodeAsyncDriver, nodeDriver }; //# sourceMappingURL=filesink.node.js.map