@thi.ng/file-io
Version:
Assorted file I/O utils (w/ logging support) for NodeJS/Bun
54 lines (53 loc) • 1.32 kB
JavaScript
import { rmSync, unlinkSync } from "node:fs";
import { unlink } from "node:fs/promises";
import { maskedPath } from "./mask.js";
const deleteFile = (path, logger, dryRun = false) => {
logger?.info(
`${dryRun ? "[dryrun] " : ""}deleting file:`,
maskedPath(path)
);
if (dryRun) return;
unlinkSync(path);
};
const deleteFileAsync = async (path, logger, dryRun = false) => {
logger?.info(
`${dryRun ? "[dryrun] " : ""}deleting file:`,
maskedPath(path)
);
if (dryRun) return;
return unlink(path);
};
const deleteFiles = (paths, logger, dryRun = false) => {
for (let path of paths) {
try {
deleteFile(path, logger, dryRun);
} catch (e) {
logger?.warn(
"error deleting file:",
maskedPath(e.message)
);
}
}
};
const deleteFilesAsync = async (paths, logger, dryRun = false) => {
const promises = [];
for (let path of paths) {
promises.push(deleteFileAsync(path, logger, dryRun));
}
await Promise.allSettled(promises);
};
const deleteDir = (path, logger, dryRun = false) => {
logger?.info(
`${dryRun ? "[dryrun] " : ""}deleting directory:`,
maskedPath(path)
);
if (dryRun) return;
rmSync(path, { recursive: true, force: true });
};
export {
deleteDir,
deleteFile,
deleteFileAsync,
deleteFiles,
deleteFilesAsync
};