diff --git a/examples/react-server/src/features/utils/plugin.ts b/examples/react-server/src/features/utils/plugin.ts index 22bed0d4..1c7b00ad 100644 --- a/examples/react-server/src/features/utils/plugin.ts +++ b/examples/react-server/src/features/utils/plugin.ts @@ -36,10 +36,6 @@ export function vitePluginSilenceDirectiveBuildWarning(): Plugin { }; } -// -// plugin utils -// - export function createVirtualPlugin(name: string, load: Plugin["load"]) { name = "virtual:" + name; return { @@ -111,16 +107,26 @@ function replaceCode( // fs utils // -export async function traverseFiles( +export async function collectFiles(baseDir: string) { + const files: string[] = []; + await traverseFiles(baseDir, async (filepath, e) => { + if (e.isFile()) { + files.push(filepath); + } + return e.isDirectory(); + }); + return files; +} + +async function traverseFiles( dir: string, - callback: (filepath: string, e: fs.Dirent) => void, + onEntry: (filepath: string, e: fs.Dirent) => Promise, ) { const entries = await fs.promises.readdir(dir, { withFileTypes: true }); for (const e of entries) { const filepath = path.join(e.path, e.name); - callback(filepath, e); - if (e.isDirectory()) { - await traverseFiles(filepath, callback); + if (await onEntry(filepath, e)) { + await traverseFiles(filepath, onEntry); } } } diff --git a/examples/react-server/vite.config.ts b/examples/react-server/vite.config.ts index fd0cab14..dfb9e67a 100644 --- a/examples/react-server/vite.config.ts +++ b/examples/react-server/vite.config.ts @@ -10,9 +10,9 @@ import { __global } from "./src/global"; import react from "@vitejs/plugin-react"; import { vitePluginSsrMiddleware } from "../react-ssr/vite.config"; import { + collectFiles, createVirtualPlugin, parseExports, - traverseFiles, vitePluginSilenceDirectiveBuildWarning, } from "./src/features/utils/plugin"; import fs from "node:fs"; @@ -263,12 +263,7 @@ function vitePluginServerAction(): PluginOption { async function () { tinyassert(this.environment?.name === "react-server"); tinyassert(this.environment.mode === "build"); - const files: string[] = []; - await traverseFiles(path.resolve("./src"), (file, e) => { - if (e.isFile()) { - files.push(file); - } - }); + const files = await collectFiles(path.resolve("./src")); const ids: string[] = []; for (const file of files) { const code = await fs.promises.readFile(file, "utf-8");