Skip to content

Commit 74769a1

Browse files
hi-ogawaclaude
andcommitted
refactor: move writeEnvironmentImportsManifest to import-environment.ts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent f3e68ae commit 74769a1

File tree

2 files changed

+47
-45
lines changed

2 files changed

+47
-45
lines changed

packages/plugin-rsc/src/plugin.ts

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import vitePluginRscCore from './core/plugin'
2828
import { cjsModuleRunnerPlugin } from './plugins/cjs'
2929
import { vitePluginFindSourceMapURL } from './plugins/find-source-map-url'
3030
import {
31-
ENV_IMPORTS_MANIFEST_NAME,
3231
vitePluginImportEnvironment,
32+
writeEnvironmentImportsManifest,
3333
type EnvironmentImportMeta,
3434
} from './plugins/import-environment'
3535
import {
@@ -162,50 +162,7 @@ class RscPluginManager {
162162
}
163163

164164
writeEnvironmentImportsManifest(): void {
165-
if (Object.keys(this.environmentImportMetaMap).length === 0) {
166-
return
167-
}
168-
169-
// Write manifest to each source environment's output
170-
for (const [sourceEnv, byTargetEnv] of Object.entries(
171-
this.environmentImportMetaMap,
172-
)) {
173-
const sourceOutDir = this.config.environments[sourceEnv]!.build.outDir
174-
const manifestPath = path.join(sourceOutDir, ENV_IMPORTS_MANIFEST_NAME)
175-
176-
let code = 'export default {\n'
177-
for (const [targetEnv, imports] of Object.entries(byTargetEnv)) {
178-
// Lookup fileName from bundle
179-
const bundle = this.bundles[targetEnv]
180-
for (const [resolvedId, meta] of Object.entries(imports)) {
181-
const chunk = Object.values(bundle ?? {}).find(
182-
(c) =>
183-
c.type === 'chunk' &&
184-
c.isEntry &&
185-
c.facadeModuleId === resolvedId,
186-
)
187-
if (!chunk) {
188-
throw new Error(
189-
`[vite-rsc] missing output for environment import: ${resolvedId}`,
190-
)
191-
}
192-
const targetOutDir =
193-
this.config.environments[meta.targetEnv]!.build.outDir
194-
const relativePath = normalizeRelativePath(
195-
path.relative(
196-
sourceOutDir,
197-
path.join(targetOutDir, chunk.fileName),
198-
),
199-
)
200-
// Use relative ID for stable builds across different machines
201-
const relativeId = this.toRelativeId(resolvedId)
202-
code += ` ${JSON.stringify(relativeId)}: () => import(${JSON.stringify(relativePath)}),\n`
203-
}
204-
}
205-
code += '}\n'
206-
207-
fs.writeFileSync(manifestPath, code)
208-
}
165+
writeEnvironmentImportsManifest(this)
209166
}
210167
}
211168

packages/plugin-rsc/src/plugins/import-environment.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import assert from 'node:assert'
2+
import fs from 'node:fs'
23
import path from 'node:path'
34
import MagicString from 'magic-string'
45
import { stripLiteral } from 'strip-literal'
@@ -198,3 +199,47 @@ export function vitePluginImportEnvironment(
198199
),
199200
]
200201
}
202+
203+
export function writeEnvironmentImportsManifest(
204+
manager: RscPluginManager,
205+
): void {
206+
if (Object.keys(manager.environmentImportMetaMap).length === 0) {
207+
return
208+
}
209+
210+
// Write manifest to each source environment's output
211+
for (const [sourceEnv, byTargetEnv] of Object.entries(
212+
manager.environmentImportMetaMap,
213+
)) {
214+
const sourceOutDir = manager.config.environments[sourceEnv]!.build.outDir
215+
const manifestPath = path.join(sourceOutDir, ENV_IMPORTS_MANIFEST_NAME)
216+
217+
let code = 'export default {\n'
218+
for (const [_targetEnv, imports] of Object.entries(byTargetEnv)) {
219+
// Lookup fileName from bundle
220+
for (const [resolvedId, meta] of Object.entries(imports)) {
221+
const bundle = manager.bundles[meta.targetEnv]
222+
const chunk = Object.values(bundle ?? {}).find(
223+
(c) =>
224+
c.type === 'chunk' && c.isEntry && c.facadeModuleId === resolvedId,
225+
)
226+
if (!chunk) {
227+
throw new Error(
228+
`[vite-rsc] missing output for environment import: ${resolvedId}`,
229+
)
230+
}
231+
const targetOutDir =
232+
manager.config.environments[meta.targetEnv]!.build.outDir
233+
const relativePath = normalizeRelativePath(
234+
path.relative(sourceOutDir, path.join(targetOutDir, chunk.fileName)),
235+
)
236+
// Use relative ID for stable builds across different machines
237+
const relativeId = manager.toRelativeId(resolvedId)
238+
code += ` ${JSON.stringify(relativeId)}: () => import(${JSON.stringify(relativePath)}),\n`
239+
}
240+
}
241+
code += '}\n'
242+
243+
fs.writeFileSync(manifestPath, code)
244+
}
245+
}

0 commit comments

Comments
 (0)