vite-plugin-react-server 1.1.13 → 1.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/package.json +3 -1
  2. package/dist/plugin/config/defaults.d.ts +2 -2
  3. package/dist/plugin/config/defaults.d.ts.map +1 -1
  4. package/dist/plugin/config/defaults.js +2 -2
  5. package/dist/plugin/config/defaults.js.map +1 -1
  6. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  7. package/dist/plugin/config/resolveOptions.js +101 -75
  8. package/dist/plugin/config/resolveOptions.js.map +1 -1
  9. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  10. package/dist/plugin/config/resolveUserConfig.js +27 -5
  11. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  12. package/dist/plugin/error/toError.d.ts.map +1 -1
  13. package/dist/plugin/error/toError.js +0 -1
  14. package/dist/plugin/error/toError.js.map +1 -1
  15. package/dist/plugin/helpers/collectManifestCss.d.ts +1 -2
  16. package/dist/plugin/helpers/collectManifestCss.d.ts.map +1 -1
  17. package/dist/plugin/helpers/collectManifestCss.js +3 -5
  18. package/dist/plugin/helpers/collectManifestCss.js.map +1 -1
  19. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +1 -1
  20. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
  21. package/dist/plugin/helpers/collectViteModuleGraphCss.js +6 -2
  22. package/dist/plugin/helpers/collectViteModuleGraphCss.js.map +1 -1
  23. package/dist/plugin/helpers/createCssProps.d.ts +1 -1
  24. package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
  25. package/dist/plugin/helpers/createCssProps.js +11 -32
  26. package/dist/plugin/helpers/createCssProps.js.map +1 -1
  27. package/dist/plugin/helpers/createRscStream.d.ts.map +1 -1
  28. package/dist/plugin/helpers/createRscStream.js +1 -0
  29. package/dist/plugin/helpers/createRscStream.js.map +1 -1
  30. package/dist/plugin/helpers/inputNormalizer.d.ts +1 -8
  31. package/dist/plugin/helpers/inputNormalizer.d.ts.map +1 -1
  32. package/dist/plugin/helpers/inputNormalizer.js +2 -5
  33. package/dist/plugin/helpers/inputNormalizer.js.map +1 -1
  34. package/dist/plugin/loader/createDefaultLoader.d.ts.map +1 -1
  35. package/dist/plugin/loader/createDefaultLoader.js +68 -4
  36. package/dist/plugin/loader/css-loader.development.d.ts +2 -15
  37. package/dist/plugin/loader/css-loader.development.d.ts.map +1 -1
  38. package/dist/plugin/loader/css-loader.development.js +16 -15
  39. package/dist/plugin/loader/css-loader.development.js.map +1 -1
  40. package/dist/plugin/loader/css-loader.production.d.ts +1 -1
  41. package/dist/plugin/loader/css-loader.production.d.ts.map +1 -1
  42. package/dist/plugin/loader/css-loader.production.js +1 -1
  43. package/dist/plugin/loader/css-loader.production.js.map +1 -1
  44. package/dist/plugin/loader/env-loader.development.d.ts +1 -0
  45. package/dist/plugin/loader/env-loader.development.d.ts.map +1 -1
  46. package/dist/plugin/loader/env-loader.development.js +17 -9
  47. package/dist/plugin/loader/handleExports.d.ts +1 -0
  48. package/dist/plugin/loader/handleExports.d.ts.map +1 -1
  49. package/dist/plugin/loader/handleExports.js +27 -8
  50. package/dist/plugin/loader/handleExports.js.map +1 -1
  51. package/dist/plugin/loader/react-loader.server.d.ts +2 -2
  52. package/dist/plugin/loader/react-loader.server.d.ts.map +1 -1
  53. package/dist/plugin/loader/react-loader.server.js +88 -26
  54. package/dist/plugin/loader/sourceMap.d.ts.map +1 -1
  55. package/dist/plugin/loader/sourceMap.js +1 -1
  56. package/dist/plugin/loader/transformModuleIfNeeded.d.ts.map +1 -1
  57. package/dist/plugin/loader/transformModuleIfNeeded.js +1 -1
  58. package/dist/plugin/loader/transformModuleIfNeeded.js.map +1 -1
  59. package/dist/plugin/loader/transformModuleWithPreservedFunctions.d.ts.map +1 -1
  60. package/dist/plugin/loader/transformModuleWithPreservedFunctions.js +86 -13
  61. package/dist/plugin/loader/transformModuleWithPreservedFunctions.js.map +1 -1
  62. package/dist/plugin/plugin.client.d.ts.map +1 -1
  63. package/dist/plugin/plugin.client.js +0 -1
  64. package/dist/plugin/plugin.client.js.map +1 -1
  65. package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts.map +1 -1
  66. package/dist/plugin/react-client/configureWorkerRequestHandler.js +81 -5
  67. package/dist/plugin/react-client/configureWorkerRequestHandler.js.map +1 -1
  68. package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -1
  69. package/dist/plugin/react-client/createMessageHandlers.js +3 -0
  70. package/dist/plugin/react-client/createMessageHandlers.js.map +1 -1
  71. package/dist/plugin/react-client/createWorkerStream.d.ts +2 -2
  72. package/dist/plugin/react-client/createWorkerStream.d.ts.map +1 -1
  73. package/dist/plugin/react-client/createWorkerStream.js +13 -2
  74. package/dist/plugin/react-client/createWorkerStream.js.map +1 -1
  75. package/dist/plugin/react-client/handleWorkerRscStream.d.ts.map +1 -1
  76. package/dist/plugin/react-client/handleWorkerRscStream.js +10 -3
  77. package/dist/plugin/react-client/handleWorkerRscStream.js.map +1 -1
  78. package/dist/plugin/react-client/restartWorker.d.ts.map +1 -1
  79. package/dist/plugin/react-client/restartWorker.js +2 -1
  80. package/dist/plugin/react-client/restartWorker.js.map +1 -1
  81. package/dist/plugin/react-server/configureReactServer.d.ts.map +1 -1
  82. package/dist/plugin/react-server/configureReactServer.js +1 -2
  83. package/dist/plugin/react-server/configureReactServer.js.map +1 -1
  84. package/dist/plugin/react-server/handleServerAction.d.ts.map +1 -1
  85. package/dist/plugin/react-server/handleServerAction.js +0 -16
  86. package/dist/plugin/react-server/handleServerAction.js.map +1 -1
  87. package/dist/plugin/react-static/createBuildLoader.d.ts.map +1 -0
  88. package/dist/plugin/react-static/createBuildLoader.js.map +1 -0
  89. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  90. package/dist/plugin/react-static/plugin.js +9 -12
  91. package/dist/plugin/react-static/plugin.js.map +1 -1
  92. package/dist/plugin/react-static/temporaryReferences.d.ts.map +1 -0
  93. package/dist/plugin/react-static/temporaryReferences.js.map +1 -0
  94. package/dist/plugin/transformer/plugin.server.js +2 -2
  95. package/dist/plugin/transformer/plugin.server.js.map +1 -1
  96. package/dist/plugin/types.d.ts +20 -3
  97. package/dist/plugin/types.d.ts.map +1 -1
  98. package/dist/plugin/worker/rsc/handleRender.d.ts.map +1 -1
  99. package/dist/plugin/worker/rsc/handleRender.js +1 -0
  100. package/dist/plugin/worker/rsc/handleRender.js.map +1 -1
  101. package/dist/plugin/worker/rsc/handlers.d.ts +3 -0
  102. package/dist/plugin/worker/rsc/handlers.d.ts.map +1 -0
  103. package/dist/plugin/worker/rsc/handlers.js +225 -0
  104. package/dist/plugin/worker/rsc/handlers.js.map +1 -0
  105. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  106. package/dist/plugin/worker/rsc/messageHandler.js +4 -110
  107. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  108. package/dist/plugin/worker/rsc/rsc-worker.development.js +14 -16
  109. package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
  110. package/dist/plugin/worker/rsc/state.d.ts +1 -2
  111. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  112. package/dist/plugin/worker/rsc/state.js +1 -2
  113. package/dist/plugin/worker/rsc/state.js.map +1 -1
  114. package/dist/plugin/worker/rsc/userOptions.d.ts +2 -0
  115. package/dist/plugin/worker/rsc/userOptions.d.ts.map +1 -0
  116. package/dist/plugin/worker/rsc/userOptions.js +17 -0
  117. package/dist/plugin/worker/rsc/userOptions.js.map +1 -0
  118. package/dist/plugin/worker/types.d.ts +2 -1
  119. package/dist/plugin/worker/types.d.ts.map +1 -1
  120. package/dist/tsconfig.tsbuildinfo +1 -1
  121. package/package.json +5 -1
  122. package/plugin/config/defaults.tsx +5 -2
  123. package/plugin/config/resolveOptions.ts +106 -91
  124. package/plugin/config/resolveUserConfig.ts +29 -5
  125. package/plugin/error/toError.ts +0 -2
  126. package/plugin/helpers/collectManifestCss.ts +2 -6
  127. package/plugin/helpers/collectViteModuleGraphCss.ts +6 -0
  128. package/plugin/helpers/createCssProps.tsx +17 -46
  129. package/plugin/helpers/createRscStream.tsx +1 -0
  130. package/plugin/helpers/inputNormalizer.ts +4 -13
  131. package/plugin/loader/createDefaultLoader.ts +80 -4
  132. package/plugin/loader/css-loader.development.ts +17 -34
  133. package/plugin/loader/css-loader.production.ts +2 -4
  134. package/plugin/loader/env-loader.development.ts +38 -15
  135. package/plugin/loader/handleExports.ts +36 -13
  136. package/plugin/loader/react-loader.server.ts +110 -32
  137. package/plugin/loader/sourceMap.ts +1 -1
  138. package/plugin/loader/transformModuleIfNeeded.ts +2 -2
  139. package/plugin/loader/transformModuleWithPreservedFunctions.ts +128 -21
  140. package/plugin/plugin.client.ts +0 -2
  141. package/plugin/react-client/configureWorkerRequestHandler.ts +104 -4
  142. package/plugin/react-client/createMessageHandlers.ts +3 -0
  143. package/plugin/react-client/createWorkerStream.ts +15 -1
  144. package/plugin/react-client/handleWorkerRscStream.ts +12 -3
  145. package/plugin/react-client/restartWorker.ts +1 -0
  146. package/plugin/react-server/configureReactServer.ts +1 -2
  147. package/plugin/react-server/handleServerAction.ts +1 -19
  148. package/plugin/react-static/plugin.ts +9 -12
  149. package/plugin/transformer/plugin.server.ts +2 -2
  150. package/plugin/types.ts +31 -2
  151. package/plugin/worker/rsc/handleRender.ts +1 -0
  152. package/plugin/worker/rsc/handlers.ts +246 -0
  153. package/plugin/worker/rsc/messageHandler.tsx +3 -118
  154. package/plugin/worker/rsc/rsc-worker.development.ts +18 -20
  155. package/plugin/worker/rsc/state.ts +2 -6
  156. package/plugin/worker/rsc/userOptions.ts +8 -0
  157. package/plugin/worker/types.ts +2 -0
  158. package/dist/plugin/loader/createBuildLoader.d.ts.map +0 -1
  159. package/dist/plugin/loader/createBuildLoader.js.map +0 -1
  160. package/dist/plugin/loader/plugin.d.ts +0 -22
  161. package/dist/plugin/loader/plugin.d.ts.map +0 -1
  162. package/dist/plugin/loader/plugin.js +0 -27
  163. package/dist/plugin/loader/temporaryReferences.d.ts.map +0 -1
  164. package/dist/plugin/loader/temporaryReferences.js.map +0 -1
  165. package/plugin/loader/plugin.ts +0 -33
  166. /package/dist/plugin/{loader → react-static}/createBuildLoader.d.ts +0 -0
  167. /package/dist/plugin/{loader → react-static}/createBuildLoader.js +0 -0
  168. /package/dist/plugin/{loader → react-static}/temporaryReferences.d.ts +0 -0
  169. /package/dist/plugin/{loader → react-static}/temporaryReferences.js +0 -0
  170. /package/plugin/{loader → react-static}/createBuildLoader.ts +0 -0
  171. /package/plugin/{loader → react-static}/temporaryReferences.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"createMessageHandlers.js","sources":["../../../plugin/react-client/createMessageHandlers.ts"],"sourcesContent":["import type { RscWorkerOutputMessage } from \"../worker/types.js\";\nimport type { Logger } from \"vite\";\nimport type { StreamHandlers } from \"../worker/types.js\";\n\ntype MessageHandlerContext = {\n handlers: StreamHandlers;\n logger: Logger;\n verbose?: boolean;\n};\n\nexport function createMessageHandler({\n handlers,\n logger,\n verbose = false,\n}: MessageHandlerContext) {\n return (message: RscWorkerOutputMessage | undefined) => {\n if (!message) {\n logger.warn(\"Received undefined message\");\n return;\n }\n\n switch (message.type) {\n case \"READY\":\n if(verbose) logger.info(\"[react-client] Worker is ready\");\n break;\n case \"ERROR\":\n handlers.onError(message.id, message.error, message.errorInfo);\n break;\n case \"RSC_CHUNK\":\n handlers.onData(message.id, message.chunk);\n break;\n case \"RSC_END\":\n handlers.onEnd(message.id);\n break;\n case \"RSC_METRICS\":\n handlers.onMetrics(message.id, message.metrics);\n break;\n case \"HMR_ACCEPT\":\n handlers.onHmrAccept(message.id, message.routes);\n break;\n case \"HMR_UPDATE\":\n handlers.onHmrUpdate(message.id, message.routes);\n break;\n case \"SERVER_ACTION\":\n handlers.onServerAction?.(message.id, message.args);\n break;\n case \"SERVER_ACTION_RESPONSE\":\n handlers.onServerActionResponse?.(message.id, message.result, message.error);\n break;\n case \"SERVER_MODULE\":\n handlers.onServerModule?.(message.id, message.url, message.source);\n break;\n default:\n logger.warn(`Unknown worker output message type: ${(message as { type: string }).type}`);\n }\n };\n}\n"],"names":[],"mappings":";;;;;AAUO,SAAS,oBAAqB,CAAA;AAAA,EACnC,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAU,GAAA;AACZ,CAA0B,EAAA;AACxB,EAAA,OAAO,CAAC,OAAgD,KAAA;AACtD,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AACxC,MAAA;AAAA;AAGF,IAAA,QAAQ,QAAQ,IAAM;AAAA,MACpB,KAAK,OAAA;AACH,QAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,gCAAgC,CAAA;AACxD,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,QAAA,CAAS,QAAQ,OAAQ,CAAA,EAAA,EAAI,OAAQ,CAAA,KAAA,EAAO,QAAQ,SAAS,CAAA;AAC7D,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,QAAA,CAAS,MAAO,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,KAAK,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAS,QAAA,CAAA,KAAA,CAAM,QAAQ,EAAE,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,QAAA,CAAS,SAAU,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,OAAO,CAAA;AAC9C,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,QAAA,CAAS,WAAY,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,MAAM,CAAA;AAC/C,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,QAAA,CAAS,WAAY,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,MAAM,CAAA;AAC/C,QAAA;AAAA,MACF,KAAK,eAAA;AACH,QAAA,QAAA,CAAS,cAAiB,GAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,IAAI,CAAA;AAClD,QAAA;AAAA,MACF,KAAK,wBAAA;AACH,QAAA,QAAA,CAAS,yBAAyB,OAAQ,CAAA,EAAA,EAAI,OAAQ,CAAA,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC3E,QAAA;AAAA,MACF,KAAK,eAAA;AACH,QAAA,QAAA,CAAS,iBAAiB,OAAQ,CAAA,EAAA,EAAI,OAAQ,CAAA,GAAA,EAAK,QAAQ,MAAM,CAAA;AACjE,QAAA;AAAA,MACF;AACE,QAAA,MAAA,CAAO,IAAK,CAAA,CAAA,oCAAA,EAAwC,OAA6B,CAAA,IAAI,CAAE,CAAA,CAAA;AAAA;AAC3F,GACF;AACF;;;;"}
1
+ {"version":3,"file":"createMessageHandlers.js","sources":["../../../plugin/react-client/createMessageHandlers.ts"],"sourcesContent":["import type { RscWorkerOutputMessage } from \"../worker/types.js\";\nimport type { Logger } from \"vite\";\nimport type { StreamHandlers } from \"../worker/types.js\";\n\ntype MessageHandlerContext = {\n handlers: StreamHandlers;\n logger: Logger;\n verbose?: boolean;\n};\n\nexport function createMessageHandler({\n handlers,\n logger,\n verbose = false,\n}: MessageHandlerContext) {\n return (message: RscWorkerOutputMessage | undefined) => {\n if (!message) {\n logger.warn(\"Received undefined message\");\n return;\n }\n\n switch (message.type) {\n case \"READY\":\n if(verbose) logger.info(\"[react-client] Worker is ready\");\n break;\n case \"ERROR\":\n handlers.onError(message.id, message.error, message.errorInfo);\n break;\n case \"RSC_CHUNK\":\n handlers.onData(message.id, message.chunk);\n break;\n case \"RSC_END\":\n handlers.onEnd(message.id);\n break;\n case \"RSC_METRICS\":\n handlers.onMetrics(message.id, message.metrics);\n break;\n case \"HMR_ACCEPT\":\n handlers.onHmrAccept(message.id, message.routes);\n break;\n case \"HMR_UPDATE\":\n handlers.onHmrUpdate(message.id, message.routes);\n break;\n case \"SERVER_ACTION\":\n handlers.onServerAction?.(message.id, message.args);\n break;\n case \"SERVER_ACTION_RESPONSE\":\n handlers.onServerActionResponse?.(message.id, message.result, message.error);\n break;\n case \"SERVER_MODULE\":\n handlers.onServerModule?.(message.id, message.url, message.source);\n break;\n case \"CSS_FILE\":\n handlers.onCssFile?.(message.id, message.content);\n break;\n default:\n logger.warn(`Unknown worker output message type: ${(message as { type: string }).type}`);\n }\n };\n}\n"],"names":[],"mappings":";;;;;AAUO,SAAS,oBAAqB,CAAA;AAAA,EACnC,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAU,GAAA;AACZ,CAA0B,EAAA;AACxB,EAAA,OAAO,CAAC,OAAgD,KAAA;AACtD,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAA,MAAA,CAAO,KAAK,4BAA4B,CAAA;AACxC,MAAA;AAAA;AAGF,IAAA,QAAQ,QAAQ,IAAM;AAAA,MACpB,KAAK,OAAA;AACH,QAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,gCAAgC,CAAA;AACxD,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,QAAA,CAAS,QAAQ,OAAQ,CAAA,EAAA,EAAI,OAAQ,CAAA,KAAA,EAAO,QAAQ,SAAS,CAAA;AAC7D,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,QAAA,CAAS,MAAO,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,KAAK,CAAA;AACzC,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAS,QAAA,CAAA,KAAA,CAAM,QAAQ,EAAE,CAAA;AACzB,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,QAAA,CAAS,SAAU,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,OAAO,CAAA;AAC9C,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,QAAA,CAAS,WAAY,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,MAAM,CAAA;AAC/C,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,QAAA,CAAS,WAAY,CAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,MAAM,CAAA;AAC/C,QAAA;AAAA,MACF,KAAK,eAAA;AACH,QAAA,QAAA,CAAS,cAAiB,GAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,IAAI,CAAA;AAClD,QAAA;AAAA,MACF,KAAK,wBAAA;AACH,QAAA,QAAA,CAAS,yBAAyB,OAAQ,CAAA,EAAA,EAAI,OAAQ,CAAA,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAC3E,QAAA;AAAA,MACF,KAAK,eAAA;AACH,QAAA,QAAA,CAAS,iBAAiB,OAAQ,CAAA,EAAA,EAAI,OAAQ,CAAA,GAAA,EAAK,QAAQ,MAAM,CAAA;AACjE,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,QAAA,CAAS,SAAY,GAAA,OAAA,CAAQ,EAAI,EAAA,OAAA,CAAQ,OAAO,CAAA;AAChD,QAAA;AAAA,MACF;AACE,QAAA,MAAA,CAAO,IAAK,CAAA,CAAA,oCAAA,EAAwC,OAA6B,CAAA,IAAI,CAAE,CAAA,CAAA;AAAA;AAC3F,GACF;AACF;;;;"}
@@ -12,13 +12,13 @@ import type { StreamHandlers } from "../worker/types.js";
12
12
  * @param rscWorkerLoaderPort - Optional loader port for module loading
13
13
  * @returns An async generator that yields RSC chunks
14
14
  */
15
- export declare function createWorkerStream({ worker, message, logger, handlers: { onHmrAccept, onHmrUpdate, onMetrics, onError, onData, onEnd, onServerAction, onServerActionResponse, }, verbose, }: {
15
+ export declare function createWorkerStream({ worker, message, logger, handlers: { onHmrAccept, onHmrUpdate, onMetrics, onError, onData, onEnd, onServerAction, onServerActionResponse, onCssFile, }, verbose, }: {
16
16
  worker: NodeWorker;
17
17
  message: Omit<RscRenderMessage, "type" | "id"> & Partial<Pick<RscRenderMessage, "id">> & {
18
18
  type?: "RSC_RENDER";
19
19
  };
20
20
  logger: Logger;
21
- handlers: Pick<StreamHandlers, "onHmrAccept" | "onHmrUpdate" | "onMetrics"> & Partial<Pick<StreamHandlers, "onError" | "onData" | "onEnd" | "onServerAction" | "onServerActionResponse">>;
21
+ handlers: Pick<StreamHandlers, "onHmrAccept" | "onHmrUpdate" | "onMetrics"> & Partial<Pick<StreamHandlers, "onError" | "onData" | "onEnd" | "onServerAction" | "onServerActionResponse" | "onCssFile">>;
22
22
  verbose?: boolean;
23
23
  }): AsyncGenerator<Uint8Array>;
24
24
  //# sourceMappingURL=createWorkerStream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createWorkerStream.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/createWorkerStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;;;;;;;GASG;AACH,wBAAuB,kBAAkB,CAAC,EACxC,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EAAE,EACR,WAAW,EACX,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,KAAK,EACL,cAAc,EACd,sBAAsB,GACvB,EACD,OAAe,GAChB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC,GACzE,OAAO,CACL,IAAI,CACF,cAAc,EACZ,SAAS,GACT,QAAQ,GACR,OAAO,GACP,gBAAgB,GAChB,wBAAwB,CAC3B,CACF,CAAC;IACJ,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,cAAc,CAAC,UAAU,CAAC,CA0I7B"}
1
+ {"version":3,"file":"createWorkerStream.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/createWorkerStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD;;;;;;;;;GASG;AACH,wBAAuB,kBAAkB,CAAC,EACxC,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EAAE,EACR,WAAW,EACX,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,KAAK,EACL,cAAc,EACd,sBAAsB,EACtB,SAAS,GACV,EACD,OAAe,GAChB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,YAAY,CAAA;KAAE,CAAC;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC,GACzE,OAAO,CACL,IAAI,CACF,cAAc,EACZ,SAAS,GACT,QAAQ,GACR,OAAO,GACP,gBAAgB,GAChB,wBAAwB,GACxB,WAAW,CACd,CACF,CAAC;IACJ,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,cAAc,CAAC,UAAU,CAAC,CAsJ7B"}
@@ -18,7 +18,8 @@ async function* createWorkerStream({
18
18
  onData,
19
19
  onEnd,
20
20
  onServerAction,
21
- onServerActionResponse
21
+ onServerActionResponse,
22
+ onCssFile
22
23
  },
23
24
  verbose = false
24
25
  }) {
@@ -80,6 +81,12 @@ async function* createWorkerStream({
80
81
  onHmrUpdate(id, routes);
81
82
  }
82
83
  },
84
+ onCssFile: (id, code) => {
85
+ if (verbose) logger.info(`[react-client] received css file ${id}`);
86
+ if (typeof onCssFile === "function") {
87
+ onCssFile(id, code);
88
+ }
89
+ },
83
90
  onServerAction: (id, args) => {
84
91
  if (verbose) logger.info(`[react-client] received server action ${id}`);
85
92
  if (typeof onServerAction === "function") {
@@ -90,7 +97,11 @@ async function* createWorkerStream({
90
97
  if (verbose)
91
98
  logger.info(`[react-client] received server action response ${id}`);
92
99
  if (typeof onServerActionResponse === "function") {
93
- onServerActionResponse(id, result, error);
100
+ const response = {
101
+ type: "server-action-response",
102
+ returnValue: error ? { success: false, error } : result
103
+ };
104
+ onServerActionResponse(id, response);
94
105
  }
95
106
  }
96
107
  };
@@ -1 +1 @@
1
- {"version":3,"file":"createWorkerStream.js","sources":["../../../plugin/react-client/createWorkerStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type {\n RscWorkerOutputMessage,\n RscRenderMessage,\n} from \"../worker/types.js\";\nimport type { StreamMetrics } from \"../types.js\";\nimport type { Worker as NodeWorker } from \"node:worker_threads\";\nimport type { StreamHandlers } from \"../worker/types.js\";\nimport { createMessageHandler } from \"./createMessageHandlers.js\";\nimport { logError } from \"../error/toError.js\";\n\n/**\n * Creates an async generator that yields RSC chunks from the worker.\n * Handles both module requests and RSC streaming.\n *\n * @param worker - The worker thread\n * @param server - The Vite dev server\n * @param message - The RSC render message\n * @param rscWorkerLoaderPort - Optional loader port for module loading\n * @returns An async generator that yields RSC chunks\n */\nexport async function* createWorkerStream({\n worker,\n message,\n logger,\n handlers: {\n onHmrAccept,\n onHmrUpdate,\n onMetrics,\n onError,\n onData,\n onEnd,\n onServerAction,\n onServerActionResponse,\n },\n verbose = false,\n}: {\n worker: NodeWorker;\n message: Omit<RscRenderMessage, \"type\" | \"id\"> &\n Partial<Pick<RscRenderMessage, \"id\">> & { type?: \"RSC_RENDER\" };\n logger: Logger;\n handlers: Pick<StreamHandlers, \"onHmrAccept\" | \"onHmrUpdate\" | \"onMetrics\"> &\n Partial<\n Pick<\n StreamHandlers,\n | \"onError\"\n | \"onData\"\n | \"onEnd\"\n | \"onServerAction\"\n | \"onServerActionResponse\"\n >\n >;\n verbose?: boolean;\n}): AsyncGenerator<Uint8Array> {\n if (!worker) {\n throw new Error(\"Worker is not running\");\n }\n let messageHandler:\n | ((message: RscWorkerOutputMessage | undefined) => void)\n | null = null;\n let currentResolve: ((chunk: Uint8Array) => void) | null = null;\n const handlers: StreamHandlers = {\n onError: (id, error, errorInfo) => {\n logError(error, logger);\n if (errorInfo) {\n logError(errorInfo.componentStack, logger);\n }\n if (typeof onError === \"function\") {\n onError(id, error, errorInfo);\n }\n },\n onData: (id: string, chunk: Uint8Array) => {\n currentResolve?.(chunk);\n if (verbose) {\n logger.info(\n `[react-client] received chunk ${id} ${\n Buffer.from(chunk).byteLength\n } bytes`\n );\n }\n if (typeof onData === \"function\") {\n onData(id, chunk);\n }\n },\n onEnd: (id: string) => {\n currentResolve?.(new Uint8Array());\n if (verbose) logger.info(`[react-client] received end`);\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n if (typeof onEnd === \"function\") {\n onEnd(id);\n }\n },\n onMetrics: (id: string, metrics: StreamMetrics) => {\n if (verbose)\n logger.info(`[react-client] received chunks ${metrics.chunks}`);\n if (typeof onMetrics === \"function\") {\n onMetrics(id, metrics);\n }\n },\n onHmrAccept: (id: string, routes?: string[]) => {\n if (verbose)\n logger.info(`[react-client] received hmr accept ${routes?.join(\", \")}`);\n if (typeof onHmrAccept === \"function\") {\n onHmrAccept(id, routes);\n }\n },\n onHmrUpdate: (id: string, routes?: string[]) => {\n if (verbose)\n logger.info(`[react-client] received hmr update ${routes?.join(\", \")}`);\n if (typeof onHmrUpdate === \"function\") {\n onHmrUpdate(id, routes);\n }\n },\n onServerAction: (id: string, args: unknown[]) => {\n if (verbose) logger.info(`[react-client] received server action ${id}`);\n if (typeof onServerAction === \"function\") {\n onServerAction(id, args);\n }\n },\n onServerActionResponse: (id: string, result?: unknown, error?: string) => {\n if (verbose)\n logger.info(`[react-client] received server action response ${id}`);\n if (typeof onServerActionResponse === \"function\") {\n onServerActionResponse(id, result, error);\n }\n },\n };\n\n try {\n // Remove any existing message handler before starting\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n if (verbose) logger.info(`[react-client] sending message RSC_RENDER`);\n worker.postMessage({\n ...message,\n type: \"RSC_RENDER\",\n id: message?.id ?? message.route,\n });\n\n if (verbose) logger.info(`[react-client] waiting for message handler`);\n let workerTimeout: NodeJS.Timeout | null = null;\n yield await new Promise<Uint8Array>((resolve) => {\n workerTimeout = setTimeout(() => {\n if (verbose) logger.info(`worker timeout`);\n worker.terminate();\n }, 5000);\n currentResolve = resolve;\n messageHandler = createMessageHandler({\n handlers,\n logger,\n verbose,\n });\n worker.on(\"message\", messageHandler);\n });\n if (workerTimeout) {\n clearTimeout(workerTimeout);\n }\n if (verbose) logger.info(`[react-client] received message handler`);\n while (true) {\n const chunk = await new Promise<Uint8Array>((resolve) => {\n currentResolve = resolve;\n // Create new message handler for each iteration\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n }\n messageHandler = createMessageHandler({\n handlers,\n logger,\n verbose,\n });\n worker.on(\"message\", messageHandler);\n });\n\n if (chunk.length === 0) {\n break;\n }\n\n yield chunk;\n }\n } finally {\n // Clean up message handler in finally block\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createWorkerStream.js","sources":["../../../plugin/react-client/createWorkerStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type {\n RscWorkerOutputMessage,\n RscRenderMessage,\n} from \"../worker/types.js\";\nimport type { StreamMetrics } from \"../types.js\";\nimport type { Worker as NodeWorker } from \"node:worker_threads\";\nimport type { StreamHandlers } from \"../worker/types.js\";\nimport { createMessageHandler } from \"./createMessageHandlers.js\";\nimport { logError } from \"../error/toError.js\";\n\n/**\n * Creates an async generator that yields RSC chunks from the worker.\n * Handles both module requests and RSC streaming.\n *\n * @param worker - The worker thread\n * @param server - The Vite dev server\n * @param message - The RSC render message\n * @param rscWorkerLoaderPort - Optional loader port for module loading\n * @returns An async generator that yields RSC chunks\n */\nexport async function* createWorkerStream({\n worker,\n message,\n logger,\n handlers: {\n onHmrAccept,\n onHmrUpdate,\n onMetrics,\n onError,\n onData,\n onEnd,\n onServerAction,\n onServerActionResponse,\n onCssFile,\n },\n verbose = false,\n}: {\n worker: NodeWorker;\n message: Omit<RscRenderMessage, \"type\" | \"id\"> &\n Partial<Pick<RscRenderMessage, \"id\">> & { type?: \"RSC_RENDER\" };\n logger: Logger;\n handlers: Pick<StreamHandlers, \"onHmrAccept\" | \"onHmrUpdate\" | \"onMetrics\"> &\n Partial<\n Pick<\n StreamHandlers,\n | \"onError\"\n | \"onData\"\n | \"onEnd\"\n | \"onServerAction\"\n | \"onServerActionResponse\"\n | \"onCssFile\"\n >\n >;\n verbose?: boolean;\n}): AsyncGenerator<Uint8Array> {\n if (!worker) {\n throw new Error(\"Worker is not running\");\n }\n let messageHandler:\n | ((message: RscWorkerOutputMessage | undefined) => void)\n | null = null;\n let currentResolve: ((chunk: Uint8Array) => void) | null = null;\n const handlers: StreamHandlers = {\n onError: (id, error, errorInfo) => {\n logError(error, logger);\n if (errorInfo) {\n logError(errorInfo.componentStack, logger);\n }\n if (typeof onError === \"function\") {\n onError(id, error, errorInfo);\n }\n },\n onData: (id: string, chunk: Uint8Array) => {\n currentResolve?.(chunk);\n if (verbose) {\n logger.info(\n `[react-client] received chunk ${id} ${\n Buffer.from(chunk).byteLength\n } bytes`\n );\n }\n if (typeof onData === \"function\") {\n onData(id, chunk);\n }\n },\n onEnd: (id: string) => {\n currentResolve?.(new Uint8Array());\n if (verbose) logger.info(`[react-client] received end`);\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n if (typeof onEnd === \"function\") {\n onEnd(id);\n }\n },\n onMetrics: (id: string, metrics: StreamMetrics) => {\n if (verbose)\n logger.info(`[react-client] received chunks ${metrics.chunks}`);\n if (typeof onMetrics === \"function\") {\n onMetrics(id, metrics);\n }\n },\n onHmrAccept: (id: string, routes?: string[]) => {\n if (verbose)\n logger.info(`[react-client] received hmr accept ${routes?.join(\", \")}`);\n if (typeof onHmrAccept === \"function\") {\n onHmrAccept(id, routes);\n }\n },\n onHmrUpdate: (id: string, routes?: string[]) => {\n if (verbose)\n logger.info(`[react-client] received hmr update ${routes?.join(\", \")}`);\n if (typeof onHmrUpdate === \"function\") {\n onHmrUpdate(id, routes);\n }\n },\n onCssFile: (id: string, code: string) => {\n if (verbose) logger.info(`[react-client] received css file ${id}`);\n if (typeof onCssFile === \"function\") {\n onCssFile(id, code);\n }\n },\n onServerAction: (id: string, args: unknown[]) => {\n if (verbose) logger.info(`[react-client] received server action ${id}`);\n if (typeof onServerAction === \"function\") {\n onServerAction(id, args);\n }\n },\n onServerActionResponse: (id: string, result?: unknown, error?: string) => {\n if (verbose)\n logger.info(`[react-client] received server action response ${id}`);\n if (typeof onServerActionResponse === \"function\") {\n const response = {\n type: \"server-action-response\",\n returnValue: error \n ? { success: false, error }\n : result\n };\n onServerActionResponse(id, response);\n }\n },\n };\n\n try {\n // Remove any existing message handler before starting\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n if (verbose) logger.info(`[react-client] sending message RSC_RENDER`);\n worker.postMessage({\n ...message,\n type: \"RSC_RENDER\",\n id: message?.id ?? message.route,\n });\n\n if (verbose) logger.info(`[react-client] waiting for message handler`);\n let workerTimeout: NodeJS.Timeout | null = null;\n yield await new Promise<Uint8Array>((resolve) => {\n workerTimeout = setTimeout(() => {\n if (verbose) logger.info(`worker timeout`);\n worker.terminate();\n }, 5000);\n currentResolve = resolve;\n messageHandler = createMessageHandler({\n handlers,\n logger,\n verbose,\n });\n worker.on(\"message\", messageHandler);\n });\n if (workerTimeout) {\n clearTimeout(workerTimeout);\n }\n if (verbose) logger.info(`[react-client] received message handler`);\n while (true) {\n const chunk = await new Promise<Uint8Array>((resolve) => {\n currentResolve = resolve;\n // Create new message handler for each iteration\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n }\n messageHandler = createMessageHandler({\n handlers,\n logger,\n verbose,\n });\n worker.on(\"message\", messageHandler);\n });\n\n if (chunk.length === 0) {\n break;\n }\n\n yield chunk;\n }\n } finally {\n // Clean up message handler in finally block\n if (messageHandler) {\n worker.removeListener(\"message\", messageHandler);\n messageHandler = null;\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAqBA,gBAAuB,kBAAmB,CAAA;AAAA,EACxC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAU,EAAA;AAAA,IACR,WAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,cAAA;AAAA,IACA,sBAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,OAAU,GAAA;AACZ,CAkB+B,EAAA;AAC7B,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAM,MAAA,IAAI,MAAM,uBAAuB,CAAA;AAAA;AAEzC,EAAA,IAAI,cAEO,GAAA,IAAA;AACX,EAAA,IAAI,cAAuD,GAAA,IAAA;AAC3D,EAAA,MAAM,QAA2B,GAAA;AAAA,IAC/B,OAAS,EAAA,CAAC,EAAI,EAAA,KAAA,EAAO,SAAc,KAAA;AACjC,MAAA,QAAA,CAAS,OAAO,MAAM,CAAA;AACtB,MAAA,IAAI,SAAW,EAAA;AACb,QAAS,QAAA,CAAA,SAAA,CAAU,gBAAgB,MAAM,CAAA;AAAA;AAE3C,MAAI,IAAA,OAAO,YAAY,UAAY,EAAA;AACjC,QAAQ,OAAA,CAAA,EAAA,EAAI,OAAO,SAAS,CAAA;AAAA;AAC9B,KACF;AAAA,IACA,MAAA,EAAQ,CAAC,EAAA,EAAY,KAAsB,KAAA;AACzC,MAAA,cAAA,GAAiB,KAAK,CAAA;AACtB,MAAA,IAAI,OAAS,EAAA;AACX,QAAO,MAAA,CAAA,IAAA;AAAA,UACL,iCAAiC,EAAE,CAAA,CAAA,EACjC,OAAO,IAAK,CAAA,KAAK,EAAE,UACrB,CAAA,MAAA;AAAA,SACF;AAAA;AAEF,MAAI,IAAA,OAAO,WAAW,UAAY,EAAA;AAChC,QAAA,MAAA,CAAO,IAAI,KAAK,CAAA;AAAA;AAClB,KACF;AAAA,IACA,KAAA,EAAO,CAAC,EAAe,KAAA;AACrB,MAAiB,cAAA,GAAA,IAAI,YAAY,CAAA;AACjC,MAAI,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,CAA6B,2BAAA,CAAA,CAAA;AACtD,MAAA,IAAI,cAAgB,EAAA;AAClB,QAAO,MAAA,CAAA,cAAA,CAAe,WAAW,cAAc,CAAA;AAC/C,QAAiB,cAAA,GAAA,IAAA;AAAA;AAEnB,MAAI,IAAA,OAAO,UAAU,UAAY,EAAA;AAC/B,QAAA,KAAA,CAAM,EAAE,CAAA;AAAA;AACV,KACF;AAAA,IACA,SAAA,EAAW,CAAC,EAAA,EAAY,OAA2B,KAAA;AACjD,MAAI,IAAA,OAAA;AACF,QAAA,MAAA,CAAO,IAAK,CAAA,CAAA,+BAAA,EAAkC,OAAQ,CAAA,MAAM,CAAE,CAAA,CAAA;AAChE,MAAI,IAAA,OAAO,cAAc,UAAY,EAAA;AACnC,QAAA,SAAA,CAAU,IAAI,OAAO,CAAA;AAAA;AACvB,KACF;AAAA,IACA,WAAA,EAAa,CAAC,EAAA,EAAY,MAAsB,KAAA;AAC9C,MAAI,IAAA,OAAA;AACF,QAAA,MAAA,CAAO,KAAK,CAAsC,mCAAA,EAAA,MAAA,EAAQ,IAAK,CAAA,IAAI,CAAC,CAAE,CAAA,CAAA;AACxE,MAAI,IAAA,OAAO,gBAAgB,UAAY,EAAA;AACrC,QAAA,WAAA,CAAY,IAAI,MAAM,CAAA;AAAA;AACxB,KACF;AAAA,IACA,WAAA,EAAa,CAAC,EAAA,EAAY,MAAsB,KAAA;AAC9C,MAAI,IAAA,OAAA;AACF,QAAA,MAAA,CAAO,KAAK,CAAsC,mCAAA,EAAA,MAAA,EAAQ,IAAK,CAAA,IAAI,CAAC,CAAE,CAAA,CAAA;AACxE,MAAI,IAAA,OAAO,gBAAgB,UAAY,EAAA;AACrC,QAAA,WAAA,CAAY,IAAI,MAAM,CAAA;AAAA;AACxB,KACF;AAAA,IACA,SAAA,EAAW,CAAC,EAAA,EAAY,IAAiB,KAAA;AACvC,MAAA,IAAI,OAAS,EAAA,MAAA,CAAO,IAAK,CAAA,CAAA,iCAAA,EAAoC,EAAE,CAAE,CAAA,CAAA;AACjE,MAAI,IAAA,OAAO,cAAc,UAAY,EAAA;AACnC,QAAA,SAAA,CAAU,IAAI,IAAI,CAAA;AAAA;AACpB,KACF;AAAA,IACA,cAAA,EAAgB,CAAC,EAAA,EAAY,IAAoB,KAAA;AAC/C,MAAA,IAAI,OAAS,EAAA,MAAA,CAAO,IAAK,CAAA,CAAA,sCAAA,EAAyC,EAAE,CAAE,CAAA,CAAA;AACtE,MAAI,IAAA,OAAO,mBAAmB,UAAY,EAAA;AACxC,QAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AAAA;AACzB,KACF;AAAA,IACA,sBAAwB,EAAA,CAAC,EAAY,EAAA,MAAA,EAAkB,KAAmB,KAAA;AACxE,MAAI,IAAA,OAAA;AACF,QAAO,MAAA,CAAA,IAAA,CAAK,CAAkD,+CAAA,EAAA,EAAE,CAAE,CAAA,CAAA;AACpE,MAAI,IAAA,OAAO,2BAA2B,UAAY,EAAA;AAChD,QAAA,MAAM,QAAW,GAAA;AAAA,UACf,IAAM,EAAA,wBAAA;AAAA,UACN,aAAa,KACT,GAAA,EAAE,OAAS,EAAA,KAAA,EAAO,OAClB,GAAA;AAAA,SACN;AACA,QAAA,sBAAA,CAAuB,IAAI,QAAQ,CAAA;AAAA;AACrC;AACF,GACF;AAEA,EAAI,IAAA;AAEF,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,MAAA,CAAA,cAAA,CAAe,WAAW,cAAc,CAAA;AAC/C,MAAiB,cAAA,GAAA,IAAA;AAAA;AAEnB,IAAI,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,CAA2C,yCAAA,CAAA,CAAA;AACpE,IAAA,MAAA,CAAO,WAAY,CAAA;AAAA,MACjB,GAAG,OAAA;AAAA,MACH,IAAM,EAAA,YAAA;AAAA,MACN,EAAA,EAAI,OAAS,EAAA,EAAA,IAAM,OAAQ,CAAA;AAAA,KAC5B,CAAA;AAED,IAAI,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,CAA4C,0CAAA,CAAA,CAAA;AACrE,IAAA,IAAI,aAAuC,GAAA,IAAA;AAC3C,IAAA,MAAM,MAAM,IAAI,OAAoB,CAAA,CAAC,OAAY,KAAA;AAC/C,MAAA,aAAA,GAAgB,WAAW,MAAM;AAC/B,QAAI,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,CAAgB,cAAA,CAAA,CAAA;AACzC,QAAA,MAAA,CAAO,SAAU,EAAA;AAAA,SAChB,GAAI,CAAA;AACP,MAAiB,cAAA,GAAA,OAAA;AACjB,MAAA,cAAA,GAAiB,oBAAqB,CAAA;AAAA,QACpC,QAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAO,MAAA,CAAA,EAAA,CAAG,WAAW,cAAc,CAAA;AAAA,KACpC,CAAA;AACD,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,YAAA,CAAa,aAAa,CAAA;AAAA;AAE5B,IAAI,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,CAAyC,uCAAA,CAAA,CAAA;AAClE,IAAA,OAAO,IAAM,EAAA;AACX,MAAA,MAAM,KAAQ,GAAA,MAAM,IAAI,OAAA,CAAoB,CAAC,OAAY,KAAA;AACvD,QAAiB,cAAA,GAAA,OAAA;AAEjB,QAAA,IAAI,cAAgB,EAAA;AAClB,UAAO,MAAA,CAAA,cAAA,CAAe,WAAW,cAAc,CAAA;AAAA;AAEjD,QAAA,cAAA,GAAiB,oBAAqB,CAAA;AAAA,UACpC,QAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAO,MAAA,CAAA,EAAA,CAAG,WAAW,cAAc,CAAA;AAAA,OACpC,CAAA;AAED,MAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,QAAA;AAAA;AAGF,MAAM,MAAA,KAAA;AAAA;AACR,GACA,SAAA;AAEA,IAAA,IAAI,cAAgB,EAAA;AAClB,MAAO,MAAA,CAAA,cAAA,CAAe,WAAW,cAAc,CAAA;AAC/C,MAAiB,cAAA,GAAA,IAAA;AAAA;AACnB;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"handleWorkerRscStream.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/handleWorkerRscStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAe,EAChB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,gBAAgB,GAAG,wBAAwB,CAAC,CAAC,CAAC;IAC9G,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,cAAc,CAAC,UAAU,CAAC,CAyC7B"}
1
+ {"version":3,"file":"handleWorkerRscStream.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/handleWorkerRscStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAe,EAChB,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,GACzE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,gBAAgB,GAAG,wBAAwB,CAAC,CAAC,CAAC;IAC9G,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,GAAG,cAAc,CAAC,UAAU,CAAC,CAkD7B"}
@@ -24,12 +24,19 @@ function handleWorkerRscStream({
24
24
  handlers: {
25
25
  ...handlers,
26
26
  onServerAction: (id, args) => {
27
- if (verbose) logger.info(`[react-client] Received server action ${id}`);
27
+ if (verbose) logger.info(`[react-client] Forwarding server action ${id} to worker`);
28
28
  handlers.onServerAction?.(id, args);
29
29
  },
30
30
  onServerActionResponse: (id, result, error) => {
31
- if (verbose) logger.info(`[react-client] Received server action response ${id}`);
32
- handlers.onServerActionResponse?.(id, result, error);
31
+ if (verbose) logger.info(`[react-client] Forwarding server action response ${id} from worker`);
32
+ if (typeof handlers.onServerActionResponse === "function") {
33
+ const response = {
34
+ type: "server-action-response",
35
+ returnValue: error ? { success: false, error } : result
36
+ // Direct result, no success/data wrapper
37
+ };
38
+ handlers.onServerActionResponse(id, response);
39
+ }
33
40
  }
34
41
  },
35
42
  verbose
@@ -1 +1 @@
1
- {"version":3,"file":"handleWorkerRscStream.js","sources":["../../../plugin/react-client/handleWorkerRscStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type { RscRenderMessage, StreamHandlers } from \"../worker/types.js\";\nimport { createWorkerStream } from \"./createWorkerStream.js\";\nimport type { Worker as NodeWorker } from \"node:worker_threads\";\n/**\n * Handles the RSC stream from the worker.\n * Creates a ReadableStream that pipes RSC chunks to the response.\n *\n * @param worker - The worker thread\n * @param message - The RSC render message\n * @returns A ReadableStream that yields RSC chunks\n */\nexport function handleWorkerRscStream({\n worker,\n message,\n logger,\n handlers,\n verbose = false\n}: {\n worker: NodeWorker,\n message: Omit<RscRenderMessage, \"type\" | \"id\">,\n logger: Logger,\n handlers: Pick<StreamHandlers, \"onMetrics\" | \"onHmrAccept\" | \"onHmrUpdate\"> &\n Partial<Pick<StreamHandlers, \"onError\" | \"onData\" | \"onEnd\" | \"onServerAction\" | \"onServerActionResponse\">>,\n verbose?: boolean\n}): ReadableStream<Uint8Array> {\n // Create a ReadableStream from the async generator\n let isFlowing = false;\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n if(verbose) logger.info(\"[react-client] Starting stream\");\n for await (const chunk of createWorkerStream({\n worker,\n message,\n logger,\n handlers: {\n ...handlers,\n onServerAction: (id: string, args: unknown[]) => {\n if (verbose) logger.info(`[react-client] Received server action ${id}`);\n handlers.onServerAction?.(id, args);\n },\n onServerActionResponse: (id: string, result?: unknown, error?: string) => {\n if (verbose) logger.info(`[react-client] Received server action response ${id}`);\n handlers.onServerActionResponse?.(id, result, error);\n }\n },\n verbose\n })) {\n if (!isFlowing) {\n isFlowing = true;\n if(verbose) logger.info(\"[react-client] Stream is flowing\");\n }\n controller.enqueue(chunk);\n }\n } catch (error) {\n controller.error(error);\n } finally {\n if (isFlowing) {\n isFlowing = false;\n if(verbose) logger.info(\"[react-client] Stream closing\");\n }\n controller.close();\n }\n },\n });\n}\n"],"names":[],"mappings":";;;;;;;AAYO,SAAS,qBAAsB,CAAA;AAAA,EACpC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAU,GAAA;AACZ,CAO+B,EAAA;AAE7B,EAAA,IAAI,SAAY,GAAA,KAAA;AAChB,EAAA,OAAO,IAAI,cAA2B,CAAA;AAAA,IACpC,MAAM,MAAM,UAAY,EAAA;AACtB,MAAI,IAAA;AACF,QAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,gCAAgC,CAAA;AACxD,QAAA,WAAA,MAAiB,SAAS,kBAAmB,CAAA;AAAA,UAC3C,MAAA;AAAA,UACA,OAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAU,EAAA;AAAA,YACR,GAAG,QAAA;AAAA,YACH,cAAA,EAAgB,CAAC,EAAA,EAAY,IAAoB,KAAA;AAC/C,cAAA,IAAI,OAAS,EAAA,MAAA,CAAO,IAAK,CAAA,CAAA,sCAAA,EAAyC,EAAE,CAAE,CAAA,CAAA;AACtE,cAAS,QAAA,CAAA,cAAA,GAAiB,IAAI,IAAI,CAAA;AAAA,aACpC;AAAA,YACA,sBAAwB,EAAA,CAAC,EAAY,EAAA,MAAA,EAAkB,KAAmB,KAAA;AACxE,cAAA,IAAI,OAAS,EAAA,MAAA,CAAO,IAAK,CAAA,CAAA,+CAAA,EAAkD,EAAE,CAAE,CAAA,CAAA;AAC/E,cAAS,QAAA,CAAA,sBAAA,GAAyB,EAAI,EAAA,MAAA,EAAQ,KAAK,CAAA;AAAA;AACrD,WACF;AAAA,UACA;AAAA,SACD,CAAG,EAAA;AACF,UAAA,IAAI,CAAC,SAAW,EAAA;AACd,YAAY,SAAA,GAAA,IAAA;AACZ,YAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,kCAAkC,CAAA;AAAA;AAE5D,UAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA;AAC1B,eACO,KAAO,EAAA;AACd,QAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,OACtB,SAAA;AACA,QAAA,IAAI,SAAW,EAAA;AACb,UAAY,SAAA,GAAA,KAAA;AACZ,UAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,+BAA+B,CAAA;AAAA;AAEzD,QAAA,UAAA,CAAW,KAAM,EAAA;AAAA;AACnB;AACF,GACD,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"handleWorkerRscStream.js","sources":["../../../plugin/react-client/handleWorkerRscStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type { RscRenderMessage, StreamHandlers } from \"../worker/types.js\";\nimport { createWorkerStream } from \"./createWorkerStream.js\";\nimport type { Worker as NodeWorker } from \"node:worker_threads\";\n/**\n * Handles the RSC stream from the worker.\n * Creates a ReadableStream that pipes RSC chunks to the response.\n *\n * @param worker - The worker thread\n * @param message - The RSC render message\n * @returns A ReadableStream that yields RSC chunks\n */\nexport function handleWorkerRscStream({\n worker,\n message,\n logger,\n handlers,\n verbose = false\n}: {\n worker: NodeWorker,\n message: Omit<RscRenderMessage, \"type\" | \"id\">,\n logger: Logger,\n handlers: Pick<StreamHandlers, \"onMetrics\" | \"onHmrAccept\" | \"onHmrUpdate\"> &\n Partial<Pick<StreamHandlers, \"onError\" | \"onData\" | \"onEnd\" | \"onServerAction\" | \"onServerActionResponse\">>,\n verbose?: boolean\n}): ReadableStream<Uint8Array> {\n // Create a ReadableStream from the async generator\n let isFlowing = false;\n return new ReadableStream<Uint8Array>({\n async start(controller) {\n try {\n if(verbose) logger.info(\"[react-client] Starting stream\");\n for await (const chunk of createWorkerStream({\n worker,\n message,\n logger,\n handlers: {\n ...handlers,\n onServerAction: (id: string, args: unknown[]) => {\n if (verbose) logger.info(`[react-client] Forwarding server action ${id} to worker`);\n handlers.onServerAction?.(id, args);\n },\n onServerActionResponse: (id: string, result?: unknown, error?: string) => {\n if (verbose) logger.info(`[react-client] Forwarding server action response ${id} from worker`);\n if (typeof handlers.onServerActionResponse === \"function\") {\n // Ensure consistent response format\n const response = {\n type: \"server-action-response\",\n returnValue: error \n ? { success: false, error }\n : result // Direct result, no success/data wrapper\n };\n handlers.onServerActionResponse(id, response);\n }\n }\n },\n verbose\n })) {\n if (!isFlowing) {\n isFlowing = true;\n if(verbose) logger.info(\"[react-client] Stream is flowing\");\n }\n controller.enqueue(chunk);\n }\n } catch (error) {\n controller.error(error);\n } finally {\n if (isFlowing) {\n isFlowing = false;\n if(verbose) logger.info(\"[react-client] Stream closing\");\n }\n controller.close();\n }\n },\n });\n}\n"],"names":[],"mappings":";;;;;;;AAYO,SAAS,qBAAsB,CAAA;AAAA,EACpC,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAU,GAAA;AACZ,CAO+B,EAAA;AAE7B,EAAA,IAAI,SAAY,GAAA,KAAA;AAChB,EAAA,OAAO,IAAI,cAA2B,CAAA;AAAA,IACpC,MAAM,MAAM,UAAY,EAAA;AACtB,MAAI,IAAA;AACF,QAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,gCAAgC,CAAA;AACxD,QAAA,WAAA,MAAiB,SAAS,kBAAmB,CAAA;AAAA,UAC3C,MAAA;AAAA,UACA,OAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAU,EAAA;AAAA,YACR,GAAG,QAAA;AAAA,YACH,cAAA,EAAgB,CAAC,EAAA,EAAY,IAAoB,KAAA;AAC/C,cAAA,IAAI,OAAS,EAAA,MAAA,CAAO,IAAK,CAAA,CAAA,wCAAA,EAA2C,EAAE,CAAY,UAAA,CAAA,CAAA;AAClF,cAAS,QAAA,CAAA,cAAA,GAAiB,IAAI,IAAI,CAAA;AAAA,aACpC;AAAA,YACA,sBAAwB,EAAA,CAAC,EAAY,EAAA,MAAA,EAAkB,KAAmB,KAAA;AACxE,cAAA,IAAI,OAAS,EAAA,MAAA,CAAO,IAAK,CAAA,CAAA,iDAAA,EAAoD,EAAE,CAAc,YAAA,CAAA,CAAA;AAC7F,cAAI,IAAA,OAAO,QAAS,CAAA,sBAAA,KAA2B,UAAY,EAAA;AAEzD,gBAAA,MAAM,QAAW,GAAA;AAAA,kBACf,IAAM,EAAA,wBAAA;AAAA,kBACN,aAAa,KACT,GAAA,EAAE,OAAS,EAAA,KAAA,EAAO,OAClB,GAAA;AAAA;AAAA,iBACN;AACA,gBAAS,QAAA,CAAA,sBAAA,CAAuB,IAAI,QAAQ,CAAA;AAAA;AAC9C;AACF,WACF;AAAA,UACA;AAAA,SACD,CAAG,EAAA;AACF,UAAA,IAAI,CAAC,SAAW,EAAA;AACd,YAAY,SAAA,GAAA,IAAA;AACZ,YAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,kCAAkC,CAAA;AAAA;AAE5D,UAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA;AAC1B,eACO,KAAO,EAAA;AACd,QAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA,OACtB,SAAA;AACA,QAAA,IAAI,SAAW,EAAA;AACb,UAAY,SAAA,GAAA,KAAA;AACZ,UAAG,IAAA,OAAA,EAAgB,MAAA,CAAA,IAAA,CAAK,+BAA+B,CAAA;AAAA;AAEzD,QAAA,UAAA,CAAW,KAAM,EAAA;AAAA;AACnB;AACF,GACD,CAAA;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"restartWorker.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/restartWorker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlE,wBAAsB,aAAa,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;CAC5B,0BA6DF"}
1
+ {"version":3,"file":"restartWorker.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/restartWorker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D,OAAO,EAAE,cAAc,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlE,wBAAsB,aAAa,CAAC,EAChC,MAAM,EACN,mBAAmB,EACnB,WAAW,EACX,UAAU,GACX,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;CAC5B,0BA8DF"}
@@ -42,7 +42,8 @@ async function restartWorker({
42
42
  workerData: {
43
43
  hmrPort: workerHmrChannel.port2,
44
44
  resolvedConfig: serializedDevServerConfig(server.config),
45
- userOptions: serializedOptions(userOptions, autoDiscoveredFiles)
45
+ userOptions: serializedOptions(userOptions, autoDiscoveredFiles),
46
+ serverActions: autoDiscoveredFiles.serverActions
46
47
  },
47
48
  transferList: [workerHmrChannel.port2]
48
49
  });
@@ -1 +1 @@
1
- {"version":3,"file":"restartWorker.js","sources":["../../../plugin/react-client/restartWorker.ts"],"sourcesContent":["import type { ResolvedUserOptions } from \"../../types.js\";\n\nimport type { ViteDevServer } from \"vite\";\nimport type { AutoDiscoveredFiles } from \"../../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { serializedDevServerConfig } from \"../helpers/serializeUserOptions.js\";\nimport { serializedOptions } from \"../helpers/serializeUserOptions.js\";\nimport { MessageChannel, type Worker } from \"node:worker_threads\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\n\nlet currentWorker: Worker | null = null;\nlet isRestarting = false;\n\nexport async function restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n } :{\n server: ViteDevServer,\n autoDiscoveredFiles: AutoDiscoveredFiles,\n userOptions: ResolvedUserOptions,\n hmrChannel: MessageChannel,\n }) {\n if (isRestarting) {\n return currentWorker;\n }\n isRestarting = true;\n \n try {\n // Terminate the current worker if it exists\n if (currentWorker) {\n currentWorker.removeAllListeners();\n currentWorker = null;\n }\n \n const routeCount = autoDiscoveredFiles.urlMap.size;\n const hmrBuffer = 20; // Buffer for HMR and other operations\n const maxListeners = routeCount + hmrBuffer;\n\n // Create a new MessageChannel for this worker\n const workerHmrChannel = new MessageChannel();\n \n // Forward messages from the plugin's HMR channel to the worker's channel\n hmrChannel.port1.addEventListener('message', (event: Event) => {\n workerHmrChannel.port1.postMessage((event as MessageEvent).data);\n });\n \n const workerResult = await createWorker({\n projectRoot: server.config.root,\n workerPath: userOptions.rscWorkerPath,\n reverseCondition: \"react-server\",\n currentCondition: \"react-client\",\n maxListeners: maxListeners,\n envPrefix:\n typeof server.config.envPrefix === \"string\"\n ? server.config.envPrefix\n : Array.isArray(server.config.envPrefix)\n ? server.config.envPrefix[0]\n : DEFAULT_CONFIG.ENV_PREFIX,\n workerData: {\n hmrPort: workerHmrChannel.port2,\n resolvedConfig: serializedDevServerConfig(server.config),\n userOptions: serializedOptions(userOptions, autoDiscoveredFiles),\n },\n transferList: [workerHmrChannel.port2],\n });\n \n if (workerResult.type === \"success\") {\n currentWorker = workerResult.worker;\n if(userOptions.verbose) server.config.logger.info(\n `[react-client] Set max listeners to ${maxListeners} for ${routeCount} routes`\n );\n } else if (workerResult.type === \"error\") {\n server.config.logger.error(\"Failed to start rsc-worker\", {\n error: workerResult.error,\n });\n throw workerResult.error;\n }\n } finally {\n isRestarting = false;\n }\n \n return currentWorker;\n}"],"names":[],"mappings":";;;;;;;;;;AAUA,IAAI,aAA+B,GAAA,IAAA;AACnC,IAAI,YAAe,GAAA,KAAA;AAEnB,eAAsB,aAAc,CAAA;AAAA,EAChC,MAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAKG,EAAA;AACD,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,OAAA,aAAA;AAAA;AAET,EAAe,YAAA,GAAA,IAAA;AAEf,EAAI,IAAA;AAEF,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,aAAA,CAAc,kBAAmB,EAAA;AACjC,MAAgB,aAAA,GAAA,IAAA;AAAA;AAGlB,IAAM,MAAA,UAAA,GAAa,oBAAoB,MAAO,CAAA,IAAA;AAC9C,IAAA,MAAM,SAAY,GAAA,EAAA;AAClB,IAAA,MAAM,eAAe,UAAa,GAAA,SAAA;AAGlC,IAAM,MAAA,gBAAA,GAAmB,IAAI,cAAe,EAAA;AAG5C,IAAA,UAAA,CAAW,KAAM,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,KAAiB,KAAA;AAC7D,MAAiB,gBAAA,CAAA,KAAA,CAAM,WAAa,CAAA,KAAA,CAAuB,IAAI,CAAA;AAAA,KAChE,CAAA;AAED,IAAM,MAAA,YAAA,GAAe,MAAM,YAAa,CAAA;AAAA,MACtC,WAAA,EAAa,OAAO,MAAO,CAAA,IAAA;AAAA,MAC3B,YAAY,WAAY,CAAA,aAAA;AAAA,MACxB,gBAAkB,EAAA,cAAA;AAAA,MAClB,gBAAkB,EAAA,cAAA;AAAA,MAClB,YAAA;AAAA,MACA,SAAA,EACE,OAAO,MAAO,CAAA,MAAA,CAAO,cAAc,QAC/B,GAAA,MAAA,CAAO,OAAO,SACd,GAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,MAAA,CAAO,SAAS,CACrC,GAAA,MAAA,CAAO,OAAO,SAAU,CAAA,CAAC,IACzB,cAAe,CAAA,UAAA;AAAA,MACrB,UAAY,EAAA;AAAA,QACV,SAAS,gBAAiB,CAAA,KAAA;AAAA,QAC1B,cAAA,EAAgB,yBAA0B,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,QACvD,WAAA,EAAa,iBAAkB,CAAA,WAAA,EAAa,mBAAmB;AAAA,OACjE;AAAA,MACA,YAAA,EAAc,CAAC,gBAAA,CAAiB,KAAK;AAAA,KACtC,CAAA;AAED,IAAI,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACnC,MAAA,aAAA,GAAgB,YAAa,CAAA,MAAA;AAC7B,MAAA,IAAG,WAAY,CAAA,OAAA,EAAgB,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,IAAA;AAAA,QAC3C,CAAA,oCAAA,EAAuC,YAAY,CAAA,KAAA,EAAQ,UAAU,CAAA,OAAA;AAAA,OACvE;AAAA,KACF,MAAA,IAAW,YAAa,CAAA,IAAA,KAAS,OAAS,EAAA;AACxC,MAAO,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,KAAA,CAAM,4BAA8B,EAAA;AAAA,QACvD,OAAO,YAAa,CAAA;AAAA,OACrB,CAAA;AACD,MAAA,MAAM,YAAa,CAAA,KAAA;AAAA;AACrB,GACA,SAAA;AACA,IAAe,YAAA,GAAA,KAAA;AAAA;AAGjB,EAAO,OAAA,aAAA;AACX;;;;"}
1
+ {"version":3,"file":"restartWorker.js","sources":["../../../plugin/react-client/restartWorker.ts"],"sourcesContent":["import type { ResolvedUserOptions } from \"../../types.js\";\n\nimport type { ViteDevServer } from \"vite\";\nimport type { AutoDiscoveredFiles } from \"../../types.js\";\nimport { createWorker } from \"../worker/createWorker.js\";\nimport { serializedDevServerConfig } from \"../helpers/serializeUserOptions.js\";\nimport { serializedOptions } from \"../helpers/serializeUserOptions.js\";\nimport { MessageChannel, type Worker } from \"node:worker_threads\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\n\nlet currentWorker: Worker | null = null;\nlet isRestarting = false;\n\nexport async function restartWorker({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n } :{\n server: ViteDevServer,\n autoDiscoveredFiles: AutoDiscoveredFiles,\n userOptions: ResolvedUserOptions,\n hmrChannel: MessageChannel,\n }) {\n if (isRestarting) {\n return currentWorker;\n }\n isRestarting = true;\n \n try {\n // Terminate the current worker if it exists\n if (currentWorker) {\n currentWorker.removeAllListeners();\n currentWorker = null;\n }\n \n const routeCount = autoDiscoveredFiles.urlMap.size;\n const hmrBuffer = 20; // Buffer for HMR and other operations\n const maxListeners = routeCount + hmrBuffer;\n\n // Create a new MessageChannel for this worker\n const workerHmrChannel = new MessageChannel();\n \n // Forward messages from the plugin's HMR channel to the worker's channel\n hmrChannel.port1.addEventListener('message', (event: Event) => {\n workerHmrChannel.port1.postMessage((event as MessageEvent).data);\n });\n \n const workerResult = await createWorker({\n projectRoot: server.config.root,\n workerPath: userOptions.rscWorkerPath,\n reverseCondition: \"react-server\",\n currentCondition: \"react-client\",\n maxListeners: maxListeners,\n envPrefix:\n typeof server.config.envPrefix === \"string\"\n ? server.config.envPrefix\n : Array.isArray(server.config.envPrefix)\n ? server.config.envPrefix[0]\n : DEFAULT_CONFIG.ENV_PREFIX,\n workerData: {\n hmrPort: workerHmrChannel.port2,\n resolvedConfig: serializedDevServerConfig(server.config),\n userOptions: serializedOptions(userOptions, autoDiscoveredFiles),\n serverActions: autoDiscoveredFiles.serverActions,\n },\n transferList: [workerHmrChannel.port2],\n });\n \n if (workerResult.type === \"success\") {\n currentWorker = workerResult.worker;\n if(userOptions.verbose) server.config.logger.info(\n `[react-client] Set max listeners to ${maxListeners} for ${routeCount} routes`\n );\n } else if (workerResult.type === \"error\") {\n server.config.logger.error(\"Failed to start rsc-worker\", {\n error: workerResult.error,\n });\n throw workerResult.error;\n }\n } finally {\n isRestarting = false;\n }\n \n return currentWorker;\n}"],"names":[],"mappings":";;;;;;;;;;AAUA,IAAI,aAA+B,GAAA,IAAA;AACnC,IAAI,YAAe,GAAA,KAAA;AAEnB,eAAsB,aAAc,CAAA;AAAA,EAChC,MAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAKG,EAAA;AACD,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,OAAA,aAAA;AAAA;AAET,EAAe,YAAA,GAAA,IAAA;AAEf,EAAI,IAAA;AAEF,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,aAAA,CAAc,kBAAmB,EAAA;AACjC,MAAgB,aAAA,GAAA,IAAA;AAAA;AAGlB,IAAM,MAAA,UAAA,GAAa,oBAAoB,MAAO,CAAA,IAAA;AAC9C,IAAA,MAAM,SAAY,GAAA,EAAA;AAClB,IAAA,MAAM,eAAe,UAAa,GAAA,SAAA;AAGlC,IAAM,MAAA,gBAAA,GAAmB,IAAI,cAAe,EAAA;AAG5C,IAAA,UAAA,CAAW,KAAM,CAAA,gBAAA,CAAiB,SAAW,EAAA,CAAC,KAAiB,KAAA;AAC7D,MAAiB,gBAAA,CAAA,KAAA,CAAM,WAAa,CAAA,KAAA,CAAuB,IAAI,CAAA;AAAA,KAChE,CAAA;AAED,IAAM,MAAA,YAAA,GAAe,MAAM,YAAa,CAAA;AAAA,MACtC,WAAA,EAAa,OAAO,MAAO,CAAA,IAAA;AAAA,MAC3B,YAAY,WAAY,CAAA,aAAA;AAAA,MACxB,gBAAkB,EAAA,cAAA;AAAA,MAClB,gBAAkB,EAAA,cAAA;AAAA,MAClB,YAAA;AAAA,MACA,SAAA,EACE,OAAO,MAAO,CAAA,MAAA,CAAO,cAAc,QAC/B,GAAA,MAAA,CAAO,OAAO,SACd,GAAA,KAAA,CAAM,QAAQ,MAAO,CAAA,MAAA,CAAO,SAAS,CACrC,GAAA,MAAA,CAAO,OAAO,SAAU,CAAA,CAAC,IACzB,cAAe,CAAA,UAAA;AAAA,MACrB,UAAY,EAAA;AAAA,QACV,SAAS,gBAAiB,CAAA,KAAA;AAAA,QAC1B,cAAA,EAAgB,yBAA0B,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,QACvD,WAAA,EAAa,iBAAkB,CAAA,WAAA,EAAa,mBAAmB,CAAA;AAAA,QAC/D,eAAe,mBAAoB,CAAA;AAAA,OACrC;AAAA,MACA,YAAA,EAAc,CAAC,gBAAA,CAAiB,KAAK;AAAA,KACtC,CAAA;AAED,IAAI,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACnC,MAAA,aAAA,GAAgB,YAAa,CAAA,MAAA;AAC7B,MAAA,IAAG,WAAY,CAAA,OAAA,EAAgB,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,IAAA;AAAA,QAC3C,CAAA,oCAAA,EAAuC,YAAY,CAAA,KAAA,EAAQ,UAAU,CAAA,OAAA;AAAA,OACvE;AAAA,KACF,MAAA,IAAW,YAAa,CAAA,IAAA,KAAS,OAAS,EAAA;AACxC,MAAO,MAAA,CAAA,MAAA,CAAO,MAAO,CAAA,KAAA,CAAM,4BAA8B,EAAA;AAAA,QACvD,OAAO,YAAa,CAAA;AAAA,OACrB,CAAA;AACD,MAAA,MAAM,YAAa,CAAA,KAAA;AAAA;AACrB,GACA,SAAA;AACA,IAAe,YAAA,GAAA,KAAA;AAAA;AAGjB,EAAO,OAAA,aAAA;AACX;;;;"}
@@ -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,iBA0JA"}
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,iBAyJA"}
@@ -24,13 +24,12 @@ async function configureReactServer({
24
24
  Html: _UserHtmlComponent,
25
25
  onEvent,
26
26
  // remove these
27
- moduleBaseURL: _moduleBaseURL,
28
- projectRoot: _projectRoot,
29
27
  ...handlerUserOptions
30
28
  } = _userOptions;
31
29
  const handlerOptions = {
32
30
  ...handlerUserOptions,
33
31
  moduleBaseURL: server.config.base,
32
+ moduleBasePath: server.config.base,
34
33
  projectRoot: server.config.root,
35
34
  Html: React__default.Fragment,
36
35
  onEvent: createEventHandler(onEvent),
@@ -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 moduleBaseURL: _moduleBaseURL,\n projectRoot: _projectRoot,\n ...handlerUserOptions\n } = _userOptions;\n const handlerOptions = {\n ...handlerUserOptions,\n moduleBaseURL: 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 // Handle server actions\n if (info.isServerActionRequest) {\n return handleServerAction(req, res, server, handlerOptions);\n }\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 // Handle server actions\n if (info.isServerActionRequest) {\n return handleServerAction(req, res, server, handlerOptions);\n }\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 +1 @@
1
- {"version":3,"file":"handleServerAction.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/handleServerAction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE5D,wBAAsB,kBAAkB,CACtC,CAAC,SAAS,WAAW,EACrB,SAAS,SAAS,YAAY,EAE9B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,iBA8JlD"}
1
+ {"version":3,"file":"handleServerAction.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/handleServerAction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE5D,wBAAsB,kBAAkB,CACtC,CAAC,SAAS,WAAW,EACrB,SAAS,SAAS,YAAY,EAE9B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,iBA4IlD"}
@@ -122,22 +122,6 @@ async function handleServerAction(req, res, server, handlerOptions) {
122
122
  pipe(res);
123
123
  } catch (error) {
124
124
  logError(error, server.config.logger);
125
- res.statusCode = 500;
126
- res.setHeader("Content-Type", "text/x-component; charset=utf-8");
127
- const { pipe } = ReactDOMServer.renderToPipeableStream(
128
- {
129
- type: "server-action-response",
130
- error: toError(error).message
131
- },
132
- handlerOptions.moduleBasePath,
133
- {
134
- onError(error2) {
135
- logError(error2, server.config.logger);
136
- res.end();
137
- }
138
- }
139
- );
140
- pipe(res);
141
125
  }
142
126
  }
143
127
 
@@ -1 +1 @@
1
- {"version":3,"file":"handleServerAction.js","sources":["../../../plugin/react-server/handleServerAction.ts"],"sourcesContent":["import type { ViteDevServer } from \"vite\";\nimport type {\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { logError, toError } from \"../error/toError.js\";\nimport { join } from \"path\";\nimport { ReactDOMServer } from \"../vendor/vendor.server.js\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\n\nexport async function handleServerAction<\n T extends PagePropOpt,\n InlineCss extends InlineCssOpt\n>(\n req: IncomingMessage,\n res: ServerResponse,\n server: ViteDevServer,\n handlerOptions: ResolvedUserOptions<T, InlineCss>\n) {\n try {\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Handling server action request at ${req.url}`\n );\n }\n\n // Parse the request body - handle both formats:\n // 1. Direct args array: [\"arg1\", \"arg2\"]\n // 2. Object with id and args: { id: \"path/to/action\", args: [\"arg1\", \"arg2\"] }\n let id: string;\n let args: unknown[];\n try {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk);\n }\n const body = Buffer.concat(chunks).toString();\n if (handlerOptions.verbose) {\n server.config.logger.info(`[react-server] Request body: ${body}`);\n }\n\n const parsed = JSON.parse(body);\n if (Array.isArray(parsed)) {\n // Format 1: Direct args array\n args = parsed;\n // Get the action ID from the request URL\n id = req.url?.split(\"?\")[0] ?? \"\";\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Using action ID from URL: ${id}`\n );\n }\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 } catch (error: unknown) {\n const err = toError(error);\n throw new Error(`Failed to parse server action request`, {\n cause: err,\n });\n }\n\n if (!id) {\n throw new Error(\"Server action ID is required\");\n }\n\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Server action request for ${id} with args: ${JSON.stringify(\n args\n )}`\n );\n }\n\n // Parse the server action ID to get the file path and export name\n const [filePath, exportName] = id.split(\"#\");\n if (!filePath || !exportName) {\n throw new Error(\n `Invalid server action ID format: ${id}. Expected format: \"path/to/file.ts#exportName\"`\n );\n }\n\n // Convert the server action ID to a file path\n const actionPath = filePath.startsWith(\"/\") ? filePath.slice(1) : filePath;\n const fullPath = join(handlerOptions.projectRoot, actionPath);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Resolved file path: id=${id}, actionPath=${actionPath}, projectRoot=${handlerOptions.projectRoot}, filePath=${fullPath}, exportName=${exportName}`\n );\n }\n\n // Load the server action module\n if (handlerOptions.verbose) {\n server.config.logger.info(`[react-server] Loading module: ${fullPath}`);\n }\n const module = await server.ssrLoadModule(fullPath);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Looking for action: ${exportName} in module with exports: ${Object.keys(\n module\n ).join(\", \")}`\n );\n }\n const action = module[exportName];\n\n if (typeof action !== \"function\") {\n if (handlerOptions.verbose) {\n server.config.logger.error(\n `[react-server] Action not found: ${exportName} in module with exports: ${Object.keys(\n module\n ).join(\", \")}`\n );\n }\n throw new Error(`Server action not found: ${id}`);\n }\n\n // Execute the server action\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Executing action with args: ${JSON.stringify(args)}`\n );\n }\n const result = await action(...args);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Action completed successfully with result: ${JSON.stringify(\n result\n )}`\n );\n }\n\n // Send the response\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n\n const { pipe } = ReactDOMServer.renderToPipeableStream(\n {\n type: \"server-action-response\",\n returnValue: result,\n },\n handlerOptions.moduleBasePath,\n {\n onError(error: Error) {\n logError(error, server.config.logger);\n res.statusCode = 500;\n res.end();\n },\n }\n );\n\n pipe(res);\n } catch (error) {\n logError(error, server.config.logger);\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n\n const { pipe } = ReactDOMServer.renderToPipeableStream(\n {\n type: \"server-action-response\",\n error: toError(error).message,\n },\n handlerOptions.moduleBasePath,\n {\n onError(error: Error) {\n logError(error, server.config.logger);\n res.end();\n },\n }\n );\n\n pipe(res);\n }\n}\n"],"names":["error"],"mappings":"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"}
1
+ {"version":3,"file":"handleServerAction.js","sources":["../../../plugin/react-server/handleServerAction.ts"],"sourcesContent":["import type { ViteDevServer } from \"vite\";\nimport type {\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { logError, toError } from \"../error/toError.js\";\nimport { join } from \"path\";\nimport { ReactDOMServer } from \"../vendor/vendor.server.js\";\nimport type { IncomingMessage, ServerResponse } from \"http\";\n\nexport async function handleServerAction<\n T extends PagePropOpt,\n InlineCss extends InlineCssOpt\n>(\n req: IncomingMessage,\n res: ServerResponse,\n server: ViteDevServer,\n handlerOptions: ResolvedUserOptions<T, InlineCss>\n) {\n try {\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Handling server action request at ${req.url}`\n );\n }\n\n // Parse the request body - handle both formats:\n // 1. Direct args array: [\"arg1\", \"arg2\"]\n // 2. Object with id and args: { id: \"path/to/action\", args: [\"arg1\", \"arg2\"] }\n let id: string;\n let args: unknown[];\n try {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n chunks.push(chunk);\n }\n const body = Buffer.concat(chunks).toString();\n if (handlerOptions.verbose) {\n server.config.logger.info(`[react-server] Request body: ${body}`);\n }\n\n const parsed = JSON.parse(body);\n if (Array.isArray(parsed)) {\n // Format 1: Direct args array\n args = parsed;\n // Get the action ID from the request URL\n id = req.url?.split(\"?\")[0] ?? \"\";\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Using action ID from URL: ${id}`\n );\n }\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 } catch (error: unknown) {\n const err = toError(error);\n throw new Error(`Failed to parse server action request`, {\n cause: err,\n });\n }\n\n if (!id) {\n throw new Error(\"Server action ID is required\");\n }\n\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Server action request for ${id} with args: ${JSON.stringify(\n args\n )}`\n );\n }\n\n // Parse the server action ID to get the file path and export name\n const [filePath, exportName] = id.split(\"#\");\n if (!filePath || !exportName) {\n throw new Error(\n `Invalid server action ID format: ${id}. Expected format: \"path/to/file.ts#exportName\"`\n );\n }\n\n // Convert the server action ID to a file path\n const actionPath = filePath.startsWith(\"/\") ? filePath.slice(1) : filePath;\n const fullPath = join(handlerOptions.projectRoot, actionPath);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Resolved file path: id=${id}, actionPath=${actionPath}, projectRoot=${handlerOptions.projectRoot}, filePath=${fullPath}, exportName=${exportName}`\n );\n }\n\n // Load the server action module\n if (handlerOptions.verbose) {\n server.config.logger.info(`[react-server] Loading module: ${fullPath}`);\n }\n const module = await server.ssrLoadModule(fullPath);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Looking for action: ${exportName} in module with exports: ${Object.keys(\n module\n ).join(\", \")}`\n );\n }\n const action = module[exportName];\n\n if (typeof action !== \"function\") {\n if (handlerOptions.verbose) {\n server.config.logger.error(\n `[react-server] Action not found: ${exportName} in module with exports: ${Object.keys(\n module\n ).join(\", \")}`\n );\n }\n throw new Error(`Server action not found: ${id}`);\n }\n\n // Execute the server action\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Executing action with args: ${JSON.stringify(args)}`\n );\n }\n const result = await action(...args);\n if (handlerOptions.verbose) {\n server.config.logger.info(\n `[react-server] Action completed successfully with result: ${JSON.stringify(\n result\n )}`\n );\n }\n\n // Send the response\n res.setHeader(\"Content-Type\", \"text/x-component; charset=utf-8\");\n\n const { pipe } = ReactDOMServer.renderToPipeableStream(\n {\n type: \"server-action-response\",\n returnValue: result\n },\n handlerOptions.moduleBasePath,\n {\n onError(error: Error) {\n logError(error, server.config.logger);\n res.statusCode = 500;\n res.end();\n },\n }\n );\n\n pipe(res);\n } catch (error) {\n logError(error, server.config.logger);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBuildLoader.d.ts","sourceRoot":"","sources":["../../../plugin/react-static/createBuildLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAI3C,MAAM,WAAW,kBAAkB,CACjC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY;IAE7C,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,EAAE,mBAAmB,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,CAAC,SAAS,WAAW,GAAG,WAAW,EACnC,SAAS,SAAS,YAAY,GAAG,YAAY,EAE7C,EACE,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,GACf,EAAE,kBAAkB,CAAC,CAAC,EAAE,SAAS,CAAC,EACnC,MAAM,EAAE,YAAY,gBAOkB,MAAM,mBAgJ7C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createBuildLoader.js","sources":["../../../plugin/react-static/createBuildLoader.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport type {\n InlineCssOpt,\n PagePropOpt,\n ResolvedUserConfig,\n ResolvedUserOptions,\n} from \"../../server.js\";\nimport type { Manifest } from \"vite\";\nimport { getModuleRef } from \"../helpers/moduleRefs.js\";\nimport type { OutputBundle } from \"rollup\";\nimport { temporaryReferences } from \"./temporaryReferences.js\";\nimport { toError } from \"../error/toError.js\";\n\nexport interface BuildLoaderOptions<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n> {\n userConfig: ResolvedUserConfig;\n userOptions: ResolvedUserOptions<T, InlineCSS>;\n serverManifest: Manifest;\n clientManifest: Manifest;\n staticManifest: Manifest;\n}\n\n/**\n * Creates a loader function for handling module resolution during build.\n *\n * The loader handles the following strategy:\n * - For client components: Use client manifest and client.browser.js\n * - For server components: Use server manifest and server.js\n * - For static assets: Use static manifest\n */\nexport async function createBuildLoader<\n T extends PagePropOpt = PagePropOpt,\n InlineCSS extends InlineCssOpt = InlineCssOpt\n>(\n {\n userOptions,\n serverManifest,\n clientManifest,\n staticManifest,\n }: BuildLoaderOptions<T, InlineCSS>,\n bundle: OutputBundle\n) {\n const manifestKeys = Object.keys(serverManifest);\n if (!manifestKeys.length) {\n throw new Error(\"Server manifest is empty\");\n }\n\n return async function buildLoader(id: string) {\n const [withoutQuery, query] = id.split(\"?\", 2);\n const [normalizedKey, normalizedValue] =\n userOptions.normalizer(withoutQuery);\n const moduleRef = getModuleRef(id);\n\n // Check if we have a temporary reference (cached module)\n if (temporaryReferences?.has(moduleRef)) {\n const mod = temporaryReferences.get(moduleRef);\n if (typeof mod === \"object\" && mod !== null && \"error\" in mod) {\n // ignore it\n } else {\n return mod;\n }\n }\n\n try {\n // For inline modules, handle them directly\n if (query === \"inline\") {\n const startsWithMarker = normalizedKey.split(\"-\")[0];\n const serverChunk =\n bundle[serverManifest[normalizedValue]?.file] ??\n bundle[staticManifest[normalizedValue]?.file] ??\n bundle[clientManifest[normalizedValue]?.file] ??\n bundle[withoutQuery] ??\n bundle[normalizedValue] ??\n Object.entries(bundle).find(\n ([, value]) => value.name === normalizedValue\n )?.[1] ??\n Object.entries(bundle).find(([_key]) =>\n _key.startsWith(startsWithMarker)\n )?.[1];\n\n if (serverChunk) {\n if (serverChunk.type === \"asset\") {\n // For CSS files, ensure we're in the React Server environment\n if (userOptions.autoDiscover.jsonPattern(normalizedValue)) {\n const jsonContent = serverChunk.source;\n if (typeof jsonContent === \"string\") {\n return { default: JSON.parse(jsonContent) };\n }\n } else if (userOptions.autoDiscover.cssPattern(normalizedValue)) {\n const cssContent = serverChunk.source;\n if (typeof cssContent === \"string\") {\n return { default: cssContent };\n }\n }\n return { default: serverChunk.source };\n } else if (\"code\" in serverChunk) {\n return { default: serverChunk.code };\n }\n }\n console.warn(\"Could not find inline module for: \" + normalizedValue);\n return null;\n }\n\n // Determine if this is a client component\n const isClientComponent =\n userOptions.autoDiscover.clientComponents(normalizedValue);\n const isServerAction =\n userOptions.autoDiscover.serverFunctions(normalizedValue);\n const isPage = userOptions.autoDiscover.pagePattern(normalizedValue);\n const isProps = userOptions.autoDiscover.propsPattern(normalizedValue);\n\n // For client components, use client manifest\n if (isClientComponent) {\n const clientEntry = clientManifest[normalizedValue];\n if (clientEntry) {\n try {\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.client,\n clientEntry.file\n )\n );\n temporaryReferences?.set(moduleRef, module);\n return module;\n } catch (error) {\n const err = toError(error);\n console.warn(\"Error loading client module:\", err);\n temporaryReferences?.delete(moduleRef);\n throw err;\n }\n }\n }\n\n // For server components and actions, use server manifest\n if (isServerAction || isPage || isProps) {\n const serverEntry = serverManifest[normalizedValue];\n if (serverEntry) {\n try {\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.server,\n serverEntry.file\n )\n );\n temporaryReferences?.set(moduleRef, module);\n return module;\n } catch (error) {\n const err = toError(error);\n console.warn(\"Error loading server module:\", err);\n temporaryReferences?.delete(moduleRef);\n throw err;\n }\n }\n }\n\n // For static assets, use static manifest\n const staticEntry = staticManifest[normalizedValue];\n if (staticEntry) {\n try {\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static,\n staticEntry.file\n )\n );\n temporaryReferences?.set(moduleRef, module);\n return module;\n } catch (error) {\n const err = toError(error);\n console.warn(\"Error loading static module:\", err);\n temporaryReferences?.delete(moduleRef);\n throw err;\n }\n }\n\n throw new Error(`Module ${normalizedValue} not found during build`);\n } catch (error) {\n const emptyExports = {\n error: error instanceof Error ? error : new Error(String(error)),\n id: id,\n };\n temporaryReferences?.delete(moduleRef);\n return emptyExports;\n }\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;AAgCA,eAAsB,iBAIpB,CAAA;AAAA,EACE,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EACA,MACA,EAAA;AACA,EAAM,MAAA,YAAA,GAAe,MAAO,CAAA,IAAA,CAAK,cAAc,CAAA;AAC/C,EAAI,IAAA,CAAC,aAAa,MAAQ,EAAA;AACxB,IAAM,MAAA,IAAI,MAAM,0BAA0B,CAAA;AAAA;AAG5C,EAAO,OAAA,eAAe,YAAY,EAAY,EAAA;AAC5C,IAAA,MAAM,CAAC,YAAc,EAAA,KAAK,IAAI,EAAG,CAAA,KAAA,CAAM,KAAK,CAAC,CAAA;AAC7C,IAAA,MAAM,CAAC,aAAe,EAAA,eAAe,CACnC,GAAA,WAAA,CAAY,WAAW,YAAY,CAAA;AACrC,IAAM,MAAA,SAAA,GAAY,aAAa,EAAE,CAAA;AAGjC,IAAI,IAAA,mBAAA,EAAqB,GAAI,CAAA,SAAS,CAAG,EAAA;AACvC,MAAM,MAAA,GAAA,GAAM,mBAAoB,CAAA,GAAA,CAAI,SAAS,CAAA;AAC7C,MAAA,IAAI,OAAO,GAAQ,KAAA,QAAA,IAAY,GAAQ,KAAA,IAAA,IAAQ,WAAW,GAAK,EAAA,CAExD,MAAA;AACL,QAAO,OAAA,GAAA;AAAA;AACT;AAGF,IAAI,IAAA;AAEF,MAAA,IAAI,UAAU,QAAU,EAAA;AACtB,QAAA,MAAM,gBAAmB,GAAA,aAAA,CAAc,KAAM,CAAA,GAAG,EAAE,CAAC,CAAA;AACnD,QAAA,MAAM,WACJ,GAAA,MAAA,CAAO,cAAe,CAAA,eAAe,CAAG,EAAA,IAAI,CAC5C,IAAA,MAAA,CAAO,cAAe,CAAA,eAAe,CAAG,EAAA,IAAI,CAC5C,IAAA,MAAA,CAAO,cAAe,CAAA,eAAe,CAAG,EAAA,IAAI,CAC5C,IAAA,MAAA,CAAO,YAAY,CAAA,IACnB,MAAO,CAAA,eAAe,CACtB,IAAA,MAAA,CAAO,OAAQ,CAAA,MAAM,CAAE,CAAA,IAAA;AAAA,UACrB,CAAC,GAAG,KAAK,CAAA,KAAM,MAAM,IAAS,KAAA;AAAA,YAC5B,CAAC,CAAA,IACL,MAAO,CAAA,OAAA,CAAQ,MAAM,CAAE,CAAA,IAAA;AAAA,UAAK,CAAC,CAAC,IAAI,CAChC,KAAA,IAAA,CAAK,WAAW,gBAAgB;AAAA,YAC9B,CAAC,CAAA;AAEP,QAAA,IAAI,WAAa,EAAA;AACf,UAAI,IAAA,WAAA,CAAY,SAAS,OAAS,EAAA;AAEhC,YAAA,IAAI,WAAY,CAAA,YAAA,CAAa,WAAY,CAAA,eAAe,CAAG,EAAA;AACzD,cAAA,MAAM,cAAc,WAAY,CAAA,MAAA;AAChC,cAAI,IAAA,OAAO,gBAAgB,QAAU,EAAA;AACnC,gBAAA,OAAO,EAAE,OAAA,EAAS,IAAK,CAAA,KAAA,CAAM,WAAW,CAAE,EAAA;AAAA;AAC5C,aACS,MAAA,IAAA,WAAA,CAAY,YAAa,CAAA,UAAA,CAAW,eAAe,CAAG,EAAA;AAC/D,cAAA,MAAM,aAAa,WAAY,CAAA,MAAA;AAC/B,cAAI,IAAA,OAAO,eAAe,QAAU,EAAA;AAClC,gBAAO,OAAA,EAAE,SAAS,UAAW,EAAA;AAAA;AAC/B;AAEF,YAAO,OAAA,EAAE,OAAS,EAAA,WAAA,CAAY,MAAO,EAAA;AAAA,WACvC,MAAA,IAAW,UAAU,WAAa,EAAA;AAChC,YAAO,OAAA,EAAE,OAAS,EAAA,WAAA,CAAY,IAAK,EAAA;AAAA;AACrC;AAEF,QAAQ,OAAA,CAAA,IAAA,CAAK,uCAAuC,eAAe,CAAA;AACnE,QAAO,OAAA,IAAA;AAAA;AAIT,MAAA,MAAM,iBACJ,GAAA,WAAA,CAAY,YAAa,CAAA,gBAAA,CAAiB,eAAe,CAAA;AAC3D,MAAA,MAAM,cACJ,GAAA,WAAA,CAAY,YAAa,CAAA,eAAA,CAAgB,eAAe,CAAA;AAC1D,MAAA,MAAM,MAAS,GAAA,WAAA,CAAY,YAAa,CAAA,WAAA,CAAY,eAAe,CAAA;AACnE,MAAA,MAAM,OAAU,GAAA,WAAA,CAAY,YAAa,CAAA,YAAA,CAAa,eAAe,CAAA;AAGrE,MAAA,IAAI,iBAAmB,EAAA;AACrB,QAAM,MAAA,WAAA,GAAc,eAAe,eAAe,CAAA;AAClD,QAAA,IAAI,WAAa,EAAA;AACf,UAAI,IAAA;AACF,YAAM,MAAA,MAAA,GAAS,MAAM,OACnB,IAAA;AAAA,cACE,WAAY,CAAA,WAAA;AAAA,cACZ,YAAY,KAAM,CAAA,MAAA;AAAA,cAClB,YAAY,KAAM,CAAA,MAAA;AAAA,cAClB,WAAY,CAAA;AAAA,aACd,CAAA;AAEF,YAAqB,mBAAA,EAAA,GAAA,CAAI,WAAW,MAAM,CAAA;AAC1C,YAAO,OAAA,MAAA;AAAA,mBACA,KAAO,EAAA;AACd,YAAM,MAAA,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,YAAQ,OAAA,CAAA,IAAA,CAAK,gCAAgC,GAAG,CAAA;AAChD,YAAA,mBAAA,EAAqB,OAAO,SAAS,CAAA;AACrC,YAAM,MAAA,GAAA;AAAA;AACR;AACF;AAIF,MAAI,IAAA,cAAA,IAAkB,UAAU,OAAS,EAAA;AACvC,QAAM,MAAA,WAAA,GAAc,eAAe,eAAe,CAAA;AAClD,QAAA,IAAI,WAAa,EAAA;AACf,UAAI,IAAA;AACF,YAAM,MAAA,MAAA,GAAS,MAAM,OACnB,IAAA;AAAA,cACE,WAAY,CAAA,WAAA;AAAA,cACZ,YAAY,KAAM,CAAA,MAAA;AAAA,cAClB,YAAY,KAAM,CAAA,MAAA;AAAA,cAClB,WAAY,CAAA;AAAA,aACd,CAAA;AAEF,YAAqB,mBAAA,EAAA,GAAA,CAAI,WAAW,MAAM,CAAA;AAC1C,YAAO,OAAA,MAAA;AAAA,mBACA,KAAO,EAAA;AACd,YAAM,MAAA,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,YAAQ,OAAA,CAAA,IAAA,CAAK,gCAAgC,GAAG,CAAA;AAChD,YAAA,mBAAA,EAAqB,OAAO,SAAS,CAAA;AACrC,YAAM,MAAA,GAAA;AAAA;AACR;AACF;AAIF,MAAM,MAAA,WAAA,GAAc,eAAe,eAAe,CAAA;AAClD,MAAA,IAAI,WAAa,EAAA;AACf,QAAI,IAAA;AACF,UAAM,MAAA,MAAA,GAAS,MAAM,OACnB,IAAA;AAAA,YACE,WAAY,CAAA,WAAA;AAAA,YACZ,YAAY,KAAM,CAAA,MAAA;AAAA,YAClB,YAAY,KAAM,CAAA,MAAA;AAAA,YAClB,WAAY,CAAA;AAAA,WACd,CAAA;AAEF,UAAqB,mBAAA,EAAA,GAAA,CAAI,WAAW,MAAM,CAAA;AAC1C,UAAO,OAAA,MAAA;AAAA,iBACA,KAAO,EAAA;AACd,UAAM,MAAA,GAAA,GAAM,QAAQ,KAAK,CAAA;AACzB,UAAQ,OAAA,CAAA,IAAA,CAAK,gCAAgC,GAAG,CAAA;AAChD,UAAA,mBAAA,EAAqB,OAAO,SAAS,CAAA;AACrC,UAAM,MAAA,GAAA;AAAA;AACR;AAGF,MAAA,MAAM,IAAI,KAAA,CAAM,CAAU,OAAA,EAAA,eAAe,CAAyB,uBAAA,CAAA,CAAA;AAAA,aAC3D,KAAO,EAAA;AACd,MAAA,MAAM,YAAe,GAAA;AAAA,QACnB,KAAA,EAAO,iBAAiB,KAAQ,GAAA,KAAA,GAAQ,IAAI,KAAM,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QAC/D;AAAA,OACF;AACA,MAAA,mBAAA,EAAqB,OAAO,SAAS,CAAA;AACrC,MAAO,OAAA,YAAA;AAAA;AACT,GACF;AACF;;;;"}
@@ -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;AAyBvD,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,CAgXD"}
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;AAyBvD,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,CA6WD"}
@@ -8,7 +8,7 @@ import 'node:worker_threads';
8
8
  import { createLogger } from 'vite';
9
9
  import { resolveOptions } from '../config/resolveOptions.js';
10
10
  import { resolveUserConfig } from '../config/resolveUserConfig.js';
11
- import { createBuildLoader } from '../loader/createBuildLoader.js';
11
+ import { createBuildLoader } from './createBuildLoader.js';
12
12
  import { renderPages } from './renderPages.js';
13
13
  import { getBundleManifest } from '../helpers/getBundleManifest.js';
14
14
  import { createWorker } from '../worker/createWorker.js';
@@ -148,8 +148,7 @@ function reactStaticPlugin(options) {
148
148
  const cssFilesByPage = /* @__PURE__ */ new Map();
149
149
  const globalCssInputs = collectManifestCss(
150
150
  autoDiscoveredFiles?.staticManifest ?? {},
151
- "index.html",
152
- userOptions
151
+ "index.html"
153
152
  );
154
153
  const globalCss = /* @__PURE__ */ new Map();
155
154
  for (const [url, { page, props }] of autoDiscoveredFiles?.urlMap ?? []) {
@@ -169,8 +168,7 @@ function reactStaticPlugin(options) {
169
168
  );
170
169
  const cssInputs = collectManifestCss(
171
170
  transformedServerManifest,
172
- props ? [page, props] : page,
173
- userOptions
171
+ props ? [page, props] : page
174
172
  );
175
173
  const pageCssMap = /* @__PURE__ */ new Map();
176
174
  if (Object.keys(globalCssInputs).length > 0) {
@@ -184,16 +182,16 @@ function reactStaticPlugin(options) {
184
182
  userOptions.projectRoot,
185
183
  userOptions.build.outDir,
186
184
  userOptions.build.static,
187
- key + ".css"
185
+ key
188
186
  ),
189
187
  "utf-8"
190
188
  ) ?? "";
191
189
  }
192
190
  if (cssContent) {
193
191
  globalCss.set(
194
- value,
192
+ key,
195
193
  createCssProps({
196
- id: value,
194
+ id: key,
197
195
  code: cssContent,
198
196
  userOptions
199
197
  })
@@ -201,7 +199,7 @@ function reactStaticPlugin(options) {
201
199
  }
202
200
  }
203
201
  }
204
- for (const [, value] of Object.entries(cssInputs)) {
202
+ for (const [key, value] of Object.entries(cssInputs)) {
205
203
  try {
206
204
  const { default: cssContent } = await buildLoader(
207
205
  value + "?inline"
@@ -210,11 +208,10 @@ function reactStaticPlugin(options) {
210
208
  continue;
211
209
  }
212
210
  if (cssContent) {
213
- const cssPath = value.startsWith("/") ? value.slice(1) : value;
214
211
  pageCssMap.set(
215
- cssPath,
212
+ key,
216
213
  createCssProps({
217
- id: cssPath,
214
+ id: key,
218
215
  code: cssContent,
219
216
  userOptions
220
217
  })