vite-plugin-react-server 0.3.18 → 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.
- package/README.md +119 -118
- package/bin/patch.mjs +8 -2
- package/dist/package.json +3 -3
- package/dist/plugin/checkFilesExist.d.ts.map +1 -1
- package/dist/plugin/checkFilesExist.js +6 -2
- package/dist/plugin/checkFilesExist.js.map +1 -1
- package/dist/plugin/collect-manifest-client-files.d.ts +23 -0
- package/dist/plugin/collect-manifest-client-files.d.ts.map +1 -0
- package/dist/plugin/collect-manifest-client-files.js +117 -0
- package/dist/plugin/collect-manifest-client-files.js.map +1 -0
- package/dist/plugin/components.d.ts +9 -9
- package/dist/plugin/components.d.ts.map +1 -1
- package/dist/plugin/components.js +50 -9
- package/dist/plugin/components.js.map +1 -0
- package/dist/plugin/config/defaults.d.ts +7 -6
- package/dist/plugin/config/defaults.d.ts.map +1 -1
- package/dist/plugin/config/defaults.js +8 -5
- package/dist/plugin/config/defaults.js.map +1 -1
- package/dist/plugin/config/getPaths.d.ts +0 -1
- package/dist/plugin/config/getPaths.d.ts.map +1 -1
- package/dist/plugin/config/getPaths.js +2 -7
- package/dist/plugin/config/getPaths.js.map +1 -1
- package/dist/plugin/config/mimeTypes.d.ts +2 -0
- package/dist/plugin/config/mimeTypes.d.ts.map +1 -0
- package/dist/plugin/config/mimeTypes.js +24 -0
- package/dist/plugin/config/mimeTypes.js.map +1 -0
- package/dist/plugin/config/resolveOptions.d.ts +1 -1
- package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.js +41 -28
- package/dist/plugin/config/resolveOptions.js.map +1 -1
- package/dist/plugin/config/resolvePages.d.ts +1 -0
- package/dist/plugin/config/resolvePages.d.ts.map +1 -1
- package/dist/plugin/config/resolvePages.js +9 -5
- package/dist/plugin/config/resolvePages.js.map +1 -1
- package/dist/plugin/config/resolveUserConfig.d.ts +2 -1
- package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
- package/dist/plugin/config/resolveUserConfig.js +10 -5
- package/dist/plugin/config/resolveUserConfig.js.map +1 -1
- package/dist/plugin/copy-dir.js +23 -18
- package/dist/plugin/copy-dir.js.map +1 -0
- package/dist/plugin/helpers/createHandler.d.ts +22 -0
- package/dist/plugin/helpers/createHandler.d.ts.map +1 -0
- package/dist/plugin/{react-server → helpers}/createHandler.js +36 -48
- package/dist/plugin/helpers/createHandler.js.map +1 -0
- package/dist/plugin/{react-server → helpers}/createRscStream.d.ts +2 -1
- package/dist/plugin/helpers/createRscStream.d.ts.map +1 -0
- package/dist/plugin/helpers/createRscStream.js +71 -0
- package/dist/plugin/helpers/createRscStream.js.map +1 -0
- package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
- package/dist/plugin/helpers/getBundleManifest.js +12 -4
- package/dist/plugin/helpers/getBundleManifest.js.map +1 -1
- package/dist/plugin/loader/createBuildLoader.d.ts +1 -1
- package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
- package/dist/plugin/loader/createBuildLoader.js +8 -5
- package/dist/plugin/loader/createBuildLoader.js.map +1 -1
- package/dist/plugin/loader/css-loader.d.ts.map +1 -1
- package/dist/plugin/loader/css-loader.js.map +1 -1
- package/dist/plugin/loader/react-loader.js +2 -2
- package/dist/plugin/loader/react-loader.js.map +1 -1
- package/dist/plugin/preserver/plugin.d.ts.map +1 -1
- package/dist/plugin/preserver/plugin.js +49 -14
- package/dist/plugin/preserver/plugin.js.map +1 -1
- package/dist/plugin/react-client/plugin.d.ts.map +1 -1
- package/dist/plugin/react-client/plugin.js +18 -76
- package/dist/plugin/react-client/plugin.js.map +1 -1
- package/dist/plugin/react-server/index.d.ts.map +1 -1
- package/dist/plugin/react-server/index.js +2 -0
- package/dist/plugin/react-server/index.js.map +1 -1
- package/dist/plugin/react-server/plugin.d.ts +2 -1
- package/dist/plugin/react-server/plugin.d.ts.map +1 -1
- package/dist/plugin/react-server/plugin.js +53 -217
- package/dist/plugin/react-server/plugin.js.map +1 -1
- package/dist/plugin/react-static/index.d.ts +2 -0
- package/dist/plugin/react-static/index.d.ts.map +1 -0
- package/dist/plugin/react-static/index.js +1 -0
- package/dist/plugin/react-static/plugin.d.ts +7 -0
- package/dist/plugin/react-static/plugin.d.ts.map +1 -0
- package/dist/plugin/react-static/plugin.js +199 -0
- package/dist/plugin/react-static/plugin.js.map +1 -0
- package/dist/plugin/resolvePage.d.ts.map +1 -1
- package/dist/plugin/resolvePage.js +9 -0
- package/dist/plugin/resolvePage.js.map +1 -1
- package/dist/plugin/root.d.ts +2 -0
- package/dist/plugin/root.d.ts.map +1 -0
- package/dist/plugin/root.js +12 -0
- package/dist/plugin/root.js.map +1 -0
- package/dist/plugin/transformer/plugin.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.js +32 -23
- package/dist/plugin/transformer/plugin.js.map +1 -1
- package/dist/plugin/transformer/types.d.ts +1 -18
- package/dist/plugin/transformer/types.d.ts.map +1 -1
- package/dist/plugin/types.d.ts +24 -6
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/worker/createWorker.js +0 -1
- package/dist/plugin/worker/createWorker.js.map +1 -1
- package/dist/plugin/worker/html/html-worker.development.d.ts +30 -0
- package/dist/plugin/worker/html/html-worker.development.d.ts.map +1 -1
- package/dist/plugin/worker/html/html-worker.development.js +30 -2
- package/dist/plugin/worker/html/html-worker.development.js.map +1 -1
- package/dist/plugin/worker/html/html-worker.production.js +3 -5
- package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
- package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/html/messageHandler.js +8 -2
- package/dist/plugin/worker/html/messageHandler.js.map +1 -1
- package/dist/plugin/worker/html/plugin.d.ts.map +1 -1
- package/dist/plugin/worker/html/plugin.js +2 -3
- package/dist/plugin/worker/html/renderPages.d.ts +8 -4
- package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
- package/dist/plugin/worker/html/renderPages.js +118 -83
- package/dist/plugin/worker/html/renderPages.js.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.js +89 -84
- package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
- package/dist/plugin/worker/rsc/plugin.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/plugin.js +1 -2
- package/dist/plugin/worker/rsc/rsc-worker.development.js +13 -18
- package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
- package/dist/plugin/worker/rsc/rsc-worker.production.js +4 -1
- package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -1
- package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/state.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/plugin/checkFilesExist.ts +7 -3
- package/plugin/collect-manifest-client-files.ts +152 -0
- package/plugin/components.tsx +55 -10
- package/plugin/config/defaults.tsx +69 -0
- package/plugin/config/getPaths.ts +1 -7
- package/plugin/config/mimeTypes.ts +17 -0
- package/plugin/config/resolveOptions.ts +48 -40
- package/plugin/config/resolvePages.ts +8 -4
- package/plugin/config/resolveUserConfig.ts +12 -9
- package/plugin/{react-server → helpers}/createHandler.ts +46 -63
- package/plugin/helpers/createRscStream.ts +81 -0
- package/plugin/helpers/getBundleManifest.ts +14 -5
- package/plugin/loader/createBuildLoader.ts +9 -6
- package/plugin/loader/css-loader.ts +0 -2
- package/plugin/loader/react-loader.ts +2 -2
- package/plugin/preserver/plugin.ts +64 -17
- package/plugin/react-client/plugin.ts +20 -91
- package/plugin/react-server/index.ts +2 -0
- package/plugin/react-server/plugin.ts +66 -293
- package/plugin/react-static/index.ts +1 -0
- package/plugin/react-static/plugin.ts +247 -0
- package/plugin/resolvePage.ts +9 -0
- package/plugin/root.ts +4 -0
- package/plugin/transformer/plugin.ts +40 -31
- package/plugin/transformer/types.ts +0 -19
- package/plugin/types.ts +25 -6
- package/plugin/worker/createWorker.ts +1 -1
- package/plugin/worker/html/README.md +63 -0
- package/plugin/worker/html/html-worker.development.tsx +89 -2
- package/plugin/worker/html/html-worker.production.tsx +8 -10
- package/plugin/worker/html/messageHandler.ts +8 -2
- package/plugin/worker/html/plugin.ts +2 -3
- package/plugin/worker/html/renderPages.ts +150 -114
- package/plugin/worker/rsc/README.md +58 -0
- package/plugin/worker/rsc/messageHandler.tsx +95 -111
- package/plugin/worker/rsc/plugin.ts +1 -2
- package/plugin/worker/rsc/rsc-worker.development.ts +12 -22
- package/plugin/worker/rsc/rsc-worker.production.ts +5 -1
- package/plugin/worker/rsc/state.ts +0 -3
- package/scripts/react+0.0.0-experimental-eda36a1c-20250228.patch +114 -12
- package/scripts/react-dom+0.0.0-experimental-eda36a1c-20250228.patch +10571 -121
- package/tsconfig.json +2 -2
- package/dist/plugin/collect-css-manifest.d.ts +0 -4
- package/dist/plugin/collect-css-manifest.d.ts.map +0 -1
- package/dist/plugin/collect-css-manifest.js +0 -65
- package/dist/plugin/collect-css-manifest.js.map +0 -1
- package/dist/plugin/config/createModuleIdGenerator.d.ts +0 -11
- package/dist/plugin/config/createModuleIdGenerator.d.ts.map +0 -1
- package/dist/plugin/config/createModuleIdGenerator.js +0 -44
- package/dist/plugin/config/createModuleIdGenerator.js.map +0 -1
- package/dist/plugin/loader/createCssLoader.d.ts +0 -30
- package/dist/plugin/loader/createCssLoader.d.ts.map +0 -1
- package/dist/plugin/loader/createCssLoader.js +0 -35
- package/dist/plugin/loader/createPageLoader.d.ts +0 -24
- package/dist/plugin/loader/createPageLoader.d.ts.map +0 -1
- package/dist/plugin/loader/createPageLoader.js +0 -50
- package/dist/plugin/loader/rsc/messageHandler.d.ts +0 -2
- package/dist/plugin/loader/rsc/messageHandler.d.ts.map +0 -1
- package/dist/plugin/loader/rsc/messageHandler.js +0 -1
- package/dist/plugin/loader/rsc/rsc-worker.development.d.ts +0 -2
- package/dist/plugin/loader/rsc/rsc-worker.development.d.ts.map +0 -1
- package/dist/plugin/loader/rsc/rsc-worker.development.js +0 -1
- package/dist/plugin/react-server/createHandler.d.ts +0 -17
- package/dist/plugin/react-server/createHandler.d.ts.map +0 -1
- package/dist/plugin/react-server/createHandler.js.map +0 -1
- package/dist/plugin/react-server/createRscStream.d.ts.map +0 -1
- package/dist/plugin/react-server/createRscStream.js +0 -70
- package/dist/plugin/react-server/createRscStream.js.map +0 -1
- package/dist/plugin/react-server/createSsrHandler.d.ts +0 -4
- package/dist/plugin/react-server/createSsrHandler.d.ts.map +0 -1
- package/dist/plugin/react-server/createSsrHandler.js +0 -95
- package/dist/plugin/utils/logger.d.ts +0 -9
- package/dist/plugin/utils/logger.d.ts.map +0 -1
- package/dist/plugin/utils/logger.js +0 -68
- package/dist/plugin/utils/logger.js.map +0 -1
- package/plugin/collect-css-manifest.ts +0 -82
- package/plugin/config/createModuleIdGenerator.ts +0 -52
- package/plugin/config/defaults.ts +0 -51
- package/plugin/loader/createCssLoader.ts +0 -73
- package/plugin/loader/createPageLoader.ts +0 -103
- package/plugin/loader/rsc/messageHandler.tsx +0 -1
- package/plugin/loader/rsc/rsc-worker.development.ts +0 -1
- package/plugin/react-server/createRscStream.ts +0 -86
- package/plugin/react-server/createSsrHandler.ts +0 -125
- 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\";\nimport { readFileSync } from \"node:fs\";\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 return;\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 let html = '';\n try {\n const last = value.split('/').pop();\n if(!last?.includes('.')) {\n const isDir = await stat(join(fileRoot, value));\n if (isDir.isDirectory()) {\n html = readFileSync(join(fileRoot, value, 'index.html'), 'utf-8');\n res.setHeader(\"Content-Type\", \"text/html\");\n res.end(html);\n return;\n }\n }\n } catch (error) {\n \n }\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":"
|
|
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":"
|
|
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):
|
|
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":"
|
|
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,40 +5,33 @@
|
|
|
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 {
|
|
16
|
-
import {
|
|
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';
|
|
22
|
-
import {
|
|
17
|
+
import { createInputNormalizer } from '../helpers/inputNormalizer.js';
|
|
18
|
+
import { MIME_TYPES } from '../config/mimeTypes.js';
|
|
23
19
|
|
|
24
20
|
let resolvedConfig = null;
|
|
25
21
|
let serverManifestPath = null;
|
|
26
|
-
let outpuptBundle;
|
|
27
22
|
let loader = null;
|
|
28
|
-
let worker;
|
|
29
23
|
function reactServerPlugin(options) {
|
|
30
24
|
const timing = {
|
|
31
25
|
start: performance.now()
|
|
32
26
|
};
|
|
33
27
|
let files;
|
|
34
28
|
let cssModules = /* @__PURE__ */ new Set();
|
|
35
|
-
let clientComponents = /* @__PURE__ */ new Map();
|
|
36
29
|
let buildCssFiles = /* @__PURE__ */ new Set();
|
|
37
30
|
let root = process.cwd();
|
|
38
|
-
let userConfig;
|
|
39
31
|
let userOptions;
|
|
32
|
+
let resolvedPages;
|
|
40
33
|
let serverManifest = {};
|
|
41
|
-
const resolvedOptions = resolveOptions(options);
|
|
34
|
+
const resolvedOptions = resolveOptions(options, false);
|
|
42
35
|
if (resolvedOptions.type === "error") {
|
|
43
36
|
throw resolvedOptions.error;
|
|
44
37
|
}
|
|
@@ -67,11 +60,6 @@ function reactServerPlugin(options) {
|
|
|
67
60
|
userOptions.build.server,
|
|
68
61
|
".vite/manifest.json"
|
|
69
62
|
);
|
|
70
|
-
join(
|
|
71
|
-
resolvedConfig.build.outDir,
|
|
72
|
-
userOptions.build.client,
|
|
73
|
-
".vite/manifest.json"
|
|
74
|
-
);
|
|
75
63
|
timing.configResolved = performance.now();
|
|
76
64
|
const plugins = resolvedConfig.plugins;
|
|
77
65
|
const transformerIndex = plugins.findIndex(
|
|
@@ -90,6 +78,37 @@ function reactServerPlugin(options) {
|
|
|
90
78
|
}
|
|
91
79
|
},
|
|
92
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
|
+
});
|
|
93
112
|
},
|
|
94
113
|
async configureServer(server) {
|
|
95
114
|
if (typeof loader !== "function") {
|
|
@@ -123,22 +142,26 @@ function reactServerPlugin(options) {
|
|
|
123
142
|
if (typeof loader !== "function") {
|
|
124
143
|
loader = server.ssrLoadModule;
|
|
125
144
|
}
|
|
145
|
+
const route = req.url?.replace("/index.rsc", "");
|
|
126
146
|
try {
|
|
127
|
-
const handler = await createHandler(
|
|
128
|
-
|
|
129
|
-
|
|
147
|
+
const handler = await createHandler({
|
|
148
|
+
url: !route || route === "" ? "/" : route,
|
|
149
|
+
urlMap: files.urlMap,
|
|
150
|
+
pluginOptions: {
|
|
130
151
|
...userOptions,
|
|
131
152
|
// we'll leave the Html generation for later
|
|
132
153
|
Html: React__default.Fragment,
|
|
133
154
|
projectRoot: root
|
|
134
155
|
},
|
|
135
|
-
{
|
|
156
|
+
streamOptions: {
|
|
136
157
|
cssFiles: [],
|
|
137
158
|
logger: createLogger(),
|
|
138
159
|
loader,
|
|
139
|
-
moduleGraph: server.moduleGraph
|
|
160
|
+
moduleGraph: server.moduleGraph,
|
|
161
|
+
moduleBasePath: "",
|
|
162
|
+
moduleBaseURL: ""
|
|
140
163
|
}
|
|
141
|
-
);
|
|
164
|
+
});
|
|
142
165
|
if (handler.type === "success") {
|
|
143
166
|
handler.stream?.pipe(res);
|
|
144
167
|
}
|
|
@@ -159,11 +182,12 @@ function reactServerPlugin(options) {
|
|
|
159
182
|
);
|
|
160
183
|
root = config.root;
|
|
161
184
|
}
|
|
162
|
-
const
|
|
163
|
-
if (
|
|
164
|
-
throw
|
|
185
|
+
const resolvedPagesResult = await resolvePages(userOptions.build.pages);
|
|
186
|
+
if (resolvedPagesResult.type === "error") {
|
|
187
|
+
throw resolvedPagesResult.error;
|
|
165
188
|
}
|
|
166
|
-
|
|
189
|
+
resolvedPages = resolvedPagesResult.pages;
|
|
190
|
+
files = await checkFilesExist(resolvedPages, userOptions, root);
|
|
167
191
|
const resolvedConfig2 = resolveUserConfig({
|
|
168
192
|
isClient: false,
|
|
169
193
|
config,
|
|
@@ -174,7 +198,6 @@ function reactServerPlugin(options) {
|
|
|
174
198
|
if (resolvedConfig2.type === "error") {
|
|
175
199
|
throw resolvedConfig2.error;
|
|
176
200
|
}
|
|
177
|
-
userConfig = resolvedConfig2.userConfig;
|
|
178
201
|
return resolvedConfig2.userConfig;
|
|
179
202
|
},
|
|
180
203
|
async buildStart() {
|
|
@@ -184,202 +207,15 @@ function reactServerPlugin(options) {
|
|
|
184
207
|
console.log("Build already started");
|
|
185
208
|
}
|
|
186
209
|
},
|
|
187
|
-
async closeBundle() {
|
|
188
|
-
if (!userConfig || resolvedConfig?.command !== "build") return;
|
|
189
|
-
try {
|
|
190
|
-
timing.renderStart = performance.now();
|
|
191
|
-
const clientManifestResult = tryManifest({
|
|
192
|
-
root,
|
|
193
|
-
outDir: join(userOptions.build.outDir, userOptions.build.client),
|
|
194
|
-
ssrManifest: false
|
|
195
|
-
});
|
|
196
|
-
if (clientManifestResult.type === "error") {
|
|
197
|
-
throw clientManifestResult.error;
|
|
198
|
-
}
|
|
199
|
-
const clientManifest = clientManifestResult.manifest;
|
|
200
|
-
worker = await createWorker({
|
|
201
|
-
projectRoot: root,
|
|
202
|
-
workerPath: userOptions.htmlWorkerPath,
|
|
203
|
-
condition: "react-server",
|
|
204
|
-
reverseCondition: true,
|
|
205
|
-
mode: resolvedConfig?.mode ?? "production",
|
|
206
|
-
nodeOptions: "--conditions=react-client"
|
|
207
|
-
});
|
|
208
|
-
if (typeof loader !== "function") {
|
|
209
|
-
if (!Object.keys(serverManifest).length) {
|
|
210
|
-
console.warn(
|
|
211
|
-
"[vite-plugin-react-server] No server manifest found, the plugin will try to use the plugin context - it may differ from vite's manifest."
|
|
212
|
-
);
|
|
213
|
-
serverManifest = getBundleManifest({
|
|
214
|
-
pluginContext: this,
|
|
215
|
-
bundle: outpuptBundle,
|
|
216
|
-
moduleBase: userOptions.moduleBase,
|
|
217
|
-
preserveModulesRoot: userOptions.build.preserveModulesRoot
|
|
218
|
-
});
|
|
219
|
-
if (!Object.keys(serverManifest).length) {
|
|
220
|
-
console.warn(
|
|
221
|
-
"[vite-plugin-react-server] That didn't work, retrying to read manifest."
|
|
222
|
-
);
|
|
223
|
-
const resolvedServerManifest = tryManifest({
|
|
224
|
-
root,
|
|
225
|
-
outDir: join(
|
|
226
|
-
userOptions.build.outDir,
|
|
227
|
-
userOptions.build.server
|
|
228
|
-
),
|
|
229
|
-
ssrManifest: false
|
|
230
|
-
});
|
|
231
|
-
if (resolvedServerManifest.type === "error") {
|
|
232
|
-
console.error(
|
|
233
|
-
"[vite-plugin-react-server] Failed to read manifest, aborting build."
|
|
234
|
-
);
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
serverManifest = resolvedServerManifest.manifest;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
loader = createBuildLoader({
|
|
241
|
-
root,
|
|
242
|
-
userConfig,
|
|
243
|
-
userOptions,
|
|
244
|
-
pluginContext: this,
|
|
245
|
-
serverManifest,
|
|
246
|
-
clientManifest
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
const resolvedPages = await resolvePages(userOptions.build.pages);
|
|
250
|
-
if (resolvedPages.type === "error") {
|
|
251
|
-
throw resolvedPages.error;
|
|
252
|
-
}
|
|
253
|
-
const onCssFile = async (path, parentUrl) => {
|
|
254
|
-
if (buildCssFiles && path.endsWith(".css")) {
|
|
255
|
-
buildCssFiles.add(path);
|
|
256
|
-
if (parentUrl.endsWith(userOptions.build.client)) {
|
|
257
|
-
const serverPath = join(
|
|
258
|
-
userOptions.build.outDir,
|
|
259
|
-
userOptions.build.server,
|
|
260
|
-
path
|
|
261
|
-
);
|
|
262
|
-
await writeFile(
|
|
263
|
-
serverPath,
|
|
264
|
-
await readFile(
|
|
265
|
-
join(
|
|
266
|
-
root,
|
|
267
|
-
userOptions.build.outDir,
|
|
268
|
-
userOptions.build.client,
|
|
269
|
-
path
|
|
270
|
-
)
|
|
271
|
-
)
|
|
272
|
-
);
|
|
273
|
-
} else {
|
|
274
|
-
const clientPath = join(
|
|
275
|
-
userOptions.build.outDir,
|
|
276
|
-
userOptions.build.client,
|
|
277
|
-
path
|
|
278
|
-
);
|
|
279
|
-
await mkdir(dirname(clientPath), { recursive: true });
|
|
280
|
-
await writeFile(
|
|
281
|
-
clientPath,
|
|
282
|
-
await readFile(
|
|
283
|
-
join(
|
|
284
|
-
root,
|
|
285
|
-
userOptions.build.outDir,
|
|
286
|
-
userOptions.build.server,
|
|
287
|
-
path
|
|
288
|
-
)
|
|
289
|
-
)
|
|
290
|
-
);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
};
|
|
294
|
-
const { failedRoutes, completedRoutes } = await renderPages(
|
|
295
|
-
this,
|
|
296
|
-
resolvedPages.pages,
|
|
297
|
-
files,
|
|
298
|
-
{
|
|
299
|
-
pipableStreamOptions: {
|
|
300
|
-
bootstrapModules: clientManifest["index.html"]?.file ? [clientManifest["index.html"].file.startsWith("/") ? clientManifest["index.html"].file : "/" + clientManifest["index.html"].file] : []
|
|
301
|
-
},
|
|
302
|
-
moduleBasePath: "",
|
|
303
|
-
moduleBaseURL: "",
|
|
304
|
-
clientCss: clientManifest["index.html"]?.css ? clientManifest["index.html"].css.map((css) => css.startsWith("/") ? css : "/" + css) : [],
|
|
305
|
-
userConfig,
|
|
306
|
-
pluginOptions: userOptions,
|
|
307
|
-
worker,
|
|
308
|
-
clientManifest,
|
|
309
|
-
serverManifest,
|
|
310
|
-
loader,
|
|
311
|
-
onCssFile
|
|
312
|
-
}
|
|
313
|
-
);
|
|
314
|
-
if (failedRoutes.size) {
|
|
315
|
-
console.error(
|
|
316
|
-
"[vite-plugin-react-server] Failed to render routes:",
|
|
317
|
-
failedRoutes
|
|
318
|
-
);
|
|
319
|
-
}
|
|
320
|
-
if (worker) await worker.terminate();
|
|
321
|
-
timing.renderEnd = performance.now();
|
|
322
|
-
timing.total = (timing.renderEnd - timing.start) / 1e3;
|
|
323
|
-
const stats = {
|
|
324
|
-
htmlFiles: files.urlMap.size,
|
|
325
|
-
clientComponents: clientComponents.size,
|
|
326
|
-
cssFiles: cssFiles.size,
|
|
327
|
-
totalRoutes: files.urlMap.size,
|
|
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(`🎨 Included ${buildCssFiles.size} CSS files`);
|
|
347
|
-
console.log(`🛣️ Total routes: ${files.urlMap.size}`);
|
|
348
|
-
console.log("─".repeat(50));
|
|
349
|
-
console.log("⏱️ Timing:");
|
|
350
|
-
console.log(` Config: ${formatDuration(stats.timing.config)}`);
|
|
351
|
-
console.log(` Build: ${formatDuration(stats.timing.build)}`);
|
|
352
|
-
console.log(` Render: ${formatDuration(stats.timing.render)}`);
|
|
353
|
-
console.log(" ".repeat(12));
|
|
354
|
-
console.log(` Total: ${formatDuration(stats.timing.total)}`);
|
|
355
|
-
console.log("─".repeat(50));
|
|
356
|
-
if (worker) {
|
|
357
|
-
await worker.terminate();
|
|
358
|
-
worker = null;
|
|
359
|
-
}
|
|
360
|
-
} catch (error) {
|
|
361
|
-
console.error("[vite-plugin-react-server] Build failed:", error);
|
|
362
|
-
if (worker) await worker.terminate();
|
|
363
|
-
worker = null;
|
|
364
|
-
throw error;
|
|
365
|
-
}
|
|
366
|
-
},
|
|
367
|
-
async buildEnd(error) {
|
|
368
|
-
if (error) {
|
|
369
|
-
console.error("[vite-plugin-react-server] Build error:", error);
|
|
370
|
-
return;
|
|
371
|
-
}
|
|
372
|
-
},
|
|
373
210
|
handleHotUpdate({ file }) {
|
|
374
211
|
if (file.endsWith(".css")) {
|
|
375
212
|
cssModules.add(file);
|
|
376
213
|
}
|
|
377
214
|
},
|
|
378
|
-
async generateBundle(
|
|
215
|
+
async generateBundle(_options, bundle) {
|
|
379
216
|
if (!resolvedConfig) {
|
|
380
217
|
throw new Error("Resolved config not found");
|
|
381
218
|
}
|
|
382
|
-
outpuptBundle = bundle;
|
|
383
219
|
serverManifest = getBundleManifest({
|
|
384
220
|
pluginContext: this,
|
|
385
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\";\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
|
+
{"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 @@
|
|
|
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
|