vite-plugin-react-server 1.1.17 → 1.1.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/package.json +5 -4
- package/dist/plugin/components/css-collector-elements.d.ts.map +1 -1
- package/dist/plugin/components/html.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/createGlobAutoDiscover.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/customWorkerFiles.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/pageAndPropFiles.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +7 -12
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveBuildPages.js +2 -2
- package/dist/plugin/config/autoDiscover/resolveBuildPages.js.map +1 -1
- package/dist/plugin/config/createModuleID.d.ts.map +1 -1
- package/dist/plugin/config/defaults.js +16 -2
- package/dist/plugin/config/defaults.js.map +1 -1
- package/dist/plugin/config/extMap.d.ts.map +1 -1
- package/dist/plugin/config/getCondition.d.ts.map +1 -1
- package/dist/plugin/config/getPaths.d.ts.map +1 -1
- package/dist/plugin/config/mimeTypes.d.ts.map +1 -1
- package/dist/plugin/config/mimeTypes.js +67 -0
- package/dist/plugin/config/mimeTypes.js.map +1 -1
- package/dist/plugin/config/resolveAutoDiscoverMatcher.d.ts.map +1 -1
- package/dist/plugin/config/resolveEnv.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.js +1 -1
- 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 +39 -22
- package/dist/plugin/config/resolveUserConfig.js.map +1 -1
- package/dist/plugin/env/plugin.d.ts.map +1 -1
- package/dist/plugin/env/plugin.js +35 -2
- package/dist/plugin/env.js +37 -3
- package/dist/plugin/env.js.map +1 -1
- package/dist/plugin/error/toError.js +4 -4
- package/dist/plugin/error/toError.js.map +1 -1
- package/dist/plugin/helpers/cleanObject.js +2 -2
- package/dist/plugin/helpers/cleanObject.js.map +1 -1
- package/dist/plugin/helpers/collectManifestCss.js +2 -2
- package/dist/plugin/helpers/collectManifestCss.js.map +1 -1
- package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +1 -1
- package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
- package/dist/plugin/helpers/collectViteModuleGraphCss.js +3 -1
- package/dist/plugin/helpers/collectViteModuleGraphCss.js.map +1 -1
- package/dist/plugin/helpers/createCssProps.d.ts +1 -1
- package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
- package/dist/plugin/helpers/createCssProps.js +12 -1
- package/dist/plugin/helpers/createCssProps.js.map +1 -1
- package/dist/plugin/helpers/createEventHandler.d.ts.map +1 -1
- package/dist/plugin/helpers/createEventHandler.js +1 -1
- package/dist/plugin/helpers/getBundleManifest.js +1 -1
- package/dist/plugin/helpers/getRouteFiles.d.ts.map +1 -1
- package/dist/plugin/helpers/getRouteFiles.js +2 -2
- package/dist/plugin/helpers/getRouteFiles.js.map +1 -1
- package/dist/plugin/helpers/inputNormalizer.js +1 -1
- package/dist/plugin/helpers/inputNormalizer.js.map +1 -1
- package/dist/plugin/helpers/requestInfo.js +1 -1
- package/dist/plugin/helpers/requestInfo.js.map +1 -1
- package/dist/plugin/helpers/resolvePage.d.ts.map +1 -1
- package/dist/plugin/helpers/resolveProps.d.ts.map +1 -1
- package/dist/plugin/helpers/serializeUserOptions.d.ts.map +1 -1
- package/dist/plugin/helpers/sourceMap.d.ts.map +1 -1
- package/dist/plugin/helpers/stashReturnValue.d.ts.map +1 -1
- package/dist/plugin/helpers/tryManifest.d.ts +3 -1
- package/dist/plugin/helpers/tryManifest.d.ts.map +1 -1
- package/dist/plugin/helpers/tryManifest.js +14 -8
- package/dist/plugin/helpers/tryManifest.js.map +1 -1
- package/dist/plugin/loader/transformModuleIfNeeded.d.ts.map +1 -1
- package/dist/plugin/loader/transformModuleIfNeeded.js +1 -2
- package/dist/plugin/loader/transformModuleIfNeeded.js.map +1 -1
- package/dist/plugin/metrics/formatMetrics.d.ts.map +1 -1
- package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts.map +1 -1
- package/dist/plugin/react-client/configureWorkerRequestHandler.js +14 -18
- package/dist/plugin/react-client/configureWorkerRequestHandler.js.map +1 -1
- package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -1
- package/dist/plugin/react-server/configureReactServer.d.ts.map +1 -1
- package/dist/plugin/react-server/configureReactServer.js +0 -12
- package/dist/plugin/react-server/configureReactServer.js.map +1 -1
- package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
- package/dist/plugin/react-static/configurePreviewServer.js +1 -1
- package/dist/plugin/react-static/configurePreviewServer.js.map +1 -1
- package/dist/plugin/react-static/plugin.d.ts.map +1 -1
- package/dist/plugin/react-static/plugin.js +5 -14
- package/dist/plugin/react-static/plugin.js.map +1 -1
- package/dist/plugin/react-static/renderPages.js +1 -1
- package/dist/plugin/react-static/renderPages.js.map +1 -1
- package/dist/plugin/source-map/createMappingsSerializer.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.server.d.ts +24 -0
- package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.server.js +18 -15
- package/dist/plugin/transformer/plugin.server.js.map +1 -1
- package/dist/plugin/types.d.ts +4 -2
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/utils/createCallServer.d.ts.map +1 -1
- package/dist/plugin/utils/envUrls.node.d.ts.map +1 -1
- package/dist/plugin/utils/urls.d.ts.map +1 -1
- package/dist/plugin/vendor/types.d.ts +2 -0
- package/dist/plugin/vendor/types.d.ts.map +1 -0
- package/dist/plugin/vendor/types.js +1 -0
- package/dist/plugin/worker/createWorker.js +1 -1
- package/dist/plugin/worker/createWorker.js.map +1 -1
- package/dist/plugin/worker/rsc/state.d.ts +1 -1
- package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/state.js +31 -17
- package/dist/plugin/worker/rsc/state.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -6
- package/plugin/config/autoDiscover/resolveAutoDiscover.ts +6 -14
- package/plugin/config/mimeTypes.ts +75 -1
- package/plugin/config/resolveUserConfig.ts +46 -21
- package/plugin/env/plugin.ts +39 -3
- package/plugin/helpers/collectManifestCss.ts +2 -2
- package/plugin/helpers/collectViteModuleGraphCss.ts +3 -0
- package/plugin/helpers/createCssProps.tsx +20 -3
- package/plugin/helpers/requestInfo.ts +1 -1
- package/plugin/helpers/tryManifest.ts +20 -10
- package/plugin/loader/transformModuleIfNeeded.ts +1 -4
- package/plugin/react-client/configureWorkerRequestHandler.ts +16 -20
- package/plugin/react-server/configureReactServer.ts +0 -12
- package/plugin/react-static/configurePreviewServer.ts +1 -2
- package/plugin/react-static/plugin.ts +20 -27
- package/plugin/transformer/plugin.server.ts +22 -15
- package/plugin/types.ts +8 -6
- package/plugin/vendor/types.ts +0 -0
- package/plugin/worker/rsc/state.ts +53 -28
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformModuleIfNeeded.d.ts","sourceRoot":"","sources":["../../../plugin/loader/transformModuleIfNeeded.ts"],"names":[],"mappings":"AAKA,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,OAAO,GAAG,gBAAgB,GAAG,IAA0E,EACzH,iBAAiB,GAAE,OAAO,GAAG,gBAAgB,GAAG,IAAiE,EACjH,mBAAmB,UAAoC,
|
|
1
|
+
{"version":3,"file":"transformModuleIfNeeded.d.ts","sourceRoot":"","sources":["../../../plugin/loader/transformModuleIfNeeded.ts"],"names":[],"mappings":"AAKA,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,gBAAgB,GAAE,OAAO,GAAG,gBAAgB,GAAG,IAA0E,EACzH,iBAAiB,GAAE,OAAO,GAAG,gBAAgB,GAAG,IAAiE,EACjH,mBAAmB,UAAoC,UAmBxD"}
|
|
@@ -9,14 +9,13 @@ import { parse } from './parse.js';
|
|
|
9
9
|
import { DEFAULT_CONFIG } from '../config/defaults.js';
|
|
10
10
|
|
|
11
11
|
function transformModuleIfNeeded(source, moduleId, isServerFunction = DEFAULT_CONFIG.AUTO_DISCOVER.isServerFunctionCode(source, moduleId), isClientComponent = DEFAULT_CONFIG.AUTO_DISCOVER.isClientComponentCode(source), isServerEnvironment = getCondition() === "react-server") {
|
|
12
|
-
const ast = parse(source);
|
|
13
12
|
if (isServerEnvironment && !isServerFunction && !isClientComponent || !isServerEnvironment && isClientComponent) {
|
|
14
13
|
return source;
|
|
15
14
|
}
|
|
16
15
|
const result = transformModuleWithPreservedFunctions(
|
|
17
16
|
source,
|
|
18
17
|
moduleId,
|
|
19
|
-
|
|
18
|
+
parse(source),
|
|
20
19
|
isServerFunction,
|
|
21
20
|
isClientComponent
|
|
22
21
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformModuleIfNeeded.js","sources":["../../../plugin/loader/transformModuleIfNeeded.ts"],"sourcesContent":["import { getCondition } from \"../config/getCondition.js\";\nimport { transformModuleWithPreservedFunctions } from \"./transformModuleWithPreservedFunctions.js\";\nimport { parse } from \"./parse.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\n\nexport function transformModuleIfNeeded(\n source: string,\n moduleId: string,\n isServerFunction: boolean | RegExpMatchArray | null = DEFAULT_CONFIG.AUTO_DISCOVER.isServerFunctionCode(source, moduleId),\n isClientComponent: boolean | RegExpMatchArray | null = DEFAULT_CONFIG.AUTO_DISCOVER.isClientComponentCode(source),\n isServerEnvironment = getCondition() === \"react-server\"\n) {\n //
|
|
1
|
+
{"version":3,"file":"transformModuleIfNeeded.js","sources":["../../../plugin/loader/transformModuleIfNeeded.ts"],"sourcesContent":["import { getCondition } from \"../config/getCondition.js\";\nimport { transformModuleWithPreservedFunctions } from \"./transformModuleWithPreservedFunctions.js\";\nimport { parse } from \"./parse.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\n\nexport function transformModuleIfNeeded(\n source: string,\n moduleId: string,\n isServerFunction: boolean | RegExpMatchArray | null = DEFAULT_CONFIG.AUTO_DISCOVER.isServerFunctionCode(source, moduleId),\n isClientComponent: boolean | RegExpMatchArray | null = DEFAULT_CONFIG.AUTO_DISCOVER.isClientComponentCode(source),\n isServerEnvironment = getCondition() === \"react-server\"\n) {\n // Handle environment-specific cases\n if (\n (isServerEnvironment && !isServerFunction && !isClientComponent) ||\n (!isServerEnvironment && isClientComponent)\n ) {\n return source\n }\n\n const result = transformModuleWithPreservedFunctions(\n source,\n moduleId,\n parse(source),\n isServerFunction,\n isClientComponent\n );\n\n return result\n}\n"],"names":[],"mappings":";;;;;;;;;;AAKO,SAAS,wBACd,MACA,EAAA,QAAA,EACA,mBAAsD,cAAe,CAAA,aAAA,CAAc,qBAAqB,MAAQ,EAAA,QAAQ,GACxH,iBAAuD,GAAA,cAAA,CAAe,cAAc,qBAAsB,CAAA,MAAM,GAChH,mBAAsB,GAAA,YAAA,OAAmB,cACzC,EAAA;AAEA,EAAA,IACG,uBAAuB,CAAC,gBAAA,IAAoB,CAAC,iBAC7C,IAAA,CAAC,uBAAuB,iBACzB,EAAA;AACA,IAAO,OAAA,MAAA;AAAA;AAGT,EAAA,MAAM,MAAS,GAAA,qCAAA;AAAA,IACb,MAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAM,MAAM,CAAA;AAAA,IACZ,gBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAO,OAAA,MAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatMetrics.d.ts","sourceRoot":"","sources":["../../../plugin/metrics/formatMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA+B5D;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAa,EACb,QAAgB,EAChB,IAAmB,EACnB,IAAmB,GACpB,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjC,
|
|
1
|
+
{"version":3,"file":"formatMetrics.d.ts","sourceRoot":"","sources":["../../../plugin/metrics/formatMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA+B5D;AAED,wBAAgB,aAAa,CAAC,EAC5B,OAAa,EACb,QAAgB,EAChB,IAAmB,EACnB,IAAmB,GACpB,EAAE;IACD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;CACjC,IACS,SAAS,aAAa,UAe/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureWorkerRequestHandler.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/configureWorkerRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,aAAa,EAEb,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"configureWorkerRequestHandler.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/configureWorkerRequestHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,aAAa,EAEb,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAalE;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,EACA,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,UAAU,EACV,SAAS,GACV,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC9C,iBAmRA"}
|
|
@@ -11,6 +11,7 @@ import { restartWorker } from './restartWorker.js';
|
|
|
11
11
|
import { handleWorkerRscStream } from './handleWorkerRscStream.js';
|
|
12
12
|
import { getRouteFiles } from '../helpers/getRouteFiles.js';
|
|
13
13
|
import { PassThrough, Readable } from 'node:stream';
|
|
14
|
+
import { logError, toError } from '../error/toError.js';
|
|
14
15
|
|
|
15
16
|
async function configureWorkerRequestHandler({
|
|
16
17
|
server,
|
|
@@ -105,33 +106,28 @@ async function configureWorkerRequestHandler({
|
|
|
105
106
|
} else if (message.type === "ERROR") {
|
|
106
107
|
passThrough.end();
|
|
107
108
|
currentWorker.removeListener("message", messageHandler);
|
|
108
|
-
|
|
109
|
-
error: message.error
|
|
110
|
-
});
|
|
109
|
+
logError(message.error, server.config.logger);
|
|
111
110
|
}
|
|
112
111
|
};
|
|
113
112
|
currentWorker.on("message", messageHandler);
|
|
114
113
|
passThrough.on("error", (error) => {
|
|
115
|
-
server.config.logger
|
|
116
|
-
error
|
|
117
|
-
});
|
|
114
|
+
logError(error, server.config.logger);
|
|
118
115
|
res.end();
|
|
119
116
|
});
|
|
120
117
|
return;
|
|
121
118
|
} catch (error) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
error
|
|
125
|
-
});
|
|
126
|
-
}
|
|
119
|
+
const err = toError(error);
|
|
120
|
+
logError(err, server.config.logger);
|
|
127
121
|
res.statusCode = 500;
|
|
128
|
-
res.end(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
122
|
+
res.end(
|
|
123
|
+
JSON.stringify({
|
|
124
|
+
type: "server-action-response",
|
|
125
|
+
returnValue: {
|
|
126
|
+
success: false,
|
|
127
|
+
error: err.message
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
);
|
|
135
131
|
return;
|
|
136
132
|
}
|
|
137
133
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureWorkerRequestHandler.js","sources":["../../../plugin/react-client/configureWorkerRequestHandler.ts"],"sourcesContent":["import type { ViteDevServer } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n InlineCssOpt,\n PagePropOpt,\n RenderMetrics,\n RequestHandler,\n ResolvedUserOptions,\n StreamMetrics,\n} from \"../types.js\";\nimport { MessageChannel, type Worker } from \"node:worker_threads\";\nimport { serializedOptions } from \"../helpers/serializeUserOptions.js\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\nimport { performance } from \"node:perf_hooks\";\nimport { restartWorker } from \"./restartWorker.js\";\nimport { handleWorkerRscStream } from \"./handleWorkerRscStream.js\";\nimport { getRouteFiles } from \"../helpers/getRouteFiles.js\";\nimport type { RscWorkerInputMessage } from \"../worker/types.js\";\nimport { Readable } from \"node:stream\";\nimport type { ReadableStream } from \"node:stream/web\";\nimport { PassThrough } from \"node:stream\";\n\n/**\n * Configures the worker request handler.\n * @param server - The Vite dev server\n * @param autoDiscoveredFiles - The auto discovered files\n * @param userOptions - The user options\n */\nexport async function configureWorkerRequestHandler<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n hmrChannel,\n onMetrics,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n hmrChannel: MessageChannel;\n onMetrics?: (metrics: RenderMetrics) => void;\n}) {\n let {\n // remove these\n projectRoot: _projectRoot,\n moduleBaseURL: _moduleBaseURL,\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = Object.assign({}, handlerUserOptions, {\n moduleBaseURL: server.config.base,\n moduleBasePath: server.config.base,\n projectRoot: server.config.root,\n });\n\n // Start the worker\n let currentWorker: Worker | null = null;\n const logger = server.config.logger;\n\n // Handle server restarts\n server.ws.on(\"restart\", async () => {\n logger.info(\"[react-client] Server restarting, shutting down worker...\");\n if (currentWorker) {\n currentWorker.postMessage({\n type: \"SHUTDOWN\",\n id: \"*\",\n } satisfies RscWorkerInputMessage);\n await new Promise((resolve, reject) => {\n currentWorker?.on(\"message\", (message) => {\n if (message.type === \"SHUTDOWN_COMPLETE\") {\n resolve(true);\n } else {\n reject(\"Did not receive SHUTDOWN_COMPLETE\");\n }\n });\n });\n currentWorker.removeAllListeners();\n currentWorker = null;\n }\n });\n\n // Create the request handler\n const handler: RequestHandler = async (req, res, next) => {\n if (!req.url) return next();\n\n const info = requestInfo(req, handlerOptions, \"\", server.config.logger);\n\n // Serialize user options for worker\n const serializedUserOptions = serializedOptions<T, InlineCSS>(\n handlerOptions,\n autoDiscoveredFiles\n );\n\n // Handle server action requests\n if (info.isServerActionRequest) {\n try {\n // Read request body\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk);\n }\n const body = Buffer.concat(chunks).toString();\n const parsed = JSON.parse(body);\n \n // Get action ID and args from the request body\n let id: string;\n let args: unknown[];\n if (Array.isArray(parsed)) {\n // Format 1: Direct args array\n args = parsed;\n id = req.url?.split(\"?\")[0] ?? \"\";\n } else if (parsed && typeof parsed === \"object\" && \"id\" in parsed) {\n // Format 2: Object with id and args\n id = parsed.id;\n args = parsed.args ?? [];\n } else {\n throw new Error(\"Invalid server action request format\");\n }\n\n // Set up response headers for streaming\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n res.setHeader(\"Transfer-Encoding\", \"chunked\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n if (!currentWorker) {\n currentWorker = await restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions: serializedUserOptions,\n hmrChannel,\n });\n }\n\n // Send server action request to worker\n currentWorker!.postMessage({\n type: \"SERVER_ACTION\",\n id,\n args,\n } satisfies RscWorkerInputMessage);\n\n // Create a pass-through stream for the response\n const passThrough = new PassThrough();\n passThrough.pipe(res);\n\n // Handle worker messages\n const messageHandler = (message: any) => {\n if (message.type === \"RSC_CHUNK\") {\n passThrough.write(message.chunk);\n } else if (message.type === \"RSC_END\") {\n passThrough.end();\n currentWorker!.removeListener(\"message\", messageHandler);\n } else if (message.type === \"ERROR\") {\n passThrough.end();\n currentWorker!.removeListener(\"message\", messageHandler);\n server.config.logger.error(message.error.message + (message.error.stack ?? \"\"), {\n error: message.error,\n });\n }\n };\n\n currentWorker!.on(\"message\", messageHandler);\n\n // Handle errors\n passThrough.on(\"error\", (error) => {\n server.config.logger.error(error.message + (error.stack ?? \"\"), {\n error,\n });\n res.end();\n });\n\n return;\n } catch (error) {\n if (error instanceof Error) {\n server.config.logger.error(error.message + (error.stack ?? \"\"), {\n error,\n });\n }\n res.statusCode = 500;\n res.end(JSON.stringify({\n type: \"server-action-response\",\n returnValue: {\n success: false,\n error: error instanceof Error ? error.message : String(error)\n }\n }));\n return;\n }\n }\n\n // Handle RSC requests\n if (!info.isRscRequest) {\n return next();\n }\n\n const routeFiles = await getRouteFiles(\n info.route,\n autoDiscoveredFiles,\n handlerOptions\n );\n if (routeFiles.type === \"error\") {\n logger.error(routeFiles.error.message);\n return next();\n }\n const pagePath = routeFiles.page;\n const propsPath = routeFiles.props;\n try {\n // Set up response headers for streaming\n res.setHeader(\"Content-Type\", info.contentType);\n res.setHeader(\"Transfer-Encoding\", \"chunked\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n const userOnMetrics =\n typeof onMetrics === \"function\"\n ? (metrics: StreamMetrics) => {\n const elapsedTime = performance.now() - startTime;\n const formattedMetrics = {\n route: info.route,\n htmlSize: 0,\n rscSize: metrics.bytes,\n processingTime: elapsedTime,\n chunks: metrics.chunks,\n chunkRate: metrics.chunks / (elapsedTime / 1000),\n memoryUsage: process.memoryUsage(),\n streamMetrics: {\n ...metrics,\n duration: elapsedTime,\n },\n htmlSizes: new Map(),\n rscSizes: new Map([[info.route, metrics.bytes]]),\n } satisfies RenderMetrics;\n onMetrics(formattedMetrics);\n }\n : () => {};\n const startTime = performance.now();\n if (!currentWorker) {\n currentWorker = await restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions: serializedUserOptions,\n hmrChannel,\n });\n }\n const stream = handleWorkerRscStream({\n worker: currentWorker!,\n message: {\n ...serializedUserOptions,\n id: info.route,\n type: \"RSC_RENDER\",\n // we make the worker stream aware of the route, pagePath, propsPath\n route: info.route,\n pagePath: pagePath,\n propsPath: propsPath,\n // override these at all times to ensure the settings will work for the dev server\n projectRoot: server.config.root,\n build: serializedUserOptions.build,\n manifest: autoDiscoveredFiles.staticManifest,\n cssFiles: new Map(),\n globalCss: new Map(),\n },\n logger,\n handlers: {\n onMetrics: (id, metrics) => {\n metrics.route = id;\n userOnMetrics(metrics);\n },\n onHmrAccept: () => {\n // TODO: implement\n // console.log(\"onHmrAccept\", routes);\n },\n onHmrUpdate: () => {\n // TODO: implement\n // console.log(\"onHmrUpdate\", routes);\n },\n },\n verbose: handlerOptions.verbose,\n });\n\n // Pipe the stream to the response\n if (res.writable) {\n Readable.fromWeb(stream as unknown as ReadableStream).pipe(res);\n }\n // wait for timeout\n } catch (error) {\n if (error instanceof Error) {\n server.config.logger.error(error.message + (error.stack ?? \"\"), {\n error,\n });\n }\n }\n let timeout: NodeJS.Timeout;\n try {\n await new Promise((reject) => {\n timeout = setTimeout(() => {\n clearTimeout(timeout);\n reject(new Error(\"RSC Render timeout\"));\n }, 5000);\n });\n } catch {\n if (currentWorker) {\n currentWorker.postMessage({\n type: \"SHUTDOWN\",\n id: \"*\",\n } satisfies RscWorkerInputMessage);\n await new Promise((resolve, reject) => {\n currentWorker?.on(\"message\", (message) => {\n if (message.type === \"SHUTDOWN_COMPLETE\") {\n resolve(true);\n } else {\n reject(\"Dit not receive SHUTDOWN_COMPLETE\");\n }\n });\n });\n currentWorker.removeAllListeners();\n }\n server.config.logger.error(\"RSC render timeout.\");\n clearTimeout(timeout!);\n res.end();\n }\n };\n // attach handler to the server\n server.middlewares.use(handler);\n // done\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA4BA,eAAsB,6BAGpB,CAAA;AAAA,EACA,MAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAa,EAAA,YAAA;AAAA,EACb,UAAA;AAAA,EACA;AACF,CAMG,EAAA;AACD,EAAI,IAAA;AAAA;AAAA,IAEF,WAAa,EAAA,YAAA;AAAA,IACb,aAAe,EAAA,cAAA;AAAA,IACf,GAAG;AAAA,GACD,GAAA,YAAA;AACJ,EAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,MAAO,CAAA,IAAI,kBAAoB,EAAA;AAAA,IAC3D,aAAA,EAAe,OAAO,MAAO,CAAA,IAAA;AAAA,IAC7B,cAAA,EAAgB,OAAO,MAAO,CAAA,IAAA;AAAA,IAC9B,WAAA,EAAa,OAAO,MAAO,CAAA;AAAA,GAC5B,CAAA;AAGD,EAAA,IAAI,aAA+B,GAAA,IAAA;AACnC,EAAM,MAAA,MAAA,GAAS,OAAO,MAAO,CAAA,MAAA;AAG7B,EAAO,MAAA,CAAA,EAAA,CAAG,EAAG,CAAA,SAAA,EAAW,YAAY;AAClC,IAAA,MAAA,CAAO,KAAK,2DAA2D,CAAA;AACvE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,aAAA,CAAc,WAAY,CAAA;AAAA,QACxB,IAAM,EAAA,UAAA;AAAA,QACN,EAAI,EAAA;AAAA,OAC2B,CAAA;AACjC,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACrC,QAAe,aAAA,EAAA,EAAA,CAAG,SAAW,EAAA,CAAC,OAAY,KAAA;AACxC,UAAI,IAAA,OAAA,CAAQ,SAAS,mBAAqB,EAAA;AACxC,YAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,WACP,MAAA;AACL,YAAA,MAAA,CAAO,mCAAmC,CAAA;AAAA;AAC5C,SACD,CAAA;AAAA,OACF,CAAA;AACD,MAAA,aAAA,CAAc,kBAAmB,EAAA;AACjC,MAAgB,aAAA,GAAA,IAAA;AAAA;AAClB,GACD,CAAA;AAGD,EAAA,MAAM,OAA0B,GAAA,OAAO,GAAK,EAAA,GAAA,EAAK,IAAS,KAAA;AACxD,IAAA,IAAI,CAAC,GAAA,CAAI,GAAK,EAAA,OAAO,IAAK,EAAA;AAE1B,IAAA,MAAM,OAAO,WAAY,CAAA,GAAA,EAAK,gBAAgB,EAAI,EAAA,MAAA,CAAO,OAAO,MAAM,CAAA;AAGtE,IAAA,MAAM,qBAAwB,GAAA,iBAAA;AAAA,MAC5B,cAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,IAAI,KAAK,qBAAuB,EAAA;AAC9B,MAAI,IAAA;AAEF,QAAA,MAAM,SAAmB,EAAC;AAC1B,QAAA,WAAA,MAAiB,SAAS,GAAK,EAAA;AAC7B,UAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA;AAEnB,QAAA,MAAM,IAAO,GAAA,MAAA,CAAO,MAAO,CAAA,MAAM,EAAE,QAAS,EAAA;AAC5C,QAAM,MAAA,MAAA,GAAS,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA;AAG9B,QAAI,IAAA,EAAA;AACJ,QAAI,IAAA,IAAA;AACJ,QAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,MAAM,CAAG,EAAA;AAEzB,UAAO,IAAA,GAAA,MAAA;AACP,UAAA,EAAA,GAAK,IAAI,GAAK,EAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAK,IAAA,EAAA;AAAA,mBACtB,MAAU,IAAA,OAAO,MAAW,KAAA,QAAA,IAAY,QAAQ,MAAQ,EAAA;AAEjE,UAAA,EAAA,GAAK,MAAO,CAAA,EAAA;AACZ,UAAO,IAAA,GAAA,MAAA,CAAO,QAAQ,EAAC;AAAA,SAClB,MAAA;AACL,UAAM,MAAA,IAAI,MAAM,sCAAsC,CAAA;AAAA;AAIxD,QAAI,GAAA,CAAA,SAAA,CAAU,gBAAgB,iCAAiC,CAAA;AAC/D,QAAI,GAAA,CAAA,SAAA,CAAU,qBAAqB,SAAS,CAAA;AAC5C,QAAI,GAAA,CAAA,SAAA,CAAU,cAAc,YAAY,CAAA;AAExC,QAAA,IAAI,CAAC,aAAe,EAAA;AAClB,UAAA,aAAA,GAAgB,MAAM,aAAc,CAAA;AAAA,YAClC,MAAA;AAAA,YACA,mBAAA;AAAA,YACA,WAAa,EAAA,qBAAA;AAAA,YACb;AAAA,WACD,CAAA;AAAA;AAIH,QAAA,aAAA,CAAe,WAAY,CAAA;AAAA,UACzB,IAAM,EAAA,eAAA;AAAA,UACN,EAAA;AAAA,UACA;AAAA,SAC+B,CAAA;AAGjC,QAAM,MAAA,WAAA,GAAc,IAAI,WAAY,EAAA;AACpC,QAAA,WAAA,CAAY,KAAK,GAAG,CAAA;AAGpB,QAAM,MAAA,cAAA,GAAiB,CAAC,OAAiB,KAAA;AACvC,UAAI,IAAA,OAAA,CAAQ,SAAS,WAAa,EAAA;AAChC,YAAY,WAAA,CAAA,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,WACjC,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,SAAW,EAAA;AACrC,YAAA,WAAA,CAAY,GAAI,EAAA;AAChB,YAAe,aAAA,CAAA,cAAA,CAAe,WAAW,cAAc,CAAA;AAAA,WACzD,MAAA,IAAW,OAAQ,CAAA,IAAA,KAAS,OAAS,EAAA;AACnC,YAAA,WAAA,CAAY,GAAI,EAAA;AAChB,YAAe,aAAA,CAAA,cAAA,CAAe,WAAW,cAAc,CAAA;AACvD,YAAO,MAAA,CAAA,MAAA,CAAO,OAAO,KAAM,CAAA,OAAA,CAAQ,MAAM,OAAW,IAAA,OAAA,CAAQ,KAAM,CAAA,KAAA,IAAS,EAAK,CAAA,EAAA;AAAA,cAC9E,OAAO,OAAQ,CAAA;AAAA,aAChB,CAAA;AAAA;AACH,SACF;AAEA,QAAe,aAAA,CAAA,EAAA,CAAG,WAAW,cAAc,CAAA;AAG3C,QAAY,WAAA,CAAA,EAAA,CAAG,OAAS,EAAA,CAAC,KAAU,KAAA;AACjC,UAAA,MAAA,CAAO,OAAO,MAAO,CAAA,KAAA,CAAM,MAAM,OAAW,IAAA,KAAA,CAAM,SAAS,EAAK,CAAA,EAAA;AAAA,YAC9D;AAAA,WACD,CAAA;AACD,UAAA,GAAA,CAAI,GAAI,EAAA;AAAA,SACT,CAAA;AAED,QAAA;AAAA,eACO,KAAO,EAAA;AACd,QAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,UAAA,MAAA,CAAO,OAAO,MAAO,CAAA,KAAA,CAAM,MAAM,OAAW,IAAA,KAAA,CAAM,SAAS,EAAK,CAAA,EAAA;AAAA,YAC9D;AAAA,WACD,CAAA;AAAA;AAEH,QAAA,GAAA,CAAI,UAAa,GAAA,GAAA;AACjB,QAAI,GAAA,CAAA,GAAA,CAAI,KAAK,SAAU,CAAA;AAAA,UACrB,IAAM,EAAA,wBAAA;AAAA,UACN,WAAa,EAAA;AAAA,YACX,OAAS,EAAA,KAAA;AAAA,YACT,OAAO,KAAiB,YAAA,KAAA,GAAQ,KAAM,CAAA,OAAA,GAAU,OAAO,KAAK;AAAA;AAC9D,SACD,CAAC,CAAA;AACF,QAAA;AAAA;AACF;AAIF,IAAI,IAAA,CAAC,KAAK,YAAc,EAAA;AACtB,MAAA,OAAO,IAAK,EAAA;AAAA;AAGd,IAAA,MAAM,aAAa,MAAM,aAAA;AAAA,MACvB,IAAK,CAAA,KAAA;AAAA,MACL,mBAAA;AAAA,MACA;AAAA,KACF;AACA,IAAI,IAAA,UAAA,CAAW,SAAS,OAAS,EAAA;AAC/B,MAAO,MAAA,CAAA,KAAA,CAAM,UAAW,CAAA,KAAA,CAAM,OAAO,CAAA;AACrC,MAAA,OAAO,IAAK,EAAA;AAAA;AAEd,IAAA,MAAM,WAAW,UAAW,CAAA,IAAA;AAC5B,IAAA,MAAM,YAAY,UAAW,CAAA,KAAA;AAC7B,IAAI,IAAA;AAEF,MAAI,GAAA,CAAA,SAAA,CAAU,cAAgB,EAAA,IAAA,CAAK,WAAW,CAAA;AAC9C,MAAI,GAAA,CAAA,SAAA,CAAU,qBAAqB,SAAS,CAAA;AAC5C,MAAI,GAAA,CAAA,SAAA,CAAU,cAAc,YAAY,CAAA;AAExC,MAAA,MAAM,aACJ,GAAA,OAAO,SAAc,KAAA,UAAA,GACjB,CAAC,OAA2B,KAAA;AAC1B,QAAM,MAAA,WAAA,GAAc,WAAY,CAAA,GAAA,EAAQ,GAAA,SAAA;AACxC,QAAA,MAAM,gBAAmB,GAAA;AAAA,UACvB,OAAO,IAAK,CAAA,KAAA;AAAA,UACZ,QAAU,EAAA,CAAA;AAAA,UACV,SAAS,OAAQ,CAAA,KAAA;AAAA,UACjB,cAAgB,EAAA,WAAA;AAAA,UAChB,QAAQ,OAAQ,CAAA,MAAA;AAAA,UAChB,SAAA,EAAW,OAAQ,CAAA,MAAA,IAAU,WAAc,GAAA,GAAA,CAAA;AAAA,UAC3C,WAAA,EAAa,QAAQ,WAAY,EAAA;AAAA,UACjC,aAAe,EAAA;AAAA,YACb,GAAG,OAAA;AAAA,YACH,QAAU,EAAA;AAAA,WACZ;AAAA,UACA,SAAA,sBAAe,GAAI,EAAA;AAAA,UACnB,QAAA,kBAAc,IAAA,GAAA,CAAI,CAAC,CAAC,KAAK,KAAO,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAC;AAAA,SACjD;AACA,QAAA,SAAA,CAAU,gBAAgB,CAAA;AAAA,UAE5B,MAAM;AAAA,OAAC;AACb,MAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA;AAClC,MAAA,IAAI,CAAC,aAAe,EAAA;AAClB,QAAA,aAAA,GAAgB,MAAM,aAAc,CAAA;AAAA,UAClC,MAAA;AAAA,UACA,mBAAA;AAAA,UACA,WAAa,EAAA,qBAAA;AAAA,UACb;AAAA,SACD,CAAA;AAAA;AAEH,MAAA,MAAM,SAAS,qBAAsB,CAAA;AAAA,QACnC,MAAQ,EAAA,aAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,GAAG,qBAAA;AAAA,UACH,IAAI,IAAK,CAAA,KAAA;AAAA,UACT,IAAM,EAAA,YAAA;AAAA;AAAA,UAEN,OAAO,IAAK,CAAA,KAAA;AAAA,UACZ,QAAA;AAAA,UACA,SAAA;AAAA;AAAA,UAEA,WAAA,EAAa,OAAO,MAAO,CAAA,IAAA;AAAA,UAC3B,OAAO,qBAAsB,CAAA,KAAA;AAAA,UAC7B,UAAU,mBAAoB,CAAA,cAAA;AAAA,UAC9B,QAAA,sBAAc,GAAI,EAAA;AAAA,UAClB,SAAA,sBAAe,GAAI;AAAA,SACrB;AAAA,QACA,MAAA;AAAA,QACA,QAAU,EAAA;AAAA,UACR,SAAA,EAAW,CAAC,EAAA,EAAI,OAAY,KAAA;AAC1B,YAAA,OAAA,CAAQ,KAAQ,GAAA,EAAA;AAChB,YAAA,aAAA,CAAc,OAAO,CAAA;AAAA,WACvB;AAAA,UACA,aAAa,MAAM;AAAA,WAGnB;AAAA,UACA,aAAa,MAAM;AAAA;AAGnB,SACF;AAAA,QACA,SAAS,cAAe,CAAA;AAAA,OACzB,CAAA;AAGD,MAAA,IAAI,IAAI,QAAU,EAAA;AAChB,QAAA,QAAA,CAAS,OAAQ,CAAA,MAAmC,CAAE,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA;AAChE,aAEO,KAAO,EAAA;AACd,MAAA,IAAI,iBAAiB,KAAO,EAAA;AAC1B,QAAA,MAAA,CAAO,OAAO,MAAO,CAAA,KAAA,CAAM,MAAM,OAAW,IAAA,KAAA,CAAM,SAAS,EAAK,CAAA,EAAA;AAAA,UAC9D;AAAA,SACD,CAAA;AAAA;AACH;AAEF,IAAI,IAAA,OAAA;AACJ,IAAI,IAAA;AACF,MAAM,MAAA,IAAI,OAAQ,CAAA,CAAC,MAAW,KAAA;AAC5B,QAAA,OAAA,GAAU,WAAW,MAAM;AACzB,UAAA,YAAA,CAAa,OAAO,CAAA;AACpB,UAAO,MAAA,CAAA,IAAI,KAAM,CAAA,oBAAoB,CAAC,CAAA;AAAA,WACrC,GAAI,CAAA;AAAA,OACR,CAAA;AAAA,KACK,CAAA,MAAA;AACN,MAAA,IAAI,aAAe,EAAA;AACjB,QAAA,aAAA,CAAc,WAAY,CAAA;AAAA,UACxB,IAAM,EAAA,UAAA;AAAA,UACN,EAAI,EAAA;AAAA,SAC2B,CAAA;AACjC,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAW,KAAA;AACrC,UAAe,aAAA,EAAA,EAAA,CAAG,SAAW,EAAA,CAAC,OAAY,KAAA;AACxC,YAAI,IAAA,OAAA,CAAQ,SAAS,mBAAqB,EAAA;AACxC,cAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,aACP,MAAA;AACL,cAAA,MAAA,CAAO,mCAAmC,CAAA;AAAA;AAC5C,WACD,CAAA;AAAA,SACF,CAAA;AACD,QAAA,aAAA,CAAc,kBAAmB,EAAA;AAAA;AAEnC,MAAO,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,KAAA,CAAM,qBAAqB,CAAA;AAChD,MAAA,YAAA,CAAa,OAAQ,CAAA;AACrB,MAAA,GAAA,CAAI,GAAI,EAAA;AAAA;AACV,GACF;AAEA,EAAO,MAAA,CAAA,WAAA,CAAY,IAAI,OAAO,CAAA;AAEhC;;;;"}
|
|
1
|
+
{"version":3,"file":"configureWorkerRequestHandler.js","sources":["../../../plugin/react-client/configureWorkerRequestHandler.ts"],"sourcesContent":["import type { ViteDevServer } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n InlineCssOpt,\n PagePropOpt,\n RenderMetrics,\n RequestHandler,\n ResolvedUserOptions,\n StreamMetrics,\n} from \"../types.js\";\nimport { MessageChannel, type Worker } from \"node:worker_threads\";\nimport { serializedOptions } from \"../helpers/serializeUserOptions.js\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\nimport { performance } from \"node:perf_hooks\";\nimport { restartWorker } from \"./restartWorker.js\";\nimport { handleWorkerRscStream } from \"./handleWorkerRscStream.js\";\nimport { getRouteFiles } from \"../helpers/getRouteFiles.js\";\nimport type { RscWorkerInputMessage } from \"../worker/types.js\";\nimport { Readable } from \"node:stream\";\nimport type { ReadableStream } from \"node:stream/web\";\nimport { PassThrough } from \"node:stream\";\nimport { logError, toError } from \"../error/toError.js\";\n\n/**\n * Configures the worker request handler.\n * @param server - The Vite dev server\n * @param autoDiscoveredFiles - The auto discovered files\n * @param userOptions - The user options\n */\nexport async function configureWorkerRequestHandler<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n hmrChannel,\n onMetrics,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n hmrChannel: MessageChannel;\n onMetrics?: (metrics: RenderMetrics) => void;\n}) {\n let {\n // remove these\n projectRoot: _projectRoot,\n moduleBaseURL: _moduleBaseURL,\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = Object.assign({}, handlerUserOptions, {\n moduleBaseURL: server.config.base,\n moduleBasePath: server.config.base,\n projectRoot: server.config.root,\n });\n\n // Start the worker\n let currentWorker: Worker | null = null;\n const logger = server.config.logger;\n\n // Handle server restarts\n server.ws.on(\"restart\", async () => {\n logger.info(\"[react-client] Server restarting, shutting down worker...\");\n if (currentWorker) {\n currentWorker.postMessage({\n type: \"SHUTDOWN\",\n id: \"*\",\n } satisfies RscWorkerInputMessage);\n await new Promise((resolve, reject) => {\n currentWorker?.on(\"message\", (message) => {\n if (message.type === \"SHUTDOWN_COMPLETE\") {\n resolve(true);\n } else {\n reject(\"Did not receive SHUTDOWN_COMPLETE\");\n }\n });\n });\n currentWorker.removeAllListeners();\n currentWorker = null;\n }\n });\n\n // Create the request handler\n const handler: RequestHandler = async (req, res, next) => {\n if (!req.url) return next();\n\n const info = requestInfo(req, handlerOptions, \"\", server.config.logger);\n\n // Serialize user options for worker\n const serializedUserOptions = serializedOptions<T, InlineCSS>(\n handlerOptions,\n autoDiscoveredFiles\n );\n\n // Handle server action requests\n if (info.isServerActionRequest) {\n try {\n // Read request body\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk);\n }\n const body = Buffer.concat(chunks).toString();\n const parsed = JSON.parse(body);\n\n // Get action ID and args from the request body\n let id: string;\n let args: unknown[];\n if (Array.isArray(parsed)) {\n // Format 1: Direct args array\n args = parsed;\n id = req.url?.split(\"?\")[0] ?? \"\";\n } else if (parsed && typeof parsed === \"object\" && \"id\" in parsed) {\n // Format 2: Object with id and args\n id = parsed.id;\n args = parsed.args ?? [];\n } else {\n throw new Error(\"Invalid server action request format\");\n }\n\n // Set up response headers for streaming\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n res.setHeader(\"Transfer-Encoding\", \"chunked\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n if (!currentWorker) {\n currentWorker = await restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions: serializedUserOptions,\n hmrChannel,\n });\n }\n\n // Send server action request to worker\n currentWorker!.postMessage({\n type: \"SERVER_ACTION\",\n id,\n args,\n } satisfies RscWorkerInputMessage);\n\n // Create a pass-through stream for the response\n const passThrough = new PassThrough();\n passThrough.pipe(res);\n\n // Handle worker messages\n const messageHandler = (message: any) => {\n if (message.type === \"RSC_CHUNK\") {\n passThrough.write(message.chunk);\n } else if (message.type === \"RSC_END\") {\n passThrough.end();\n currentWorker!.removeListener(\"message\", messageHandler);\n } else if (message.type === \"ERROR\") {\n passThrough.end();\n currentWorker!.removeListener(\"message\", messageHandler);\n logError(message.error, server.config.logger);\n }\n };\n\n currentWorker!.on(\"message\", messageHandler);\n\n // Handle errors\n passThrough.on(\"error\", (error) => {\n logError(error, server.config.logger);\n res.end();\n });\n\n return;\n } catch (error) {\n const err = toError(error);\n logError(err, server.config.logger);\n res.statusCode = 500;\n res.end(\n JSON.stringify({\n type: \"server-action-response\",\n returnValue: {\n success: false,\n error: err.message,\n },\n })\n );\n return;\n }\n }\n\n // Handle RSC requests\n if (!info.isRscRequest) {\n return next();\n }\n\n const routeFiles = await getRouteFiles(\n info.route,\n autoDiscoveredFiles,\n handlerOptions\n );\n if (routeFiles.type === \"error\") {\n logger.error(routeFiles.error.message);\n return next();\n }\n const pagePath = routeFiles.page;\n const propsPath = routeFiles.props;\n try {\n // Set up response headers for streaming\n res.setHeader(\"Content-Type\", info.contentType);\n res.setHeader(\"Transfer-Encoding\", \"chunked\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n const userOnMetrics =\n typeof onMetrics === \"function\"\n ? (metrics: StreamMetrics) => {\n const elapsedTime = performance.now() - startTime;\n const formattedMetrics = {\n route: info.route,\n htmlSize: 0,\n rscSize: metrics.bytes,\n processingTime: elapsedTime,\n chunks: metrics.chunks,\n chunkRate: metrics.chunks / (elapsedTime / 1000),\n memoryUsage: process.memoryUsage(),\n streamMetrics: {\n ...metrics,\n duration: elapsedTime,\n },\n htmlSizes: new Map(),\n rscSizes: new Map([[info.route, metrics.bytes]]),\n } satisfies RenderMetrics;\n onMetrics(formattedMetrics);\n }\n : () => {};\n const startTime = performance.now();\n if (!currentWorker) {\n currentWorker = await restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions: serializedUserOptions,\n hmrChannel,\n });\n }\n const stream = handleWorkerRscStream({\n worker: currentWorker!,\n message: {\n ...serializedUserOptions,\n id: info.route,\n type: \"RSC_RENDER\",\n // we make the worker stream aware of the route, pagePath, propsPath\n route: info.route,\n pagePath: pagePath,\n propsPath: propsPath,\n // override these at all times to ensure the settings will work for the dev server\n projectRoot: server.config.root,\n build: serializedUserOptions.build,\n manifest: autoDiscoveredFiles.staticManifest,\n cssFiles: new Map(),\n globalCss: new Map(),\n },\n logger,\n handlers: {\n onMetrics: (id, metrics) => {\n metrics.route = id;\n userOnMetrics(metrics);\n },\n onHmrAccept: () => {\n // TODO: implement\n // console.log(\"onHmrAccept\", routes);\n },\n onHmrUpdate: () => {\n // TODO: implement\n // console.log(\"onHmrUpdate\", routes);\n },\n },\n verbose: handlerOptions.verbose,\n });\n\n // Pipe the stream to the response\n if (res.writable) {\n Readable.fromWeb(stream as unknown as ReadableStream).pipe(res);\n }\n // wait for timeout\n } catch (error) {\n if (error instanceof Error) {\n server.config.logger.error(error.message + (error.stack ?? \"\"), {\n error,\n });\n }\n }\n let timeout: NodeJS.Timeout;\n try {\n await new Promise((reject) => {\n timeout = setTimeout(() => {\n clearTimeout(timeout);\n reject(new Error(\"RSC Render timeout\"));\n }, 5000);\n });\n } catch {\n if (currentWorker) {\n currentWorker.postMessage({\n type: \"SHUTDOWN\",\n id: \"*\",\n } satisfies RscWorkerInputMessage);\n await new Promise((resolve, reject) => {\n currentWorker?.on(\"message\", (message) => {\n if (message.type === \"SHUTDOWN_COMPLETE\") {\n resolve(true);\n } else {\n reject(\"Dit not receive SHUTDOWN_COMPLETE\");\n }\n });\n });\n currentWorker.removeAllListeners();\n }\n server.config.logger.error(\"RSC render timeout.\");\n clearTimeout(timeout!);\n res.end();\n }\n };\n // attach handler to the server\n server.middlewares.use(handler);\n // port check, should be handled by strictPort\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMessageHandlers.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/createMessageHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,EACN,OAAe,GAChB,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"createMessageHandlers.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/createMessageHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,QAAQ,EACR,MAAM,EACN,OAAe,GAChB,EAAE,qBAAqB,IACd,SAAS,sBAAsB,GAAG,SAAS,UA4CpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureReactServer.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/configureReactServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAWrB,wBAAsB,oBAAoB,CACxC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,EACA,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,cAAc,GACf,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,cAAc,EAAE,QAAQ,CAAC;CAC1B,
|
|
1
|
+
{"version":3,"file":"configureReactServer.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/configureReactServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAWrB,wBAAsB,oBAAoB,CACxC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,EACA,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,cAAc,GACf,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,cAAc,EAAE,QAAQ,CAAC;CAC1B,iBA6IA"}
|
|
@@ -144,18 +144,6 @@ async function configureReactServer({
|
|
|
144
144
|
res.end();
|
|
145
145
|
}
|
|
146
146
|
});
|
|
147
|
-
server.httpServer?.once("listening", () => {
|
|
148
|
-
const address = server.httpServer?.address();
|
|
149
|
-
if (address && typeof address !== "string") {
|
|
150
|
-
const port = address.port;
|
|
151
|
-
const host = server.config.server.host ?? "localhost";
|
|
152
|
-
const protocol = server.config.server.https ? "https" : "http";
|
|
153
|
-
handlerOptions.publicOrigin = `${protocol}://${host}:${port}`;
|
|
154
|
-
if (handlerOptions.publicOrigin !== process.env.VITE_PUBLIC_ORIGIN) {
|
|
155
|
-
process.env.VITE_PUBLIC_ORIGIN = handlerOptions.publicOrigin;
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
});
|
|
159
147
|
}
|
|
160
148
|
|
|
161
149
|
export { configureReactServer };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureReactServer.js","sources":["../../../plugin/react-server/configureReactServer.ts"],"sourcesContent":["import type { Manifest, ViteDevServer } from \"vite\";\nimport type { ServerResponse } from \"http\";\nimport type {\n AutoDiscoveredFiles,\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { createEventHandler } from \"../helpers/createEventHandler.js\";\nimport { collectViteModuleGraphCss } from \"../helpers/collectViteModuleGraphCss.js\";\nimport { resolvePageAndProps } from \"../helpers/resolvePageAndProps.js\";\nimport { createHandler } from \"../helpers/createHandler.js\";\nimport React from \"react\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\nimport { getRouteFiles } from \"../helpers/getRouteFiles.js\";\nimport { logError } from \"../error/toError.js\";\nimport { handleServerAction } from \"./handleServerAction.js\";\n\nexport async function configureReactServer<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n serverManifest,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n serverManifest: Manifest;\n}) {\n const activeStreams = new Set<ServerResponse>();\n const {\n Html: _UserHtmlComponent,\n onEvent,\n // remove these\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = {\n ...handlerUserOptions,\n moduleBaseURL: server.config.base,\n moduleBasePath: server.config.base,\n projectRoot: server.config.root,\n Html: React.Fragment,\n onEvent: createEventHandler(onEvent),\n css: handlerUserOptions.css\n };\n\n // Set environment-specific configuration\n const define = {\n ...server.config.define,\n \"process.env.NODE_ENV\": JSON.stringify(\n process.env[\"NODE_ENV\"] || \"development\"\n ),\n };\n server.config = {\n ...server.config,\n define,\n };\n\n // Handle Vite server restarts\n server.ws.on(\"restart\", (path) => {\n server.config.logger.info(\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; charset=utf-8\",\n \"Retry-After\": \"1\",\n });\n res.end(\n `0:E{\"digest\":\"\",\"name\":\"Error\",\"message\":\"Server restarting...\",\"stack\":\"\",\"env\":\"Server\"}`\n );\n }\n activeStreams.clear();\n });\n\n server.middlewares.use(async (req, res, next) => {\n if (!req.url) {\n return next();\n }\n const info = requestInfo(req, handlerOptions, \"\", server.config.logger);\n\n\n // Handle server actions\n if (info.isServerActionRequest) {\n return handleServerAction(req, res, server, handlerOptions);\n }\n if (!info.isRscRequest) return next();\n try {\n const routeFiles = await getRouteFiles(\n info.route,\n autoDiscoveredFiles,\n handlerOptions\n );\n if (routeFiles.type === \"error\") {\n server.config.logger.error(routeFiles.error.message);\n return next();\n }\n const pagePath = routeFiles.page;\n const propsPath = routeFiles.props;\n\n // first load the page and props\n const pageAndPropsResult = await resolvePageAndProps({\n pagePath,\n propsPath,\n route: info.route,\n loader: server.ssrLoadModule,\n pageExportName: handlerOptions.pageExportName ?? \"default\",\n propsExportName: handlerOptions.propsExportName ?? \"default\",\n });\n if (pageAndPropsResult.type === \"error\") {\n throw pageAndPropsResult.error;\n }\n if (pageAndPropsResult.type === \"skip\") {\n return next();\n }\n\n const eventHandler = createEventHandler(onEvent);\n const cssFilesResult = await collectViteModuleGraphCss({\n moduleGraph: server.moduleGraph, // by having loaded the page and props, we can get them from the module graph\n parentUrl: pagePath,\n handlerOptions: {\n pagePath,\n loader: server.ssrLoadModule,\n // explicitly set for development server\n ...handlerOptions,\n },\n });\n if (cssFilesResult.type === \"skip\") {\n return next();\n }\n if (cssFilesResult.type === \"error\") {\n throw cssFilesResult.error;\n }\n const { PageComponent, pageProps } = pageAndPropsResult;\n // Create the headless RSC stream directly;\n const rscResult = createHandler({\n ...handlerOptions,\n PageComponent: PageComponent,\n pageProps: pageProps,\n logger: server.config.logger,\n loader: server.ssrLoadModule,\n Html: React.Fragment,\n onEvent: eventHandler,\n manifest: serverManifest,\n server,\n route: info.route,\n pagePath,\n propsPath,\n cssFiles: cssFilesResult.cssFiles ?? new Map(),\n globalCss: new Map(),\n });\n if (rscResult.type === \"success\") {\n // set headers\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n rscResult.stream!.pipe(res);\n }\n activeStreams.add(res);\n res.on(\"close\", () => {\n activeStreams.delete(res);\n });\n } catch (error) {\n logError(error, server.config.logger);\n res.end();\n }\n });\n // Listen for when the server actually starts\n server.httpServer?.once(\"listening\", () => {\n const address = server.httpServer?.address();\n if (address && typeof address !== \"string\") {\n const port = address.port;\n const host = server.config.server.host ?? \"localhost\";\n const protocol = server.config.server.https ? \"https\" : \"http\";\n handlerOptions.publicOrigin = `${protocol}://${host}:${port}`;\n if (handlerOptions.publicOrigin !== process.env.VITE_PUBLIC_ORIGIN) {\n process.env.VITE_PUBLIC_ORIGIN = handlerOptions.publicOrigin;\n }\n }\n });\n}\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"configureReactServer.js","sources":["../../../plugin/react-server/configureReactServer.ts"],"sourcesContent":["import type { Manifest, ViteDevServer } from \"vite\";\nimport type { ServerResponse } from \"http\";\nimport type {\n AutoDiscoveredFiles,\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { createEventHandler } from \"../helpers/createEventHandler.js\";\nimport { collectViteModuleGraphCss } from \"../helpers/collectViteModuleGraphCss.js\";\nimport { resolvePageAndProps } from \"../helpers/resolvePageAndProps.js\";\nimport { createHandler } from \"../helpers/createHandler.js\";\nimport React from \"react\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\nimport { getRouteFiles } from \"../helpers/getRouteFiles.js\";\nimport { logError } from \"../error/toError.js\";\nimport { handleServerAction } from \"./handleServerAction.js\";\n\nexport async function configureReactServer<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n serverManifest,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n serverManifest: Manifest;\n}) {\n const activeStreams = new Set<ServerResponse>();\n const {\n Html: _UserHtmlComponent,\n onEvent,\n // remove these\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = {\n ...handlerUserOptions,\n moduleBaseURL: server.config.base,\n moduleBasePath: server.config.base,\n projectRoot: server.config.root,\n Html: React.Fragment,\n onEvent: createEventHandler(onEvent),\n css: handlerUserOptions.css\n };\n\n // Set environment-specific configuration\n const define = {\n ...server.config.define,\n \"process.env.NODE_ENV\": JSON.stringify(\n process.env[\"NODE_ENV\"] || \"development\"\n ),\n };\n server.config = {\n ...server.config,\n define,\n };\n\n // Handle Vite server restarts\n server.ws.on(\"restart\", (path) => {\n server.config.logger.info(\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; charset=utf-8\",\n \"Retry-After\": \"1\",\n });\n res.end(\n `0:E{\"digest\":\"\",\"name\":\"Error\",\"message\":\"Server restarting...\",\"stack\":\"\",\"env\":\"Server\"}`\n );\n }\n activeStreams.clear();\n });\n\n server.middlewares.use(async (req, res, next) => {\n if (!req.url) {\n return next();\n }\n const info = requestInfo(req, handlerOptions, \"\", server.config.logger);\n\n\n // Handle server actions\n if (info.isServerActionRequest) {\n return handleServerAction(req, res, server, handlerOptions);\n }\n if (!info.isRscRequest) return next();\n try {\n const routeFiles = await getRouteFiles(\n info.route,\n autoDiscoveredFiles,\n handlerOptions\n );\n if (routeFiles.type === \"error\") {\n server.config.logger.error(routeFiles.error.message);\n return next();\n }\n const pagePath = routeFiles.page;\n const propsPath = routeFiles.props;\n\n // first load the page and props\n const pageAndPropsResult = await resolvePageAndProps({\n pagePath,\n propsPath,\n route: info.route,\n loader: server.ssrLoadModule,\n pageExportName: handlerOptions.pageExportName ?? \"default\",\n propsExportName: handlerOptions.propsExportName ?? \"default\",\n });\n if (pageAndPropsResult.type === \"error\") {\n throw pageAndPropsResult.error;\n }\n if (pageAndPropsResult.type === \"skip\") {\n return next();\n }\n\n const eventHandler = createEventHandler(onEvent);\n const cssFilesResult = await collectViteModuleGraphCss({\n moduleGraph: server.moduleGraph, // by having loaded the page and props, we can get them from the module graph\n parentUrl: pagePath,\n handlerOptions: {\n pagePath,\n loader: server.ssrLoadModule,\n // explicitly set for development server\n ...handlerOptions,\n },\n });\n if (cssFilesResult.type === \"skip\") {\n return next();\n }\n if (cssFilesResult.type === \"error\") {\n throw cssFilesResult.error;\n }\n const { PageComponent, pageProps } = pageAndPropsResult;\n // Create the headless RSC stream directly;\n const rscResult = createHandler({\n ...handlerOptions,\n PageComponent: PageComponent,\n pageProps: pageProps,\n logger: server.config.logger,\n loader: server.ssrLoadModule,\n Html: React.Fragment,\n onEvent: eventHandler,\n manifest: serverManifest,\n server,\n route: info.route,\n pagePath,\n propsPath,\n cssFiles: cssFilesResult.cssFiles ?? new Map(),\n globalCss: new Map(),\n });\n if (rscResult.type === \"success\") {\n // set headers\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n rscResult.stream!.pipe(res);\n }\n activeStreams.add(res);\n res.on(\"close\", () => {\n activeStreams.delete(res);\n });\n } catch (error) {\n logError(error, server.config.logger);\n res.end();\n }\n });\n // Listen for when the server actually starts\n}\n"],"names":["React"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurePreviewServer.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/configurePreviewServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AAWrB,wBAAsB,sBAAsB,CAC1C,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,EACA,MAAM,EACN,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;CAChD,
|
|
1
|
+
{"version":3,"file":"configurePreviewServer.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/configurePreviewServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AAWrB,wBAAsB,sBAAsB,CAC1C,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,EACA,MAAM,EACN,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;CAChD,iBAiGA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configurePreviewServer.js","sources":["../../../plugin/react-static/configurePreviewServer.ts"],"sourcesContent":["import type { PreviewServer } from \"vite\";\nimport type {\n ResolvedUserOptions,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\nimport { join } from \"node:path\";\nimport { createReadStream } from \"node:fs\";\nimport { stat } from \"node:fs/promises\";\nimport { pipeline } from \"node:stream/promises\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\n\ninterface StreamError extends Error {\n code?: string;\n}\n\nexport async function configurePreviewServer<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>({\n server,\n userOptions,\n}: {\n server: PreviewServer;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n}) {\n const staticHostDir = join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static\n );\n server.middlewares.use(async (req, res, next) => {\n if (!req.url) {\n return next();\n }\n const { contentType, filePath } = requestInfo(\n req,\n userOptions,\n staticHostDir,\n server.config.logger\n );\n
|
|
1
|
+
{"version":3,"file":"configurePreviewServer.js","sources":["../../../plugin/react-static/configurePreviewServer.ts"],"sourcesContent":["import type { PreviewServer } from \"vite\";\nimport type {\n ResolvedUserOptions,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\nimport { join } from \"node:path\";\nimport { createReadStream } from \"node:fs\";\nimport { stat } from \"node:fs/promises\";\nimport { pipeline } from \"node:stream/promises\";\nimport { requestInfo } from \"../helpers/requestInfo.js\";\n\ninterface StreamError extends Error {\n code?: string;\n}\n\nexport async function configurePreviewServer<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>({\n server,\n userOptions,\n}: {\n server: PreviewServer;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n}) {\n const staticHostDir = join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static\n );\n server.middlewares.use(async (req, res, next) => {\n if (!req.url) {\n return next();\n }\n const { contentType, filePath } = requestInfo(\n req,\n userOptions,\n staticHostDir,\n server.config.logger\n );\n // Handle static files including CSS\n if (filePath && contentType.includes(\"text/x-component\")) {\n try {\n const stats = await stat(filePath);\n if (stats.isFile()) {\n res.setHeader(\"Content-Type\", contentType);\n\n // Create abort controller for the stream\n const controller = new AbortController();\n const { signal } = controller;\n\n // Check if response is still writable before streaming\n if (!res.writable) {\n res.statusCode = 499;\n res.end(\"Client closed request\");\n return;\n }\n\n try {\n const readStream = createReadStream(filePath);\n readStream.on(\"error\", () => {\n if (!res.writable) {\n controller.abort();\n }\n });\n await pipeline(readStream, res, { signal });\n } catch (error) {\n const streamError = error as StreamError;\n // Handle different error cases\n if (\n streamError.code === \"ERR_STREAM_PREMATURE_CLOSE\" ||\n streamError.name === \"AbortError\"\n ) {\n // Client closed the connection\n if (res.writable) {\n res.statusCode = 499;\n res.end(\"Client closed request\");\n }\n } else if (streamError.code === \"ENOENT\") {\n // File not found\n res.statusCode = 404;\n server.config.logger.error(\n `File not found: ${filePath}. ${streamError.message}`,\n {\n error: streamError,\n }\n );\n res.end(\"File not found\");\n } else {\n // Server error\n server.config.logger.error(\n `Error loading file: ${filePath}. ${streamError.message}`,\n {\n error: streamError,\n }\n );\n res.statusCode = 500;\n res.end(\"Internal server error\");\n }\n return;\n }\n return;\n }\n } catch (error) {\n const err = error as Error;\n // Handle file system errors\n if ((err as NodeJS.ErrnoException).code === \"ENOENT\") {\n res.statusCode = 404;\n res.end(\"File not found\");\n } else {\n server.config.logger.error(`Error loading file: ${filePath}.`, {\n error: err,\n });\n res.statusCode = 500;\n res.end(\"Internal server error\");\n }\n return;\n }\n }\n next();\n });\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAGL,KAAK,MAAM,IAAI,UAAU,EAE1B,MAAM,MAAM,CAAC;AAId,OAAO,KAAK,EAEV,qBAAqB,EAOrB,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAGL,KAAK,MAAM,IAAI,UAAU,EAE1B,MAAM,MAAM,CAAC;AAId,OAAO,KAAK,EAEV,qBAAqB,EAOrB,WAAW,EACX,YAAY,EACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAwBvD,wBAAgB,iBAAiB,CAC/B,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAE7C,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,GACzC,UAAU,CAAC;IACZ,IAAI,EAAE,qBAAqB,CAAC;CAC7B,CAAC,CAuWD"}
|
|
@@ -17,7 +17,6 @@ import { getCondition } from '../config/getCondition.js';
|
|
|
17
17
|
import { serializedOptions, serializeResolvedConfig } from '../helpers/serializeUserOptions.js';
|
|
18
18
|
import { collectManifestCss } from '../helpers/collectManifestCss.js';
|
|
19
19
|
import { createCssProps } from '../helpers/createCssProps.js';
|
|
20
|
-
import { tryManifest } from '../helpers/tryManifest.js';
|
|
21
20
|
import { performance } from 'node:perf_hooks';
|
|
22
21
|
import { DEFAULT_CONFIG } from '../config/defaults.js';
|
|
23
22
|
import { baseURL } from '../utils/envUrls.node.js';
|
|
@@ -34,7 +33,7 @@ function reactStaticPlugin(options) {
|
|
|
34
33
|
let resolvedConfig;
|
|
35
34
|
let userOptions;
|
|
36
35
|
let autoDiscoveredFiles = null;
|
|
37
|
-
let serverManifest =
|
|
36
|
+
let serverManifest = void 0;
|
|
38
37
|
let buildLoader;
|
|
39
38
|
const timing = {
|
|
40
39
|
start: Date.now(),
|
|
@@ -117,31 +116,23 @@ function reactStaticPlugin(options) {
|
|
|
117
116
|
bundle,
|
|
118
117
|
normalizer: userOptions.normalizer
|
|
119
118
|
});
|
|
120
|
-
|
|
119
|
+
const manifestPath = typeof resolvedConfig.build.manifest === "string" ? resolvedConfig.build.manifest : ".vite/manifest.json";
|
|
120
|
+
if (!("source" in bundleManifest[manifestPath])) {
|
|
121
121
|
throw new Error("Server manifest not found");
|
|
122
122
|
}
|
|
123
123
|
serverManifest = JSON.parse(
|
|
124
|
-
bundleManifest[
|
|
124
|
+
bundleManifest[manifestPath].source
|
|
125
125
|
);
|
|
126
126
|
if (!serverManifest) {
|
|
127
127
|
throw new Error("Failed to parse server manifest");
|
|
128
128
|
}
|
|
129
|
-
const clientManifestResult = await tryManifest({
|
|
130
|
-
root: userOptions.projectRoot,
|
|
131
|
-
outDir: join(userOptions.build.outDir, userOptions.build.client),
|
|
132
|
-
ssrManifest: false
|
|
133
|
-
});
|
|
134
|
-
if (clientManifestResult.type === "error") {
|
|
135
|
-
throw clientManifestResult.error;
|
|
136
|
-
}
|
|
137
|
-
const clientManifest = clientManifestResult.manifest;
|
|
138
129
|
buildLoader = await createBuildLoader(
|
|
139
130
|
{
|
|
140
131
|
userConfig,
|
|
141
132
|
userOptions,
|
|
142
133
|
serverManifest: serverManifest ?? {},
|
|
143
134
|
staticManifest: autoDiscoveredFiles?.staticManifest ?? {},
|
|
144
|
-
clientManifest:
|
|
135
|
+
clientManifest: {}
|
|
145
136
|
},
|
|
146
137
|
bundle
|
|
147
138
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["../../../plugin/react-static/plugin.ts"],"sourcesContent":["/**\n * plugin.ts\n *\n * PURPOSE: Main Vite plugin for React Server Components (RSC) static site generation\n *\n * This module:\n * 1. Orchestrates the entire static site generation process\n * 2. Manages the lifecycle of the RSC rendering process\n * 3. Handles file writing for both initial page loads and client-side navigation\n * - Writes .html files for initial page loads (complete HTML document)\n * - Writes .rsc files for client-side navigation (RSC content only)\n * 4. Provides hooks for Vite to integrate with the build process\n * 5. Manages worker threads for parallel rendering\n * 6. Handles error reporting and metrics collection\n */\n\nimport { join } from \"node:path\";\nimport { Worker } from \"node:worker_threads\";\nimport {\n type Manifest,\n type ResolvedConfig,\n type Plugin as VitePlugin,\n createLogger,\n} from \"vite\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { createBuildLoader } from \"./createBuildLoader.js\";\nimport type {\n BuildTiming,\n ReactStreamPluginMeta,\n ResolvedUserConfig,\n ResolvedUserOptions,\n PluginEvent,\n RenderPagesResult,\n AutoDiscoveredFiles,\n CssContent,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport { renderPages } from \"./renderPages.js\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { resolveAutoDiscover } from \"../config/autoDiscover/resolveAutoDiscover.js\";\nimport { getCondition } from \"../config/getCondition.js\";\nimport {\n serializedOptions,\n serializeResolvedConfig,\n} from \"../helpers/serializeUserOptions.js\";\nimport { collectManifestCss } from \"../helpers/collectManifestCss.js\";\nimport { createCssProps } from \"../helpers/createCssProps.js\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\nimport { performance } from \"node:perf_hooks\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { baseURL } from \"../utils/envUrls.node.js\";\nimport { readFile } from \"node:fs/promises\";\n\nif (getCondition() !== \"react-server\") {\n throw new Error(\n \"Condition mismatch, should be react-server but got \" +\n process.env[\"NODE_OPTIONS\"]\n );\n}\n\nexport function reactStaticPlugin<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(\n options: StreamPluginOptions<T, InlineCSS>\n): VitePlugin<{\n meta: ReactStreamPluginMeta;\n}> {\n let worker: Worker;\n let userConfig: ResolvedUserConfig;\n let resolvedConfig: ResolvedConfig;\n let userOptions: ResolvedUserOptions<T, InlineCSS>;\n let autoDiscoveredFiles: AutoDiscoveredFiles | null = null;\n let serverManifest: Manifest | undefined = undefined;\n let buildLoader: Awaited<ReturnType<typeof createBuildLoader>> | undefined;\n const timing: BuildTiming = {\n start: Date.now(),\n configResolved: 0,\n buildStart: 0,\n renderStart: 0,\n };\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n\n return {\n name: \"vite:plugin-react-server/static\",\n enforce: \"post\",\n api: {\n meta: { timing },\n },\n\n async config(config, configEnv) {\n if (config.root && config.root !== userOptions.projectRoot) {\n userOptions.projectRoot = config.root;\n }\n if(configEnv.command !== \"build\") {\n return;\n }\n // Initialize autoDiscoveredFiles for both server and client builds\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-server\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n const resolvedConfig = resolveUserConfig({\n condition: \"react-server\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n timing.configResolved = Date.now();\n },\n configResolved(config) {\n resolvedConfig = config;\n },\n async buildStart() {\n timing.buildStart = Date.now();\n if (userOptions.onEvent && autoDiscoveredFiles) {\n userOptions.onEvent({\n type: \"build.start\",\n data: {\n pages: Array.from(autoDiscoveredFiles.urlMap.keys()),\n files: autoDiscoveredFiles,\n },\n });\n }\n },\n\n async renderStart() {\n timing.renderStart = Date.now();\n },\n\n async writeBundle(options, bundle) {\n if (userOptions.onEvent) {\n userOptions.onEvent({\n type: \"build.writeBundle.static-server\",\n data: {\n pages: Array.from(autoDiscoveredFiles?.urlMap.keys() ?? []),\n options,\n bundle,\n },\n });\n }\n try {\n const bundleManifest = getBundleManifest<false>({\n bundle,\n normalizer: userOptions.normalizer,\n });\n if (!(\"source\" in bundleManifest[\".vite/manifest.json\"])) {\n throw new Error(\"Server manifest not found\");\n }\n\n serverManifest = JSON.parse(\n bundleManifest[\".vite/manifest.json\"].source as string\n );\n\n if (!serverManifest) {\n throw new Error(\"Failed to parse server manifest\");\n }\n \n const clientManifestResult = await tryManifest({\n root: userOptions.projectRoot,\n outDir: join(userOptions.build.outDir, userOptions.build.client),\n ssrManifest: false,\n });\n if (clientManifestResult.type === \"error\") {\n throw clientManifestResult.error;\n }\n const clientManifest = clientManifestResult.manifest;\n\n buildLoader = await createBuildLoader<T, InlineCSS>(\n {\n userConfig,\n userOptions: userOptions as ResolvedUserOptions<T, InlineCSS>,\n serverManifest: serverManifest ?? {},\n staticManifest: autoDiscoveredFiles?.staticManifest ?? {},\n clientManifest: clientManifest ?? {},\n },\n bundle\n );\n\n // Create CSS props for each CSS file\n const cssFilesByPage = new Map();\n\n // First collect global styles from index.html\n const globalCssInputs = collectManifestCss(\n autoDiscoveredFiles?.staticManifest ?? {},\n \"index.html\"\n );\n\n const globalCss: Map<string, CssContent<InlineCSS>> = new Map();\n // Collect CSS files for each page and its props\n for (const [url, { page, props }] of autoDiscoveredFiles?.urlMap ??\n []) {\n const transformedServerManifest = Object.fromEntries(\n Object.entries(serverManifest).map(([key, value]) => {\n if (!value.css?.length) {\n return [key, value];\n }\n return [\n key,\n {\n ...value,\n css:\n autoDiscoveredFiles?.staticManifest[key]?.css ?? value.css,\n },\n ];\n })\n );\n const cssInputs = collectManifestCss(\n transformedServerManifest,\n props ? [page, props] : page\n );\n\n // Create a map for this page's CSS files\n const pageCssMap: Map<string, CssContent> = new Map();\n // Add global styles if they exist\n if (Object.keys(globalCssInputs).length > 0) {\n for (const [key, value] of Object.entries(globalCssInputs)) {\n let cssContent = await buildLoader(value + \"?inline\").then((r) =>\n String(r.default)\n );\n if (cssContent === \"undefined\" || !cssContent) {\n cssContent = await readFile(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static,\n key\n ),\n \"utf-8\"\n ) ?? \"\"\n }\n if (cssContent) {\n globalCss.set(\n key,\n createCssProps<T, InlineCSS>({\n id: key,\n code: cssContent,\n userOptions: userOptions,\n })\n );\n }\n }\n }\n\n // Add page-specific styles\n for (const [key, value] of Object.entries(cssInputs)) {\n try {\n const { default: cssContent } = await buildLoader(\n value + \"?inline\"\n );\n if (typeof cssContent !== \"string\") {\n continue;\n }\n if (cssContent) {\n // Ensure the CSS file path is properly resolved\n pageCssMap.set(\n key,\n createCssProps({\n id: key,\n code: cssContent,\n userOptions: userOptions,\n })\n );\n }\n } catch (error) {\n console.warn(`Failed to process CSS file ${value}:`, error);\n continue;\n }\n }\n cssFilesByPage.set(url, pageCssMap);\n }\n\n const staticManifest = autoDiscoveredFiles?.staticManifest ?? {};\n const indexHtml = staticManifest?.[\"index.html\"]?.file;\n const pipeableStreamOptions = {\n ...userOptions.pipeableStreamOptions,\n bootstrapModules: [\n ...(indexHtml ? [baseURL(indexHtml)] : []),\n ...(userOptions.pipeableStreamOptions?.bootstrapModules ?? []),\n ],\n };\n userOptions.pipeableStreamOptions = pipeableStreamOptions;\n const serializedUserOptions = serializedOptions(\n userOptions,\n autoDiscoveredFiles!\n );\n // Create worker\n if (!worker) {\n const viteEnvPrefix =\n typeof resolvedConfig.envPrefix === \"string\"\n ? resolvedConfig.envPrefix\n : Array.isArray(resolvedConfig.envPrefix)\n ? resolvedConfig.envPrefix[0]\n : DEFAULT_CONFIG.ENV_PREFIX;\n const routeCount = autoDiscoveredFiles?.urlMap.size ?? 0;\n const maxListeners = routeCount + 1;\n const workerResult = await createWorker({\n projectRoot: userOptions.projectRoot,\n workerPath: userOptions.htmlWorkerPath,\n currentCondition: \"react-server\",\n reverseCondition: \"react-client\",\n maxListeners: maxListeners,\n envPrefix: viteEnvPrefix,\n logger: this.environment.logger,\n workerData: {\n resolvedConfig: serializeResolvedConfig(resolvedConfig),\n userOptions: {\n ...serializedUserOptions,\n },\n },\n });\n if (workerResult.type === \"error\") {\n throw workerResult.error;\n } else if (workerResult.type === \"skip\") {\n this.environment.logger.info(\n \"Worker not created, skipping static build\"\n );\n return;\n } else {\n worker = workerResult.worker;\n }\n }\n // Render pages\n const { onEvent, ...handlerOptions } = userOptions;\n const renderPagesGenerator = renderPages(\n autoDiscoveredFiles!,\n {\n ...handlerOptions,\n loader: buildLoader,\n worker: worker,\n logger: createLogger(),\n onEvent: async (event: PluginEvent) => {\n if (userOptions.onEvent) {\n userOptions.onEvent(event);\n }\n // Add file write completion event\n if (event.type === \"file.write\") {\n await event.data.onComplete();\n }\n },\n pipeableStreamOptions: pipeableStreamOptions,\n manifest: serverManifest ?? {},\n build: {\n htmlOutputPath: userOptions.build.htmlOutputPath,\n rscOutputPath: userOptions.build.rscOutputPath,\n outDir: userOptions.build.outDir,\n pages: userOptions.build.pages,\n server: userOptions.build.server,\n static: userOptions.build.static,\n client: userOptions.build.client,\n },\n globalCss: globalCss,\n css: {\n ...handlerOptions.css,\n inlineCss: handlerOptions.css?.inlineCss ?? true,\n },\n },\n cssFilesByPage\n );\n\n // Process render results\n let finalResult: RenderPagesResult | undefined;\n for await (const result of renderPagesGenerator) {\n if (result.type === \"error\") {\n throw result.error;\n }\n finalResult = result;\n }\n\n if (!finalResult) {\n throw new Error(\"No render result produced\");\n }\n finalResult.streamMetrics.duration = Math.round(\n performance.now() - finalResult.streamMetrics.startTime\n );\n\n this.environment.logger.info(\n `Rendered ${finalResult.completedRoutes.size} unique routes in ${finalResult.streamMetrics.duration}ms`\n );\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n this.environment.logger.warn(\n `THIS IS BUILD IS NOT INTENDED FOR PRODUCTION (${process.env[\"NODE_ENV\"]})`\n );\n }\n\n // Update timing\n timing.render = Date.now() - (timing.renderStart ?? timing.start);\n } catch (error) {\n throw error;\n }\n\n // Cleanup\n try {\n worker.postMessage({ type: \"SHUTDOWN\", id: \"*\" });\n await new Promise<void>((resolve, reject) => {\n const shutdownHandler = (msg: any) => {\n if (msg.type === \"SHUTDOWN_COMPLETE\") {\n worker.removeListener(\"message\", shutdownHandler);\n worker\n .terminate()\n .then((code) =>\n code === 1\n ? resolve()\n : reject(new Error(`Worker terminated with code ${code}`))\n )\n .catch(reject);\n }\n };\n worker.on(\"message\", shutdownHandler);\n });\n } catch (error) {\n throw error;\n }\n },\n } as const;\n}\n"],"names":["resolvedConfig","options"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["../../../plugin/react-static/plugin.ts"],"sourcesContent":["/**\n * plugin.ts\n *\n * PURPOSE: Main Vite plugin for React Server Components (RSC) static site generation\n *\n * This module:\n * 1. Orchestrates the entire static site generation process\n * 2. Manages the lifecycle of the RSC rendering process\n * 3. Handles file writing for both initial page loads and client-side navigation\n * - Writes .html files for initial page loads (complete HTML document)\n * - Writes .rsc files for client-side navigation (RSC content only)\n * 4. Provides hooks for Vite to integrate with the build process\n * 5. Manages worker threads for parallel rendering\n * 6. Handles error reporting and metrics collection\n */\n\nimport { join } from \"node:path\";\nimport { Worker } from \"node:worker_threads\";\nimport {\n type Manifest,\n type ResolvedConfig,\n type Plugin as VitePlugin,\n createLogger,\n} from \"vite\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { createBuildLoader } from \"./createBuildLoader.js\";\nimport type {\n BuildTiming,\n ReactStreamPluginMeta,\n ResolvedUserConfig,\n ResolvedUserOptions,\n PluginEvent,\n RenderPagesResult,\n AutoDiscoveredFiles,\n CssContent,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\nimport { type StreamPluginOptions } from \"../types.js\";\nimport { renderPages } from \"./renderPages.js\";\nimport { getBundleManifest } from \"../helpers/getBundleManifest.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { resolveAutoDiscover } from \"../config/autoDiscover/resolveAutoDiscover.js\";\nimport { getCondition } from \"../config/getCondition.js\";\nimport {\n serializedOptions,\n serializeResolvedConfig,\n} from \"../helpers/serializeUserOptions.js\";\nimport { collectManifestCss } from \"../helpers/collectManifestCss.js\";\nimport { createCssProps } from \"../helpers/createCssProps.js\";\nimport { performance } from \"node:perf_hooks\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { baseURL } from \"../utils/envUrls.node.js\";\nimport { readFile } from \"node:fs/promises\";\n\nif (getCondition() !== \"react-server\") {\n throw new Error(\n \"Condition mismatch, should be react-server but got \" +\n process.env[\"NODE_OPTIONS\"]\n );\n}\n\nexport function reactStaticPlugin<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(\n options: StreamPluginOptions<T, InlineCSS>\n): VitePlugin<{\n meta: ReactStreamPluginMeta;\n}> {\n let worker: Worker;\n let userConfig: ResolvedUserConfig;\n let resolvedConfig: ResolvedConfig;\n let userOptions: ResolvedUserOptions<T, InlineCSS>;\n let autoDiscoveredFiles: AutoDiscoveredFiles | null = null;\n let serverManifest: Manifest | undefined = undefined;\n let buildLoader: Awaited<ReturnType<typeof createBuildLoader>> | undefined;\n const timing: BuildTiming = {\n start: Date.now(),\n configResolved: 0,\n buildStart: 0,\n renderStart: 0,\n };\n\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n\n return {\n name: \"vite:plugin-react-server/static\",\n enforce: \"post\",\n api: {\n meta: { timing },\n },\n\n async config(config, configEnv) {\n if (config.root && config.root !== userOptions.projectRoot) {\n userOptions.projectRoot = config.root;\n }\n if (configEnv.command !== \"build\") {\n return;\n }\n // Initialize autoDiscoveredFiles for both server and client builds\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-server\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n const resolvedConfig = resolveUserConfig({\n condition: \"react-server\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n timing.configResolved = Date.now();\n },\n configResolved(config) {\n resolvedConfig = config;\n },\n async buildStart() {\n timing.buildStart = Date.now();\n if (userOptions.onEvent && autoDiscoveredFiles) {\n userOptions.onEvent({\n type: \"build.start\",\n data: {\n pages: Array.from(autoDiscoveredFiles.urlMap.keys()),\n files: autoDiscoveredFiles,\n },\n });\n }\n },\n\n async renderStart() {\n timing.renderStart = Date.now();\n },\n\n async writeBundle(options, bundle) {\n if (userOptions.onEvent) {\n userOptions.onEvent({\n type: \"build.writeBundle.static-server\",\n data: {\n pages: Array.from(autoDiscoveredFiles?.urlMap.keys() ?? []),\n options,\n bundle,\n },\n });\n }\n try {\n const bundleManifest = getBundleManifest<false>({\n bundle,\n normalizer: userOptions.normalizer,\n });\n const manifestPath =\n typeof resolvedConfig.build.manifest === \"string\"\n ? resolvedConfig.build.manifest\n : \".vite/manifest.json\";\n if (!(\"source\" in bundleManifest[manifestPath])) {\n throw new Error(\"Server manifest not found\");\n }\n\n serverManifest = JSON.parse(\n bundleManifest[manifestPath].source as string\n );\n\n if (!serverManifest) {\n throw new Error(\"Failed to parse server manifest\");\n }\n\n buildLoader = await createBuildLoader(\n {\n userConfig,\n userOptions: userOptions,\n serverManifest: serverManifest ?? {},\n staticManifest: autoDiscoveredFiles?.staticManifest ?? {},\n clientManifest: {},\n },\n bundle\n );\n\n // Create CSS props for each CSS file\n const cssFilesByPage = new Map();\n\n // First collect global styles from index.html\n const globalCssInputs = collectManifestCss(\n autoDiscoveredFiles?.staticManifest ?? {},\n \"index.html\"\n );\n\n const globalCss: Map<string, CssContent<InlineCSS>> = new Map();\n // Collect CSS files for each page and its props\n for (const [url, { page, props }] of autoDiscoveredFiles?.urlMap ??\n []) {\n const transformedServerManifest = Object.fromEntries(\n Object.entries(serverManifest).map(([key, value]) => {\n if (!value.css?.length) {\n return [key, value];\n }\n return [\n key,\n {\n ...value,\n css:\n autoDiscoveredFiles?.staticManifest[key]?.css ?? value.css,\n },\n ];\n })\n );\n const cssInputs = collectManifestCss(\n transformedServerManifest,\n props ? [page, props] : page\n );\n // Create a map for this page's CSS files\n const pageCssMap: Map<string, CssContent> = new Map();\n // Add global styles if they exist\n if (Object.keys(globalCssInputs).length > 0) {\n for (const [key, value] of Object.entries(globalCssInputs)) {\n let cssContent = await buildLoader(value + \"?inline\").then((r) =>\n String(r.default)\n );\n if (cssContent === \"undefined\" || !cssContent) {\n cssContent =\n (await readFile(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static,\n key\n ),\n \"utf-8\"\n )) ?? \"\";\n }\n if (cssContent) {\n globalCss.set(\n key,\n createCssProps<T, InlineCSS>({\n id: key,\n code: cssContent,\n userOptions: userOptions,\n })\n );\n }\n }\n }\n\n // Add page-specific styles\n for (const [key, value] of Object.entries(cssInputs)) {\n try {\n const { default: cssContent } = await buildLoader(\n value + \"?inline\"\n );\n if (typeof cssContent !== \"string\") {\n continue;\n }\n if (cssContent) {\n // Ensure the CSS file path is properly resolved\n pageCssMap.set(\n key,\n createCssProps({\n id: key,\n code: cssContent,\n userOptions: userOptions,\n })\n );\n }\n } catch (error) {\n console.warn(`Failed to process CSS file ${value}:`, error);\n continue;\n }\n }\n cssFilesByPage.set(url, pageCssMap);\n }\n\n const staticManifest = autoDiscoveredFiles?.staticManifest ?? {};\n const indexHtml = staticManifest?.[\"index.html\"]?.file;\n const pipeableStreamOptions = {\n ...userOptions.pipeableStreamOptions,\n bootstrapModules: [\n ...(indexHtml ? [baseURL(indexHtml)] : []),\n ...(userOptions.pipeableStreamOptions?.bootstrapModules ?? []),\n ],\n };\n userOptions.pipeableStreamOptions = pipeableStreamOptions;\n const serializedUserOptions = serializedOptions(\n userOptions,\n autoDiscoveredFiles!\n );\n // Create worker\n if (!worker) {\n const viteEnvPrefix =\n typeof resolvedConfig.envPrefix === \"string\"\n ? resolvedConfig.envPrefix\n : Array.isArray(resolvedConfig.envPrefix)\n ? resolvedConfig.envPrefix[0]\n : DEFAULT_CONFIG.ENV_PREFIX;\n const routeCount = autoDiscoveredFiles?.urlMap.size ?? 0;\n const maxListeners = routeCount + 1;\n const workerResult = await createWorker({\n projectRoot: userOptions.projectRoot,\n workerPath: userOptions.htmlWorkerPath,\n currentCondition: \"react-server\",\n reverseCondition: \"react-client\",\n maxListeners: maxListeners,\n envPrefix: viteEnvPrefix,\n logger: this.environment.logger,\n workerData: {\n resolvedConfig: serializeResolvedConfig(resolvedConfig),\n userOptions: {\n ...serializedUserOptions,\n },\n },\n });\n if (workerResult.type === \"error\") {\n throw workerResult.error;\n } else if (workerResult.type === \"skip\") {\n this.environment.logger.info(\n \"Worker not created, skipping static build\"\n );\n return;\n } else {\n worker = workerResult.worker;\n }\n }\n // Render pages\n const { onEvent, ...handlerOptions } = userOptions;\n const renderPagesGenerator = renderPages(\n autoDiscoveredFiles!,\n {\n ...handlerOptions,\n loader: buildLoader,\n worker: worker,\n logger: createLogger(),\n onEvent: async (event: PluginEvent) => {\n if (userOptions.onEvent) {\n userOptions.onEvent(event);\n }\n // Add file write completion event\n if (event.type === \"file.write\") {\n await event.data.onComplete();\n }\n },\n pipeableStreamOptions: pipeableStreamOptions,\n manifest: serverManifest ?? {},\n build: {\n htmlOutputPath: userOptions.build.htmlOutputPath,\n rscOutputPath: userOptions.build.rscOutputPath,\n outDir: userOptions.build.outDir,\n pages: userOptions.build.pages,\n server: userOptions.build.server,\n static: userOptions.build.static,\n client: userOptions.build.client,\n },\n globalCss: globalCss,\n css: {\n ...handlerOptions.css,\n inlineCss: handlerOptions.css?.inlineCss ?? true,\n },\n },\n cssFilesByPage\n );\n\n // Process render results\n let finalResult: RenderPagesResult | undefined;\n for await (const result of renderPagesGenerator) {\n if (result.type === \"error\") {\n throw result.error;\n }\n finalResult = result;\n }\n\n if (!finalResult) {\n throw new Error(\"No render result produced\");\n }\n finalResult.streamMetrics.duration = Math.round(\n performance.now() - finalResult.streamMetrics.startTime\n );\n\n this.environment.logger.info(\n `Rendered ${finalResult.completedRoutes.size} unique routes in ${finalResult.streamMetrics.duration}ms`\n );\n if (process.env[\"NODE_ENV\"] !== \"production\") {\n this.environment.logger.warn(\n `THIS IS BUILD IS NOT INTENDED FOR PRODUCTION (${process.env[\"NODE_ENV\"]})`\n );\n }\n\n // Update timing\n timing.render = Date.now() - (timing.renderStart ?? timing.start);\n } catch (error) {\n throw error;\n }\n\n // Cleanup\n try {\n worker.postMessage({ type: \"SHUTDOWN\", id: \"*\" });\n await new Promise<void>((resolve, reject) => {\n const shutdownHandler = (msg: any) => {\n if (msg.type === \"SHUTDOWN_COMPLETE\") {\n worker.removeListener(\"message\", shutdownHandler);\n worker\n .terminate()\n .then((code) =>\n code === 1\n ? resolve()\n : reject(new Error(`Worker terminated with code ${code}`))\n )\n .catch(reject);\n }\n };\n worker.on(\"message\", shutdownHandler);\n });\n } catch (error) {\n throw error;\n }\n },\n } as const;\n}\n"],"names":["resolvedConfig","options"],"mappings":"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"}
|
|
@@ -113,7 +113,7 @@ async function* renderPages(autoDiscoveredFiles, handlerOptions, cssFilesByPage)
|
|
|
113
113
|
return {
|
|
114
114
|
type: "success",
|
|
115
115
|
completedRoutes,
|
|
116
|
-
failedRoutes:
|
|
116
|
+
failedRoutes: void 0,
|
|
117
117
|
htmlSizes: baseMetrics.htmlSizes,
|
|
118
118
|
rscSizes: baseMetrics.rscSizes,
|
|
119
119
|
streamMetrics: baseMetrics.streamMetrics,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderPages.js","sources":["../../../plugin/react-static/renderPages.ts"],"sourcesContent":["/**\n * renderPages.ts\n *\n * PURPOSE: Processes React Server Components (RSC) streams and writes output files\n *\n * This module:\n * 1. Creates RSC and HTML streams for each route\n * 2. Pipes RSC stream directly to .rsc files\n * 3. Transforms RSC to HTML via worker and pipes to .html files\n * 4. Collects metrics and handles errors\n */\nimport { createRenderMetrics } from \"../helpers/metrics.js\";\nimport { renderPage } from \"./renderPage.js\";\nimport { PassThrough } from \"node:stream\";\nimport type {\n StreamMetrics,\n RenderPagesResult,\n AutoDiscoveredFiles,\n CssContent,\n MultiPageHandlerOptions,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\n\nexport async function* renderPages<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(\n autoDiscoveredFiles: AutoDiscoveredFiles,\n handlerOptions: MultiPageHandlerOptions<T>,\n cssFilesByPage: Map<string, Map<string, CssContent<InlineCSS>>>\n): AsyncGenerator<RenderPagesResult, RenderPagesResult, unknown> {\n const routes = Array.from(autoDiscoveredFiles.urlMap.keys());\n const completedRoutes = new Set<string>();\n const failedRoutes = new Set<string>();\n const baseMetrics = createRenderMetrics(routes[0]);\n const results = new Map<\n string,\n {\n html: PassThrough;\n rsc: PassThrough;\n metrics: {\n rscFull: StreamMetrics;\n rscHeadless: StreamMetrics;\n };\n }\n >();\n const errors: Error[] = [];\n\n if (!autoDiscoveredFiles.urlMap) {\n throw new Error(\"No urlMap provided to renderPages\");\n }\n\n for (const route of routes) {\n const { page, props } = autoDiscoveredFiles.urlMap.get(route) || {};\n if (!page) continue;\n\n try {\n const pageRenderer = renderPage({\n ...handlerOptions,\n route,\n pagePath: page,\n propsPath: props,\n cssFiles: cssFilesByPage.get(route) ?? new Map(),\n });\n\n for await (const result of pageRenderer) {\n if (result.type === \"skip\") continue;\n\n if (result.type === \"error\") {\n failedRoutes.add(route);\n errors.push(result.error);\n yield {\n type: \"error\",\n error: result.error,\n failedRoutes,\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n continue;\n }\n\n if (result.type === \"success\") {\n completedRoutes.add(route);\n results.set(route, {\n html: result.html,\n rsc: result.rsc,\n metrics: result.metrics,\n });\n\n // Update metrics\n baseMetrics.htmlSizes.set(route, result.metrics.rscFull.bytes);\n baseMetrics.rscSizes.set(route, result.metrics.rscHeadless.bytes);\n baseMetrics.streamMetrics = {\n ...baseMetrics.streamMetrics,\n chunks: Math.max(\n baseMetrics.streamMetrics.chunks,\n result.metrics.rscFull.chunks\n ),\n bytes: Math.max(\n baseMetrics.streamMetrics.bytes,\n result.metrics.rscFull.bytes\n ),\n duration: Math.max(\n baseMetrics.streamMetrics.duration,\n result.metrics.rscFull.duration\n ),\n startTime: Math.min(\n baseMetrics.streamMetrics.startTime,\n result.metrics.rscFull.startTime\n ),\n };\n\n yield {\n type: \"success\",\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n }\n }\n } catch (err) {\n failedRoutes.add(route);\n errors.push(err instanceof Error ? err : new Error(String(err)));\n yield {\n type: \"error\",\n error: err instanceof Error ? err : new Error(String(err)),\n failedRoutes,\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n }\n }\n\n if (failedRoutes.size > 0) {\n return {\n type: \"error\",\n error: errors[0],\n failedRoutes,\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n }\n\n return {\n type: \"success\",\n completedRoutes,\n failedRoutes: undefined,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n}\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"renderPages.js","sources":["../../../plugin/react-static/renderPages.ts"],"sourcesContent":["/**\n * renderPages.ts\n *\n * PURPOSE: Processes React Server Components (RSC) streams and writes output files\n *\n * This module:\n * 1. Creates RSC and HTML streams for each route\n * 2. Pipes RSC stream directly to .rsc files\n * 3. Transforms RSC to HTML via worker and pipes to .html files\n * 4. Collects metrics and handles errors\n */\nimport { createRenderMetrics } from \"../helpers/metrics.js\";\nimport { renderPage } from \"./renderPage.js\";\nimport { PassThrough } from \"node:stream\";\nimport type {\n StreamMetrics,\n RenderPagesResult,\n AutoDiscoveredFiles,\n CssContent,\n MultiPageHandlerOptions,\n PagePropOpt,\n InlineCssOpt,\n} from \"../types.js\";\n\nexport async function* renderPages<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(\n autoDiscoveredFiles: AutoDiscoveredFiles,\n handlerOptions: MultiPageHandlerOptions<T>,\n cssFilesByPage: Map<string, Map<string, CssContent<InlineCSS>>>\n): AsyncGenerator<RenderPagesResult, RenderPagesResult, unknown> {\n const routes = Array.from(autoDiscoveredFiles.urlMap.keys());\n const completedRoutes = new Set<string>();\n const failedRoutes = new Set<string>();\n const baseMetrics = createRenderMetrics(routes[0]);\n const results = new Map<\n string,\n {\n html: PassThrough;\n rsc: PassThrough;\n metrics: {\n rscFull: StreamMetrics;\n rscHeadless: StreamMetrics;\n };\n }\n >();\n const errors: Error[] = [];\n\n if (!autoDiscoveredFiles.urlMap) {\n throw new Error(\"No urlMap provided to renderPages\");\n }\n\n for (const route of routes) {\n const { page, props } = autoDiscoveredFiles.urlMap.get(route) || {};\n if (!page) continue;\n\n try {\n const pageRenderer = renderPage({\n ...handlerOptions,\n route,\n pagePath: page,\n propsPath: props,\n cssFiles: cssFilesByPage.get(route) ?? new Map(),\n });\n\n for await (const result of pageRenderer) {\n if (result.type === \"skip\") continue;\n\n if (result.type === \"error\") {\n failedRoutes.add(route);\n errors.push(result.error);\n yield {\n type: \"error\",\n error: result.error,\n failedRoutes,\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n continue;\n }\n\n if (result.type === \"success\") {\n completedRoutes.add(route);\n results.set(route, {\n html: result.html,\n rsc: result.rsc,\n metrics: result.metrics,\n });\n\n // Update metrics\n baseMetrics.htmlSizes.set(route, result.metrics.rscFull.bytes);\n baseMetrics.rscSizes.set(route, result.metrics.rscHeadless.bytes);\n baseMetrics.streamMetrics = {\n ...baseMetrics.streamMetrics,\n chunks: Math.max(\n baseMetrics.streamMetrics.chunks,\n result.metrics.rscFull.chunks\n ),\n bytes: Math.max(\n baseMetrics.streamMetrics.bytes,\n result.metrics.rscFull.bytes\n ),\n duration: Math.max(\n baseMetrics.streamMetrics.duration,\n result.metrics.rscFull.duration\n ),\n startTime: Math.min(\n baseMetrics.streamMetrics.startTime,\n result.metrics.rscFull.startTime\n ),\n };\n\n yield {\n type: \"success\",\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n }\n }\n } catch (err) {\n failedRoutes.add(route);\n errors.push(err instanceof Error ? err : new Error(String(err)));\n yield {\n type: \"error\",\n error: err instanceof Error ? err : new Error(String(err)),\n failedRoutes,\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n }\n }\n\n if (failedRoutes.size > 0) {\n return {\n type: \"error\",\n error: errors[0],\n failedRoutes,\n completedRoutes,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n }\n\n return {\n type: \"success\",\n completedRoutes,\n failedRoutes: undefined,\n htmlSizes: baseMetrics.htmlSizes,\n rscSizes: baseMetrics.rscSizes,\n streamMetrics: baseMetrics.streamMetrics,\n results,\n } as const;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createMappingsSerializer.d.ts","sourceRoot":"","sources":["../../../plugin/source-map/createMappingsSerializer.ts"],"names":[],"mappings":"AACA,wBAAgB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"createMappingsSerializer.d.ts","sourceRoot":"","sources":["../../../plugin/source-map/createMappingsSerializer.ts"],"names":[],"mappings":"AACA,wBAAgB,wBAAwB,KAUlC,kBAAkB,MAAM,EACxB,oBAAoB,MAAM,EAC1B,gBAAgB,MAAM,EACtB,iBAAiB,MAAM,EACvB,mBAAmB,MAAM,EACzB,cAAc,MAAM,YAoKvB"}
|
|
@@ -1,4 +1,28 @@
|
|
|
1
1
|
import type { InlineCssOpt, PagePropOpt, StreamPluginOptions } from "../types.js";
|
|
2
2
|
import type { Plugin } from "vite";
|
|
3
|
+
/**
|
|
4
|
+
* Plugin for transforming React Client Components.
|
|
5
|
+
*
|
|
6
|
+
* Core responsibilities:
|
|
7
|
+
* 1. Detects "use client" directives
|
|
8
|
+
* 2. Transforms client components for RSC boundaries
|
|
9
|
+
* 3. Adds client reference metadata for RSC
|
|
10
|
+
*
|
|
11
|
+
* When a component is marked with "use client", it:
|
|
12
|
+
* - Gets transformed into a client reference
|
|
13
|
+
* - Maintains module ID for RSC boundaries
|
|
14
|
+
* - Preserves class/function behavior
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* export default defineConfig({
|
|
19
|
+
* plugins: [
|
|
20
|
+
* viteReactClientTransformPlugin({
|
|
21
|
+
* projectRoot: process.cwd(),
|
|
22
|
+
* })
|
|
23
|
+
* ]
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
3
27
|
export declare function reactTransformPlugin<T extends PagePropOpt = PagePropOpt, InlineCSS extends InlineCssOpt = InlineCssOpt>(options: StreamPluginOptions<T, InlineCSS>): Plugin;
|
|
4
28
|
//# sourceMappingURL=plugin.server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/transformer/plugin.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAY,MAAM,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/transformer/plugin.server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EAEX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAY,MAAM,EAAE,MAAM,MAAM,CAAC;AAO7C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,wBAAgB,oBAAoB,CAClC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAC7C,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,MAAM,CA6HpD"}
|