import { existsSync, readdirSync } from 'node:fs'; import { join } from 'node:path'; /** Recursively list files under `dir` whose name ends with one of `suffixes`. */ export function listFilesRecursive(dir: string, suffixes: readonly string[]): string[] { const out: string[] = []; for (const entry of readdirSync(dir, { withFileTypes: true })) { const full = join(dir, entry.name); if (entry.isDirectory()) { out.push(...listFilesRecursive(full, suffixes)); } else if (suffixes.some((s) => entry.name.endsWith(s))) { out.push(full); } } return out; } /** Same as `listFilesRecursive`, but returns `[]` instead of throwing when `dir` doesn't exist. */ export function safeListFilesRecursive(dir: string, suffixes: readonly string[]): string[] { if (!existsSync(dir)) return []; return listFilesRecursive(dir, suffixes); }