vite-plugin-react-server 1.1.12 → 1.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +10 -8
- package/dist/plugin/components/css-collector-elements.d.ts +4 -2
- package/dist/plugin/components/css-collector-elements.d.ts.map +1 -1
- package/dist/plugin/components/css-collector-elements.js +21 -7
- package/dist/plugin/components/css-collector-elements.js.map +1 -1
- package/dist/plugin/components/css-collector.d.ts +4 -5
- package/dist/plugin/components/css-collector.d.ts.map +1 -1
- package/dist/plugin/components/css-collector.js +5 -9
- package/dist/plugin/components/css-collector.js.map +1 -1
- package/dist/plugin/components/html.d.ts +1 -1
- package/dist/plugin/components/html.d.ts.map +1 -1
- package/dist/plugin/components/html.js +14 -3
- package/dist/plugin/components/html.js.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts +4 -4
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +14 -9
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js.map +1 -1
- package/dist/plugin/config/defaults.d.ts +66 -12
- package/dist/plugin/config/defaults.d.ts.map +1 -1
- package/dist/plugin/config/defaults.js +69 -15
- package/dist/plugin/config/defaults.js.map +1 -1
- package/dist/plugin/config/resolveAutoDiscoverMatcher.d.ts +5 -0
- package/dist/plugin/config/resolveAutoDiscoverMatcher.d.ts.map +1 -0
- package/dist/plugin/config/resolveAutoDiscoverMatcher.js +25 -0
- package/dist/plugin/config/resolveAutoDiscoverMatcher.js.map +1 -0
- package/dist/plugin/config/resolveEnv.d.ts.map +1 -1
- package/dist/plugin/config/resolveEnv.js +16 -5
- package/dist/plugin/config/resolveEnv.js.map +1 -1
- package/dist/plugin/config/resolveOptions.d.ts +3 -3
- package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.js +59 -87
- package/dist/plugin/config/resolveOptions.js.map +1 -1
- package/dist/plugin/config/resolveUserConfig.d.ts +4 -4
- package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
- package/dist/plugin/config/resolveUserConfig.js +8 -1
- package/dist/plugin/config/resolveUserConfig.js.map +1 -1
- package/dist/plugin/error/toError.d.ts +3 -0
- package/dist/plugin/error/toError.d.ts.map +1 -1
- package/dist/plugin/error/toError.js +33 -4
- package/dist/plugin/error/toError.js.map +1 -1
- package/dist/plugin/helpers/cleanObject.d.ts.map +1 -1
- package/dist/plugin/helpers/cleanObject.js +19 -5
- package/dist/plugin/helpers/cleanObject.js.map +1 -1
- package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +3 -3
- package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
- package/dist/plugin/helpers/collectViteModuleGraphCss.js.map +1 -1
- package/dist/plugin/helpers/createCssProps.d.ts +4 -3
- package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
- package/dist/plugin/helpers/createCssProps.js +7 -2
- package/dist/plugin/helpers/createCssProps.js.map +1 -1
- package/dist/plugin/helpers/createHandler.d.ts +4 -3
- package/dist/plugin/helpers/createHandler.d.ts.map +1 -1
- package/dist/plugin/helpers/createHandler.js +1 -1
- package/dist/plugin/helpers/createHandler.js.map +1 -1
- package/dist/plugin/helpers/createRscStream.d.ts +2 -2
- package/dist/plugin/helpers/createRscStream.d.ts.map +1 -1
- package/dist/plugin/helpers/createRscStream.js +15 -5
- package/dist/plugin/helpers/createRscStream.js.map +1 -1
- package/dist/plugin/helpers/index.d.ts +2 -2
- package/dist/plugin/helpers/index.d.ts.map +1 -1
- package/dist/plugin/helpers/index.js +2 -2
- package/dist/plugin/helpers/inputNormalizer.d.ts.map +1 -1
- package/dist/plugin/helpers/inputNormalizer.js +4 -1
- package/dist/plugin/helpers/inputNormalizer.js.map +1 -1
- package/dist/plugin/helpers/moduleResolver.d.ts +3 -0
- package/dist/plugin/helpers/moduleResolver.d.ts.map +1 -0
- package/dist/plugin/helpers/moduleResolver.js +25 -0
- package/dist/plugin/helpers/requestInfo.d.ts +18 -3
- package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
- package/dist/plugin/helpers/requestInfo.js +75 -11
- package/dist/plugin/helpers/requestInfo.js.map +1 -1
- package/dist/plugin/helpers/resolvePage.d.ts.map +1 -1
- package/dist/plugin/helpers/resolvePage.js +2 -3
- package/dist/plugin/helpers/resolvePage.js.map +1 -1
- package/dist/plugin/helpers/resolvePageAndProps.d.ts +4 -3
- package/dist/plugin/helpers/resolvePageAndProps.d.ts.map +1 -1
- package/dist/plugin/helpers/resolvePageAndProps.js.map +1 -1
- package/dist/plugin/helpers/serializeUserOptions.d.ts +3 -2
- package/dist/plugin/helpers/serializeUserOptions.d.ts.map +1 -1
- package/dist/plugin/helpers/serializeUserOptions.js +13 -1
- package/dist/plugin/helpers/serializeUserOptions.js.map +1 -1
- package/dist/plugin/helpers/sourceMap.d.ts +8 -0
- package/dist/plugin/helpers/sourceMap.d.ts.map +1 -0
- package/dist/plugin/helpers/sourceMap.js +136 -0
- package/dist/plugin/helpers.js +1 -1
- package/dist/plugin/loader/createBuildLoader.d.ts +7 -22
- package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
- package/dist/plugin/loader/createBuildLoader.js +79 -65
- package/dist/plugin/loader/createBuildLoader.js.map +1 -1
- package/dist/plugin/loader/createDefaultLoader.d.ts +13 -0
- package/dist/plugin/loader/createDefaultLoader.d.ts.map +1 -0
- package/dist/plugin/loader/createDefaultLoader.js +47 -0
- package/dist/plugin/loader/css-loader.development.d.ts +1 -0
- package/dist/plugin/loader/css-loader.development.d.ts.map +1 -1
- package/dist/plugin/loader/css-loader.development.js +1 -1
- package/dist/plugin/loader/css-loader.development.js.map +1 -1
- package/dist/plugin/loader/handleExports.d.ts +33 -0
- package/dist/plugin/loader/handleExports.d.ts.map +1 -0
- package/dist/plugin/loader/handleExports.js +174 -0
- package/dist/plugin/loader/handleExports.js.map +1 -0
- package/dist/plugin/loader/index.d.ts +1 -1
- package/dist/plugin/loader/index.d.ts.map +1 -1
- package/dist/plugin/loader/index.js +4 -1
- package/dist/plugin/loader/parse.d.ts +6 -0
- package/dist/plugin/loader/parse.d.ts.map +1 -0
- package/dist/plugin/loader/parse.js +23 -0
- package/dist/plugin/loader/parse.js.map +1 -0
- package/dist/plugin/loader/react-loader.client.d.ts +2 -0
- package/dist/plugin/loader/react-loader.client.d.ts.map +1 -0
- package/dist/plugin/loader/react-loader.client.js +2 -0
- package/dist/plugin/loader/react-loader.d.ts +1 -12
- package/dist/plugin/loader/react-loader.d.ts.map +1 -1
- package/dist/plugin/loader/react-loader.js +5 -687
- package/dist/plugin/loader/react-loader.js.map +1 -1
- package/dist/plugin/loader/react-loader.server.d.ts +21 -0
- package/dist/plugin/loader/react-loader.server.d.ts.map +1 -0
- package/dist/plugin/loader/react-loader.server.js +69 -0
- package/dist/plugin/loader/sourceMap.d.ts +35 -0
- package/dist/plugin/loader/sourceMap.d.ts.map +1 -0
- package/dist/plugin/loader/sourceMap.js +105 -0
- package/dist/plugin/loader/temporaryReferences.d.ts +1 -1
- package/dist/plugin/loader/temporaryReferences.d.ts.map +1 -1
- package/dist/plugin/loader/transformModuleIfNeeded.d.ts +2 -0
- package/dist/plugin/loader/transformModuleIfNeeded.d.ts.map +1 -0
- package/dist/plugin/loader/transformModuleIfNeeded.js +27 -0
- package/dist/plugin/loader/transformModuleIfNeeded.js.map +1 -0
- package/dist/plugin/loader/transformModuleWithPreservedFunctions.d.ts +27 -0
- package/dist/plugin/loader/transformModuleWithPreservedFunctions.d.ts.map +1 -0
- package/dist/plugin/loader/transformModuleWithPreservedFunctions.js +52 -0
- package/dist/plugin/loader/transformModuleWithPreservedFunctions.js.map +1 -0
- package/dist/plugin/loader/types.d.ts +8 -0
- package/dist/plugin/loader/types.d.ts.map +1 -0
- package/dist/plugin/loader/types.js +1 -0
- package/dist/plugin/plugin.client.d.ts +2 -2
- package/dist/plugin/plugin.client.d.ts.map +1 -1
- package/dist/plugin/plugin.client.js +2 -3
- package/dist/plugin/plugin.client.js.map +1 -1
- package/dist/plugin/plugin.server.d.ts +2 -2
- package/dist/plugin/plugin.server.d.ts.map +1 -1
- package/dist/plugin/plugin.server.js +2 -2
- package/dist/plugin/plugin.server.js.map +1 -1
- package/dist/plugin/preserver/plugin.d.ts +2 -2
- package/dist/plugin/preserver/plugin.d.ts.map +1 -1
- package/dist/plugin/preserver/plugin.js +6 -2
- package/dist/plugin/preserver/plugin.js.map +1 -1
- package/dist/plugin/react-client/{server.d.ts → configureWorkerRequestHandler.d.ts} +4 -4
- package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts.map +1 -0
- package/dist/plugin/react-client/{server.js → configureWorkerRequestHandler.js} +11 -8
- package/dist/plugin/react-client/configureWorkerRequestHandler.js.map +1 -0
- package/dist/plugin/react-client/createMessageHandlers.d.ts +1 -1
- package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -1
- package/dist/plugin/react-client/createMessageHandlers.js +18 -11
- package/dist/plugin/react-client/createMessageHandlers.js.map +1 -1
- package/dist/plugin/react-client/createWorkerStream.d.ts +5 -3
- package/dist/plugin/react-client/createWorkerStream.d.ts.map +1 -1
- package/dist/plugin/react-client/createWorkerStream.js +61 -27
- package/dist/plugin/react-client/createWorkerStream.js.map +1 -1
- package/dist/plugin/react-client/handleWorkerRscStream.d.ts +1 -1
- package/dist/plugin/react-client/handleWorkerRscStream.d.ts.map +1 -1
- package/dist/plugin/react-client/handleWorkerRscStream.js +14 -4
- package/dist/plugin/react-client/handleWorkerRscStream.js.map +1 -1
- package/dist/plugin/react-client/plugin.d.ts +2 -2
- package/dist/plugin/react-client/plugin.d.ts.map +1 -1
- package/dist/plugin/react-client/plugin.js +7 -8
- package/dist/plugin/react-client/plugin.js.map +1 -1
- package/dist/plugin/react-client/restartWorker.d.ts +1 -1
- package/dist/plugin/react-client/restartWorker.d.ts.map +1 -1
- package/dist/plugin/react-client/restartWorker.js +9 -3
- package/dist/plugin/react-client/restartWorker.js.map +1 -1
- package/dist/plugin/react-server/configureReactServer.d.ts +9 -0
- package/dist/plugin/react-server/configureReactServer.d.ts.map +1 -0
- package/dist/plugin/react-server/{server.js → configureReactServer.js} +26 -8
- package/dist/plugin/react-server/configureReactServer.js.map +1 -0
- package/dist/plugin/react-server/handleServerAction.d.ts +5 -0
- package/dist/plugin/react-server/handleServerAction.d.ts.map +1 -0
- package/dist/plugin/react-server/handleServerAction.js +145 -0
- package/dist/plugin/react-server/handleServerAction.js.map +1 -0
- package/dist/plugin/react-server/plugin.d.ts +2 -2
- package/dist/plugin/react-server/plugin.d.ts.map +1 -1
- package/dist/plugin/react-server/plugin.js +1 -1
- package/dist/plugin/react-server/plugin.js.map +1 -1
- package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts +2 -2
- package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts.map +1 -1
- package/dist/plugin/react-static/collectHtmlWorkerContent.js.map +1 -1
- package/dist/plugin/react-static/collectRscContent.d.ts +2 -2
- package/dist/plugin/react-static/collectRscContent.d.ts.map +1 -1
- package/dist/plugin/react-static/collectRscContent.js.map +1 -1
- package/dist/plugin/react-static/configurePreviewServer.d.ts +3 -3
- package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
- package/dist/plugin/react-static/configurePreviewServer.js +18 -7
- package/dist/plugin/react-static/configurePreviewServer.js.map +1 -1
- package/dist/plugin/react-static/plugin.d.ts +2 -2
- package/dist/plugin/react-static/plugin.d.ts.map +1 -1
- package/dist/plugin/react-static/plugin.js +28 -12
- package/dist/plugin/react-static/plugin.js.map +1 -1
- package/dist/plugin/react-static/renderPage.d.ts +2 -2
- package/dist/plugin/react-static/renderPage.d.ts.map +1 -1
- package/dist/plugin/react-static/renderPage.js.map +1 -1
- package/dist/plugin/react-static/renderPages.d.ts +2 -2
- package/dist/plugin/react-static/renderPages.d.ts.map +1 -1
- package/dist/plugin/react-static/renderPages.js.map +1 -1
- package/dist/plugin/react-static/renderStreams.d.ts +2 -2
- package/dist/plugin/react-static/renderStreams.d.ts.map +1 -1
- package/dist/plugin/react-static/renderStreams.js +4 -4
- package/dist/plugin/react-static/renderStreams.js.map +1 -1
- package/dist/plugin/source-map/createMappingsSerializer.d.ts +2 -0
- package/dist/plugin/source-map/createMappingsSerializer.d.ts.map +1 -0
- package/dist/plugin/source-map/createMappingsSerializer.js +159 -0
- package/dist/plugin/source-map/readMappings.d.ts +2 -0
- package/dist/plugin/source-map/readMappings.d.ts.map +1 -0
- package/dist/plugin/source-map/readMappings.js +201 -0
- package/dist/plugin/transformer/index.d.ts +0 -1
- package/dist/plugin/transformer/index.d.ts.map +1 -1
- package/dist/plugin/transformer/index.js +0 -1
- package/dist/plugin/transformer/plugin.client.d.ts +1 -3
- package/dist/plugin/transformer/plugin.client.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.client.js +1 -84
- package/dist/plugin/transformer/plugin.server.d.ts +2 -2
- package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.server.js +52 -20
- package/dist/plugin/transformer/plugin.server.js.map +1 -1
- package/dist/plugin/types.d.ts +89 -119
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/utils/callServer.d.ts +1 -1
- package/dist/plugin/utils/callServer.d.ts.map +1 -1
- package/dist/plugin/utils/createCallServer.d.ts +1 -1
- package/dist/plugin/utils/createCallServer.d.ts.map +1 -1
- package/dist/plugin/utils/createCallServer.js +13 -4
- package/dist/plugin/utils/createCallServer.js.map +1 -1
- package/dist/plugin/utils/index.d.ts +1 -0
- package/dist/plugin/utils/index.d.ts.map +1 -1
- package/dist/plugin/utils/index.js +1 -0
- package/dist/plugin/utils.js +1 -0
- package/dist/plugin/utils.js.map +1 -1
- package/dist/plugin/vendor/vendor.client.d.ts +2 -1
- package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.client.js +2 -1
- package/dist/plugin/vendor/vendor.client.js.map +1 -1
- package/dist/plugin/vendor/vendor.server.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.server.js +1 -1
- package/dist/plugin/vendor/vendor.server.js.map +1 -1
- package/dist/plugin/worker/createWorker.d.ts.map +1 -1
- package/dist/plugin/worker/createWorker.js +17 -22
- package/dist/plugin/worker/createWorker.js.map +1 -1
- package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts.map +1 -1
- package/dist/plugin/worker/html/createHtmlWorkerRenderState.js +25 -4
- package/dist/plugin/worker/html/createHtmlWorkerRenderState.js.map +1 -1
- package/dist/plugin/worker/html/html-worker.development.js +15 -13
- package/dist/plugin/worker/html/html-worker.development.js.map +1 -1
- package/dist/plugin/worker/html/html-worker.production.js +2 -12
- package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
- package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/html/messageHandler.js +2 -2
- package/dist/plugin/worker/html/messageHandler.js.map +1 -1
- package/dist/plugin/worker/rsc/handleRender.d.ts +2 -1
- package/dist/plugin/worker/rsc/handleRender.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/handleRender.js +8 -8
- package/dist/plugin/worker/rsc/handleRender.js.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.js +166 -107
- package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
- package/dist/plugin/worker/rsc/rsc-worker.development.js +112 -52
- package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
- package/dist/plugin/worker/rsc/rsc-worker.production.js +1 -1
- package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -1
- package/dist/plugin/worker/rsc/state.d.ts +5 -64
- package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/state.js +5 -1
- package/dist/plugin/worker/rsc/state.js.map +1 -1
- package/dist/plugin/worker/sendMessage.d.ts +2 -0
- package/dist/plugin/worker/sendMessage.d.ts.map +1 -1
- package/dist/plugin/worker/sendMessage.js +2 -1
- package/dist/plugin/worker/sendMessage.js.map +1 -1
- package/dist/plugin/worker/types.d.ts +52 -53
- package/dist/plugin/worker/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -8
- package/plugin/components/css-collector-elements.tsx +30 -9
- package/plugin/components/css-collector.tsx +13 -22
- package/plugin/components/html.tsx +12 -5
- package/plugin/config/autoDiscover/resolveAutoDiscover.ts +31 -13
- package/plugin/config/defaults.tsx +72 -16
- package/plugin/config/resolveAutoDiscoverMatcher.ts +23 -0
- package/plugin/config/resolveEnv.ts +20 -12
- package/plugin/config/resolveOptions.ts +152 -155
- package/plugin/config/resolveUserConfig.ts +20 -5
- package/plugin/error/toError.ts +35 -1
- package/plugin/helpers/cleanObject.ts +79 -15
- package/plugin/helpers/collectViteModuleGraphCss.ts +4 -3
- package/plugin/helpers/createCssProps.tsx +26 -9
- package/plugin/helpers/createHandler.ts +7 -4
- package/plugin/helpers/createRscStream.tsx +20 -14
- package/plugin/helpers/index.ts +2 -2
- package/plugin/helpers/inputNormalizer.ts +4 -2
- package/plugin/helpers/moduleResolver.ts +36 -0
- package/plugin/helpers/requestInfo.ts +117 -23
- package/plugin/helpers/resolvePage.ts +2 -3
- package/plugin/helpers/resolvePageAndProps.ts +7 -6
- package/plugin/helpers/serializeUserOptions.ts +20 -2
- package/plugin/helpers/sourceMap.ts +182 -0
- package/plugin/loader/createBuildLoader.ts +124 -104
- package/plugin/loader/createDefaultLoader.ts +62 -0
- package/plugin/loader/css-loader.development.ts +3 -2
- package/plugin/loader/handleExports.ts +276 -0
- package/plugin/loader/index.ts +6 -1
- package/plugin/loader/parse.ts +22 -0
- package/plugin/loader/react-loader.client.ts +1 -0
- package/plugin/loader/react-loader.server.ts +107 -0
- package/plugin/loader/react-loader.ts +4 -1002
- package/plugin/loader/sourceMap.ts +118 -0
- package/plugin/loader/transformModuleIfNeeded.ts +33 -0
- package/plugin/loader/transformModuleWithPreservedFunctions.ts +119 -0
- package/plugin/loader/types.ts +10 -0
- package/plugin/plugin.client.ts +18 -11
- package/plugin/plugin.server.ts +6 -3
- package/plugin/preserver/plugin.ts +37 -17
- package/plugin/react-client/{server.ts → configureWorkerRequestHandler.ts} +22 -12
- package/plugin/react-client/createMessageHandlers.ts +21 -13
- package/plugin/react-client/createWorkerStream.ts +71 -33
- package/plugin/react-client/handleWorkerRscStream.ts +15 -5
- package/plugin/react-client/plugin.ts +18 -13
- package/plugin/react-client/restartWorker.ts +17 -5
- package/plugin/react-server/{server.ts → configureReactServer.ts} +40 -9
- package/plugin/react-server/handleServerAction.ts +177 -0
- package/plugin/react-server/plugin.ts +8 -3
- package/plugin/react-static/collectHtmlWorkerContent.ts +11 -3
- package/plugin/react-static/collectRscContent.ts +17 -9
- package/plugin/react-static/configurePreviewServer.ts +37 -17
- package/plugin/react-static/plugin.ts +45 -22
- package/plugin/react-static/renderPage.ts +12 -6
- package/plugin/react-static/renderPages.ts +15 -4
- package/plugin/react-static/renderStreams.ts +13 -12
- package/plugin/source-map/createMappingsSerializer.ts +182 -0
- package/plugin/source-map/readMappings.ts +195 -0
- package/plugin/transformer/README.md +295 -29
- package/plugin/transformer/index.ts +0 -1
- package/plugin/transformer/plugin.client.ts +0 -111
- package/plugin/transformer/plugin.server.ts +94 -25
- package/plugin/types/react-server-dom-esm.d.ts +183 -24
- package/plugin/types/sourceMap.d.ts +2 -0
- package/plugin/types/webpack-sources.d.ts +24 -0
- package/plugin/types.ts +169 -132
- package/plugin/utils/createCallServer.ts +21 -6
- package/plugin/utils/index.ts +2 -1
- package/plugin/vendor/vendor.client.ts +2 -1
- package/plugin/vendor/vendor.server.ts +1 -1
- package/plugin/worker/createWorker.ts +21 -24
- package/plugin/worker/html/createHtmlWorkerRenderState.tsx +31 -7
- package/plugin/worker/html/html-worker.development.tsx +16 -16
- package/plugin/worker/html/html-worker.production.tsx +3 -19
- package/plugin/worker/html/messageHandler.tsx +2 -4
- package/plugin/worker/rsc/handleRender.ts +15 -12
- package/plugin/worker/rsc/messageHandler.tsx +191 -120
- package/plugin/worker/rsc/rsc-worker.development.ts +148 -77
- package/plugin/worker/rsc/rsc-worker.production.ts +1 -1
- package/plugin/worker/rsc/state.ts +10 -0
- package/plugin/worker/sendMessage.ts +32 -14
- package/plugin/worker/types.ts +99 -64
- package/dist/plugin/react-client/server.d.ts.map +0 -1
- package/dist/plugin/react-client/server.js.map +0 -1
- package/dist/plugin/react-server/server.d.ts +0 -9
- package/dist/plugin/react-server/server.d.ts.map +0 -1
- package/dist/plugin/react-server/server.js.map +0 -1
- package/dist/plugin/transformer/plugin.client.js.map +0 -1
- package/dist/plugin/transformer/upgradeCssModuleCode.d.ts +0 -2
- package/dist/plugin/transformer/upgradeCssModuleCode.d.ts.map +0 -1
- package/dist/plugin/transformer/upgradeCssModuleCode.js +0 -40
- package/dist/plugin/worker/loader.d.ts +0 -5
- package/dist/plugin/worker/loader.d.ts.map +0 -1
- package/dist/plugin/worker/loader.js +0 -11
- package/dist/plugin/worker/loader.js.map +0 -1
- package/plugin/transformer/upgradeCssModuleCode.ts +0 -42
- package/plugin/worker/loader.ts +0 -7
|
@@ -5,93 +5,164 @@ import { register as registerTsx } from "tsx/esm/api";
|
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { pluginRoot } from "../../root.js";
|
|
7
7
|
import { deserializeRegExp } from "../../helpers/serializeUserOptions.js";
|
|
8
|
-
import type {
|
|
9
|
-
|
|
8
|
+
import type {
|
|
9
|
+
HmrAcceptMessage,
|
|
10
|
+
HmrUpdateMessage,
|
|
11
|
+
ReadyMessage,
|
|
12
|
+
} from "../types.js";
|
|
13
|
+
import { toError } from "../../error/toError.js";
|
|
10
14
|
// Initialize worker
|
|
11
15
|
if (!parentPort) {
|
|
12
16
|
throw new Error("This module must be run as a worker");
|
|
13
17
|
}
|
|
14
18
|
|
|
15
|
-
//
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
// In test mode, we want errors to propagate up immediately
|
|
20
|
+
const isTestEnv = process.env["VITEST"] || process.env["NODE_ENV"] === "test";
|
|
21
|
+
const isDevEnv = process.env["NODE_ENV"] !== "production";
|
|
22
|
+
const verbose = workerData.verbose;
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
reactLoaderChannel.port2.on("message", messageHandler);
|
|
28
|
-
cssLoaderChannel.port2.on("message", messageHandler);
|
|
29
|
-
envLoaderChannel.port2.on("message", messageHandler);
|
|
30
|
-
|
|
31
|
-
const loaderPath = "file://" + join(pluginRoot, "loader/react-loader.js");
|
|
32
|
-
const cssLoaderPath =
|
|
33
|
-
"file://" + join(pluginRoot, "loader/css-loader.development.js");
|
|
34
|
-
const envLoaderPath =
|
|
35
|
-
"file://" + join(pluginRoot, "loader/env-loader.development.js");
|
|
36
|
-
|
|
37
|
-
register(loaderPath, {
|
|
38
|
-
parentURL: pluginRoot,
|
|
39
|
-
data: { port: reactLoaderChannel.port1},
|
|
40
|
-
transferList: [reactLoaderChannel.port1],
|
|
41
|
-
});
|
|
42
|
-
register(cssLoaderPath, {
|
|
43
|
-
parentURL: pluginRoot,
|
|
44
|
-
data: { port: cssLoaderChannel.port1, resolvedConfig: workerData.resolvedConfig },
|
|
45
|
-
transferList: [cssLoaderChannel.port1],
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
// Register loaders
|
|
49
|
-
registerTsx();
|
|
50
|
-
|
|
51
|
-
// Register env-loader (ensure this the last)
|
|
52
|
-
register(envLoaderPath, {
|
|
53
|
-
parentURL: pluginRoot,
|
|
54
|
-
data: { port: envLoaderChannel.port1, resolvedConfig: workerData.resolvedConfig },
|
|
55
|
-
transferList: [envLoaderChannel.port1],
|
|
56
|
-
});
|
|
57
|
-
// Set up message handling
|
|
58
|
-
parentPort!.on("message", messageHandler);
|
|
59
|
-
|
|
60
|
-
const { hmrPort } = workerData;
|
|
61
|
-
if (hmrPort) {
|
|
62
|
-
// Start the message port
|
|
63
|
-
hmrPort.start();
|
|
64
|
-
|
|
65
|
-
// Listen for file changes
|
|
66
|
-
hmrPort.on("message", (message: any) => {
|
|
67
|
-
if (message.type === "HMR_UPDATE") {
|
|
68
|
-
// Invalidate the module in the worker
|
|
69
|
-
parentPort!.postMessage({
|
|
70
|
-
type: "HMR_UPDATE",
|
|
71
|
-
id: message.id,
|
|
72
|
-
routes: message.routes,
|
|
73
|
-
} satisfies HmrUpdateMessage);
|
|
24
|
+
const developmentMessageHandler = (msg: any) => {
|
|
25
|
+
if (verbose) {
|
|
26
|
+
if ("chunk" in msg) {
|
|
27
|
+
let preview = Buffer.from(msg.chunk).toString("utf-8");
|
|
28
|
+
console.log(`[rsc-worker:${msg.type}] ${preview}`);
|
|
29
|
+
} else {
|
|
30
|
+
console.log(`[rsc-worker:${msg.type}] ${JSON.stringify(msg)}`);
|
|
74
31
|
}
|
|
32
|
+
}
|
|
33
|
+
messageHandler(msg);
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const developmentCssLoaderMessageHandler = (msg: any) => {
|
|
37
|
+
if (verbose) {
|
|
38
|
+
console.log(`[css-loader:${msg.type}] ${JSON.stringify(msg)}`);
|
|
39
|
+
}
|
|
40
|
+
messageHandler(msg);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const developmentEnvLoaderMessageHandler = (msg: any) => {
|
|
44
|
+
if (verbose) {
|
|
45
|
+
console.log(`[env-loader:${msg.type}] ${JSON.stringify(msg)}`);
|
|
46
|
+
}
|
|
47
|
+
messageHandler(msg);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const developmentReactLoaderMessageHandler = (msg: any) => {
|
|
51
|
+
if (verbose) {
|
|
52
|
+
console.log(`[react-loader:${msg.type}] ${JSON.stringify(msg)}`);
|
|
53
|
+
}
|
|
54
|
+
messageHandler(msg);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
// Deserialize workerData to restore RegExp objects
|
|
59
|
+
if (workerData) {
|
|
60
|
+
workerData.userOptions = deserializeRegExp(workerData.userOptions);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Create channels for each loader
|
|
64
|
+
const reactLoaderChannel = new MessageChannel();
|
|
65
|
+
const cssLoaderChannel = new MessageChannel();
|
|
66
|
+
const envLoaderChannel = new MessageChannel();
|
|
67
|
+
|
|
68
|
+
// Set up message handlers before transferring ports
|
|
69
|
+
reactLoaderChannel.port1.on("message", developmentReactLoaderMessageHandler);
|
|
70
|
+
cssLoaderChannel.port1.on("message", developmentCssLoaderMessageHandler);
|
|
71
|
+
envLoaderChannel.port1.on("message", developmentEnvLoaderMessageHandler);
|
|
72
|
+
|
|
73
|
+
const reactLoaderPath =
|
|
74
|
+
"file://" + join(pluginRoot, "loader/react-loader.server.js");
|
|
75
|
+
const cssLoaderPath =
|
|
76
|
+
"file://" + join(pluginRoot, "loader/css-loader.development.js");
|
|
77
|
+
const envLoaderPath =
|
|
78
|
+
"file://" + join(pluginRoot, "loader/env-loader.development.js");
|
|
79
|
+
|
|
80
|
+
// Register loaders with their ports
|
|
81
|
+
register(reactLoaderPath, {
|
|
82
|
+
parentURL: pluginRoot,
|
|
83
|
+
data: {
|
|
84
|
+
id: "react-loader",
|
|
85
|
+
port: reactLoaderChannel.port1,
|
|
86
|
+
userOptions: workerData.userOptions,
|
|
87
|
+
},
|
|
88
|
+
transferList: [reactLoaderChannel.port1],
|
|
75
89
|
});
|
|
90
|
+
register(cssLoaderPath, {
|
|
91
|
+
parentURL: pluginRoot,
|
|
92
|
+
data: {
|
|
93
|
+
id: "css-loader",
|
|
94
|
+
port: cssLoaderChannel.port1,
|
|
95
|
+
resolvedConfig: workerData.resolvedConfig,
|
|
96
|
+
},
|
|
97
|
+
transferList: [cssLoaderChannel.port1],
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
// Register loaders
|
|
101
|
+
registerTsx();
|
|
76
102
|
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
// Register env-loader (ensure this the last)
|
|
104
|
+
register(envLoaderPath, {
|
|
105
|
+
parentURL: pluginRoot,
|
|
106
|
+
data: {
|
|
107
|
+
port: envLoaderChannel.port1,
|
|
108
|
+
resolvedConfig: workerData.resolvedConfig,
|
|
109
|
+
},
|
|
110
|
+
transferList: [envLoaderChannel.port1],
|
|
85
111
|
});
|
|
86
|
-
}
|
|
87
112
|
|
|
88
|
-
//
|
|
89
|
-
parentPort!.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
113
|
+
// Set up message handling
|
|
114
|
+
parentPort!.on("message", developmentMessageHandler);
|
|
115
|
+
|
|
116
|
+
const { hmrPort } = workerData;
|
|
117
|
+
if (hmrPort) {
|
|
118
|
+
// Start the message port
|
|
119
|
+
hmrPort.start();
|
|
120
|
+
|
|
121
|
+
// Listen for HMR messages
|
|
122
|
+
hmrPort.on("message", (message: any) => {
|
|
123
|
+
if (message.type === "HMR_UPDATE") {
|
|
124
|
+
// Invalidate the module in the worker
|
|
125
|
+
parentPort!.postMessage({
|
|
126
|
+
type: "HMR_UPDATE",
|
|
127
|
+
id: message.id,
|
|
128
|
+
routes: message.routes,
|
|
129
|
+
} satisfies HmrUpdateMessage);
|
|
130
|
+
} else if (message.type === "HMR_ACCEPT") {
|
|
131
|
+
// Handle the update
|
|
132
|
+
parentPort!.postMessage({
|
|
133
|
+
type: "HMR_ACCEPT",
|
|
134
|
+
id: message.id,
|
|
135
|
+
routes: message.routes,
|
|
136
|
+
} satisfies HmrAcceptMessage);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Notify parent that we're ready
|
|
142
|
+
parentPort!.postMessage({
|
|
143
|
+
type: "READY",
|
|
144
|
+
env: process.env["NODE_ENV"],
|
|
145
|
+
pid: process.pid,
|
|
146
|
+
id: "rsc-worker",
|
|
147
|
+
} satisfies ReadyMessage);
|
|
94
148
|
|
|
95
|
-
if (process.env["NODE_ENV"] === "production") {
|
|
96
|
-
|
|
149
|
+
if (process.env["NODE_ENV"] === "production") {
|
|
150
|
+
throw new Error("This module should not run in production mode.");
|
|
151
|
+
}
|
|
152
|
+
} catch (error) {
|
|
153
|
+
if (isDevEnv) {
|
|
154
|
+
console.error(error);
|
|
155
|
+
}
|
|
156
|
+
// In dev mode, try to send error message before exiting
|
|
157
|
+
if (parentPort) {
|
|
158
|
+
parentPort?.postMessage({
|
|
159
|
+
type: "ERROR",
|
|
160
|
+
id: "rsc-worker",
|
|
161
|
+
error: toError(error),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (!isDevEnv || isTestEnv) {
|
|
165
|
+
// In test mode or production mode, just throw the error to fail fast
|
|
166
|
+
throw error;
|
|
167
|
+
}
|
|
97
168
|
}
|
|
@@ -30,4 +30,4 @@ envLoaderChannel.port2.on("message", messageHandler);
|
|
|
30
30
|
parentPort.on("message", messageHandler);
|
|
31
31
|
|
|
32
32
|
// Signal ready
|
|
33
|
-
parentPort.postMessage({ type: "READY", env: process.env["NODE_ENV"], pid: process.pid } satisfies ReadyMessage);
|
|
33
|
+
parentPort.postMessage({ type: "READY", id: "rsc-worker", env: process.env["NODE_ENV"], pid: process.pid } satisfies ReadyMessage);
|
|
@@ -11,6 +11,8 @@ export const activeStreams = new Map<string, PassThrough>();
|
|
|
11
11
|
// Track CSS files
|
|
12
12
|
export const cssFiles = new Map<string, CssContent>();
|
|
13
13
|
|
|
14
|
+
// Track module IDs
|
|
15
|
+
export const moduleIds = new Map<string, string>();
|
|
14
16
|
|
|
15
17
|
export const hmrState = new Map<string, HmrState>();
|
|
16
18
|
|
|
@@ -104,4 +106,12 @@ export function getInvalidatedModules(): string[] {
|
|
|
104
106
|
return Array.from(hmrState.entries())
|
|
105
107
|
.filter(([_, state]) => state.invalidated)
|
|
106
108
|
.map(([path]) => path);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export function addModuleId(id: string, url: string) {
|
|
112
|
+
moduleIds.set(id, url);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function getModuleId(id: string): string | undefined {
|
|
116
|
+
return moduleIds.get(id);
|
|
107
117
|
}
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { cleanObject } from "../helpers/cleanObject.js";
|
|
2
|
-
import type {
|
|
2
|
+
import type {
|
|
3
|
+
HtmlWorkerOutputMessage,
|
|
4
|
+
RscWorkerOutputMessage,
|
|
5
|
+
} from "./types.js";
|
|
3
6
|
import { parentPort } from "node:worker_threads";
|
|
4
7
|
|
|
5
|
-
export function sendMessage(
|
|
8
|
+
export function sendMessage(
|
|
9
|
+
msg: HtmlWorkerOutputMessage | RscWorkerOutputMessage,
|
|
10
|
+
port = parentPort
|
|
11
|
+
) {
|
|
6
12
|
if (!port) {
|
|
7
13
|
console.error("[Worker] No port available to send message");
|
|
8
14
|
return;
|
|
@@ -10,17 +16,20 @@ export function sendMessage(msg: HtmlWorkerOutputMessage | RscWorkerOutputMessag
|
|
|
10
16
|
|
|
11
17
|
try {
|
|
12
18
|
// Handle error messages
|
|
13
|
-
if (
|
|
19
|
+
if ("error" in msg) {
|
|
14
20
|
const error = msg.error;
|
|
15
|
-
const serializedError =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const serializedError =
|
|
22
|
+
error instanceof Error
|
|
23
|
+
? {
|
|
24
|
+
message: error.message,
|
|
25
|
+
stack: error.stack,
|
|
26
|
+
name: error.name,
|
|
27
|
+
cause: error.cause,
|
|
28
|
+
}
|
|
29
|
+
: {
|
|
30
|
+
message: String(error),
|
|
31
|
+
name: "Error",
|
|
32
|
+
};
|
|
24
33
|
|
|
25
34
|
port.postMessage({
|
|
26
35
|
...cleanObject(msg),
|
|
@@ -38,7 +47,7 @@ export function sendMessage(msg: HtmlWorkerOutputMessage | RscWorkerOutputMessag
|
|
|
38
47
|
type: "ERROR",
|
|
39
48
|
error: {
|
|
40
49
|
message: err instanceof Error ? err.message : String(err),
|
|
41
|
-
name: err instanceof Error ? err.name :
|
|
50
|
+
name: err instanceof Error ? err.name : "Error",
|
|
42
51
|
},
|
|
43
52
|
});
|
|
44
53
|
} catch {
|
|
@@ -46,4 +55,13 @@ export function sendMessage(msg: HtmlWorkerOutputMessage | RscWorkerOutputMessag
|
|
|
46
55
|
console.error("[Worker] Critical error - could not send error message");
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
|
-
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export const sendRscWorkerMessage = sendMessage as (
|
|
61
|
+
msg: RscWorkerOutputMessage,
|
|
62
|
+
port?: MessagePort
|
|
63
|
+
) => void;
|
|
64
|
+
export const sendHtmlWorkerMessage = sendMessage as (
|
|
65
|
+
msg: HtmlWorkerOutputMessage,
|
|
66
|
+
port?: MessagePort
|
|
67
|
+
) => void;
|
package/plugin/worker/types.ts
CHANGED
|
@@ -2,8 +2,11 @@ import type { RenderToPipeableStreamOptions } from "react-dom/server";
|
|
|
2
2
|
import type {
|
|
3
3
|
CreateHandlerOptions,
|
|
4
4
|
CssContent,
|
|
5
|
+
InlineCssOpt,
|
|
6
|
+
PagePropOpt,
|
|
5
7
|
StreamMetrics,
|
|
6
8
|
} from "../types.js";
|
|
9
|
+
import type { MessagePort } from "node:worker_threads";
|
|
7
10
|
|
|
8
11
|
// Base message types
|
|
9
12
|
export interface WorkerMessage {
|
|
@@ -73,16 +76,20 @@ export interface ChunkErrorMessage extends WorkerMessage {
|
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
export type StreamHandlers = {
|
|
76
|
-
onError: (error: any, errorInfo?: any) => void;
|
|
77
|
-
onData: (data: any) => void;
|
|
78
|
-
onEnd: () => void;
|
|
79
|
-
onMetrics: (metrics: any) => void;
|
|
80
|
-
onHmrAccept: (
|
|
81
|
-
onHmrUpdate: (
|
|
82
|
-
|
|
79
|
+
onError: (id: string, error: any, errorInfo?: any) => void;
|
|
80
|
+
onData: (id: string, data: any) => void;
|
|
81
|
+
onEnd: (id: string) => void;
|
|
82
|
+
onMetrics: (id: string, metrics: any) => void;
|
|
83
|
+
onHmrAccept: (id: string, routes?: string[]) => void;
|
|
84
|
+
onHmrUpdate: (id: string, routes?: string[]) => void;
|
|
85
|
+
onServerAction?: (id: string, args: unknown[]) => void;
|
|
86
|
+
onServerActionResponse?: (id: string, result?: unknown, error?: string) => void;
|
|
87
|
+
onServerModule?: (id: string, url: string, source: string) => void;
|
|
88
|
+
onShutdown?: (id: string) => void;
|
|
89
|
+
};
|
|
83
90
|
|
|
84
91
|
// RSC Messages
|
|
85
|
-
export type RscRenderMessage = WorkerMessage & {
|
|
92
|
+
export type RscRenderMessage<T extends PagePropOpt = PagePropOpt> = WorkerMessage & {
|
|
86
93
|
type: "RSC_RENDER";
|
|
87
94
|
} & Omit<
|
|
88
95
|
CreateHandlerOptions,
|
|
@@ -96,7 +103,7 @@ export type RscRenderMessage = WorkerMessage & {
|
|
|
96
103
|
| "autoDiscover"
|
|
97
104
|
> & {
|
|
98
105
|
build: Omit<
|
|
99
|
-
CreateHandlerOptions
|
|
106
|
+
CreateHandlerOptions<T>,
|
|
100
107
|
"entryFileNames" | "chunkFileNames" | "assetFileNames" | "pages"
|
|
101
108
|
> & {pages: string[]};
|
|
102
109
|
};
|
|
@@ -158,79 +165,77 @@ export type ExtendedCssContent = CssContent & {
|
|
|
158
165
|
usedClasses?: string[];
|
|
159
166
|
};
|
|
160
167
|
|
|
168
|
+
export type CleanupMessage = {
|
|
169
|
+
type: "CLEANUP";
|
|
170
|
+
id: string;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export type CleanupCompleteMessage = {
|
|
174
|
+
type: "CLEANUP_COMPLETE";
|
|
175
|
+
id: string;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export type RouteReadyMessage<InlineCss extends InlineCssOpt = InlineCssOpt> = {
|
|
179
|
+
type: "ROUTE_READY";
|
|
180
|
+
id: string;
|
|
181
|
+
moduleRootPath: string;
|
|
182
|
+
moduleBaseURL: string;
|
|
183
|
+
projectRoot: string;
|
|
184
|
+
cssFiles: Map<string, CssContent<InlineCss>>;
|
|
185
|
+
pipeableStreamOptions: Omit<ReactServerDomEsmOptions, "onError" | "onPostpone">;
|
|
186
|
+
}
|
|
187
|
+
|
|
161
188
|
// HTML Worker Messages
|
|
162
189
|
export type HtmlWorkerInputMessage =
|
|
163
190
|
| RscChunkInputMessage
|
|
164
191
|
| RscEndMessage
|
|
165
192
|
| ShutdownMessage
|
|
166
|
-
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
| {
|
|
188
|
-
type: "HTML_COMPLETE";
|
|
189
|
-
id: string;
|
|
190
|
-
success: boolean;
|
|
191
|
-
html?: string;
|
|
192
|
-
metrics?: StreamMetrics;
|
|
193
|
-
}
|
|
194
|
-
| {
|
|
195
|
-
type: "ROUTE_READY";
|
|
196
|
-
id: string;
|
|
197
|
-
moduleRootPath: string;
|
|
198
|
-
moduleBaseURL: string;
|
|
199
|
-
projectRoot: string;
|
|
200
|
-
cssFiles: Map<string, CssContent>;
|
|
201
|
-
pipeableStreamOptions: Omit<ReactServerDomEsmOptions, "onError" | "onPostpone">;
|
|
202
|
-
}
|
|
193
|
+
| CleanupMessage
|
|
194
|
+
| CleanupCompleteMessage
|
|
195
|
+
| InitializedReactLoaderMessage
|
|
196
|
+
| InitializedCssLoaderMessage
|
|
197
|
+
| RouteReadyMessage
|
|
198
|
+
|
|
199
|
+
export type HtmlChunkMessage = {
|
|
200
|
+
type: "HTML_CHUNK";
|
|
201
|
+
id: string;
|
|
202
|
+
chunk: string;
|
|
203
|
+
encoding: string;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export type HtmlCompleteMessage = {
|
|
207
|
+
type: "HTML_COMPLETE";
|
|
208
|
+
id: string;
|
|
209
|
+
success: boolean;
|
|
210
|
+
html?: string;
|
|
211
|
+
chunks?: string[];
|
|
212
|
+
metrics?: StreamMetrics;
|
|
213
|
+
}
|
|
203
214
|
|
|
204
215
|
export type HtmlWorkerOutputMessage =
|
|
205
|
-
|
|
|
206
|
-
type: "HTML_COMPLETE";
|
|
207
|
-
id: string;
|
|
208
|
-
success: boolean;
|
|
209
|
-
html?: string;
|
|
210
|
-
chunks?: string[];
|
|
211
|
-
metrics?: StreamMetrics;
|
|
212
|
-
}
|
|
216
|
+
| HtmlCompleteMessage
|
|
213
217
|
| ErrorMessage
|
|
214
218
|
| ShellReadyMessage
|
|
215
219
|
| ChunkProcessedMessage
|
|
216
220
|
| ChunkErrorMessage
|
|
217
221
|
| AllReadyMessage
|
|
218
222
|
| ShellErrorMessage
|
|
219
|
-
|
|
|
220
|
-
|
|
|
221
|
-
| { type: "SHUTDOWN_COMPLETE"; id: string }
|
|
223
|
+
| HtmlChunkMessage
|
|
224
|
+
| ShutdownCompleteMessage
|
|
222
225
|
| HmrAcceptMessage
|
|
223
|
-
| ReadyMessage
|
|
226
|
+
| ReadyMessage
|
|
227
|
+
| ServerActionMessage
|
|
228
|
+
| ServerActionResponseMessage
|
|
229
|
+
| ErrorMessage
|
|
230
|
+
| CleanupCompleteMessage
|
|
224
231
|
|
|
225
232
|
export type InitializedReactLoaderMessage = {
|
|
226
233
|
type: "INITIALIZED_REACT_LOADER";
|
|
227
234
|
id: string;
|
|
228
|
-
port: MessagePort;
|
|
229
235
|
}
|
|
230
236
|
export type InitializedCssLoaderMessage = {
|
|
231
237
|
type: "INITIALIZED_CSS_LOADER";
|
|
232
238
|
id: string;
|
|
233
|
-
port: MessagePort;
|
|
234
239
|
}
|
|
235
240
|
|
|
236
241
|
export type InitializedRscWorkerLoaderMessage = {
|
|
@@ -280,7 +285,10 @@ export type RscWorkerInputMessage =
|
|
|
280
285
|
| InitializedEnvLoaderMessage
|
|
281
286
|
| HmrUpdateMessage
|
|
282
287
|
| HmrAcceptMessage
|
|
283
|
-
|
|
|
288
|
+
| HmrCleanupMessage
|
|
289
|
+
| CleanupCompleteMessage
|
|
290
|
+
| ServerActionMessage
|
|
291
|
+
| ServerModuleMessage;
|
|
284
292
|
|
|
285
293
|
export interface CssFileRequestMessage extends WorkerMessage {
|
|
286
294
|
type: "CSS_FILE_REQUEST";
|
|
@@ -313,8 +321,26 @@ export interface CssProcessedMessage extends WorkerMessage {
|
|
|
313
321
|
|
|
314
322
|
export type ReadyMessage = {
|
|
315
323
|
type: "READY";
|
|
316
|
-
|
|
317
|
-
|
|
324
|
+
id: string;
|
|
325
|
+
env?: string;
|
|
326
|
+
pid?: number;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
export type ShutdownCompleteMessage = {
|
|
330
|
+
type: "SHUTDOWN_COMPLETE";
|
|
331
|
+
id: string;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export interface ServerActionMessage extends WorkerMessage {
|
|
335
|
+
type: "SERVER_ACTION";
|
|
336
|
+
args: unknown[];
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
export interface ServerActionResponseMessage extends WorkerMessage {
|
|
340
|
+
type: "SERVER_ACTION_RESPONSE";
|
|
341
|
+
id: string;
|
|
342
|
+
result?: unknown;
|
|
343
|
+
error?: string;
|
|
318
344
|
}
|
|
319
345
|
|
|
320
346
|
export type RscWorkerOutputMessage =
|
|
@@ -333,7 +359,10 @@ export type RscWorkerOutputMessage =
|
|
|
333
359
|
| HmrAcceptMessage
|
|
334
360
|
| HmrUpdateMessage
|
|
335
361
|
| ReadyMessage
|
|
336
|
-
|
|
|
362
|
+
| ServerActionMessage
|
|
363
|
+
| ServerActionResponseMessage
|
|
364
|
+
| ShutdownCompleteMessage
|
|
365
|
+
| ServerModuleMessage;
|
|
337
366
|
|
|
338
367
|
export interface ClientReferenceMessage extends WorkerMessage {
|
|
339
368
|
type: "CLIENT_REFERENCE";
|
|
@@ -400,3 +429,9 @@ export type LoaderMessage = {
|
|
|
400
429
|
port?: MessagePort;
|
|
401
430
|
importMap?: string;
|
|
402
431
|
};
|
|
432
|
+
|
|
433
|
+
export interface ServerModuleMessage extends WorkerMessage {
|
|
434
|
+
type: "SERVER_MODULE";
|
|
435
|
+
url: string;
|
|
436
|
+
source: string;
|
|
437
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EAEb,mBAAmB,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAe,MAAM,qBAAqB,CAAC;AAWlE;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,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;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC9C,iBAgLA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../../plugin/react-client/server.ts"],"sourcesContent":["import type { ViteDevServer } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\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 { ReadableStream } from \"node:stream/web\";\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 server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n hmrChannel,\n onMetrics,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions;\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 if (handlerOptions.verbose) logger.info(`Received request: ${req.url}`);\n\n const info = requestInfo(req, handlerOptions, \"\");\n if (!info.isRscRequest) return next();\n if (handlerOptions.verbose)\n logger.info(`Request info: ${JSON.stringify(info)}`);\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 serializedUserOptions = serializedOptions(\n handlerOptions,\n autoDiscoveredFiles\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 // 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: userOnMetrics,\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":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { Manifest, ViteDevServer } from "vite";
|
|
2
|
-
import type { AutoDiscoveredFiles, ResolvedUserOptions } from "../types.js";
|
|
3
|
-
export declare function configureReactServer({ server, autoDiscoveredFiles, userOptions: _userOptions, serverManifest, }: {
|
|
4
|
-
server: ViteDevServer;
|
|
5
|
-
autoDiscoveredFiles: AutoDiscoveredFiles;
|
|
6
|
-
userOptions: ResolvedUserOptions;
|
|
7
|
-
serverManifest: Manifest;
|
|
8
|
-
}): Promise<void>;
|
|
9
|
-
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAU5E,wBAAsB,oBAAoB,CAAC,EACzC,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;IACjC,cAAc,EAAE,QAAQ,CAAC;CAC1B,iBAoIA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sources":["../../../plugin/react-server/server.ts"],"sourcesContent":["import type { Manifest, ViteDevServer } from \"vite\";\nimport type { ServerResponse } from \"http\";\nimport type { AutoDiscoveredFiles, ResolvedUserOptions } 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 { toError } from \"../error/toError.js\";\n\nexport async function configureReactServer({\n server,\n autoDiscoveredFiles,\n userOptions: _userOptions,\n serverManifest,\n}: {\n server: ViteDevServer;\n autoDiscoveredFiles: AutoDiscoveredFiles;\n userOptions: ResolvedUserOptions;\n serverManifest: Manifest;\n}) {\n const activeStreams = new Set<ServerResponse>();\n const {\n Html: _UserHtmlComponent,\n onEvent,\n // remove these\n moduleBaseURL: _moduleBaseURL,\n projectRoot: _projectRoot,\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = Object.assign({}, handlerUserOptions, {\n moduleBaseURL: server.config.base,\n projectRoot: server.config.root,\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, \"\");\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 = await 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 server.config.logger.error(toError(error).message);\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":";;;;;;;;;;;;;;AAYA,eAAsB,oBAAqB,CAAA;AAAA,EACzC,MAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAa,EAAA,YAAA;AAAA,EACb;AACF,CAKG,EAAA;AACD,EAAM,MAAA,aAAA,uBAAoB,GAAoB,EAAA;AAC9C,EAAM,MAAA;AAAA,IACJ,IAAM,EAAA,kBAAA;AAAA,IACN,OAAA;AAAA;AAAA,IAEA,aAAe,EAAA,cAAA;AAAA,IACf,WAAa,EAAA,YAAA;AAAA,IACb,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,WAAA,EAAa,OAAO,MAAO,CAAA;AAAA,GAC5B,CAAA;AAGD,EAAA,MAAA,CAAO,EAAG,CAAA,EAAA,CAAG,SAAW,EAAA,CAAC,IAAS,KAAA;AAChC,IAAA,MAAA,CAAO,OAAO,MAAO,CAAA,IAAA;AAAA,MACnB,sEAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,KAAA,MAAW,OAAO,aAAe,EAAA;AAC/B,MAAA,GAAA,CAAI,UAAU,GAAK,EAAA;AAAA,QACjB,cAAgB,EAAA,iCAAA;AAAA,QAChB,aAAe,EAAA;AAAA,OAChB,CAAA;AACD,MAAI,GAAA,CAAA,GAAA;AAAA,QACF,CAAA,0FAAA;AAAA,OACF;AAAA;AAEF,IAAA,aAAA,CAAc,KAAM,EAAA;AAAA,GACrB,CAAA;AAED,EAAA,MAAA,CAAO,WAAY,CAAA,GAAA,CAAI,OAAO,GAAA,EAAK,KAAK,IAAS,KAAA;AAC/C,IAAI,IAAA,CAAC,IAAI,GAAK,EAAA;AACZ,MAAA,OAAO,IAAK,EAAA;AAAA;AAEd,IAAA,MAAM,IAAO,GAAA,WAAA,CAAY,GAAK,EAAA,cAAA,EAAgB,EAAE,CAAA;AAChD,IAAA,IAAI,CAAC,IAAA,CAAK,YAAc,EAAA,OAAO,IAAK,EAAA;AACpC,IAAI,IAAA;AACF,MAAA,MAAM,aAAa,MAAM,aAAA;AAAA,QACvB,IAAK,CAAA,KAAA;AAAA,QACL,mBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAI,IAAA,UAAA,CAAW,SAAS,OAAS,EAAA;AAC/B,QAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,KAAM,CAAA,UAAA,CAAW,MAAM,OAAO,CAAA;AACnD,QAAA,OAAO,IAAK,EAAA;AAAA;AAEd,MAAA,MAAM,WAAW,UAAW,CAAA,IAAA;AAC5B,MAAA,MAAM,YAAY,UAAW,CAAA,KAAA;AAG7B,MAAM,MAAA,kBAAA,GAAqB,MAAM,mBAAoB,CAAA;AAAA,QACnD,QAAA;AAAA,QACA,SAAA;AAAA,QACA,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,QAAQ,MAAO,CAAA,aAAA;AAAA,QACf,cAAA,EAAgB,eAAe,cAAkB,IAAA,SAAA;AAAA,QACjD,eAAA,EAAiB,eAAe,eAAmB,IAAA;AAAA,OACpD,CAAA;AACD,MAAI,IAAA,kBAAA,CAAmB,SAAS,OAAS,EAAA;AACvC,QAAA,MAAM,kBAAmB,CAAA,KAAA;AAAA;AAE3B,MAAI,IAAA,kBAAA,CAAmB,SAAS,MAAQ,EAAA;AACtC,QAAA,OAAO,IAAK,EAAA;AAAA;AAGd,MAAM,MAAA,YAAA,GAAe,mBAAmB,OAAO,CAAA;AAC/C,MAAM,MAAA,cAAA,GAAiB,MAAM,yBAA0B,CAAA;AAAA,QACrD,aAAa,MAAO,CAAA,WAAA;AAAA;AAAA,QACpB,SAAW,EAAA,QAAA;AAAA,QACX,cAAgB,EAAA;AAAA,UACd,QAAA;AAAA,UACA,QAAQ,MAAO,CAAA,aAAA;AAAA;AAAA,UAEf,GAAG;AAAA;AACL,OACD,CAAA;AACD,MAAI,IAAA,cAAA,CAAe,SAAS,MAAQ,EAAA;AAClC,QAAA,OAAO,IAAK,EAAA;AAAA;AAEd,MAAI,IAAA,cAAA,CAAe,SAAS,OAAS,EAAA;AACnC,QAAA,MAAM,cAAe,CAAA,KAAA;AAAA;AAEvB,MAAM,MAAA,EAAE,aAAe,EAAA,SAAA,EAAc,GAAA,kBAAA;AAErC,MAAM,MAAA,SAAA,GAAY,MAAM,aAAc,CAAA;AAAA,QACpC,GAAG,cAAA;AAAA,QACH,aAAA;AAAA,QACA,SAAA;AAAA,QACA,MAAA,EAAQ,OAAO,MAAO,CAAA,MAAA;AAAA,QACtB,QAAQ,MAAO,CAAA,aAAA;AAAA,QACf,MAAMA,cAAM,CAAA,QAAA;AAAA,QACZ,OAAS,EAAA,YAAA;AAAA,QACT,QAAU,EAAA,cAAA;AAAA,QACV,MAAA;AAAA,QACA,OAAO,IAAK,CAAA,KAAA;AAAA,QACZ,QAAA;AAAA,QACA,SAAA;AAAA,QACA,QAAU,EAAA,cAAA,CAAe,QAAY,oBAAA,IAAI,GAAI,EAAA;AAAA,QAC7C,SAAA,sBAAe,GAAI;AAAA,OACpB,CAAA;AACD,MAAI,IAAA,SAAA,CAAU,SAAS,SAAW,EAAA;AAEhC,QAAI,GAAA,CAAA,SAAA,CAAU,gBAAgB,iCAAiC,CAAA;AAC/D,QAAU,SAAA,CAAA,MAAA,CAAQ,KAAK,GAAG,CAAA;AAAA;AAE5B,MAAA,aAAA,CAAc,IAAI,GAAG,CAAA;AACrB,MAAI,GAAA,CAAA,EAAA,CAAG,SAAS,MAAM;AACpB,QAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AAAA,OACzB,CAAA;AAAA,aACM,KAAO,EAAA;AACd,MAAA,MAAA,CAAO,OAAO,MAAO,CAAA,KAAA,CAAM,OAAQ,CAAA,KAAK,EAAE,OAAO,CAAA;AACjD,MAAA,GAAA,CAAI,GAAI,EAAA;AAAA;AACV,GACD,CAAA;AAED,EAAO,MAAA,CAAA,UAAA,EAAY,IAAK,CAAA,WAAA,EAAa,MAAM;AACzC,IAAM,MAAA,OAAA,GAAU,MAAO,CAAA,UAAA,EAAY,OAAQ,EAAA;AAC3C,IAAI,IAAA,OAAA,IAAW,OAAO,OAAA,KAAY,QAAU,EAAA;AAC1C,MAAA,MAAM,OAAO,OAAQ,CAAA,IAAA;AACrB,MAAA,MAAM,IAAO,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,IAAQ,IAAA,WAAA;AAC1C,MAAA,MAAM,QAAW,GAAA,MAAA,CAAO,MAAO,CAAA,MAAA,CAAO,QAAQ,OAAU,GAAA,MAAA;AACxD,MAAA,cAAA,CAAe,eAAe,CAAG,EAAA,QAAQ,CAAM,GAAA,EAAA,IAAI,IAAI,IAAI,CAAA,CAAA;AAC3D,MAAA,IAAI,cAAe,CAAA,YAAA,KAAiB,OAAQ,CAAA,GAAA,CAAI,kBAAoB,EAAA;AAClE,QAAQ,OAAA,CAAA,GAAA,CAAI,qBAAqB,cAAe,CAAA,YAAA;AAAA;AAClD;AACF,GACD,CAAA;AACH;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.client.js","sources":["../../../plugin/transformer/plugin.client.ts"],"sourcesContent":["import { resolveOptions } from \"../config/resolveOptions.js\";\nimport type { ResolvedUserOptions, StreamPluginOptions } from \"../types.js\";\nimport { type Manifest, type Plugin } from \"vite\";\nimport { transformModuleIfNeeded } from \"../loader/react-loader.js\";\nimport { join } from \"node:path\";\nimport { tryManifest } from \"../helpers/tryManifest.js\";\n\n/**\n * Plugin for transforming server actions for the client build.\n *\n * Core responsibilities:\n * 1. Transforms \"use server\" directives\n * 2. Transforms server actions for the client build\n * 3. Uses react-loader's transformModuleIfNeeded to create a server action reference\n *\n * When a component is marked with \"use server\", it:\n * - Gets transformed into a server action\n * - Maintains module ID for RSC boundaries\n * - Preserves class/function behavior\n *\n * @example\n * ```ts\n * export default defineConfig({\n * plugins: [\n * viteReactClientTransformPlugin({\n * projectRoot: process.cwd(),\n * })\n * ]\n * });\n * ```\n */\nlet isBuild = true;\n\nexport function reactTransformPlugin(options: StreamPluginOptions): Plugin {\n let userOptions: ResolvedUserOptions;\n const resolvedOptionsResult = resolveOptions(options);\n if (resolvedOptionsResult.type === \"error\") throw resolvedOptionsResult.error;\n userOptions = resolvedOptionsResult.userOptions;\n let staticManifest: Manifest;\n\n return {\n name: \"vite:react-server-action-transform\",\n enforce: \"pre\",\n async config(_, configEnv) {\n isBuild = configEnv.command !== \"serve\";\n if (!configEnv.isSsrBuild) {\n staticManifest = {};\n } else {\n const staticManifestResult = await tryManifest({\n root: userOptions.projectRoot,\n ssrManifest: false,\n outDir: join(userOptions.build.outDir, userOptions.build.static),\n });\n if (staticManifestResult.type === \"error\") {\n staticManifest = {};\n } else {\n staticManifest = staticManifestResult.manifest;\n }\n }\n },\n async transform(code, id, options) {\n const ssr = options?.ssr;\n const isServer = code.match('\"use server\"') !== null;\n const isClient = code.match('\"use client\"') !== null;\n if (!ssr) return null;\n if (!isServer && !isClient) return null;\n if (isServer && isClient) {\n throw new Error(\n \"Server and client components cannot be used in the same file\"\n );\n }\n if (isClient) {\n return null;\n }\n const [key, value] = userOptions.normalizer(id);\n if (isServer && isBuild) {\n id = key + \".js\";\n }\n const finalID = userOptions.moduleID(value);\n const transformed = await transformModuleIfNeeded(code, finalID, null);\n if (!transformed) return null;\n return {\n code: transformed,\n id: finalID,\n map: null,\n };\n },\n renderChunk(code, chunk, _options) {\n // Only process client components\n if (!chunk.fileName.includes(\".client\")) return null;\n\n // Get the original file name without extension\n const originalName = chunk.fileName.replace(userOptions.autoDiscover.moduleExtension, \"\");\n\n // Find matching entry in static manifest\n const manifestEntry = Object.entries(staticManifest).find(([_, info]) =>\n info.file.startsWith(originalName)\n );\n\n if (manifestEntry) {\n // Use the static manifest's file name\n return {\n code,\n fileName: manifestEntry[1].file,\n };\n }\n\n return null;\n },\n };\n}\n"],"names":["options"],"mappings":"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"}
|