vite-plugin-react-server 0.3.19 → 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 (108) hide show
  1. package/README.md +219 -141
  2. package/dist/package.json +13 -6
  3. package/dist/plugin/collect-manifest-client-files.d.ts.map +1 -1
  4. package/dist/plugin/collect-manifest-client-files.js +25 -11
  5. package/dist/plugin/collect-manifest-client-files.js.map +1 -1
  6. package/dist/plugin/components.d.ts +3 -13
  7. package/dist/plugin/components.d.ts.map +1 -1
  8. package/dist/plugin/components.js +3 -54
  9. package/dist/plugin/config/defaults.d.ts +9 -2
  10. package/dist/plugin/config/defaults.d.ts.map +1 -1
  11. package/dist/plugin/config/defaults.js +3 -2
  12. package/dist/plugin/config/defaults.js.map +1 -1
  13. package/dist/plugin/config/resolveOptions.d.ts +2 -2
  14. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  15. package/dist/plugin/config/resolveOptions.js +6 -0
  16. package/dist/plugin/config/resolveOptions.js.map +1 -1
  17. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  18. package/dist/plugin/config/resolveUserConfig.js +178 -149
  19. package/dist/plugin/config/resolveUserConfig.js.map +1 -1
  20. package/dist/plugin/css-collector-inline.d.ts +10 -0
  21. package/dist/plugin/css-collector-inline.d.ts.map +1 -0
  22. package/dist/plugin/css-collector-inline.js +55 -0
  23. package/dist/plugin/css-collector-inline.js.map +1 -0
  24. package/dist/plugin/css-collector.d.ts +14 -0
  25. package/dist/plugin/css-collector.d.ts.map +1 -0
  26. package/dist/plugin/css-collector.js +49 -0
  27. package/dist/plugin/css-collector.js.map +1 -0
  28. package/dist/plugin/helpers/createHandler.d.ts +3 -8
  29. package/dist/plugin/helpers/createHandler.d.ts.map +1 -1
  30. package/dist/plugin/helpers/createHandler.js +52 -55
  31. package/dist/plugin/helpers/createHandler.js.map +1 -1
  32. package/dist/plugin/helpers/createRscStream.d.ts +14 -4
  33. package/dist/plugin/helpers/createRscStream.d.ts.map +1 -1
  34. package/dist/plugin/helpers/createRscStream.js +25 -16
  35. package/dist/plugin/helpers/createRscStream.js.map +1 -1
  36. package/dist/plugin/html.d.ts +5 -0
  37. package/dist/plugin/html.d.ts.map +1 -0
  38. package/dist/plugin/html.js +11 -0
  39. package/dist/plugin/html.js.map +1 -0
  40. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  41. package/dist/plugin/react-client/plugin.js +3 -2
  42. package/dist/plugin/react-client/plugin.js.map +1 -1
  43. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  44. package/dist/plugin/react-server/plugin.js +47 -16
  45. package/dist/plugin/react-server/plugin.js.map +1 -1
  46. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  47. package/dist/plugin/react-static/plugin.js +20 -12
  48. package/dist/plugin/react-static/plugin.js.map +1 -1
  49. package/dist/plugin/react-static/types.d.ts +2 -0
  50. package/dist/plugin/react-static/types.d.ts.map +1 -0
  51. package/dist/plugin/react-static/types.js +1 -0
  52. package/dist/plugin/types.d.ts +48 -11
  53. package/dist/plugin/types.d.ts.map +1 -1
  54. package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
  55. package/dist/plugin/worker/html/messageHandler.js +4 -1
  56. package/dist/plugin/worker/html/messageHandler.js.map +1 -1
  57. package/dist/plugin/worker/html/renderPages.d.ts +8 -25
  58. package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
  59. package/dist/plugin/worker/html/renderPages.js +61 -44
  60. package/dist/plugin/worker/html/renderPages.js.map +1 -1
  61. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  62. package/dist/plugin/worker/rsc/messageHandler.js +37 -22
  63. package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
  64. package/dist/plugin/worker/types.d.ts +3 -0
  65. package/dist/plugin/worker/types.d.ts.map +1 -1
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +12 -4
  68. package/plugin/collect-manifest-client-files.ts +25 -10
  69. package/plugin/components.ts +3 -0
  70. package/plugin/config/defaults.tsx +10 -9
  71. package/plugin/config/resolveOptions.ts +10 -5
  72. package/plugin/config/resolveUserConfig.ts +218 -177
  73. package/plugin/css-collector-inline.tsx +60 -0
  74. package/plugin/css-collector.tsx +62 -0
  75. package/plugin/helpers/createHandler.ts +73 -83
  76. package/plugin/helpers/createRscStream.ts +49 -21
  77. package/plugin/html.tsx +9 -0
  78. package/plugin/react-client/plugin.ts +3 -2
  79. package/plugin/react-server/plugin.ts +58 -22
  80. package/plugin/react-static/plugin.ts +20 -11
  81. package/plugin/react-static/types.ts +3 -0
  82. package/plugin/types.ts +53 -11
  83. package/plugin/worker/html/messageHandler.ts +5 -2
  84. package/plugin/worker/html/renderPages.ts +82 -78
  85. package/plugin/worker/rsc/messageHandler.tsx +41 -26
  86. package/plugin/worker/types.ts +3 -0
  87. package/dist/plugin/components.js.map +0 -1
  88. package/dist/plugin/getEnv.d.ts +0 -19
  89. package/dist/plugin/getEnv.d.ts.map +0 -1
  90. package/dist/plugin/getEnv.js +0 -107
  91. package/dist/plugin/module-graph.d.ts +0 -10
  92. package/dist/plugin/module-graph.d.ts.map +0 -1
  93. package/dist/plugin/module-graph.js +0 -35
  94. package/dist/plugin/worker/html/plugin.d.ts +0 -4
  95. package/dist/plugin/worker/html/plugin.d.ts.map +0 -1
  96. package/dist/plugin/worker/html/plugin.js +0 -93
  97. package/dist/plugin/worker/plugin.d.ts +0 -19
  98. package/dist/plugin/worker/plugin.d.ts.map +0 -1
  99. package/dist/plugin/worker/plugin.js +0 -23
  100. package/dist/plugin/worker/rsc/plugin.d.ts +0 -4
  101. package/dist/plugin/worker/rsc/plugin.d.ts.map +0 -1
  102. package/dist/plugin/worker/rsc/plugin.js +0 -75
  103. package/plugin/components.tsx +0 -59
  104. package/plugin/getEnv.ts +0 -135
  105. package/plugin/module-graph.ts +0 -48
  106. package/plugin/worker/html/plugin.ts +0 -100
  107. package/plugin/worker/plugin.ts +0 -26
  108. package/plugin/worker/rsc/plugin.ts +0 -83
@@ -6,7 +6,9 @@
6
6
  import { createInputNormalizer } from '../helpers/inputNormalizer.js';
7
7
  import { join } from 'path';
8
8
  import { globSync } from 'fs';
9
+ import { pluginRoot } from '../root.js';
9
10
 
11
+ let stashedUserConfig = {};
10
12
  function resolveUserConfig({
11
13
  isClient = false,
12
14
  isStatic = false,
@@ -15,172 +17,199 @@ function resolveUserConfig({
15
17
  userOptions,
16
18
  files
17
19
  }) {
18
- try {
19
- const root = config.root ?? userOptions.projectRoot ?? process.cwd();
20
- const normalizer = createInputNormalizer({
21
- root,
22
- preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : void 0,
23
- removeExtension: true
20
+ if (isStatic) {
21
+ const serverConfig = stashedUserConfig[`${userOptions.build.server}-ssr`];
22
+ if (!serverConfig) {
23
+ return {
24
+ type: "error",
25
+ error: new Error("Static plugin should run after the server plugin")
26
+ };
27
+ }
28
+ return {
29
+ type: "success",
30
+ userConfig: serverConfig
31
+ };
32
+ }
33
+ const envDir = isStatic ? userOptions.build.static : isClient ? userOptions.build.client : userOptions.build.server;
34
+ const ssr = typeof config.build?.ssr === "boolean" ? config.build?.ssr : configEnv.isSsrBuild || !isClient && !isStatic;
35
+ const envId = `${envDir}${ssr ? "-ssr" : ""}`;
36
+ if (stashedUserConfig[envId]) {
37
+ console.log(`[RSC] Using cached config for ${envId}`);
38
+ return {
39
+ type: "success",
40
+ userConfig: stashedUserConfig[envId]
41
+ };
42
+ }
43
+ const root = config.root ?? userOptions.projectRoot ?? process.cwd();
44
+ const normalizer = createInputNormalizer({
45
+ root,
46
+ preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : undefined,
47
+ removeExtension: true
48
+ });
49
+ const serverEntry = userOptions.serverEntry ? Object.fromEntries([
50
+ normalizer([userOptions.serverEntry, userOptions.serverEntry])
51
+ ]) : null;
52
+ const clientEntry = userOptions.clientEntry ? Object.fromEntries(
53
+ [
54
+ [userOptions.clientEntry, userOptions.clientEntry],
55
+ ["index.html", "index.html"]
56
+ ].map(normalizer)
57
+ ) : { "index.html": "index.html" };
58
+ const autoDiscoveredClientFiles = (inputs2) => {
59
+ const allFiles = globSync(`**/*.client.*`, {
60
+ cwd: join(root, userOptions.moduleBase)
24
61
  });
25
- const serverEntry = userOptions.serverEntry ? Object.fromEntries([
26
- normalizer([userOptions.serverEntry, userOptions.serverEntry])
27
- ]) : null;
28
- const clientEntry = userOptions.clientEntry ? Object.fromEntries(
29
- [
30
- [userOptions.clientEntry, userOptions.clientEntry],
31
- ["index.html", "index.html"]
32
- ].map(normalizer)
33
- ) : { "index.html": "index.html" };
34
- const autoDiscoveredClientFiles = (inputs2) => {
35
- const allFiles = globSync(`**/*.client.*`, {
36
- cwd: join(root, userOptions.moduleBase)
37
- });
38
- for (const file of allFiles) {
39
- const [key, value] = normalizer(join(userOptions.moduleBase, file));
40
- if (!inputs2[key]) {
41
- inputs2[key] = value;
42
- } else {
43
- console.warn(`[RSC] Client file already exists: ${key}`);
44
- }
62
+ for (const file of allFiles) {
63
+ const [key, value] = normalizer(join(userOptions.moduleBase, file));
64
+ if (!inputs2[key]) {
65
+ inputs2[key] = value;
66
+ } else {
67
+ console.warn(`[RSC] Client file already exists: ${key}`);
45
68
  }
46
- return inputs2;
47
- };
48
- const autoDiscoveredServerFiles = (inputs2) => {
49
- const allFiles = globSync(`${userOptions.moduleBase}/**/*.server.*`, {
50
- cwd: join(root, userOptions.moduleBase)
51
- });
52
- for (const file of allFiles) {
53
- const [key, value] = normalizer(join(userOptions.moduleBase, file));
54
- if (!inputs2[key]) {
55
- inputs2[key] = value;
56
- } else {
57
- console.warn(`[RSC] Server file already exists: ${key}`);
58
- }
69
+ }
70
+ return inputs2;
71
+ };
72
+ const autoDiscoveredServerFiles = (inputs2) => {
73
+ const allFiles = globSync(`${userOptions.moduleBase}/**/*.server.*`, {
74
+ cwd: join(root, userOptions.moduleBase)
75
+ });
76
+ for (const file of allFiles) {
77
+ const [key, value] = normalizer(join(userOptions.moduleBase, file));
78
+ if (!inputs2[key]) {
79
+ inputs2[key] = value;
80
+ } else {
81
+ console.warn(`[RSC] Server file already exists: ${key}`);
59
82
  }
60
- return inputs2;
61
- };
62
- const autoDiscoveredFiles = (inputs2) => {
63
- if (!files) return inputs2;
64
- for (const [key, value] of files.pageMap) {
65
- if (!inputs2[key]) {
66
- inputs2[key] = value;
67
- } else {
68
- console.warn(`[RSC] Page file already exists: ${key}`);
69
- }
83
+ }
84
+ return inputs2;
85
+ };
86
+ const customWorkerFiles = (inputs2) => {
87
+ const customRscWorker = !userOptions.rscWorkerPath.startsWith(pluginRoot);
88
+ const customHtmlWorker = !userOptions.htmlWorkerPath.startsWith(pluginRoot);
89
+ if (customRscWorker && !inputs2["rsc-worker"]) {
90
+ inputs2["rsc-worker"] = userOptions.rscWorkerPath;
91
+ }
92
+ if (customHtmlWorker && !inputs2["html-worker"]) {
93
+ inputs2["html-worker"] = userOptions.htmlWorkerPath;
94
+ }
95
+ return inputs2;
96
+ };
97
+ const autoDiscoveredFiles = (inputs2) => {
98
+ if (!files) return inputs2;
99
+ for (const [key, value] of files.pageMap) {
100
+ if (!inputs2[key]) {
101
+ inputs2[key] = value;
102
+ } else {
103
+ console.warn(`[RSC] Page file already exists: ${key}`);
70
104
  }
71
- for (const [key, value] of files.propsMap) {
72
- if (!inputs2[key]) {
73
- inputs2[key] = value;
74
- } else {
75
- console.warn(`[RSC] Props file already exists: ${key}`);
76
- }
105
+ }
106
+ for (const [key, value] of files.propsMap) {
107
+ if (!inputs2[key]) {
108
+ inputs2[key] = value;
109
+ } else {
110
+ console.warn(`[RSC] Props file already exists: ${key}`);
77
111
  }
78
- return inputs2;
79
- };
80
- let inputs = isClient ? autoDiscoveredClientFiles(clientEntry) : autoDiscoveredServerFiles(autoDiscoveredFiles(serverEntry ?? {}));
81
- const envDir = isStatic ? userOptions.build.static : isClient ? userOptions.build.client : userOptions.build.server;
82
- const pluginOutput = {
83
- preserveModules: !isClient,
84
- preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : void 0,
85
- entryFileNames: userOptions.build.entryFile,
86
- assetFileNames: userOptions.build.assetFile,
87
- chunkFileNames: userOptions.build.chunkFile,
88
- format: "esm",
89
- exports: "named",
90
- hoistTransitiveImports: false,
91
- generatedCode: {
92
- constBindings: true,
93
- objectShorthand: true
112
+ }
113
+ return inputs2;
114
+ };
115
+ let inputs = isClient ? autoDiscoveredClientFiles(clientEntry) : customWorkerFiles(autoDiscoveredServerFiles(autoDiscoveredFiles(serverEntry ?? {})));
116
+ const pluginOutput = {
117
+ preserveModules: !isClient,
118
+ preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : undefined,
119
+ entryFileNames: userOptions.build.entryFile,
120
+ assetFileNames: userOptions.build.assetFile,
121
+ chunkFileNames: userOptions.build.chunkFile,
122
+ format: "esm",
123
+ exports: "named",
124
+ hoistTransitiveImports: false,
125
+ generatedCode: {
126
+ constBindings: true,
127
+ objectShorthand: true
128
+ },
129
+ interop: "auto"
130
+ };
131
+ let newOutput = Array.isArray(config.build?.rollupOptions?.output) ? [...config.build?.rollupOptions?.output, pluginOutput] : typeof config.build?.rollupOptions?.output === "object" && config.build?.rollupOptions?.output !== null ? [config.build?.rollupOptions?.output, pluginOutput] : pluginOutput;
132
+ if (isClient) {
133
+ stashedUserConfig[envId] = {
134
+ ...config,
135
+ root,
136
+ mode: configEnv.mode ?? configEnv.command === "build" ? "production" : "development",
137
+ resolve: {
138
+ external: ["react", "react-dom"],
139
+ alias: {}
94
140
  },
95
- interop: "auto"
96
- };
97
- let newOutput = Array.isArray(config.build?.rollupOptions?.output) ? [...config.build?.rollupOptions?.output, pluginOutput] : typeof config.build?.rollupOptions?.output === "object" && config.build?.rollupOptions?.output !== null ? [config.build?.rollupOptions?.output, pluginOutput] : pluginOutput;
98
- if (isClient) {
99
- return {
100
- type: "success",
101
- userConfig: {
102
- ...config,
103
- root,
104
- mode: configEnv.mode ?? configEnv.command === "build" ? "production" : "development",
105
- resolve: {
106
- external: ["react", "react-dom"],
107
- alias: {}
108
- },
109
- ssr: {
110
- target: "node",
111
- external: [
112
- "react",
113
- "react-dom",
114
- "react-server-dom-esm/client.browser"
115
- ],
116
- resolve: {
117
- externalConditions: ["react-server"]
118
- }
119
- },
120
- // client build options
121
- build: {
122
- ...config.build,
123
- emptyOutDir: config.build?.emptyOutDir ?? true,
124
- outDir: join(userOptions.build.outDir, envDir),
125
- assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,
126
- copyPublicDir: config.build?.copyPublicDir ?? true,
127
- // modern browsers
128
- target: ["esnext"],
129
- minify: true,
130
- ssr: typeof config.build?.ssr === "boolean" ? config.build?.ssr : configEnv.isSsrBuild ?? false,
131
- manifest: config.build?.manifest ?? `.vite/manifest.json`,
132
- ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,
133
- ssrEmitAssets: config.build?.ssrEmitAssets ?? true,
134
- rollupOptions: {
135
- ...config.build?.rollupOptions,
136
- input: inputs,
137
- output: newOutput,
138
- preserveEntrySignatures: "exports-only"
139
- }
140
- }
141
+ ssr: {
142
+ target: "node",
143
+ external: ["react", "react-dom", "react-server-dom-esm/client.browser"],
144
+ resolve: {
145
+ externalConditions: ["react-server"]
141
146
  }
142
- };
143
- }
147
+ },
148
+ // client build options
149
+ build: {
150
+ ...config.build,
151
+ emptyOutDir: config.build?.emptyOutDir ?? true,
152
+ outDir: join(userOptions.build.outDir, envDir),
153
+ assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,
154
+ copyPublicDir: config.build?.copyPublicDir ?? true,
155
+ // modern browsers
156
+ target: ["esnext"],
157
+ minify: true,
158
+ ssr,
159
+ manifest: config.build?.manifest ?? `.vite/manifest.json`,
160
+ ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,
161
+ ssrEmitAssets: config.build?.ssrEmitAssets ?? true,
162
+ rollupOptions: {
163
+ ...config.build?.rollupOptions,
164
+ input: inputs,
165
+ output: newOutput,
166
+ preserveEntrySignatures: "exports-only"
167
+ }
168
+ }
169
+ };
170
+ } else {
144
171
  if (configEnv.isSsrBuild === false) {
145
172
  configEnv.isSsrBuild = true;
146
173
  }
147
- return {
148
- type: "success",
149
- userConfig: {
150
- ...config,
151
- root,
152
- mode: configEnv.mode ?? configEnv.command === "build" ? "production" : "development",
153
- resolve: {
154
- externalConditions: ["react-server"]
155
- },
156
- // server build options
157
- build: {
158
- ...config.build,
159
- emptyOutDir: config.build?.emptyOutDir ?? true,
160
- outDir: join(userOptions.build.outDir, envDir),
161
- target: config.build?.target ?? "node18",
162
- minify: config.build?.minify ?? true,
163
- ssr: typeof config.build?.ssr === "boolean" ? config.build?.ssr : configEnv.isSsrBuild ?? true,
164
- manifest: config.build?.manifest ?? `.vite/manifest.json`,
165
- ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,
166
- ssrEmitAssets: config.build?.ssrEmitAssets ?? true,
167
- copyPublicDir: config.build?.copyPublicDir ?? isStatic,
168
- assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,
169
- rollupOptions: {
170
- ...config.build?.rollupOptions,
171
- input: inputs,
172
- preserveEntrySignatures: config.build?.rollupOptions?.preserveEntrySignatures ?? "strict",
173
- output: newOutput
174
- }
174
+ stashedUserConfig[envId] = {
175
+ ...config,
176
+ root,
177
+ mode: configEnv.mode ?? configEnv.command === "build" ? "production" : "development",
178
+ resolve: {
179
+ externalConditions: ["react-server"]
180
+ },
181
+ // server build options
182
+ build: {
183
+ ...config.build,
184
+ emptyOutDir: config.build?.emptyOutDir ?? true,
185
+ outDir: join(userOptions.build.outDir, envDir),
186
+ target: config.build?.target ?? "node18",
187
+ minify: config.build?.minify ?? true,
188
+ ssr,
189
+ manifest: config.build?.manifest ?? `.vite/manifest.json`,
190
+ ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,
191
+ ssrEmitAssets: config.build?.ssrEmitAssets ?? true,
192
+ copyPublicDir: config.build?.copyPublicDir ?? isStatic,
193
+ assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,
194
+ rollupOptions: {
195
+ ...config.build?.rollupOptions,
196
+ input: inputs,
197
+ preserveEntrySignatures: config.build?.rollupOptions?.preserveEntrySignatures ?? "strict",
198
+ output: newOutput
175
199
  }
176
200
  }
177
201
  };
178
- } catch (error) {
202
+ }
203
+ if (!stashedUserConfig[envId]) {
179
204
  return {
180
205
  type: "error",
181
- error: error instanceof Error ? error : new Error("Failed to resolve config")
206
+ error: new Error("Failed to resolve config")
182
207
  };
183
208
  }
209
+ return {
210
+ type: "success",
211
+ userConfig: stashedUserConfig[envId]
212
+ };
184
213
  }
185
214
 
186
215
  export { resolveUserConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"resolveUserConfig.js","sources":["../../../plugin/config/resolveUserConfig.ts"],"sourcesContent":["import type { ConfigEnv, UserConfig } from \"vite\";\nimport type {\n CheckFilesExistReturn,\n ResolvedUserConfig,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { createInputNormalizer } from \"../helpers/inputNormalizer.js\";\nimport { join } from \"path\";\n// @ts-ignore\nimport { globSync } from \"fs\";\nimport type { OutputOptions } from \"rollup\";\nexport type ResolveUserConfigProps = {\n isClient?: boolean;\n isStatic?: boolean;\n config: UserConfig;\n configEnv: ConfigEnv;\n userOptions: ResolvedUserOptions;\n files?: CheckFilesExistReturn;\n};\n\nexport type ResolveUserConfigReturn =\n | { type: \"success\"; userConfig: ResolvedUserConfig }\n | { type: \"error\"; error: Error };\n\nexport function resolveUserConfig({\n isClient = false,\n isStatic = false,\n config,\n configEnv,\n userOptions,\n files,\n}: ResolveUserConfigProps): ResolveUserConfigReturn {\n try {\n // Get existing inputs\n const root = config.root ?? userOptions.projectRoot ?? process.cwd();\n\n const normalizer = createInputNormalizer({\n root,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n removeExtension: true,\n });\n\n const serverEntry = userOptions.serverEntry\n ? Object.fromEntries([\n normalizer([userOptions.serverEntry, userOptions.serverEntry]),\n ])\n : null;\n const clientEntry = userOptions.clientEntry\n ? Object.fromEntries(\n [\n [userOptions.clientEntry, userOptions.clientEntry],\n [\"index.html\", \"index.html\"],\n ].map(normalizer)\n )\n : { \"index.html\": \"index.html\" };\n\n const autoDiscoveredClientFiles = (inputs: Record<string, string>) => {\n const allFiles = globSync(`**/*.client.*`, {\n cwd: join(root, userOptions.moduleBase),\n });\n\n for (const file of allFiles) {\n const [key, value] = normalizer(join(userOptions.moduleBase, file));\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Client file already exists: ${key}`);\n }\n }\n return inputs;\n };\n const autoDiscoveredServerFiles = (inputs: Record<string, string>) => {\n const allFiles = globSync(`${userOptions.moduleBase}/**/*.server.*`, {\n cwd: join(root, userOptions.moduleBase),\n });\n for (const file of allFiles) {\n const [key, value] = normalizer(join(userOptions.moduleBase, file));\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Server file already exists: ${key}`);\n }\n }\n return inputs;\n };\n const autoDiscoveredFiles = (inputs: Record<string, string>) => {\n if (!files) return inputs;\n\n // Add page files without extra prefix\n for (const [key, value] of files.pageMap) {\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Page file already exists: ${key}`);\n }\n }\n // Add props files without extra prefix\n for (const [key, value] of files.propsMap) {\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Props file already exists: ${key}`);\n }\n }\n return inputs;\n };\n\n // Add inputs based on condition\n let inputs = isClient\n ? autoDiscoveredClientFiles(clientEntry)\n : autoDiscoveredServerFiles(autoDiscoveredFiles(serverEntry ?? {}));\n\n const envDir = isStatic ? userOptions.build.static : isClient\n ? userOptions.build.client\n : userOptions.build.server;\n\n const pluginOutput = {\n preserveModules: !isClient,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n entryFileNames: userOptions.build.entryFile,\n assetFileNames: userOptions.build.assetFile,\n chunkFileNames: userOptions.build.chunkFile,\n format: \"esm\",\n exports: \"named\",\n hoistTransitiveImports: false,\n generatedCode: {\n constBindings: true,\n objectShorthand: true,\n },\n interop: \"auto\",\n } satisfies OutputOptions;\n \n let newOutput = Array.isArray(config.build?.rollupOptions?.output)\n ? [...config.build?.rollupOptions?.output, pluginOutput]\n : typeof config.build?.rollupOptions?.output === \"object\" &&\n config.build?.rollupOptions?.output !== null\n ? [config.build?.rollupOptions?.output, pluginOutput]\n : pluginOutput;\n\n if (isClient) {\n // client plugin build options (client plugin still outputs server files)\n return {\n type: \"success\",\n userConfig: {\n ...config,\n root: root,\n mode: configEnv.mode ?? configEnv.command === \"build\" ? \"production\" : \"development\",\n resolve: {\n external: [\"react\", \"react-dom\"],\n alias: {},\n },\n ssr: {\n target: \"node\",\n external: [\n \"react\",\n \"react-dom\",\n \"react-server-dom-esm/client.browser\",\n ],\n resolve: {\n externalConditions: [\"react-server\"],\n },\n },\n // client build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: join(userOptions.build.outDir, envDir),\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n copyPublicDir: config.build?.copyPublicDir ?? true,\n // modern browsers\n target: [\"esnext\"],\n minify: true,\n ssr: typeof config.build?.ssr === \"boolean\" ? config.build?.ssr : configEnv.isSsrBuild ?? false,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets: config.build?.ssrEmitAssets ?? true,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: inputs,\n output: newOutput,\n preserveEntrySignatures: \"exports-only\",\n },\n },\n },\n };\n }\n // server build options\n if(configEnv.isSsrBuild === false) {\n configEnv.isSsrBuild = true\n }\n return {\n type: \"success\",\n userConfig: {\n ...config,\n root: root,\n mode: configEnv.mode ?? configEnv.command === \"build\" ? \"production\" : \"development\",\n resolve: {\n externalConditions: [\"react-server\"],\n },\n // server build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: join(userOptions.build.outDir, envDir),\n target: config.build?.target ?? \"node18\",\n minify: config.build?.minify ?? true,\n ssr: typeof config.build?.ssr === \"boolean\" ? config.build?.ssr : configEnv.isSsrBuild ?? true,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets: config.build?.ssrEmitAssets ?? true,\n copyPublicDir: config.build?.copyPublicDir ?? isStatic,\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: inputs,\n preserveEntrySignatures: config.build?.rollupOptions?.preserveEntrySignatures ?? \"strict\",\n output: newOutput,\n },\n },\n },\n };\n } catch (error) {\n return {\n type: \"error\",\n error:\n error instanceof Error ? error : new Error(\"Failed to resolve config\"),\n };\n }\n}\n"],"names":["inputs"],"mappings":"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"}
1
+ {"version":3,"file":"resolveUserConfig.js","sources":["../../../plugin/config/resolveUserConfig.ts"],"sourcesContent":["import type { ConfigEnv, UserConfig } from \"vite\";\nimport type {\n CheckFilesExistReturn,\n ResolvedUserConfig,\n ResolvedUserOptions,\n} from \"../types.js\";\nimport { createInputNormalizer } from \"../helpers/inputNormalizer.js\";\nimport { join } from \"path\";\n// @ts-ignore\nimport { globSync } from \"fs\";\nimport type { OutputOptions } from \"rollup\";\nimport { pluginRoot } from \"../root.js\";\n\nlet stashedUserConfig: Record<string, ResolvedUserConfig | null> = {};\n\nexport type ResolveUserConfigProps = {\n isClient?: boolean;\n isStatic?: boolean;\n config: UserConfig;\n configEnv: ConfigEnv;\n userOptions: ResolvedUserOptions;\n files?: CheckFilesExistReturn;\n};\n\nexport type ResolveUserConfigReturn =\n | { type: \"success\"; userConfig: ResolvedUserConfig }\n | { type: \"error\"; error: Error };\n\nexport function resolveUserConfig({\n isClient = false,\n isStatic = false,\n config,\n configEnv,\n userOptions,\n files,\n}: ResolveUserConfigProps): ResolveUserConfigReturn {\n if(isStatic) {\n const serverConfig = stashedUserConfig[`${userOptions.build.server}-ssr`]\n if(!serverConfig) {\n return {\n type: \"error\",\n error: new Error(\"Static plugin should run after the server plugin\"),\n }\n }\n return {\n type: \"success\",\n userConfig: serverConfig,\n }\n }\n const envDir = isStatic\n ? userOptions.build.static\n : isClient\n ? userOptions.build.client\n : userOptions.build.server;\n const ssr =\n typeof config.build?.ssr === \"boolean\"\n ? config.build?.ssr\n : configEnv.isSsrBuild || (!isClient && !isStatic);\n const envId = `${envDir}${ssr ? \"-ssr\" : \"\"}`;\n if (stashedUserConfig[envId]) {\n console.log(`[RSC] Using cached config for ${envId}`);\n return {\n type: \"success\",\n userConfig: stashedUserConfig[envId],\n };\n }\n // Get existing inputs\n const root = config.root ?? userOptions.projectRoot ?? process.cwd();\n\n const normalizer = createInputNormalizer({\n root,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n removeExtension: true,\n });\n\n const serverEntry = userOptions.serverEntry\n ? Object.fromEntries([\n normalizer([userOptions.serverEntry, userOptions.serverEntry]),\n ])\n : null;\n const clientEntry = userOptions.clientEntry\n ? Object.fromEntries(\n [\n [userOptions.clientEntry, userOptions.clientEntry],\n [\"index.html\", \"index.html\"],\n ].map(normalizer)\n )\n : { \"index.html\": \"index.html\" };\n\n const autoDiscoveredClientFiles = (inputs: Record<string, string>) => {\n const allFiles = globSync(`**/*.client.*`, {\n cwd: join(root, userOptions.moduleBase),\n });\n\n for (const file of allFiles) {\n const [key, value] = normalizer(join(userOptions.moduleBase, file));\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Client file already exists: ${key}`);\n }\n }\n return inputs;\n };\n const autoDiscoveredServerFiles = (inputs: Record<string, string>) => {\n const allFiles = globSync(`${userOptions.moduleBase}/**/*.server.*`, {\n cwd: join(root, userOptions.moduleBase),\n });\n for (const file of allFiles) {\n const [key, value] = normalizer(join(userOptions.moduleBase, file));\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Server file already exists: ${key}`);\n }\n }\n return inputs;\n };\n const customWorkerFiles = (inputs: Record<string, string>) => {\n const customRscWorker = !userOptions.rscWorkerPath.startsWith(pluginRoot)\n const customHtmlWorker = !userOptions.htmlWorkerPath.startsWith(pluginRoot)\n if(customRscWorker && !inputs['rsc-worker']) {\n inputs['rsc-worker'] = userOptions.rscWorkerPath\n }\n if(customHtmlWorker && !inputs['html-worker']) {\n inputs['html-worker'] = userOptions.htmlWorkerPath\n }\n return inputs\n }\n const autoDiscoveredFiles = (inputs: Record<string, string>) => {\n if (!files) return inputs;\n\n // Add page files without extra prefix\n for (const [key, value] of files.pageMap) {\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Page file already exists: ${key}`);\n }\n }\n // Add props files without extra prefix\n for (const [key, value] of files.propsMap) {\n if (!inputs[key]) {\n inputs[key] = value;\n } else {\n console.warn(`[RSC] Props file already exists: ${key}`);\n }\n }\n return inputs;\n };\n\n // Add inputs based on condition\n let inputs = isClient\n ? autoDiscoveredClientFiles(clientEntry)\n : customWorkerFiles(autoDiscoveredServerFiles(autoDiscoveredFiles(serverEntry ?? {})));\n\n const pluginOutput = {\n preserveModules: !isClient,\n preserveModulesRoot: userOptions.build.preserveModulesRoot\n ? userOptions.moduleBase\n : undefined,\n entryFileNames: userOptions.build.entryFile,\n assetFileNames: userOptions.build.assetFile,\n chunkFileNames: userOptions.build.chunkFile,\n format: \"esm\",\n exports: \"named\",\n hoistTransitiveImports: false,\n generatedCode: {\n constBindings: true,\n objectShorthand: true,\n },\n interop: \"auto\",\n } satisfies OutputOptions;\n\n let newOutput = Array.isArray(config.build?.rollupOptions?.output)\n ? [...config.build?.rollupOptions?.output, pluginOutput]\n : typeof config.build?.rollupOptions?.output === \"object\" &&\n config.build?.rollupOptions?.output !== null\n ? [config.build?.rollupOptions?.output, pluginOutput]\n : pluginOutput;\n\n if (isClient) {\n // client plugin build options (client plugin still outputs server files)\n stashedUserConfig[envId] = {\n ...config,\n root: root,\n mode:\n configEnv.mode ?? configEnv.command === \"build\"\n ? \"production\"\n : \"development\",\n resolve: {\n external: [\"react\", \"react-dom\"],\n alias: {},\n },\n ssr: {\n target: \"node\",\n external: [\"react\", \"react-dom\", \"react-server-dom-esm/client.browser\"],\n resolve: {\n externalConditions: [\"react-server\"],\n },\n },\n // client build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: join(userOptions.build.outDir, envDir),\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n copyPublicDir: config.build?.copyPublicDir ?? true,\n // modern browsers\n target: [\"esnext\"],\n minify: true,\n ssr: ssr,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets: config.build?.ssrEmitAssets ?? true,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: inputs,\n output: newOutput,\n preserveEntrySignatures: \"exports-only\",\n },\n },\n };\n } else {\n // server build options\n if (configEnv.isSsrBuild === false) {\n configEnv.isSsrBuild = true;\n }\n stashedUserConfig[envId] = {\n ...config,\n root: root,\n mode:\n configEnv.mode ?? configEnv.command === \"build\"\n ? \"production\"\n : \"development\",\n resolve: {\n externalConditions: [\"react-server\"],\n },\n // server build options\n build: {\n ...config.build,\n emptyOutDir: config.build?.emptyOutDir ?? true,\n outDir: join(userOptions.build.outDir, envDir),\n target: config.build?.target ?? \"node18\",\n minify: config.build?.minify ?? true,\n ssr: ssr,\n manifest: config.build?.manifest ?? `.vite/manifest.json`,\n ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,\n ssrEmitAssets: config.build?.ssrEmitAssets ?? true,\n copyPublicDir: config.build?.copyPublicDir ?? isStatic,\n assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,\n rollupOptions: {\n ...config.build?.rollupOptions,\n input: inputs,\n preserveEntrySignatures:\n config.build?.rollupOptions?.preserveEntrySignatures ?? \"strict\",\n output: newOutput,\n },\n },\n };\n }\n if (!stashedUserConfig[envId]) {\n return {\n type: \"error\",\n error: new Error(\"Failed to resolve config\"),\n };\n }\n return {\n type: \"success\",\n userConfig: stashedUserConfig[envId],\n };\n}\n"],"names":["inputs"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import React from "react";
2
+ import type { InlineCssCollectorProps } from "./types.js";
3
+ /**
4
+ * A component that inlines pre-transformed CSS content.
5
+ * Expects cssFiles to be an array of CssContent objects with the content already loaded.
6
+ */
7
+ export declare function InlineCssCollector({ children, cssFiles, moduleRootPath, }: InlineCssCollectorProps): React.FunctionComponentElement<{
8
+ children?: React.ReactNode | undefined;
9
+ }>;
10
+ //# sourceMappingURL=css-collector-inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-collector-inline.d.ts","sourceRoot":"","sources":["../../plugin/css-collector-inline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAG,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAU3D;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,QAAQ,EACR,QAAQ,EACR,cAAc,GACf,EAAE,uBAAuB;;GAuCzB"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import React__default from 'react';
7
+ import { join } from 'node:path';
8
+ import { readFileSync } from 'node:fs';
9
+
10
+ function InlineCssCollector({
11
+ children,
12
+ cssFiles,
13
+ moduleRootPath
14
+ }) {
15
+ return React__default.createElement(
16
+ React__default.Fragment,
17
+ null,
18
+ cssFiles.map((file, index) => {
19
+ if (typeof file === "string") {
20
+ let filePath = file;
21
+ if (process.env["NODE_ENV"] === "development") {
22
+ return React__default.createElement("link", {
23
+ key: file,
24
+ rel: "stylesheet",
25
+ href: filePath
26
+ });
27
+ }
28
+ return React__default.createElement(
29
+ "style",
30
+ {
31
+ key: file,
32
+ type: "text/css"
33
+ },
34
+ readFileSync(join(moduleRootPath, filePath), "utf-8")
35
+ );
36
+ }
37
+ const { type, content, key, path } = file;
38
+ return React__default.createElement(
39
+ "style",
40
+ {
41
+ key: key ?? path ?? index,
42
+ type: type ?? "text/css",
43
+ ...process.env["NODE_ENV"] === "development" && {
44
+ "data-vite-dev-id": join(moduleRootPath, path)
45
+ }
46
+ },
47
+ content
48
+ );
49
+ }),
50
+ children
51
+ );
52
+ }
53
+
54
+ export { InlineCssCollector };
55
+ //# sourceMappingURL=css-collector-inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-collector-inline.js","sources":["../../plugin/css-collector-inline.tsx"],"sourcesContent":["import React from \"react\";\nimport { join } from \"node:path\";\nimport type { InlineCssCollectorProps } from \"./types.js\";\nimport { readFileSync } from \"node:fs\";\n\ninterface CssContent {\n type?: string;\n content: string;\n key?: string;\n path: string;\n}\n\n/**\n * A component that inlines pre-transformed CSS content.\n * Expects cssFiles to be an array of CssContent objects with the content already loaded.\n */\nexport function InlineCssCollector({\n children,\n cssFiles,\n moduleRootPath,\n}: InlineCssCollectorProps) {\n return React.createElement(\n React.Fragment,\n null,\n cssFiles.map((file, index) => {\n if (typeof file === \"string\") {\n let filePath = file as string;\n if(process.env[\"NODE_ENV\"] === \"development\") {\n return React.createElement(\"link\", {\n key: file,\n rel: \"stylesheet\",\n href: filePath,\n });\n }\n return React.createElement(\n \"style\",\n {\n key: file,\n type: \"text/css\",\n },\n readFileSync(join(moduleRootPath, filePath), \"utf-8\")\n );\n }\n\n const { type, content, key, path } = file as CssContent;\n return React.createElement(\n \"style\",\n {\n key: key ?? path ?? index,\n type: type ?? \"text/css\",\n ...(process.env[\"NODE_ENV\"] === \"development\" && {\n \"data-vite-dev-id\": join(moduleRootPath, path),\n }),\n },\n content\n );\n }),\n children\n );\n}\n"],"names":["React"],"mappings":";;;;;;;;;AAgBO,SAAS,kBAAmB,CAAA;AAAA,EACjC,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAA4B,EAAA;AAC1B,EAAA,OAAOA,cAAM,CAAA,aAAA;AAAA,IACXA,cAAM,CAAA,QAAA;AAAA,IACN,IAAA;AAAA,IACA,QAAS,CAAA,GAAA,CAAI,CAAC,IAAA,EAAM,KAAU,KAAA;AAC5B,MAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,QAAA,IAAI,QAAW,GAAA,IAAA;AACf,QAAA,IAAG,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAA,KAAM,aAAe,EAAA;AAC5C,UAAO,OAAAA,cAAA,CAAM,cAAc,MAAQ,EAAA;AAAA,YACjC,GAAK,EAAA,IAAA;AAAA,YACL,GAAK,EAAA,YAAA;AAAA,YACL,IAAM,EAAA;AAAA,WACP,CAAA;AAAA;AAEH,QAAA,OAAOA,cAAM,CAAA,aAAA;AAAA,UACX,OAAA;AAAA,UACA;AAAA,YACE,GAAK,EAAA,IAAA;AAAA,YACL,IAAM,EAAA;AAAA,WACR;AAAA,UACA,YAAa,CAAA,IAAA,CAAK,cAAgB,EAAA,QAAQ,GAAG,OAAO;AAAA,SACtD;AAAA;AAGF,MAAA,MAAM,EAAE,IAAA,EAAM,OAAS,EAAA,GAAA,EAAK,MAAS,GAAA,IAAA;AACrC,MAAA,OAAOA,cAAM,CAAA,aAAA;AAAA,QACX,OAAA;AAAA,QACA;AAAA,UACE,GAAA,EAAK,OAAO,IAAQ,IAAA,KAAA;AAAA,UACpB,MAAM,IAAQ,IAAA,UAAA;AAAA,UACd,GAAI,OAAA,CAAQ,GAAI,CAAA,UAAU,MAAM,aAAiB,IAAA;AAAA,YAC/C,kBAAA,EAAoB,IAAK,CAAA,cAAA,EAAgB,IAAI;AAAA;AAC/C,SACF;AAAA,QACA;AAAA,OACF;AAAA,KACD,CAAA;AAAA,IACD;AAAA,GACF;AACF;;;;"}
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ /**
3
+ * A component that emits <link> tags for CSS files during streaming.
4
+ * The high precedence ensures they bubble up to the document head.
5
+ */
6
+ export declare function CssCollector({ children, cssFiles, moduleBaseURL, route, }: {
7
+ children?: React.ReactNode;
8
+ cssFiles: string[];
9
+ moduleBaseURL?: string;
10
+ route?: string;
11
+ }): React.FunctionComponentElement<{
12
+ children?: React.ReactNode | undefined;
13
+ }>;
14
+ //# sourceMappingURL=css-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-collector.d.ts","sourceRoot":"","sources":["../../plugin/css-collector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,KAAW,GACZ,EAAE;IACD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;;GA2CA"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import React__default from 'react';
7
+ import { join } from 'node:path';
8
+
9
+ function CssCollector({
10
+ children,
11
+ cssFiles,
12
+ moduleBaseURL,
13
+ route = "/"
14
+ }) {
15
+ const depth = route.split("/").filter(Boolean).length;
16
+ const prefix = depth > 0 ? "../".repeat(depth) : "./";
17
+ const base = typeof moduleBaseURL === "string" && moduleBaseURL !== "" ? moduleBaseURL : prefix;
18
+ const elements = cssFiles.map((file) => {
19
+ if (typeof file === "object" && !React__default.isValidElement(file)) {
20
+ return null;
21
+ }
22
+ if (typeof file === "string" && file.endsWith(".css")) {
23
+ let url = file;
24
+ if (file.startsWith("http") || file.startsWith("data:")) {
25
+ url = file;
26
+ } else if (file.startsWith("/")) {
27
+ url = base + file.slice(1);
28
+ } else if (!file.startsWith("./") && !file.startsWith("../")) {
29
+ url = join(base, file);
30
+ }
31
+ return React__default.createElement("link", {
32
+ key: file,
33
+ rel: "stylesheet",
34
+ href: url,
35
+ precedence: "high"
36
+ });
37
+ }
38
+ return null;
39
+ }).filter(Boolean);
40
+ return React__default.createElement(
41
+ React__default.Fragment,
42
+ null,
43
+ ...elements,
44
+ children
45
+ );
46
+ }
47
+
48
+ export { CssCollector };
49
+ //# sourceMappingURL=css-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-collector.js","sources":["../../plugin/css-collector.tsx"],"sourcesContent":["import React from \"react\";\nimport { join } from \"node:path\";\n\n/**\n * A component that emits <link> tags for CSS files during streaming.\n * The high precedence ensures they bubble up to the document head.\n */\nexport function CssCollector({\n children,\n cssFiles,\n moduleBaseURL,\n route = \"/\",\n}: {\n children?: React.ReactNode;\n cssFiles: string[];\n moduleBaseURL?: string;\n route?: string;\n}) {\n // Calculate depth and prefix based on route\n const depth = route.split('/').filter(Boolean).length;\n const prefix = depth > 0 ? '../'.repeat(depth) : './';\n const base = typeof moduleBaseURL === 'string' && moduleBaseURL !== '' ? moduleBaseURL : prefix;\n\n const elements = cssFiles.map((file) => {\n // Handle pre-processed CSS content - skip in link mode\n if (typeof file === \"object\" && !React.isValidElement(file)) {\n return null;\n }\n // Handle string paths\n if (typeof file === \"string\" && file.endsWith('.css')) {\n // Handle different types of paths\n let url = file;\n if (file.startsWith('http') || file.startsWith('data:')) {\n // Keep absolute URLs as is\n url = file;\n } else if (file.startsWith('/')) {\n // Convert absolute paths to relative\n url = base + file.slice(1);\n } else if (!file.startsWith('./') && !file.startsWith('../')) {\n // Add prefix to relative paths that don't start with ./ or ../\n url = join(base, file);\n }\n \n return React.createElement(\"link\", {\n key: file,\n rel: \"stylesheet\",\n href: url,\n precedence: \"high\",\n });\n }\n\n return null;\n }).filter(Boolean);\n\n return React.createElement(\n React.Fragment,\n null,\n ...elements,\n children\n );\n}\n\n"],"names":["React"],"mappings":";;;;;;;;AAOO,SAAS,YAAa,CAAA;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,KAAQ,GAAA;AACV,CAKG,EAAA;AAED,EAAA,MAAM,QAAQ,KAAM,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,MAAA,CAAO,OAAO,CAAE,CAAA,MAAA;AAC/C,EAAA,MAAM,SAAS,KAAQ,GAAA,CAAA,GAAI,KAAM,CAAA,MAAA,CAAO,KAAK,CAAI,GAAA,IAAA;AACjD,EAAA,MAAM,OAAO,OAAO,aAAA,KAAkB,QAAY,IAAA,aAAA,KAAkB,KAAK,aAAgB,GAAA,MAAA;AAEzF,EAAA,MAAM,QAAW,GAAA,QAAA,CAAS,GAAI,CAAA,CAAC,IAAS,KAAA;AAEtC,IAAA,IAAI,OAAO,IAAS,KAAA,QAAA,IAAY,CAACA,cAAM,CAAA,cAAA,CAAe,IAAI,CAAG,EAAA;AAC3D,MAAO,OAAA,IAAA;AAAA;AAGT,IAAA,IAAI,OAAO,IAAS,KAAA,QAAA,IAAY,IAAK,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA;AAErD,MAAA,IAAI,GAAM,GAAA,IAAA;AACV,MAAA,IAAI,KAAK,UAAW,CAAA,MAAM,KAAK,IAAK,CAAA,UAAA,CAAW,OAAO,CAAG,EAAA;AAEvD,QAAM,GAAA,GAAA,IAAA;AAAA,OACG,MAAA,IAAA,IAAA,CAAK,UAAW,CAAA,GAAG,CAAG,EAAA;AAE/B,QAAM,GAAA,GAAA,IAAA,GAAO,IAAK,CAAA,KAAA,CAAM,CAAC,CAAA;AAAA,OAC3B,MAAA,IAAW,CAAC,IAAA,CAAK,UAAW,CAAA,IAAI,KAAK,CAAC,IAAA,CAAK,UAAW,CAAA,KAAK,CAAG,EAAA;AAE5D,QAAM,GAAA,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA;AAGvB,MAAO,OAAAA,cAAA,CAAM,cAAc,MAAQ,EAAA;AAAA,QACjC,GAAK,EAAA,IAAA;AAAA,QACL,GAAK,EAAA,YAAA;AAAA,QACL,IAAM,EAAA,GAAA;AAAA,QACN,UAAY,EAAA;AAAA,OACb,CAAA;AAAA;AAGH,IAAO,OAAA,IAAA;AAAA,GACR,CAAE,CAAA,MAAA,CAAO,OAAO,CAAA;AAEjB,EAAA,OAAOA,cAAM,CAAA,aAAA;AAAA,IACXA,cAAM,CAAA,QAAA;AAAA,IACN,IAAA;AAAA,IACA,GAAG,QAAA;AAAA,IACH;AAAA,GACF;AACF;;;;"}
@@ -1,22 +1,17 @@
1
1
  import type { PipeableStream } from "react-dom/server";
2
- import type { CheckFilesExistReturn, CreateHandlerOptions, ResolvedUserOptions } from "../types.js";
2
+ import type { CreateHandlerOptions } from "../types.js";
3
3
  type CreateHandlerResult = {
4
4
  type: "success";
5
5
  controller: AbortController;
6
6
  stream: PipeableStream;
7
7
  assets: any;
8
- clientPath: string;
8
+ route: string;
9
9
  } | {
10
10
  type: "error";
11
11
  error: Error;
12
12
  } | {
13
13
  type: "skip";
14
14
  };
15
- export declare function createHandler<T>({ url, urlMap, pluginOptions, streamOptions, }: {
16
- url: string;
17
- urlMap: CheckFilesExistReturn['urlMap'];
18
- pluginOptions: ResolvedUserOptions;
19
- streamOptions: CreateHandlerOptions<T>;
20
- }): Promise<CreateHandlerResult>;
15
+ export declare function createHandler<T>({ getCss, root, cssFiles, cssModules, onCssFile, logger, loader, Html, CssCollector, pagePath, propsPath, pageExportName, propsExportName, inlineCss, moduleBase, preserveModulesRoot: _preserveModulesRoot, moduleBasePath, moduleRootPath, moduleBaseURL, route, pipableStreamOptions, }: CreateHandlerOptions<T>): Promise<CreateHandlerResult>;
21
16
  export {};
22
17
  //# sourceMappingURL=createHandler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createHandler.d.ts","sourceRoot":"","sources":["../../../plugin/helpers/createHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AASvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGpG,KAAK,mBAAmB,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,GAAG,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAOrB,wBAAsB,aAAa,CAAC,CAAC,EAAE,EACrC,GAAG,EACH,MAAM,EACN,aAAa,EACb,aAAa,GACd,EAAE;IACD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACxC,aAAa,EAAE,mBAAmB,CAAC;IACnC,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAA;CACvC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgH/B"}
1
+ {"version":3,"file":"createHandler.d.ts","sourceRoot":"","sources":["../../../plugin/helpers/createHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,KAAK,EAAE,oBAAoB,EAAc,MAAM,aAAa,CAAC;AAEpE,KAAK,mBAAmB,GACpB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAOrB,wBAAsB,aAAa,CAAC,CAAC,EAAE,EACrC,MAAM,EACN,IAAI,EACJ,QAAa,EACb,UAAmD,EACnD,SAAS,EACT,MAAM,EACN,MAAM,EACN,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,cAAc,EACd,eAAe,EACf,SAAS,EACT,UAAU,EACV,mBAAmB,EAAE,oBAAoB,EACzC,cAAc,EACd,cAAc,EACd,aAAa,EACb,KAAK,EACL,oBAAoB,GACrB,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA2FxD"}