import * as fs from 'fs'; import { join as pathJoin, relative as pathRelative } from 'path'; const crawlRec = (dirPath: string, filePaths: string[]) => { for (const basename of fs.readdirSync(dirPath)) { const fileOrDirPath = pathJoin(dirPath, basename); if (fs.lstatSync(fileOrDirPath).isDirectory()) { crawlRec(fileOrDirPath, filePaths); continue; } filePaths.push(fileOrDirPath); } }; /** List all files in a given directory return paths relative to the dir_path */ export function crawl(params: { dirPath: string; returnedPathsType: 'absolute' | 'relative to dirPath' }): string[] { const { dirPath, returnedPathsType } = params; const filePaths: string[] = []; crawlRec(dirPath, filePaths); switch (returnedPathsType) { case 'absolute': return filePaths; case 'relative to dirPath': return filePaths.map((filePath) => pathRelative(dirPath, filePath)); } }