@rnm/tscx
Version:
A tsc wrapper with many convenient features.
45 lines (43 loc) • 1.36 kB
text/typescript
import fs from "node:fs/promises";
import path from "node:path";
/**
* Copy non-ts/non-js files to outDir
* @param rootDirectory absolute path
* @param outDirectory absolute path
*/
export async function copyfiles(rootDirectory: string, outDirectory: string) {
const rootDir = path.resolve(rootDirectory);
const outDir = path.resolve(outDirectory);
const walkDir = async (
dir: string,
cb: (filepath: string) => Promise<void>,
) => {
await Promise.all(
(await fs.readdir(dir))
.map((filepath) => path.resolve(dir, filepath))
.map(async (filepath) => {
const stat = await fs.stat(filepath);
if (
stat.isFile() &&
!/\.(js|cjs|mjs|jsx|ts|cts|mts|tsx)$/.test(filepath)
) {
await cb(filepath);
}
if (
stat.isDirectory() &&
!filepath.startsWith(outDir) &&
!filepath.endsWith(`${path.sep}node_modules`) &&
!filepath.endsWith(`${path.sep}.git`)
) {
await walkDir(filepath, cb);
}
}),
);
};
await walkDir(rootDir, async (filepath) => {
const dest = filepath.replace(rootDir, outDir);
console.log("Copy", filepath, "=>", dest);
await fs.mkdir(path.dirname(dest), { recursive: true });
await fs.copyFile(filepath, dest);
});
}