@logtape/file
Version:
File sink and rotating file sink for LogTape
67 lines (65 loc) • 1.54 kB
JavaScript
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