vite-plugin-react-server 0.3.18 → 1.0.0

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 (246) hide show
  1. package/README.md +220 -141
  2. package/bin/patch.mjs +8 -2
  3. package/dist/package.json +15 -8
  4. package/dist/plugin/checkFilesExist.d.ts.map +1 -1
  5. package/dist/plugin/checkFilesExist.js +6 -2
  6. package/dist/plugin/checkFilesExist.js.map +1 -1
  7. package/dist/plugin/collect-manifest-client-files.d.ts +23 -0
  8. package/dist/plugin/collect-manifest-client-files.d.ts.map +1 -0
  9. package/dist/plugin/collect-manifest-client-files.js +131 -0
  10. package/dist/plugin/collect-manifest-client-files.js.map +1 -0
  11. package/dist/plugin/components.d.ts +3 -13
  12. package/dist/plugin/components.d.ts.map +1 -1
  13. package/dist/plugin/components.js +3 -13
  14. package/dist/plugin/config/defaults.d.ts +14 -6
  15. package/dist/plugin/config/defaults.d.ts.map +1 -1
  16. package/dist/plugin/config/defaults.js +9 -5
  17. package/dist/plugin/config/defaults.js.map +1 -1
  18. package/dist/plugin/config/getPaths.d.ts +0 -1
  19. package/dist/plugin/config/getPaths.d.ts.map +1 -1
  20. package/dist/plugin/config/getPaths.js +2 -7
  21. package/dist/plugin/config/getPaths.js.map +1 -1
  22. package/dist/plugin/config/mimeTypes.d.ts +2 -0
  23. package/dist/plugin/config/mimeTypes.d.ts.map +1 -0
  24. package/dist/plugin/config/mimeTypes.js +24 -0
  25. package/dist/plugin/config/mimeTypes.js.map +1 -0
  26. package/dist/plugin/config/resolveOptions.d.ts +2 -2
  27. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  28. package/dist/plugin/config/resolveOptions.js +47 -28
  29. package/dist/plugin/config/resolveOptions.js.map +1 -1
  30. package/dist/plugin/config/resolvePages.d.ts +1 -0
  31. package/dist/plugin/config/resolvePages.d.ts.map +1 -1
  32. package/dist/plugin/config/resolvePages.js +9 -5
  33. package/dist/plugin/config/resolvePages.js.map +1 -1
  34. package/dist/plugin/config/resolveUserConfig.d.ts +2 -1
  35. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  36. package/dist/plugin/config/resolveUserConfig.js +181 -147
  37. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  38. package/dist/plugin/copy-dir.js +23 -18
  39. package/dist/plugin/copy-dir.js.map +1 -0
  40. package/dist/plugin/css-collector-inline.d.ts +10 -0
  41. package/dist/plugin/css-collector-inline.d.ts.map +1 -0
  42. package/dist/plugin/css-collector-inline.js +55 -0
  43. package/dist/plugin/css-collector-inline.js.map +1 -0
  44. package/dist/plugin/css-collector.d.ts +14 -0
  45. package/dist/plugin/css-collector.d.ts.map +1 -0
  46. package/dist/plugin/css-collector.js +49 -0
  47. package/dist/plugin/css-collector.js.map +1 -0
  48. package/dist/plugin/helpers/createHandler.d.ts +17 -0
  49. package/dist/plugin/helpers/createHandler.d.ts.map +1 -0
  50. package/dist/plugin/helpers/createHandler.js +111 -0
  51. package/dist/plugin/helpers/createHandler.js.map +1 -0
  52. package/dist/plugin/helpers/createRscStream.d.ts +27 -0
  53. package/dist/plugin/helpers/createRscStream.d.ts.map +1 -0
  54. package/dist/plugin/helpers/createRscStream.js +80 -0
  55. package/dist/plugin/helpers/createRscStream.js.map +1 -0
  56. package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
  57. package/dist/plugin/helpers/getBundleManifest.js +12 -4
  58. package/dist/plugin/helpers/getBundleManifest.js.map +1 -1
  59. package/dist/plugin/html.d.ts +5 -0
  60. package/dist/plugin/html.d.ts.map +1 -0
  61. package/dist/plugin/html.js +11 -0
  62. package/dist/plugin/html.js.map +1 -0
  63. package/dist/plugin/loader/createBuildLoader.d.ts +1 -1
  64. package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
  65. package/dist/plugin/loader/createBuildLoader.js +8 -5
  66. package/dist/plugin/loader/createBuildLoader.js.map +1 -1
  67. package/dist/plugin/loader/css-loader.d.ts.map +1 -1
  68. package/dist/plugin/loader/css-loader.js.map +1 -1
  69. package/dist/plugin/loader/react-loader.js +2 -2
  70. package/dist/plugin/loader/react-loader.js.map +1 -1
  71. package/dist/plugin/preserver/plugin.d.ts.map +1 -1
  72. package/dist/plugin/preserver/plugin.js +49 -14
  73. package/dist/plugin/preserver/plugin.js.map +1 -1
  74. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  75. package/dist/plugin/react-client/plugin.js +21 -78
  76. package/dist/plugin/react-client/plugin.js.map +1 -1
  77. package/dist/plugin/react-server/index.d.ts.map +1 -1
  78. package/dist/plugin/react-server/index.js +2 -0
  79. package/dist/plugin/react-server/index.js.map +1 -1
  80. package/dist/plugin/react-server/plugin.d.ts +2 -1
  81. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  82. package/dist/plugin/react-server/plugin.js +92 -225
  83. package/dist/plugin/react-server/plugin.js.map +1 -1
  84. package/dist/plugin/react-static/index.d.ts +2 -0
  85. package/dist/plugin/react-static/index.d.ts.map +1 -0
  86. package/dist/plugin/react-static/index.js +1 -0
  87. package/dist/plugin/react-static/plugin.d.ts +7 -0
  88. package/dist/plugin/react-static/plugin.d.ts.map +1 -0
  89. package/dist/plugin/react-static/plugin.js +207 -0
  90. package/dist/plugin/react-static/plugin.js.map +1 -0
  91. package/dist/plugin/react-static/types.d.ts +2 -0
  92. package/dist/plugin/react-static/types.d.ts.map +1 -0
  93. package/dist/plugin/resolvePage.d.ts.map +1 -1
  94. package/dist/plugin/resolvePage.js +9 -0
  95. package/dist/plugin/resolvePage.js.map +1 -1
  96. package/dist/plugin/root.d.ts +2 -0
  97. package/dist/plugin/root.d.ts.map +1 -0
  98. package/dist/plugin/root.js +12 -0
  99. package/dist/plugin/root.js.map +1 -0
  100. package/dist/plugin/transformer/plugin.d.ts.map +1 -1
  101. package/dist/plugin/transformer/plugin.js +32 -23
  102. package/dist/plugin/transformer/plugin.js.map +1 -1
  103. package/dist/plugin/transformer/types.d.ts +1 -18
  104. package/dist/plugin/transformer/types.d.ts.map +1 -1
  105. package/dist/plugin/types.d.ts +70 -15
  106. package/dist/plugin/types.d.ts.map +1 -1
  107. package/dist/plugin/worker/createWorker.js +0 -1
  108. package/dist/plugin/worker/createWorker.js.map +1 -1
  109. package/dist/plugin/worker/html/html-worker.development.d.ts +30 -0
  110. package/dist/plugin/worker/html/html-worker.development.d.ts.map +1 -1
  111. package/dist/plugin/worker/html/html-worker.development.js +30 -2
  112. package/dist/plugin/worker/html/html-worker.development.js.map +1 -1
  113. package/dist/plugin/worker/html/html-worker.production.js +3 -5
  114. package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
  115. package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
  116. package/dist/plugin/worker/html/messageHandler.js +12 -3
  117. package/dist/plugin/worker/html/messageHandler.js.map +1 -1
  118. package/dist/plugin/worker/html/renderPages.d.ts +13 -26
  119. package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
  120. package/dist/plugin/worker/html/renderPages.js +138 -86
  121. package/dist/plugin/worker/html/renderPages.js.map +1 -1
  122. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  123. package/dist/plugin/worker/rsc/messageHandler.js +104 -84
  124. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  125. package/dist/plugin/worker/rsc/rsc-worker.development.js +13 -18
  126. package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
  127. package/dist/plugin/worker/rsc/rsc-worker.production.js +4 -1
  128. package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -1
  129. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  130. package/dist/plugin/worker/rsc/state.js.map +1 -1
  131. package/dist/plugin/worker/types.d.ts +3 -0
  132. package/dist/plugin/worker/types.d.ts.map +1 -1
  133. package/dist/tsconfig.tsbuildinfo +1 -1
  134. package/package.json +14 -6
  135. package/plugin/checkFilesExist.ts +7 -3
  136. package/plugin/collect-manifest-client-files.ts +167 -0
  137. package/plugin/components.ts +3 -0
  138. package/plugin/config/defaults.tsx +70 -0
  139. package/plugin/config/getPaths.ts +1 -7
  140. package/plugin/config/mimeTypes.ts +17 -0
  141. package/plugin/config/resolveOptions.ts +58 -45
  142. package/plugin/config/resolvePages.ts +8 -4
  143. package/plugin/config/resolveUserConfig.ts +220 -176
  144. package/plugin/css-collector-inline.tsx +60 -0
  145. package/plugin/css-collector.tsx +62 -0
  146. package/plugin/helpers/createHandler.ts +135 -0
  147. package/plugin/helpers/createRscStream.ts +109 -0
  148. package/plugin/helpers/getBundleManifest.ts +14 -5
  149. package/plugin/html.tsx +9 -0
  150. package/plugin/loader/createBuildLoader.ts +9 -6
  151. package/plugin/loader/css-loader.ts +0 -2
  152. package/plugin/loader/react-loader.ts +2 -2
  153. package/plugin/preserver/plugin.ts +64 -17
  154. package/plugin/react-client/plugin.ts +23 -93
  155. package/plugin/react-server/index.ts +2 -0
  156. package/plugin/react-server/plugin.ts +111 -302
  157. package/plugin/react-static/index.ts +1 -0
  158. package/plugin/react-static/plugin.ts +256 -0
  159. package/plugin/react-static/types.ts +3 -0
  160. package/plugin/resolvePage.ts +9 -0
  161. package/plugin/root.ts +4 -0
  162. package/plugin/transformer/plugin.ts +40 -31
  163. package/plugin/transformer/types.ts +0 -19
  164. package/plugin/types.ts +77 -16
  165. package/plugin/worker/createWorker.ts +1 -1
  166. package/plugin/worker/html/README.md +63 -0
  167. package/plugin/worker/html/html-worker.development.tsx +89 -2
  168. package/plugin/worker/html/html-worker.production.tsx +8 -10
  169. package/plugin/worker/html/messageHandler.ts +12 -3
  170. package/plugin/worker/html/renderPages.ts +178 -138
  171. package/plugin/worker/rsc/README.md +58 -0
  172. package/plugin/worker/rsc/messageHandler.tsx +112 -113
  173. package/plugin/worker/rsc/rsc-worker.development.ts +12 -22
  174. package/plugin/worker/rsc/rsc-worker.production.ts +5 -1
  175. package/plugin/worker/rsc/state.ts +0 -3
  176. package/plugin/worker/types.ts +3 -0
  177. package/scripts/react+0.0.0-experimental-eda36a1c-20250228.patch +114 -12
  178. package/scripts/react-dom+0.0.0-experimental-eda36a1c-20250228.patch +10571 -121
  179. package/tsconfig.json +2 -2
  180. package/dist/plugin/collect-css-manifest.d.ts +0 -4
  181. package/dist/plugin/collect-css-manifest.d.ts.map +0 -1
  182. package/dist/plugin/collect-css-manifest.js +0 -65
  183. package/dist/plugin/collect-css-manifest.js.map +0 -1
  184. package/dist/plugin/config/createModuleIdGenerator.d.ts +0 -11
  185. package/dist/plugin/config/createModuleIdGenerator.d.ts.map +0 -1
  186. package/dist/plugin/config/createModuleIdGenerator.js +0 -44
  187. package/dist/plugin/config/createModuleIdGenerator.js.map +0 -1
  188. package/dist/plugin/getEnv.d.ts +0 -19
  189. package/dist/plugin/getEnv.d.ts.map +0 -1
  190. package/dist/plugin/getEnv.js +0 -107
  191. package/dist/plugin/loader/createCssLoader.d.ts +0 -30
  192. package/dist/plugin/loader/createCssLoader.d.ts.map +0 -1
  193. package/dist/plugin/loader/createCssLoader.js +0 -35
  194. package/dist/plugin/loader/createPageLoader.d.ts +0 -24
  195. package/dist/plugin/loader/createPageLoader.d.ts.map +0 -1
  196. package/dist/plugin/loader/createPageLoader.js +0 -50
  197. package/dist/plugin/loader/rsc/messageHandler.d.ts +0 -2
  198. package/dist/plugin/loader/rsc/messageHandler.d.ts.map +0 -1
  199. package/dist/plugin/loader/rsc/rsc-worker.development.d.ts +0 -2
  200. package/dist/plugin/loader/rsc/rsc-worker.development.d.ts.map +0 -1
  201. package/dist/plugin/loader/rsc/rsc-worker.development.js +0 -1
  202. package/dist/plugin/module-graph.d.ts +0 -10
  203. package/dist/plugin/module-graph.d.ts.map +0 -1
  204. package/dist/plugin/module-graph.js +0 -35
  205. package/dist/plugin/react-server/createHandler.d.ts +0 -17
  206. package/dist/plugin/react-server/createHandler.d.ts.map +0 -1
  207. package/dist/plugin/react-server/createHandler.js +0 -126
  208. package/dist/plugin/react-server/createHandler.js.map +0 -1
  209. package/dist/plugin/react-server/createRscStream.d.ts +0 -16
  210. package/dist/plugin/react-server/createRscStream.d.ts.map +0 -1
  211. package/dist/plugin/react-server/createRscStream.js +0 -70
  212. package/dist/plugin/react-server/createRscStream.js.map +0 -1
  213. package/dist/plugin/react-server/createSsrHandler.d.ts +0 -4
  214. package/dist/plugin/react-server/createSsrHandler.d.ts.map +0 -1
  215. package/dist/plugin/react-server/createSsrHandler.js +0 -95
  216. package/dist/plugin/utils/logger.d.ts +0 -9
  217. package/dist/plugin/utils/logger.d.ts.map +0 -1
  218. package/dist/plugin/utils/logger.js +0 -68
  219. package/dist/plugin/utils/logger.js.map +0 -1
  220. package/dist/plugin/worker/html/plugin.d.ts +0 -4
  221. package/dist/plugin/worker/html/plugin.d.ts.map +0 -1
  222. package/dist/plugin/worker/html/plugin.js +0 -94
  223. package/dist/plugin/worker/plugin.d.ts +0 -19
  224. package/dist/plugin/worker/plugin.d.ts.map +0 -1
  225. package/dist/plugin/worker/plugin.js +0 -23
  226. package/dist/plugin/worker/rsc/plugin.d.ts +0 -4
  227. package/dist/plugin/worker/rsc/plugin.d.ts.map +0 -1
  228. package/dist/plugin/worker/rsc/plugin.js +0 -76
  229. package/plugin/collect-css-manifest.ts +0 -82
  230. package/plugin/components.tsx +0 -14
  231. package/plugin/config/createModuleIdGenerator.ts +0 -52
  232. package/plugin/config/defaults.ts +0 -51
  233. package/plugin/getEnv.ts +0 -135
  234. package/plugin/loader/createCssLoader.ts +0 -73
  235. package/plugin/loader/createPageLoader.ts +0 -103
  236. package/plugin/loader/rsc/messageHandler.tsx +0 -1
  237. package/plugin/loader/rsc/rsc-worker.development.ts +0 -1
  238. package/plugin/module-graph.ts +0 -48
  239. package/plugin/react-server/createHandler.ts +0 -162
  240. package/plugin/react-server/createRscStream.ts +0 -86
  241. package/plugin/react-server/createSsrHandler.ts +0 -125
  242. package/plugin/utils/logger.ts +0 -52
  243. package/plugin/worker/html/plugin.ts +0 -101
  244. package/plugin/worker/plugin.ts +0 -26
  245. package/plugin/worker/rsc/plugin.ts +0 -84
  246. /package/dist/plugin/{loader/rsc/messageHandler.js → react-static/types.js} +0 -0
@@ -1,126 +0,0 @@
1
- /**
2
- * vite-plugin-react-server
3
- * Copyright (c) Nico Brinkkemper
4
- * MIT License
5
- */
6
- import { createLogger } from 'vite';
7
- import { collectManifestCss, collectModuleGraphCss } from '../collect-css-manifest.js';
8
- import { DEFAULT_CONFIG } from '../config/defaults.js';
9
- import { resolvePage } from '../resolvePage.js';
10
- import { resolveProps } from '../resolveProps.js';
11
- import { createRscStream } from './createRscStream.js';
12
-
13
- async function createHandler(url, pluginOptions, streamOptions) {
14
- const root = pluginOptions.projectRoot ?? process.cwd();
15
- const Html = pluginOptions.Html ?? DEFAULT_CONFIG.HTML;
16
- const pageExportName = pluginOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME;
17
- const propsExportName = pluginOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME;
18
- const controller = new AbortController();
19
- const cssFiles = streamOptions.cssFiles;
20
- const propsPath = typeof pluginOptions.props === "function" ? pluginOptions.props(url) : pluginOptions.props;
21
- const pagePath = typeof pluginOptions.Page === "function" ? pluginOptions.Page(url) : pluginOptions.Page;
22
- const cssModules = /* @__PURE__ */ new Set();
23
- if (!(streamOptions.serverManifest || streamOptions.moduleGraph))
24
- throw new Error("Missing server manifest or moduleGraph, pass it to options.");
25
- const getCss = streamOptions.serverManifest ? (id) => collectManifestCss(
26
- streamOptions.serverManifest,
27
- root,
28
- id,
29
- streamOptions.onCssFile
30
- ) : (id) => collectModuleGraphCss(streamOptions.moduleGraph, id);
31
- const loadWithCss = async (id, parentUrl) => {
32
- try {
33
- const mod = await streamOptions.loader(id);
34
- const pageCss = await Promise.resolve(getCss(id));
35
- Array.from(pageCss.keys()).forEach((css) => {
36
- cssModules.add(css);
37
- if (streamOptions.onCssFile) {
38
- streamOptions.onCssFile(css, parentUrl);
39
- }
40
- });
41
- return mod;
42
- } catch (e) {
43
- if (e.message?.includes("module runner has been closed")) {
44
- return { type: "skip" };
45
- } else {
46
- return { type: "error", error: e };
47
- }
48
- }
49
- };
50
- const PropsModule = await resolveProps({
51
- propsModule: await loadWithCss(propsPath ?? pagePath, url),
52
- path: String(propsPath ?? pagePath),
53
- exportName: propsExportName,
54
- url
55
- });
56
- if (PropsModule.type === "error")
57
- return { type: PropsModule.type, error: PropsModule?.error };
58
- if (PropsModule.type === "skip") return { type: PropsModule.type };
59
- const props = PropsModule[propsExportName];
60
- if (props?.type === "error") return { type: props.type, error: props.error };
61
- if (props?.type === "skip") return { type: props.type };
62
- const PageModule = await resolvePage({
63
- pageModule: await loadWithCss(pagePath, url),
64
- path: pagePath,
65
- exportName: pageExportName,
66
- url
67
- });
68
- if (PageModule.type === "error")
69
- return { type: PageModule.type, error: PageModule.error };
70
- if (PageModule.type === "skip") return { type: PageModule.type };
71
- const Page = PageModule[pageExportName];
72
- if (Page?.type === "error") return { type: Page.type, error: Page.error };
73
- if (Page?.type === "skip") return { type: Page.type };
74
- if (!(typeof Page === "function")) {
75
- return {
76
- type: "error",
77
- error: new Error("Invalid Page component: " + pagePath, {
78
- cause: Page
79
- })
80
- };
81
- }
82
- if (!(typeof props === "object")) {
83
- return {
84
- type: "error",
85
- error: new Error("Invalid props: " + propsPath, {
86
- cause: props
87
- })
88
- };
89
- }
90
- if (streamOptions.cssFiles) {
91
- streamOptions.cssFiles.forEach((css) => cssModules.add(css));
92
- }
93
- const stream = createRscStream({
94
- Html,
95
- Page,
96
- props,
97
- moduleBasePath: "",
98
- logger: streamOptions.logger ?? createLogger(),
99
- cssFiles: Array.from(cssModules),
100
- route: url,
101
- url,
102
- pipableStreamOptions: streamOptions.pipableStreamOptions,
103
- htmlProps: {
104
- pageProps: props,
105
- route: url,
106
- url
107
- }
108
- });
109
- if (!stream) {
110
- return { type: "skip" };
111
- }
112
- const assets = {
113
- css: new Set(cssFiles ?? []),
114
- clientPath: pagePath ?? ""
115
- };
116
- return {
117
- type: "success",
118
- controller,
119
- stream,
120
- assets,
121
- clientPath: assets.clientPath
122
- };
123
- }
124
-
125
- export { createHandler };
126
- //# sourceMappingURL=createHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createHandler.js","sources":["../../../plugin/react-server/createHandler.ts"],"sourcesContent":["import type { PipeableStream } from \"react-dom/server\";\nimport { createLogger } from \"vite\";\nimport {\n collectManifestCss,\n collectModuleGraphCss,\n} from \"../collect-css-manifest.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { resolvePage } from \"../resolvePage.js\";\nimport { resolveProps } from \"../resolveProps.js\";\nimport type { CreateHandlerOptions, ResolvedUserOptions } from \"../types.js\";\nimport { createRscStream } from \"./createRscStream.js\";\n\ntype CreateHandlerResult = \n | { type: \"success\"; controller: AbortController; stream: PipeableStream; assets: any; clientPath: string }\n | { type: \"error\"; error: Error }\n | { type: \"skip\" };\n\ninterface HandlerAssets {\n css: Set<string>;\n clientPath: string;\n}\n\nexport async function createHandler<T>(\n url: string,\n pluginOptions: ResolvedUserOptions,\n streamOptions: CreateHandlerOptions<T>\n): Promise<CreateHandlerResult> {\n const root = pluginOptions.projectRoot ?? process.cwd();\n\n const Html = pluginOptions.Html ?? DEFAULT_CONFIG.HTML;\n const pageExportName =\n pluginOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME;\n const propsExportName =\n pluginOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME;\n const controller = new AbortController();\n\n const cssFiles = streamOptions.cssFiles;\n const propsPath =\n typeof pluginOptions.props === \"function\"\n ? pluginOptions.props(url)\n : pluginOptions.props;\n const pagePath =\n typeof pluginOptions.Page === \"function\"\n ? pluginOptions.Page(url)\n : pluginOptions.Page;\n\n const cssModules = new Set<string>();\n\n if (!(streamOptions.serverManifest || streamOptions.moduleGraph))\n throw new Error(\"Missing server manifest or moduleGraph, pass it to options.\");\n\n const getCss = streamOptions.serverManifest\n ? (id: string) =>\n collectManifestCss(\n streamOptions.serverManifest!,\n root,\n id,\n streamOptions.onCssFile\n )\n : (id: string) => collectModuleGraphCss(streamOptions.moduleGraph!, id);\n\n const loadWithCss = async (id: string, parentUrl: string) => {\n try {\n const mod = await streamOptions.loader(id);\n const pageCss = await Promise.resolve(getCss(id));\n Array.from(pageCss.keys()).forEach((css) => {\n cssModules.add(css);\n // Notify about new CSS file if callback exists\n if (streamOptions.onCssFile) {\n streamOptions.onCssFile(css, parentUrl);\n }\n });\n return mod as Record<string, any>;\n } catch (e: any) {\n if (e.message?.includes(\"module runner has been closed\")) {\n return { type: \"skip\" } as Record<string, any>;\n } else {\n return { type: \"error\", error: e } as Record<string, any>;\n }\n }\n };\n\n const PropsModule = await resolveProps({\n propsModule: await loadWithCss(propsPath ?? pagePath, url),\n path: String(propsPath ?? pagePath),\n exportName: propsExportName,\n url,\n });\n if (PropsModule.type === \"error\")\n return { type: PropsModule.type, error: PropsModule?.error };\n if (PropsModule.type === \"skip\") return { type: PropsModule.type };\n const props = PropsModule[propsExportName as keyof typeof PropsModule] as any;\n if (props?.type === \"error\") return { type: props.type, error: props.error };\n if (props?.type === \"skip\") return { type: props.type };\n\n const PageModule = await resolvePage({\n pageModule: await loadWithCss(pagePath, url),\n path: pagePath,\n exportName: pageExportName,\n url,\n });\n if (PageModule.type === \"error\")\n return { type: PageModule.type, error: PageModule.error };\n if (PageModule.type === \"skip\") return { type: PageModule.type };\n const Page = PageModule[pageExportName as keyof typeof PageModule] as any;\n if (Page?.type === \"error\") return { type: Page.type, error: Page.error };\n if (Page?.type === \"skip\") return { type: Page.type };\n if (!(typeof Page === \"function\")) {\n return {\n type: \"error\",\n error: new Error(\"Invalid Page component: \" + pagePath, {\n cause: Page,\n }),\n };\n }\n if (!(typeof props === \"object\")) {\n return {\n type: \"error\",\n error: new Error(\"Invalid props: \" + propsPath, {\n cause: props,\n }),\n } \n }\n\n // Add any additional CSS files\n if (streamOptions.cssFiles) {\n streamOptions.cssFiles.forEach((css) => cssModules.add(css));\n }\n const stream = createRscStream({\n Html: Html,\n Page: Page,\n props: props,\n moduleBasePath: '',\n logger: streamOptions.logger ?? createLogger(),\n cssFiles: Array.from(cssModules),\n route: url,\n url,\n pipableStreamOptions: streamOptions.pipableStreamOptions,\n htmlProps: {\n pageProps: props,\n route: url,\n url: url,\n },\n });\n\n if (!stream) {\n return { type: \"skip\" as const };\n }\n\n const assets: HandlerAssets = {\n css: new Set(cssFiles ?? []),\n clientPath: pagePath ?? ''\n };\n\n return {\n type: \"success\",\n controller,\n stream,\n assets,\n clientPath: assets.clientPath,\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import * as React from "react";
2
- import type { PipeableStreamOptions } from "../worker/types.js";
3
- import type { Logger } from "vite";
4
- export declare function createRscStream({ Html, Page, props, moduleBasePath, logger, cssFiles, route, url, pipableStreamOptions, htmlProps, }: {
5
- Html: React.ComponentType<any>;
6
- Page: React.ComponentType<any>;
7
- props: any;
8
- moduleBasePath: string;
9
- logger: Logger;
10
- cssFiles?: string[];
11
- route: string;
12
- url: string;
13
- pipableStreamOptions?: PipeableStreamOptions;
14
- htmlProps?: any;
15
- }): any;
16
- //# sourceMappingURL=createRscStream.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createRscStream.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/createRscStream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AA2BnC,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,cAAc,EACd,MAAM,EACN,QAAa,EACb,KAAK,EACL,GAAG,EACH,oBAAoB,EACpB,SAAS,GACV,EAAE;IACD,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/B,KAAK,EAAE,GAAG,CAAC;IACX,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB,OAgCA"}
@@ -1,70 +0,0 @@
1
- /**
2
- * vite-plugin-react-server
3
- * Copyright (c) Nico Brinkkemper
4
- * MIT License
5
- */
6
- import * as React from 'react';
7
- import { renderToPipeableStream } from 'react-server-dom-esm/server.node';
8
-
9
- function CssCollector({
10
- children,
11
- cssFiles
12
- }) {
13
- return React.createElement(
14
- React.Fragment,
15
- null,
16
- ...cssFiles.map((css) => {
17
- const url = css.startsWith("/") || css.startsWith("http") || css.startsWith("./") ? css : "/" + css;
18
- return React.createElement("link", {
19
- key: css,
20
- rel: "stylesheet",
21
- href: url,
22
- precedence: "high"
23
- });
24
- }),
25
- children
26
- );
27
- }
28
- function createRscStream({
29
- Html,
30
- Page,
31
- props,
32
- moduleBasePath,
33
- logger,
34
- cssFiles = [],
35
- route,
36
- url,
37
- pipableStreamOptions,
38
- htmlProps
39
- }) {
40
- const htmlIsFragment = Html == React.Fragment;
41
- const withCss = React.createElement(
42
- CssCollector,
43
- { cssFiles },
44
- React.createElement(Page, props)
45
- );
46
- const content = htmlIsFragment ? withCss : React.createElement(Html, htmlProps, withCss);
47
- try {
48
- return renderToPipeableStream(
49
- content,
50
- moduleBasePath,
51
- {
52
- onError: (error) => {
53
- if (process.env["NODE_ENV"] === "development") {
54
- console.trace(error);
55
- }
56
- logger.error(`Stream error at ${route}.`, { error });
57
- },
58
- onPostpone: logger.info ?? console.info,
59
- environmentName: "Server",
60
- ...pipableStreamOptions
61
- }
62
- );
63
- } catch (error) {
64
- logger.error(`Failed to create stream for ${route}.`, { error });
65
- return null;
66
- }
67
- }
68
-
69
- export { createRscStream };
70
- //# sourceMappingURL=createRscStream.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createRscStream.js","sources":["../../../plugin/react-server/createRscStream.ts"],"sourcesContent":["import * as React from \"react\";\n// @ts-ignore\nimport { renderToPipeableStream } from \"react-server-dom-esm/server.node\";\nimport type { PipeableStreamOptions } from \"../worker/types.js\";\nimport type { Logger } from \"vite\";\n\n\n// CSS collector component\nfunction CssCollector({\n children,\n cssFiles,\n}: {\n children?: React.ReactNode;\n cssFiles: string[];\n}) {\n return React.createElement(\n React.Fragment,\n null,\n ...cssFiles.map((css) => {\n const url = css.startsWith('/') || css.startsWith('http') || css.startsWith('./') ? css : '/'+css\n return React.createElement('link', {\n key: css,\n rel: 'stylesheet',\n href: url,\n precedence: 'high'\n })\n }),\n children\n );\n}\n\nexport function createRscStream({\n Html,\n Page,\n props,\n moduleBasePath,\n logger,\n cssFiles = [],\n route,\n url,\n pipableStreamOptions,\n htmlProps,\n}: {\n Html: React.ComponentType<any>;\n Page: React.ComponentType<any>;\n props: any;\n moduleBasePath: string;\n logger: Logger;\n cssFiles?: string[];\n route: string;\n url: string;\n pipableStreamOptions?: PipeableStreamOptions;\n htmlProps?: any;\n}) {\n \n const htmlIsFragment = Html == React.Fragment;\n const withCss = React.createElement(\n CssCollector,\n { cssFiles },\n React.createElement(Page, props)\n )\n // Otherwise wrap with Html component\n const content = htmlIsFragment \n ? withCss\n : React.createElement(Html, htmlProps, withCss);\n try {\n return renderToPipeableStream(\n content,\n moduleBasePath,\n {\n onError: (error: Error) => {\n if(process.env['NODE_ENV'] === 'development') {\n console.trace(error);\n }\n logger.error(`Stream error at ${route}.`, {error});\n },\n onPostpone: logger.info ?? console.info, \n environmentName: \"Server\",\n ...pipableStreamOptions,\n }\n );\n } catch (error) {\n logger.error(`Failed to create stream for ${route}.`, {error: error as Error});\n return null;\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAQA,SAAS,YAAa,CAAA;AAAA,EACpB,QAAA;AAAA,EACA;AACF,CAGG,EAAA;AACD,EAAA,OAAO,KAAM,CAAA,aAAA;AAAA,IACX,KAAM,CAAA,QAAA;AAAA,IACN,IAAA;AAAA,IACA,GAAG,QAAA,CAAS,GAAI,CAAA,CAAC,GAAQ,KAAA;AACvB,MAAA,MAAM,GAAM,GAAA,GAAA,CAAI,UAAW,CAAA,GAAG,KAAK,GAAI,CAAA,UAAA,CAAW,MAAM,CAAA,IAAK,GAAI,CAAA,UAAA,CAAW,IAAI,CAAA,GAAI,MAAM,GAAI,GAAA,GAAA;AAC9F,MAAO,OAAA,KAAA,CAAM,cAAc,MAAQ,EAAA;AAAA,QACjC,GAAK,EAAA,GAAA;AAAA,QACL,GAAK,EAAA,YAAA;AAAA,QACL,IAAM,EAAA,GAAA;AAAA,QACN,UAAY,EAAA;AAAA,OACb,CAAA;AAAA,KACF,CAAA;AAAA,IACD;AAAA,GACF;AACF;AAEO,SAAS,eAAgB,CAAA;AAAA,EAC9B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAW,EAAC;AAAA,EACZ,KAAA;AAAA,EACA,GAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAWG,EAAA;AAED,EAAM,MAAA,cAAA,GAAiB,QAAQ,KAAM,CAAA,QAAA;AACrC,EAAA,MAAM,UAAU,KAAM,CAAA,aAAA;AAAA,IACpB,YAAA;AAAA,IACA,EAAE,QAAS,EAAA;AAAA,IACX,KAAA,CAAM,aAAc,CAAA,IAAA,EAAM,KAAK;AAAA,GACjC;AAEA,EAAA,MAAM,UAAU,cACZ,GAAA,OAAA,GACA,MAAM,aAAc,CAAA,IAAA,EAAM,WAAW,OAAO,CAAA;AAChD,EAAI,IAAA;AACF,IAAO,OAAA,sBAAA;AAAA,MACL,OAAA;AAAA,MACA,cAAA;AAAA,MACA;AAAA,QACE,OAAA,EAAS,CAAC,KAAiB,KAAA;AACzB,UAAA,IAAG,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAA,KAAM,aAAe,EAAA;AAC5C,YAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA;AAErB,UAAA,MAAA,CAAO,MAAM,CAAmB,gBAAA,EAAA,KAAK,CAAK,CAAA,CAAA,EAAA,EAAC,OAAM,CAAA;AAAA,SACnD;AAAA,QACA,UAAA,EAAY,MAAO,CAAA,IAAA,IAAQ,OAAQ,CAAA,IAAA;AAAA,QACnC,eAAiB,EAAA,QAAA;AAAA,QACjB,GAAG;AAAA;AACL,KACF;AAAA,WACO,KAAO,EAAA;AACd,IAAA,MAAA,CAAO,MAAM,CAA+B,4BAAA,EAAA,KAAK,CAAK,CAAA,CAAA,EAAA,EAAC,OAAsB,CAAA;AAC7E,IAAO,OAAA,IAAA;AAAA;AAEX;;;;"}
@@ -1,4 +0,0 @@
1
- import { type ViteDevServer } from "vite";
2
- import type { RequestHandler, ResolvedUserOptions } from "../types.js";
3
- export declare function createSsrHandler(options: ResolvedUserOptions, server: ViteDevServer): RequestHandler;
4
- //# sourceMappingURL=createSsrHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"createSsrHandler.d.ts","sourceRoot":"","sources":["../../../plugin/react-server/createSsrHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC;AAEzD,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,aAAa,GACpB,cAAc,CA+GhB"}
@@ -1,95 +0,0 @@
1
- import { join, resolve } from "node:path";
2
- import { Writable } from "node:stream";
3
- import { Worker } from "node:worker_threads";
4
- import {} from "vite";
5
- import { DEFAULT_CONFIG } from "../config/defaults.js";
6
- import { createHandler } from "./createHandler.js";
7
- export function createSsrHandler(options, server) {
8
- const worker = new Worker(options?.htmlWorkerPath
9
- ? resolve(server.config.root, options?.htmlWorkerPath)
10
- : DEFAULT_CONFIG.HTML_WORKER_PATH, {
11
- env: {
12
- NODE_OPTIONS: "--conditions ''",
13
- VITE_LOADER_PATH: resolve(server.config.cacheDir, "react-stream/worker/loader.js"),
14
- },
15
- });
16
- return async function handleSsrRequest(req, res, next) {
17
- if (!req.url ||
18
- req.url.startsWith("/@") ||
19
- (req.url.includes(".") && !req.url.endsWith(".html"))) {
20
- return next();
21
- }
22
- try {
23
- const result = await createHandler(req.url ?? "", {
24
- ...options,
25
- projectRoot: server.config.root,
26
- }, {
27
- loader: server.ssrLoadModule.bind(server),
28
- moduleGraph: server.moduleGraph,
29
- });
30
- const moduleRootPath = join(server.config.cacheDir, options.moduleBasePath);
31
- // const htmlOutputPath = join(
32
- // server.config.cacheDir,
33
- // server.config.build.outDir,
34
- // req.url,
35
- // "index.html"
36
- // );
37
- if (result.type !== "success") {
38
- throw new Error(result.type === "error" ? String(result.error) : "Skipped");
39
- }
40
- // Collect RSC stream data
41
- const rscData = await new Promise((resolve, reject) => {
42
- let data = "";
43
- if (!result.stream) {
44
- resolve(data);
45
- return;
46
- }
47
- const writable = new Writable({
48
- write(chunk, _, callback) {
49
- data += chunk;
50
- callback();
51
- },
52
- final(callback) {
53
- resolve(data);
54
- callback();
55
- },
56
- });
57
- result.stream.pipe(writable);
58
- writable.on("error", reject);
59
- });
60
- // Get HTML from worker
61
- const html = await new Promise((resolve, reject) => {
62
- worker.postMessage({
63
- type: "RSC_CHUNK",
64
- id: req.url ?? "/",
65
- chunk: rscData,
66
- moduleRootPath: moduleRootPath,
67
- moduleBaseURL: options.moduleBaseURL,
68
- // Don't need file paths in dev mode
69
- outDir: "",
70
- htmlOutputPath: "",
71
- pipableStreamOptions: options.pipableStreamOptions ?? {},
72
- clientManifest: {},
73
- serverManifest: {},
74
- });
75
- worker.once("message", (msg) => {
76
- if (msg.type === "ERROR") {
77
- const message = msg.error instanceof Error
78
- ? msg.error.message
79
- : String(msg.error);
80
- reject(new Error(message, { cause: msg }));
81
- }
82
- else if (msg.type === "HTML") {
83
- // In dev, content will be the HTML string
84
- resolve(msg.content);
85
- }
86
- });
87
- });
88
- res.setHeader("Content-Type", "text/html");
89
- res.end(html);
90
- }
91
- catch (error) {
92
- next(error);
93
- }
94
- };
95
- }
@@ -1,9 +0,0 @@
1
- import { type LogLevel } from 'vite';
2
- export declare const createLogger: (prefix: string, logLevel?: LogLevel) => {
3
- clear: () => void;
4
- info: (msg: string, ...args: any[]) => void;
5
- warn: (msg: string, ...args: any[]) => void;
6
- error: (msg: string, ...args: any[]) => void;
7
- debug: (msg: string, ...args: any[]) => void;
8
- };
9
- //# sourceMappingURL=logger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../plugin/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,QAAQ,EAAE,MAAM,MAAM,CAAC;AAwBvE,eAAO,MAAM,YAAY,WAA0D,MAAM,aAAY,QAAQ;;gBAM7F,MAAM,WAAW,GAAG,EAAE;gBAGtB,MAAM,WAAW,GAAG,EAAE;iBAGrB,MAAM,WAAW,GAAG,EAAE;iBAGtB,MAAM,WAAW,GAAG,EAAE;CAYtC,CAAC"}
@@ -1,68 +0,0 @@
1
- /**
2
- * vite-plugin-react-server
3
- * Copyright (c) Nico Brinkkemper
4
- * MIT License
5
- */
6
- import { createLogger as createLogger$1 } from 'vite';
7
-
8
- const isPrimitive = (value) => {
9
- return typeof value === "string" || typeof value === "number" || typeof value === "boolean" || typeof value === "symbol";
10
- };
11
- const buildMessage = (prefix, msg, ...args) => {
12
- let buildMsg = `[${prefix}] ${msg}`;
13
- for (const arg of args) {
14
- if (isPrimitive(arg)) {
15
- buildMsg += `
16
- [${prefix}] ${String(arg)}`;
17
- } else if (arg instanceof Error) {
18
- buildMsg += `
19
- [${prefix}] ${arg.name}`;
20
- buildMsg += `
21
- [${prefix}] ${arg.message}`;
22
- buildMsg += `
23
- [${prefix}] ${arg.stack}`;
24
- buildMsg += `
25
- [${prefix}] ${arg.cause}`;
26
- } else {
27
- buildMsg += `
28
- [${prefix}] ${JSON.stringify(arg)}`;
29
- }
30
- }
31
- return buildMsg;
32
- };
33
- const createLogger = process.env["NODE_ENV"] === "development" ? (prefix, logLevel = "info") => {
34
- const logger = createLogger$1(logLevel, {
35
- allowClearScreen: true
36
- });
37
- return {
38
- clear: () => logger.clearScreen("info"),
39
- info: (msg, ...args) => {
40
- console.log(buildMessage(prefix, msg, ...args));
41
- },
42
- warn: (msg, ...args) => {
43
- console.warn(buildMessage(prefix, msg, ...args));
44
- },
45
- error: (msg, ...args) => {
46
- console.error(buildMessage(prefix, msg, ...args));
47
- },
48
- debug: (msg, ...args) => {
49
- console.debug(buildMessage(prefix, msg, ...args));
50
- }
51
- };
52
- } : () => {
53
- return {
54
- clear: () => {
55
- },
56
- info: () => {
57
- },
58
- warn: () => {
59
- },
60
- error: () => {
61
- },
62
- debug: () => {
63
- }
64
- };
65
- };
66
-
67
- export { createLogger };
68
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sources":["../../../plugin/utils/logger.ts"],"sourcesContent":["import { createLogger as createViteLogger, type LogLevel } from 'vite';\n\n\nconst isPrimitive = (value: any) => {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'symbol';\n}\n\nconst buildMessage = (prefix: string, msg: string, ...args: any[]) => {\n let buildMsg = `[${prefix}] ${msg}`\n for(const arg of args) {\n if(isPrimitive(arg)) {\n buildMsg += `\\n[${prefix}] ${String(arg)}`;\n } else if(arg instanceof Error) {\n buildMsg += `\\n[${prefix}] ${arg.name}`\n buildMsg += `\\n[${prefix}] ${arg.message}`\n buildMsg += `\\n[${prefix}] ${arg.stack}`\n buildMsg += `\\n[${prefix}] ${arg.cause}`\n } else {\n buildMsg += `\\n[${prefix}] ${JSON.stringify(arg)}`;\n }\n }\n return buildMsg;\n}\n\nexport const createLogger = (process.env['NODE_ENV'] === 'development') ? (prefix: string, logLevel: LogLevel = 'info') => {\n const logger = createViteLogger(logLevel, {\n allowClearScreen: true\n });\n return {\n clear: () => logger.clearScreen('info'),\n info: (msg: string, ...args: any[]) => {\n console.log(buildMessage(prefix, msg, ...args))\n },\n warn: (msg: string, ...args: any[]) => {\n console.warn(buildMessage(prefix, msg, ...args))\n },\n error: (msg: string, ...args: any[]) => {\n console.error(buildMessage(prefix, msg, ...args))\n },\n debug: (msg: string, ...args: any[]) => {\n console.debug(buildMessage(prefix, msg, ...args))\n }\n };\n} : () => {\n return {\n clear: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n debug: () => {},\n };\n};"],"names":["createViteLogger"],"mappings":";;;;;;;AAGA,MAAM,WAAA,GAAc,CAAC,KAAe,KAAA;AAClC,EAAO,OAAA,OAAO,KAAU,KAAA,QAAA,IAAY,OAAO,KAAA,KAAU,YAAY,OAAO,KAAA,KAAU,SAAa,IAAA,OAAO,KAAU,KAAA,QAAA;AAClH,CAAA;AAEA,MAAM,YAAe,GAAA,CAAC,MAAgB,EAAA,GAAA,EAAA,GAAgB,IAAgB,KAAA;AACpE,EAAA,IAAI,QAAW,GAAA,CAAA,CAAA,EAAI,MAAM,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA;AACjC,EAAA,KAAA,MAAU,OAAO,IAAM,EAAA;AACrB,IAAG,IAAA,WAAA,CAAY,GAAG,CAAG,EAAA;AACnB,MAAY,QAAA,IAAA;AAAA,CAAA,EAAM,MAAM,CAAA,EAAA,EAAK,MAAO,CAAA,GAAG,CAAC,CAAA,CAAA;AAAA,KAC1C,MAAA,IAAU,eAAe,KAAO,EAAA;AAC9B,MAAY,QAAA,IAAA;AAAA,CAAM,EAAA,MAAM,CAAK,EAAA,EAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AACrC,MAAY,QAAA,IAAA;AAAA,CAAM,EAAA,MAAM,CAAK,EAAA,EAAA,GAAA,CAAI,OAAO,CAAA,CAAA;AACxC,MAAY,QAAA,IAAA;AAAA,CAAM,EAAA,MAAM,CAAK,EAAA,EAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AACtC,MAAY,QAAA,IAAA;AAAA,CAAM,EAAA,MAAM,CAAK,EAAA,EAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAAA,KACjC,MAAA;AACL,MAAY,QAAA,IAAA;AAAA,CAAA,EAAM,MAAM,CAAA,EAAA,EAAK,IAAK,CAAA,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA;AAAA;AAClD;AAEF,EAAO,OAAA,QAAA;AACT,CAAA;AAEa,MAAA,YAAA,GAAgB,QAAQ,GAAI,CAAA,UAAU,MAAM,aAAiB,GAAA,CAAC,MAAgB,EAAA,QAAA,GAAqB,MAAW,KAAA;AACzH,EAAM,MAAA,MAAA,GAASA,eAAiB,QAAU,EAAA;AAAA,IACxC,gBAAkB,EAAA;AAAA,GACnB,CAAA;AACD,EAAO,OAAA;AAAA,IACL,KAAO,EAAA,MAAM,MAAO,CAAA,WAAA,CAAY,MAAM,CAAA;AAAA,IACtC,IAAA,EAAM,CAAC,GAAA,EAAA,GAAgB,IAAgB,KAAA;AACrC,MAAA,OAAA,CAAQ,IAAI,YAAa,CAAA,MAAA,EAAQ,GAAK,EAAA,GAAG,IAAI,CAAC,CAAA;AAAA,KAChD;AAAA,IACA,IAAA,EAAM,CAAC,GAAA,EAAA,GAAgB,IAAgB,KAAA;AACrC,MAAA,OAAA,CAAQ,KAAK,YAAa,CAAA,MAAA,EAAQ,GAAK,EAAA,GAAG,IAAI,CAAC,CAAA;AAAA,KACjD;AAAA,IACA,KAAA,EAAO,CAAC,GAAA,EAAA,GAAgB,IAAgB,KAAA;AACtC,MAAA,OAAA,CAAQ,MAAM,YAAa,CAAA,MAAA,EAAQ,GAAK,EAAA,GAAG,IAAI,CAAC,CAAA;AAAA,KAClD;AAAA,IACA,KAAA,EAAO,CAAC,GAAA,EAAA,GAAgB,IAAgB,KAAA;AACtC,MAAA,OAAA,CAAQ,MAAM,YAAa,CAAA,MAAA,EAAQ,GAAK,EAAA,GAAG,IAAI,CAAC,CAAA;AAAA;AAClD,GACF;AACF,CAAA,GAAI,MAAM;AACR,EAAO,OAAA;AAAA,IACL,OAAO,MAAM;AAAA,KAAC;AAAA,IACd,MAAM,MAAM;AAAA,KAAC;AAAA,IACb,MAAM,MAAM;AAAA,KAAC;AAAA,IACb,OAAO,MAAM;AAAA,KAAC;AAAA,IACd,OAAO,MAAM;AAAA;AAAC,GAChB;AACF;;;;"}
@@ -1,4 +0,0 @@
1
- import type { Plugin } from "vite";
2
- import type { StreamPluginOptions } from "../../types.js";
3
- export declare function reactHtmlWorkerPlugin(options: StreamPluginOptions): Plugin;
4
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/html/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,MAAM,CAAC;AAG/C,OAAO,KAAK,EAAuB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAM/E,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA2F1E"}
@@ -1,94 +0,0 @@
1
- import { join, resolve } from "path";
2
- import { DEFAULT_CONFIG } from "../../config/defaults.js";
3
- import { getPluginRoot } from "../../config/getPaths.js";
4
- import { resolveOptions } from "../../config/resolveOptions.js";
5
- let userOptions;
6
- export function reactHtmlWorkerPlugin(options) {
7
- const resolvedUserOptions = resolveOptions(options);
8
- if (resolvedUserOptions.type === 'error') {
9
- throw resolvedUserOptions.error;
10
- }
11
- userOptions = resolvedUserOptions.userOptions;
12
- return {
13
- name: "vite:react-html-worker",
14
- config(config) {
15
- const root = config.root ?? process.cwd();
16
- const pluginRoot = getPluginRoot();
17
- const htmlWorkerPath = typeof options.htmlWorkerPath === 'string'
18
- ? resolve(root, options.htmlWorkerPath)
19
- : resolve(pluginRoot, DEFAULT_CONFIG.HTML_WORKER_PATH);
20
- const format = 'esm';
21
- // Single worker output for server build
22
- const workerConfig = {
23
- input: {
24
- 'html-worker': htmlWorkerPath,
25
- },
26
- output: {
27
- format,
28
- dir: join(userOptions.build.outDir, userOptions.build.server),
29
- entryFileNames: '[name].js',
30
- preserveModules: true,
31
- preserveModulesRoot: userOptions.build.preserveModulesRoot === true ? userOptions.moduleBase : undefined,
32
- // Add manifest entry
33
- manualChunks: {
34
- 'html-worker': [htmlWorkerPath]
35
- }
36
- }
37
- };
38
- return {
39
- build: {
40
- rollupOptions: {
41
- preserveEntrySignatures: 'strict',
42
- input: {
43
- ...workerConfig.input,
44
- ...(typeof config.build?.rollupOptions?.input === 'object'
45
- ? config.build?.rollupOptions?.input
46
- : {}),
47
- },
48
- external: [
49
- 'vite',
50
- 'rollup',
51
- 'react',
52
- 'react-dom',
53
- 'react-dom/server',
54
- 'react-server-dom-esm',
55
- 'react-server-dom-esm/client.node',
56
- 'react-server-dom-esm/server.node',
57
- 'react-server-dom-esm/node-loader',
58
- 'source-map',
59
- 'acorn-loose',
60
- 'webpack-sources',
61
- 'stream',
62
- 'util',
63
- 'crypto',
64
- 'async_hooks',
65
- 'fs',
66
- 'path',
67
- 'worker_threads',
68
- // if we use node: paths in our code, it should always be catched by below rule.
69
- /^node:.*/,
70
- ],
71
- output: {
72
- ...workerConfig.output,
73
- }
74
- },
75
- manifest: true, // Ensure manifest is generated
76
- minify: false,
77
- sourcemap: true,
78
- }
79
- };
80
- },
81
- // Add this to ensure entry is in manifest
82
- generateBundle(_, bundle) {
83
- const workerEntry = bundle['html-worker.js'];
84
- if (workerEntry) {
85
- Object.defineProperty(workerEntry, 'isEntry', {
86
- value: true,
87
- writable: false,
88
- enumerable: true,
89
- configurable: false
90
- });
91
- }
92
- }
93
- };
94
- }
@@ -1,19 +0,0 @@
1
- import type { StreamPluginOptions } from "../types.js";
2
- import type { Plugin } from "vite";
3
- /**
4
- * This plugin can be used to create your own worker paths. This build should be separated from the main build.
5
- *
6
- *
7
- * ```ts
8
- * @example
9
- *export reactWorkerPluginConfig = {
10
- * htmlWorkerPath: './workers/html.tsx',
11
- * rscWorkerPath: './workers/rsc.tsx',
12
- * }
13
- * ```
14
- *
15
- * @param options
16
- * @returns
17
- */
18
- export declare function reactWorkerPlugin(options: StreamPluginOptions): Plugin[];
19
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../plugin/worker/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIlC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAKxE"}
@@ -1,23 +0,0 @@
1
- import { reactHtmlWorkerPlugin } from "./html/plugin.js";
2
- import { reactRscWorkerPlugin } from "./rsc/plugin.js";
3
- /**
4
- * This plugin can be used to create your own worker paths. This build should be separated from the main build.
5
- *
6
- *
7
- * ```ts
8
- * @example
9
- *export reactWorkerPluginConfig = {
10
- * htmlWorkerPath: './workers/html.tsx',
11
- * rscWorkerPath: './workers/rsc.tsx',
12
- * }
13
- * ```
14
- *
15
- * @param options
16
- * @returns
17
- */
18
- export function reactWorkerPlugin(options) {
19
- return [
20
- reactHtmlWorkerPlugin(options),
21
- reactRscWorkerPlugin(options)
22
- ];
23
- }
@@ -1,4 +0,0 @@
1
- import type { Plugin } from "vite";
2
- import type { StreamPluginOptions } from "../../types.js";
3
- export declare function reactRscWorkerPlugin(options: StreamPluginOptions): Plugin;
4
- //# sourceMappingURL=plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../plugin/worker/rsc/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA4EzE"}