UNPKG

microsite

Version:
55 lines (54 loc) 1.66 kB
import { promises as fsp } from "fs"; import { dirname, join } from "path"; export const fileExists = async (path) => { try { return (await fsp.stat(path)).isFile(); } catch (e) { } return false; }; export const dirExists = async (path) => { try { return (await fsp.stat(path)).isDirectory(); } catch (e) { } return false; }; export const readDir = async (path) => { const ents = await fsp.readdir(path, { withFileTypes: true }); const results = await Promise.all(ents.map((ent) => ent.isDirectory() ? readDir(join(path, ent.name)) : join(path, ent.name))); return [].concat(...results); }; export const rmFile = async (path) => { return fsp.unlink(path); }; export const writeFile = async (path, content) => { await mkdir(dirname(path)); return fsp.writeFile(path, content); }; export const rmdir = (path) => fsp.rmdir(path, { recursive: true }); export const mkdir = (path) => fsp.mkdir(path, { recursive: true }); export const copyFile = async (src, dest, { transform } = {}) => { if (transform) { let content = await fsp.readFile(src).then((res) => res.toString()); content = await transform(content); await writeFile(dest, content); } else { await mkdir(dirname(dest)); await fsp.copyFile(src, dest); } }; export const copyDir = async (src, dest) => { try { if (!(await fsp.stat(src)).isDirectory()) throw new Error(); } catch (e) { return; } const files = await readDir(src); await Promise.all(files.map((file) => copyFile(file, file.replace(src, dest)))); };