vite-plugin-react-server 0.3.15 → 0.3.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/bin/patch.mjs +12 -19
  2. package/dist/package.json +8 -8
  3. package/dist/plugin/collect-css-manifest.d.ts.map +1 -1
  4. package/dist/plugin/collect-css-manifest.js +4 -4
  5. package/dist/plugin/collect-css-manifest.js.map +1 -1
  6. package/dist/plugin/config/defaults.d.ts +3 -3
  7. package/dist/plugin/config/defaults.js +3 -3
  8. package/dist/plugin/config/defaults.js.map +1 -1
  9. package/dist/plugin/config/resolveUserConfig.js +2 -2
  10. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  11. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  12. package/dist/plugin/react-client/plugin.js +16 -0
  13. package/dist/plugin/react-client/plugin.js.map +1 -1
  14. package/dist/plugin/react-server/createRscStream.d.ts.map +1 -1
  15. package/dist/plugin/react-server/createRscStream.js +5 -1
  16. package/dist/plugin/react-server/createRscStream.js.map +1 -1
  17. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  18. package/dist/plugin/react-server/plugin.js +11 -19
  19. package/dist/plugin/react-server/plugin.js.map +1 -1
  20. package/dist/plugin/resolveProps.d.ts.map +1 -1
  21. package/dist/plugin/resolveProps.js +1 -0
  22. package/dist/plugin/resolveProps.js.map +1 -1
  23. package/dist/plugin/worker/createWorker.js +2 -2
  24. package/dist/plugin/worker/createWorker.js.map +1 -1
  25. package/dist/plugin/worker/html/html-worker.production.js +5 -0
  26. package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
  27. package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
  28. package/dist/plugin/worker/html/messageHandler.js.map +1 -1
  29. package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
  30. package/dist/plugin/worker/html/renderPages.js +2 -2
  31. package/dist/plugin/worker/html/renderPages.js.map +1 -1
  32. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  33. package/dist/plugin/worker/rsc/messageHandler.js +3 -4
  34. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/package.json +8 -8
  37. package/plugin/collect-css-manifest.ts +5 -6
  38. package/plugin/config/defaults.ts +3 -3
  39. package/plugin/config/resolveUserConfig.ts +2 -2
  40. package/plugin/react-client/plugin.ts +17 -0
  41. package/plugin/react-server/createRscStream.ts +5 -1
  42. package/plugin/react-server/plugin.ts +11 -21
  43. package/plugin/resolveProps.ts +1 -0
  44. package/plugin/worker/createWorker.ts +1 -1
  45. package/plugin/worker/html/html-worker.production.tsx +5 -0
  46. package/plugin/worker/html/messageHandler.ts +0 -2
  47. package/plugin/worker/html/renderPages.ts +2 -3
  48. package/plugin/worker/rsc/messageHandler.tsx +6 -11
  49. package/scripts/check-react-version.mjs +8 -26
  50. package/scripts/react+0.0.0-experimental-eda36a1c-20250228.patch +57 -0
  51. package/scripts/react-dom+0.0.0-experimental-eda36a1c-20250228.patch +552 -0
  52. package/scripts/{react-server-dom-esm+0.0.0-experimental-b3a95caf-20250113.patch → react-server-dom-esm+0.0.0-experimental-eda36a1c-20250228.patch} +103 -82
  53. package/tsconfig.json +1 -1
  54. package/dist/plugin/server.d.ts +0 -2
  55. package/dist/plugin/server.d.ts.map +0 -1
  56. package/dist/plugin/server.js +0 -1
  57. package/plugin/server.tsx +0 -0
  58. package/scripts/react+0.0.0-experimental-b3a95caf-20250113.patch +0 -264
  59. package/scripts/react-dom+0.0.0-experimental-b3a95caf-20250113.patch +0 -39796
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-server/plugin.ts"],"sourcesContent":["import { join, resolve, dirname } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { Worker } from \"node:worker_threads\";\nimport React from \"react\";\nimport {\n createLogger,\n type ResolvedConfig,\n type UserConfig,\n type ViteDevServer,\n type Manifest,\n build,\n} from \"vite\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { getPluginRoot } from \"../config/getPaths.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\nimport { createBuildLoader } from \"../loader/createBuildLoader.js\";\nimport type {\n BuildTiming,\n CheckFilesExistReturn,\n ReactStreamPluginMeta,\n ResolvedUserConfig,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { renderPages } from \"../worker/html/renderPages.js\";\nimport { createHandler } from \"./createHandler.js\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport type { ServerResponse } from \"node:http\";\nimport { collectManifestCss } from \"../collect-css-manifest.js\";\n\nlet resolvedConfig: ResolvedConfig | null = null;\nlet serverManifestPath: string | null = null;\nlet clientManifestPath: string | null = null;\nlet outpuptBundle: any;\nlet outputOptions: any;\nlet loader: ((id: string) => Promise<Record<string, any>>) | null = null;\nlet worker: Worker;\nexport function reactServerPlugin(\n options: StreamPluginOptions\n): import(\"vite\").Plugin<{\n meta: ReactStreamPluginMeta;\n addCssFile: (path: string) => void;\n}> {\n const timing: BuildTiming = {\n start: performance.now(),\n };\n\n let files: CheckFilesExistReturn;\n // let env: Awaited<ReturnType<typeof getEnv>>;\n let cssModules = new Set<string>();\n let clientComponents = new Map<string, string>();\n // let define: Record<string, string>;\n let buildCssFiles = new Set<string>();\n let root: string = process.cwd();\n let userConfig: ResolvedUserConfig;\n let userOptions: ResolvedUserOptions;\n let moduleGraph: Record<\n string,\n {\n file: string;\n src: string;\n name: string;\n isEntry: boolean;\n imports: string[];\n dynamicImports: string[];\n }\n > = {};\n let serverManifest: Manifest = {};\n\n interface BuildStats {\n htmlFiles: number;\n clientComponents: number;\n cssFiles: number;\n totalRoutes: number;\n timing: {\n config: number;\n build: number;\n render: number;\n total: number;\n };\n }\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n if (\n userOptions.projectRoot != root &&\n typeof userOptions.projectRoot === \"string\" &&\n userOptions.projectRoot !== process.cwd() &&\n userOptions.projectRoot !== \"\"\n ) {\n root = userOptions.projectRoot;\n console.log(\n \"[vite:plugin-react-server] Root dir changed in plugin\",\n userOptions.projectRoot,\n root\n );\n }\n return {\n name: \"vite:react-stream-server\",\n enforce: \"post\",\n api: {\n meta: { timing },\n addCssFile(path: string) {\n buildCssFiles.add(path);\n },\n },\n configResolved(_resolvedConfig) {\n resolvedConfig = _resolvedConfig;\n\n serverManifestPath = join(\n userOptions.build.outDir,\n userOptions.build.server,\n \".vite/manifest.json\"\n );\n clientManifestPath = join(\n resolvedConfig.build.outDir,\n userOptions.build.client,\n \".vite/manifest.json\"\n );\n timing.configResolved = performance.now();\n\n // Verify transformer runs first, preserver runs last\n const plugins = resolvedConfig.plugins;\n const transformerIndex = plugins.findIndex(\n (p) => p.name === \"vite:react-transform\"\n );\n const preserverIndex = plugins.findIndex(\n (p) => p.name === \"vite-plugin-react-server:preserve-directives\"\n );\n\n if (transformerIndex === -1) {\n throw new Error(\"Transformer plugin not installed\");\n }\n if (preserverIndex < transformerIndex) {\n throw new Error(\n \"Transformer plugin isn't installed or isn't running before preserver\"\n );\n }\n },\n async configurePreviewServer(server) {},\n async configureServer(server: ViteDevServer) {\n if (typeof loader !== \"function\") {\n loader = server.ssrLoadModule;\n }\n if (\n server.config.root !== root &&\n typeof server.config.root === \"string\" &&\n server.config.root !== process.cwd() &&\n server.config.root !== \"\"\n ) {\n console.log(\n \"[vite:plugin-react-server] Root dir changed in configureServer hook\",\n server.config.root,\n root\n );\n root = server.config.root;\n }\n\n const activeStreams = new Set<ServerResponse>();\n\n // Handle Vite server restarts\n server.ws.on(\"restart\", (path) => {\n console.log(\n \"[vite-plugin-react-server] 🔧 Plugin changed, preparing for restart:\",\n path\n );\n\n // Close streams with restart message\n for (const res of activeStreams) {\n res.writeHead(503, {\n \"Content-Type\": \"text/x-component\",\n \"Retry-After\": \"1\",\n });\n res.end('{\"error\":\"Server restarting...\"}');\n }\n activeStreams.clear();\n });\n\n // server.ws.on(\"connection\", (_socket, _req) => {\n // console.log(\"[vite-plugin-react-server] hooking up ws connection\");\n // });\n\n // server.ws.on(\"listening\", () => {\n // console.log(\"[vite-plugin-react-server] hooking up ws listening\");\n // });\n\n server.middlewares.use(async (req, res, next) => {\n if (req.headers.accept !== \"text/x-component\") return next();\n if (typeof loader !== \"function\") {\n loader = server.ssrLoadModule;\n }\n try {\n const handler = await createHandler(\n req.url ?? \"\",\n {\n ...userOptions,\n // we'll leave the Html generation for later\n Html: React.Fragment,\n projectRoot: root,\n },\n {\n cssFiles: [],\n logger: createLogger(),\n loader,\n moduleGraph: server.moduleGraph,\n }\n );\n if (handler.type === \"success\") {\n handler.stream?.pipe(res);\n }\n activeStreams.add(res);\n } finally {\n res.on(\"close\", () => {\n activeStreams.delete(res);\n });\n }\n });\n },\n async config(config, configEnv): Promise<UserConfig> {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n console.log(\n \"[vite:plugin-react-server] Root dir changed in config hook\",\n config.root,\n root\n );\n root = config.root;\n }\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n\n files = await checkFilesExist(resolvedPages.pages, userOptions, root);\n\n const resolvedConfig = resolveUserConfig({\n isClient: false,\n config,\n configEnv,\n userOptions,\n files,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return resolvedConfig.userConfig;\n },\n async buildStart() {\n if (!timing.buildStart) {\n timing.buildStart = performance.now();\n } else {\n console.log(\"Build already started\");\n }\n },\n async closeBundle() {\n if (!userConfig || resolvedConfig?.command !== \"build\") return;\n try {\n timing.renderStart = performance.now();\n\n // Get the client manifest\n const clientManifestResult = tryManifest({\n root: root,\n outDir: join(userOptions.build.outDir, userOptions.build.client),\n ssrManifest: false,\n });\n\n if (clientManifestResult.type === \"error\") {\n throw clientManifestResult.error;\n }\n\n const clientManifest = clientManifestResult.manifest;\n\n // Initialize worker\n const htmlWorkerPath = join(\n getPluginRoot(),\n DEFAULT_CONFIG.HTML_WORKER_PATH\n );\n\n worker = await createWorker({\n projectRoot: root,\n workerPath: htmlWorkerPath,\n condition: \"react-server\",\n reverseCondition: true,\n mode: (resolvedConfig?.mode ?? \"production\") as\n | \"production\"\n | \"development\",\n nodeOptions: \"--conditions=react-client\",\n });\n\n // Create the loader\n if (typeof loader !== \"function\") {\n if (!Object.keys(serverManifest).length) {\n console.warn(\n \"[vite-plugin-react-server] No server manifest found, the plugin will try to use the plugin context - it may differ from vite's manifest.\"\n );\n serverManifest = getBundleManifest({\n pluginContext: this,\n bundle: outpuptBundle,\n moduleBase: userOptions.moduleBase,\n preserveModulesRoot: userOptions.build.preserveModulesRoot,\n });\n if (!Object.keys(serverManifest).length) {\n console.warn(\n \"[vite-plugin-react-server] That didn't work, retrying to read manifest.\"\n );\n const resolvedServerManifest = tryManifest({\n root: root,\n outDir: join(\n userOptions.build.outDir,\n userOptions.build.server\n ),\n ssrManifest: false,\n });\n if (resolvedServerManifest.type === \"error\") {\n // dont build the static files without a server manifest\n console.error(\n \"[vite-plugin-react-server] Failed to read manifest, aborting build.\"\n );\n return;\n }\n serverManifest = resolvedServerManifest.manifest;\n }\n }\n loader = createBuildLoader({\n root: root,\n userConfig,\n userOptions,\n pluginContext: this,\n serverManifest,\n clientManifest,\n });\n }\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n\n const onCssFile = async (path: string, parentUrl: string) => {\n if (buildCssFiles && path.endsWith(\".css\")) {\n buildCssFiles.add(path);\n if (parentUrl.endsWith(userOptions.build.client)) {\n // copy the file to the client build dir\n const serverPath = join(\n userOptions.build.outDir,\n userOptions.build.server,\n path\n );\n await writeFile(\n serverPath,\n await readFile(\n join(\n root,\n userOptions.build.outDir,\n userOptions.build.client,\n path\n )\n )\n );\n } else {\n // copy the file to the client build dir, assume it's in server build dir\n const clientPath = join(\n userOptions.build.outDir,\n userOptions.build.client,\n path\n );\n await mkdir(dirname(clientPath), { recursive: true });\n await writeFile(\n clientPath,\n await readFile(\n join(\n root,\n userOptions.build.outDir,\n userOptions.build.server,\n path\n )\n )\n );\n }\n }\n };\n\n const { failedRoutes, completedRoutes } = await renderPages(\n this,\n resolvedPages.pages,\n files,\n {\n pipableStreamOptions: {\n bootstrapModules: clientManifest[\"index.html\"]?.file\n ? [clientManifest[\"index.html\"].file]\n : [],\n },\n moduleBasePath: \"\",\n moduleBaseURL: \"\",\n clientCss: clientManifest[\"index.html\"]?.css\n ? clientManifest[\"index.html\"].css\n : [],\n userConfig,\n pluginOptions: userOptions,\n worker: worker,\n clientManifest: clientManifest,\n serverManifest: serverManifest,\n loader,\n onCssFile: onCssFile,\n }\n );\n\n if (failedRoutes.size) {\n console.error(\n \"[vite-plugin-react-server] Failed to render routes:\",\n failedRoutes\n );\n }\n if (worker) await worker.terminate();\n\n timing.renderEnd = performance.now();\n timing.total = (timing.renderEnd - timing.start) / 1000;\n\n // Update stats to include CSS and client components\n const stats: BuildStats = {\n htmlFiles: userOptions.build.pages.length,\n clientComponents: Object.keys(clientManifest).filter(\n userOptions.autoDiscover.clientComponents\n ).length,\n cssFiles: Object.keys(clientManifest)\n .flatMap(userOptions.autoDiscover.cssPattern)\n .filter(Boolean).length,\n totalRoutes: userOptions.build.pages.length,\n timing: {\n config: ((timing.configResolved ?? 0) - timing.start) / 1000,\n build:\n ((timing.buildStart ?? 0) - (timing.configResolved ?? 0)) / 1000,\n render:\n ((timing.renderEnd ?? 0) - (timing.renderStart ?? 0)) / 1000,\n total: (timing.renderEnd ?? 0 - timing.start) / 1000,\n },\n };\n\n // Format duration helper\n const formatDuration = (seconds: number) => {\n if (seconds < 0.001) {\n return `${(seconds * 1000000).toFixed(0)}μs`;\n }\n if (seconds < 1) {\n return `${(seconds * 1000).toFixed(0)}ms`;\n }\n return `${seconds.toFixed(2)}s`;\n };\n\n console.log(\"\\n[vite-plugin-react-server] Build Summary:\");\n console.log(\"─\".repeat(50));\n console.log(`�� Generated ${stats.htmlFiles} HTML files`);\n console.log(`🎯 Processed ${stats.clientComponents} client components`);\n console.log(`🎨 Included ${stats.cssFiles} CSS files`);\n console.log(`🛣️ Total routes: ${stats.totalRoutes}`);\n console.log(\"─\".repeat(50));\n console.log(\"⏱️ Timing:\");\n console.log(` Config: ${formatDuration(stats.timing.config)}`);\n console.log(` Build: ${formatDuration(stats.timing.build)}`);\n console.log(` Render: ${formatDuration(stats.timing.render)}`);\n console.log(\" \".repeat(12));\n console.log(` Total: ${formatDuration(stats.timing.total)}`);\n console.log(\"─\".repeat(50));\n\n // Ensure worker is terminated\n if (worker) {\n await worker.terminate();\n worker = null as any;\n }\n } catch (error) {\n console.error(\"[vite-plugin-react-server] Build failed:\", error);\n // Make sure to terminate worker even on error\n if (worker) await worker.terminate();\n worker = null as any;\n throw error;\n }\n },\n async buildEnd(error) {\n if (error) {\n console.error(\"[vite-plugin-react-server] Build error:\", error);\n return;\n }\n },\n handleHotUpdate({ file }) {\n if (file.endsWith(\".css\")) {\n cssModules.add(file);\n }\n },\n async generateBundle(options, bundle) {\n if (!resolvedConfig) {\n throw new Error(\"Resolved config not found\");\n }\n outpuptBundle = bundle;\n outputOptions = options;\n // Create manifest entries for each chunk\n serverManifest = getBundleManifest({\n pluginContext: this,\n bundle,\n moduleBase: userOptions.moduleBase,\n preserveModulesRoot: userOptions.build.preserveModulesRoot,\n });\n if (serverManifestPath) {\n await mkdir(dirname(serverManifestPath), { recursive: true });\n await writeFile(\n serverManifestPath,\n JSON.stringify(serverManifest, null, 2)\n );\n }\n },\n };\n}\n"],"names":["React","resolvedConfig","options"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/react-server/plugin.ts"],"sourcesContent":["import { join, resolve, dirname } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport { Worker } from \"node:worker_threads\";\nimport React from \"react\";\nimport {\n createLogger,\n type ResolvedConfig,\n type UserConfig,\n type ViteDevServer,\n type Manifest,\n build,\n} from \"vite\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { getPluginRoot } from \"../config/getPaths.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\nimport { createBuildLoader } from \"../loader/createBuildLoader.js\";\nimport type {\n BuildTiming,\n CheckFilesExistReturn,\n ReactStreamPluginMeta,\n ResolvedUserConfig,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { renderPages } from \"../worker/html/renderPages.js\";\nimport { createHandler } from \"./createHandler.js\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport type { ServerResponse } from \"node:http\";\nimport { collectManifestCss } from \"../collect-css-manifest.js\";\nimport { cssFiles } from \"../worker/rsc/state.js\";\n\nlet resolvedConfig: ResolvedConfig | null = null;\nlet serverManifestPath: string | null = null;\nlet clientManifestPath: string | null = null;\nlet outpuptBundle: any;\nlet outputOptions: any;\nlet loader: ((id: string) => Promise<Record<string, any>>) | null = null;\nlet worker: Worker;\nexport function reactServerPlugin(\n options: StreamPluginOptions\n): import(\"vite\").Plugin<{\n meta: ReactStreamPluginMeta;\n addCssFile: (path: string) => void;\n}> {\n const timing: BuildTiming = {\n start: performance.now(),\n };\n\n let files: CheckFilesExistReturn;\n // let env: Awaited<ReturnType<typeof getEnv>>;\n let cssModules = new Set<string>();\n let clientComponents = new Map<string, string>();\n // let define: Record<string, string>;\n let buildCssFiles = new Set<string>();\n let root: string = process.cwd();\n let userConfig: ResolvedUserConfig;\n let userOptions: ResolvedUserOptions;\n let moduleGraph: Record<\n string,\n {\n file: string;\n src: string;\n name: string;\n isEntry: boolean;\n imports: string[];\n dynamicImports: string[];\n }\n > = {};\n let serverManifest: Manifest = {};\n\n interface BuildStats {\n htmlFiles: number;\n clientComponents: number;\n cssFiles: number;\n totalRoutes: number;\n timing: {\n config: number;\n build: number;\n render: number;\n total: number;\n };\n }\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n if (\n userOptions.projectRoot != root &&\n typeof userOptions.projectRoot === \"string\" &&\n userOptions.projectRoot !== process.cwd() &&\n userOptions.projectRoot !== \"\"\n ) {\n root = userOptions.projectRoot;\n console.log(\n \"[vite:plugin-react-server] Root dir changed in plugin\",\n userOptions.projectRoot,\n root\n );\n }\n return {\n name: \"vite:react-stream-server\",\n enforce: \"post\",\n api: {\n meta: { timing },\n addCssFile(path: string) {\n buildCssFiles.add(path);\n },\n },\n configResolved(_resolvedConfig) {\n resolvedConfig = _resolvedConfig;\n\n serverManifestPath = join(\n userOptions.build.outDir,\n userOptions.build.server,\n \".vite/manifest.json\"\n );\n clientManifestPath = join(\n resolvedConfig.build.outDir,\n userOptions.build.client,\n \".vite/manifest.json\"\n );\n timing.configResolved = performance.now();\n\n // Verify transformer runs first, preserver runs last\n const plugins = resolvedConfig.plugins;\n const transformerIndex = plugins.findIndex(\n (p) => p.name === \"vite:react-transform\"\n );\n const preserverIndex = plugins.findIndex(\n (p) => p.name === \"vite-plugin-react-server:preserve-directives\"\n );\n\n if (transformerIndex === -1) {\n throw new Error(\"Transformer plugin not installed\");\n }\n if (preserverIndex < transformerIndex) {\n throw new Error(\n \"Transformer plugin isn't installed or isn't running before preserver\"\n );\n }\n },\n async configurePreviewServer(server) {},\n async configureServer(server: ViteDevServer) {\n if (typeof loader !== \"function\") {\n loader = server.ssrLoadModule;\n }\n if (\n server.config.root !== root &&\n typeof server.config.root === \"string\" &&\n server.config.root !== process.cwd() &&\n server.config.root !== \"\"\n ) {\n console.log(\n \"[vite:plugin-react-server] Root dir changed in configureServer hook\",\n server.config.root,\n root\n );\n root = server.config.root;\n }\n\n const activeStreams = new Set<ServerResponse>();\n\n // Handle Vite server restarts\n server.ws.on(\"restart\", (path) => {\n console.log(\n \"[vite-plugin-react-server] 🔧 Plugin changed, preparing for restart:\",\n path\n );\n\n // Close streams with restart message\n for (const res of activeStreams) {\n res.writeHead(503, {\n \"Content-Type\": \"text/x-component\",\n \"Retry-After\": \"1\",\n });\n res.end('{\"error\":\"Server restarting...\"}');\n }\n activeStreams.clear();\n });\n\n // server.ws.on(\"connection\", (_socket, _req) => {\n // console.log(\"[vite-plugin-react-server] hooking up ws connection\");\n // });\n\n // server.ws.on(\"listening\", () => {\n // console.log(\"[vite-plugin-react-server] hooking up ws listening\");\n // });\n\n server.middlewares.use(async (req, res, next) => {\n if (req.headers.accept !== \"text/x-component\") return next();\n if (typeof loader !== \"function\") {\n loader = server.ssrLoadModule;\n }\n try {\n const handler = await createHandler(\n req.url ?? \"\",\n {\n ...userOptions,\n // we'll leave the Html generation for later\n Html: React.Fragment,\n projectRoot: root,\n },\n {\n cssFiles: [],\n logger: createLogger(),\n loader,\n moduleGraph: server.moduleGraph,\n }\n );\n if (handler.type === \"success\") {\n handler.stream?.pipe(res);\n }\n activeStreams.add(res);\n } finally {\n res.on(\"close\", () => {\n activeStreams.delete(res);\n });\n }\n });\n },\n async config(config, configEnv): Promise<UserConfig> {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n console.log(\n \"[vite:plugin-react-server] Root dir changed in config hook\",\n config.root,\n root\n );\n root = config.root;\n }\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n\n files = await checkFilesExist(resolvedPages.pages, userOptions, root);\n\n const resolvedConfig = resolveUserConfig({\n isClient: false,\n config,\n configEnv,\n userOptions,\n files,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return resolvedConfig.userConfig;\n },\n async buildStart() {\n if (!timing.buildStart) {\n timing.buildStart = performance.now();\n } else {\n console.log(\"Build already started\");\n }\n },\n async closeBundle() {\n if (!userConfig || resolvedConfig?.command !== \"build\") return;\n try {\n timing.renderStart = performance.now();\n\n // Get the client manifest\n const clientManifestResult = tryManifest({\n root: root,\n outDir: join(userOptions.build.outDir, userOptions.build.client),\n ssrManifest: false,\n });\n\n if (clientManifestResult.type === \"error\") {\n throw clientManifestResult.error;\n }\n\n const clientManifest = clientManifestResult.manifest;\n\n\n worker = await createWorker({\n projectRoot: root,\n workerPath: userOptions.htmlWorkerPath,\n condition: 'react-server',\n reverseCondition: true,\n mode: (resolvedConfig?.mode ?? \"production\") as\n | \"production\"\n | \"development\",\n nodeOptions: \"--conditions=react-client\",\n });\n\n // Create the loader\n if (typeof loader !== \"function\") {\n if (!Object.keys(serverManifest).length) {\n console.warn(\n \"[vite-plugin-react-server] No server manifest found, the plugin will try to use the plugin context - it may differ from vite's manifest.\"\n );\n serverManifest = getBundleManifest({\n pluginContext: this,\n bundle: outpuptBundle,\n moduleBase: userOptions.moduleBase,\n preserveModulesRoot: userOptions.build.preserveModulesRoot,\n });\n if (!Object.keys(serverManifest).length) {\n console.warn(\n \"[vite-plugin-react-server] That didn't work, retrying to read manifest.\"\n );\n const resolvedServerManifest = tryManifest({\n root: root,\n outDir: join(\n userOptions.build.outDir,\n userOptions.build.server\n ),\n ssrManifest: false,\n });\n if (resolvedServerManifest.type === \"error\") {\n // dont build the static files without a server manifest\n console.error(\n \"[vite-plugin-react-server] Failed to read manifest, aborting build.\"\n );\n return;\n }\n serverManifest = resolvedServerManifest.manifest;\n }\n }\n loader = createBuildLoader({\n root: root,\n userConfig,\n userOptions,\n pluginContext: this,\n serverManifest,\n clientManifest,\n });\n }\n const resolvedPages = await resolvePages(userOptions.build.pages);\n if (resolvedPages.type === \"error\") {\n throw resolvedPages.error;\n }\n\n const onCssFile = async (path: string, parentUrl: string) => {\n if (buildCssFiles && path.endsWith(\".css\")) {\n buildCssFiles.add(path);\n if (parentUrl.endsWith(userOptions.build.client)) {\n // copy the file to the client build dir\n const serverPath = join(\n userOptions.build.outDir,\n userOptions.build.server,\n path\n );\n await writeFile(\n serverPath,\n await readFile(\n join(\n root,\n userOptions.build.outDir,\n userOptions.build.client,\n path\n )\n )\n );\n } else {\n // copy the file to the client build dir, assume it's in server build dir\n const clientPath = join(\n userOptions.build.outDir,\n userOptions.build.client,\n path\n );\n await mkdir(dirname(clientPath), { recursive: true });\n await writeFile(\n clientPath,\n await readFile(\n join(\n root,\n userOptions.build.outDir,\n userOptions.build.server,\n path\n )\n )\n );\n }\n }\n };\n\n const { failedRoutes, completedRoutes } = await renderPages(\n this,\n resolvedPages.pages,\n files,\n {\n pipableStreamOptions: {\n bootstrapModules: clientManifest[\"index.html\"]?.file\n ? [clientManifest[\"index.html\"].file.startsWith('/') ? clientManifest[\"index.html\"].file : '/' + clientManifest[\"index.html\"].file]\n : [],\n },\n moduleBasePath: \"\",\n moduleBaseURL: \"\",\n clientCss: clientManifest[\"index.html\"]?.css\n ? clientManifest[\"index.html\"].css.map(css => css.startsWith('/') ? css : '/' + css)\n : [],\n userConfig,\n pluginOptions: userOptions,\n worker: worker,\n clientManifest: clientManifest,\n serverManifest: serverManifest,\n loader,\n onCssFile: onCssFile,\n }\n );\n\n if (failedRoutes.size) {\n console.error(\n \"[vite-plugin-react-server] Failed to render routes:\",\n failedRoutes\n );\n }\n if (worker) await worker.terminate();\n\n timing.renderEnd = performance.now();\n timing.total = (timing.renderEnd - timing.start) / 1000;\n\n // Update stats to include CSS and client components\n const stats: BuildStats = {\n htmlFiles: files.urlMap.size,\n clientComponents: clientComponents.size,\n cssFiles: cssFiles.size,\n totalRoutes: files.urlMap.size,\n timing: {\n config: ((timing.configResolved ?? 0) - timing.start) / 1000,\n build:\n ((timing.buildStart ?? 0) - (timing.configResolved ?? 0)) / 1000,\n render:\n ((timing.renderEnd ?? 0) - (timing.renderStart ?? 0)) / 1000,\n total: (timing.renderEnd ?? 0 - timing.start) / 1000,\n },\n };\n\n // Format duration helper\n const formatDuration = (seconds: number) => {\n if (seconds < 0.001) {\n return `${(seconds * 1000000).toFixed(0)}μs`;\n }\n if (seconds < 1) {\n return `${(seconds * 1000).toFixed(0)}ms`;\n }\n return `${seconds.toFixed(2)}s`;\n };\n\n console.log(\"\\n[vite-plugin-react-server] Build Summary:\");\n console.log(\"─\".repeat(50));\n console.log(`🎨 Included ${buildCssFiles.size} CSS files`);\n console.log(`🛣️ Total routes: ${files.urlMap.size}`);\n console.log(\"─\".repeat(50));\n console.log(\"⏱️ Timing:\");\n console.log(` Config: ${formatDuration(stats.timing.config)}`);\n console.log(` Build: ${formatDuration(stats.timing.build)}`);\n console.log(` Render: ${formatDuration(stats.timing.render)}`);\n console.log(\" \".repeat(12));\n console.log(` Total: ${formatDuration(stats.timing.total)}`);\n console.log(\"─\".repeat(50));\n\n // Ensure worker is terminated\n if (worker) {\n await worker.terminate();\n worker = null as any;\n }\n } catch (error) {\n console.error(\"[vite-plugin-react-server] Build failed:\", error);\n // Make sure to terminate worker even on error\n if (worker) await worker.terminate();\n worker = null as any;\n throw error;\n }\n },\n async buildEnd(error) {\n if (error) {\n console.error(\"[vite-plugin-react-server] Build error:\", error);\n return;\n }\n },\n handleHotUpdate({ file }) {\n if (file.endsWith(\".css\")) {\n cssModules.add(file);\n }\n },\n async generateBundle(options, bundle) {\n if (!resolvedConfig) {\n throw new Error(\"Resolved config not found\");\n }\n outpuptBundle = bundle;\n outputOptions = options;\n // Create manifest entries for each chunk\n serverManifest = getBundleManifest({\n pluginContext: this,\n bundle,\n moduleBase: userOptions.moduleBase,\n preserveModulesRoot: userOptions.build.preserveModulesRoot,\n });\n if (serverManifestPath) {\n await mkdir(dirname(serverManifestPath), { recursive: true });\n await writeFile(\n serverManifestPath,\n JSON.stringify(serverManifest, null, 2)\n );\n }\n },\n };\n}\n"],"names":["React","resolvedConfig","options"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveProps.d.ts","sourceRoot":"","sources":["../../plugin/resolveProps.ts"],"names":[],"mappings":"AAAA,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,kBAAkB,GACnB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrB,wBAAsB,YAAY,CAAC,EACjC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,GAAG,GACJ,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4GnD"}
1
+ {"version":3,"file":"resolveProps.d.ts","sourceRoot":"","sources":["../../plugin/resolveProps.ts"],"names":[],"mappings":"AAAA,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,KAAK,kBAAkB,GACnB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAMrB,wBAAsB,YAAY,CAAC,EACjC,WAAW,EACX,IAAI,EACJ,UAAU,EACV,GAAG,GACJ,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6GnD"}
@@ -64,6 +64,7 @@ async function resolveProps({
64
64
  )
65
65
  };
66
66
  } catch (error) {
67
+ console.trace(error);
67
68
  console.warn(found, "error in resolveProps", propsModule, url, path);
68
69
  return {
69
70
  type: "error",
@@ -1 +1 @@
1
- {"version":3,"file":"resolveProps.js","sources":["../../plugin/resolveProps.ts"],"sourcesContent":["type ResolvePropsOptions = {\n propsModule: Record<string, any>;\n path: string;\n exportName: string;\n url: string;\n};\n\ntype ResolvePropsResult =\n | { type: \"success\"; key: string; props: any }\n | { type: \"error\"; error: Error }\n | { type: \"skip\" };\n\nfunction isFunction(value: any) {\n return typeof value === \"function\";\n}\n\nexport async function resolveProps({\n propsModule,\n path,\n exportName,\n url,\n}: ResolvePropsOptions): Promise<ResolvePropsResult> {\n if (!propsModule) {\n return {\n type: \"error\",\n error: new Error(`propsModule is ${typeof propsModule}`),\n };\n }\n\n if (typeof propsModule !== \"object\") {\n return {\n type: \"error\",\n error: new Error(\n `propsModule must be an object, got ${typeof propsModule}`\n ),\n };\n }\n\n const keys = Object.keys(propsModule);\n let found = keys.find((v) => v === exportName || v === url || v === path);\n if(exportName in propsModule) {\n found = exportName;\n }\n if (found) {\n let value = propsModule[found];\n try {\n // If it's a function, call it with the URL\n if (isFunction(value)) {\n const props = await value(url);\n return {\n type: \"success\",\n key: found,\n props,\n };\n }\n\n // If it's a promise, await it\n if (value && typeof value.then === \"function\") {\n const props = await value;\n return {\n type: \"success\",\n key: found,\n props,\n };\n }\n\n // If it's a plain object, use it directly\n if (typeof value === \"object\" && value !== null) {\n return {\n type: \"success\",\n key: found,\n props: value,\n };\n }\n\n \n return {\n type: \"error\",\n error: new Error(\n `Expected props export \"${exportName}\" in \"${path}\" to be a function, promise, or object that resolves to props, instead got typeof ${typeof value}.`\n ),\n };\n } catch (error) {\n console.warn(found, \"error in resolveProps\", propsModule, url, path);\n return {\n type: \"error\",\n error: error as Error,\n };\n }\n }\n const commonjs = keys.find((v) => v === \"exports\");\n\n if (!!commonjs) {\n const exportKeys = (commonjs as unknown as { exports: any })[\"exports\"]\n ? Object.keys((commonjs as unknown as { exports: any })[\"exports\"])\n : [];\n const foundCommonJS = exportKeys.find(\n (v) => v === exportName || v === url || v === path\n );\n return {\n type: \"error\",\n error: new Error(\n `Expected props export \"${exportName}\" in \"${path}\", but instead got \"exports\" with ${\n !!foundCommonJS\n ? foundCommonJS.toString()\n : exportKeys.length\n ? exportKeys.join(\", \")\n : \"no keys\"\n }, this will not work. Make sure to set esModule: true in rollupOptions.output. ${JSON.stringify(propsModule)}`\n ),\n };\n }\n if (Object.keys(propsModule).includes(\"error\")) {\n return {\n type: \"error\",\n error: propsModule[\"error\"],\n };\n }\n\n return {\n type: \"error\",\n error: new Error(\n `Could not find props export \"${exportName}\" in \"${path}\". ${\n keys.length\n ? \"Available exports: \" + keys.join(\", \")\n : \"The object was defined but has no properties. \\\"\" + JSON.stringify(propsModule) + \"\\\"\"\n }`\n ),\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolveProps.js","sources":["../../plugin/resolveProps.ts"],"sourcesContent":["type ResolvePropsOptions = {\n propsModule: Record<string, any>;\n path: string;\n exportName: string;\n url: string;\n};\n\ntype ResolvePropsResult =\n | { type: \"success\"; key: string; props: any }\n | { type: \"error\"; error: Error }\n | { type: \"skip\" };\n\nfunction isFunction(value: any) {\n return typeof value === \"function\";\n}\n\nexport async function resolveProps({\n propsModule,\n path,\n exportName,\n url,\n}: ResolvePropsOptions): Promise<ResolvePropsResult> {\n if (!propsModule) {\n return {\n type: \"error\",\n error: new Error(`propsModule is ${typeof propsModule}`),\n };\n }\n\n if (typeof propsModule !== \"object\") {\n return {\n type: \"error\",\n error: new Error(\n `propsModule must be an object, got ${typeof propsModule}`\n ),\n };\n }\n\n const keys = Object.keys(propsModule);\n let found = keys.find((v) => v === exportName || v === url || v === path);\n if(exportName in propsModule) {\n found = exportName;\n }\n if (found) {\n let value = propsModule[found];\n try {\n // If it's a function, call it with the URL\n if (isFunction(value)) {\n const props = await value(url);\n return {\n type: \"success\",\n key: found,\n props,\n };\n }\n\n // If it's a promise, await it\n if (value && typeof value.then === \"function\") {\n const props = await value;\n return {\n type: \"success\",\n key: found,\n props,\n };\n }\n\n // If it's a plain object, use it directly\n if (typeof value === \"object\" && value !== null) {\n return {\n type: \"success\",\n key: found,\n props: value,\n };\n }\n\n \n return {\n type: \"error\",\n error: new Error(\n `Expected props export \"${exportName}\" in \"${path}\" to be a function, promise, or object that resolves to props, instead got typeof ${typeof value}.`\n ),\n };\n } catch (error) {\n console.trace(error);\n console.warn(found, \"error in resolveProps\", propsModule, url, path);\n return {\n type: \"error\",\n error: error as Error,\n };\n }\n }\n const commonjs = keys.find((v) => v === \"exports\");\n\n if (!!commonjs) {\n const exportKeys = (commonjs as unknown as { exports: any })[\"exports\"]\n ? Object.keys((commonjs as unknown as { exports: any })[\"exports\"])\n : [];\n const foundCommonJS = exportKeys.find(\n (v) => v === exportName || v === url || v === path\n );\n return {\n type: \"error\",\n error: new Error(\n `Expected props export \"${exportName}\" in \"${path}\", but instead got \"exports\" with ${\n !!foundCommonJS\n ? foundCommonJS.toString()\n : exportKeys.length\n ? exportKeys.join(\", \")\n : \"no keys\"\n }, this will not work. Make sure to set esModule: true in rollupOptions.output. ${JSON.stringify(propsModule)}`\n ),\n };\n }\n if (Object.keys(propsModule).includes(\"error\")) {\n return {\n type: \"error\",\n error: propsModule[\"error\"],\n };\n }\n\n return {\n type: \"error\",\n error: new Error(\n `Could not find props export \"${exportName}\" in \"${path}\". ${\n keys.length\n ? \"Available exports: \" + keys.join(\", \")\n : \"The object was defined but has no properties. \\\"\" + JSON.stringify(propsModule) + \"\\\"\"\n }`\n ),\n };\n}\n"],"names":[],"mappings":";;;;;AAYA,SAAS,WAAW,KAAY,EAAA;AAC9B,EAAA,OAAO,OAAO,KAAU,KAAA,UAAA;AAC1B;AAEA,eAAsB,YAAa,CAAA;AAAA,EACjC,WAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAqD,EAAA;AACnD,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,OAAO,IAAI,KAAA,CAAM,CAAkB,eAAA,EAAA,OAAO,WAAW,CAAE,CAAA;AAAA,KACzD;AAAA;AAGF,EAAI,IAAA,OAAO,gBAAgB,QAAU,EAAA;AACnC,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,OAAO,IAAI,KAAA;AAAA,QACT,CAAA,mCAAA,EAAsC,OAAO,WAAW,CAAA;AAAA;AAC1D,KACF;AAAA;AAGF,EAAM,MAAA,IAAA,GAAO,MAAO,CAAA,IAAA,CAAK,WAAW,CAAA;AACpC,EAAI,IAAA,KAAA,GAAQ,IAAK,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,MAAM,UAAc,IAAA,CAAA,KAAM,GAAO,IAAA,CAAA,KAAM,IAAI,CAAA;AACxE,EAAA,IAAG,cAAc,WAAa,EAAA;AAC5B,IAAQ,KAAA,GAAA,UAAA;AAAA;AAEV,EAAA,IAAI,KAAO,EAAA;AACT,IAAI,IAAA,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC7B,IAAI,IAAA;AAEF,MAAI,IAAA,UAAA,CAAW,KAAK,CAAG,EAAA;AACrB,QAAM,MAAA,KAAA,GAAQ,MAAM,KAAA,CAAM,GAAG,CAAA;AAC7B,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,SAAA;AAAA,UACN,GAAK,EAAA,KAAA;AAAA,UACL;AAAA,SACF;AAAA;AAIF,MAAA,IAAI,KAAS,IAAA,OAAO,KAAM,CAAA,IAAA,KAAS,UAAY,EAAA;AAC7C,QAAA,MAAM,QAAQ,MAAM,KAAA;AACpB,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,SAAA;AAAA,UACN,GAAK,EAAA,KAAA;AAAA,UACL;AAAA,SACF;AAAA;AAIF,MAAA,IAAI,OAAO,KAAA,KAAU,QAAY,IAAA,KAAA,KAAU,IAAM,EAAA;AAC/C,QAAO,OAAA;AAAA,UACL,IAAM,EAAA,SAAA;AAAA,UACN,GAAK,EAAA,KAAA;AAAA,UACL,KAAO,EAAA;AAAA,SACT;AAAA;AAIF,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,OAAA;AAAA,QACN,OAAO,IAAI,KAAA;AAAA,UACT,0BAA0B,UAAU,CAAA,MAAA,EAAS,IAAI,CAAA,kFAAA,EAAqF,OAAO,KAAK,CAAA,CAAA;AAAA;AACpJ,OACF;AAAA,aACO,KAAO,EAAA;AACd,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AACnB,MAAA,OAAA,CAAQ,IAAK,CAAA,KAAA,EAAO,uBAAyB,EAAA,WAAA,EAAa,KAAK,IAAI,CAAA;AACnE,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,OAAA;AAAA,QACN;AAAA,OACF;AAAA;AACF;AAEF,EAAA,MAAM,WAAW,IAAK,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,MAAM,SAAS,CAAA;AAEjD,EAAI,IAAA,CAAC,CAAC,QAAU,EAAA;AACd,IAAM,MAAA,UAAA,GAAc,QAAyC,CAAA,SAAS,CAClE,GAAA,MAAA,CAAO,KAAM,QAAyC,CAAA,SAAS,CAAC,CAAA,GAChE,EAAC;AACL,IAAA,MAAM,gBAAgB,UAAW,CAAA,IAAA;AAAA,MAC/B,CAAC,CAAM,KAAA,CAAA,KAAM,UAAc,IAAA,CAAA,KAAM,OAAO,CAAM,KAAA;AAAA,KAChD;AACA,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,OAAO,IAAI,KAAA;AAAA,QACT,CAAA,uBAAA,EAA0B,UAAU,CAAS,MAAA,EAAA,IAAI,qCAC/C,CAAC,CAAC,aACE,GAAA,aAAA,CAAc,QAAS,EAAA,GACvB,WAAW,MACX,GAAA,UAAA,CAAW,KAAK,IAAI,CAAA,GACpB,SACN,CAAkF,+EAAA,EAAA,IAAA,CAAK,SAAU,CAAA,WAAW,CAAC,CAAA;AAAA;AAC/G,KACF;AAAA;AAEF,EAAA,IAAI,OAAO,IAAK,CAAA,WAAW,CAAE,CAAA,QAAA,CAAS,OAAO,CAAG,EAAA;AAC9C,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,KAAA,EAAO,YAAY,OAAO;AAAA,KAC5B;AAAA;AAGF,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,OAAA;AAAA,IACN,OAAO,IAAI,KAAA;AAAA,MACT,gCAAgC,UAAU,CAAA,MAAA,EAAS,IAAI,CAAA,GAAA,EACrD,KAAK,MACD,GAAA,qBAAA,GAAwB,IAAK,CAAA,IAAA,CAAK,IAAI,CACtC,GAAA,iDAAA,GAAqD,KAAK,SAAU,CAAA,WAAW,IAAI,GACzF,CAAA;AAAA;AACF,GACF;AACF;;;;"}
@@ -6,7 +6,7 @@
6
6
  import { Worker } from 'node:worker_threads';
7
7
  import { getNodePath, getMode } from '../config/getPaths.js';
8
8
  import { getCondition } from '../config/getCondition.js';
9
- import { join } from 'node:path';
9
+ import 'node:path';
10
10
 
11
11
  async function createWorker(options) {
12
12
  const {
@@ -31,7 +31,7 @@ async function createWorker(options) {
31
31
  NODE_OPTIONS: `${reverseCondition ? condition === "react-server" ? process.env["NODE_OPTIONS"]?.includes("react-server") ? process.env["NODE_OPTIONS"]?.replace("react-server", "react-client") : `${process.env["NODE_OPTIONS"] ?? ""} --conditions=react-client` : process.env["NODE_OPTIONS"]?.includes("react-client") ? process.env["NODE_OPTIONS"]?.replace("react-client", "react-server") : `${process.env["NODE_OPTIONS"] ?? ""} --conditions=react-server` : process.env["NODE_OPTIONS"]}`
32
32
  };
33
33
  const worker = new Worker(
34
- workerPath.startsWith("/") ? workerPath : join(projectRoot, workerPath),
34
+ workerPath.startsWith("/") ? workerPath : "./" + workerPath,
35
35
  {
36
36
  env,
37
37
  resourceLimits
@@ -1 +1 @@
1
- {"version":3,"file":"createWorker.js","sources":["../../../plugin/worker/createWorker.ts"],"sourcesContent":["import { Worker, type ResourceLimits } from \"node:worker_threads\";\nimport { getMode, getNodePath } from \"../config/getPaths.js\";\nimport { getCondition } from \"../config/getCondition.js\";\nimport { join } from \"node:path\";\ntype CreateWorkerOptions = {\n projectRoot?: string;\n condition?: \"react-server\" | \"react-client\";\n nodePath?: string;\n nodeOptions?: string;\n mode?: \"production\" | \"development\";\n reverseCondition?: boolean;\n maxListeners?: number;\n workerPath: string;\n resourceLimits?: ResourceLimits;\n typescript?: boolean;\n};\n\nexport async function createWorker(options: CreateWorkerOptions) {\n const {\n projectRoot = process.cwd(),\n nodePath = getNodePath(projectRoot),\n condition = getCondition(),\n reverseCondition = true,\n maxListeners = 100,\n mode = getMode(),\n workerPath,\n resourceLimits = {\n maxOldGenerationSizeMb: 512,\n maxYoungGenerationSizeMb: 128,\n },\n } = options;\n\n // Ensure consistent NODE_ENV between main thread and worker\n const isTestEnv = process.env[\"VITEST\"] || process.env[\"NODE_ENV\"] === \"test\";\n const nodeEnv = isTestEnv ? \"development\" : mode;\n\n const env = {\n ...process.env,\n NODE_ENV: nodeEnv,\n NODE_PATH: nodePath,\n NODE_OPTIONS: `${\n reverseCondition\n ? condition === \"react-server\"\n ? process.env[\"NODE_OPTIONS\"]?.includes(\"react-server\")\n ? process.env[\"NODE_OPTIONS\"]?.replace(\"react-server\", \"react-client\")\n : `${process.env[\"NODE_OPTIONS\"] ?? ''} --conditions=react-client`\n : process.env[\"NODE_OPTIONS\"]?.includes(\"react-client\")\n ? process.env[\"NODE_OPTIONS\"]?.replace(\"react-client\", \"react-server\")\n : `${process.env[\"NODE_OPTIONS\"] ?? ''} --conditions=react-server`\n : process.env[\"NODE_OPTIONS\"]\n }`,\n };\n\n // Create worker with proper environment\n const worker = new Worker(\n workerPath.startsWith(\"/\") ? workerPath : join(projectRoot, workerPath),\n {\n env,\n resourceLimits,\n }\n );\n\n worker.setMaxListeners(maxListeners);\n\n // Wait for worker to be ready\n return await new Promise<Worker>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('Worker ready timeout'));\n }, 5000);\n\n worker.once(\"message\", (msg) => {\n if (msg.type === \"READY\" && msg.env === nodeEnv) {\n clearTimeout(timeout);\n resolve(worker);\n }\n });\n\n worker.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n}\n"],"names":[],"mappings":";;;;;;;;;;AAiBA,eAAsB,aAAa,OAA8B,EAAA;AAC/D,EAAM,MAAA;AAAA,IACJ,WAAA,GAAc,QAAQ,GAAI,EAAA;AAAA,IAC1B,QAAA,GAAW,YAAY,WAAW,CAAA;AAAA,IAClC,YAAY,YAAa,EAAA;AAAA,IACzB,gBAAmB,GAAA,IAAA;AAAA,IACnB,YAAe,GAAA,GAAA;AAAA,IACf,OAAO,OAAQ,EAAA;AAAA,IACf,UAAA;AAAA,IACA,cAAiB,GAAA;AAAA,MACf,sBAAwB,EAAA,GAAA;AAAA,MACxB,wBAA0B,EAAA;AAAA;AAC5B,GACE,GAAA,OAAA;AAGJ,EAAM,MAAA,SAAA,GAAY,QAAQ,GAAI,CAAA,QAAQ,KAAK,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAM,KAAA,MAAA;AACvE,EAAM,MAAA,OAAA,GAAU,YAAY,aAAgB,GAAA,IAAA;AAE5C,EAAA,MAAM,GAAM,GAAA;AAAA,IACV,GAAG,OAAQ,CAAA,GAAA;AAAA,IACX,QAAU,EAAA,OAAA;AAAA,IACV,SAAW,EAAA,QAAA;AAAA,IACX,YAAA,EAAc,CACZ,EAAA,gBAAA,GACI,SAAc,KAAA,cAAA,GACZ,QAAQ,GAAI,CAAA,cAAc,CAAG,EAAA,QAAA,CAAS,cAAc,CAAA,GAClD,QAAQ,GAAI,CAAA,cAAc,CAAG,EAAA,OAAA,CAAQ,cAAgB,EAAA,cAAc,IACnE,CAAG,EAAA,OAAA,CAAQ,GAAI,CAAA,cAAc,CAAK,IAAA,EAAE,+BACtC,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,EAAG,QAAS,CAAA,cAAc,IAClD,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,EAAG,OAAQ,CAAA,cAAA,EAAgB,cAAc,CACnE,GAAA,CAAA,EAAG,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,IAAK,EAAE,CACxC,0BAAA,CAAA,GAAA,OAAA,CAAQ,GAAI,CAAA,cAAc,CAChC,CAAA;AAAA,GACF;AAGA,EAAA,MAAM,SAAS,IAAI,MAAA;AAAA,IACjB,WAAW,UAAW,CAAA,GAAG,IAAI,UAAa,GAAA,IAAA,CAAK,aAAa,UAAU,CAAA;AAAA,IACtE;AAAA,MACE,GAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAA,CAAO,gBAAgB,YAAY,CAAA;AAGnC,EAAA,OAAO,MAAM,IAAI,OAAgB,CAAA,CAAC,SAAS,MAAW,KAAA;AACpD,IAAM,MAAA,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,sBAAsB,CAAC,CAAA;AAAA,OACvC,GAAI,CAAA;AAEP,IAAO,MAAA,CAAA,IAAA,CAAK,SAAW,EAAA,CAAC,GAAQ,KAAA;AAC9B,MAAA,IAAI,GAAI,CAAA,IAAA,KAAS,OAAW,IAAA,GAAA,CAAI,QAAQ,OAAS,EAAA;AAC/C,QAAA,YAAA,CAAa,OAAO,CAAA;AACpB,QAAA,OAAA,CAAQ,MAAM,CAAA;AAAA;AAChB,KACD,CAAA;AAED,IAAO,MAAA,CAAA,IAAA,CAAK,OAAS,EAAA,CAAC,KAAU,KAAA;AAC9B,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,KACb,CAAA;AAAA,GACF,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"createWorker.js","sources":["../../../plugin/worker/createWorker.ts"],"sourcesContent":["import { Worker, type ResourceLimits } from \"node:worker_threads\";\nimport { getMode, getNodePath } from \"../config/getPaths.js\";\nimport { getCondition } from \"../config/getCondition.js\";\nimport { join } from \"node:path\";\ntype CreateWorkerOptions = {\n projectRoot?: string;\n condition?: \"react-server\" | \"react-client\";\n nodePath?: string;\n nodeOptions?: string;\n mode?: \"production\" | \"development\";\n reverseCondition?: boolean;\n maxListeners?: number;\n workerPath: string;\n resourceLimits?: ResourceLimits;\n typescript?: boolean;\n};\n\nexport async function createWorker(options: CreateWorkerOptions) {\n const {\n projectRoot = process.cwd(),\n nodePath = getNodePath(projectRoot),\n condition = getCondition(),\n reverseCondition = true,\n maxListeners = 100,\n mode = getMode(),\n workerPath,\n resourceLimits = {\n maxOldGenerationSizeMb: 512,\n maxYoungGenerationSizeMb: 128,\n },\n } = options;\n\n // Ensure consistent NODE_ENV between main thread and worker\n const isTestEnv = process.env[\"VITEST\"] || process.env[\"NODE_ENV\"] === \"test\";\n const nodeEnv = isTestEnv ? \"development\" : mode;\n\n const env = {\n ...process.env,\n NODE_ENV: nodeEnv,\n NODE_PATH: nodePath,\n NODE_OPTIONS: `${\n reverseCondition\n ? condition === \"react-server\"\n ? process.env[\"NODE_OPTIONS\"]?.includes(\"react-server\")\n ? process.env[\"NODE_OPTIONS\"]?.replace(\"react-server\", \"react-client\")\n : `${process.env[\"NODE_OPTIONS\"] ?? ''} --conditions=react-client`\n : process.env[\"NODE_OPTIONS\"]?.includes(\"react-client\")\n ? process.env[\"NODE_OPTIONS\"]?.replace(\"react-client\", \"react-server\")\n : `${process.env[\"NODE_OPTIONS\"] ?? ''} --conditions=react-server`\n : process.env[\"NODE_OPTIONS\"]\n }`,\n };\n\n // Create worker with proper environment\n const worker = new Worker(\n workerPath.startsWith(\"/\") ? workerPath : './' + workerPath,\n {\n env,\n resourceLimits,\n }\n );\n\n worker.setMaxListeners(maxListeners);\n\n // Wait for worker to be ready\n return await new Promise<Worker>((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(new Error('Worker ready timeout'));\n }, 5000);\n\n worker.once(\"message\", (msg) => {\n if (msg.type === \"READY\" && msg.env === nodeEnv) {\n clearTimeout(timeout);\n resolve(worker);\n }\n });\n\n worker.once(\"error\", (error) => {\n clearTimeout(timeout);\n reject(error);\n });\n });\n}\n"],"names":[],"mappings":";;;;;;;;;;AAiBA,eAAsB,aAAa,OAA8B,EAAA;AAC/D,EAAM,MAAA;AAAA,IACJ,WAAA,GAAc,QAAQ,GAAI,EAAA;AAAA,IAC1B,QAAA,GAAW,YAAY,WAAW,CAAA;AAAA,IAClC,YAAY,YAAa,EAAA;AAAA,IACzB,gBAAmB,GAAA,IAAA;AAAA,IACnB,YAAe,GAAA,GAAA;AAAA,IACf,OAAO,OAAQ,EAAA;AAAA,IACf,UAAA;AAAA,IACA,cAAiB,GAAA;AAAA,MACf,sBAAwB,EAAA,GAAA;AAAA,MACxB,wBAA0B,EAAA;AAAA;AAC5B,GACE,GAAA,OAAA;AAGJ,EAAM,MAAA,SAAA,GAAY,QAAQ,GAAI,CAAA,QAAQ,KAAK,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAM,KAAA,MAAA;AACvE,EAAM,MAAA,OAAA,GAAU,YAAY,aAAgB,GAAA,IAAA;AAE5C,EAAA,MAAM,GAAM,GAAA;AAAA,IACV,GAAG,OAAQ,CAAA,GAAA;AAAA,IACX,QAAU,EAAA,OAAA;AAAA,IACV,SAAW,EAAA,QAAA;AAAA,IACX,YAAA,EAAc,CACZ,EAAA,gBAAA,GACI,SAAc,KAAA,cAAA,GACZ,QAAQ,GAAI,CAAA,cAAc,CAAG,EAAA,QAAA,CAAS,cAAc,CAAA,GAClD,QAAQ,GAAI,CAAA,cAAc,CAAG,EAAA,OAAA,CAAQ,cAAgB,EAAA,cAAc,IACnE,CAAG,EAAA,OAAA,CAAQ,GAAI,CAAA,cAAc,CAAK,IAAA,EAAE,+BACtC,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,EAAG,QAAS,CAAA,cAAc,IAClD,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,EAAG,OAAQ,CAAA,cAAA,EAAgB,cAAc,CACnE,GAAA,CAAA,EAAG,OAAQ,CAAA,GAAA,CAAI,cAAc,CAAA,IAAK,EAAE,CACxC,0BAAA,CAAA,GAAA,OAAA,CAAQ,GAAI,CAAA,cAAc,CAChC,CAAA;AAAA,GACF;AAGA,EAAA,MAAM,SAAS,IAAI,MAAA;AAAA,IACjB,UAAW,CAAA,UAAA,CAAW,GAAG,CAAA,GAAI,aAAa,IAAO,GAAA,UAAA;AAAA,IACjD;AAAA,MACE,GAAA;AAAA,MACA;AAAA;AACF,GACF;AAEA,EAAA,MAAA,CAAO,gBAAgB,YAAY,CAAA;AAGnC,EAAA,OAAO,MAAM,IAAI,OAAgB,CAAA,CAAC,SAAS,MAAW,KAAA;AACpD,IAAM,MAAA,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAO,MAAA,CAAA,IAAI,KAAM,CAAA,sBAAsB,CAAC,CAAA;AAAA,OACvC,GAAI,CAAA;AAEP,IAAO,MAAA,CAAA,IAAA,CAAK,SAAW,EAAA,CAAC,GAAQ,KAAA;AAC9B,MAAA,IAAI,GAAI,CAAA,IAAA,KAAS,OAAW,IAAA,GAAA,CAAI,QAAQ,OAAS,EAAA;AAC/C,QAAA,YAAA,CAAa,OAAO,CAAA;AACpB,QAAA,OAAA,CAAQ,MAAM,CAAA;AAAA;AAChB,KACD,CAAA;AAED,IAAO,MAAA,CAAA,IAAA,CAAK,OAAS,EAAA,CAAC,KAAU,KAAA;AAC9B,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,MAAA,CAAO,KAAK,CAAA;AAAA,KACb,CAAA;AAAA,GACF,CAAA;AACH;;;;"}
@@ -5,7 +5,12 @@
5
5
  */
6
6
  import { messageHandler } from './messageHandler.js';
7
7
  import { parentPort } from 'node:worker_threads';
8
+ import { Window } from 'happy-dom';
8
9
 
10
+ const window = new Window({ url: "https://localhost:8080" });
11
+ const document = window.document;
12
+ globalThis.window = window;
13
+ globalThis.document = document;
9
14
  if (!parentPort) throw new Error("This module must be run as a worker");
10
15
  parentPort?.on("message", messageHandler);
11
16
  parentPort?.postMessage({
@@ -1 +1 @@
1
- {"version":3,"file":"html-worker.production.js","sources":["../../../../plugin/worker/html/html-worker.production.tsx"],"sourcesContent":["import { messageHandler } from \"./messageHandler.js\";\nimport { parentPort } from \"node:worker_threads\";\n\nlet ready = false;\nif (!parentPort) throw new Error(\"This module must be run as a worker\");\n\n// Signal ready with environment\nparentPort?.on(\"message\", messageHandler);\nparentPort?.postMessage({ \n type: \"READY\", \n env: process.env[\"NODE_ENV\"],\n pid: process.pid \n});\n"],"names":[],"mappings":";;;;;;;;AAIA,IAAI,CAAC,UAAA,EAAkB,MAAA,IAAI,MAAM,qCAAqC,CAAA;AAGtE,UAAY,EAAA,EAAA,CAAG,WAAW,cAAc,CAAA;AACxC,UAAA,EAAY,WAAY,CAAA;AAAA,EACpB,IAAM,EAAA,OAAA;AAAA,EACN,GAAA,EAAK,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAA;AAAA,EAC3B,KAAK,OAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"html-worker.production.js","sources":["../../../../plugin/worker/html/html-worker.production.tsx"],"sourcesContent":["import { messageHandler } from \"./messageHandler.js\";\nimport { parentPort } from \"node:worker_threads\";\nimport { Window } from 'happy-dom';\nconst window = new Window({ url: 'https://localhost:8080' });\nconst document = window.document;\nglobalThis.window = window as any;\nglobalThis.document = document as any;\n\nlet ready = false;\nif (!parentPort) throw new Error(\"This module must be run as a worker\");\n\n// Signal ready with environment\nparentPort?.on(\"message\", messageHandler);\nparentPort?.postMessage({ \n type: \"READY\", \n env: process.env[\"NODE_ENV\"],\n pid: process.pid \n});\n"],"names":[],"mappings":";;;;;;;;;AAGA,MAAM,SAAS,IAAI,MAAA,CAAO,EAAE,GAAA,EAAK,0BAA0B,CAAA;AAC3D,MAAM,WAAW,MAAO,CAAA,QAAA;AACxB,UAAA,CAAW,MAAS,GAAA,MAAA;AACpB,UAAA,CAAW,QAAW,GAAA,QAAA;AAGtB,IAAI,CAAC,UAAA,EAAkB,MAAA,IAAI,MAAM,qCAAqC,CAAA;AAGtE,UAAY,EAAA,EAAA,CAAG,WAAW,cAAc,CAAA;AACxC,UAAA,EAAY,WAAY,CAAA;AAAA,EACpB,IAAM,EAAA,OAAA;AAAA,EACN,GAAA,EAAK,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAA;AAAA,EAC3B,KAAK,OAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/html/messageHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAetE,eAAO,MAAM,cAAc,YAAmB,iBAAiB,kBAyG9D,CAAC"}
1
+ {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/html/messageHandler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAatE,eAAO,MAAM,cAAc,YAAmB,iBAAiB,kBAyG9D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"messageHandler.js","sources":["../../../../plugin/worker/html/messageHandler.ts"],"sourcesContent":["import { PassThrough } from \"node:stream\";\nimport { parentPort } from \"node:worker_threads\";\nimport type { HtmlRenderState, HtmlWorkerMessage } from \"../types.js\";\nimport * as ReactDOMServer from \"react-dom/server\";\nimport React from \"react\";\nimport {\n createFromNodeStream,\n // @ts-ignore\n} from \"react-server-dom-esm/client.node\";\nimport { join } from \"path\";\n\n// Track active renders and streams\nconst activeRenders = new Map<string, HtmlRenderState>();\nconst htmlContent = new Map<string, string>();\nconst htmlPromises = new Map<string, Promise<string>>();\n\n\nexport const messageHandler = async (message: HtmlWorkerMessage) => {\n try {\n switch (message.type) {\n case \"RSC_CHUNK\": {\n const { id, chunk, moduleRootPath, moduleBaseURL, htmlOutputPath, pipableStreamOptions } = message;\n \n const render = activeRenders.get(id);\n if (!render) {\n activeRenders.set(id, {\n chunks: [chunk],\n id,\n complete: false,\n rendered: false,\n moduleRootPath,\n moduleBaseURL,\n outDir: '',\n htmlOutputPath: htmlOutputPath ?? join(process.cwd(), 'index.html'),\n pipableStreamOptions: pipableStreamOptions,\n });\n } else {\n render.chunks = [...render.chunks, chunk];\n }\n break;\n }\n\n case \"RSC_END\": {\n const { id } = message;\n const render = activeRenders.get(id);\n if (!render) {\n throw new Error(`No render state found for ${id}`);\n }\n\n // Mark this render as complete\n render.complete = true;\n\n // Create a PassThrough stream to handle the chunks\n const rscStream = new PassThrough();\n\n // Write all chunks to the stream\n for (const chunk of render.chunks) {\n rscStream.write(chunk);\n }\n rscStream.end();\n \n // Create React elements from stream\n const reactElements = await createFromNodeStream(\n rscStream,\n render.moduleRootPath,\n 'localhost'\n );\n\n // Create a promise that resolves when HTML is complete\n const htmlPromise = new Promise<string>((resolve) => {\n const collectStream = new PassThrough();\n let html = '';\n\n collectStream.on(\"data\", (chunk) => {\n html += chunk.toString();\n });\n\n collectStream.on(\"end\", () => {\n resolve(html);\n render.rendered = true;\n parentPort?.postMessage({\n type: \"ALL_READY\",\n id,\n html,\n outputPath: render.htmlOutputPath,\n });\n });\n // Render to pipeable stream\n const stream = ReactDOMServer.renderToPipeableStream(\n reactElements as React.ReactNode,\n {\n ...render.pipableStreamOptions,\n onShellReady() {\n parentPort?.postMessage({ type: \"SHELL_READY\", id });\n }\n }\n );\n\n // Pipe to collection stream\n stream.pipe(collectStream);\n });\n\n htmlPromises.set(id, htmlPromise);\n\n // Clean up resources\n rscStream.destroy();\n activeRenders.delete(id);\n htmlContent.delete(id);\n htmlPromises.delete(id);\n break;\n }\n\n case \"SHUTDOWN\": {\n console.log('Received shutdown signal');\n parentPort?.close();\n break;\n }\n }\n } catch (error) {\n console.error('Error in messageHandler:', error);\n throw error;\n }\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"messageHandler.js","sources":["../../../../plugin/worker/html/messageHandler.ts"],"sourcesContent":["import { PassThrough } from \"node:stream\";\nimport { parentPort } from \"node:worker_threads\";\nimport type { HtmlRenderState, HtmlWorkerMessage } from \"../types.js\";\nimport * as ReactDOMServer from \"react-dom/server\";\nimport React from \"react\";\nimport {\n createFromNodeStream,\n // @ts-ignore\n} from \"react-server-dom-esm/client.node\";\nimport { join } from \"path\";\n\n// Track active renders and streams\nconst activeRenders = new Map<string, HtmlRenderState>();\nconst htmlContent = new Map<string, string>();\nconst htmlPromises = new Map<string, Promise<string>>();\nexport const messageHandler = async (message: HtmlWorkerMessage) => {\n try {\n switch (message.type) {\n case \"RSC_CHUNK\": {\n const { id, chunk, moduleRootPath, moduleBaseURL, htmlOutputPath, pipableStreamOptions } = message;\n \n const render = activeRenders.get(id);\n if (!render) {\n activeRenders.set(id, {\n chunks: [chunk],\n id,\n complete: false,\n rendered: false,\n moduleRootPath,\n moduleBaseURL,\n outDir: '',\n htmlOutputPath: htmlOutputPath ?? join(process.cwd(), 'index.html'),\n pipableStreamOptions: pipableStreamOptions,\n });\n } else {\n render.chunks = [...render.chunks, chunk];\n }\n break;\n }\n\n case \"RSC_END\": {\n const { id } = message;\n const render = activeRenders.get(id);\n if (!render) {\n throw new Error(`No render state found for ${id}`);\n }\n\n // Mark this render as complete\n render.complete = true;\n\n // Create a PassThrough stream to handle the chunks\n const rscStream = new PassThrough();\n\n // Write all chunks to the stream\n for (const chunk of render.chunks) {\n rscStream.write(chunk);\n }\n rscStream.end();\n \n // Create React elements from stream\n const reactElements = await createFromNodeStream(\n rscStream,\n render.moduleRootPath,\n 'localhost'\n );\n\n // Create a promise that resolves when HTML is complete\n const htmlPromise = new Promise<string>((resolve) => {\n const collectStream = new PassThrough();\n let html = '';\n\n collectStream.on(\"data\", (chunk) => {\n html += chunk.toString();\n });\n\n collectStream.on(\"end\", () => {\n resolve(html);\n render.rendered = true;\n parentPort?.postMessage({\n type: \"ALL_READY\",\n id,\n html,\n outputPath: render.htmlOutputPath,\n });\n });\n // Render to pipeable stream\n const stream = ReactDOMServer.renderToPipeableStream(\n reactElements as React.ReactNode,\n {\n ...render.pipableStreamOptions,\n onShellReady() {\n parentPort?.postMessage({ type: \"SHELL_READY\", id });\n }\n }\n );\n\n // Pipe to collection stream\n stream.pipe(collectStream);\n });\n\n htmlPromises.set(id, htmlPromise);\n\n // Clean up resources\n rscStream.destroy();\n activeRenders.delete(id);\n htmlContent.delete(id);\n htmlPromises.delete(id);\n break;\n }\n\n case \"SHUTDOWN\": {\n console.log('Received shutdown signal');\n parentPort?.close();\n break;\n }\n }\n } catch (error) {\n console.error('Error in messageHandler:', error);\n throw error;\n }\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderPages.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/html/renderPages.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAKrG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,EACV,aAAa,EACd,MAAM,QAAQ,CAAC;AAIhB,UAAU,qBAAqB;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAED,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,WAAW,CAC/B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,kBAAkB;;;GAwM5B"}
1
+ {"version":3,"file":"renderPages.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/html/renderPages.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAKrG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,KAAK,EACV,aAAa,EACd,MAAM,QAAQ,CAAC;AAIhB,UAAU,qBAAqB;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,CAAC;CACH;AAED,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;IACrD,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAsB,WAAW,CAC/B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EAAE,EAChB,KAAK,EAAE,qBAAqB,EAC5B,OAAO,EAAE,kBAAkB;;;GAuM5B"}
@@ -45,7 +45,7 @@ async function renderPages(pluginContext, routes, files, options) {
45
45
  }
46
46
  });
47
47
  });
48
- collectManifestCss(
48
+ const newCssFiles = collectManifestCss(
49
49
  options.clientManifest,
50
50
  options.moduleBasePath,
51
51
  "index.html",
@@ -83,7 +83,7 @@ async function renderPages(pluginContext, routes, files, options) {
83
83
  loader: options.loader,
84
84
  clientManifest: options.clientManifest,
85
85
  serverManifest: options.serverManifest,
86
- cssFiles: clientCss,
86
+ cssFiles: Array.from(newCssFiles.values()).concat(clientCss),
87
87
  pipableStreamOptions: {
88
88
  ...options.pipableStreamOptions,
89
89
  importMap: {
@@ -1 +1 @@
1
- {"version":3,"file":"renderPages.js","sources":["../../../../plugin/worker/html/renderPages.ts"],"sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve as resolvePath } from \"node:path\";\nimport { Transform } from \"node:stream\";\nimport type { Worker } from \"node:worker_threads\";\nimport { createHandler } from \"../../react-server/createHandler.js\";\nimport type { CheckFilesExistReturn, ResolvedUserConfig, ResolvedUserOptions } from \"../../types.js\";\nimport type {\n HtmlWorkerResponse,\n WorkerRscChunkMessage,\n} from \"../types.js\";\nimport type { Manifest } from \"vite\";\nimport type {\n PluginContext,\n} from \"rollup\";\nimport React from \"react\";\nimport { collectManifestCss } from \"../../collect-css-manifest.js\";\n\ninterface PipeableStreamOptions {\n bootstrapModules?: string[];\n bootstrapScripts?: string[];\n bootstrapScriptContent?: string;\n signal?: AbortSignal;\n identifierPrefix?: string;\n namespaceURI?: string;\n nonce?: string;\n progressiveChunkSize?: number;\n onShellReady?: () => void;\n onAllReady?: () => void;\n onError?: (error: unknown) => void;\n importMap?: {\n imports?: Record<string, string>;\n };\n}\n\ntype RenderPagesOptions = {\n pluginOptions: ResolvedUserOptions;\n userConfig: ResolvedUserConfig;\n clientManifest: Manifest;\n serverManifest: Manifest;\n worker: Worker;\n pipableStreamOptions?: PipeableStreamOptions;\n loader: (id: string) => Promise<Record<string, any>>;\n onCssFile?: (url: string, parentUrl: string) => void;\n clientCss?: string[];\n moduleBasePath: string;\n moduleBaseURL: string;\n};\n\nexport async function renderPages(\n pluginContext: PluginContext,\n routes: string[],\n files: CheckFilesExistReturn,\n options: RenderPagesOptions,\n) {\n const root = pluginContext.environment.config.root;\n const outDir = pluginContext.environment.config.build.outDir;\n const failedRoutes = new Map<string, Error>();\n const completedRoutes = new Set<string>();\n const writePromises = new Map<string, Promise<void>>();\n const clientCss = options.clientCss ?? [];\n try {\n // Set up worker message handling\n const allRoutesComplete = new Promise<void>((resolve, reject) => {\n options.worker.on(\"message\", (msg: HtmlWorkerResponse) => {\n switch (msg.type) {\n case \"ALL_READY\": {\n const { id, html, outputPath } = msg;\n mkdirSync(dirname(outputPath), { recursive: true });\n \n writeFile(outputPath, html)\n .then(() => {\n completedRoutes.add(id);\n if (completedRoutes.size === routes.length) {\n resolve();\n }\n })\n .catch((error) => {\n console.error('Write error for route:', id, error);\n failedRoutes.set(id, error as Error);\n reject(error);\n });\n break;\n }\n case \"ERROR\": {\n console.error('Worker error for route:', msg.id, msg.error);\n failedRoutes.set(msg.id, new Error(msg.error));\n reject(new Error(msg.error));\n break;\n }\n }\n });\n });\n\n collectManifestCss(\n options.clientManifest,\n options.moduleBasePath,\n 'index.html',\n (url, parentUrl)=>{\n options?.onCssFile?.(url, parentUrl);\n if(!clientCss.includes(url)){\n clientCss.push(url);\n }\n },\n join(root, options.pluginOptions.build.outDir, options.pluginOptions.build.client)\n );\n\n // Process routes sequentially\n for (const route of routes) {\n const routeFiles = files.urlMap.get(route);\n if (!routeFiles) {\n console.error('No files found for route:', route);\n failedRoutes.set(route, new Error(`No files found for ${route}`));\n continue;\n }\n\n collectManifestCss(\n options.serverManifest,\n options.moduleBasePath,\n routeFiles.page,\n (url, parentUrl)=>{\n options.onCssFile?.(url, parentUrl);\n if(!clientCss.includes(url)){\n clientCss.push(url);\n }\n }\n );\n\n // Create handler for pure RSC output\n const rscResult = await createHandler(route, {\n ...options.pluginOptions,\n Html: React.Fragment // Use Fragment for pure RSC output\n }, {\n loader: options.loader,\n clientManifest: options.clientManifest,\n serverManifest: options.serverManifest,\n cssFiles: clientCss,\n pipableStreamOptions: {\n ...options.pipableStreamOptions,\n importMap: {\n imports: {\n ...options.pipableStreamOptions?.importMap?.imports,\n }\n }\n },\n });\n\n // Create handler for HTML output\n const htmlResult = await createHandler(route, options.pluginOptions, {\n loader: options.loader,\n clientManifest: options.clientManifest,\n serverManifest: options.serverManifest,\n cssFiles: clientCss,\n pipableStreamOptions: {\n ...options.pipableStreamOptions,\n importMap: {\n imports: {\n ...options.pipableStreamOptions?.importMap?.imports\n }\n }\n },\n });\n\n if (rscResult.type !== \"success\" || htmlResult.type !== \"success\") {\n console.error('Handler failed for route:', route);\n failedRoutes.set(route, new Error(`Handler failed for ${route}`));\n continue;\n }\n\n // Process both streams\n await Promise.all([\n // Save RSC stream to .rsc file in client directory\n new Promise<void>((resolve, reject) => {\n const chunks: Buffer[] = [];\n const rscTransform = new Transform({\n transform(chunk, _encoding, callback) {\n try {\n chunks.push(Buffer.from(chunk));\n callback(null, chunk);\n } catch (error) {\n callback(error as Error);\n }\n },\n flush(callback) {\n try {\n const rscPath = join(options.pluginOptions.build.outDir, options.pluginOptions.build.client, route, 'index.rsc');\n \n // Ensure directory exists\n mkdirSync(dirname(rscPath), { recursive: true });\n \n // Write complete file\n writeFile(rscPath, Buffer.concat(chunks))\n .then(() => {\n callback();\n resolve();\n })\n .catch(error => {\n console.error('RSC write error:', error);\n callback(error as Error);\n reject(error);\n });\n } catch (error) {\n callback(error as Error);\n reject(error);\n }\n }\n });\n\n rscResult.stream.pipe(rscTransform);\n }),\n\n // Send HTML stream to worker\n new Promise<void>((resolve, reject) => {\n const htmlTransform = new Transform({\n transform(chunk, _encoding, callback) {\n try {\n options.worker.postMessage({\n type: \"RSC_CHUNK\",\n id: route,\n chunk: chunk.toString(),\n moduleRootPath: join(root, options.pluginOptions.build.outDir, options.pluginOptions.build.client),\n moduleBaseURL: options.moduleBaseURL,\n htmlOutputPath: join(options.pluginOptions.build.outDir, options.pluginOptions.build.client, route, 'index.html'),\n pipableStreamOptions: options.pipableStreamOptions,\n });\n callback(null, chunk);\n } catch (error) {\n callback(error as Error);\n }\n },\n flush(callback) {\n options.worker.postMessage({\n type: \"RSC_END\",\n id: route,\n });\n callback();\n resolve();\n }\n });\n\n htmlResult.stream.pipe(htmlTransform);\n })\n ]);\n }\n\n await allRoutesComplete;\n\n } catch (error) {\n console.error('Render error:', error);\n throw error;\n }\n\n return { failedRoutes, completedRoutes };\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"renderPages.js","sources":["../../../../plugin/worker/html/renderPages.ts"],"sourcesContent":["import { mkdirSync } from \"node:fs\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join, resolve as resolvePath } from \"node:path\";\nimport { Transform } from \"node:stream\";\nimport type { Worker } from \"node:worker_threads\";\nimport { createHandler } from \"../../react-server/createHandler.js\";\nimport type { CheckFilesExistReturn, ResolvedUserConfig, ResolvedUserOptions } from \"../../types.js\";\nimport type {\n HtmlWorkerResponse,\n WorkerRscChunkMessage,\n} from \"../types.js\";\nimport type { Manifest } from \"vite\";\nimport type {\n PluginContext,\n} from \"rollup\";\nimport React from \"react\";\nimport { collectManifestCss } from \"../../collect-css-manifest.js\";\n\ninterface PipeableStreamOptions {\n bootstrapModules?: string[];\n bootstrapScripts?: string[];\n bootstrapScriptContent?: string;\n signal?: AbortSignal;\n identifierPrefix?: string;\n namespaceURI?: string;\n nonce?: string;\n progressiveChunkSize?: number;\n onShellReady?: () => void;\n onAllReady?: () => void;\n onError?: (error: unknown) => void;\n importMap?: {\n imports?: Record<string, string>;\n };\n}\n\ntype RenderPagesOptions = {\n pluginOptions: ResolvedUserOptions;\n userConfig: ResolvedUserConfig;\n clientManifest: Manifest;\n serverManifest: Manifest;\n worker: Worker;\n pipableStreamOptions?: PipeableStreamOptions;\n loader: (id: string) => Promise<Record<string, any>>;\n onCssFile?: (url: string, parentUrl: string) => void;\n clientCss?: string[];\n moduleBasePath: string;\n moduleBaseURL: string;\n};\n\nexport async function renderPages(\n pluginContext: PluginContext,\n routes: string[],\n files: CheckFilesExistReturn,\n options: RenderPagesOptions,\n) {\n const root = pluginContext.environment.config.root;\n const outDir = pluginContext.environment.config.build.outDir;\n const failedRoutes = new Map<string, Error>();\n const completedRoutes = new Set<string>();\n const writePromises = new Map<string, Promise<void>>();\n const clientCss = options.clientCss ?? [];\n try {\n // Set up worker message handling\n const allRoutesComplete = new Promise<void>((resolve, reject) => {\n options.worker.on(\"message\", (msg: HtmlWorkerResponse) => {\n switch (msg.type) {\n case \"ALL_READY\": {\n const { id, html, outputPath } = msg;\n mkdirSync(dirname(outputPath), { recursive: true });\n \n writeFile(outputPath, html)\n .then(() => {\n completedRoutes.add(id);\n if (completedRoutes.size === routes.length) {\n resolve();\n }\n })\n .catch((error) => {\n console.error('Write error for route:', id, error);\n failedRoutes.set(id, error as Error);\n reject(error);\n });\n break;\n }\n case \"ERROR\": {\n console.error('Worker error for route:', msg.id, msg.error);\n failedRoutes.set(msg.id, new Error(msg.error));\n reject(new Error(msg.error));\n break;\n }\n }\n });\n });\n\n const newCssFiles = collectManifestCss(\n options.clientManifest,\n options.moduleBasePath,\n 'index.html',\n (url, parentUrl)=>{\n options?.onCssFile?.(url, parentUrl);\n if(!clientCss.includes(url)){\n clientCss.push(url);\n }\n },\n join(root, options.pluginOptions.build.outDir, options.pluginOptions.build.client)\n );\n\n // Process routes sequentially\n for (const route of routes) {\n const routeFiles = files.urlMap.get(route);\n if (!routeFiles) {\n console.error('No files found for route:', route);\n failedRoutes.set(route, new Error(`No files found for ${route}`));\n continue;\n }\n\n collectManifestCss(\n options.serverManifest,\n options.moduleBasePath,\n routeFiles.page,\n (url, parentUrl)=>{\n options.onCssFile?.(url, parentUrl);\n if(!clientCss.includes(url)){\n clientCss.push(url);\n }\n }\n );\n // Create handler for pure RSC output\n const rscResult = await createHandler(route, {\n ...options.pluginOptions,\n Html: React.Fragment // Use Fragment for pure RSC output\n }, {\n loader: options.loader,\n clientManifest: options.clientManifest,\n serverManifest: options.serverManifest,\n cssFiles: Array.from(newCssFiles.values()).concat(clientCss),\n pipableStreamOptions: {\n ...options.pipableStreamOptions,\n importMap: {\n imports: {\n ...options.pipableStreamOptions?.importMap?.imports,\n }\n }\n },\n });\n\n // Create handler for HTML output\n const htmlResult = await createHandler(route, options.pluginOptions, {\n loader: options.loader,\n clientManifest: options.clientManifest,\n serverManifest: options.serverManifest,\n cssFiles: clientCss,\n pipableStreamOptions: {\n ...options.pipableStreamOptions,\n importMap: {\n imports: {\n ...options.pipableStreamOptions?.importMap?.imports\n }\n }\n },\n });\n\n if (rscResult.type !== \"success\" || htmlResult.type !== \"success\") {\n console.error('Handler failed for route:', route);\n failedRoutes.set(route, new Error(`Handler failed for ${route}`));\n continue;\n }\n\n // Process both streams\n await Promise.all([\n // Save RSC stream to .rsc file in client directory\n new Promise<void>((resolve, reject) => {\n const chunks: Buffer[] = [];\n const rscTransform = new Transform({\n transform(chunk, _encoding, callback) {\n try {\n chunks.push(Buffer.from(chunk));\n callback(null, chunk);\n } catch (error) {\n callback(error as Error);\n }\n },\n flush(callback) {\n try {\n const rscPath = join(options.pluginOptions.build.outDir, options.pluginOptions.build.client, route, 'index.rsc');\n \n // Ensure directory exists\n mkdirSync(dirname(rscPath), { recursive: true });\n \n // Write complete file\n writeFile(rscPath, Buffer.concat(chunks))\n .then(() => {\n callback();\n resolve();\n })\n .catch(error => {\n console.error('RSC write error:', error);\n callback(error as Error);\n reject(error);\n });\n } catch (error) {\n callback(error as Error);\n reject(error);\n }\n }\n });\n\n rscResult.stream.pipe(rscTransform);\n }),\n\n // Send HTML stream to worker\n new Promise<void>((resolve, reject) => {\n const htmlTransform = new Transform({\n transform(chunk, _encoding, callback) {\n try {\n options.worker.postMessage({\n type: \"RSC_CHUNK\",\n id: route,\n chunk: chunk.toString(),\n moduleRootPath: join(root, options.pluginOptions.build.outDir, options.pluginOptions.build.client),\n moduleBaseURL: options.moduleBaseURL,\n htmlOutputPath: join(options.pluginOptions.build.outDir, options.pluginOptions.build.client, route, 'index.html'),\n pipableStreamOptions: options.pipableStreamOptions,\n });\n callback(null, chunk);\n } catch (error) {\n callback(error as Error);\n }\n },\n flush(callback) {\n options.worker.postMessage({\n type: \"RSC_END\",\n id: route,\n });\n callback();\n resolve();\n }\n });\n\n htmlResult.stream.pipe(htmlTransform);\n })\n ]);\n }\n\n await allRoutesComplete;\n\n } catch (error) {\n console.error('Render error:', error);\n throw error;\n }\n\n return { failedRoutes, completedRoutes };\n}\n"],"names":["React"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/rsc/messageHandler.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAoCrB,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,iBA6F7D"}
1
+ {"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/rsc/messageHandler.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,aAAa,CAAC;AA8BrB,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,iBA8F7D"}
@@ -3,15 +3,13 @@
3
3
  * Copyright (c) Nico Brinkkemper
4
4
  * MIT License
5
5
  */
6
- import 'node:fs';
7
- import 'node:fs/promises';
8
6
  import { join } from 'node:path';
9
- import { parentPort } from 'node:worker_threads';
10
7
  import { PassThrough } from 'node:stream';
8
+ import { parentPort } from 'node:worker_threads';
9
+ import React__default from 'react';
11
10
  import { renderToPipeableStream } from 'react-server-dom-esm/server.node';
12
11
  import { createLogger } from '../../utils/logger.js';
13
12
  import { cssFiles, addCssFile } from './state.js';
14
- import React__default from 'react';
15
13
 
16
14
  const log = createLogger("rsc-worker");
17
15
  function CssCollector({
@@ -52,6 +50,7 @@ async function messageHandler(message) {
52
50
  moduleBaseURL,
53
51
  {
54
52
  onError: (error) => {
53
+ console.log("onError", error);
55
54
  log.error(`Stream error at ${id}:`, error);
56
55
  parentPort?.postMessage({
57
56
  type: "ERROR",
@@ -1 +1 @@
1
- {"version":3,"file":"messageHandler.js","sources":["../../../../plugin/worker/rsc/messageHandler.tsx"],"sourcesContent":["import { createWriteStream } from \"node:fs\";\nimport { mkdir } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { parentPort } from \"node:worker_threads\";\nimport { PassThrough } from \"node:stream\";\nimport {\n renderToPipeableStream,\n // @ts-ignore\n} from \"react-server-dom-esm/server.node\";\nimport type {\n RscChunkMessage,\n RscEndMessage,\n RscWorkerMessage,\n} from \"../types.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport {\n cssFiles,\n clientFiles,\n serverActionFiles,\n addCssFile,\n clearCssFiles,\n} from \"./state.js\";\nimport type { WriteStream } from \"node:fs\";\nimport React from \"react\";\n\nconst log = createLogger(\"rsc-worker\");\n\n// CSS collector component\nfunction CssCollector({\n children,\n cssFiles,\n}: {\n children: React.ReactNode;\n cssFiles: Map<string, string>;\n}) {\n return (\n <>\n {Array.from(cssFiles.entries()).map(([id, css]) => {\n return (\n <style key={id} data-source={id}>\n {css}\n </style>\n );\n })}\n {children}\n </>\n );\n}\n\nexport async function messageHandler(message: RscWorkerMessage) {\n\n if (message.type === \"RSC_RENDER\") {\n const {\n id,\n pageImport,\n propsImport,\n pageExportName,\n propsExportName,\n url,\n outDir,\n projectRoot,\n moduleBaseURL,\n moduleBasePath,\n pipableStreamOptions,\n } = message;\n\n try {\n // Load modules which will trigger CSS loading\n const [Component, propsModule] = await Promise.all([\n import(join(projectRoot, pageImport)),\n import(join(projectRoot, propsImport)),\n ]);\n\n const propsAtExport = propsModule[propsExportName];\n const props = await Promise.resolve(\n typeof propsAtExport === \"function\" ? propsAtExport(url) : propsAtExport\n );\n\n const PageComponent = Component[pageExportName];\n // Now render with collected CSS\n const stream = renderToPipeableStream(\n <CssCollector cssFiles={cssFiles}>\n <PageComponent {...props} />\n </CssCollector>,\n moduleBaseURL,\n {\n onError: (error: Error) => {\n log.error(`Stream error at ${id}:`, error);\n parentPort?.postMessage({\n type: \"ERROR\",\n id,\n error: error instanceof Error ? error.message : String(error),\n });\n },\n onPostpone: log?.info ?? console.info,\n environmentName: \"Server\",\n importMap: {\n imports: {\n ...pipableStreamOptions?.importMap?.imports,\n \"/\": moduleBasePath,\n },\n },\n ...pipableStreamOptions,\n }\n );\n\n // Listen for data and end events\n const passThrough = new PassThrough();\n\n stream.pipe(passThrough);\n\n passThrough.on(\"data\", (chunk) => {\n // Send to parent\n parentPort?.postMessage({\n type: \"RSC_CHUNK\",\n id,\n chunk: chunk.toString(),\n moduleRootPath: moduleBasePath,\n moduleBaseURL,\n outDir,\n rscOutputPath: `${outDir}/${id}.rsc`,\n cssFiles: Array.from(cssFiles.entries()),\n } satisfies RscChunkMessage);\n });\n\n passThrough.on(\"end\", () => {\n parentPort?.postMessage({\n type: \"RSC_END\",\n id,\n } satisfies RscEndMessage);\n });\n } catch (error) {\n console.trace(error);\n parentPort?.postMessage({\n type: \"ERROR\",\n id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n } else if (message.type === \"CSS_FILE\") {\n addCssFile(message.id, message.cssFile);\n }\n}\n"],"names":["cssFiles","React"],"mappings":"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"}
1
+ {"version":3,"file":"messageHandler.js","sources":["../../../../plugin/worker/rsc/messageHandler.tsx"],"sourcesContent":["import { join } from \"node:path\";\nimport { PassThrough } from \"node:stream\";\nimport { parentPort } from \"node:worker_threads\";\nimport React from \"react\";\nimport {\n renderToPipeableStream,\n // @ts-ignore\n} from \"react-server-dom-esm/server.node\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport type {\n RscChunkMessage,\n RscEndMessage,\n RscWorkerMessage,\n} from \"../types.js\";\nimport {\n addCssFile,\n cssFiles\n} from \"./state.js\";\n\nconst log = createLogger(\"rsc-worker\");\n\n// CSS collector component\nfunction CssCollector({\n children,\n cssFiles,\n}: {\n children: React.ReactNode;\n cssFiles: Map<string, string>;\n}) {\n return (\n <>\n {Array.from(cssFiles.entries()).map(([id, css]) => {\n return (\n <style key={id} data-source={id}>\n {css}\n </style>\n );\n })}\n {children}\n </>\n );\n}\n\nexport async function messageHandler(message: RscWorkerMessage) {\n\n if (message.type === \"RSC_RENDER\") {\n const {\n id,\n pageImport,\n propsImport,\n pageExportName,\n propsExportName,\n url,\n outDir,\n projectRoot,\n moduleBaseURL,\n moduleBasePath,\n pipableStreamOptions,\n } = message;\n\n try {\n // Load modules which will trigger CSS loading\n const [Component, propsModule] = await Promise.all([\n import(join(projectRoot, pageImport)),\n import(join(projectRoot, propsImport)),\n ]);\n\n const propsAtExport = propsModule[propsExportName];\n const props = await Promise.resolve(\n typeof propsAtExport === \"function\" ? propsAtExport(url) : propsAtExport\n );\n\n const PageComponent = Component[pageExportName];\n // Now render with collected CSS\n const stream = renderToPipeableStream(\n <CssCollector cssFiles={cssFiles}>\n <PageComponent {...props} />\n </CssCollector>,\n moduleBaseURL,\n {\n onError: (error: Error) => {\n console.log('onError', error);\n log.error(`Stream error at ${id}:`, error);\n parentPort?.postMessage({\n type: \"ERROR\",\n id,\n error: error instanceof Error ? error.message : String(error),\n });\n },\n onPostpone: log?.info ?? console.info,\n environmentName: \"Server\",\n importMap: {\n imports: {\n ...pipableStreamOptions?.importMap?.imports,\n \"/\": moduleBasePath,\n },\n },\n ...pipableStreamOptions,\n }\n );\n\n // Listen for data and end events\n const passThrough = new PassThrough();\n\n stream.pipe(passThrough);\n\n passThrough.on(\"data\", (chunk) => {\n // Send to parent\n parentPort?.postMessage({\n type: \"RSC_CHUNK\",\n id,\n chunk: chunk.toString(),\n moduleRootPath: moduleBasePath,\n moduleBaseURL,\n outDir,\n rscOutputPath: `${outDir}/${id}.rsc`,\n cssFiles: Array.from(cssFiles.entries()),\n } satisfies RscChunkMessage);\n });\n\n passThrough.on(\"end\", () => {\n parentPort?.postMessage({\n type: \"RSC_END\",\n id,\n } satisfies RscEndMessage);\n });\n } catch (error) {\n console.trace(error);\n parentPort?.postMessage({\n type: \"ERROR\",\n id,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n } else if (message.type === \"CSS_FILE\") {\n addCssFile(message.id, message.cssFile);\n }\n}\n"],"names":["cssFiles","React"],"mappings":"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"}