UNPKG

@rnm/tscx

Version:

A tsc wrapper with many convenient features.

45 lines (43 loc) 1.36 kB
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); }); }