vite-plugin-react-server 0.3.17 → 0.3.19

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 (208) hide show
  1. package/README.md +119 -118
  2. package/bin/patch.mjs +8 -2
  3. package/dist/package.json +3 -3
  4. package/dist/plugin/checkFilesExist.d.ts.map +1 -1
  5. package/dist/plugin/checkFilesExist.js +6 -2
  6. package/dist/plugin/checkFilesExist.js.map +1 -1
  7. package/dist/plugin/collect-manifest-client-files.d.ts +23 -0
  8. package/dist/plugin/collect-manifest-client-files.d.ts.map +1 -0
  9. package/dist/plugin/collect-manifest-client-files.js +117 -0
  10. package/dist/plugin/collect-manifest-client-files.js.map +1 -0
  11. package/dist/plugin/components.d.ts +9 -9
  12. package/dist/plugin/components.d.ts.map +1 -1
  13. package/dist/plugin/components.js +50 -9
  14. package/dist/plugin/components.js.map +1 -0
  15. package/dist/plugin/config/defaults.d.ts +7 -6
  16. package/dist/plugin/config/defaults.d.ts.map +1 -1
  17. package/dist/plugin/config/defaults.js +8 -5
  18. package/dist/plugin/config/defaults.js.map +1 -1
  19. package/dist/plugin/config/getPaths.d.ts +0 -1
  20. package/dist/plugin/config/getPaths.d.ts.map +1 -1
  21. package/dist/plugin/config/getPaths.js +2 -7
  22. package/dist/plugin/config/getPaths.js.map +1 -1
  23. package/dist/plugin/config/mimeTypes.d.ts +2 -0
  24. package/dist/plugin/config/mimeTypes.d.ts.map +1 -0
  25. package/dist/plugin/config/mimeTypes.js +24 -0
  26. package/dist/plugin/config/mimeTypes.js.map +1 -0
  27. package/dist/plugin/config/resolveOptions.d.ts +1 -1
  28. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  29. package/dist/plugin/config/resolveOptions.js +41 -28
  30. package/dist/plugin/config/resolveOptions.js.map +1 -1
  31. package/dist/plugin/config/resolvePages.d.ts +1 -0
  32. package/dist/plugin/config/resolvePages.d.ts.map +1 -1
  33. package/dist/plugin/config/resolvePages.js +9 -5
  34. package/dist/plugin/config/resolvePages.js.map +1 -1
  35. package/dist/plugin/config/resolveUserConfig.d.ts +2 -1
  36. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  37. package/dist/plugin/config/resolveUserConfig.js +12 -7
  38. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  39. package/dist/plugin/copy-dir.js +23 -18
  40. package/dist/plugin/copy-dir.js.map +1 -0
  41. package/dist/plugin/helpers/createHandler.d.ts +22 -0
  42. package/dist/plugin/helpers/createHandler.d.ts.map +1 -0
  43. package/dist/plugin/{react-server → helpers}/createHandler.js +36 -48
  44. package/dist/plugin/helpers/createHandler.js.map +1 -0
  45. package/dist/plugin/{react-server → helpers}/createRscStream.d.ts +2 -1
  46. package/dist/plugin/helpers/createRscStream.d.ts.map +1 -0
  47. package/dist/plugin/helpers/createRscStream.js +71 -0
  48. package/dist/plugin/helpers/createRscStream.js.map +1 -0
  49. package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
  50. package/dist/plugin/helpers/getBundleManifest.js +12 -4
  51. package/dist/plugin/helpers/getBundleManifest.js.map +1 -1
  52. package/dist/plugin/loader/createBuildLoader.d.ts +1 -1
  53. package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
  54. package/dist/plugin/loader/createBuildLoader.js +8 -5
  55. package/dist/plugin/loader/createBuildLoader.js.map +1 -1
  56. package/dist/plugin/loader/css-loader.d.ts.map +1 -1
  57. package/dist/plugin/loader/css-loader.js.map +1 -1
  58. package/dist/plugin/loader/react-loader.js +2 -2
  59. package/dist/plugin/loader/react-loader.js.map +1 -1
  60. package/dist/plugin/preserver/plugin.d.ts.map +1 -1
  61. package/dist/plugin/preserver/plugin.js +49 -14
  62. package/dist/plugin/preserver/plugin.js.map +1 -1
  63. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  64. package/dist/plugin/react-client/plugin.js +18 -60
  65. package/dist/plugin/react-client/plugin.js.map +1 -1
  66. package/dist/plugin/react-server/index.d.ts.map +1 -1
  67. package/dist/plugin/react-server/index.js +2 -0
  68. package/dist/plugin/react-server/index.js.map +1 -1
  69. package/dist/plugin/react-server/plugin.d.ts +2 -1
  70. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  71. package/dist/plugin/react-server/plugin.js +53 -219
  72. package/dist/plugin/react-server/plugin.js.map +1 -1
  73. package/dist/plugin/react-static/index.d.ts +2 -0
  74. package/dist/plugin/react-static/index.d.ts.map +1 -0
  75. package/dist/plugin/react-static/index.js +1 -0
  76. package/dist/plugin/react-static/plugin.d.ts +7 -0
  77. package/dist/plugin/react-static/plugin.d.ts.map +1 -0
  78. package/dist/plugin/react-static/plugin.js +199 -0
  79. package/dist/plugin/react-static/plugin.js.map +1 -0
  80. package/dist/plugin/resolvePage.d.ts.map +1 -1
  81. package/dist/plugin/resolvePage.js +9 -0
  82. package/dist/plugin/resolvePage.js.map +1 -1
  83. package/dist/plugin/root.d.ts +2 -0
  84. package/dist/plugin/root.d.ts.map +1 -0
  85. package/dist/plugin/root.js +12 -0
  86. package/dist/plugin/root.js.map +1 -0
  87. package/dist/plugin/transformer/plugin.d.ts.map +1 -1
  88. package/dist/plugin/transformer/plugin.js +32 -23
  89. package/dist/plugin/transformer/plugin.js.map +1 -1
  90. package/dist/plugin/transformer/types.d.ts +1 -18
  91. package/dist/plugin/transformer/types.d.ts.map +1 -1
  92. package/dist/plugin/types.d.ts +24 -6
  93. package/dist/plugin/types.d.ts.map +1 -1
  94. package/dist/plugin/worker/createWorker.js +0 -1
  95. package/dist/plugin/worker/createWorker.js.map +1 -1
  96. package/dist/plugin/worker/html/html-worker.development.d.ts +30 -0
  97. package/dist/plugin/worker/html/html-worker.development.d.ts.map +1 -1
  98. package/dist/plugin/worker/html/html-worker.development.js +30 -2
  99. package/dist/plugin/worker/html/html-worker.development.js.map +1 -1
  100. package/dist/plugin/worker/html/html-worker.production.js +3 -5
  101. package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
  102. package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
  103. package/dist/plugin/worker/html/messageHandler.js +8 -2
  104. package/dist/plugin/worker/html/messageHandler.js.map +1 -1
  105. package/dist/plugin/worker/html/plugin.d.ts.map +1 -1
  106. package/dist/plugin/worker/html/plugin.js +2 -3
  107. package/dist/plugin/worker/html/renderPages.d.ts +8 -4
  108. package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
  109. package/dist/plugin/worker/html/renderPages.js +118 -83
  110. package/dist/plugin/worker/html/renderPages.js.map +1 -1
  111. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  112. package/dist/plugin/worker/rsc/messageHandler.js +91 -87
  113. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  114. package/dist/plugin/worker/rsc/plugin.d.ts.map +1 -1
  115. package/dist/plugin/worker/rsc/plugin.js +1 -2
  116. package/dist/plugin/worker/rsc/rsc-worker.development.js +13 -18
  117. package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
  118. package/dist/plugin/worker/rsc/rsc-worker.production.js +4 -1
  119. package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -1
  120. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  121. package/dist/plugin/worker/rsc/state.js.map +1 -1
  122. package/dist/tsconfig.tsbuildinfo +1 -1
  123. package/package.json +3 -3
  124. package/plugin/checkFilesExist.ts +7 -3
  125. package/plugin/collect-manifest-client-files.ts +152 -0
  126. package/plugin/components.tsx +55 -10
  127. package/plugin/config/defaults.tsx +69 -0
  128. package/plugin/config/getPaths.ts +1 -7
  129. package/plugin/config/mimeTypes.ts +17 -0
  130. package/plugin/config/resolveOptions.ts +48 -40
  131. package/plugin/config/resolvePages.ts +8 -4
  132. package/plugin/config/resolveUserConfig.ts +14 -11
  133. package/plugin/{react-server → helpers}/createHandler.ts +46 -63
  134. package/plugin/helpers/createRscStream.ts +81 -0
  135. package/plugin/helpers/getBundleManifest.ts +14 -5
  136. package/plugin/loader/createBuildLoader.ts +9 -6
  137. package/plugin/loader/css-loader.ts +0 -2
  138. package/plugin/loader/react-loader.ts +2 -2
  139. package/plugin/preserver/plugin.ts +64 -17
  140. package/plugin/react-client/plugin.ts +20 -74
  141. package/plugin/react-server/index.ts +2 -0
  142. package/plugin/react-server/plugin.ts +66 -298
  143. package/plugin/react-static/index.ts +1 -0
  144. package/plugin/react-static/plugin.ts +247 -0
  145. package/plugin/resolvePage.ts +9 -0
  146. package/plugin/root.ts +4 -0
  147. package/plugin/transformer/plugin.ts +40 -31
  148. package/plugin/transformer/types.ts +0 -19
  149. package/plugin/types.ts +25 -6
  150. package/plugin/worker/createWorker.ts +1 -1
  151. package/plugin/worker/html/README.md +63 -0
  152. package/plugin/worker/html/html-worker.development.tsx +89 -2
  153. package/plugin/worker/html/html-worker.production.tsx +8 -10
  154. package/plugin/worker/html/messageHandler.ts +8 -2
  155. package/plugin/worker/html/plugin.ts +2 -3
  156. package/plugin/worker/html/renderPages.ts +150 -114
  157. package/plugin/worker/rsc/README.md +58 -0
  158. package/plugin/worker/rsc/messageHandler.tsx +98 -119
  159. package/plugin/worker/rsc/plugin.ts +1 -2
  160. package/plugin/worker/rsc/rsc-worker.development.ts +12 -22
  161. package/plugin/worker/rsc/rsc-worker.production.ts +5 -1
  162. package/plugin/worker/rsc/state.ts +0 -3
  163. package/scripts/react+0.0.0-experimental-eda36a1c-20250228.patch +114 -12
  164. package/scripts/react-dom+0.0.0-experimental-eda36a1c-20250228.patch +10571 -121
  165. package/tsconfig.json +2 -2
  166. package/dist/plugin/collect-css-manifest.d.ts +0 -4
  167. package/dist/plugin/collect-css-manifest.d.ts.map +0 -1
  168. package/dist/plugin/collect-css-manifest.js +0 -66
  169. package/dist/plugin/collect-css-manifest.js.map +0 -1
  170. package/dist/plugin/config/createModuleIdGenerator.d.ts +0 -11
  171. package/dist/plugin/config/createModuleIdGenerator.d.ts.map +0 -1
  172. package/dist/plugin/config/createModuleIdGenerator.js +0 -44
  173. package/dist/plugin/config/createModuleIdGenerator.js.map +0 -1
  174. package/dist/plugin/loader/createCssLoader.d.ts +0 -30
  175. package/dist/plugin/loader/createCssLoader.d.ts.map +0 -1
  176. package/dist/plugin/loader/createCssLoader.js +0 -35
  177. package/dist/plugin/loader/createPageLoader.d.ts +0 -24
  178. package/dist/plugin/loader/createPageLoader.d.ts.map +0 -1
  179. package/dist/plugin/loader/createPageLoader.js +0 -50
  180. package/dist/plugin/loader/rsc/messageHandler.d.ts +0 -2
  181. package/dist/plugin/loader/rsc/messageHandler.d.ts.map +0 -1
  182. package/dist/plugin/loader/rsc/messageHandler.js +0 -1
  183. package/dist/plugin/loader/rsc/rsc-worker.development.d.ts +0 -2
  184. package/dist/plugin/loader/rsc/rsc-worker.development.d.ts.map +0 -1
  185. package/dist/plugin/loader/rsc/rsc-worker.development.js +0 -1
  186. package/dist/plugin/react-server/createHandler.d.ts +0 -17
  187. package/dist/plugin/react-server/createHandler.d.ts.map +0 -1
  188. package/dist/plugin/react-server/createHandler.js.map +0 -1
  189. package/dist/plugin/react-server/createRscStream.d.ts.map +0 -1
  190. package/dist/plugin/react-server/createRscStream.js +0 -66
  191. package/dist/plugin/react-server/createRscStream.js.map +0 -1
  192. package/dist/plugin/react-server/createSsrHandler.d.ts +0 -4
  193. package/dist/plugin/react-server/createSsrHandler.d.ts.map +0 -1
  194. package/dist/plugin/react-server/createSsrHandler.js +0 -95
  195. package/dist/plugin/utils/logger.d.ts +0 -9
  196. package/dist/plugin/utils/logger.d.ts.map +0 -1
  197. package/dist/plugin/utils/logger.js +0 -68
  198. package/dist/plugin/utils/logger.js.map +0 -1
  199. package/plugin/collect-css-manifest.ts +0 -83
  200. package/plugin/config/createModuleIdGenerator.ts +0 -52
  201. package/plugin/config/defaults.ts +0 -51
  202. package/plugin/loader/createCssLoader.ts +0 -73
  203. package/plugin/loader/createPageLoader.ts +0 -103
  204. package/plugin/loader/rsc/messageHandler.tsx +0 -1
  205. package/plugin/loader/rsc/rsc-worker.development.ts +0 -1
  206. package/plugin/react-server/createRscStream.ts +0 -82
  207. package/plugin/react-server/createSsrHandler.ts +0 -125
  208. package/plugin/utils/logger.ts +0 -52
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type Manifest, type Plugin, type ResolvedConfig } from \"vite\";\nimport type {\n CheckFilesExistReturn,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\nimport { createInputNormalizer } from \"../helpers/inputNormalizer.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport type { Worker } from \"node:worker_threads\";\nimport { getPluginRoot } from \"../config/getPaths.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport type {\n RscRenderMessage,\n RscWorkerMessage,\n RscWorkerResponse,\n} from \"../worker/types.js\";\nimport { createLogger } from \"../utils/logger.js\";\n\nconst log = createLogger(\"react-client\");\nlet userOptions: ResolvedUserOptions;\nlet userConfig: ResolvedUserConfig;\nlet clientManifest: Manifest = {};\nlet resolvedConfig: ResolvedConfig;\nlet root: string;\nlet loader: (id: string) => Promise<Record<string, any>> = (id: string) =>\n import(id);\nlet worker: Worker;\nlet files: CheckFilesExistReturn;\n\nexport function reactClientPlugin(options: StreamPluginOptions): Plugin {\n const resolvedOptions = resolveOptions(options, true);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n const rscWorkerPath = join(getPluginRoot(), DEFAULT_CONFIG.RSC_WORKER_PATH);\n\n log.info(\"RSC worker path:\" + rscWorkerPath);\n\n return {\n name: \"vite:react-client\",\n\n async config(config, configEnv) {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n console.log(\"[vite:react-client] Root updated:\", root);\n }\n if (configEnv.command === \"serve\" && !configEnv.isPreview && !worker) {\n worker = await createWorker({\n projectRoot: root,\n workerPath: rscWorkerPath,\n reverseCondition: true,\n });\n }\n const pages = await resolvePages(userOptions.build.pages);\n if (pages.type === \"error\") {\n throw pages.error;\n }\n\n if (pages.pages.length > 0) {\n files = await checkFilesExist(pages.pages, userOptions, root);\n } else {\n files = {\n pageMap: new Map(),\n propsMap: new Map(),\n propsSet: new Set(),\n pageSet: new Set(),\n urlMap: new Map(),\n errors: [],\n };\n }\n\n const resolvedConfig = resolveUserConfig({\n isClient: true,\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 userConfig;\n },\n\n configResolved(config) {\n resolvedConfig = config;\n },\n\n async generateBundle(options, bundle) {\n // Create manifest entries for each chunk\n clientManifest = getBundleManifest({\n pluginContext: this,\n bundle,\n moduleBase: userOptions.moduleBase,\n preserveModulesRoot: userOptions.build.preserveModulesRoot,\n });\n\n // Write manifest immediately after generation\n const manifestPath = join(\n root,\n resolvedConfig.environments[\"client\"].build.outDir as string,\n resolvedConfig.environments[\"client\"].build.manifest as string\n );\n await mkdir(dirname(manifestPath), { recursive: true });\n\n return await writeFile(\n manifestPath,\n JSON.stringify(clientManifest, null, 2)\n );\n },\n\n async configurePreviewServer(server) {\n if (root !== server.config.root) {\n root = server.config.root;\n }\n if (typeof loader !== \"function\") {\n loader = (id: string) => import(id);\n }\n const normalize = createInputNormalizer({\n root,\n removeExtension: false,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n });\n server.middlewares.use(async (req, res, next) => {\n const [key, value] = normalize(req.url);\n const fileRoot = key.startsWith(\"node_modules\")\n ? root\n : join(root, userOptions.build.outDir, userOptions.build.client);\n if (value.endsWith(\".js\")) {\n try {\n const stats = await stat(join(fileRoot, value));\n if (stats.isFile()) {\n const content = await readFile(join(fileRoot, value), \"utf-8\");\n res.setHeader(\"Content-Type\", \"application/javascript\");\n res.end(content);\n return;\n } else {\n next();\n }\n } catch (error) {\n const { manifest: clientManifest } = tryManifest({\n root,\n outDir: join(userOptions.build.outDir, userOptions.build.client),\n });\n const { manifest: serverManifest } = tryManifest({\n root,\n outDir: join(userOptions.build.outDir, userOptions.build.server),\n });\n if (clientManifest && value in clientManifest) {\n res.setHeader(\"Content-Type\", \"application/javascript\");\n res.end(clientManifest[value]);\n return;\n } else if (serverManifest && value in serverManifest) {\n res.setHeader(\"Content-Type\", \"application/javascript\");\n res.end(serverManifest[value]);\n return;\n }\n const foundClient =\n clientManifest &&\n Object.entries(clientManifest).find(\n ([key, value]) =>\n value === key ||\n value === value.file ||\n value === value.src ||\n value === value.name\n );\n if (foundClient) {\n res.setHeader(\"Content-Type\", \"application/javascript\");\n res.end(foundClient);\n }\n const foundServer =\n serverManifest &&\n Object.entries(serverManifest).find(\n ([key, value]) =>\n value === key ||\n value === value.file ||\n value === value.src ||\n value === value.name\n );\n\n if (foundServer) {\n res.setHeader(\"Content-Type\", \"application/javascript\");\n res.end(foundServer);\n return;\n }\n next();\n }\n } else {\n next();\n }\n });\n },\n // setup dev server\n async configureServer(server) {\n if (typeof loader !== \"function\") {\n loader = server.ssrLoadModule;\n }\n if (!worker) {\n log.info(\"Creating RSC worker...\");\n worker = await createWorker({\n projectRoot: root,\n workerPath: rscWorkerPath,\n condition: \"react-client\",\n });\n log.info(\"RSC worker created\");\n }\n const normalize = createInputNormalizer({\n root,\n removeExtension: false,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n });\n server.middlewares.use(async (req, res, next) => {\n if (!req.url) {\n next();\n return;\n }\n if (\n req.url.endsWith(\".rsc\") ||\n req.headers.accept?.includes(\"text/x-component\")\n ) {\n try {\n const path = req.url?.includes(\"index.rsc\")\n ? req.url.replace(\"index.rsc\", \"\")\n : req.url?.replace(\".rsc\", \"\");\n let [key, value] = normalize(path);\n\n let pageImport = DEFAULT_CONFIG.PAGE as string;\n let propsImport = DEFAULT_CONFIG.PROPS as string;\n // PAGE\n // no trailing slash\n const pathNoTrailing = path?.replace(/\\/$/, '');\n if (files.urlMap.has(req.url)) {\n pageImport = files.urlMap.get(req.url)!.page;\n propsImport = files.urlMap.get(req.url)!.props;\n } else if (files.urlMap.has(pathNoTrailing)) {\n pageImport = files.urlMap.get(pathNoTrailing)!.page;\n propsImport = files.urlMap.get(pathNoTrailing)!.props;\n } else if (files.urlMap.has(path)) {\n pageImport = files.urlMap.get(path)!.page;\n propsImport = files.urlMap.get(path)!.props;\n } else if (files.urlMap.has(value)) {\n pageImport = files.urlMap.get(value)!.page;\n propsImport = files.urlMap.get(value)!.props;\n } else if (files.urlMap.has(key)) {\n pageImport = files.urlMap.get(key)!.page;\n propsImport = files.urlMap.get(key)!.props;\n } else {\n console.warn(`Page/props import not found for any of the following (in order of priority): ${[req.url, pathNoTrailing, path, value, key].filter(Boolean).join(', ')} available pages:${Array.from(files.urlMap.keys()).join(', ')}`);\n }\n // Set headers early\n res.setHeader(\"Content-Type\", \"text/x-component\");\n res.setHeader(\"Transfer-Encoding\", \"chunked\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n let hasError = false;\n const timeout = setTimeout(() => {\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(\"RSC render timeout\");\n }\n }, 5000);\n\n const messageHandler = (\n message: RscWorkerMessage | RscWorkerResponse\n ) => {\n try {\n switch (message.type) {\n case \"RSC_CHUNK\":\n // Write chunk directly to response\n if (!hasError) {\n res.write(message.chunk);\n }\n break;\n\n case \"RSC_END\":\n clearTimeout(timeout);\n if (!hasError) {\n res.end();\n }\n worker.off(\"message\", messageHandler);\n break;\n\n case \"ERROR\":\n clearTimeout(timeout);\n log.error(\"Render error\", message);\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(message.error);\n }\n worker.off(\"message\", messageHandler);\n break;\n }\n } catch (error) {\n clearTimeout(timeout);\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(\n error instanceof Error ? error.message : String(error)\n );\n }\n worker.off(\"message\", messageHandler);\n }\n };\n\n worker.on(\"message\", messageHandler);\n worker.once(\"error\", (error) => {\n clearTimeout(timeout);\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(error instanceof Error ? error.message : String(error));\n }\n worker.off(\"message\", messageHandler);\n });\n worker.postMessage({\n type: \"RSC_RENDER\",\n id: value,\n pageImport,\n propsImport,\n url: req.url ?? \"/\",\n pageExportName:\n userOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME,\n propsExportName:\n userOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME,\n outDir: userOptions.build.outDir,\n projectRoot: root,\n moduleRootPath:\n userOptions.build.preserveModulesRoot === true\n ? userOptions.moduleBase\n : \"\",\n moduleBaseURL: ``,\n moduleBasePath: '/',\n pipableStreamOptions: userOptions.pipableStreamOptions,\n cssFiles: []\n } satisfies RscRenderMessage);\n } catch (error) {\n log.error(\"Middleware error:\", error);\n res.statusCode = 500;\n res.end(error instanceof Error ? error.message : String(error));\n }\n } else {\n next();\n }\n });\n },\n };\n}\n"],"names":["resolvedConfig","options","clientManifest","key","value"],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type Manifest, type Plugin, type ResolvedConfig } from \"vite\";\nimport type {\n CheckFilesExistReturn,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\nimport { createInputNormalizer } from \"../helpers/inputNormalizer.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport type { Worker } from \"node:worker_threads\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport type {\n RscRenderMessage,\n RscWorkerMessage,\n RscWorkerResponse,\n} from \"../worker/types.js\";\nimport { MIME_TYPES } from \"../config/mimeTypes.js\";\n\n\nlet userOptions: ResolvedUserOptions;\nlet userConfig: ResolvedUserConfig;\nlet clientManifest: Manifest = {};\nlet resolvedConfig: ResolvedConfig;\nlet root: string;\nlet loader: (id: string) => Promise<Record<string, any>> = (id: string) =>\n import(id);\nlet worker: Worker;\nlet files: CheckFilesExistReturn;\n\nexport function reactClientPlugin(options: StreamPluginOptions): Plugin {\n const resolvedOptions = resolveOptions(options, true);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n\n return {\n name: \"vite:react-client\",\n\n async config(config, configEnv) {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n console.log(\"[vite:react-client] Root updated:\", root);\n }\n if (configEnv.command === \"serve\" && !configEnv.isPreview && !worker) {\n worker = await createWorker({\n projectRoot: root,\n workerPath: userOptions.rscWorkerPath,\n reverseCondition: true,\n });\n }\n const pages = await resolvePages(userOptions.build.pages);\n if (pages.type === \"error\") {\n throw pages.error;\n }\n\n if (pages.pages.length > 0) {\n files = await checkFilesExist(pages.pages, userOptions, root);\n } else {\n files = {\n pageMap: new Map(),\n propsMap: new Map(),\n propsSet: new Set(),\n pageSet: new Set(),\n urlMap: new Map(),\n errors: [],\n };\n }\n\n const resolvedConfig = resolveUserConfig({\n isClient: true,\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 userConfig;\n },\n\n configResolved(config) {\n resolvedConfig = config;\n },\n\n async generateBundle(_options, bundle) {\n // Create manifest entries for each chunk\n clientManifest = getBundleManifest({\n pluginContext: this,\n bundle,\n moduleBase: userOptions.moduleBase,\n preserveModulesRoot: userOptions.build.preserveModulesRoot,\n });\n\n // Write manifest immediately after generation\n const manifestPath = join(\n root,\n resolvedConfig.environments[\"client\"].build.outDir as string,\n resolvedConfig.environments[\"client\"].build.manifest as string\n );\n await mkdir(dirname(manifestPath), { recursive: true });\n\n return await writeFile(\n manifestPath,\n JSON.stringify(clientManifest, null, 2)\n );\n },\n\n async configurePreviewServer(server) {\n if (root !== server.config.root) {\n root = server.config.root;\n }\n if (typeof loader !== \"function\") {\n loader = (id: string) => import(id);\n }\n const normalize = createInputNormalizer({\n root,\n removeExtension: false,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n });\n server.middlewares.use(async (req, res, next) => {\n const [key, value] = normalize(req.url);\n const fileRoot = key.startsWith(\"node_modules\")\n ? root\n : join(root, userOptions.build.outDir, userOptions.build.static);\n try {\n const filePath = join(fileRoot, value);\n const stats = await stat(filePath);\n \n if (stats.isFile()) {\n const ext = value.slice(value.lastIndexOf('.'));\n const contentType = MIME_TYPES[ext] || 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n const content = await readFile(filePath);\n res.end(content);\n return;\n }\n next();\n } catch (error) {\n console.log(\"Error serving static file:\", error);\n next();\n }\n });\n },\n // setup dev server\n async configureServer(server) {\n if (typeof loader !== \"function\") {\n loader = server.ssrLoadModule;\n }\n if (!worker) {\n worker = await createWorker({\n projectRoot: root,\n workerPath: userOptions.rscWorkerPath,\n condition: \"react-client\",\n });\n }\n const normalize = createInputNormalizer({\n root,\n removeExtension: false,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n });\n server.middlewares.use(async (req, res, next) => {\n if (!req.url) {\n next();\n return;\n }\n if (\n req.url.endsWith(\".rsc\") ||\n req.headers.accept?.includes(\"text/x-component\")\n ) {\n try {\n const path = req.url?.includes(\"index.rsc\")\n ? req.url.replace(\"index.rsc\", \"\")\n : req.url?.replace(\".rsc\", \"\");\n let [key, value] = normalize(path);\n\n let pageImport = DEFAULT_CONFIG.PAGE as string;\n let propsImport = DEFAULT_CONFIG.PROPS as string;\n // PAGE\n // no trailing slash\n const pathNoTrailing = path?.replace(/\\/$/, '');\n if (files.urlMap.has(req.url)) {\n pageImport = files.urlMap.get(req.url)!.page;\n propsImport = files.urlMap.get(req.url)!.props;\n } else if (files.urlMap.has(pathNoTrailing)) {\n pageImport = files.urlMap.get(pathNoTrailing)!.page;\n propsImport = files.urlMap.get(pathNoTrailing)!.props;\n } else if (files.urlMap.has(path)) {\n pageImport = files.urlMap.get(path)!.page;\n propsImport = files.urlMap.get(path)!.props;\n } else if (files.urlMap.has(value)) {\n pageImport = files.urlMap.get(value)!.page;\n propsImport = files.urlMap.get(value)!.props;\n } else if (files.urlMap.has(key)) {\n pageImport = files.urlMap.get(key)!.page;\n propsImport = files.urlMap.get(key)!.props;\n } else {\n console.warn(`Page/props import not found for any of the following (in order of priority): ${[req.url, pathNoTrailing, path, value, key].filter(Boolean).join(', ')} available pages:${Array.from(files.urlMap.keys()).join(', ')}`);\n }\n // Set headers early\n res.setHeader(\"Content-Type\", \"text/x-component\");\n res.setHeader(\"Transfer-Encoding\", \"chunked\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n let hasError = false;\n const timeout = setTimeout(() => {\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(\"RSC render timeout\");\n }\n }, 5000);\n\n const messageHandler = (\n message: RscWorkerMessage | RscWorkerResponse\n ) => {\n try {\n switch (message.type) {\n case \"RSC_CHUNK\":\n // Write chunk directly to response\n if (!hasError) {\n res.write(message.chunk);\n }\n break;\n\n case \"RSC_END\":\n clearTimeout(timeout);\n if (!hasError) {\n res.end();\n }\n worker.off(\"message\", messageHandler);\n break;\n\n case \"ERROR\":\n clearTimeout(timeout);\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(message.error);\n }\n worker.off(\"message\", messageHandler);\n break;\n }\n } catch (error) {\n clearTimeout(timeout);\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(\n error instanceof Error ? error.message : String(error)\n );\n }\n worker.off(\"message\", messageHandler);\n }\n };\n\n worker.on(\"message\", messageHandler);\n worker.once(\"error\", (error) => {\n clearTimeout(timeout);\n if (!hasError) {\n hasError = true;\n res.statusCode = 500;\n res.end(error instanceof Error ? error.message : String(error));\n }\n worker.off(\"message\", messageHandler);\n });\n worker.postMessage({\n type: \"RSC_RENDER\",\n id: value,\n pageImport,\n propsImport,\n url: req.url ?? \"/\",\n pageExportName:\n userOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME,\n propsExportName:\n userOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME,\n outDir: userOptions.build.outDir,\n projectRoot: root,\n moduleRootPath:\n userOptions.build.preserveModulesRoot === true\n ? userOptions.moduleBase\n : \"\",\n moduleBaseURL: ``,\n moduleBasePath: '/',\n pipableStreamOptions: userOptions.pipableStreamOptions,\n cssFiles: []\n } satisfies RscRenderMessage);\n } catch (error) {\n res.statusCode = 500;\n res.end(error instanceof Error ? error.message : String(error));\n }\n } else {\n next();\n }\n });\n },\n };\n}\n"],"names":["resolvedConfig"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,wBAAgB,qBAAqB,CAAC,OAAO,GAAS,mBAAmB,GAAG,OAAO,MAAM,EAAE,MAAM,EAAE,CAMhG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,wBAAgB,qBAAqB,CAAC,OAAO,GAAS,mBAAmB,GAAG,OAAO,MAAM,EAAE,MAAM,EAAE,CAOhG"}
@@ -4,6 +4,7 @@
4
4
  * MIT License
5
5
  */
6
6
  import { reactPreservePlugin } from '../preserver/plugin.js';
7
+ import { reactStaticPlugin } from '../react-static/plugin.js';
7
8
  import { reactTransformPlugin } from '../transformer/plugin.js';
8
9
  import { reactServerPlugin } from './plugin.js';
9
10
 
@@ -11,6 +12,7 @@ function vitePluginReactServer(options = {}) {
11
12
  return [
12
13
  reactTransformPlugin(options),
13
14
  reactServerPlugin(options),
15
+ reactStaticPlugin(options),
14
16
  reactPreservePlugin()
15
17
  ];
16
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../plugin/react-server/index.ts"],"sourcesContent":["import { reactPreservePlugin } from \"../preserver/plugin.js\";\nimport { reactTransformPlugin } from \"../transformer/plugin.js\";\nimport type { StreamPluginOptions } from \"../types.js\";\nimport { reactServerPlugin } from \"./plugin.js\";\n\nexport function vitePluginReactServer(options = {} as StreamPluginOptions): import(\"vite\").Plugin[] {\n return [\n reactTransformPlugin(options),\n reactServerPlugin(options),\n reactPreservePlugin(options),\n ];\n } "],"names":[],"mappings":";;;;;;;;;AAKgB,SAAA,qBAAA,CAAsB,OAAU,GAAA,EAAoD,EAAA;AAChG,EAAO,OAAA;AAAA,IACL,qBAAqB,OAAO,CAAA;AAAA,IAC5B,kBAAkB,OAAO,CAAA;AAAA,IACzB,oBAA2B;AAAA,GAC7B;AACF;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../plugin/react-server/index.ts"],"sourcesContent":["import { reactPreservePlugin } from \"../preserver/plugin.js\";\nimport { reactStaticPlugin } from \"../react-static/plugin.js\";\nimport { reactTransformPlugin } from \"../transformer/plugin.js\";\nimport type { StreamPluginOptions } from \"../types.js\";\nimport { reactServerPlugin } from \"./plugin.js\";\n\nexport function vitePluginReactServer(options = {} as StreamPluginOptions): import(\"vite\").Plugin[] {\n return [\n reactTransformPlugin(options),\n reactServerPlugin(options),\n reactStaticPlugin(options),\n reactPreservePlugin(options),\n ];\n } "],"names":[],"mappings":";;;;;;;;;;AAMgB,SAAA,qBAAA,CAAsB,OAAU,GAAA,EAAoD,EAAA;AAChG,EAAO,OAAA;AAAA,IACL,qBAAqB,OAAO,CAAA;AAAA,IAC5B,kBAAkB,OAAO,CAAA;AAAA,IACzB,kBAAkB,OAAO,CAAA;AAAA,IACzB,oBAA2B;AAAA,GAC7B;AACF;;;;"}
@@ -1,6 +1,7 @@
1
+ import { type Plugin as VitePlugin } from "vite";
1
2
  import type { ReactStreamPluginMeta } from "../types.js";
2
3
  import { type StreamPluginOptions } from "../types.js";
3
- export declare function reactServerPlugin(options: StreamPluginOptions): import("vite").Plugin<{
4
+ export declare function reactServerPlugin(options: StreamPluginOptions): VitePlugin<{
4
5
  meta: ReactStreamPluginMeta;
5
6
  addCssFile: (path: string) => void;
6
7
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/plugin.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAGV,qBAAqB,EAGtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAgBvD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,MAAM,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC,CAwdD"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAML,KAAK,MAAM,IAAI,UAAU,EAC1B,MAAM,MAAM,CAAC;AAKd,OAAO,KAAK,EAGV,qBAAqB,EAEtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAYvD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,UAAU,CAAC;IAC1E,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC,CA4PD"}
@@ -5,26 +5,21 @@
5
5
  */
6
6
  import { join, dirname } from 'node:path';
7
7
  import { performance } from 'node:perf_hooks';
8
- import 'node:worker_threads';
9
8
  import React__default from 'react';
10
9
  import { createLogger } from 'vite';
11
10
  import { checkFilesExist } from '../checkFilesExist.js';
12
11
  import { resolveOptions } from '../config/resolveOptions.js';
13
12
  import { resolvePages } from '../config/resolvePages.js';
14
13
  import { resolveUserConfig } from '../config/resolveUserConfig.js';
15
- import { tryManifest } from '../helpers/tryManifest.js';
16
- import { createBuildLoader } from '../loader/createBuildLoader.js';
17
- import { createWorker } from '../worker/createWorker.js';
18
- import { renderPages } from '../worker/html/renderPages.js';
19
- import { createHandler } from './createHandler.js';
20
- import { mkdir, writeFile, readFile } from 'node:fs/promises';
14
+ import { createHandler } from '../helpers/createHandler.js';
15
+ import { stat, readFile, mkdir, writeFile } from 'node:fs/promises';
21
16
  import { getBundleManifest } from '../helpers/getBundleManifest.js';
17
+ import { createInputNormalizer } from '../helpers/inputNormalizer.js';
18
+ import { MIME_TYPES } from '../config/mimeTypes.js';
22
19
 
23
20
  let resolvedConfig = null;
24
21
  let serverManifestPath = null;
25
- let outpuptBundle;
26
22
  let loader = null;
27
- let worker;
28
23
  function reactServerPlugin(options) {
29
24
  const timing = {
30
25
  start: performance.now()
@@ -33,10 +28,10 @@ function reactServerPlugin(options) {
33
28
  let cssModules = /* @__PURE__ */ new Set();
34
29
  let buildCssFiles = /* @__PURE__ */ new Set();
35
30
  let root = process.cwd();
36
- let userConfig;
37
31
  let userOptions;
32
+ let resolvedPages;
38
33
  let serverManifest = {};
39
- const resolvedOptions = resolveOptions(options);
34
+ const resolvedOptions = resolveOptions(options, false);
40
35
  if (resolvedOptions.type === "error") {
41
36
  throw resolvedOptions.error;
42
37
  }
@@ -65,11 +60,6 @@ function reactServerPlugin(options) {
65
60
  userOptions.build.server,
66
61
  ".vite/manifest.json"
67
62
  );
68
- join(
69
- resolvedConfig.build.outDir,
70
- userOptions.build.client,
71
- ".vite/manifest.json"
72
- );
73
63
  timing.configResolved = performance.now();
74
64
  const plugins = resolvedConfig.plugins;
75
65
  const transformerIndex = plugins.findIndex(
@@ -88,6 +78,37 @@ function reactServerPlugin(options) {
88
78
  }
89
79
  },
90
80
  async configurePreviewServer(server) {
81
+ if (root !== server.config.root) {
82
+ root = server.config.root;
83
+ }
84
+ if (typeof loader !== "function") {
85
+ loader = (id) => import(id);
86
+ }
87
+ const normalize = createInputNormalizer({
88
+ root,
89
+ removeExtension: false,
90
+ preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : undefined
91
+ });
92
+ server.middlewares.use(async (req, res, next) => {
93
+ const [key, value] = normalize(req.url);
94
+ const fileRoot = key.startsWith("node_modules") ? root : join(root, userOptions.build.outDir, userOptions.build.static);
95
+ try {
96
+ const filePath = join(fileRoot, value);
97
+ const stats = await stat(filePath);
98
+ if (stats.isFile()) {
99
+ const ext = value.slice(value.lastIndexOf("."));
100
+ const contentType = MIME_TYPES[ext] || "application/octet-stream";
101
+ res.setHeader("Content-Type", contentType);
102
+ const content = await readFile(filePath);
103
+ res.end(content);
104
+ return;
105
+ }
106
+ next();
107
+ } catch (error) {
108
+ console.log("Error serving static file:", error);
109
+ next();
110
+ }
111
+ });
91
112
  },
92
113
  async configureServer(server) {
93
114
  if (typeof loader !== "function") {
@@ -121,22 +142,26 @@ function reactServerPlugin(options) {
121
142
  if (typeof loader !== "function") {
122
143
  loader = server.ssrLoadModule;
123
144
  }
145
+ const route = req.url?.replace("/index.rsc", "");
124
146
  try {
125
- const handler = await createHandler(
126
- req.url ?? "",
127
- {
147
+ const handler = await createHandler({
148
+ url: !route || route === "" ? "/" : route,
149
+ urlMap: files.urlMap,
150
+ pluginOptions: {
128
151
  ...userOptions,
129
152
  // we'll leave the Html generation for later
130
153
  Html: React__default.Fragment,
131
154
  projectRoot: root
132
155
  },
133
- {
156
+ streamOptions: {
134
157
  cssFiles: [],
135
158
  logger: createLogger(),
136
159
  loader,
137
- moduleGraph: server.moduleGraph
160
+ moduleGraph: server.moduleGraph,
161
+ moduleBasePath: "",
162
+ moduleBaseURL: ""
138
163
  }
139
- );
164
+ });
140
165
  if (handler.type === "success") {
141
166
  handler.stream?.pipe(res);
142
167
  }
@@ -157,11 +182,12 @@ function reactServerPlugin(options) {
157
182
  );
158
183
  root = config.root;
159
184
  }
160
- const resolvedPages = await resolvePages(userOptions.build.pages);
161
- if (resolvedPages.type === "error") {
162
- throw resolvedPages.error;
185
+ const resolvedPagesResult = await resolvePages(userOptions.build.pages);
186
+ if (resolvedPagesResult.type === "error") {
187
+ throw resolvedPagesResult.error;
163
188
  }
164
- files = await checkFilesExist(resolvedPages.pages, userOptions, root);
189
+ resolvedPages = resolvedPagesResult.pages;
190
+ files = await checkFilesExist(resolvedPages, userOptions, root);
165
191
  const resolvedConfig2 = resolveUserConfig({
166
192
  isClient: false,
167
193
  config,
@@ -172,7 +198,6 @@ function reactServerPlugin(options) {
172
198
  if (resolvedConfig2.type === "error") {
173
199
  throw resolvedConfig2.error;
174
200
  }
175
- userConfig = resolvedConfig2.userConfig;
176
201
  return resolvedConfig2.userConfig;
177
202
  },
178
203
  async buildStart() {
@@ -182,206 +207,15 @@ function reactServerPlugin(options) {
182
207
  console.log("Build already started");
183
208
  }
184
209
  },
185
- async closeBundle() {
186
- if (!userConfig || resolvedConfig?.command !== "build") return;
187
- try {
188
- timing.renderStart = performance.now();
189
- const clientManifestResult = tryManifest({
190
- root,
191
- outDir: join(userOptions.build.outDir, userOptions.build.client),
192
- ssrManifest: false
193
- });
194
- if (clientManifestResult.type === "error") {
195
- throw clientManifestResult.error;
196
- }
197
- const clientManifest = clientManifestResult.manifest;
198
- worker = await createWorker({
199
- projectRoot: root,
200
- workerPath: userOptions.htmlWorkerPath,
201
- condition: "react-server",
202
- reverseCondition: true,
203
- mode: resolvedConfig?.mode ?? "production",
204
- nodeOptions: "--conditions=react-client"
205
- });
206
- if (typeof loader !== "function") {
207
- if (!Object.keys(serverManifest).length) {
208
- console.warn(
209
- "[vite-plugin-react-server] No server manifest found, the plugin will try to use the plugin context - it may differ from vite's manifest."
210
- );
211
- serverManifest = getBundleManifest({
212
- pluginContext: this,
213
- bundle: outpuptBundle,
214
- moduleBase: userOptions.moduleBase,
215
- preserveModulesRoot: userOptions.build.preserveModulesRoot
216
- });
217
- if (!Object.keys(serverManifest).length) {
218
- console.warn(
219
- "[vite-plugin-react-server] That didn't work, retrying to read manifest."
220
- );
221
- const resolvedServerManifest = tryManifest({
222
- root,
223
- outDir: join(
224
- userOptions.build.outDir,
225
- userOptions.build.server
226
- ),
227
- ssrManifest: false
228
- });
229
- if (resolvedServerManifest.type === "error") {
230
- console.error(
231
- "[vite-plugin-react-server] Failed to read manifest, aborting build."
232
- );
233
- return;
234
- }
235
- serverManifest = resolvedServerManifest.manifest;
236
- }
237
- }
238
- loader = createBuildLoader({
239
- root,
240
- userConfig,
241
- userOptions,
242
- pluginContext: this,
243
- serverManifest,
244
- clientManifest
245
- });
246
- }
247
- const resolvedPages = await resolvePages(userOptions.build.pages);
248
- if (resolvedPages.type === "error") {
249
- throw resolvedPages.error;
250
- }
251
- const onCssFile = async (path, parentUrl) => {
252
- if (buildCssFiles && path.endsWith(".css")) {
253
- buildCssFiles.add(path);
254
- if (parentUrl.endsWith(userOptions.build.client)) {
255
- const serverPath = join(
256
- userOptions.build.outDir,
257
- userOptions.build.server,
258
- path
259
- );
260
- await writeFile(
261
- serverPath,
262
- await readFile(
263
- join(
264
- root,
265
- userOptions.build.outDir,
266
- userOptions.build.client,
267
- path
268
- )
269
- )
270
- );
271
- } else {
272
- const clientPath = join(
273
- userOptions.build.outDir,
274
- userOptions.build.client,
275
- path
276
- );
277
- await mkdir(dirname(clientPath), { recursive: true });
278
- await writeFile(
279
- clientPath,
280
- await readFile(
281
- join(
282
- root,
283
- userOptions.build.outDir,
284
- userOptions.build.server,
285
- path
286
- )
287
- )
288
- );
289
- }
290
- }
291
- };
292
- const { failedRoutes, completedRoutes } = await renderPages(
293
- this,
294
- resolvedPages.pages,
295
- files,
296
- {
297
- pipableStreamOptions: {
298
- bootstrapModules: clientManifest["index.html"]?.file ? [clientManifest["index.html"].file.startsWith("/") ? clientManifest["index.html"].file : "/" + clientManifest["index.html"].file] : []
299
- },
300
- moduleBasePath: "",
301
- moduleBaseURL: "",
302
- clientCss: clientManifest["index.html"]?.css ? clientManifest["index.html"].css.map((css) => css.startsWith("/") ? css : "/" + css) : [],
303
- userConfig,
304
- pluginOptions: userOptions,
305
- worker,
306
- clientManifest,
307
- serverManifest,
308
- loader,
309
- onCssFile
310
- }
311
- );
312
- if (failedRoutes.size) {
313
- console.error(
314
- "[vite-plugin-react-server] Failed to render routes:",
315
- failedRoutes
316
- );
317
- }
318
- if (worker) await worker.terminate();
319
- timing.renderEnd = performance.now();
320
- timing.total = (timing.renderEnd - timing.start) / 1e3;
321
- const stats = {
322
- htmlFiles: userOptions.build.pages.length,
323
- clientComponents: Object.keys(clientManifest).filter(
324
- userOptions.autoDiscover.clientComponents
325
- ).length,
326
- cssFiles: Object.keys(clientManifest).flatMap(userOptions.autoDiscover.cssPattern).filter(Boolean).length,
327
- totalRoutes: userOptions.build.pages.length,
328
- timing: {
329
- config: ((timing.configResolved ?? 0) - timing.start) / 1e3,
330
- build: ((timing.buildStart ?? 0) - (timing.configResolved ?? 0)) / 1e3,
331
- render: ((timing.renderEnd ?? 0) - (timing.renderStart ?? 0)) / 1e3,
332
- total: (timing.renderEnd ?? 0 - timing.start) / 1e3
333
- }
334
- };
335
- const formatDuration = (seconds) => {
336
- if (seconds < 1e-3) {
337
- return `${(seconds * 1e6).toFixed(0)}μs`;
338
- }
339
- if (seconds < 1) {
340
- return `${(seconds * 1e3).toFixed(0)}ms`;
341
- }
342
- return `${seconds.toFixed(2)}s`;
343
- };
344
- console.log("\n[vite-plugin-react-server] Build Summary:");
345
- console.log("─".repeat(50));
346
- console.log(`�� Generated ${stats.htmlFiles} HTML files`);
347
- console.log(`🎯 Processed ${stats.clientComponents} client components`);
348
- console.log(`🎨 Included ${stats.cssFiles} CSS files`);
349
- console.log(`🛣️ Total routes: ${stats.totalRoutes}`);
350
- console.log("─".repeat(50));
351
- console.log("⏱️ Timing:");
352
- console.log(` Config: ${formatDuration(stats.timing.config)}`);
353
- console.log(` Build: ${formatDuration(stats.timing.build)}`);
354
- console.log(` Render: ${formatDuration(stats.timing.render)}`);
355
- console.log(" ".repeat(12));
356
- console.log(` Total: ${formatDuration(stats.timing.total)}`);
357
- console.log("─".repeat(50));
358
- if (worker) {
359
- await worker.terminate();
360
- worker = null;
361
- }
362
- } catch (error) {
363
- console.error("[vite-plugin-react-server] Build failed:", error);
364
- if (worker) await worker.terminate();
365
- worker = null;
366
- throw error;
367
- }
368
- },
369
- async buildEnd(error) {
370
- if (error) {
371
- console.error("[vite-plugin-react-server] Build error:", error);
372
- return;
373
- }
374
- },
375
210
  handleHotUpdate({ file }) {
376
211
  if (file.endsWith(".css")) {
377
212
  cssModules.add(file);
378
213
  }
379
214
  },
380
- async generateBundle(options2, bundle) {
215
+ async generateBundle(_options, bundle) {
381
216
  if (!resolvedConfig) {
382
217
  throw new Error("Resolved config not found");
383
218
  }
384
- outpuptBundle = bundle;
385
219
  serverManifest = getBundleManifest({
386
220
  pluginContext: this,
387
221
  bundle,
@@ -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\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: 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, dirname } from \"node:path\";\nimport { performance } from \"node:perf_hooks\";\nimport React from \"react\";\nimport {\n createLogger,\n type ResolvedConfig,\n type UserConfig,\n type ViteDevServer,\n type Manifest,\n type Plugin as VitePlugin,\n} from \"vite\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport type {\n BuildTiming,\n CheckFilesExistReturn,\n ReactStreamPluginMeta,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport { createHandler } from \"../helpers/createHandler.js\";\nimport { mkdir, readFile, stat, writeFile } from \"node:fs/promises\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport type { ServerResponse } from \"node:http\";\nimport { createInputNormalizer } from \"../helpers/inputNormalizer.js\";\nimport { MIME_TYPES } from \"../config/mimeTypes.js\";\n\nlet resolvedConfig: ResolvedConfig | null = null;\nlet serverManifestPath: string | null = null;\nlet loader: ((id: string) => Promise<Record<string, any>>) | null = null;\n\nexport function reactServerPlugin(options: StreamPluginOptions): VitePlugin<{\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 define: Record<string, string>;\n let buildCssFiles = new Set<string>();\n let root: string = process.cwd();\n let userOptions: ResolvedUserOptions;\n let resolvedPages: string[];\n let serverManifest: Manifest = {};\n\n const resolvedOptions = resolveOptions(options, false);\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\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 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 \n async configurePreviewServer(server) {\n if (root !== server.config.root) {\n root = server.config.root;\n }\n if (typeof loader !== \"function\") {\n loader = (id: string) => import(id);\n }\n const normalize = createInputNormalizer({\n root,\n removeExtension: false,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n });\n server.middlewares.use(async (req, res, next) => {\n const [key, value] = normalize(req.url);\n const fileRoot = key.startsWith(\"node_modules\")\n ? root\n : join(root, userOptions.build.outDir, userOptions.build.static);\n try {\n const filePath = join(fileRoot, value);\n const stats = await stat(filePath);\n \n if (stats.isFile()) {\n const ext = value.slice(value.lastIndexOf('.'));\n const contentType = MIME_TYPES[ext] || 'application/octet-stream';\n res.setHeader('Content-Type', contentType);\n const content = await readFile(filePath);\n res.end(content);\n return;\n }\n next();\n } catch (error) {\n console.log(\"Error serving static file:\", error);\n next();\n }\n });\n },\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.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 const route = req.url?.replace('/index.rsc', '');\n try {\n const handler = await createHandler({\n url: !route || route === \"\" ? \"/\" : route,\n urlMap: files.urlMap,\n pluginOptions: {\n ...userOptions,\n // we'll leave the Html generation for later\n Html: React.Fragment,\n projectRoot: root,\n },\n streamOptions: {\n cssFiles: [],\n logger: createLogger(),\n loader,\n moduleGraph: server.moduleGraph,\n moduleBasePath: '',\n moduleBaseURL: '',\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 resolvedPagesResult = await resolvePages(userOptions.build.pages);\n if (resolvedPagesResult.type === \"error\") {\n throw resolvedPagesResult.error;\n }\n resolvedPages = resolvedPagesResult.pages;\n files = await checkFilesExist(resolvedPages, 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 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 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\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"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { reactStaticPlugin } from "./plugin.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ export { reactStaticPlugin } from "./plugin.js";
@@ -0,0 +1,7 @@
1
+ import { type Plugin as VitePlugin } from "vite";
2
+ import type { ReactStreamPluginMeta } from "../types.js";
3
+ import { type StreamPluginOptions } from "../types.js";
4
+ export declare function reactStaticPlugin(options: StreamPluginOptions): VitePlugin<{
5
+ meta: ReactStreamPluginMeta;
6
+ }>;
7
+ //# sourceMappingURL=plugin.d.ts.map