vite-plugin-react-server 0.3.11 → 0.3.12
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/dist/package.json +15 -11
- package/dist/plugin/checkFilesExist.d.ts +2 -2
- package/dist/plugin/checkFilesExist.d.ts.map +1 -1
- package/dist/plugin/checkFilesExist.js +39 -57
- package/dist/plugin/checkFilesExist.js.map +1 -1
- package/dist/plugin/collect-css-manifest.d.ts.map +1 -1
- package/dist/plugin/collect-css-manifest.js +5 -0
- package/dist/plugin/collect-css-manifest.js.map +1 -1
- package/dist/plugin/components.js +10 -15
- package/dist/plugin/config/createModuleIdGenerator.js +1 -1
- package/dist/plugin/config/createModuleIdGenerator.js.map +1 -1
- package/dist/plugin/config/defaults.d.ts +5 -14
- package/dist/plugin/config/defaults.d.ts.map +1 -1
- package/dist/plugin/config/defaults.js +12 -12
- package/dist/plugin/config/defaults.js.map +1 -1
- package/dist/plugin/config/getPaths.js +1 -1
- package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.js +73 -52
- package/dist/plugin/config/resolveOptions.js.map +1 -1
- package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
- package/dist/plugin/config/resolveUserConfig.js +53 -65
- package/dist/plugin/config/resolveUserConfig.js.map +1 -1
- package/dist/plugin/helpers/getBundleManifest.d.ts +6 -1
- package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
- package/dist/plugin/helpers/getBundleManifest.js +48 -19
- package/dist/plugin/helpers/getBundleManifest.js.map +1 -1
- package/dist/plugin/helpers/inputNormalizer.d.ts +1 -2
- package/dist/plugin/helpers/inputNormalizer.d.ts.map +1 -1
- package/dist/plugin/helpers/inputNormalizer.js +52 -46
- package/dist/plugin/helpers/inputNormalizer.js.map +1 -1
- package/dist/plugin/helpers/tryManifest.d.ts +1 -1
- package/dist/plugin/helpers/tryManifest.d.ts.map +1 -1
- package/dist/plugin/helpers/tryManifest.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 +29 -26
- package/dist/plugin/loader/createBuildLoader.js.map +1 -1
- package/dist/plugin/loader/css-loader.d.ts +16 -0
- package/dist/plugin/loader/css-loader.d.ts.map +1 -0
- package/dist/plugin/loader/css-loader.js +70 -0
- package/dist/plugin/loader/css-loader.js.map +1 -0
- package/dist/plugin/loader/react-loader.d.ts +17 -0
- package/dist/plugin/loader/react-loader.d.ts.map +1 -0
- package/dist/plugin/loader/react-loader.js +647 -0
- package/dist/plugin/loader/react-loader.js.map +1 -0
- package/dist/plugin/loader/rsc/messageHandler.d.ts +2 -0
- package/dist/plugin/loader/rsc/messageHandler.d.ts.map +1 -0
- package/dist/plugin/loader/rsc/messageHandler.js +1 -0
- package/dist/plugin/loader/rsc/rsc-worker.development.d.ts +2 -0
- package/dist/plugin/loader/rsc/rsc-worker.development.d.ts.map +1 -0
- package/dist/plugin/loader/rsc/rsc-worker.development.js +1 -0
- package/dist/plugin/react-client/index.js +2 -2
- package/dist/plugin/react-client/index.js.map +1 -1
- package/dist/plugin/react-client/plugin.d.ts.map +1 -1
- package/dist/plugin/react-client/plugin.js +202 -25
- package/dist/plugin/react-client/plugin.js.map +1 -1
- package/dist/plugin/react-server/createHandler.d.ts.map +1 -1
- package/dist/plugin/react-server/createHandler.js +10 -4
- package/dist/plugin/react-server/createHandler.js.map +1 -1
- package/dist/plugin/react-server/createRscStream.d.ts +15 -3
- package/dist/plugin/react-server/createRscStream.d.ts.map +1 -1
- package/dist/plugin/react-server/createRscStream.js +52 -49
- package/dist/plugin/react-server/createRscStream.js.map +1 -1
- package/dist/plugin/react-server/plugin.d.ts.map +1 -1
- package/dist/plugin/react-server/plugin.js +24 -20
- package/dist/plugin/react-server/plugin.js.map +1 -1
- package/dist/plugin/transformer/plugin.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.js +65 -52
- package/dist/plugin/transformer/plugin.js.map +1 -1
- package/dist/plugin/types.d.ts +5 -0
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/utils/logger.d.ts +9 -0
- package/dist/plugin/utils/logger.d.ts.map +1 -0
- package/dist/plugin/utils/logger.js +68 -0
- package/dist/plugin/utils/logger.js.map +1 -0
- package/dist/plugin/worker/createWorker.d.ts +1 -0
- package/dist/plugin/worker/createWorker.d.ts.map +1 -1
- package/dist/plugin/worker/createWorker.js +23 -36
- package/dist/plugin/worker/createWorker.js.map +1 -1
- package/dist/plugin/worker/html/html-worker.production.js +5 -1
- 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 +10 -19
- package/dist/plugin/worker/html/messageHandler.js.map +1 -1
- package/dist/plugin/worker/html/renderPages.d.ts +2 -2
- package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
- package/dist/plugin/worker/html/renderPages.js +130 -131
- package/dist/plugin/worker/html/renderPages.js.map +1 -1
- package/dist/plugin/worker/rsc/index.d.ts +1 -3
- package/dist/plugin/worker/rsc/index.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/index.js +1 -9
- package/dist/plugin/worker/rsc/index.js.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.d.ts +3 -0
- package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/messageHandler.js +107 -0
- package/dist/plugin/worker/rsc/messageHandler.js.map +1 -0
- package/dist/plugin/worker/rsc/plugin.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/plugin.js +74 -80
- package/dist/plugin/worker/rsc/rsc-worker.development.d.ts +32 -0
- package/dist/plugin/worker/rsc/rsc-worker.development.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/rsc-worker.development.js +43 -0
- package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -0
- package/dist/plugin/worker/rsc/rsc-worker.js +4 -106
- package/dist/plugin/worker/rsc/rsc-worker.production.d.ts +2 -0
- package/dist/plugin/worker/rsc/rsc-worker.production.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/rsc-worker.production.js +14 -0
- package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -0
- package/dist/plugin/worker/rsc/state.d.ts +11 -0
- package/dist/plugin/worker/rsc/state.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/state.js +12 -0
- package/dist/plugin/worker/rsc/state.js.map +1 -0
- package/dist/plugin/worker/types.d.ts +60 -46
- package/dist/plugin/worker/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -11
- package/plugin/checkFilesExist.ts +42 -62
- package/plugin/collect-css-manifest.ts +5 -1
- package/plugin/config/createModuleIdGenerator.ts +1 -1
- package/plugin/config/defaults.ts +13 -15
- package/plugin/config/resolveOptions.ts +134 -76
- package/plugin/config/resolveUserConfig.ts +75 -76
- package/plugin/helpers/getBundleManifest.ts +69 -31
- package/plugin/helpers/inputNormalizer.ts +82 -70
- package/plugin/helpers/tryManifest.ts +1 -1
- package/plugin/loader/createBuildLoader.ts +38 -41
- package/plugin/loader/css-loader.ts +96 -0
- package/plugin/loader/react-loader.ts +945 -0
- package/plugin/loader/rsc/messageHandler.tsx +1 -0
- package/plugin/loader/rsc/rsc-worker.development.ts +1 -0
- package/plugin/react-client/index.ts +1 -1
- package/plugin/react-client/plugin.ts +266 -41
- package/plugin/react-server/createHandler.ts +9 -5
- package/plugin/react-server/createRscStream.ts +75 -54
- package/plugin/react-server/plugin.ts +26 -21
- package/plugin/transformer/plugin.ts +67 -76
- package/plugin/types/global.d.ts +8 -0
- package/plugin/types.ts +2 -0
- package/plugin/utils/logger.ts +52 -0
- package/plugin/worker/createWorker.ts +43 -44
- package/plugin/worker/html/html-worker.production.tsx +7 -2
- package/plugin/worker/html/messageHandler.ts +13 -21
- package/plugin/worker/html/renderPages.ts +146 -179
- package/plugin/worker/rsc/index.ts +4 -13
- package/plugin/worker/rsc/messageHandler.tsx +143 -0
- package/plugin/worker/rsc/plugin.ts +38 -37
- package/plugin/worker/rsc/rsc-worker.development.ts +107 -0
- package/plugin/worker/rsc/rsc-worker.production.ts +13 -0
- package/plugin/worker/rsc/rsc-worker.tsx +5 -128
- package/plugin/worker/rsc/state.ts +37 -0
- package/plugin/worker/types.ts +79 -55
- package/scripts/check-react-version.mjs +17 -7
- package/scripts/react+0.0.0-experimental-b3a95caf-20250113.patch +143 -4170
- package/scripts/react-dom+0.0.0-experimental-b3a95caf-20250113.patch +14271 -90079
- package/dist/plugin/components.js.map +0 -1
- package/dist/plugin/helpers/createClientInputNormalizer.d.ts +0 -8
- package/dist/plugin/helpers/createClientInputNormalizer.d.ts.map +0 -1
- package/dist/plugin/helpers/createClientInputNormalizer.js +0 -35
- package/dist/plugin/helpers/createServerInputNormalizer.d.ts +0 -9
- package/dist/plugin/helpers/createServerInputNormalizer.d.ts.map +0 -1
- package/dist/plugin/helpers/createServerInputNormalizer.js +0 -37
- package/dist/plugin/helpers/createStaticInputNormalizer.d.ts +0 -7
- package/dist/plugin/helpers/createStaticInputNormalizer.d.ts.map +0 -1
- package/dist/plugin/helpers/createStaticInputNormalizer.js +0 -18
- package/dist/plugin/helpers/getModuleManifest.d.ts +0 -17
- package/dist/plugin/helpers/getModuleManifest.d.ts.map +0 -1
- package/dist/plugin/helpers/getModuleManifest.js +0 -23
- package/dist/plugin/helpers/inputNormalizerWorker.d.ts +0 -12
- package/dist/plugin/helpers/inputNormalizerWorker.d.ts.map +0 -1
- package/dist/plugin/helpers/inputNormalizerWorker.js +0 -33
- package/dist/plugin/helpers/normalizedRelativePath.d.ts +0 -11
- package/dist/plugin/helpers/normalizedRelativePath.d.ts.map +0 -1
- package/dist/plugin/helpers/normalizedRelativePath.js +0 -36
- package/dist/plugin/helpers/resolveFilePath.d.ts +0 -13
- package/dist/plugin/helpers/resolveFilePath.d.ts.map +0 -1
- package/dist/plugin/helpers/resolveFilePath.js +0 -74
- package/dist/plugin/helpers/resolveWorkerModule.d.ts +0 -6
- package/dist/plugin/helpers/resolveWorkerModule.d.ts.map +0 -1
- package/dist/plugin/helpers/resolveWorkerModule.js +0 -24
- package/dist/plugin/helpers/validateModuleBase.d.ts +0 -3
- package/dist/plugin/helpers/validateModuleBase.d.ts.map +0 -1
- package/dist/plugin/helpers/validateModuleBase.js +0 -16
- package/dist/plugin/helpers/validateResolvedConfig.d.ts +0 -3
- package/dist/plugin/helpers/validateResolvedConfig.d.ts.map +0 -1
- package/dist/plugin/helpers/validateResolvedConfig.js +0 -17
- package/dist/plugin/transformer/transformer-client-components.d.ts +0 -30
- package/dist/plugin/transformer/transformer-client-components.d.ts.map +0 -1
- package/dist/plugin/transformer/transformer-client-components.js +0 -122
- package/dist/plugin/transformer/transformer-client-components.js.map +0 -1
- package/dist/plugin/transformer/transformer-server-actions.d.ts +0 -29
- package/dist/plugin/transformer/transformer-server-actions.d.ts.map +0 -1
- package/dist/plugin/transformer/transformer-server-actions.js +0 -90
- package/dist/plugin/worker/rsc/createRscStream.d.ts +0 -5
- package/dist/plugin/worker/rsc/createRscStream.d.ts.map +0 -1
- package/dist/plugin/worker/rsc/createRscStream.js +0 -39
- package/dist/plugin/worker/rsc/createRscStream.js.map +0 -1
- package/dist/plugin/worker/rsc/development.d.ts +0 -5
- package/dist/plugin/worker/rsc/development.d.ts.map +0 -1
- package/dist/plugin/worker/rsc/development.js +0 -13
- package/dist/plugin/worker/rsc/development.js.map +0 -1
- package/dist/plugin/worker/rsc/plugin.js.map +0 -1
- package/dist/plugin/worker/rsc/production.d.ts +0 -5
- package/dist/plugin/worker/rsc/production.d.ts.map +0 -1
- package/dist/plugin/worker/rsc/production.js +0 -13
- package/dist/plugin/worker/rsc/production.js.map +0 -1
- package/plugin/helpers/createClientInputNormalizer.ts +0 -48
- package/plugin/helpers/createServerInputNormalizer.ts +0 -52
- package/plugin/helpers/createStaticInputNormalizer.ts +0 -26
- package/plugin/helpers/getModuleManifest.ts +0 -36
- package/plugin/helpers/inputNormalizerWorker.ts +0 -52
- package/plugin/helpers/normalizedRelativePath.ts +0 -59
- package/plugin/helpers/resolveFilePath.ts +0 -108
- package/plugin/helpers/resolveWorkerModule.ts +0 -41
- package/plugin/helpers/validateModuleBase.ts +0 -30
- package/plugin/helpers/validateResolvedConfig.ts +0 -21
- package/plugin/transformer/transformer-client-components.ts +0 -168
- package/plugin/transformer/transformer-server-actions.ts +0 -125
- package/plugin/worker/rsc/createRscStream.ts +0 -42
- package/plugin/worker/rsc/development.ts +0 -6
- package/plugin/worker/rsc/production.ts +0 -6
- package/scripts/react-server-dom-esm+0.0.1.patch +0 -24775
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react-loader.js","sources":["../../../plugin/loader/react-loader.ts"],"sourcesContent":["import * as acorn from \"acorn-loose\";\nimport { basename } from \"path\";\n\nimport {\n // @ts-ignore\n setSourceMapsSupport,\n SourceMap,\n type LoadHookContext,\n type ResolveHookContext,\n} from \"node:module\";\nimport type { MessagePort } from \"node:worker_threads\";\n\nlet stashedGetSource: any = null;\nlet stashedResolve: any = null;\n\n// Enable source maps with full support\nsetSourceMapsSupport(true, {\n nodeModules: true, // Enable for node_modules files\n generatedCode: true, // Enable for generated code\n});\n\n// Add type for our context with port\ninterface LoaderContext {\n data?: { port: MessagePort };\n}\n\n// Store port globally for use in load hook\nlet loaderPort: MessagePort | undefined;\n\nexport async function getSource(\n url: string,\n context: any,\n defaultGetSource: any\n) {\n // We stash this in case we end up needing to resolve export * statements later.\n stashedGetSource = defaultGetSource;\n return defaultGetSource(url, context, defaultGetSource);\n}\n\nfunction addExportedEntry(\n exportedEntries: any,\n localNames: any,\n localName: any,\n exportedName: any,\n type: any,\n loc: any\n) {\n if (localNames.has(localName)) {\n // If the same local name is exported more than once, we only need one of the names.\n return;\n }\n\n exportedEntries.push({\n localName,\n exportedName,\n type,\n loc,\n originalLine: -1,\n originalColumn: -1,\n originalSource: -1,\n nameIndex: -1,\n });\n}\n\nfunction addLocalExportedNames(\n exportedEntries: any,\n localNames: any,\n node: any\n) {\n switch (node.type) {\n case \"Identifier\":\n addExportedEntry(\n exportedEntries,\n localNames,\n node.name,\n node.name,\n null,\n node.loc\n );\n return;\n\n case \"ObjectPattern\":\n for (let i = 0; i < node.properties.length; i++)\n addLocalExportedNames(exportedEntries, localNames, node.properties[i]);\n\n return;\n\n case \"ArrayPattern\":\n for (let i = 0; i < node.elements.length; i++) {\n const element = node.elements[i];\n if (element)\n addLocalExportedNames(exportedEntries, localNames, element);\n }\n\n return;\n\n case \"Property\":\n addLocalExportedNames(exportedEntries, localNames, node.value);\n return;\n\n case \"AssignmentPattern\":\n addLocalExportedNames(exportedEntries, localNames, node.left);\n return;\n\n case \"RestElement\":\n addLocalExportedNames(exportedEntries, localNames, node.argument);\n return;\n\n case \"ParenthesizedExpression\":\n addLocalExportedNames(exportedEntries, localNames, node.expression);\n return;\n }\n}\n\nfunction transformServerModule(\n source: string,\n program: any,\n url: string,\n sourceMap: any,\n loader: any,\n port: MessagePort | undefined\n) {\n const body = program.body; // This entry list needs to be in source location order.\n\n const exportedEntries: any[] = []; // Dedupe set.\n\n const localNames = new Set();\n\n for (let i = 0; i < body.length; i++) {\n const node = body[i];\n\n switch (node.type) {\n case \"ExportAllDeclaration\":\n // If export * is used, the other file needs to explicitly opt into \"use server\" too.\n break;\n\n case \"ExportDefaultDeclaration\":\n if (node.declaration.type === \"Identifier\") {\n addExportedEntry(\n exportedEntries,\n localNames,\n node.declaration.name,\n \"default\",\n null,\n node.declaration.loc\n );\n } else if (node.declaration.type === \"FunctionDeclaration\") {\n if (node.declaration.id) {\n addExportedEntry(\n exportedEntries,\n localNames,\n node.declaration.id.name,\n \"default\",\n \"function\",\n node.declaration.id.loc\n );\n }\n }\n\n continue;\n\n case \"ExportNamedDeclaration\":\n if (node.declaration) {\n if (node.declaration.type === \"VariableDeclaration\") {\n const declarations = node.declaration.declarations;\n\n for (let j = 0; j < declarations.length; j++) {\n addLocalExportedNames(\n exportedEntries,\n localNames,\n declarations[j].id\n );\n }\n } else {\n const name = node.declaration.id.name;\n addExportedEntry(\n exportedEntries,\n localNames,\n name,\n name,\n node.declaration.type === \"FunctionDeclaration\"\n ? \"function\"\n : null,\n node.declaration.id.loc\n );\n }\n }\n\n if (node.specifiers) {\n const specifiers = node.specifiers;\n\n for (let j = 0; j < specifiers.length; j++) {\n const specifier = specifiers[j];\n addExportedEntry(\n exportedEntries,\n localNames,\n specifier.local.name,\n specifier.exported.name,\n null,\n specifier.local.loc\n );\n }\n }\n\n continue;\n }\n }\n\n let mappings =\n sourceMap && typeof sourceMap.mappings === \"string\"\n ? sourceMap.mappings\n : \"\";\n let newSrc = source;\n\n if (exportedEntries.length > 0) {\n let lastSourceIndex = 0;\n let lastOriginalLine = 0;\n let lastOriginalColumn = 0;\n let lastNameIndex = 0;\n let sourceLineCount = 0;\n let lastMappedLine = 0;\n\n if (sourceMap) {\n // We iterate source mapping entries and our matched exports in parallel to source map\n // them to their original location.\n let nextEntryIdx = 0;\n let nextEntryLine = exportedEntries[nextEntryIdx].loc.start.line;\n let nextEntryColumn = exportedEntries[nextEntryIdx].loc.start.column;\n readMappings(\n mappings,\n (\n generatedLine: number,\n generatedColumn: number,\n sourceIndex: number,\n originalLine: number,\n originalColumn: number,\n nameIndex: number\n ) => {\n if (\n generatedLine > nextEntryLine ||\n (generatedLine === nextEntryLine &&\n generatedColumn > nextEntryColumn)\n ) {\n // We're past the entry which means that the best match we have is the previous entry.\n if (lastMappedLine === nextEntryLine) {\n // Match\n exportedEntries[nextEntryIdx].originalLine = lastOriginalLine;\n exportedEntries[nextEntryIdx].originalColumn = lastOriginalColumn;\n exportedEntries[nextEntryIdx].originalSource = lastSourceIndex;\n exportedEntries[nextEntryIdx].nameIndex = lastNameIndex;\n }\n\n nextEntryIdx++;\n\n if (nextEntryIdx < exportedEntries.length) {\n nextEntryLine = exportedEntries[nextEntryIdx].loc.start.line;\n nextEntryColumn = exportedEntries[nextEntryIdx].loc.start.column;\n } else {\n nextEntryLine = -1;\n nextEntryColumn = -1;\n }\n }\n\n lastMappedLine = generatedLine;\n\n if (sourceIndex > -1) {\n lastSourceIndex = sourceIndex;\n }\n\n if (originalLine > -1) {\n lastOriginalLine = originalLine;\n }\n\n if (originalColumn > -1) {\n lastOriginalColumn = originalColumn;\n }\n\n if (nameIndex > -1) {\n lastNameIndex = nameIndex;\n }\n }\n );\n\n if (nextEntryIdx < exportedEntries.length) {\n if (lastMappedLine === nextEntryLine) {\n // Match\n exportedEntries[nextEntryIdx].originalLine = lastOriginalLine;\n exportedEntries[nextEntryIdx].originalColumn = lastOriginalColumn;\n exportedEntries[nextEntryIdx].originalSource = lastSourceIndex;\n exportedEntries[nextEntryIdx].nameIndex = lastNameIndex;\n }\n }\n\n for (\n let lastIdx = mappings.length - 1;\n lastIdx >= 0 && mappings[lastIdx] === \";\";\n lastIdx--\n ) {\n // If the last mapped lines don't contain any segments, we don't get a callback from readMappings\n // so we need to pad the number of mapped lines, with one for each empty line.\n lastMappedLine++;\n }\n\n sourceLineCount = program.loc.end.line;\n\n if (sourceLineCount < lastMappedLine) {\n throw new Error(\n \"The source map has more mappings than there are lines.\"\n );\n } // If the original source string had more lines than there are mappings in the source map.\n // Add some extra padding of unmapped lines so that any lines that we add line up.\n\n for (\n let extraLines = sourceLineCount - lastMappedLine;\n extraLines > 0;\n extraLines--\n ) {\n mappings += \";\";\n }\n } else {\n // If a file doesn't have a source map then we generate a blank source map that just\n // contains the original content and segments pointing to the original lines.\n sourceLineCount = 1;\n let idx = -1;\n\n while ((idx = source.indexOf(\"\\n\", idx + 1)) !== -1) {\n sourceLineCount++;\n }\n\n mappings = \"AAAA\" + \";AACA\".repeat(sourceLineCount - 1);\n sourceMap = new SourceMap({\n version: 3,\n file: basename(url),\n sources: [url],\n sourcesContent: [source],\n names: [],\n mappings: mappings,\n sourceRoot: \"\",\n });\n lastSourceIndex = 0;\n lastOriginalLine = sourceLineCount;\n lastOriginalColumn = 0;\n lastNameIndex = -1;\n lastMappedLine = sourceLineCount;\n\n for (let i = 0; i < exportedEntries.length; i++) {\n // Point each entry to original location.\n const entry = exportedEntries[i];\n entry.originalSource = 0;\n entry.originalLine = entry.loc.start.line; // We use column zero since we do the short-hand line-only source maps above.\n\n entry.originalColumn = 0; // entry.loc.start.column;\n }\n }\n\n newSrc += \"\\n\\n;\";\n newSrc +=\n 'import {registerServerReference} from \"react-server-dom-esm/server\";\\n';\n\n if (mappings) {\n mappings += \";;\";\n }\n\n const createMapping = createMappingsSerializer(); // Create an empty mapping pointing to where we last left off to reset the counters.\n\n let generatedLine = 1;\n createMapping(\n generatedLine,\n 0,\n lastSourceIndex,\n lastOriginalLine,\n lastOriginalColumn,\n lastNameIndex\n );\n\n for (let i = 0; i < exportedEntries.length; i++) {\n const entry = exportedEntries[i];\n generatedLine++;\n\n if (entry.type !== \"function\") {\n // We first check if the export is a function and if so annotate it.\n newSrc += \"if (typeof \" + entry.localName + ' === \"function\") ';\n }\n\n newSrc += \"registerServerReference(\" + entry.localName + \",\";\n newSrc += JSON.stringify(url) + \",\";\n newSrc += JSON.stringify(entry.exportedName) + \");\\n\";\n mappings += createMapping(\n generatedLine,\n 0,\n entry.originalSource,\n entry.originalLine,\n entry.originalColumn,\n entry.nameIndex\n );\n }\n }\n\n if (sourceMap) {\n // Override with an new mappings and serialize an inline source map.\n sourceMap.mappings = mappings;\n newSrc +=\n \"//# sourceMappingURL=data:application/json;charset=utf-8;base64,\" +\n Buffer.from(JSON.stringify(sourceMap)).toString(\"base64\");\n }\n if (port) {\n port.postMessage({\n type: \"SERVER_MODULE\",\n url,\n source: newSrc,\n });\n }\n\n return newSrc;\n}\n\nfunction addExportNames(names: any, node: any) {\n switch (node.type) {\n case \"Identifier\":\n names.push(node.name);\n return;\n\n case \"ObjectPattern\":\n for (let i = 0; i < node.properties.length; i++)\n addExportNames(names, node.properties[i]);\n\n return;\n\n case \"ArrayPattern\":\n for (let i = 0; i < node.elements.length; i++) {\n const element = node.elements[i];\n if (element) addExportNames(names, element);\n }\n\n return;\n\n case \"Property\":\n addExportNames(names, node.value);\n return;\n\n case \"AssignmentPattern\":\n addExportNames(names, node.left);\n return;\n\n case \"RestElement\":\n addExportNames(names, node.argument);\n return;\n\n case \"ParenthesizedExpression\":\n addExportNames(names, node.expression);\n return;\n }\n}\n\nfunction resolveClientImport(specifier: string, parentURL: string) {\n const conditions = [\"node\", \"import\"];\n\n if (stashedResolve === null) {\n throw new Error(\n \"Expected resolve to have been called before transformSource\"\n );\n }\n\n return stashedResolve(\n specifier,\n {\n conditions,\n parentURL,\n },\n stashedResolve\n );\n}\n\nasync function parseExportNamesInto(\n body: any,\n names: any,\n parentURL: string,\n loader: any\n) {\n for (let i = 0; i < body.length; i++) {\n const node = body[i];\n\n switch (node.type) {\n case \"ExportAllDeclaration\":\n if (node.exported) {\n addExportNames(names, node.exported);\n continue;\n } else {\n const _await$resolveClientI = await resolveClientImport(\n node.source.value,\n parentURL\n ),\n url = _await$resolveClientI.url;\n\n const _await$loader = await loader(\n url,\n {\n format: \"module\",\n conditions: [],\n importAttributes: {},\n },\n loader\n ),\n source = _await$loader.source;\n\n if (typeof source !== \"string\") {\n throw new Error(\"Expected the transformed source to be a string.\");\n }\n\n let childBody;\n\n try {\n childBody = acorn.parse(source, {\n ecmaVersion: \"2024\" as never,\n sourceType: \"module\",\n }).body;\n } catch (x) {\n // eslint-disable-next-line react-internal/no-production-logging\n console.error(\"Error parsing %s %s\", url, (x as Error)?.message);\n continue;\n }\n\n await parseExportNamesInto(childBody, names, url, loader);\n continue;\n }\n\n case \"ExportDefaultDeclaration\":\n names.push(\"default\");\n continue;\n\n case \"ExportNamedDeclaration\":\n if (node.declaration) {\n if (node.declaration.type === \"VariableDeclaration\") {\n const declarations = node.declaration.declarations;\n\n for (let j = 0; j < declarations.length; j++) {\n addExportNames(names, declarations[j].id);\n }\n } else {\n addExportNames(names, node.declaration.id);\n }\n }\n\n if (node.specifiers) {\n const specifiers = node.specifiers;\n\n for (let j = 0; j < specifiers.length; j++) {\n addExportNames(names, specifiers[j].exported);\n }\n }\n\n continue;\n }\n }\n}\n\nasync function transformClientModule(\n program: any,\n url: string,\n sourceMap: any,\n loader: any\n) {\n const body = program.body;\n const names: any[] = [];\n await parseExportNamesInto(body, names, url, loader);\n\n\n if (names.length === 0) {\n console.log(\"[react-loader] No exports found in:\", url);\n return \"\";\n }\n\n let newSrc =\n 'import {registerClientReference} from \"react-server-dom-esm/server\";\\n';\n\n for (let i = 0; i < names.length; i++) {\n const name = names[i];\n\n const errorMessage =\n name === \"default\"\n ? `Attempted to call the default export of ${url} from the server but it's on the client`\n : `Attempted to call ${name}() from the server but ${name} is on the client`;\n\n const fullError = `${errorMessage}. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a Client Component.`;\n\n // Convert file:// URL to relative path for the browser\n const browserUrl = url.replace(\"file://\", \"\").replace(process.cwd(), \"\");\n\n if (name === \"default\") {\n newSrc += `export default registerClientReference(function() { throw new Error(${JSON.stringify(\n fullError\n )}); }, ${JSON.stringify(browserUrl)}, ${JSON.stringify(name)});\\n`;\n } else {\n newSrc += `export const ${name} = registerClientReference(function() { throw new Error(${JSON.stringify(\n fullError\n )}); }, ${JSON.stringify(browserUrl)}, ${JSON.stringify(name)});\\n`;\n }\n }\n\n // Create source map\n if (sourceMap) {\n const newSourceMap = {\n version: 3,\n file: basename(url),\n sources: [url],\n sourcesContent: [program.source],\n names: [],\n mappings: \"AAAA;\" + \";\".repeat(names.length), // Simple line mapping\n sourceRoot: \"\",\n };\n\n newSrc +=\n \"\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,\";\n newSrc += Buffer.from(JSON.stringify(newSourceMap)).toString(\"base64\");\n }\n\n return newSrc;\n}\n\nasync function loadClientImport(url: string, defaultTransformSource: any) {\n if (stashedGetSource === null) {\n throw new Error(\n \"Expected getSource to have been called before transformSource\"\n );\n } // TODO: Validate that this is another module by calling getFormat.\n\n const _await$stashedGetSour = await stashedGetSource(\n url,\n {\n format: \"module\",\n },\n stashedGetSource\n ),\n source = _await$stashedGetSour.source;\n\n const result = await defaultTransformSource(\n source,\n {\n format: \"module\",\n url,\n },\n defaultTransformSource\n );\n return {\n format: \"module\",\n source: result.source,\n };\n}\n\nexport async function transformModuleIfNeeded(\n source: string,\n url: string,\n loader: any,\n port?: MessagePort // Make port parameter optional\n) {\n if (\n source.indexOf(\"use client\") === -1 &&\n source.indexOf(\"use server\") === -1\n ) {\n return source;\n }\n\n let program;\n try {\n program = acorn.parse(source, {\n ecmaVersion: \"2024\" as never,\n sourceType: \"module\",\n locations: true,\n });\n } catch (x) {\n console.error(\n \"[react-loader] Error parsing %s: %s\",\n url,\n (x as Error)?.message\n );\n return source;\n }\n\n let useClient = false;\n let useServer = false; // Keep this for server transforms\n\n // Check for directives\n for (const node of program.body) {\n if (node.type !== \"ExpressionStatement\" || !node.directive) continue;\n\n if (node.directive === \"use client\") {\n useClient = true;\n if (port) {\n port.postMessage({\n type: \"CLIENT_COMPONENT\",\n url,\n source,\n });\n }\n break;\n }\n if (node.directive === \"use server\") {\n useServer = true;\n break;\n }\n }\n\n if (useClient) {\n return transformClientModule(program, url, undefined, loader);\n } else if (useServer) {\n return transformServerModule(source, program, url, undefined, loader, port);\n }\n\n return source;\n}\n\nfunction readMappings(\n mappings: string,\n callback: (\n generatedLine: number,\n generatedColumn: number,\n sourceIndex: number,\n originalLine: number,\n originalColumn: number,\n nameIndex: number\n ) => void\n) {\n let line = 1;\n let column = 0;\n let sourceIndex = 0;\n let originalLine = 0;\n let originalColumn = 0;\n let nameIndex = 0;\n\n let index = 0;\n while (index < mappings.length) {\n if (mappings[index] === \";\") {\n line++;\n column = 0;\n index++;\n continue;\n }\n if (mappings[index] === \",\") {\n index++;\n continue;\n }\n\n let [\n generatedColumnDelta = 0,\n sourceIndexDelta = 0,\n originalLineDelta = 0,\n originalColumnDelta = 0,\n nameIndexDelta = 0,\n ] = decodeVLQ(mappings.slice(index));\n\n // Update positions\n column += generatedColumnDelta;\n sourceIndex += sourceIndexDelta;\n originalLine += originalLineDelta;\n originalColumn += originalColumnDelta;\n nameIndex += nameIndexDelta;\n\n // Skip the encoded segment\n while (index < mappings.length && !/[,;]/.test(mappings[index])) {\n index++;\n }\n\n callback(\n line,\n column,\n sourceIndex,\n originalLine,\n originalColumn,\n nameIndex\n );\n }\n}\n\nfunction createMappingsSerializer() {\n let previousGeneratedLine = 1;\n let previousGeneratedColumn = 0;\n let previousOriginalFile = 0;\n let previousOriginalLine = 0;\n let previousOriginalColumn = 0;\n let previousNameIndex = 0;\n\n return function (\n generatedLine: number,\n generatedColumn: number,\n originalFile: number,\n originalLine: number,\n originalColumn: number,\n nameIndex: number\n ): string {\n // Reset column when moving to a new line\n if (generatedLine > previousGeneratedLine) {\n previousGeneratedColumn = 0;\n let lines = \"\";\n for (let i = previousGeneratedLine; i < generatedLine; i++) {\n lines += \";\";\n }\n previousGeneratedLine = generatedLine;\n if (lines) return lines;\n }\n\n // Calculate deltas\n const segment = [\n generatedColumn - previousGeneratedColumn,\n originalFile - previousOriginalFile,\n originalLine - previousOriginalLine,\n originalColumn - previousOriginalColumn,\n ];\n\n if (nameIndex >= 0) {\n segment.push(nameIndex - previousNameIndex);\n }\n\n // Update previous values\n previousGeneratedColumn = generatedColumn;\n previousOriginalFile = originalFile;\n previousOriginalLine = originalLine;\n previousOriginalColumn = originalColumn;\n previousNameIndex = nameIndex;\n\n return encodeVLQ(segment) + \",\";\n };\n}\n\n// VLQ encoding helpers\nconst VLQ_SHIFT = 5;\nconst VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;\nconst VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;\nconst BASE64_CHARS =\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n\nfunction encodeVLQ(numbers: number[]): string {\n return numbers\n .map((num) => {\n // Convert to VLQ\n const vlq = num < 0 ? (-num << 1) | 1 : num << 1;\n\n let result = \"\";\n let value = vlq;\n\n do {\n let digit = value & VLQ_VALUE_MASK;\n value >>>= VLQ_SHIFT;\n if (value > 0) {\n digit |= VLQ_CONTINUATION_BIT;\n }\n result += BASE64_CHARS[digit];\n } while (value > 0);\n\n return result;\n })\n .join(\"\");\n}\n\nfunction decodeVLQ(str: string): number[] {\n const numbers: number[] = [];\n let value = 0;\n let shift = 0;\n let index = 0;\n\n while (index < str.length && !/[,;]/.test(str[index])) {\n const digit = BASE64_CHARS.indexOf(str[index]);\n if (digit === -1) break;\n\n value += (digit & VLQ_VALUE_MASK) << shift;\n\n if ((digit & VLQ_CONTINUATION_BIT) === 0) {\n const negate = value & 1;\n value >>>= 1;\n numbers.push(negate ? -value : value);\n value = shift = 0;\n } else {\n shift += VLQ_SHIFT;\n }\n\n index++;\n }\n\n return numbers;\n}\n\n// Initialize hook\nexport async function initialize(data: { port: MessagePort }) {\n loaderPort = data.port; // Store port\n data.port.postMessage({ type: \"INITIALIZED\" });\n data.port.unref();\n}\n\n// Resolve hook\nexport async function resolve(\n specifier: string,\n context: ResolveHookContext,\n nextResolve: any\n) {\n return nextResolve(specifier, context);\n}\n\n// Load hook\nexport async function load(\n url: string,\n context: LoadHookContext & LoaderContext,\n nextLoad: any\n) {\n const result = await nextLoad(url, context);\n if (result.format === \"module\") {\n const newSrc = await transformModuleIfNeeded(\n result.source,\n url,\n nextLoad,\n loaderPort ?? undefined\n );\n return { ...result, source: newSrc };\n }\n return result;\n}\n\n// Transform hook\nexport async function transformSource(\n source: string,\n context: any,\n defaultTransformSource: any\n) {\n const transformed = await defaultTransformSource(\n source,\n context,\n defaultTransformSource\n );\n\n if (context.format === \"module\") {\n const transformedSource = transformed.source;\n if (typeof transformedSource !== \"string\") {\n throw new Error(\"Expected source to have been transformed to a string.\");\n }\n\n const newSrc = await transformModuleIfNeeded(\n transformedSource,\n context.url,\n (url: string, ctx: any, defaultLoad: any) =>\n loadClientImport(url, defaultTransformSource),\n context.data?.port!\n );\n return { source: newSrc };\n }\n\n return transformed;\n}\n"],"names":["generatedLine"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageHandler.d.ts","sourceRoot":"","sources":["../../../../plugin/loader/rsc/messageHandler.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsc-worker.development.d.ts","sourceRoot":"","sources":["../../../../plugin/loader/rsc/rsc-worker.development.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -9,9 +9,9 @@ import { reactPreservePlugin } from '../preserver/plugin.js';
|
|
|
9
9
|
|
|
10
10
|
function vitePluginReactClient(options = {}) {
|
|
11
11
|
return [
|
|
12
|
-
reactPreservePlugin(),
|
|
13
12
|
reactClientPlugin(options),
|
|
14
|
-
reactTransformPlugin(options)
|
|
13
|
+
reactTransformPlugin(options),
|
|
14
|
+
reactPreservePlugin()
|
|
15
15
|
];
|
|
16
16
|
}
|
|
17
17
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../plugin/react-client/index.ts"],"sourcesContent":["import { reactPreservePlugin } from \"../plugin.js\";\nimport { reactTransformPlugin } from \"../transformer/plugin.js\";\nimport type { StreamPluginOptions } from \"../types.js\";\nimport { reactClientPlugin } from \"./plugin.js\";\n\nexport function vitePluginReactClient(options = {} as StreamPluginOptions): import(\"vite\").Plugin[] {\n return [\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../plugin/react-client/index.ts"],"sourcesContent":["import { reactPreservePlugin } from \"../plugin.js\";\nimport { reactTransformPlugin } from \"../transformer/plugin.js\";\nimport type { StreamPluginOptions } from \"../types.js\";\nimport { reactClientPlugin } from \"./plugin.js\";\n\nexport function vitePluginReactClient(options = {} as StreamPluginOptions): import(\"vite\").Plugin[] {\n return [\n reactClientPlugin(options),\n reactTransformPlugin(options),\n reactPreservePlugin(options),\n ];\n } "],"names":[],"mappings":";;;;;;;;;AAKgB,SAAA,qBAAA,CAAsB,OAAU,GAAA,EAAoD,EAAA;AAChG,EAAO,OAAA;AAAA,IACL,kBAAkB,OAAO,CAAA;AAAA,IACzB,qBAAqB,OAAO,CAAA;AAAA,IAC5B,oBAA2B;AAAA,GAC7B;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAuB,MAAM,MAAM,CAAC;AACvE,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,MAAM,EAAuB,MAAM,MAAM,CAAC;AACvE,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAgCrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA8UtE"}
|
|
@@ -11,13 +11,22 @@ import { join, dirname } from 'node:path';
|
|
|
11
11
|
import { getBundleManifest } from '../helpers/getBundleManifest.js';
|
|
12
12
|
import { checkFilesExist } from '../checkFilesExist.js';
|
|
13
13
|
import { resolvePages } from '../config/resolvePages.js';
|
|
14
|
+
import { tryManifest } from '../helpers/tryManifest.js';
|
|
15
|
+
import { createInputNormalizer } from '../helpers/inputNormalizer.js';
|
|
16
|
+
import { createWorker } from '../worker/createWorker.js';
|
|
17
|
+
import { getPluginRoot } from '../config/getPaths.js';
|
|
18
|
+
import { DEFAULT_CONFIG } from '../config/defaults.js';
|
|
19
|
+
import { createLogger } from '../utils/logger.js';
|
|
14
20
|
|
|
21
|
+
const log = createLogger("react-client");
|
|
15
22
|
let userOptions;
|
|
16
23
|
let userConfig;
|
|
17
24
|
let clientManifest = {};
|
|
18
25
|
let resolvedConfig;
|
|
19
26
|
let root;
|
|
20
27
|
let loader = (id) => import(id);
|
|
28
|
+
let worker;
|
|
29
|
+
let files;
|
|
21
30
|
function reactClientPlugin(options) {
|
|
22
31
|
const resolvedOptions = resolveOptions(options, true);
|
|
23
32
|
if (resolvedOptions.type === "error") {
|
|
@@ -25,11 +34,8 @@ function reactClientPlugin(options) {
|
|
|
25
34
|
}
|
|
26
35
|
userOptions = resolvedOptions.userOptions;
|
|
27
36
|
root = userOptions.projectRoot;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
root,
|
|
31
|
-
clientEntry: userOptions.clientEntry
|
|
32
|
-
});
|
|
37
|
+
const rscWorkerPath = join(getPluginRoot(), DEFAULT_CONFIG.RSC_WORKER_PATH);
|
|
38
|
+
log.info("RSC worker path:" + rscWorkerPath);
|
|
33
39
|
return {
|
|
34
40
|
name: "vite:react-client",
|
|
35
41
|
async config(config, configEnv) {
|
|
@@ -37,11 +43,29 @@ function reactClientPlugin(options) {
|
|
|
37
43
|
root = config.root;
|
|
38
44
|
console.log("[vite:react-client] Root updated:", root);
|
|
39
45
|
}
|
|
46
|
+
if (configEnv.command === "serve" && !configEnv.isPreview && !worker) {
|
|
47
|
+
worker = await createWorker({
|
|
48
|
+
projectRoot: root,
|
|
49
|
+
workerPath: rscWorkerPath,
|
|
50
|
+
reverseCondition: true
|
|
51
|
+
});
|
|
52
|
+
}
|
|
40
53
|
const pages = await resolvePages(userOptions.build.pages);
|
|
41
54
|
if (pages.type === "error") {
|
|
42
55
|
throw pages.error;
|
|
43
56
|
}
|
|
44
|
-
|
|
57
|
+
if (pages.pages.length > 0) {
|
|
58
|
+
files = await checkFilesExist(pages.pages, userOptions, root);
|
|
59
|
+
} else {
|
|
60
|
+
files = {
|
|
61
|
+
pageMap: /* @__PURE__ */ new Map(),
|
|
62
|
+
propsMap: /* @__PURE__ */ new Map(),
|
|
63
|
+
propsSet: /* @__PURE__ */ new Set(),
|
|
64
|
+
pageSet: /* @__PURE__ */ new Set(),
|
|
65
|
+
urlMap: /* @__PURE__ */ new Map(),
|
|
66
|
+
errors: []
|
|
67
|
+
};
|
|
68
|
+
}
|
|
45
69
|
const resolvedConfig2 = resolveUserConfig({
|
|
46
70
|
isClient: true,
|
|
47
71
|
config,
|
|
@@ -59,7 +83,12 @@ function reactClientPlugin(options) {
|
|
|
59
83
|
resolvedConfig = config;
|
|
60
84
|
},
|
|
61
85
|
async generateBundle(options2, bundle) {
|
|
62
|
-
clientManifest = getBundleManifest(
|
|
86
|
+
clientManifest = getBundleManifest({
|
|
87
|
+
pluginContext: this,
|
|
88
|
+
bundle,
|
|
89
|
+
moduleBase: userOptions.moduleBase,
|
|
90
|
+
preserveModulesRoot: userOptions.build.preserveModulesRoot
|
|
91
|
+
});
|
|
63
92
|
const manifestPath = join(
|
|
64
93
|
root,
|
|
65
94
|
resolvedConfig.environments["client"].build.outDir,
|
|
@@ -72,24 +101,64 @@ function reactClientPlugin(options) {
|
|
|
72
101
|
);
|
|
73
102
|
},
|
|
74
103
|
async configurePreviewServer(server) {
|
|
104
|
+
if (root !== server.config.root) {
|
|
105
|
+
root = server.config.root;
|
|
106
|
+
}
|
|
75
107
|
if (typeof loader !== "function") {
|
|
76
108
|
loader = (id) => import(id);
|
|
77
109
|
}
|
|
110
|
+
const normalize = createInputNormalizer({
|
|
111
|
+
root,
|
|
112
|
+
removeExtension: false,
|
|
113
|
+
preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : undefined
|
|
114
|
+
});
|
|
78
115
|
server.middlewares.use(async (req, res, next) => {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
116
|
+
const [key, value] = normalize(req.url);
|
|
117
|
+
const fileRoot = key.startsWith("node_modules") ? root : join(root, userOptions.build.outDir, userOptions.build.client);
|
|
118
|
+
if (value.endsWith(".js")) {
|
|
82
119
|
try {
|
|
83
|
-
const stats = await stat(
|
|
120
|
+
const stats = await stat(join(fileRoot, value));
|
|
84
121
|
if (stats.isFile()) {
|
|
85
|
-
const content = await readFile(
|
|
122
|
+
const content = await readFile(join(fileRoot, value), "utf-8");
|
|
86
123
|
res.setHeader("Content-Type", "application/javascript");
|
|
87
124
|
res.end(content);
|
|
125
|
+
return;
|
|
88
126
|
} else {
|
|
89
127
|
next();
|
|
90
128
|
}
|
|
91
129
|
} catch (error) {
|
|
92
|
-
|
|
130
|
+
const { manifest: clientManifest2 } = tryManifest({
|
|
131
|
+
root,
|
|
132
|
+
outDir: join(userOptions.build.outDir, userOptions.build.client)
|
|
133
|
+
});
|
|
134
|
+
const { manifest: serverManifest } = tryManifest({
|
|
135
|
+
root,
|
|
136
|
+
outDir: join(userOptions.build.outDir, userOptions.build.server)
|
|
137
|
+
});
|
|
138
|
+
if (clientManifest2 && value in clientManifest2) {
|
|
139
|
+
res.setHeader("Content-Type", "application/javascript");
|
|
140
|
+
res.end(clientManifest2[value]);
|
|
141
|
+
return;
|
|
142
|
+
} else if (serverManifest && value in serverManifest) {
|
|
143
|
+
res.setHeader("Content-Type", "application/javascript");
|
|
144
|
+
res.end(serverManifest[value]);
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
const foundClient = clientManifest2 && Object.entries(clientManifest2).find(
|
|
148
|
+
([key2, value2]) => value2 === key2 || value2 === value2.file || value2 === value2.src || value2 === value2.name
|
|
149
|
+
);
|
|
150
|
+
if (foundClient) {
|
|
151
|
+
res.setHeader("Content-Type", "application/javascript");
|
|
152
|
+
res.end(foundClient);
|
|
153
|
+
}
|
|
154
|
+
const foundServer = serverManifest && Object.entries(serverManifest).find(
|
|
155
|
+
([key2, value2]) => value2 === key2 || value2 === value2.file || value2 === value2.src || value2 === value2.name
|
|
156
|
+
);
|
|
157
|
+
if (foundServer) {
|
|
158
|
+
res.setHeader("Content-Type", "application/javascript");
|
|
159
|
+
res.end(foundServer);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
93
162
|
next();
|
|
94
163
|
}
|
|
95
164
|
} else {
|
|
@@ -102,24 +171,132 @@ function reactClientPlugin(options) {
|
|
|
102
171
|
if (typeof loader !== "function") {
|
|
103
172
|
loader = server.ssrLoadModule;
|
|
104
173
|
}
|
|
174
|
+
if (!worker) {
|
|
175
|
+
log.info("Creating RSC worker...");
|
|
176
|
+
worker = await createWorker({
|
|
177
|
+
projectRoot: root,
|
|
178
|
+
workerPath: rscWorkerPath,
|
|
179
|
+
condition: "react-client"
|
|
180
|
+
});
|
|
181
|
+
log.info("RSC worker created");
|
|
182
|
+
}
|
|
183
|
+
const normalize = createInputNormalizer({
|
|
184
|
+
root,
|
|
185
|
+
removeExtension: false,
|
|
186
|
+
preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : undefined
|
|
187
|
+
});
|
|
105
188
|
server.middlewares.use(async (req, res, next) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
189
|
+
if (!req.url) {
|
|
190
|
+
next();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (req.url.endsWith(".rsc") || req.headers.accept?.includes("text/x-component")) {
|
|
109
194
|
try {
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
195
|
+
const path = req.url?.includes("index.rsc") ? req.url.replace("index.rsc", "") : req.url?.replace(".rsc", "");
|
|
196
|
+
let [key, value] = normalize(path);
|
|
197
|
+
let pageImport = DEFAULT_CONFIG.PAGE;
|
|
198
|
+
let propsImport = DEFAULT_CONFIG.PROPS;
|
|
199
|
+
const pathNoTrailing = path?.replace(/\/$/, "");
|
|
200
|
+
if (files.urlMap.has(req.url)) {
|
|
201
|
+
pageImport = files.urlMap.get(req.url).page;
|
|
202
|
+
propsImport = files.urlMap.get(req.url).props;
|
|
203
|
+
} else if (files.urlMap.has(pathNoTrailing)) {
|
|
204
|
+
pageImport = files.urlMap.get(pathNoTrailing).page;
|
|
205
|
+
propsImport = files.urlMap.get(pathNoTrailing).props;
|
|
206
|
+
} else if (files.urlMap.has(path)) {
|
|
207
|
+
pageImport = files.urlMap.get(path).page;
|
|
208
|
+
propsImport = files.urlMap.get(path).props;
|
|
209
|
+
} else if (files.urlMap.has(value)) {
|
|
210
|
+
pageImport = files.urlMap.get(value).page;
|
|
211
|
+
propsImport = files.urlMap.get(value).props;
|
|
212
|
+
} else if (files.urlMap.has(key)) {
|
|
213
|
+
pageImport = files.urlMap.get(key).page;
|
|
214
|
+
propsImport = files.urlMap.get(key).props;
|
|
115
215
|
} else {
|
|
116
|
-
|
|
216
|
+
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(", ")}`);
|
|
117
217
|
}
|
|
218
|
+
res.setHeader("Content-Type", "text/x-component");
|
|
219
|
+
res.setHeader("Transfer-Encoding", "chunked");
|
|
220
|
+
res.setHeader("Connection", "keep-alive");
|
|
221
|
+
let hasError = false;
|
|
222
|
+
const timeout = setTimeout(() => {
|
|
223
|
+
if (!hasError) {
|
|
224
|
+
hasError = true;
|
|
225
|
+
res.statusCode = 500;
|
|
226
|
+
res.end("RSC render timeout");
|
|
227
|
+
}
|
|
228
|
+
}, 5e3);
|
|
229
|
+
const messageHandler = (message) => {
|
|
230
|
+
try {
|
|
231
|
+
switch (message.type) {
|
|
232
|
+
case "RSC_CHUNK":
|
|
233
|
+
if (!hasError) {
|
|
234
|
+
res.write(message.chunk);
|
|
235
|
+
}
|
|
236
|
+
break;
|
|
237
|
+
case "RSC_END":
|
|
238
|
+
clearTimeout(timeout);
|
|
239
|
+
if (!hasError) {
|
|
240
|
+
res.end();
|
|
241
|
+
}
|
|
242
|
+
worker.off("message", messageHandler);
|
|
243
|
+
break;
|
|
244
|
+
case "ERROR":
|
|
245
|
+
clearTimeout(timeout);
|
|
246
|
+
log.error("Render error", message);
|
|
247
|
+
if (!hasError) {
|
|
248
|
+
hasError = true;
|
|
249
|
+
res.statusCode = 500;
|
|
250
|
+
res.end(message.error);
|
|
251
|
+
}
|
|
252
|
+
worker.off("message", messageHandler);
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
} catch (error) {
|
|
256
|
+
clearTimeout(timeout);
|
|
257
|
+
if (!hasError) {
|
|
258
|
+
hasError = true;
|
|
259
|
+
res.statusCode = 500;
|
|
260
|
+
res.end(
|
|
261
|
+
error instanceof Error ? error.message : String(error)
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
worker.off("message", messageHandler);
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
worker.on("message", messageHandler);
|
|
268
|
+
worker.once("error", (error) => {
|
|
269
|
+
clearTimeout(timeout);
|
|
270
|
+
if (!hasError) {
|
|
271
|
+
hasError = true;
|
|
272
|
+
res.statusCode = 500;
|
|
273
|
+
res.end(error instanceof Error ? error.message : String(error));
|
|
274
|
+
}
|
|
275
|
+
worker.off("message", messageHandler);
|
|
276
|
+
});
|
|
277
|
+
worker.postMessage({
|
|
278
|
+
type: "RSC_RENDER",
|
|
279
|
+
id: value,
|
|
280
|
+
pageImport,
|
|
281
|
+
propsImport,
|
|
282
|
+
url: req.url ?? "/",
|
|
283
|
+
pageExportName: userOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME,
|
|
284
|
+
propsExportName: userOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME,
|
|
285
|
+
outDir: userOptions.build.outDir,
|
|
286
|
+
projectRoot: root,
|
|
287
|
+
moduleRootPath: userOptions.build.preserveModulesRoot === true ? userOptions.moduleBase : "",
|
|
288
|
+
moduleBaseURL: ``,
|
|
289
|
+
moduleBasePath: "/",
|
|
290
|
+
pipableStreamOptions: userOptions.pipableStreamOptions,
|
|
291
|
+
cssFiles: []
|
|
292
|
+
});
|
|
118
293
|
} catch (error) {
|
|
119
|
-
|
|
294
|
+
log.error("Middleware error:", error);
|
|
295
|
+
res.statusCode = 500;
|
|
296
|
+
res.end(error instanceof Error ? error.message : String(error));
|
|
120
297
|
}
|
|
121
|
-
} else
|
|
122
|
-
|
|
298
|
+
} else {
|
|
299
|
+
next();
|
|
123
300
|
}
|
|
124
301
|
});
|
|
125
302
|
}
|
|
@@ -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 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, resolve } from \"node:path\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport { checkFilesExist } from \"../checkFilesExist.js\";\nimport { resolvePages } from \"../config/resolvePages.js\";\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) => import(id);\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 console.log(\"[vite:react-client] Initial setup:\", {\n projectRoot: userOptions.projectRoot,\n root: root,\n clientEntry: userOptions.clientEntry\n });\n\n return {\n name: \"vite:react-client\",\n\n async config(config, configEnv) {\n\n if(typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\") {\n root = config.root;\n console.log(\"[vite:react-client] Root updated:\", root);\n }\n\n const pages = await resolvePages(userOptions.build.pages);\n if(pages.type === \"error\") {\n throw pages.error;\n }\n\n const files = await checkFilesExist(pages.pages, userOptions, root);\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(this, bundle, undefined);\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 (typeof loader !== \"function\") {\n loader = (id: string) => import(id);\n }\n server.middlewares.use(async (req, res, next) => {\n console.log('req.url', req.url);\n if (req.url && req.url.endsWith('.js')) {\n const nodeRoot = process.env['NODE_PATH'] ?? process.cwd();\n \n try {\n const stats = await stat(req.url);\n if (stats.isFile()) {\n const content = await readFile(req.url, 'utf-8');\n res.setHeader('Content-Type', 'application/javascript');\n res.end(content);\n } else {\n next();\n }\n } catch (error) {\n console.error('error', error);\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 server.middlewares.use(async (req, res, next) => {\n console.log('req.url', req.url);\n if (req.url && req.url.endsWith('.js')) {\n const filePath = join(root, req.url);\n try {\n const stats = await stat(filePath);\n if (stats.isFile()) {\n const content = await readFile(filePath, 'utf-8');\n res.setHeader('Content-Type', 'application/javascript');\n res.end(content);\n } else {\n next();\n }\n } catch (error) {\n next();\n }\n } else if(req.url && req.url.endsWith('.rsc')) {\n // stream the rsc stream\n throw new Error('Not implemented');\n }\n });\n }\n };\n}\n"],"names":["resolvedConfig","options"],"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 { 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createHandler.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/createHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG7E,KAAK,mBAAmB,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAOrB,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,mBAAmB,EAClC,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,GACrC,OAAO,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"createHandler.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/createHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAG7E,KAAK,mBAAmB,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAOrB,wBAAsB,aAAa,CAAC,CAAC,EACnC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,mBAAmB,EAClC,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,GACrC,OAAO,CAAC,mBAAmB,CAAC,CAuI9B"}
|
|
@@ -13,8 +13,8 @@ import { createRscStream } from './createRscStream.js';
|
|
|
13
13
|
async function createHandler(url, pluginOptions, streamOptions) {
|
|
14
14
|
const root = pluginOptions.projectRoot ?? process.cwd();
|
|
15
15
|
const Html = pluginOptions.Html ?? DEFAULT_CONFIG.HTML;
|
|
16
|
-
const pageExportName = pluginOptions.pageExportName ?? DEFAULT_CONFIG.
|
|
17
|
-
const propsExportName = pluginOptions.propsExportName ?? DEFAULT_CONFIG.
|
|
16
|
+
const pageExportName = pluginOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME;
|
|
17
|
+
const propsExportName = pluginOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME;
|
|
18
18
|
const controller = new AbortController();
|
|
19
19
|
const cssFiles = streamOptions.cssFiles;
|
|
20
20
|
const propsPath = typeof pluginOptions.props === "function" ? pluginOptions.props(url) : pluginOptions.props;
|
|
@@ -32,7 +32,12 @@ async function createHandler(url, pluginOptions, streamOptions) {
|
|
|
32
32
|
try {
|
|
33
33
|
const mod = await streamOptions.loader(id);
|
|
34
34
|
const pageCss = await Promise.resolve(getCss(id));
|
|
35
|
-
Array.from(pageCss.keys()).forEach((css) =>
|
|
35
|
+
Array.from(pageCss.keys()).forEach((css) => {
|
|
36
|
+
cssModules.add(css);
|
|
37
|
+
if (streamOptions.onCssFile) {
|
|
38
|
+
streamOptions.onCssFile(css);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
36
41
|
return mod;
|
|
37
42
|
} catch (e) {
|
|
38
43
|
if (e.message?.includes("module runner has been closed")) {
|
|
@@ -92,6 +97,8 @@ async function createHandler(url, pluginOptions, streamOptions) {
|
|
|
92
97
|
moduleBasePath: "",
|
|
93
98
|
logger: streamOptions.logger ?? createLogger(),
|
|
94
99
|
cssFiles: Array.from(cssModules),
|
|
100
|
+
route: url,
|
|
101
|
+
url,
|
|
95
102
|
pipableStreamOptions: streamOptions.pipableStreamOptions,
|
|
96
103
|
htmlProps: {
|
|
97
104
|
pageProps: props,
|
|
@@ -100,7 +107,6 @@ async function createHandler(url, pluginOptions, streamOptions) {
|
|
|
100
107
|
}
|
|
101
108
|
});
|
|
102
109
|
if (!stream) {
|
|
103
|
-
console.log("[createHandler] No stream created for route:", url);
|
|
104
110
|
return { type: "skip" };
|
|
105
111
|
}
|
|
106
112
|
const assets = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createHandler.js","sources":["../../../plugin/react-server/createHandler.ts"],"sourcesContent":["import type { PipeableStream } from \"react-dom/server\";\nimport { createLogger } from \"vite\";\nimport {\n collectManifestCss,\n collectModuleGraphCss,\n} from \"../collect-css-manifest.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { resolvePage } from \"../resolvePage.js\";\nimport { resolveProps } from \"../resolveProps.js\";\nimport type { CreateHandlerOptions, ResolvedUserOptions } from \"../types.js\";\nimport { createRscStream } from \"./createRscStream.js\";\n\ntype CreateHandlerResult = \n | { type: \"success\"; controller: AbortController; stream: PipeableStream; assets: any; clientPath: string }\n | { type: \"error\"; error: Error }\n | { type: \"skip\" };\n\ninterface HandlerAssets {\n css: Set<string>;\n clientPath: string;\n}\n\nexport async function createHandler<T>(\n url: string,\n pluginOptions: ResolvedUserOptions,\n streamOptions: CreateHandlerOptions<T>\n): Promise<CreateHandlerResult> {\n const root = pluginOptions.projectRoot ?? process.cwd();\n\n const Html = pluginOptions.Html ?? DEFAULT_CONFIG.HTML;\n const pageExportName =\n pluginOptions.pageExportName ?? DEFAULT_CONFIG.
|
|
1
|
+
{"version":3,"file":"createHandler.js","sources":["../../../plugin/react-server/createHandler.ts"],"sourcesContent":["import type { PipeableStream } from \"react-dom/server\";\nimport { createLogger } from \"vite\";\nimport {\n collectManifestCss,\n collectModuleGraphCss,\n} from \"../collect-css-manifest.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { resolvePage } from \"../resolvePage.js\";\nimport { resolveProps } from \"../resolveProps.js\";\nimport type { CreateHandlerOptions, ResolvedUserOptions } from \"../types.js\";\nimport { createRscStream } from \"./createRscStream.js\";\n\ntype CreateHandlerResult = \n | { type: \"success\"; controller: AbortController; stream: PipeableStream; assets: any; clientPath: string }\n | { type: \"error\"; error: Error }\n | { type: \"skip\" };\n\ninterface HandlerAssets {\n css: Set<string>;\n clientPath: string;\n}\n\nexport async function createHandler<T>(\n url: string,\n pluginOptions: ResolvedUserOptions,\n streamOptions: CreateHandlerOptions<T>\n): Promise<CreateHandlerResult> {\n const root = pluginOptions.projectRoot ?? process.cwd();\n\n const Html = pluginOptions.Html ?? DEFAULT_CONFIG.HTML;\n const pageExportName =\n pluginOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME;\n const propsExportName =\n pluginOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME;\n const controller = new AbortController();\n\n const cssFiles = streamOptions.cssFiles;\n const propsPath =\n typeof pluginOptions.props === \"function\"\n ? pluginOptions.props(url)\n : pluginOptions.props;\n const pagePath =\n typeof pluginOptions.Page === \"function\"\n ? pluginOptions.Page(url)\n : pluginOptions.Page;\n\n const cssModules = new Set<string>();\n\n if (!(streamOptions.serverManifest || streamOptions.moduleGraph))\n throw new Error(\"Missing server manifest or moduleGraph, pass it to options.\");\n\n const getCss = streamOptions.serverManifest\n ? (id: string) =>\n collectManifestCss(\n streamOptions.serverManifest!,\n root,\n id,\n streamOptions.onCssFile\n )\n : (id: string) => collectModuleGraphCss(streamOptions.moduleGraph!, id);\n\n const loadWithCss = async (id: string) => {\n try {\n const mod = await streamOptions.loader(id);\n const pageCss = await Promise.resolve(getCss(id));\n Array.from(pageCss.keys()).forEach((css) => {\n cssModules.add(css);\n // Notify about new CSS file if callback exists\n if (streamOptions.onCssFile) {\n streamOptions.onCssFile(css);\n }\n });\n return mod as Record<string, any>;\n } catch (e: any) {\n if (e.message?.includes(\"module runner has been closed\")) {\n return { type: \"skip\" } as Record<string, any>;\n } else {\n return { type: \"error\", error: e } as Record<string, any>;\n }\n }\n };\n\n const PropsModule = await resolveProps({\n propsModule: await loadWithCss(propsPath ?? pagePath),\n path: String(propsPath ?? pagePath),\n exportName: propsExportName,\n url,\n });\n if (PropsModule.type === \"error\")\n return { type: PropsModule.type, error: PropsModule?.error };\n if (PropsModule.type === \"skip\") return { type: PropsModule.type };\n const props = PropsModule[propsExportName as keyof typeof PropsModule] as any;\n if (props?.type === \"error\") return { type: props.type, error: props.error };\n if (props?.type === \"skip\") return { type: props.type };\n\n const PageModule = await resolvePage({\n pageModule: await loadWithCss(pagePath),\n path: pagePath,\n exportName: pageExportName,\n url,\n });\n if (PageModule.type === \"error\")\n return { type: PageModule.type, error: PageModule.error };\n if (PageModule.type === \"skip\") return { type: PageModule.type };\n const Page = PageModule[pageExportName as keyof typeof PageModule] as any;\n if (Page?.type === \"error\") return { type: Page.type, error: Page.error };\n if (Page?.type === \"skip\") return { type: Page.type };\n if (!(typeof Page === \"function\")) {\n return {\n type: \"error\",\n error: new Error(\"Invalid Page component: \" + pagePath, {\n cause: Page,\n }),\n };\n }\n if (!(typeof props === \"object\")) {\n return {\n type: \"error\",\n error: new Error(\"Invalid props: \" + propsPath, {\n cause: props,\n }),\n } \n }\n\n // Add any additional CSS files\n if (streamOptions.cssFiles) {\n streamOptions.cssFiles.forEach((css) => cssModules.add(css));\n }\n const stream = createRscStream({\n Html: Html,\n Page: Page,\n props: props,\n moduleBasePath: '',\n logger: streamOptions.logger ?? createLogger(),\n cssFiles: Array.from(cssModules),\n route: url,\n url,\n pipableStreamOptions: streamOptions.pipableStreamOptions,\n htmlProps: {\n pageProps: props,\n route: url,\n url: url,\n },\n });\n\n if (!stream) {\n return { type: \"skip\" as const };\n }\n\n const assets: HandlerAssets = {\n css: new Set(cssFiles ?? []),\n clientPath: pagePath ?? ''\n };\n\n return {\n type: \"success\",\n controller,\n stream,\n assets,\n clientPath: assets.clientPath,\n };\n}\n"],"names":[],"mappings":"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"}
|