import path from "path"; import { getAsyncImport } from "./getAsyncImport.ts"; /** * Возвращает массив всех файлов из папки при помощи модуля `fs` * @param dir{String} путь к папке * @param getFilterFn{Function=} функция фильтрации по файлам * @returns {Promise} * @example * import { getFilesWithFS } from "@delement/ui/utils/node"; * * const tsFiles = await getFilesWithFS("./src", (file) => file.endsWith(".ts")); */ const getFilesWithFS = async ( dir: string = "", getFilterFn: ((file: string) => boolean) = (_file: string) => true ): Promise => { if (!dir) { throw new Error("[getFilesWithFS] Вirectory not found"); } const fs = await getAsyncImport("fs/promises") as typeof import("fs/promises"); async function* getFileFromDir(currentDir: string): AsyncGenerator { const dirs = await fs.readdir(currentDir, { withFileTypes: true }); for (const dirent of dirs) { const resolvedPath = path.resolve(currentDir, dirent.name); if (dirent.isDirectory()) { yield* getFileFromDir(resolvedPath); } else { yield resolvedPath; } } } const files: string[] = []; for await (const file of getFileFromDir(dir)) { if (getFilterFn(file)) { files.push(file); } } return files; }; export { getFilesWithFS };