@@ -238,6 +238,12 @@ export type RscPluginOptions = {
238238 /** server chunk which includes a corresponding client reference proxy module */
239239 serverChunk : string
240240 } ) => string | undefined
241+
242+ /**
243+ * Controls whether CSS links use React's `precedence` attribute.
244+ * @default true
245+ */
246+ cssLinkPrecedence ?: boolean
241247}
242248
243249export type PluginApi = {
@@ -1014,6 +1020,7 @@ export function createRpcClient(params) {
10141020 const manifest : AssetsManifest = {
10151021 bootstrapScriptContent : `import(${ serializeValueWithRuntime ( entryUrl ) } )` ,
10161022 clientReferenceDeps : { } ,
1023+ cssLinkPrecedence : rscPluginOptions . cssLinkPrecedence ,
10171024 }
10181025 return `export default ${ JSON . stringify ( manifest , null , 2 ) } `
10191026 }
@@ -1087,6 +1094,7 @@ export function createRpcClient(params) {
10871094 bootstrapScriptContent,
10881095 clientReferenceDeps,
10891096 serverResources,
1097+ cssLinkPrecedence : rscPluginOptions . cssLinkPrecedence ,
10901098 }
10911099 }
10921100 } ,
@@ -1981,6 +1989,7 @@ export type AssetsManifest = {
19811989 bootstrapScriptContent : string | RuntimeAsset
19821990 clientReferenceDeps : Record < string , AssetDeps >
19831991 serverResources ?: Record < string , Pick < AssetDeps , 'css' > >
1992+ cssLinkPrecedence ?: boolean
19841993}
19851994
19861995export type AssetDeps = {
@@ -1992,6 +2001,7 @@ export type ResolvedAssetsManifest = {
19922001 bootstrapScriptContent : string
19932002 clientReferenceDeps : Record < string , ResolvedAssetDeps >
19942003 serverResources ?: Record < string , Pick < ResolvedAssetDeps , 'css' > >
2004+ cssLinkPrecedence ?: boolean
19952005}
19962006
19972007export type ResolvedAssetDeps = {
@@ -2060,7 +2070,10 @@ function collectAssetDepsInner(
20602070//
20612071
20622072function vitePluginRscCss (
2063- rscCssOptions : Pick < RscPluginOptions , 'rscCssTransform' > = { } ,
2073+ rscCssOptions : Pick <
2074+ RscPluginOptions ,
2075+ 'rscCssTransform' | 'cssLinkPrecedence'
2076+ > = { } ,
20642077 manager : RscPluginManager ,
20652078) : Plugin [ ] {
20662079 function hasSpecialCssQuery ( id : string ) : boolean {
@@ -2320,6 +2333,7 @@ function vitePluginRscCss(
23202333 return generateResourcesCode (
23212334 serializeValueWithRuntime ( deps ) ,
23222335 manager ,
2336+ { cssLinkPrecedence : rscCssOptions . cssLinkPrecedence } ,
23232337 )
23242338 } else {
23252339 const key = manager . toRelativeId ( importer )
@@ -2331,6 +2345,7 @@ function vitePluginRscCss(
23312345 key ,
23322346 ) } ]`,
23332347 manager ,
2348+ { cssLinkPrecedence : rscCssOptions . cssLinkPrecedence } ,
23342349 ) }
23352350 `
23362351 }
@@ -2370,19 +2385,25 @@ export default function RemoveDuplicateServerCss() {
23702385 ]
23712386}
23722387
2373- function generateResourcesCode ( depsCode : string , manager : RscPluginManager ) {
2388+ function generateResourcesCode (
2389+ depsCode : string ,
2390+ manager : RscPluginManager ,
2391+ options : { cssLinkPrecedence ?: boolean } = { } ,
2392+ ) {
2393+ const usePrecedence = options . cssLinkPrecedence !== false
23742394 const ResourcesFn = (
23752395 React : typeof import ( 'react' ) ,
23762396 deps : ResolvedAssetDeps ,
23772397 RemoveDuplicateServerCss ?: React . FC ,
2398+ precedence ?: string ,
23782399 ) => {
23792400 return function Resources ( ) {
23802401 return React . createElement ( React . Fragment , null , [
23812402 ...deps . css . map ( ( href : string ) =>
23822403 React . createElement ( 'link' , {
23832404 key : 'css:' + href ,
23842405 rel : 'stylesheet' ,
2385- precedence : 'vite-rsc/importer-resources' ,
2406+ ... ( precedence ? { precedence } : { } ) ,
23862407 href : href ,
23872408 'data-rsc-css-href' : href ,
23882409 } ) ,
@@ -2408,6 +2429,7 @@ export const Resources = (${ResourcesFn.toString()})(
24082429 __vite_rsc_react__,
24092430 ${ depsCode } ,
24102431 RemoveDuplicateServerCss,
2432+ ${ usePrecedence ? `"vite-rsc/importer-resources"` : `undefined` } ,
24112433);
24122434`
24132435}
0 commit comments