UNPKG

rwsdk

Version:

Build fast, server-driven webapps on Cloudflare with SSR, RSC, and realtime

81 lines (80 loc) 3.01 kB
import ts from "typescript"; import path from "path"; import { glob } from "glob"; /** * Gets all source file paths by parsing tsconfig.json using TypeScript's compiler API. * Falls back to a glob pattern if tsconfig parsing fails. * * @param rootDir - The root directory to search from (defaults to current working directory) * @returns Promise<string[]> - Array of source file paths */ export async function getSrcPaths(rootDir = process.cwd()) { try { const configPath = ts.findConfigFile(rootDir, ts.sys.fileExists, "tsconfig.json"); if (configPath) { const configFile = ts.readConfigFile(configPath, ts.sys.readFile); if (!configFile.error) { // Parse tsconfig const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configPath)); if (parsed.fileNames && parsed.fileNames.length > 0) { return parsed.fileNames; } } } } catch (error) { console.warn("Failed to parse tsconfig.json, falling back to glob pattern:", error); } // Fallback to glob pattern try { const globPattern = path.join(rootDir, "src/**/*.{ts,mts,tsx,jsx,mjs,js}"); const files = await glob(globPattern, { ignore: ["**/node_modules/**", "**/dist/**", "**/*.d.ts"], absolute: true, nodir: true, }); return files; } catch (error) { console.error("Failed to get source paths with glob pattern:", error); return []; } } /** * Synchronous version of getSrcPaths * * @param rootDir - The root directory to search from (defaults to current working directory) * @returns string[] - Array of source file paths */ export function getSrcPathsSync(rootDir = process.cwd()) { try { // Try TypeScript compiler API approach first const configPath = ts.findConfigFile(rootDir, ts.sys.fileExists, "tsconfig.json"); if (configPath) { const configFile = ts.readConfigFile(configPath, ts.sys.readFile); if (!configFile.error) { // Parse tsconfig const parsed = ts.parseJsonConfigFileContent(configFile.config, ts.sys, path.dirname(configPath)); if (parsed.fileNames && parsed.fileNames.length > 0) { return parsed.fileNames; } } } } catch (error) { console.warn("Failed to parse tsconfig.json, falling back to glob pattern:", error); } // Fallback to glob pattern try { const globPattern = path.join(rootDir, "src/**/*.{ts,mts,tsx,jsx,mjs,js}"); const files = glob.sync(globPattern, { ignore: ["**/node_modules/**", "**/dist/**", "**/*.d.ts"], absolute: true, }); return files; } catch (error) { console.error("Failed to get source paths with glob pattern:", error); return []; } }