Skip to content

Commit d8cfdfa

Browse files
authored
refactor(rsc): organize internal plugins (#791)
1 parent 377a273 commit d8cfdfa

File tree

2 files changed

+40
-31
lines changed

2 files changed

+40
-31
lines changed

packages/plugin-rsc/src/plugin.ts

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ import {
4848
withRollupError,
4949
} from './plugins/utils'
5050
import { createDebug } from '@hiogawa/utils'
51-
import { transformScanBuildStrip } from './plugins/scan'
51+
import { scanBuildStripPlugin } from './plugins/scan'
5252
import { validateImportPlugin } from './plugins/validate-import'
5353
import { vitePluginFindSourceMapURL } from './plugins/find-source-map-url'
5454
import { parseCssVirtual, toCssVirtual, parseIdQuery } from './plugins/shared'
@@ -90,6 +90,8 @@ function resolvePackage(name: string) {
9090
return pathToFileURL(require.resolve(name)).href
9191
}
9292

93+
export type { RscPluginManager }
94+
9395
class RscPluginManager {
9496
server!: ViteDevServer
9597
config!: ResolvedConfig
@@ -979,9 +981,23 @@ import.meta.hot.on("rsc:update", () => {
979981
return code
980982
},
981983
),
984+
...vitePluginRscMinimal(rscPluginOptions, manager),
985+
...vitePluginFindSourceMapURL(),
986+
...vitePluginRscCss(rscPluginOptions, manager),
987+
...(rscPluginOptions.validateImports !== false
988+
? [validateImportPlugin()]
989+
: []),
990+
scanBuildStripPlugin({ manager }),
991+
...cjsModuleRunnerPlugin(),
992+
...globalAsyncLocalStoragePlugin(),
993+
]
994+
}
995+
996+
// make `AsyncLocalStorage` available globally for React edge build (required for React.cache, ssr preload, etc.)
997+
// https://github.com/facebook/react/blob/f14d7f0d2597ea25da12bcf97772e8803f2a394c/packages/react-server/src/forks/ReactFlightServerConfig.dom-edge.js#L16-L19
998+
function globalAsyncLocalStoragePlugin(): Plugin[] {
999+
return [
9821000
{
983-
// make `AsyncLocalStorage` available globally for React edge build (required for React.cache, ssr preload, etc.)
984-
// https://github.com/facebook/react/blob/f14d7f0d2597ea25da12bcf97772e8803f2a394c/packages/react-server/src/forks/ReactFlightServerConfig.dom-edge.js#L16-L19
9851001
name: 'rsc:inject-async-local-storage',
9861002
transform: {
9871003
handler(code) {
@@ -1004,36 +1020,9 @@ import.meta.hot.on("rsc:update", () => {
10041020
},
10051021
},
10061022
},
1007-
...vitePluginRscMinimal(rscPluginOptions, manager),
1008-
...vitePluginFindSourceMapURL(),
1009-
...vitePluginRscCss(rscPluginOptions, manager),
1010-
...(rscPluginOptions.validateImports !== false
1011-
? [validateImportPlugin()]
1012-
: []),
1013-
scanBuildStripPlugin({ manager }),
1014-
...cjsModuleRunnerPlugin(),
10151023
]
10161024
}
10171025

1018-
// During scan build, we strip all code but imports to
1019-
// traverse module graph faster and just discover client/server references.
1020-
function scanBuildStripPlugin({
1021-
manager,
1022-
}: {
1023-
manager: RscPluginManager
1024-
}): Plugin {
1025-
return {
1026-
name: 'rsc:scan-strip',
1027-
apply: 'build',
1028-
enforce: 'post',
1029-
async transform(code, _id, _options) {
1030-
if (!manager.isScanBuild) return
1031-
const output = await transformScanBuildStrip(code)
1032-
return { code: output, map: { mappings: '' } }
1033-
},
1034-
}
1035-
}
1036-
10371026
function vitePluginUseClient(
10381027
useClientPluginOptions: Pick<
10391028
RscPluginOptions,

packages/plugin-rsc/src/plugins/scan.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,26 @@
11
import * as esModuleLexer from 'es-module-lexer'
2-
import { parseAstAsync } from 'vite'
2+
import { parseAstAsync, type Plugin } from 'vite'
33
import { walk } from 'estree-walker'
4+
import type { RscPluginManager } from '../plugin'
5+
6+
// During scan build, we strip all code but imports to
7+
// traverse module graph faster and just discover client/server references.
8+
export function scanBuildStripPlugin({
9+
manager,
10+
}: {
11+
manager: RscPluginManager
12+
}): Plugin {
13+
return {
14+
name: 'rsc:scan-strip',
15+
apply: 'build',
16+
enforce: 'post',
17+
async transform(code, _id, _options) {
18+
if (!manager.isScanBuild) return
19+
const output = await transformScanBuildStrip(code)
20+
return { code: output, map: { mappings: '' } }
21+
},
22+
}
23+
}
424

525
// https://github.com/vitejs/vite/blob/86d2e8be50be535494734f9f5f5236c61626b308/packages/vite/src/node/plugins/importMetaGlob.ts#L113
626
const importGlobRE = /\bimport\.meta\.glob(?:<\w+>)?\s*\(/g

0 commit comments

Comments
 (0)