vite-plugin-react-server 1.1.7 → 1.1.9

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 (143) hide show
  1. package/dist/package.json +10 -5
  2. package/dist/plugin/config/defaults.d.ts +1 -1
  3. package/dist/plugin/config/defaults.js +1 -1
  4. package/dist/plugin/config/defaults.js.map +1 -1
  5. package/dist/plugin/config/resolveAutoDiscover.d.ts +2 -0
  6. package/dist/plugin/config/resolveAutoDiscover.d.ts.map +1 -1
  7. package/dist/plugin/config/resolveAutoDiscover.js +15 -18
  8. package/dist/plugin/config/resolveAutoDiscover.js.map +1 -1
  9. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  10. package/dist/plugin/config/resolveOptions.js +4 -1
  11. package/dist/plugin/config/resolveOptions.js.map +1 -1
  12. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  13. package/dist/plugin/config/resolveUserConfig.js +64 -30
  14. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  15. package/dist/plugin/helpers/collectBundleManifestCss.d.ts +0 -6
  16. package/dist/plugin/helpers/collectBundleManifestCss.d.ts.map +1 -1
  17. package/dist/plugin/helpers/collectBundleManifestCss.js +2 -110
  18. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +2 -1
  19. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
  20. package/dist/plugin/helpers/collectViteModuleGraphCss.js +19 -18
  21. package/dist/plugin/helpers/collectViteModuleGraphCss.js.map +1 -1
  22. package/dist/plugin/helpers/createCssProps.d.ts +3 -2
  23. package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
  24. package/dist/plugin/helpers/createCssProps.js +10 -6
  25. package/dist/plugin/helpers/createCssProps.js.map +1 -1
  26. package/dist/plugin/helpers/createRscStream.d.ts.map +1 -1
  27. package/dist/plugin/helpers/createRscStream.js +37 -43
  28. package/dist/plugin/helpers/createRscStream.js.map +1 -1
  29. package/dist/plugin/helpers/formatMetrics.d.ts +4 -0
  30. package/dist/plugin/helpers/formatMetrics.d.ts.map +1 -0
  31. package/dist/plugin/helpers/formatMetrics.js +24 -0
  32. package/dist/plugin/helpers/tryManifest.d.ts.map +1 -1
  33. package/dist/plugin/helpers/tryManifest.js +0 -8
  34. package/dist/plugin/helpers/tryManifest.js.map +1 -1
  35. package/dist/plugin/html.js +1 -1
  36. package/dist/plugin/html.js.map +1 -1
  37. package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
  38. package/dist/plugin/loader/createBuildLoader.js +2 -0
  39. package/dist/plugin/loader/createBuildLoader.js.map +1 -1
  40. package/dist/plugin/metrics/formatMetrics.d.ts +4 -0
  41. package/dist/plugin/metrics/formatMetrics.d.ts.map +1 -0
  42. package/dist/plugin/metrics/formatMetrics.js +39 -0
  43. package/dist/plugin/metrics/formatMetrics.js.map +1 -0
  44. package/dist/plugin/metrics/index.d.ts +3 -0
  45. package/dist/plugin/metrics/index.d.ts.map +1 -0
  46. package/dist/plugin/metrics/index.js +1 -0
  47. package/dist/plugin/metrics.js +7 -0
  48. package/dist/plugin/metrics.js.map +1 -0
  49. package/dist/plugin/react-client/createWorkerStream.d.ts +16 -0
  50. package/dist/plugin/react-client/createWorkerStream.d.ts.map +1 -0
  51. package/dist/plugin/react-client/createWorkerStream.js +88 -0
  52. package/dist/plugin/react-client/createWorkerStream.js.map +1 -0
  53. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  54. package/dist/plugin/react-client/plugin.js +4 -1
  55. package/dist/plugin/react-client/plugin.js.map +1 -1
  56. package/dist/plugin/react-client/restartWorker.d.ts +6 -0
  57. package/dist/plugin/react-client/restartWorker.d.ts.map +1 -0
  58. package/dist/plugin/react-client/restartWorker.js +53 -0
  59. package/dist/plugin/react-client/restartWorker.js.map +1 -0
  60. package/dist/plugin/react-client/server.d.ts +5 -4
  61. package/dist/plugin/react-client/server.d.ts.map +1 -1
  62. package/dist/plugin/react-client/server.js +79 -110
  63. package/dist/plugin/react-client/server.js.map +1 -1
  64. package/dist/plugin/react-server/server.d.ts.map +1 -1
  65. package/dist/plugin/react-server/server.js +23 -28
  66. package/dist/plugin/react-server/server.js.map +1 -1
  67. package/dist/plugin/react-static/collectHtmlWorkerContent.js +1 -1
  68. package/dist/plugin/react-static/collectHtmlWorkerContent.js.map +1 -1
  69. package/dist/plugin/react-static/collectRscContent.js +1 -1
  70. package/dist/plugin/react-static/collectRscContent.js.map +1 -1
  71. package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
  72. package/dist/plugin/react-static/configurePreviewServer.js +23 -4
  73. package/dist/plugin/react-static/configurePreviewServer.js.map +1 -1
  74. package/dist/plugin/react-static/fileWriter.d.ts.map +1 -1
  75. package/dist/plugin/react-static/fileWriter.js +5 -1
  76. package/dist/plugin/react-static/fileWriter.js.map +1 -1
  77. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  78. package/dist/plugin/react-static/plugin.js +50 -33
  79. package/dist/plugin/react-static/plugin.js.map +1 -1
  80. package/dist/plugin/types.d.ts +6 -7
  81. package/dist/plugin/types.d.ts.map +1 -1
  82. package/dist/plugin/utils/callServer.d.ts +2 -0
  83. package/dist/plugin/utils/callServer.d.ts.map +1 -0
  84. package/dist/plugin/utils/callServer.js +26 -0
  85. package/dist/plugin/utils/callServer.js.map +1 -0
  86. package/dist/plugin/utils/createReactFetcher.d.ts +7 -0
  87. package/dist/plugin/utils/createReactFetcher.d.ts.map +1 -0
  88. package/dist/plugin/utils/createReactFetcher.js +33 -0
  89. package/dist/plugin/utils/createReactFetcher.js.map +1 -0
  90. package/dist/plugin/utils/index.d.ts +4 -0
  91. package/dist/plugin/utils/index.d.ts.map +1 -0
  92. package/dist/plugin/utils/index.js +3 -0
  93. package/dist/plugin/utils/pageURL.d.ts +2 -0
  94. package/dist/plugin/utils/pageURL.d.ts.map +1 -0
  95. package/dist/plugin/utils/pageURL.js +21 -0
  96. package/dist/plugin/utils/pageURL.js.map +1 -0
  97. package/dist/plugin/utils.js +9 -0
  98. package/dist/plugin/utils.js.map +1 -0
  99. package/dist/plugin/worker/rsc/handleRender.d.ts +6 -2
  100. package/dist/plugin/worker/rsc/handleRender.d.ts.map +1 -1
  101. package/dist/plugin/worker/rsc/handleRender.js +26 -55
  102. package/dist/plugin/worker/rsc/handleRender.js.map +1 -1
  103. package/dist/plugin/worker/rsc/messageHandler.d.ts +1 -2
  104. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  105. package/dist/plugin/worker/rsc/messageHandler.js +45 -2
  106. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  107. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  108. package/dist/plugin/worker/rsc/state.js +1 -5
  109. package/dist/plugin/worker/rsc/state.js.map +1 -1
  110. package/dist/tsconfig.tsbuildinfo +1 -1
  111. package/package.json +10 -5
  112. package/plugin/config/defaults.tsx +1 -1
  113. package/plugin/config/resolveAutoDiscover.ts +17 -22
  114. package/plugin/config/resolveOptions.ts +5 -1
  115. package/plugin/config/resolveUserConfig.ts +72 -37
  116. package/plugin/helpers/collectBundleManifestCss.ts +1 -160
  117. package/plugin/helpers/collectViteModuleGraphCss.ts +31 -29
  118. package/plugin/helpers/createCssProps.tsx +22 -11
  119. package/plugin/helpers/createRscStream.tsx +42 -46
  120. package/plugin/helpers/formatMetrics.ts +37 -0
  121. package/plugin/helpers/tryManifest.ts +0 -9
  122. package/plugin/html.tsx +1 -1
  123. package/plugin/loader/createBuildLoader.ts +2 -0
  124. package/plugin/metrics/formatMetrics.ts +37 -0
  125. package/plugin/metrics/index.ts +2 -0
  126. package/plugin/react-client/createWorkerStream.ts +107 -0
  127. package/plugin/react-client/plugin.ts +3 -0
  128. package/plugin/react-client/restartWorker.ts +65 -0
  129. package/plugin/react-client/server.ts +97 -146
  130. package/plugin/react-server/server.ts +24 -29
  131. package/plugin/react-static/collectHtmlWorkerContent.ts +1 -1
  132. package/plugin/react-static/collectRscContent.ts +2 -2
  133. package/plugin/react-static/configurePreviewServer.ts +29 -6
  134. package/plugin/react-static/fileWriter.ts +5 -1
  135. package/plugin/react-static/plugin.ts +58 -38
  136. package/plugin/types.ts +11 -11
  137. package/plugin/utils/callServer.ts +25 -0
  138. package/plugin/utils/createReactFetcher.ts +31 -0
  139. package/plugin/utils/index.ts +3 -0
  140. package/plugin/utils/pageURL.ts +28 -0
  141. package/plugin/worker/rsc/handleRender.ts +33 -71
  142. package/plugin/worker/rsc/messageHandler.tsx +48 -6
  143. package/plugin/worker/rsc/state.ts +1 -5
@@ -1 +1 @@
1
- {"version":3,"file":"tryManifest.js","sources":["../../../plugin/helpers/tryManifest.ts"],"sourcesContent":["import { join, resolve } from \"node:path\";\n\nimport type { Manifest } from \"vite\";\nimport { readFile } from \"node:fs/promises\";\n\ntype TryManifestOptions<SSR extends boolean = false> = {\n root: string;\n outDir: string;\n ssrManifest?: SSR;\n preserveModulesRoot?: string;\n manifestPath?: string | undefined;\n};\n\nconst stashedManifests: Map<string, any> = new Map();\n\nexport async function tryManifest<SSR extends boolean>(\n options: TryManifestOptions<SSR>\n): Promise<\n | {\n type: \"success\";\n manifest: SSR extends true ? Record<string, string[]> : Manifest;\n error?: never;\n }\n | {\n type: \"error\";\n error: Error;\n manifest?: never;\n }> {\n if (stashedManifests.has(options.outDir)) {\n return {\n type: \"success\",\n manifest: stashedManifests.get(options.outDir),\n };\n }\n const localSsrManifestPath = !options.ssrManifest ? undefined : options.manifestPath ? options.manifestPath : join('.vite', 'ssr-manifest.json');\n const localManifestPath = options.ssrManifest ? undefined : options.manifestPath ? options.manifestPath : join('.vite', 'manifest.json');\n const manifestPath = resolve(\n options.root,\n options.outDir,\n options.ssrManifest ? localSsrManifestPath as string : localManifestPath as string\n );\n try {\n const result = JSON.parse(await readFile(manifestPath, \"utf-8\"));\n stashedManifests.set(options.outDir, result);\n return {\n type: \"success\",\n manifest: result,\n };\n } catch (e) {\n console.trace(\"No manifest found\", manifestPath);\n return {\n type: \"error\",\n error: e as Error,\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAaA,MAAM,gBAAA,uBAAyC,GAAI,EAAA;AAEnD,eAAsB,YACpB,OAWK,EAAA;AACL,EAAA,IAAI,gBAAiB,CAAA,GAAA,CAAI,OAAQ,CAAA,MAAM,CAAG,EAAA;AACxC,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,QAAU,EAAA,gBAAA,CAAiB,GAAI,CAAA,OAAA,CAAQ,MAAM;AAAA,KAC/C;AAAA;AAEF,EAAM,MAAA,oBAAA,GAAuB,CAAC,OAAA,CAAQ,WAAc,GAAA,SAAA,GAAY,OAAQ,CAAA,YAAA,GAAe,OAAQ,CAAA,YAAA,GAAe,IAAK,CAAA,OAAA,EAAS,mBAAmB,CAAA;AAC/I,EAAM,MAAA,iBAAA,GAAoB,OAAQ,CAAA,WAAA,GAAc,SAAY,GAAA,OAAA,CAAQ,eAAe,OAAQ,CAAA,YAAA,GAAe,IAAK,CAAA,OAAA,EAAS,eAAe,CAAA;AACvI,EAAA,MAAM,YAAe,GAAA,OAAA;AAAA,IACnB,OAAQ,CAAA,IAAA;AAAA,IACR,OAAQ,CAAA,MAAA;AAAA,IACR,OAAA,CAAQ,cAAc,oBAAiC,GAAA;AAAA,GACzD;AACA,EAAI,IAAA;AACF,IAAA,MAAM,SAAS,IAAK,CAAA,KAAA,CAAM,MAAM,QAAS,CAAA,YAAA,EAAc,OAAO,CAAC,CAAA;AAC/D,IAAiB,gBAAA,CAAA,GAAA,CAAI,OAAQ,CAAA,MAAA,EAAQ,MAAM,CAAA;AAC3C,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,QAAU,EAAA;AAAA,KACZ;AAAA,WACO,CAAG,EAAA;AACV,IAAQ,OAAA,CAAA,KAAA,CAAM,qBAAqB,YAAY,CAAA;AAC/C,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"tryManifest.js","sources":["../../../plugin/helpers/tryManifest.ts"],"sourcesContent":["import { join, resolve } from \"node:path\";\n\nimport type { Manifest } from \"vite\";\nimport { readFile } from \"node:fs/promises\";\n\ntype TryManifestOptions<SSR extends boolean = false> = {\n root: string;\n outDir: string;\n ssrManifest?: SSR;\n preserveModulesRoot?: string;\n manifestPath?: string | undefined;\n};\n\nexport async function tryManifest<SSR extends boolean>(\n options: TryManifestOptions<SSR>\n): Promise<\n | {\n type: \"success\";\n manifest: SSR extends true ? Record<string, string[]> : Manifest;\n error?: never;\n }\n | {\n type: \"error\";\n error: Error;\n manifest?: never;\n }> {\n const localSsrManifestPath = !options.ssrManifest ? undefined : options.manifestPath ? options.manifestPath : join('.vite', 'ssr-manifest.json');\n const localManifestPath = options.ssrManifest ? undefined : options.manifestPath ? options.manifestPath : join('.vite', 'manifest.json');\n const manifestPath = resolve(\n options.root,\n options.outDir,\n options.ssrManifest ? localSsrManifestPath as string : localManifestPath as string\n );\n try {\n const result = JSON.parse(await readFile(manifestPath, \"utf-8\"));\n return {\n type: \"success\",\n manifest: result,\n };\n } catch (e) {\n console.trace(\"No manifest found\", manifestPath);\n return {\n type: \"error\",\n error: e as Error,\n };\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAaA,eAAsB,YACpB,OAWK,EAAA;AACL,EAAM,MAAA,oBAAA,GAAuB,CAAC,OAAA,CAAQ,WAAc,GAAA,SAAA,GAAY,OAAQ,CAAA,YAAA,GAAe,OAAQ,CAAA,YAAA,GAAe,IAAK,CAAA,OAAA,EAAS,mBAAmB,CAAA;AAC/I,EAAM,MAAA,iBAAA,GAAoB,OAAQ,CAAA,WAAA,GAAc,SAAY,GAAA,OAAA,CAAQ,eAAe,OAAQ,CAAA,YAAA,GAAe,IAAK,CAAA,OAAA,EAAS,eAAe,CAAA;AACvI,EAAA,MAAM,YAAe,GAAA,OAAA;AAAA,IACnB,OAAQ,CAAA,IAAA;AAAA,IACR,OAAQ,CAAA,MAAA;AAAA,IACR,OAAA,CAAQ,cAAc,oBAAiC,GAAA;AAAA,GACzD;AACA,EAAI,IAAA;AACF,IAAA,MAAM,SAAS,IAAK,CAAA,KAAA,CAAM,MAAM,QAAS,CAAA,YAAA,EAAc,OAAO,CAAC,CAAA;AAC/D,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,QAAU,EAAA;AAAA,KACZ;AAAA,WACO,CAAG,EAAA;AACV,IAAQ,OAAA,CAAA,KAAA,CAAM,qBAAqB,YAAY,CAAA;AAC/C,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,KAAO,EAAA;AAAA,KACT;AAAA;AAEJ;;;;"}
@@ -12,7 +12,7 @@ const Html = ({
12
12
  cssFiles,
13
13
  globalCss,
14
14
  moduleBasePath
15
- }) => /* @__PURE__ */ React__default.createElement("html", null, /* @__PURE__ */ React__default.createElement("head", null, moduleBasePath !== "" && /* @__PURE__ */ React__default.createElement("base", { href: moduleBasePath }), /* @__PURE__ */ React__default.createElement(CssCollectorElements, { cssFiles: globalCss })), /* @__PURE__ */ React__default.createElement("body", null, /* @__PURE__ */ React__default.createElement(CssCollector, { as: "div", id: "root", cssFiles }, children)));
15
+ }) => /* @__PURE__ */ React__default.createElement("html", null, /* @__PURE__ */ React__default.createElement("head", null, moduleBasePath !== "", /* @__PURE__ */ React__default.createElement(CssCollectorElements, { cssFiles: globalCss })), /* @__PURE__ */ React__default.createElement("body", null, /* @__PURE__ */ React__default.createElement(CssCollector, { as: "div", id: "root", cssFiles }, children)));
16
16
 
17
17
  export { Html };
18
18
  //# sourceMappingURL=html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sources":["../../plugin/html.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HtmlProps } from \"./types.js\";\nimport { CssCollectorElements } from \"./css-collector-elements.js\";\nexport const Html = ({\n children,\n CssCollector,\n cssFiles,\n globalCss,\n moduleBasePath,\n}: React.PropsWithChildren<HtmlProps>) => (\n <html>\n <head>\n {moduleBasePath !== \"\" && <base href={moduleBasePath} />}\n <CssCollectorElements cssFiles={globalCss} />\n </head>\n <body>\n <CssCollector as={\"div\"} id=\"root\" cssFiles={cssFiles}>\n {children}\n </CssCollector>\n </body>\n </html>\n);\n"],"names":["React"],"mappings":";;;;;;;;AAGO,MAAM,OAAO,CAAC;AAAA,EACnB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,qBACGA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EACE,cAAmB,KAAA,EAAA,oBAAOA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAK,IAAM,EAAA,cAAA,EAAgB,CACtD,kBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAqB,EAAA,EAAA,QAAA,EAAU,SAAW,EAAA,CAC7C,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,MACC,EAAA,IAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,YAAa,EAAA,EAAA,EAAA,EAAI,KAAO,EAAA,EAAA,EAAG,MAAO,EAAA,QAAA,EAAA,EAChC,QACH,CACF,CACF;;;;"}
1
+ {"version":3,"file":"html.js","sources":["../../plugin/html.tsx"],"sourcesContent":["import React from \"react\";\nimport type { HtmlProps } from \"./types.js\";\nimport { CssCollectorElements } from \"./css-collector-elements.js\";\nexport const Html = ({\n children,\n CssCollector,\n cssFiles,\n globalCss,\n moduleBasePath,\n}: React.PropsWithChildren<HtmlProps>) => (\n <html>\n <head>\n {moduleBasePath !== \"\"}\n <CssCollectorElements cssFiles={globalCss} />\n </head>\n <body>\n <CssCollector as={\"div\"} id=\"root\" cssFiles={cssFiles}>\n {children}\n </CssCollector>\n </body>\n </html>\n);\n"],"names":["React"],"mappings":";;;;;;;;AAGO,MAAM,OAAO,CAAC;AAAA,EACnB,QAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CACE,qBAAAA,cAAA,CAAA,aAAA,CAAC,8BACEA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EACE,mBAAmB,EACpB,kBAAAA,cAAA,CAAA,aAAA,CAAC,oBAAqB,EAAA,EAAA,QAAA,EAAU,SAAW,EAAA,CAC7C,mBACCA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAA,YAAA,EAAA,EAAa,EAAI,EAAA,KAAA,EAAO,IAAG,MAAO,EAAA,QAAA,EAAA,EAChC,QACH,CACF,CACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createBuildLoader.d.ts","sourceRoot":"","sources":["../../../plugin/loader/createBuildLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG3C,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,EAAE,mBAAmB,CAAC;IACjC,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,iBAAiB,CACrC,EACE,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,GACf,EAAE,kBAAkB,EACrB,MAAM,EAAE,YAAY,gBAMkB,MAAM,mBAuH7C"}
1
+ {"version":3,"file":"createBuildLoader.d.ts","sourceRoot":"","sources":["../../../plugin/loader/createBuildLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG3C,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,EAAE,mBAAmB,CAAC;IACjC,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,iBAAiB,CACrC,EACE,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,GACf,EAAE,kBAAkB,EACrB,MAAM,EAAE,YAAY,gBAMkB,MAAM,mBAyH7C"}
@@ -36,6 +36,8 @@ async function createBuildLoader({
36
36
  return { default: serverChunk.source };
37
37
  } else if ("code" in serverChunk) {
38
38
  return { default: serverChunk.code };
39
+ } else {
40
+ console.warn("Could not find inline module for: " + normalizedValue);
39
41
  }
40
42
  }
41
43
  const module = {
@@ -1 +1 @@
1
- {"version":3,"file":"createBuildLoader.js","sources":["../../../plugin/loader/createBuildLoader.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport type { ResolvedUserConfig, ResolvedUserOptions } from \"../../server.js\";\nimport type { Manifest } from \"vite\";\nimport { getModuleRef } from \"../moduleRefs.js\";\nimport { readFile } from \"node:fs/promises\";\nimport type { OutputBundle } from \"rollup\";\nimport { temporaryReferences } from \"./temporaryReferences.js\";\n\nexport interface BuildLoaderOptions {\n userConfig: ResolvedUserConfig;\n userOptions: ResolvedUserOptions;\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 * - Just load any file from any manifest we can find in the order of client, server, static\n * - Ideally the buildLoader is only used form loading pages, props and inline css modules\n * -\n *\n * During build:\n * - We use the manifest information to get module exports\n * - The manifest contains the transformed modules with their exports\n * - We store the module in temporaryReferences for later use\n *\n * @param options.root - The project root directory\n * @param options.pluginContext - The Rollup plugin context\n * @param options.userConfig - Resolved user configuration\n * @param options.userOptions - Resolved user options\n * @param options.serverManifest - Vite server manifest\n * @param options.clientManifest - Vite client manifest\n * @param options.options - Additional options including temporaryReferences\n *\n * @returns A loader function that resolves module paths to their exports\n */\nexport async function createBuildLoader(\n {\n userOptions,\n serverManifest,\n clientManifest,\n staticManifest,\n }: BuildLoaderOptions,\n bundle: OutputBundle\n) {\n const manifestKeys = Object.keys(serverManifest);\n if (!manifestKeys.length) {\n throw new Error(\"Server manifest is empty\");\n }\n return async function buildLoader(id: string) {\n const [withoutQuery, query] = id.split(\"?\", 2);\n const [, normalizedValue] = userOptions.normalizer(withoutQuery);\n const moduleRef = getModuleRef(id);\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 // Then check server manifest\n const serverChunk =\n bundle[serverManifest[normalizedValue]?.file] ??\n bundle[staticManifest[normalizedValue]?.file] ??\n bundle[clientManifest[normalizedValue]?.file] ??\n bundle[withoutQuery];\n if (serverChunk) {\n if (serverChunk.type === \"asset\") {\n return { default: serverChunk.source };\n } else if (\"code\" in serverChunk) {\n return { default: serverChunk.code };\n }\n }\n\n // If not found in either manifest, try reading the file directly\n const module = {\n default: await readFile(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static,\n normalizedValue\n ),\n \"utf-8\"\n ),\n };\n temporaryReferences?.set(moduleRef, module);\n return module;\n }\n const clientEntry = clientManifest[normalizedValue];\n if (clientEntry) {\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.client,\n clientEntry.file\n )\n );\n console.warn(\n \"client module used in buildLoader, consider making this available in the server manifest\",\n module\n );\n temporaryReferences?.set(moduleRef, module);\n return module;\n }\n const bundleEntry = bundle[withoutQuery];\n if (bundleEntry) {\n // Load the module\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.server,\n bundleEntry.fileName\n )\n );\n temporaryReferences?.set(moduleRef, module);\n }\n // Try to resolve the module using Vite's resolution\n const serverEntry = serverManifest[normalizedValue];\n if (serverEntry) {\n // Load the module\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 }\n // try static manifest\n const staticEntry = staticManifest[normalizedValue];\n if (staticEntry) {\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static,\n staticEntry.file\n )\n );\n console.warn(\n \"static module used in buildLoader, consider making this available in the server manifest\",\n module\n );\n temporaryReferences?.set(moduleRef, module);\n return module;\n }\n throw new Error(`Module ${normalizedValue} not found`);\n } catch (error) {\n const emptyExports = {\n error: error instanceof Error ? error : new Error(String(error)),\n id: id,\n };\n temporaryReferences?.set(moduleRef, emptyExports);\n return emptyExports;\n }\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createBuildLoader.js","sources":["../../../plugin/loader/createBuildLoader.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport type { ResolvedUserConfig, ResolvedUserOptions } from \"../../server.js\";\nimport type { Manifest } from \"vite\";\nimport { getModuleRef } from \"../moduleRefs.js\";\nimport { readFile } from \"node:fs/promises\";\nimport type { OutputBundle } from \"rollup\";\nimport { temporaryReferences } from \"./temporaryReferences.js\";\n\nexport interface BuildLoaderOptions {\n userConfig: ResolvedUserConfig;\n userOptions: ResolvedUserOptions;\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 * - Just load any file from any manifest we can find in the order of client, server, static\n * - Ideally the buildLoader is only used form loading pages, props and inline css modules\n * -\n *\n * During build:\n * - We use the manifest information to get module exports\n * - The manifest contains the transformed modules with their exports\n * - We store the module in temporaryReferences for later use\n *\n * @param options.root - The project root directory\n * @param options.pluginContext - The Rollup plugin context\n * @param options.userConfig - Resolved user configuration\n * @param options.userOptions - Resolved user options\n * @param options.serverManifest - Vite server manifest\n * @param options.clientManifest - Vite client manifest\n * @param options.options - Additional options including temporaryReferences\n *\n * @returns A loader function that resolves module paths to their exports\n */\nexport async function createBuildLoader(\n {\n userOptions,\n serverManifest,\n clientManifest,\n staticManifest,\n }: BuildLoaderOptions,\n bundle: OutputBundle\n) {\n const manifestKeys = Object.keys(serverManifest);\n if (!manifestKeys.length) {\n throw new Error(\"Server manifest is empty\");\n }\n return async function buildLoader(id: string) {\n const [withoutQuery, query] = id.split(\"?\", 2);\n const [, normalizedValue] = userOptions.normalizer(withoutQuery);\n const moduleRef = getModuleRef(id);\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 // Then check server manifest\n const serverChunk =\n bundle[serverManifest[normalizedValue]?.file] ??\n bundle[staticManifest[normalizedValue]?.file] ??\n bundle[clientManifest[normalizedValue]?.file] ??\n bundle[withoutQuery];\n if (serverChunk) {\n if (serverChunk.type === \"asset\") {\n return { default: serverChunk.source };\n } else if (\"code\" in serverChunk) {\n return { default: serverChunk.code };\n } else {\n console.warn(\"Could not find inline module for: \" + normalizedValue);\n }\n }\n\n // If not found in either manifest, try reading the file directly\n const module = {\n default: await readFile(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static,\n normalizedValue\n ),\n \"utf-8\"\n ),\n };\n temporaryReferences?.set(moduleRef, module);\n return module;\n }\n const clientEntry = clientManifest[normalizedValue];\n if (clientEntry) {\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.client,\n clientEntry.file\n )\n );\n console.warn(\n \"client module used in buildLoader, consider making this available in the server manifest\",\n module\n );\n temporaryReferences?.set(moduleRef, module);\n return module;\n }\n const bundleEntry = bundle[withoutQuery];\n if (bundleEntry) {\n // Load the module\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.server,\n bundleEntry.fileName\n )\n );\n temporaryReferences?.set(moduleRef, module);\n }\n // Try to resolve the module using Vite's resolution\n const serverEntry = serverManifest[normalizedValue];\n if (serverEntry) {\n // Load the module\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 }\n // try static manifest\n const staticEntry = staticManifest[normalizedValue];\n if (staticEntry) {\n const module = await import(\n join(\n userOptions.projectRoot,\n userOptions.build.outDir,\n userOptions.build.static,\n staticEntry.file\n )\n );\n console.warn(\n \"static module used in buildLoader, consider making this available in the server manifest\",\n module\n );\n temporaryReferences?.set(moduleRef, module);\n return module;\n }\n throw new Error(`Module ${normalizedValue} not found`);\n } catch (error) {\n const emptyExports = {\n error: error instanceof Error ? error : new Error(String(error)),\n id: id,\n };\n temporaryReferences?.set(moduleRef, emptyExports);\n return emptyExports;\n }\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { RenderMetrics } from "../types.js";
2
+ export declare function formatMetrics(metrics: RenderMetrics): string;
3
+ export declare function logMetrics(metrics: RenderMetrics): void;
4
+ //# sourceMappingURL=formatMetrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatMetrics.d.ts","sourceRoot":"","sources":["../../../plugin/metrics/formatMetrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA8B5D;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,aAAa,QAEhD"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ function formatMetrics(metrics) {
7
+ const {
8
+ route,
9
+ rscSize,
10
+ chunks,
11
+ chunkRate,
12
+ processingTime,
13
+ memoryUsage,
14
+ streamMetrics
15
+ } = metrics;
16
+ const formatMemory = (bytes) => `${(bytes / 1024 / 1024).toFixed(2)}MB`;
17
+ return `
18
+ Route: ${route}
19
+ Size: ${(rscSize / 1024).toFixed(2)}KB
20
+ Chunks: ${chunks} (${chunkRate.toFixed(2)} chunks/s)
21
+ Processing Time: ${processingTime.toFixed(2)}ms
22
+ Memory:
23
+ RSS: ${formatMemory(memoryUsage.rss)}
24
+ Heap Total: ${formatMemory(memoryUsage.heapTotal)}
25
+ Heap Used: ${formatMemory(memoryUsage.heapUsed)}
26
+ External: ${formatMemory(memoryUsage.external)}
27
+ Stream:
28
+ Duration: ${streamMetrics.duration.toFixed(2)}ms
29
+ Backpressure: ${streamMetrics.backpressureCount}
30
+ Drain: ${streamMetrics.drainCount}
31
+ Errors: ${streamMetrics.errorCount}
32
+ `.trim();
33
+ }
34
+ function logMetrics(metrics) {
35
+ console.log(formatMetrics(metrics));
36
+ }
37
+
38
+ export { formatMetrics, logMetrics };
39
+ //# sourceMappingURL=formatMetrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatMetrics.js","sources":["../../../plugin/metrics/formatMetrics.ts"],"sourcesContent":["import type { RenderMetrics } from \"../types.js\";\n\nexport function formatMetrics(metrics: RenderMetrics): string {\n const {\n route,\n rscSize,\n chunks,\n chunkRate,\n processingTime,\n memoryUsage,\n streamMetrics,\n } = metrics;\n\n // Format memory usage in MB\n const formatMemory = (bytes: number) => `${(bytes / 1024 / 1024).toFixed(2)}MB`;\n\n return `\nRoute: ${route}\nSize: ${(rscSize / 1024).toFixed(2)}KB\nChunks: ${chunks} (${chunkRate.toFixed(2)} chunks/s)\nProcessing Time: ${processingTime.toFixed(2)}ms\nMemory:\n RSS: ${formatMemory(memoryUsage.rss)}\n Heap Total: ${formatMemory(memoryUsage.heapTotal)}\n Heap Used: ${formatMemory(memoryUsage.heapUsed)}\n External: ${formatMemory(memoryUsage.external)}\nStream:\n Duration: ${streamMetrics.duration.toFixed(2)}ms\n Backpressure: ${streamMetrics.backpressureCount}\n Drain: ${streamMetrics.drainCount}\n Errors: ${streamMetrics.errorCount}\n`.trim();\n}\n\nexport function logMetrics(metrics: RenderMetrics) {\n console.log(formatMetrics(metrics));\n} "],"names":[],"mappings":";;;;;AAEO,SAAS,cAAc,OAAgC,EAAA;AAC5D,EAAM,MAAA;AAAA,IACJ,KAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GACE,GAAA,OAAA;AAGJ,EAAM,MAAA,YAAA,GAAe,CAAC,KAAkB,KAAA,CAAA,EAAA,CAAI,QAAQ,IAAO,GAAA,IAAA,EAAM,OAAQ,CAAA,CAAC,CAAC,CAAA,EAAA,CAAA;AAE3E,EAAO,OAAA;AAAA,OAAA,EACA,KAAK;AAAA,MAAA,EAAA,CACL,OAAU,GAAA,IAAA,EAAM,OAAQ,CAAA,CAAC,CAAC,CAAA;AAAA,QAAA,EACzB,MAAM,CAAA,EAAA,EAAK,SAAU,CAAA,OAAA,CAAQ,CAAC,CAAC,CAAA;AAAA,iBACtB,EAAA,cAAA,CAAe,OAAQ,CAAA,CAAC,CAAC,CAAA;AAAA;AAAA,OAEnC,EAAA,YAAA,CAAa,WAAY,CAAA,GAAG,CAAC;AAAA,cACtB,EAAA,YAAA,CAAa,WAAY,CAAA,SAAS,CAAC;AAAA,aACpC,EAAA,YAAA,CAAa,WAAY,CAAA,QAAQ,CAAC;AAAA,YACnC,EAAA,YAAA,CAAa,WAAY,CAAA,QAAQ,CAAC;AAAA;AAAA,YAAA,EAElC,aAAc,CAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,CAAC,CAAA;AAAA,gBAAA,EAC7B,cAAc,iBAAiB;AAAA,SAAA,EACtC,cAAc,UAAU;AAAA,UAAA,EACvB,cAAc,UAAU;AAAA,CAAA,CAClC,IAAK,EAAA;AACP;AAEO,SAAS,WAAW,OAAwB,EAAA;AACjD,EAAQ,OAAA,CAAA,GAAA,CAAI,aAAc,CAAA,OAAO,CAAC,CAAA;AACpC;;;;"}
@@ -0,0 +1,3 @@
1
+ export * from "./formatMetrics.js";
2
+ export type { RenderMetrics, StreamMetrics } from "../types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../plugin/metrics/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ export * from "./formatMetrics.js";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ export { formatMetrics, logMetrics } from './metrics/formatMetrics.js';
7
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -0,0 +1,16 @@
1
+ import type { Logger } from "vite";
2
+ import type { RscRenderMessage } from "../worker/types.js";
3
+ import type { StreamMetrics } from "../../types.js";
4
+ import { Worker } from "node:worker_threads";
5
+ /**
6
+ * Creates an async generator that yields RSC chunks from the worker.
7
+ * Handles both module requests and RSC streaming.
8
+ *
9
+ * @param worker - The worker thread
10
+ * @param server - The Vite dev server
11
+ * @param message - The RSC render message
12
+ * @param rscWorkerLoaderPort - Optional loader port for module loading
13
+ * @returns An async generator that yields RSC chunks
14
+ */
15
+ export declare function createWorkerStream(worker: Worker, message: Omit<RscRenderMessage, "type" | "id">, logger: Logger, onMetrics?: (metrics: StreamMetrics) => void): AsyncGenerator<Uint8Array, void, unknown>;
16
+ //# sourceMappingURL=createWorkerStream.d.ts.map
@@ -0,0 +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,EAAE,gBAAgB,EAA0B,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C;;;;;;;;;GASG;AACH,wBAAuB,kBAAkB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,EAC9C,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAC3C,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAuF3C"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import 'node:worker_threads';
7
+
8
+ async function* createWorkerStream(worker, message, logger, onMetrics) {
9
+ let messageHandler;
10
+ let cleanup = () => {
11
+ };
12
+ let onError = (error) => {
13
+ let err;
14
+ if (typeof error === "string") {
15
+ err = new Error(error);
16
+ } else if (typeof error === "object" && error != null) {
17
+ const stackTrace = "stack" in error ? String(error.stack) : "";
18
+ const msg = "message" in error ? String(error.message) : "";
19
+ err = {
20
+ message: msg,
21
+ stack: stackTrace
22
+ };
23
+ } else {
24
+ err = new Error("Failed to load page content");
25
+ }
26
+ return new TextEncoder().encode(`0:E{"digest":"","name":"Error","message":"${err.message}","stack":${JSON.stringify(err.stack)},"env":"Server"}`);
27
+ };
28
+ yield await new Promise((resolve) => {
29
+ messageHandler = (message2) => {
30
+ switch (message2.type) {
31
+ case "RSC_CHUNK":
32
+ resolve(message2.chunk);
33
+ break;
34
+ case "RSC_END":
35
+ resolve(new Uint8Array());
36
+ break;
37
+ case "ERROR":
38
+ const errorResponse = onError(message2.error);
39
+ resolve(errorResponse);
40
+ break;
41
+ default:
42
+ logger.warn(`Unknown initial message type: ${message2.type}`);
43
+ resolve(new Uint8Array());
44
+ break;
45
+ }
46
+ };
47
+ cleanup = () => {
48
+ worker.off("message", messageHandler);
49
+ };
50
+ worker.on("message", messageHandler);
51
+ worker.postMessage({
52
+ type: "RSC_RENDER",
53
+ id: message.route,
54
+ ...message
55
+ });
56
+ });
57
+ while (true) {
58
+ const chunk = await new Promise((resolve) => {
59
+ messageHandler = (message2) => {
60
+ switch (message2.type) {
61
+ case "RSC_END":
62
+ cleanup();
63
+ resolve(new Uint8Array());
64
+ return;
65
+ case "RSC_CHUNK":
66
+ resolve(message2.chunk);
67
+ return;
68
+ case "RSC_METRICS":
69
+ onMetrics?.(message2.metrics);
70
+ break;
71
+ case "ERROR":
72
+ cleanup();
73
+ const errorResponse = onError(message2.error);
74
+ resolve(errorResponse);
75
+ return;
76
+ }
77
+ };
78
+ worker.once("message", messageHandler);
79
+ });
80
+ if (chunk.length === 0) {
81
+ break;
82
+ }
83
+ yield chunk;
84
+ }
85
+ }
86
+
87
+ export { createWorkerStream };
88
+ //# sourceMappingURL=createWorkerStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWorkerStream.js","sources":["../../../plugin/react-client/createWorkerStream.ts"],"sourcesContent":["import type { Logger } from \"vite\";\nimport type { RscRenderMessage, RscWorkerOutputMessage } from \"../worker/types.js\";\nimport type { StreamMetrics } from \"../../types.js\";\nimport { Worker } from \"node:worker_threads\";\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: Worker,\n message: Omit<RscRenderMessage, \"type\" | \"id\">,\n logger: Logger,\n onMetrics?: (metrics: StreamMetrics) => void\n ): AsyncGenerator<Uint8Array, void, unknown> {\n let messageHandler: (message: RscWorkerOutputMessage) => void;\n let cleanup: () => void = () => {};\n let onError = (error: any) => {\n let err;\n if (typeof error === \"string\") {\n err = new Error(error);\n } else if (typeof error === \"object\" && error != null) {\n const stackTrace = \"stack\" in error ? String(error.stack) : \"\";\n const msg = \"message\" in error ? String(error.message) : \"\";\n err = {\n message: msg,\n stack: stackTrace,\n }\n } else {\n err = new Error(\"Failed to load page content\");\n }\n // Format the error using the worker's error details\n return new TextEncoder().encode(`0:E{\"digest\":\"\",\"name\":\"Error\",\"message\":\"${\n err.message\n }\",\"stack\":${JSON.stringify(err.stack)},\"env\":\"Server\"}`);\n };\n // First yield: wait for initial message and handle module requests\n yield await new Promise<Uint8Array>((resolve) => {\n messageHandler = (message: RscWorkerOutputMessage) => {\n switch (message.type) {\n case \"RSC_CHUNK\":\n resolve(message.chunk);\n break;\n case \"RSC_END\":\n resolve(new Uint8Array());\n break;\n case \"ERROR\":\n const errorResponse = onError(message.error);\n resolve(errorResponse);\n break;\n default:\n logger.warn(`Unknown initial message type: ${message.type}`);\n resolve(new Uint8Array());\n break;\n }\n };\n \n cleanup = () => {\n worker.off(\"message\", messageHandler);\n };\n \n worker.on(\"message\", messageHandler);\n \n // Send the render message to start the RSC stream\n worker.postMessage({\n type: \"RSC_RENDER\",\n id: message.route,\n ...message,\n });\n });\n \n // Subsequent yields: handle RSC chunks until stream ends\n while (true) {\n const chunk = await new Promise<Uint8Array>((resolve) => {\n messageHandler = (message: RscWorkerOutputMessage) => {\n switch (message.type) {\n case \"RSC_END\":\n cleanup();\n resolve(new Uint8Array());\n return;\n case \"RSC_CHUNK\":\n resolve(message.chunk);\n return;\n case \"RSC_METRICS\":\n onMetrics?.(message.metrics);\n break;\n case \"ERROR\":\n cleanup();\n const errorResponse = onError(message.error);\n resolve(errorResponse);\n return;\n }\n };\n worker.once(\"message\", messageHandler);\n });\n \n if (chunk.length === 0) {\n break;\n }\n yield chunk;\n }\n }"],"names":["message"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAcrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA+GtE"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAG,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAIV,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAcrB,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAkHtE"}
@@ -65,7 +65,10 @@ function reactClientPlugin(options) {
65
65
  server,
66
66
  autoDiscoveredFiles,
67
67
  userOptions,
68
- hmrChannel
68
+ hmrChannel,
69
+ onMetrics: userOptions.onMetrics ? (metrics) => {
70
+ userOptions.onMetrics?.(metrics);
71
+ } : undefined
69
72
  });
70
73
  },
71
74
  async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type Plugin } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { resolveAutoDiscover } from \"../config/resolveAutoDiscover.js\";\nimport { configureWorkerRequestHandler } from \"./server.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { MessageChannel } from \"node:worker_threads\";\n\nlet userOptions: ResolvedUserOptions;\nlet userConfig: ResolvedUserConfig;\nlet root: string;\nlet autoDiscoveredFiles: AutoDiscoveredFiles;\nlet hmrChannel: MessageChannel | null = null;\n\nexport function reactClientPlugin(options: StreamPluginOptions): Plugin {\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n\n return {\n name: \"vite:react-client\",\n\n async config(config, configEnv) {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n }\n\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-client\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-client\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return userConfig;\n },\n\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n // setup dev server\n async configureServer(server) {\n // Create HMR message channel\n hmrChannel = new MessageChannel();\n\n await configureWorkerRequestHandler({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n });\n },\n\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Check if the file is a page or props file\n const isPageFile = userOptions.autoDiscover.modulePattern(file);\n if (!isPageFile) return;\n\n // Get the route for this file\n const [, value] = userOptions.normalizer(file);\n \n // Find all routes affected by this file change\n const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];\n\n // Send HMR update directly to worker through MessageChannel\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_UPDATE',\n path: file,\n timestamp,\n routes: affectedRoutes\n });\n\n // Trigger a full page refresh for affected routes\n for (const route of affectedRoutes) {\n server.ws.send({\n type: 'full-reload',\n path: route\n });\n }\n }\n\n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_ERROR',\n path: file,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n return ctx.modules;\n }\n },\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sources":["../../../plugin/react-client/plugin.ts"],"sourcesContent":["import { type Plugin } from \"vite\";\nimport type {\n AutoDiscoveredFiles,\n ResolvedUserConfig,\n ResolvedUserOptions,\n StreamPluginOptions,\n} from \"../types.js\";\nimport { resolveOptions } from \"../config/resolveOptions.js\";\nimport { resolveUserConfig } from \"../config/resolveUserConfig.js\";\nimport { resolveAutoDiscover } from \"../config/resolveAutoDiscover.js\";\nimport { configureWorkerRequestHandler } from \"./server.js\";\nimport { configurePreviewServer } from \"../react-static/configurePreviewServer.js\";\nimport { MessageChannel } from \"node:worker_threads\";\n\nlet userOptions: ResolvedUserOptions;\nlet userConfig: ResolvedUserConfig;\nlet root: string;\nlet autoDiscoveredFiles: AutoDiscoveredFiles;\nlet hmrChannel: MessageChannel | null = null;\n\nexport function reactClientPlugin(options: StreamPluginOptions): Plugin {\n const resolvedOptions = resolveOptions(options);\n if (resolvedOptions.type === \"error\") {\n throw resolvedOptions.error;\n }\n userOptions = resolvedOptions.userOptions;\n root = userOptions.projectRoot;\n\n return {\n name: \"vite:react-client\",\n\n async config(config, configEnv) {\n if (\n typeof config.root === \"string\" &&\n config.root !== root &&\n config.root !== process.cwd() &&\n config.root !== \"\"\n ) {\n root = config.root;\n }\n\n const autoDiscoverResult = await resolveAutoDiscover({\n config,\n configEnv,\n userOptions,\n condition: \"react-client\",\n });\n if (autoDiscoverResult.type === \"error\") {\n throw autoDiscoverResult.error;\n }\n autoDiscoveredFiles = autoDiscoverResult.autoDiscoveredFiles;\n\n const resolvedConfig = resolveUserConfig({\n condition: \"react-client\",\n config,\n configEnv,\n userOptions,\n autoDiscoveredFiles,\n });\n\n if (resolvedConfig.type === \"error\") {\n throw resolvedConfig.error;\n }\n\n userConfig = resolvedConfig.userConfig;\n return userConfig;\n },\n\n async configurePreviewServer(server) {\n await configurePreviewServer({\n server,\n userOptions,\n });\n },\n // setup dev server\n async configureServer(server) {\n // Create HMR message channel\n hmrChannel = new MessageChannel();\n\n await configureWorkerRequestHandler({\n server,\n autoDiscoveredFiles,\n userOptions,\n hmrChannel,\n onMetrics: userOptions.onMetrics ? (metrics) => {\n userOptions.onMetrics?.(metrics);\n } : undefined,\n });\n },\n\n async handleHotUpdate({ file, server, read, timestamp, ...ctx }) {\n try {\n // Check if the file is a page or props file\n const isPageFile = userOptions.autoDiscover.modulePattern(file);\n if (!isPageFile) return;\n\n // Get the route for this file\n const [, value] = userOptions.normalizer(file);\n \n // Find all routes affected by this file change\n const affectedRoutes = autoDiscoveredFiles.routeMap.get(value) || [];\n\n // Send HMR update directly to worker through MessageChannel\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_UPDATE',\n path: file,\n timestamp,\n routes: affectedRoutes\n });\n\n // Trigger a full page refresh for affected routes\n for (const route of affectedRoutes) {\n server.ws.send({\n type: 'full-reload',\n path: route\n });\n }\n }\n\n // Let Vite handle the HMR update\n return ctx.modules;\n } catch (error) {\n if (hmrChannel?.port1) {\n hmrChannel.port1.postMessage({\n type: 'HMR_ERROR',\n path: file,\n error: error instanceof Error ? error.message : String(error)\n });\n }\n return ctx.modules;\n }\n },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ResolvedUserOptions } from "../../types.js";
2
+ import type { ViteDevServer } from "vite";
3
+ import type { AutoDiscoveredFiles } from "../../types.js";
4
+ import type { MessageChannel, Worker } from "node:worker_threads";
5
+ export declare function restartWorker(server: ViteDevServer, autoDiscoveredFiles: AutoDiscoveredFiles, userOptions: ResolvedUserOptions, hmrChannel: MessageChannel): Promise<Worker | null | undefined>;
6
+ //# sourceMappingURL=restartWorker.d.ts.map
@@ -0,0 +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,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAKlE,wBAAsB,aAAa,CAC/B,MAAM,EAAE,aAAa,EACrB,mBAAmB,EAAE,mBAAmB,EACxC,WAAW,EAAE,mBAAmB,EAChC,UAAU,EAAE,cAAc,sCAgD3B"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import { createWorker } from '../worker/createWorker.js';
7
+ import { serializedOptions, serializedDevServerConfig } from '../helpers/serializeUserOptions.js';
8
+
9
+ let currentWorker = null;
10
+ let isRestarting = false;
11
+ async function restartWorker(server, autoDiscoveredFiles, userOptions, hmrChannel) {
12
+ if (isRestarting) return;
13
+ isRestarting = true;
14
+ try {
15
+ if (currentWorker) {
16
+ currentWorker.terminate();
17
+ currentWorker = null;
18
+ }
19
+ const routeCount = autoDiscoveredFiles.urlMap.size;
20
+ const hmrBuffer = 20;
21
+ const maxListeners = routeCount + hmrBuffer;
22
+ const workerResult = await createWorker({
23
+ projectRoot: server.config.root,
24
+ workerPath: userOptions.rscWorkerPath,
25
+ reverseCondition: "react-server",
26
+ currentCondition: "react-client",
27
+ maxListeners,
28
+ envPrefix: typeof server.config.envPrefix === "string" ? server.config.envPrefix : Array.isArray(server.config.envPrefix) ? server.config.envPrefix[0] : "VITE_",
29
+ workerData: {
30
+ hmrPort: hmrChannel.port2,
31
+ resolvedConfig: serializedDevServerConfig(server.config),
32
+ userOptions: serializedOptions(userOptions, autoDiscoveredFiles)
33
+ },
34
+ transferList: [hmrChannel.port2]
35
+ });
36
+ if (workerResult.type === "success") {
37
+ currentWorker = workerResult.worker;
38
+ server.config.logger.info(
39
+ `[react-client] Set max listeners to ${maxListeners} for ${routeCount} routes`
40
+ );
41
+ } else if (workerResult.type === "error") {
42
+ server.config.logger.error("Failed to start rsc-worker", {
43
+ error: workerResult.error
44
+ });
45
+ }
46
+ } finally {
47
+ isRestarting = false;
48
+ }
49
+ return currentWorker;
50
+ }
51
+
52
+ export { restartWorker };
53
+ //# sourceMappingURL=restartWorker.js.map
@@ -0,0 +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 type { MessageChannel, Worker } from \"node:worker_threads\";\n\nlet currentWorker: Worker | null = null;\nlet isRestarting = false;\n\nexport async function restartWorker(\n server: ViteDevServer,\n autoDiscoveredFiles: AutoDiscoveredFiles,\n userOptions: ResolvedUserOptions,\n hmrChannel: MessageChannel\n ) {\n if (isRestarting) return;\n isRestarting = true;\n \n try {\n // Terminate the current worker if it exists\n if (currentWorker) {\n currentWorker.terminate();\n currentWorker = null;\n }\n const routeCount = autoDiscoveredFiles.urlMap.size;\n const hmrBuffer = 20; // Buffer for HMR and other operations\n const maxListeners = routeCount + hmrBuffer;\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 : \"VITE_\",\n workerData: {\n hmrPort: hmrChannel.port2,\n resolvedConfig: serializedDevServerConfig(server.config),\n userOptions: serializedOptions(userOptions, autoDiscoveredFiles),\n },\n transferList: [hmrChannel.port2],\n });\n \n if (workerResult.type === \"success\") {\n currentWorker = workerResult.worker;\n 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 }\n } finally {\n isRestarting = false;\n }\n return currentWorker;\n }"],"names":[],"mappings":";;;;;;;;AASA,IAAI,aAA+B,GAAA,IAAA;AACnC,IAAI,YAAe,GAAA,KAAA;AAEnB,eAAsB,aAClB,CAAA,MAAA,EACA,mBACA,EAAA,WAAA,EACA,UACA,EAAA;AACA,EAAA,IAAI,YAAc,EAAA;AAClB,EAAe,YAAA,GAAA,IAAA;AAEf,EAAI,IAAA;AAEF,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,aAAA,CAAc,SAAU,EAAA;AACxB,MAAgB,aAAA,GAAA,IAAA;AAAA;AAElB,IAAM,MAAA,UAAA,GAAa,oBAAoB,MAAO,CAAA,IAAA;AAC9C,IAAA,MAAM,SAAY,GAAA,EAAA;AAClB,IAAA,MAAM,eAAe,UAAa,GAAA,SAAA;AAClC,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,WACE,OAAO,MAAA,CAAO,OAAO,SAAc,KAAA,QAAA,GAC/B,OAAO,MAAO,CAAA,SAAA,GACd,MAAM,OAAQ,CAAA,MAAA,CAAO,OAAO,SAAS,CAAA,GACrC,OAAO,MAAO,CAAA,SAAA,CAAU,CAAC,CACzB,GAAA,OAAA;AAAA,MACN,UAAY,EAAA;AAAA,QACV,SAAS,UAAW,CAAA,KAAA;AAAA,QACpB,cAAA,EAAgB,yBAA0B,CAAA,MAAA,CAAO,MAAM,CAAA;AAAA,QACvD,WAAA,EAAa,iBAAkB,CAAA,WAAA,EAAa,mBAAmB;AAAA,OACjE;AAAA,MACA,YAAA,EAAc,CAAC,UAAA,CAAW,KAAK;AAAA,KAChC,CAAA;AAED,IAAI,IAAA,YAAA,CAAa,SAAS,SAAW,EAAA;AACnC,MAAA,aAAA,GAAgB,YAAa,CAAA,MAAA;AAC7B,MAAA,MAAA,CAAO,OAAO,MAAO,CAAA,IAAA;AAAA,QACnB,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;AAAA;AACH,GACA,SAAA;AACA,IAAe,YAAA,GAAA,KAAA;AAAA;AAEjB,EAAO,OAAA,aAAA;AACT;;;;"}
@@ -1,5 +1,5 @@
1
- import type { ViteDevServer } from "vite";
2
- import type { AutoDiscoveredFiles, ResolvedUserOptions } from "../types.js";
1
+ import type { Logger, ViteDevServer } from "vite";
2
+ import type { AutoDiscoveredFiles, RenderMetrics, ResolvedUserOptions, StreamMetrics } from "../types.js";
3
3
  import type { RscRenderMessage } from "../worker/types.js";
4
4
  import type { Worker as NodeWorker } from "node:worker_threads";
5
5
  import { MessageChannel } from "node:worker_threads";
@@ -11,17 +11,18 @@ import { MessageChannel } from "node:worker_threads";
11
11
  * @param message - The RSC render message
12
12
  * @returns A ReadableStream that yields RSC chunks
13
13
  */
14
- export declare function handleWorkerRscStream(worker: NodeWorker, message: Omit<RscRenderMessage, "type" | "id">): ReadableStream<Uint8Array>;
14
+ export declare function handleWorkerRscStream(worker: NodeWorker, message: Omit<RscRenderMessage, "type" | "id">, logger: Logger, onMetrics?: (metrics: StreamMetrics) => void): ReadableStream<Uint8Array>;
15
15
  /**
16
16
  * Configures the worker request handler.
17
17
  * @param server - The Vite dev server
18
18
  * @param autoDiscoveredFiles - The auto discovered files
19
19
  * @param userOptions - The user options
20
20
  */
21
- export declare function configureWorkerRequestHandler({ server, autoDiscoveredFiles, userOptions: _userOptions, hmrChannel, }: {
21
+ export declare function configureWorkerRequestHandler({ server, autoDiscoveredFiles, userOptions: _userOptions, hmrChannel, onMetrics, }: {
22
22
  server: ViteDevServer;
23
23
  autoDiscoveredFiles: AutoDiscoveredFiles;
24
24
  userOptions: ResolvedUserOptions;
25
25
  hmrChannel: MessageChannel;
26
+ onMetrics?: (metrics: RenderMetrics) => void;
26
27
  }): Promise<void>;
27
28
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,KAAK,EACV,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAEV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AA2HrD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,GAC7C,cAAc,CAAC,UAAU,CAAC,CAe5B;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,UAAU,GACX,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;CAC5B,iBAuHA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../plugin/react-client/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EAEb,mBAAmB,EACnB,aAAa,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EACV,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAWrD;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC,EAC9C,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,GAC3C,cAAc,CAAC,UAAU,CAAC,CAwC5B;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CAAC,EAClD,MAAM,EACN,mBAAmB,EACnB,WAAW,EAAE,YAAY,EACzB,UAAU,EACV,SAAS,GACV,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,WAAW,EAAE,mBAAmB,CAAC;IACjC,UAAU,EAAE,cAAc,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;CAC9C,iBAwJA"}