Skip to content

Commit f85fc49

Browse files
committed
refactor: reuse crawlFrameworkPkgs
1 parent eb24897 commit f85fc49

File tree

1 file changed

+27
-34
lines changed

1 file changed

+27
-34
lines changed

packages/plugin-rsc/src/plugin.ts

Lines changed: 27 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import { scanBuildStripPlugin } from './plugins/scan'
5555
import { validateImportPlugin } from './plugins/validate-import'
5656
import { vitePluginFindSourceMapURL } from './plugins/find-source-map-url'
5757
import { parseCssVirtual, toCssVirtual, parseIdQuery } from './plugins/shared'
58+
import { hasUncaughtExceptionCaptureCallback } from 'node:process'
5859

5960
const isRolldownVite = 'rolldownVersion' in vite
6061

@@ -342,7 +343,7 @@ export default function vitePluginRsc(
342343
}
343344
}
344345

345-
let reactServerDomPackageName = REACT_SERVER_DOM_NAME
346+
let hasReactServerDomWebpack = false
346347

347348
return [
348349
{
@@ -377,15 +378,12 @@ export default function vitePluginRsc(
377378
PKG_NAME,
378379
...result.ssr.noExternal.sort(),
379380
]
380-
381-
// Detect if user has react-server-dom-webpack installed
382-
try {
383-
const require = createRequire(
384-
path.join(config.root ?? process.cwd(), '*'),
385-
)
386-
require.resolve('react-server-dom-webpack/package.json')
387-
reactServerDomPackageName = 'react-server-dom-webpack'
388-
} catch {}
381+
hasReactServerDomWebpack = result.ssr.noExternal.includes(
382+
'react-server-dom-webpack',
383+
)
384+
const reactServerDomPackageName = hasReactServerDomWebpack
385+
? 'react-server-dom-webpack'
386+
: REACT_SERVER_DOM_NAME
389387

390388
return {
391389
appType: config.appType ?? 'custom',
@@ -700,30 +698,25 @@ export default function vitePluginRsc(
700698
},
701699
{
702700
// Alias plugin to redirect vendored react-server-dom imports to user's package when available
703-
name: 'rsc:react-server-dom-alias',
704-
enforce: 'pre',
705-
async resolveId(source, importer, options) {
706-
// Only handle imports from the vendored path
707-
if (!source.startsWith(`${PKG_NAME}/vendor/react-server-dom/`)) {
708-
return null
709-
}
710-
711-
// Extract the subpath (e.g., "client.browser", "server.edge", etc.)
712-
const subpath = source.slice(
713-
`${PKG_NAME}/vendor/react-server-dom/`.length,
714-
)
715-
716-
// If user has their own package, resolve to it instead
717-
if (reactServerDomPackageName === 'react-server-dom-webpack') {
718-
const newSource = `react-server-dom-webpack/${subpath}`
719-
return this.resolve(newSource, importer, {
720-
...options,
721-
skipSelf: true,
722-
})
723-
}
724-
725-
// Otherwise, let the default resolution handle the vendored path
726-
return null
701+
name: 'rsc:react-server-dom-webpack-alias',
702+
resolveId: {
703+
order: 'pre',
704+
async handler(source, importer, options) {
705+
if (
706+
hasReactServerDomWebpack &&
707+
source.startsWith(`${PKG_NAME}/vendor/react-server-dom/`)
708+
) {
709+
const newSource = source.replace(
710+
`${PKG_NAME}/vendor/react-server-dom`,
711+
'react-server-dom-webpack',
712+
)
713+
const resolved = await this.resolve(newSource, importer, {
714+
...options,
715+
skipSelf: true,
716+
})
717+
return resolved
718+
}
719+
},
727720
},
728721
},
729722
{

0 commit comments

Comments
 (0)