vite-plugin-react-server 0.3.18 → 0.3.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +119 -118
- package/bin/patch.mjs +8 -2
- package/dist/package.json +3 -3
- package/dist/plugin/checkFilesExist.d.ts.map +1 -1
- package/dist/plugin/checkFilesExist.js +6 -2
- package/dist/plugin/checkFilesExist.js.map +1 -1
- package/dist/plugin/collect-manifest-client-files.d.ts +23 -0
- package/dist/plugin/collect-manifest-client-files.d.ts.map +1 -0
- package/dist/plugin/collect-manifest-client-files.js +117 -0
- package/dist/plugin/collect-manifest-client-files.js.map +1 -0
- package/dist/plugin/components.d.ts +9 -9
- package/dist/plugin/components.d.ts.map +1 -1
- package/dist/plugin/components.js +50 -9
- package/dist/plugin/components.js.map +1 -0
- package/dist/plugin/config/defaults.d.ts +7 -6
- package/dist/plugin/config/defaults.d.ts.map +1 -1
- package/dist/plugin/config/defaults.js +8 -5
- package/dist/plugin/config/defaults.js.map +1 -1
- package/dist/plugin/config/getPaths.d.ts +0 -1
- package/dist/plugin/config/getPaths.d.ts.map +1 -1
- package/dist/plugin/config/getPaths.js +2 -7
- package/dist/plugin/config/getPaths.js.map +1 -1
- package/dist/plugin/config/mimeTypes.d.ts +2 -0
- package/dist/plugin/config/mimeTypes.d.ts.map +1 -0
- package/dist/plugin/config/mimeTypes.js +24 -0
- package/dist/plugin/config/mimeTypes.js.map +1 -0
- package/dist/plugin/config/resolveOptions.d.ts +1 -1
- package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.js +41 -28
- package/dist/plugin/config/resolveOptions.js.map +1 -1
- package/dist/plugin/config/resolvePages.d.ts +1 -0
- package/dist/plugin/config/resolvePages.d.ts.map +1 -1
- package/dist/plugin/config/resolvePages.js +9 -5
- package/dist/plugin/config/resolvePages.js.map +1 -1
- package/dist/plugin/config/resolveUserConfig.d.ts +2 -1
- package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
- package/dist/plugin/config/resolveUserConfig.js +10 -5
- package/dist/plugin/config/resolveUserConfig.js.map +1 -1
- package/dist/plugin/copy-dir.js +23 -18
- package/dist/plugin/copy-dir.js.map +1 -0
- package/dist/plugin/helpers/createHandler.d.ts +22 -0
- package/dist/plugin/helpers/createHandler.d.ts.map +1 -0
- package/dist/plugin/{react-server → helpers}/createHandler.js +36 -48
- package/dist/plugin/helpers/createHandler.js.map +1 -0
- package/dist/plugin/{react-server → helpers}/createRscStream.d.ts +2 -1
- package/dist/plugin/helpers/createRscStream.d.ts.map +1 -0
- package/dist/plugin/helpers/createRscStream.js +71 -0
- package/dist/plugin/helpers/createRscStream.js.map +1 -0
- package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
- package/dist/plugin/helpers/getBundleManifest.js +12 -4
- package/dist/plugin/helpers/getBundleManifest.js.map +1 -1
- package/dist/plugin/loader/createBuildLoader.d.ts +1 -1
- package/dist/plugin/loader/createBuildLoader.d.ts.map +1 -1
- package/dist/plugin/loader/createBuildLoader.js +8 -5
- package/dist/plugin/loader/createBuildLoader.js.map +1 -1
- package/dist/plugin/loader/css-loader.d.ts.map +1 -1
- package/dist/plugin/loader/css-loader.js.map +1 -1
- package/dist/plugin/loader/react-loader.js +2 -2
- package/dist/plugin/loader/react-loader.js.map +1 -1
- package/dist/plugin/preserver/plugin.d.ts.map +1 -1
- package/dist/plugin/preserver/plugin.js +49 -14
- package/dist/plugin/preserver/plugin.js.map +1 -1
- package/dist/plugin/react-client/plugin.d.ts.map +1 -1
- package/dist/plugin/react-client/plugin.js +18 -76
- package/dist/plugin/react-client/plugin.js.map +1 -1
- package/dist/plugin/react-server/index.d.ts.map +1 -1
- package/dist/plugin/react-server/index.js +2 -0
- package/dist/plugin/react-server/index.js.map +1 -1
- package/dist/plugin/react-server/plugin.d.ts +2 -1
- package/dist/plugin/react-server/plugin.d.ts.map +1 -1
- package/dist/plugin/react-server/plugin.js +53 -217
- package/dist/plugin/react-server/plugin.js.map +1 -1
- package/dist/plugin/react-static/index.d.ts +2 -0
- package/dist/plugin/react-static/index.d.ts.map +1 -0
- package/dist/plugin/react-static/index.js +1 -0
- package/dist/plugin/react-static/plugin.d.ts +7 -0
- package/dist/plugin/react-static/plugin.d.ts.map +1 -0
- package/dist/plugin/react-static/plugin.js +199 -0
- package/dist/plugin/react-static/plugin.js.map +1 -0
- package/dist/plugin/resolvePage.d.ts.map +1 -1
- package/dist/plugin/resolvePage.js +9 -0
- package/dist/plugin/resolvePage.js.map +1 -1
- package/dist/plugin/root.d.ts +2 -0
- package/dist/plugin/root.d.ts.map +1 -0
- package/dist/plugin/root.js +12 -0
- package/dist/plugin/root.js.map +1 -0
- package/dist/plugin/transformer/plugin.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.js +32 -23
- package/dist/plugin/transformer/plugin.js.map +1 -1
- package/dist/plugin/transformer/types.d.ts +1 -18
- package/dist/plugin/transformer/types.d.ts.map +1 -1
- package/dist/plugin/types.d.ts +24 -6
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/worker/createWorker.js +0 -1
- package/dist/plugin/worker/createWorker.js.map +1 -1
- package/dist/plugin/worker/html/html-worker.development.d.ts +30 -0
- package/dist/plugin/worker/html/html-worker.development.d.ts.map +1 -1
- package/dist/plugin/worker/html/html-worker.development.js +30 -2
- package/dist/plugin/worker/html/html-worker.development.js.map +1 -1
- package/dist/plugin/worker/html/html-worker.production.js +3 -5
- package/dist/plugin/worker/html/html-worker.production.js.map +1 -1
- package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/html/messageHandler.js +8 -2
- package/dist/plugin/worker/html/messageHandler.js.map +1 -1
- package/dist/plugin/worker/html/plugin.d.ts.map +1 -1
- package/dist/plugin/worker/html/plugin.js +2 -3
- package/dist/plugin/worker/html/renderPages.d.ts +8 -4
- package/dist/plugin/worker/html/renderPages.d.ts.map +1 -1
- package/dist/plugin/worker/html/renderPages.js +118 -83
- package/dist/plugin/worker/html/renderPages.js.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.js +89 -84
- package/dist/plugin/worker/rsc/messageHandler.js.map +1 -1
- package/dist/plugin/worker/rsc/plugin.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/plugin.js +1 -2
- package/dist/plugin/worker/rsc/rsc-worker.development.js +13 -18
- package/dist/plugin/worker/rsc/rsc-worker.development.js.map +1 -1
- package/dist/plugin/worker/rsc/rsc-worker.production.js +4 -1
- package/dist/plugin/worker/rsc/rsc-worker.production.js.map +1 -1
- package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/state.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/plugin/checkFilesExist.ts +7 -3
- package/plugin/collect-manifest-client-files.ts +152 -0
- package/plugin/components.tsx +55 -10
- package/plugin/config/defaults.tsx +69 -0
- package/plugin/config/getPaths.ts +1 -7
- package/plugin/config/mimeTypes.ts +17 -0
- package/plugin/config/resolveOptions.ts +48 -40
- package/plugin/config/resolvePages.ts +8 -4
- package/plugin/config/resolveUserConfig.ts +12 -9
- package/plugin/{react-server → helpers}/createHandler.ts +46 -63
- package/plugin/helpers/createRscStream.ts +81 -0
- package/plugin/helpers/getBundleManifest.ts +14 -5
- package/plugin/loader/createBuildLoader.ts +9 -6
- package/plugin/loader/css-loader.ts +0 -2
- package/plugin/loader/react-loader.ts +2 -2
- package/plugin/preserver/plugin.ts +64 -17
- package/plugin/react-client/plugin.ts +20 -91
- package/plugin/react-server/index.ts +2 -0
- package/plugin/react-server/plugin.ts +66 -293
- package/plugin/react-static/index.ts +1 -0
- package/plugin/react-static/plugin.ts +247 -0
- package/plugin/resolvePage.ts +9 -0
- package/plugin/root.ts +4 -0
- package/plugin/transformer/plugin.ts +40 -31
- package/plugin/transformer/types.ts +0 -19
- package/plugin/types.ts +25 -6
- package/plugin/worker/createWorker.ts +1 -1
- package/plugin/worker/html/README.md +63 -0
- package/plugin/worker/html/html-worker.development.tsx +89 -2
- package/plugin/worker/html/html-worker.production.tsx +8 -10
- package/plugin/worker/html/messageHandler.ts +8 -2
- package/plugin/worker/html/plugin.ts +2 -3
- package/plugin/worker/html/renderPages.ts +150 -114
- package/plugin/worker/rsc/README.md +58 -0
- package/plugin/worker/rsc/messageHandler.tsx +95 -111
- package/plugin/worker/rsc/plugin.ts +1 -2
- package/plugin/worker/rsc/rsc-worker.development.ts +12 -22
- package/plugin/worker/rsc/rsc-worker.production.ts +5 -1
- package/plugin/worker/rsc/state.ts +0 -3
- package/scripts/react+0.0.0-experimental-eda36a1c-20250228.patch +114 -12
- package/scripts/react-dom+0.0.0-experimental-eda36a1c-20250228.patch +10571 -121
- package/tsconfig.json +2 -2
- package/dist/plugin/collect-css-manifest.d.ts +0 -4
- package/dist/plugin/collect-css-manifest.d.ts.map +0 -1
- package/dist/plugin/collect-css-manifest.js +0 -65
- package/dist/plugin/collect-css-manifest.js.map +0 -1
- package/dist/plugin/config/createModuleIdGenerator.d.ts +0 -11
- package/dist/plugin/config/createModuleIdGenerator.d.ts.map +0 -1
- package/dist/plugin/config/createModuleIdGenerator.js +0 -44
- package/dist/plugin/config/createModuleIdGenerator.js.map +0 -1
- package/dist/plugin/loader/createCssLoader.d.ts +0 -30
- package/dist/plugin/loader/createCssLoader.d.ts.map +0 -1
- package/dist/plugin/loader/createCssLoader.js +0 -35
- package/dist/plugin/loader/createPageLoader.d.ts +0 -24
- package/dist/plugin/loader/createPageLoader.d.ts.map +0 -1
- package/dist/plugin/loader/createPageLoader.js +0 -50
- package/dist/plugin/loader/rsc/messageHandler.d.ts +0 -2
- package/dist/plugin/loader/rsc/messageHandler.d.ts.map +0 -1
- package/dist/plugin/loader/rsc/messageHandler.js +0 -1
- package/dist/plugin/loader/rsc/rsc-worker.development.d.ts +0 -2
- package/dist/plugin/loader/rsc/rsc-worker.development.d.ts.map +0 -1
- package/dist/plugin/loader/rsc/rsc-worker.development.js +0 -1
- package/dist/plugin/react-server/createHandler.d.ts +0 -17
- package/dist/plugin/react-server/createHandler.d.ts.map +0 -1
- package/dist/plugin/react-server/createHandler.js.map +0 -1
- package/dist/plugin/react-server/createRscStream.d.ts.map +0 -1
- package/dist/plugin/react-server/createRscStream.js +0 -70
- package/dist/plugin/react-server/createRscStream.js.map +0 -1
- package/dist/plugin/react-server/createSsrHandler.d.ts +0 -4
- package/dist/plugin/react-server/createSsrHandler.d.ts.map +0 -1
- package/dist/plugin/react-server/createSsrHandler.js +0 -95
- package/dist/plugin/utils/logger.d.ts +0 -9
- package/dist/plugin/utils/logger.d.ts.map +0 -1
- package/dist/plugin/utils/logger.js +0 -68
- package/dist/plugin/utils/logger.js.map +0 -1
- package/plugin/collect-css-manifest.ts +0 -82
- package/plugin/config/createModuleIdGenerator.ts +0 -52
- package/plugin/config/defaults.ts +0 -51
- package/plugin/loader/createCssLoader.ts +0 -73
- package/plugin/loader/createPageLoader.ts +0 -103
- package/plugin/loader/rsc/messageHandler.tsx +0 -1
- package/plugin/loader/rsc/rsc-worker.development.ts +0 -1
- package/plugin/react-server/createRscStream.ts +0 -86
- package/plugin/react-server/createSsrHandler.ts +0 -125
- package/plugin/utils/logger.ts +0 -52
|
@@ -9,6 +9,7 @@ import { globSync } from 'fs';
|
|
|
9
9
|
|
|
10
10
|
function resolveUserConfig({
|
|
11
11
|
isClient = false,
|
|
12
|
+
isStatic = false,
|
|
12
13
|
config,
|
|
13
14
|
configEnv,
|
|
14
15
|
userOptions,
|
|
@@ -77,7 +78,7 @@ function resolveUserConfig({
|
|
|
77
78
|
return inputs2;
|
|
78
79
|
};
|
|
79
80
|
let inputs = isClient ? autoDiscoveredClientFiles(clientEntry) : autoDiscoveredServerFiles(autoDiscoveredFiles(serverEntry ?? {}));
|
|
80
|
-
const envDir = isClient ? userOptions.build.client : userOptions.build.server;
|
|
81
|
+
const envDir = isStatic ? userOptions.build.static : isClient ? userOptions.build.client : userOptions.build.server;
|
|
81
82
|
const pluginOutput = {
|
|
82
83
|
preserveModules: !isClient,
|
|
83
84
|
preserveModulesRoot: userOptions.build.preserveModulesRoot ? userOptions.moduleBase : void 0,
|
|
@@ -93,7 +94,7 @@ function resolveUserConfig({
|
|
|
93
94
|
},
|
|
94
95
|
interop: "auto"
|
|
95
96
|
};
|
|
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;
|
|
97
98
|
if (isClient) {
|
|
98
99
|
return {
|
|
99
100
|
type: "success",
|
|
@@ -122,10 +123,11 @@ function resolveUserConfig({
|
|
|
122
123
|
emptyOutDir: config.build?.emptyOutDir ?? true,
|
|
123
124
|
outDir: join(userOptions.build.outDir, envDir),
|
|
124
125
|
assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,
|
|
126
|
+
copyPublicDir: config.build?.copyPublicDir ?? true,
|
|
125
127
|
// modern browsers
|
|
126
128
|
target: ["esnext"],
|
|
127
129
|
minify: true,
|
|
128
|
-
ssr: typeof
|
|
130
|
+
ssr: typeof config.build?.ssr === "boolean" ? config.build?.ssr : configEnv.isSsrBuild ?? false,
|
|
129
131
|
manifest: config.build?.manifest ?? `.vite/manifest.json`,
|
|
130
132
|
ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,
|
|
131
133
|
ssrEmitAssets: config.build?.ssrEmitAssets ?? true,
|
|
@@ -139,6 +141,9 @@ function resolveUserConfig({
|
|
|
139
141
|
}
|
|
140
142
|
};
|
|
141
143
|
}
|
|
144
|
+
if (configEnv.isSsrBuild === false) {
|
|
145
|
+
configEnv.isSsrBuild = true;
|
|
146
|
+
}
|
|
142
147
|
return {
|
|
143
148
|
type: "success",
|
|
144
149
|
userConfig: {
|
|
@@ -146,7 +151,6 @@ function resolveUserConfig({
|
|
|
146
151
|
root,
|
|
147
152
|
mode: configEnv.mode ?? configEnv.command === "build" ? "production" : "development",
|
|
148
153
|
resolve: {
|
|
149
|
-
alias: {},
|
|
150
154
|
externalConditions: ["react-server"]
|
|
151
155
|
},
|
|
152
156
|
// server build options
|
|
@@ -156,10 +160,11 @@ function resolveUserConfig({
|
|
|
156
160
|
outDir: join(userOptions.build.outDir, envDir),
|
|
157
161
|
target: config.build?.target ?? "node18",
|
|
158
162
|
minify: config.build?.minify ?? true,
|
|
159
|
-
ssr: config.build?.ssr
|
|
163
|
+
ssr: typeof config.build?.ssr === "boolean" ? config.build?.ssr : configEnv.isSsrBuild ?? true,
|
|
160
164
|
manifest: config.build?.manifest ?? `.vite/manifest.json`,
|
|
161
165
|
ssrManifest: config.build?.ssrManifest ?? `.vite/ssr-manifest.json`,
|
|
162
166
|
ssrEmitAssets: config.build?.ssrEmitAssets ?? true,
|
|
167
|
+
copyPublicDir: config.build?.copyPublicDir ?? isStatic,
|
|
163
168
|
assetsDir: config.build?.assetsDir ?? userOptions.build.assetsDir,
|
|
164
169
|
rollupOptions: {
|
|
165
170
|
...config.build?.rollupOptions,
|
|
@@ -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 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 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 = 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 const 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 build options\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 // modern browsers\n target: [\"esnext\"],\n minify: true,\n ssr:\n typeof configEnv.isSsrBuild === \"boolean\"\n ? configEnv.isSsrBuild\n : 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 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 return {\n type: \"success\",\n userConfig: {\n ...config,\n root: root,\n mode: configEnv.mode ?? configEnv.command === \"build\" ? \"production\" : \"development\",\n resolve: {\n alias: {},\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: 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 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\";\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":";;;;;;;;;AAwBO,SAAS,iBAAkB,CAAA;AAAA,EAChC,QAAW,GAAA,KAAA;AAAA,EACX,QAAW,GAAA,KAAA;AAAA,EACX,MAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAoD,EAAA;AAClD,EAAI,IAAA;AAEF,IAAA,MAAM,OAAO,MAAO,CAAA,IAAA,IAAQ,WAAY,CAAA,WAAA,IAAe,QAAQ,GAAI,EAAA;AAEnE,IAAA,MAAM,aAAa,qBAAsB,CAAA;AAAA,MACvC,IAAA;AAAA,MACA,mBAAqB,EAAA,WAAA,CAAY,KAAM,CAAA,mBAAA,GACnC,YAAY,UACZ,GAAA,KAAA,CAAA;AAAA,MACJ,eAAiB,EAAA;AAAA,KAClB,CAAA;AAED,IAAA,MAAM,WAAc,GAAA,WAAA,CAAY,WAC5B,GAAA,MAAA,CAAO,WAAY,CAAA;AAAA,MACjB,WAAW,CAAC,WAAA,CAAY,WAAa,EAAA,WAAA,CAAY,WAAW,CAAC;AAAA,KAC9D,CACD,GAAA,IAAA;AACJ,IAAM,MAAA,WAAA,GAAc,WAAY,CAAA,WAAA,GAC5B,MAAO,CAAA,WAAA;AAAA,MACL;AAAA,QACE,CAAC,WAAA,CAAY,WAAa,EAAA,WAAA,CAAY,WAAW,CAAA;AAAA,QACjD,CAAC,cAAc,YAAY;AAAA,OAC7B,CAAE,IAAI,UAAU;AAAA,KAClB,GACA,EAAE,YAAA,EAAc,YAAa,EAAA;AAEjC,IAAM,MAAA,yBAAA,GAA4B,CAACA,OAAmC,KAAA;AACpE,MAAM,MAAA,QAAA,GAAW,SAAS,CAAiB,aAAA,CAAA,EAAA;AAAA,QACzC,GAAK,EAAA,IAAA,CAAK,IAAM,EAAA,WAAA,CAAY,UAAU;AAAA,OACvC,CAAA;AAED,MAAA,KAAA,MAAW,QAAQ,QAAU,EAAA;AAC3B,QAAM,MAAA,CAAC,KAAK,KAAK,CAAA,GAAI,WAAW,IAAK,CAAA,WAAA,CAAY,UAAY,EAAA,IAAI,CAAC,CAAA;AAClE,QAAI,IAAA,CAACA,OAAO,CAAA,GAAG,CAAG,EAAA;AAChB,UAAAA,OAAAA,CAAO,GAAG,CAAI,GAAA,KAAA;AAAA,SACT,MAAA;AACL,UAAQ,OAAA,CAAA,IAAA,CAAK,CAAqC,kCAAA,EAAA,GAAG,CAAE,CAAA,CAAA;AAAA;AACzD;AAEF,MAAOA,OAAAA,OAAAA;AAAA,KACT;AACA,IAAM,MAAA,yBAAA,GAA4B,CAACA,OAAmC,KAAA;AACpE,MAAA,MAAM,QAAW,GAAA,QAAA,CAAS,CAAG,EAAA,WAAA,CAAY,UAAU,CAAkB,cAAA,CAAA,EAAA;AAAA,QACnE,GAAK,EAAA,IAAA,CAAK,IAAM,EAAA,WAAA,CAAY,UAAU;AAAA,OACvC,CAAA;AACD,MAAA,KAAA,MAAW,QAAQ,QAAU,EAAA;AAC3B,QAAM,MAAA,CAAC,KAAK,KAAK,CAAA,GAAI,WAAW,IAAK,CAAA,WAAA,CAAY,UAAY,EAAA,IAAI,CAAC,CAAA;AAClE,QAAI,IAAA,CAACA,OAAO,CAAA,GAAG,CAAG,EAAA;AAChB,UAAAA,OAAAA,CAAO,GAAG,CAAI,GAAA,KAAA;AAAA,SACT,MAAA;AACL,UAAQ,OAAA,CAAA,IAAA,CAAK,CAAqC,kCAAA,EAAA,GAAG,CAAE,CAAA,CAAA;AAAA;AACzD;AAEF,MAAOA,OAAAA,OAAAA;AAAA,KACT;AACA,IAAM,MAAA,mBAAA,GAAsB,CAACA,OAAmC,KAAA;AAC9D,MAAI,IAAA,CAAC,OAAcA,OAAAA,OAAAA;AAGnB,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAM,OAAS,EAAA;AACxC,QAAI,IAAA,CAACA,OAAO,CAAA,GAAG,CAAG,EAAA;AAChB,UAAAA,OAAAA,CAAO,GAAG,CAAI,GAAA,KAAA;AAAA,SACT,MAAA;AACL,UAAQ,OAAA,CAAA,IAAA,CAAK,CAAmC,gCAAA,EAAA,GAAG,CAAE,CAAA,CAAA;AAAA;AACvD;AAGF,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,MAAM,QAAU,EAAA;AACzC,QAAI,IAAA,CAACA,OAAO,CAAA,GAAG,CAAG,EAAA;AAChB,UAAAA,OAAAA,CAAO,GAAG,CAAI,GAAA,KAAA;AAAA,SACT,MAAA;AACL,UAAQ,OAAA,CAAA,IAAA,CAAK,CAAoC,iCAAA,EAAA,GAAG,CAAE,CAAA,CAAA;AAAA;AACxD;AAEF,MAAOA,OAAAA,OAAAA;AAAA,KACT;AAGA,IAAI,IAAA,MAAA,GAAS,QACT,GAAA,yBAAA,CAA0B,WAAW,CAAA,GACrC,0BAA0B,mBAAoB,CAAA,WAAA,IAAe,EAAE,CAAC,CAAA;AAEpE,IAAM,MAAA,MAAA,GAAS,QAAW,GAAA,WAAA,CAAY,KAAM,CAAA,MAAA,GAAS,WACjD,WAAY,CAAA,KAAA,CAAM,MAClB,GAAA,WAAA,CAAY,KAAM,CAAA,MAAA;AAEtB,IAAA,MAAM,YAAe,GAAA;AAAA,MACnB,iBAAiB,CAAC,QAAA;AAAA,MAClB,mBAAqB,EAAA,WAAA,CAAY,KAAM,CAAA,mBAAA,GACnC,YAAY,UACZ,GAAA,KAAA,CAAA;AAAA,MACJ,cAAA,EAAgB,YAAY,KAAM,CAAA,SAAA;AAAA,MAClC,cAAA,EAAgB,YAAY,KAAM,CAAA,SAAA;AAAA,MAClC,cAAA,EAAgB,YAAY,KAAM,CAAA,SAAA;AAAA,MAClC,MAAQ,EAAA,KAAA;AAAA,MACR,OAAS,EAAA,OAAA;AAAA,MACT,sBAAwB,EAAA,KAAA;AAAA,MACxB,aAAe,EAAA;AAAA,QACb,aAAe,EAAA,IAAA;AAAA,QACf,eAAiB,EAAA;AAAA,OACnB;AAAA,MACA,OAAS,EAAA;AAAA,KACX;AAEA,IAAA,IAAI,SAAY,GAAA,KAAA,CAAM,OAAQ,CAAA,MAAA,CAAO,OAAO,aAAe,EAAA,MAAM,CAC7D,GAAA,CAAC,GAAG,MAAA,CAAO,KAAO,EAAA,aAAA,EAAe,QAAQ,YAAY,CAAA,GACrD,OAAO,MAAA,CAAO,KAAO,EAAA,aAAA,EAAe,MAAW,KAAA,QAAA,IAC/C,OAAO,KAAO,EAAA,aAAA,EAAe,MAAW,KAAA,IAAA,GACxC,CAAC,MAAO,CAAA,KAAA,EAAO,aAAe,EAAA,MAAA,EAAQ,YAAY,CAClD,GAAA,YAAA;AAEJ,IAAA,IAAI,QAAU,EAAA;AAEZ,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,SAAA;AAAA,QACN,UAAY,EAAA;AAAA,UACV,GAAG,MAAA;AAAA,UACH,IAAA;AAAA,UACA,MAAM,SAAU,CAAA,IAAA,IAAQ,SAAU,CAAA,OAAA,KAAY,UAAU,YAAe,GAAA,aAAA;AAAA,UACvE,OAAS,EAAA;AAAA,YACP,QAAA,EAAU,CAAC,OAAA,EAAS,WAAW,CAAA;AAAA,YAC/B,OAAO;AAAC,WACV;AAAA,UACA,GAAK,EAAA;AAAA,YACH,MAAQ,EAAA,MAAA;AAAA,YACR,QAAU,EAAA;AAAA,cACR,OAAA;AAAA,cACA,WAAA;AAAA,cACA;AAAA,aACF;AAAA,YACA,OAAS,EAAA;AAAA,cACP,kBAAA,EAAoB,CAAC,cAAc;AAAA;AACrC,WACF;AAAA;AAAA,UAEA,KAAO,EAAA;AAAA,YACL,GAAG,MAAO,CAAA,KAAA;AAAA,YACV,WAAA,EAAa,MAAO,CAAA,KAAA,EAAO,WAAe,IAAA,IAAA;AAAA,YAC1C,MAAQ,EAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,YAC7C,SAAW,EAAA,MAAA,CAAO,KAAO,EAAA,SAAA,IAAa,YAAY,KAAM,CAAA,SAAA;AAAA,YACxD,aAAA,EAAe,MAAO,CAAA,KAAA,EAAO,aAAiB,IAAA,IAAA;AAAA;AAAA,YAE9C,MAAA,EAAQ,CAAC,QAAQ,CAAA;AAAA,YACjB,MAAQ,EAAA,IAAA;AAAA,YACR,GAAA,EAAK,OAAO,MAAA,CAAO,KAAO,EAAA,GAAA,KAAQ,YAAY,MAAO,CAAA,KAAA,EAAO,GAAM,GAAA,SAAA,CAAU,UAAc,IAAA,KAAA;AAAA,YAC1F,QAAA,EAAU,MAAO,CAAA,KAAA,EAAO,QAAY,IAAA,CAAA,mBAAA,CAAA;AAAA,YACpC,WAAA,EAAa,MAAO,CAAA,KAAA,EAAO,WAAe,IAAA,CAAA,uBAAA,CAAA;AAAA,YAC1C,aAAA,EAAe,MAAO,CAAA,KAAA,EAAO,aAAiB,IAAA,IAAA;AAAA,YAC9C,aAAe,EAAA;AAAA,cACb,GAAG,OAAO,KAAO,EAAA,aAAA;AAAA,cACjB,KAAO,EAAA,MAAA;AAAA,cACP,MAAQ,EAAA,SAAA;AAAA,cACR,uBAAyB,EAAA;AAAA;AAC3B;AACF;AACF,OACF;AAAA;AAGF,IAAG,IAAA,SAAA,CAAU,eAAe,KAAO,EAAA;AACjC,MAAA,SAAA,CAAU,UAAa,GAAA,IAAA;AAAA;AAEzB,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,SAAA;AAAA,MACN,UAAY,EAAA;AAAA,QACV,GAAG,MAAA;AAAA,QACH,IAAA;AAAA,QACA,MAAM,SAAU,CAAA,IAAA,IAAQ,SAAU,CAAA,OAAA,KAAY,UAAU,YAAe,GAAA,aAAA;AAAA,QACvE,OAAS,EAAA;AAAA,UACP,kBAAA,EAAoB,CAAC,cAAc;AAAA,SACrC;AAAA;AAAA,QAEA,KAAO,EAAA;AAAA,UACL,GAAG,MAAO,CAAA,KAAA;AAAA,UACV,WAAA,EAAa,MAAO,CAAA,KAAA,EAAO,WAAe,IAAA,IAAA;AAAA,UAC1C,MAAQ,EAAA,IAAA,CAAK,WAAY,CAAA,KAAA,CAAM,QAAQ,MAAM,CAAA;AAAA,UAC7C,MAAA,EAAQ,MAAO,CAAA,KAAA,EAAO,MAAU,IAAA,QAAA;AAAA,UAChC,MAAA,EAAQ,MAAO,CAAA,KAAA,EAAO,MAAU,IAAA,IAAA;AAAA,UAChC,GAAA,EAAK,OAAO,MAAA,CAAO,KAAO,EAAA,GAAA,KAAQ,YAAY,MAAO,CAAA,KAAA,EAAO,GAAM,GAAA,SAAA,CAAU,UAAc,IAAA,IAAA;AAAA,UAC1F,QAAA,EAAU,MAAO,CAAA,KAAA,EAAO,QAAY,IAAA,CAAA,mBAAA,CAAA;AAAA,UACpC,WAAA,EAAa,MAAO,CAAA,KAAA,EAAO,WAAe,IAAA,CAAA,uBAAA,CAAA;AAAA,UAC1C,aAAA,EAAe,MAAO,CAAA,KAAA,EAAO,aAAiB,IAAA,IAAA;AAAA,UAC9C,aAAA,EAAe,MAAO,CAAA,KAAA,EAAO,aAAiB,IAAA,QAAA;AAAA,UAC9C,SAAW,EAAA,MAAA,CAAO,KAAO,EAAA,SAAA,IAAa,YAAY,KAAM,CAAA,SAAA;AAAA,UACxD,aAAe,EAAA;AAAA,YACb,GAAG,OAAO,KAAO,EAAA,aAAA;AAAA,YACjB,KAAO,EAAA,MAAA;AAAA,YACP,uBAAyB,EAAA,MAAA,CAAO,KAAO,EAAA,aAAA,EAAe,uBAA2B,IAAA,QAAA;AAAA,YACjF,MAAQ,EAAA;AAAA;AACV;AACF;AACF,KACF;AAAA,WACO,KAAO,EAAA;AACd,IAAO,OAAA;AAAA,MACL,IAAM,EAAA,OAAA;AAAA,MACN,OACE,KAAiB,YAAA,KAAA,GAAQ,KAAQ,GAAA,IAAI,MAAM,0BAA0B;AAAA,KACzE;AAAA;AAEJ;;;;"}
|
package/dist/plugin/copy-dir.js
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
/**
|
|
2
|
+
* vite-plugin-react-server
|
|
3
|
+
* Copyright (c) Nico Brinkkemper
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { readdirSync, mkdirSync, statSync, copyFileSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
|
|
9
|
+
async function copyDir(src, dest, options) {
|
|
10
|
+
const entries = readdirSync(src);
|
|
11
|
+
mkdirSync(dest, { recursive: true });
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
const srcPath = join(src, entry);
|
|
14
|
+
const destPath = join(dest, entry);
|
|
15
|
+
const stat = statSync(srcPath);
|
|
16
|
+
if (stat.isDirectory()) {
|
|
17
|
+
await copyDir(srcPath, destPath);
|
|
18
|
+
} else {
|
|
19
|
+
copyFileSync(srcPath, destPath);
|
|
19
20
|
}
|
|
21
|
+
}
|
|
20
22
|
}
|
|
23
|
+
|
|
24
|
+
export { copyDir };
|
|
25
|
+
//# sourceMappingURL=copy-dir.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-dir.js","sources":["../../plugin/copy-dir.ts"],"sourcesContent":["import { copyFileSync, mkdirSync, readdirSync, statSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport async function copyDir(src: string, dest: string, options?: { \n filter?: (file: string) => boolean \n}) {\n const entries = readdirSync(src);\n\n mkdirSync(dest, { recursive: true });\n\n for (const entry of entries) {\n const srcPath = join(src, entry);\n const destPath = join(dest, entry);\n\n const stat = statSync(srcPath);\n \n if (options?.filter && !options.filter(srcPath)) {\n continue;\n }\n\n if (stat.isDirectory()) {\n await copyDir(srcPath, destPath, options);\n } else {\n copyFileSync(srcPath, destPath);\n }\n }\n} "],"names":[],"mappings":";;;;;;;;AAGsB,eAAA,OAAA,CAAQ,GAAa,EAAA,IAAA,EAAc,OAEtD,EAAA;AACD,EAAM,MAAA,OAAA,GAAU,YAAY,GAAG,CAAA;AAE/B,EAAA,SAAA,CAAU,IAAM,EAAA,EAAE,SAAW,EAAA,IAAA,EAAM,CAAA;AAEnC,EAAA,KAAA,MAAW,SAAS,OAAS,EAAA;AAC3B,IAAM,MAAA,OAAA,GAAU,IAAK,CAAA,GAAA,EAAK,KAAK,CAAA;AAC/B,IAAM,MAAA,QAAA,GAAW,IAAK,CAAA,IAAA,EAAM,KAAK,CAAA;AAEjC,IAAM,MAAA,IAAA,GAAO,SAAS,OAAO,CAAA;AAM7B,IAAI,IAAA,IAAA,CAAK,aAAe,EAAA;AACtB,MAAM,MAAA,OAAA,CAAQ,OAAS,EAAA,QAAiB,CAAA;AAAA,KACnC,MAAA;AACL,MAAA,YAAA,CAAa,SAAS,QAAQ,CAAA;AAAA;AAChC;AAEJ;;;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PipeableStream } from "react-dom/server";
|
|
2
|
+
import type { CheckFilesExistReturn, CreateHandlerOptions, ResolvedUserOptions } from "../types.js";
|
|
3
|
+
type CreateHandlerResult = {
|
|
4
|
+
type: "success";
|
|
5
|
+
controller: AbortController;
|
|
6
|
+
stream: PipeableStream;
|
|
7
|
+
assets: any;
|
|
8
|
+
clientPath: string;
|
|
9
|
+
} | {
|
|
10
|
+
type: "error";
|
|
11
|
+
error: Error;
|
|
12
|
+
} | {
|
|
13
|
+
type: "skip";
|
|
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>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=createHandler.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -4,30 +4,39 @@
|
|
|
4
4
|
* MIT License
|
|
5
5
|
*/
|
|
6
6
|
import { createLogger } from 'vite';
|
|
7
|
-
import {
|
|
7
|
+
import { collectManifestClientFiles, collectModuleGraphCss } from '../collect-manifest-client-files.js';
|
|
8
8
|
import { DEFAULT_CONFIG } from '../config/defaults.js';
|
|
9
9
|
import { resolvePage } from '../resolvePage.js';
|
|
10
10
|
import { resolveProps } from '../resolveProps.js';
|
|
11
11
|
import { createRscStream } from './createRscStream.js';
|
|
12
12
|
|
|
13
|
-
async function createHandler(
|
|
13
|
+
async function createHandler({
|
|
14
|
+
url,
|
|
15
|
+
urlMap,
|
|
16
|
+
pluginOptions,
|
|
17
|
+
streamOptions
|
|
18
|
+
}) {
|
|
14
19
|
const root = pluginOptions.projectRoot ?? process.cwd();
|
|
15
20
|
const Html = pluginOptions.Html ?? DEFAULT_CONFIG.HTML;
|
|
16
21
|
const pageExportName = pluginOptions.pageExportName ?? DEFAULT_CONFIG.PAGE_EXPORT_NAME;
|
|
17
22
|
const propsExportName = pluginOptions.propsExportName ?? DEFAULT_CONFIG.PROPS_EXPORT_NAME;
|
|
18
23
|
const controller = new AbortController();
|
|
19
24
|
const cssFiles = streamOptions.cssFiles;
|
|
20
|
-
const
|
|
21
|
-
const pagePath = typeof pluginOptions.Page === "function" ? pluginOptions.Page(url) : pluginOptions.Page;
|
|
22
|
-
const cssModules = /* @__PURE__ */ new Set();
|
|
25
|
+
const cssModules = streamOptions.cssModules ?? /* @__PURE__ */ new Set();
|
|
23
26
|
if (!(streamOptions.serverManifest || streamOptions.moduleGraph))
|
|
24
27
|
throw new Error("Missing server manifest or moduleGraph, pass it to options.");
|
|
25
|
-
const getCss = streamOptions.serverManifest ? (id) =>
|
|
26
|
-
streamOptions.serverManifest,
|
|
28
|
+
const getCss = streamOptions.serverManifest ? (id) => collectManifestClientFiles({
|
|
29
|
+
manifest: streamOptions.serverManifest,
|
|
27
30
|
root,
|
|
28
|
-
id,
|
|
29
|
-
streamOptions.onCssFile
|
|
30
|
-
|
|
31
|
+
pagePath: id,
|
|
32
|
+
onCss: streamOptions.onCssFile,
|
|
33
|
+
moduleBase: pluginOptions.moduleBase,
|
|
34
|
+
preserveModulesRoot: pluginOptions.build.preserveModulesRoot
|
|
35
|
+
}).cssFiles : (id) => collectModuleGraphCss({
|
|
36
|
+
moduleGraph: streamOptions.moduleGraph,
|
|
37
|
+
pagePath: id,
|
|
38
|
+
onCss: streamOptions.onCssFile
|
|
39
|
+
});
|
|
31
40
|
const loadWithCss = async (id, parentUrl) => {
|
|
32
41
|
try {
|
|
33
42
|
const mod = await streamOptions.loader(id);
|
|
@@ -48,60 +57,39 @@ async function createHandler(url, pluginOptions, streamOptions) {
|
|
|
48
57
|
}
|
|
49
58
|
};
|
|
50
59
|
const PropsModule = await resolveProps({
|
|
51
|
-
propsModule: await loadWithCss(
|
|
52
|
-
path: String(
|
|
60
|
+
propsModule: await loadWithCss(urlMap.get(url)?.props ?? url, url),
|
|
61
|
+
path: String(urlMap.get(url)?.props ?? url),
|
|
53
62
|
exportName: propsExportName,
|
|
54
63
|
url
|
|
55
64
|
});
|
|
56
|
-
if (PropsModule.type
|
|
57
|
-
return
|
|
58
|
-
|
|
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 };
|
|
65
|
+
if (PropsModule.type !== "success") {
|
|
66
|
+
return PropsModule;
|
|
67
|
+
}
|
|
62
68
|
const PageModule = await resolvePage({
|
|
63
|
-
pageModule: await loadWithCss(
|
|
64
|
-
path:
|
|
69
|
+
pageModule: await loadWithCss(urlMap.get(url)?.page ?? url, url),
|
|
70
|
+
path: String(urlMap.get(url)?.page ?? url),
|
|
65
71
|
exportName: pageExportName,
|
|
66
72
|
url
|
|
67
73
|
});
|
|
68
|
-
if (PageModule.type
|
|
69
|
-
return
|
|
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
|
-
};
|
|
74
|
+
if (PageModule.type !== "success") {
|
|
75
|
+
return PageModule;
|
|
89
76
|
}
|
|
90
77
|
if (streamOptions.cssFiles) {
|
|
91
78
|
streamOptions.cssFiles.forEach((css) => cssModules.add(css));
|
|
92
79
|
}
|
|
93
80
|
const stream = createRscStream({
|
|
94
81
|
Html,
|
|
95
|
-
Page,
|
|
96
|
-
props,
|
|
97
|
-
moduleBasePath:
|
|
82
|
+
Page: PageModule[pageExportName],
|
|
83
|
+
props: PropsModule[propsExportName],
|
|
84
|
+
moduleBasePath: streamOptions.moduleBasePath,
|
|
85
|
+
moduleBaseURL: streamOptions.moduleBaseURL,
|
|
98
86
|
logger: streamOptions.logger ?? createLogger(),
|
|
99
87
|
cssFiles: Array.from(cssModules),
|
|
100
88
|
route: url,
|
|
101
89
|
url,
|
|
102
90
|
pipableStreamOptions: streamOptions.pipableStreamOptions,
|
|
103
91
|
htmlProps: {
|
|
104
|
-
pageProps:
|
|
92
|
+
pageProps: PropsModule[propsExportName],
|
|
105
93
|
route: url,
|
|
106
94
|
url
|
|
107
95
|
}
|
|
@@ -110,15 +98,15 @@ async function createHandler(url, pluginOptions, streamOptions) {
|
|
|
110
98
|
return { type: "skip" };
|
|
111
99
|
}
|
|
112
100
|
const assets = {
|
|
113
|
-
css:
|
|
114
|
-
|
|
101
|
+
css: Array.from(cssModules).concat(cssFiles ?? []),
|
|
102
|
+
bootstrapModules: streamOptions.pipableStreamOptions?.bootstrapModules ?? []
|
|
115
103
|
};
|
|
116
104
|
return {
|
|
117
105
|
type: "success",
|
|
118
106
|
controller,
|
|
119
107
|
stream,
|
|
120
108
|
assets,
|
|
121
|
-
clientPath:
|
|
109
|
+
clientPath: urlMap.get(url)?.page ?? ""
|
|
122
110
|
};
|
|
123
111
|
}
|
|
124
112
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createHandler.js","sources":["../../../plugin/helpers/createHandler.ts"],"sourcesContent":["import type { PipeableStream } from \"react-dom/server\";\nimport { createLogger } from \"vite\";\nimport {\n collectManifestClientFiles,\n collectModuleGraphCss,\n} from \"../collect-manifest-client-files.js\";\nimport { DEFAULT_CONFIG } from \"../config/defaults.js\";\nimport { resolvePage } from \"../resolvePage.js\";\nimport { resolveProps } from \"../resolveProps.js\";\nimport type { CheckFilesExistReturn, 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: string[];\n bootstrapModules: string[];\n}\n\nexport async function createHandler<T>({\n url,\n urlMap,\n pluginOptions,\n streamOptions,\n}: {\n url: string,\n urlMap: CheckFilesExistReturn['urlMap'],\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\n\n const cssModules = streamOptions.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 collectManifestClientFiles({\n manifest: streamOptions.serverManifest!,\n root: root,\n pagePath: id,\n onCss: streamOptions.onCssFile,\n moduleBase: pluginOptions.moduleBase,\n preserveModulesRoot: pluginOptions.build.preserveModulesRoot,\n }).cssFiles\n : (id: string) =>\n collectModuleGraphCss({\n moduleGraph: streamOptions.moduleGraph!,\n pagePath: id,\n onCss: streamOptions.onCssFile,\n });\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(urlMap.get(url)?.props ?? url, url),\n path: String(urlMap.get(url)?.props ?? url),\n exportName: propsExportName,\n url,\n });\n if (PropsModule.type !== \"success\") {\n return PropsModule\n }\n const PageModule = await resolvePage({\n pageModule: await loadWithCss(urlMap.get(url)?.page ?? url, url),\n path: String(urlMap.get(url)?.page ?? url),\n exportName: pageExportName,\n url,\n });\n if (PageModule.type !== \"success\") {\n return PageModule\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: PageModule[pageExportName as keyof typeof PageModule],\n props: PropsModule[propsExportName as keyof typeof PropsModule],\n moduleBasePath: streamOptions.moduleBasePath,\n moduleBaseURL: streamOptions.moduleBaseURL,\n logger: streamOptions.logger ?? createLogger(),\n cssFiles: Array.from(cssModules),\n route: url,\n url,\n pipableStreamOptions: streamOptions.pipableStreamOptions,\n htmlProps: {\n pageProps: PropsModule[propsExportName as keyof typeof PropsModule],\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: Array.from(cssModules).concat(cssFiles ?? []),\n bootstrapModules: streamOptions.pipableStreamOptions?.bootstrapModules ?? [],\n };\n return {\n type: \"success\",\n controller,\n stream,\n assets,\n clientPath: urlMap.get(url)?.page ?? '',\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAsBA,eAAsB,aAAiB,CAAA;AAAA,EACrC,GAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAKiC,EAAA;AAC/B,EAAA,MAAM,IAAO,GAAA,aAAA,CAAc,WAAe,IAAA,OAAA,CAAQ,GAAI,EAAA;AAEtD,EAAM,MAAA,IAAA,GAAO,aAAc,CAAA,IAAA,IAAQ,cAAe,CAAA,IAAA;AAClD,EAAM,MAAA,cAAA,GACJ,aAAc,CAAA,cAAA,IAAkB,cAAe,CAAA,gBAAA;AACjD,EAAM,MAAA,eAAA,GACJ,aAAc,CAAA,eAAA,IAAmB,cAAe,CAAA,iBAAA;AAClD,EAAM,MAAA,UAAA,GAAa,IAAI,eAAgB,EAAA;AAEvC,EAAA,MAAM,WAAW,aAAc,CAAA,QAAA;AAG/B,EAAA,MAAM,UAAa,GAAA,aAAA,CAAc,UAAc,oBAAA,IAAI,GAAY,EAAA;AAE/D,EAAI,IAAA,EAAE,aAAc,CAAA,cAAA,IAAkB,aAAc,CAAA,WAAA,CAAA;AAClD,IAAM,MAAA,IAAI,MAAM,6DAA6D,CAAA;AAE/E,EAAA,MAAM,MAAS,GAAA,aAAA,CAAc,cACzB,GAAA,CAAC,OACC,0BAA2B,CAAA;AAAA,IACzB,UAAU,aAAc,CAAA,cAAA;AAAA,IACxB,IAAA;AAAA,IACA,QAAU,EAAA,EAAA;AAAA,IACV,OAAO,aAAc,CAAA,SAAA;AAAA,IACrB,YAAY,aAAc,CAAA,UAAA;AAAA,IAC1B,mBAAA,EAAqB,cAAc,KAAM,CAAA;AAAA,GAC1C,CAAA,CAAE,QACL,GAAA,CAAC,OACC,qBAAsB,CAAA;AAAA,IACpB,aAAa,aAAc,CAAA,WAAA;AAAA,IAC3B,QAAU,EAAA,EAAA;AAAA,IACV,OAAO,aAAc,CAAA;AAAA,GACtB,CAAA;AAEP,EAAM,MAAA,WAAA,GAAc,OAAO,EAAA,EAAY,SAAsB,KAAA;AAC3D,IAAI,IAAA;AACF,MAAA,MAAM,GAAM,GAAA,MAAM,aAAc,CAAA,MAAA,CAAO,EAAE,CAAA;AACzC,MAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,OAAQ,CAAA,MAAA,CAAO,EAAE,CAAC,CAAA;AAChD,MAAA,KAAA,CAAM,KAAK,OAAQ,CAAA,IAAA,EAAM,CAAE,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC1C,QAAA,UAAA,CAAW,IAAI,GAAG,CAAA;AAElB,QAAA,IAAI,cAAc,SAAW,EAAA;AAC3B,UAAc,aAAA,CAAA,SAAA,CAAU,KAAK,SAAS,CAAA;AAAA;AACxC,OACD,CAAA;AACD,MAAO,OAAA,GAAA;AAAA,aACA,CAAQ,EAAA;AACf,MAAA,IAAI,CAAE,CAAA,OAAA,EAAS,QAAS,CAAA,+BAA+B,CAAG,EAAA;AACxD,QAAO,OAAA,EAAE,MAAM,MAAO,EAAA;AAAA,OACjB,MAAA;AACL,QAAA,OAAO,EAAE,IAAA,EAAM,OAAS,EAAA,KAAA,EAAO,CAAE,EAAA;AAAA;AACnC;AACF,GACF;AAEA,EAAM,MAAA,WAAA,GAAc,MAAM,YAAa,CAAA;AAAA,IACrC,WAAA,EAAa,MAAM,WAAY,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,EAAG,KAAS,IAAA,GAAA,EAAK,GAAG,CAAA;AAAA,IACjE,MAAM,MAAO,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,EAAG,SAAS,GAAG,CAAA;AAAA,IAC1C,UAAY,EAAA,eAAA;AAAA,IACZ;AAAA,GACD,CAAA;AACD,EAAI,IAAA,WAAA,CAAY,SAAS,SAAW,EAAA;AAClC,IAAO,OAAA,WAAA;AAAA;AAET,EAAM,MAAA,UAAA,GAAa,MAAM,WAAY,CAAA;AAAA,IACnC,UAAA,EAAY,MAAM,WAAY,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,EAAG,IAAQ,IAAA,GAAA,EAAK,GAAG,CAAA;AAAA,IAC/D,MAAM,MAAO,CAAA,MAAA,CAAO,IAAI,GAAG,CAAA,EAAG,QAAQ,GAAG,CAAA;AAAA,IACzC,UAAY,EAAA,cAAA;AAAA,IACZ;AAAA,GACD,CAAA;AACD,EAAI,IAAA,UAAA,CAAW,SAAS,SAAW,EAAA;AACjC,IAAO,OAAA,UAAA;AAAA;AAIT,EAAA,IAAI,cAAc,QAAU,EAAA;AAC1B,IAAA,aAAA,CAAc,SAAS,OAAQ,CAAA,CAAC,QAAQ,UAAW,CAAA,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA;AAE7D,EAAA,MAAM,SAAS,eAAgB,CAAA;AAAA,IAC7B,IAAA;AAAA,IACA,IAAA,EAAM,WAAW,cAAyC,CAAA;AAAA,IAC1D,KAAA,EAAO,YAAY,eAA2C,CAAA;AAAA,IAC9D,gBAAgB,aAAc,CAAA,cAAA;AAAA,IAC9B,eAAe,aAAc,CAAA,aAAA;AAAA,IAC7B,MAAA,EAAQ,aAAc,CAAA,MAAA,IAAU,YAAa,EAAA;AAAA,IAC7C,QAAA,EAAU,KAAM,CAAA,IAAA,CAAK,UAAU,CAAA;AAAA,IAC/B,KAAO,EAAA,GAAA;AAAA,IACP,GAAA;AAAA,IACA,sBAAsB,aAAc,CAAA,oBAAA;AAAA,IACpC,SAAW,EAAA;AAAA,MACT,SAAA,EAAW,YAAY,eAA2C,CAAA;AAAA,MAClE,KAAO,EAAA,GAAA;AAAA,MACP;AAAA;AACF,GACD,CAAA;AAED,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,EAAE,MAAM,MAAgB,EAAA;AAAA;AAGjC,EAAA,MAAM,MAAwB,GAAA;AAAA,IAC5B,GAAA,EAAK,MAAM,IAAK,CAAA,UAAU,EAAE,MAAO,CAAA,QAAA,IAAY,EAAE,CAAA;AAAA,IACjD,gBAAkB,EAAA,aAAA,CAAc,oBAAsB,EAAA,gBAAA,IAAoB;AAAC,GAC7E;AACA,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,SAAA;AAAA,IACN,UAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAY,EAAA,MAAA,CAAO,GAAI,CAAA,GAAG,GAAG,IAAQ,IAAA;AAAA,GACvC;AACF;;;;"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import type { PipeableStreamOptions } from "../worker/types.js";
|
|
3
3
|
import type { Logger } from "vite";
|
|
4
|
-
export declare function createRscStream({ Html, Page, props, moduleBasePath, logger, cssFiles, route, url, pipableStreamOptions, htmlProps, }: {
|
|
4
|
+
export declare function createRscStream({ Html, Page, props, moduleBasePath, moduleBaseURL, logger, cssFiles, route, url, pipableStreamOptions, htmlProps, }: {
|
|
5
5
|
Html: React.ComponentType<any>;
|
|
6
6
|
Page: React.ComponentType<any>;
|
|
7
7
|
props: any;
|
|
8
8
|
moduleBasePath: string;
|
|
9
|
+
moduleBaseURL: string;
|
|
9
10
|
logger: Logger;
|
|
10
11
|
cssFiles?: string[];
|
|
11
12
|
route: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRscStream.d.ts","sourceRoot":"","sources":["../../../plugin/helpers/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;AAGnC,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,cAAc,EACd,aAAa,EACb,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,aAAa,EAAE,MAAM,CAAC;IACtB,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,OAiDA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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
|
+
import { CssCollector } from '../components.js';
|
|
9
|
+
|
|
10
|
+
function createRscStream({
|
|
11
|
+
Html,
|
|
12
|
+
Page,
|
|
13
|
+
props,
|
|
14
|
+
moduleBasePath,
|
|
15
|
+
moduleBaseURL,
|
|
16
|
+
logger,
|
|
17
|
+
cssFiles = [],
|
|
18
|
+
route,
|
|
19
|
+
url,
|
|
20
|
+
pipableStreamOptions,
|
|
21
|
+
htmlProps
|
|
22
|
+
}) {
|
|
23
|
+
const htmlIsFragment = Html == React.Fragment;
|
|
24
|
+
if (!htmlIsFragment) {
|
|
25
|
+
if (!htmlProps) {
|
|
26
|
+
htmlProps = {};
|
|
27
|
+
}
|
|
28
|
+
if (!("moduleBaseUrl" in htmlProps)) {
|
|
29
|
+
htmlProps["moduleBaseUrl"] = moduleBaseURL;
|
|
30
|
+
}
|
|
31
|
+
if (!("moduleBasePath" in htmlProps)) {
|
|
32
|
+
htmlProps["moduleBasePath"] = moduleBasePath;
|
|
33
|
+
}
|
|
34
|
+
if (!("url" in htmlProps)) {
|
|
35
|
+
htmlProps["url"] = url;
|
|
36
|
+
}
|
|
37
|
+
if (!("route" in htmlProps)) {
|
|
38
|
+
htmlProps["route"] = route;
|
|
39
|
+
}
|
|
40
|
+
if (!("pageProps" in htmlProps)) {
|
|
41
|
+
htmlProps["pageProps"] = props;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const withCss = React.createElement(
|
|
45
|
+
CssCollector,
|
|
46
|
+
{ cssFiles, route, moduleBaseUrl: moduleBaseURL },
|
|
47
|
+
React.createElement(Page, props)
|
|
48
|
+
);
|
|
49
|
+
const content = htmlIsFragment ? withCss : React.createElement(Html, htmlProps, withCss);
|
|
50
|
+
try {
|
|
51
|
+
return renderToPipeableStream(content, moduleBaseURL, {
|
|
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
|
+
} catch (error) {
|
|
63
|
+
logger.error(`Failed to create stream for ${route}.`, {
|
|
64
|
+
error
|
|
65
|
+
});
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { createRscStream };
|
|
71
|
+
//# sourceMappingURL=createRscStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRscStream.js","sources":["../../../plugin/helpers/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\";\nimport { CssCollector } from \"../components.js\";\n\nexport function createRscStream({\n Html,\n Page,\n props,\n moduleBasePath,\n moduleBaseURL,\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 moduleBaseURL: string;\n logger: Logger;\n cssFiles?: string[];\n route: string;\n url: string;\n pipableStreamOptions?: PipeableStreamOptions;\n htmlProps?: any;\n}) {\n const htmlIsFragment = Html == React.Fragment;\n if (!htmlIsFragment) {\n if (!htmlProps) {\n htmlProps = {};\n }\n if(!(\"moduleBaseUrl\" in htmlProps)) {\n htmlProps[\"moduleBaseUrl\"] = moduleBaseURL;\n }\n if(!(\"moduleBasePath\" in htmlProps)) {\n htmlProps[\"moduleBasePath\"] = moduleBasePath;\n }\n if (!(\"url\" in htmlProps)) {\n htmlProps[\"url\"] = url;\n }\n if (!(\"route\" in htmlProps)) {\n htmlProps[\"route\"] = route;\n }\n if (!(\"pageProps\" in htmlProps)) {\n htmlProps[\"pageProps\"] = props;\n }\n }\n const withCss = React.createElement(\n CssCollector,\n { cssFiles, route, moduleBaseUrl: moduleBaseURL },\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(content, moduleBaseURL, {\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 } catch (error) {\n logger.error(`Failed to create stream for ${route}.`, {\n error: error as Error,\n });\n return null;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;AAOO,SAAS,eAAgB,CAAA;AAAA,EAC9B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAW,EAAC;AAAA,EACZ,KAAA;AAAA,EACA,GAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAYG,EAAA;AACD,EAAM,MAAA,cAAA,GAAiB,QAAQ,KAAM,CAAA,QAAA;AACrC,EAAA,IAAI,CAAC,cAAgB,EAAA;AACnB,IAAA,IAAI,CAAC,SAAW,EAAA;AACd,MAAA,SAAA,GAAY,EAAC;AAAA;AAEf,IAAG,IAAA,EAAE,mBAAmB,SAAY,CAAA,EAAA;AAClC,MAAA,SAAA,CAAU,eAAe,CAAI,GAAA,aAAA;AAAA;AAE/B,IAAG,IAAA,EAAE,oBAAoB,SAAY,CAAA,EAAA;AACnC,MAAA,SAAA,CAAU,gBAAgB,CAAI,GAAA,cAAA;AAAA;AAEhC,IAAI,IAAA,EAAE,SAAS,SAAY,CAAA,EAAA;AACzB,MAAA,SAAA,CAAU,KAAK,CAAI,GAAA,GAAA;AAAA;AAErB,IAAI,IAAA,EAAE,WAAW,SAAY,CAAA,EAAA;AAC3B,MAAA,SAAA,CAAU,OAAO,CAAI,GAAA,KAAA;AAAA;AAEvB,IAAI,IAAA,EAAE,eAAe,SAAY,CAAA,EAAA;AAC/B,MAAA,SAAA,CAAU,WAAW,CAAI,GAAA,KAAA;AAAA;AAC3B;AAEF,EAAA,MAAM,UAAU,KAAM,CAAA,aAAA;AAAA,IACpB,YAAA;AAAA,IACA,EAAE,QAAA,EAAU,KAAO,EAAA,aAAA,EAAe,aAAc,EAAA;AAAA,IAChD,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,CAAuB,SAAS,aAAe,EAAA;AAAA,MACpD,OAAA,EAAS,CAAC,KAAiB,KAAA;AACzB,QAAA,IAAI,OAAQ,CAAA,GAAA,CAAI,UAAU,CAAA,KAAM,aAAe,EAAA;AAC7C,UAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA;AAErB,QAAA,MAAA,CAAO,MAAM,CAAmB,gBAAA,EAAA,KAAK,CAAK,CAAA,CAAA,EAAA,EAAE,OAAO,CAAA;AAAA,OACrD;AAAA,MACA,UAAA,EAAY,MAAO,CAAA,IAAA,IAAQ,OAAQ,CAAA,IAAA;AAAA,MACnC,eAAiB,EAAA,QAAA;AAAA,MACjB,GAAG;AAAA,KACJ,CAAA;AAAA,WACM,KAAO,EAAA;AACd,IAAO,MAAA,CAAA,KAAA,CAAM,CAA+B,4BAAA,EAAA,KAAK,CAAK,CAAA,CAAA,EAAA;AAAA,MACpD;AAAA,KACD,CAAA;AACD,IAAO,OAAA,IAAA;AAAA;AAEX;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBundleManifest.d.ts","sourceRoot":"","sources":["../../../plugin/helpers/getBundleManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EAEd,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"getBundleManifest.d.ts","sourceRoot":"","sources":["../../../plugin/helpers/getBundleManifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EAEd,MAAM,QAAQ,CAAC;AAIhB,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,aAAa,EACb,MAAM,EACN,UAAU,EACV,mBAAmB,GACpB,EAAE;IACD,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAsFtC"}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* MIT License
|
|
5
5
|
*/
|
|
6
6
|
import { createInputNormalizer } from './inputNormalizer.js';
|
|
7
|
-
import 'path';
|
|
8
7
|
import { DEFAULT_CONFIG } from '../config/defaults.js';
|
|
9
8
|
|
|
10
9
|
function getBundleManifest({
|
|
@@ -36,7 +35,7 @@ function getBundleManifest({
|
|
|
36
35
|
}
|
|
37
36
|
];
|
|
38
37
|
}
|
|
39
|
-
|
|
38
|
+
let [normalizedId, sourcePath] = normalizer(moduleId);
|
|
40
39
|
let finalFileName = fileName;
|
|
41
40
|
if (moduleId.includes("?")) {
|
|
42
41
|
const [basePath, query] = moduleId.split("?");
|
|
@@ -48,12 +47,21 @@ function getBundleManifest({
|
|
|
48
47
|
}
|
|
49
48
|
finalFileName = virtualModules.get(virtualKey);
|
|
50
49
|
}
|
|
50
|
+
if (normalizedId.startsWith("\0")) {
|
|
51
|
+
normalizedId = normalizedId.slice(1);
|
|
52
|
+
}
|
|
53
|
+
if (sourcePath.startsWith("/")) {
|
|
54
|
+
sourcePath = sourcePath.slice(1);
|
|
55
|
+
}
|
|
56
|
+
if (moduleBase && preserveModulesRoot && normalizedId?.startsWith(moduleBase + "/")) {
|
|
57
|
+
normalizedId = normalizedId.slice(moduleBase.length + 1);
|
|
58
|
+
}
|
|
51
59
|
const bundleManifestEntry = [
|
|
52
60
|
sourcePath,
|
|
53
61
|
{
|
|
54
62
|
file: finalFileName,
|
|
55
|
-
name: normalizedId
|
|
56
|
-
src: sourcePath
|
|
63
|
+
name: normalizedId,
|
|
64
|
+
src: sourcePath,
|
|
57
65
|
isEntry: chunk.isEntry,
|
|
58
66
|
...chunk.imports?.length > 0 ? { imports: chunk.imports } : {},
|
|
59
67
|
...chunk.dynamicImports?.length > 0 ? { dynamicImports: chunk.dynamicImports } : {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getBundleManifest.js","sources":["../../../plugin/helpers/getBundleManifest.ts"],"sourcesContent":["import type {\n OutputBundle,\n PluginContext,\n OutputChunk,\n} from \"rollup\";\nimport { createInputNormalizer } from \"./inputNormalizer.js\";\nimport {
|
|
1
|
+
{"version":3,"file":"getBundleManifest.js","sources":["../../../plugin/helpers/getBundleManifest.ts"],"sourcesContent":["import type {\n OutputBundle,\n PluginContext,\n OutputChunk,\n} from \"rollup\";\nimport { createInputNormalizer } from \"./inputNormalizer.js\";\nimport { DEFAULT_CONFIG } from \"../config/index.js\";\n\ninterface BundleManifestEntry {\n file: string;\n name: string;\n src?: string;\n isEntry?: boolean;\n imports?: string[];\n dynamicImports?: string[];\n css?: string[];\n}\n\n/**\n * Get the bundle manifest from the plugin context. Will only work during production build\n * @param pluginContext - The plugin context\n * @param bundle - The bundle\n * @param preserveModulesRoot - The preserve modules root\n * @returns The bundle manifest\n */\nexport function getBundleManifest({\n pluginContext,\n bundle,\n moduleBase,\n preserveModulesRoot,\n}: {\n pluginContext: PluginContext,\n bundle: OutputBundle,\n moduleBase?: string,\n preserveModulesRoot?: boolean,\n}): Record<string, BundleManifestEntry> {\n\n const normalizer = createInputNormalizer({\n root: pluginContext.environment.config.root,\n removeExtension: DEFAULT_CONFIG.FILE_REGEX,\n preserveModulesRoot: preserveModulesRoot === true ? moduleBase : undefined,\n });\n\n if (!bundle) return {};\n\n // Track virtual modules to prevent duplicates\n const virtualModules = new Map<string, string>();\n\n const bundleManifest = Object.fromEntries(\n Object.entries(bundle)\n .map(([fileName, chunk]) => {\n if (chunk.type !== \"chunk\") return null as never;\n const chunkWithFacade = chunk as OutputChunk;\n \n // Get the module ID, preferring facadeModuleId\n const moduleId = chunkWithFacade.facadeModuleId || chunkWithFacade.moduleIds[0] || fileName;\n \n // Handle commonjs helpers specially - must be done before normalization\n if (moduleId.includes('commonjsHelpers')) {\n return [\n moduleId,\n {\n file: 'commonjs-runtime.js',\n name: 'commonjsHelpers',\n src: moduleId,\n isEntry: false\n }\n ];\n }\n \n // Normalize both paths, removing the root prefix\n let [normalizedId, sourcePath] = normalizer(moduleId);\n\n // For virtual modules, use a consistent naming scheme\n let finalFileName = fileName;\n if (moduleId.includes('?')) {\n const [basePath, query] = moduleId.split('?');\n const virtualPath = basePath.includes('node_modules') \n ? basePath.split('node_modules/')[1] \n : basePath;\n \n // Create a unique key for this virtual module\n const virtualKey = `${virtualPath}?${query}`;\n \n if (!virtualModules.has(virtualKey)) {\n // First time seeing this virtual module\n const virtualFileName = `${virtualPath.replace(/\\.js$/, '')}.${query}.js`;\n virtualModules.set(virtualKey, virtualFileName);\n }\n \n finalFileName = virtualModules.get(virtualKey)!;\n }\n // handle preserveModulesRoot\n if(normalizedId.startsWith('\\x00')){\n normalizedId = normalizedId.slice(1);\n }\n if(sourcePath.startsWith('/')){\n sourcePath = sourcePath.slice(1);\n }\n if(moduleBase && preserveModulesRoot && normalizedId?.startsWith(moduleBase + '/')) {\n normalizedId = normalizedId.slice(moduleBase.length + 1);\n }\n const bundleManifestEntry = [\n sourcePath,\n {\n file: finalFileName,\n name: normalizedId,\n src: sourcePath,\n isEntry: chunk.isEntry,\n ...(chunk.imports?.length > 0 ? { imports: chunk.imports } : {}),\n ...(chunk.dynamicImports?.length > 0 ? { dynamicImports: chunk.dynamicImports } : {}),\n ...(chunk.viteMetadata?.importedCss?.size ? {\n css: Array.from(chunk.viteMetadata.importedCss),\n } : {}),\n },\n ];\n return bundleManifestEntry;\n })\n .filter(Boolean)\n );\n return bundleManifest;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,5 @@ export interface BuildLoaderOptions {
|
|
|
9
9
|
serverManifest: Manifest;
|
|
10
10
|
clientManifest: Manifest;
|
|
11
11
|
}
|
|
12
|
-
export declare function createBuildLoader({ root, userConfig, userOptions, pluginContext, serverManifest, clientManifest, }: BuildLoaderOptions): (id: string) => Promise<any>;
|
|
12
|
+
export declare function createBuildLoader({ root, userConfig: _userConfig, userOptions, pluginContext: _pluginContext, serverManifest, clientManifest, }: BuildLoaderOptions): (id: string) => Promise<any>;
|
|
13
13
|
//# sourceMappingURL=createBuildLoader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createBuildLoader.d.ts","sourceRoot":"","sources":["../../../plugin/loader/createBuildLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,EAAE,mBAAmB,CAAC;IACjC,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,UAAU,
|
|
1
|
+
{"version":3,"file":"createBuildLoader.d.ts","sourceRoot":"","sources":["../../../plugin/loader/createBuildLoader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAC5C,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,WAAW,EAAE,mBAAmB,CAAC;IACjC,cAAc,EAAE,QAAQ,CAAC;IACzB,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,UAAU,EAAE,WAAW,EACvB,WAAW,EACX,aAAa,EAAE,cAAc,EAC7B,cAAc,EACd,cAAc,GACf,EAAE,kBAAkB,QAMmB,MAAM,kBAsC7C"}
|
|
@@ -8,24 +8,27 @@ import { createInputNormalizer } from '../helpers/inputNormalizer.js';
|
|
|
8
8
|
|
|
9
9
|
function createBuildLoader({
|
|
10
10
|
root,
|
|
11
|
-
userConfig,
|
|
11
|
+
userConfig: _userConfig,
|
|
12
12
|
userOptions,
|
|
13
|
-
pluginContext,
|
|
13
|
+
pluginContext: _pluginContext,
|
|
14
14
|
serverManifest,
|
|
15
15
|
clientManifest
|
|
16
16
|
}) {
|
|
17
17
|
const normalizer = createInputNormalizer({
|
|
18
18
|
root,
|
|
19
|
-
preserveModulesRoot: undefined,
|
|
20
|
-
removeExtension:
|
|
19
|
+
preserveModulesRoot: userOptions.build.preserveModulesRoot === true ? userOptions.moduleBase : undefined,
|
|
20
|
+
removeExtension: true
|
|
21
21
|
});
|
|
22
22
|
return async function buildLoader(id) {
|
|
23
23
|
const [key, value] = normalizer(id);
|
|
24
|
+
if (value !== id) {
|
|
25
|
+
console.warn(`[vite-plugin-react-server] Mismatch in build loader for ${id} !== ${value} (${key})`);
|
|
26
|
+
}
|
|
24
27
|
const distDir = userOptions.build.outDir;
|
|
25
28
|
const manifests = [clientManifest, serverManifest];
|
|
26
29
|
for (const n of [0, 1]) {
|
|
27
30
|
const manifest = manifests[n];
|
|
28
|
-
const manifestEntry = manifest[
|
|
31
|
+
const manifestEntry = manifest[value];
|
|
29
32
|
if (!manifestEntry) {
|
|
30
33
|
continue;
|
|
31
34
|
}
|