@@ -104,6 +104,7 @@ const commonjsProxyRE = /\?commonjs-proxy/
104104const inlineRE = / ( \? | & ) i n l i n e \b /
105105const inlineCSSRE = / ( \? | & ) i n l i n e - c s s \b /
106106const usedRE = / ( \? | & ) u s e d \b /
107+ const varRE = / ^ v a r \( / i
107108
108109const enum PreprocessLang {
109110 less = 'less' ,
@@ -980,7 +981,7 @@ export const cssUrlRE =
980981export const cssDataUriRE =
981982 / (?< = ^ | [ ^ \w \- \u0080 - \uffff ] ) d a t a - u r i \( \s * ( ' [ ^ ' ] + ' | " [ ^ " ] + " | [ ^ ' " ) ] + ) \s * \) /
982983export const importCssRE = / @ i m p o r t ( ' [ ^ ' ] + \. c s s ' | " [ ^ " ] + \. c s s " | [ ^ ' " ) ] + \. c s s ) /
983- const cssImageSetRE = / i m a g e - s e t \( ( [ ^ ) ] + ) \ )/
984+ const cssImageSetRE = / (?< = i m a g e - s e t \( ) ( (?: [ \w \- ] + \( [ ^ \) ] * \) | [ ^ ) ] ) * ) (? = \) ) /
984985
985986const UrlRewritePostcssPlugin : PostCSS . PluginCreator < {
986987 replacer : CssUrlReplacer
@@ -1001,7 +1002,9 @@ const UrlRewritePostcssPlugin: PostCSS.PluginCreator<{
10011002 const importer = declaration . source ?. input . file
10021003 return opts . replacer ( rawUrl , importer )
10031004 }
1004- const rewriterToUse = isCssUrl ? rewriteCssUrls : rewriteCssImageSet
1005+ const rewriterToUse = isCssImageSet
1006+ ? rewriteCssImageSet
1007+ : rewriteCssUrls
10051008 promises . push (
10061009 rewriterToUse ( declaration . value , replacerForDeclaration ) . then (
10071010 ( url ) => {
@@ -1054,11 +1057,15 @@ function rewriteCssImageSet(
10541057 replacer : CssUrlReplacer
10551058) : Promise < string > {
10561059 return asyncReplace ( css , cssImageSetRE , async ( match ) => {
1057- const [ matched , rawUrl ] = match
1058- const url = await processSrcSet ( rawUrl , ( { url } ) =>
1059- doUrlReplace ( url , matched , replacer )
1060- )
1061- return `image-set(${ url } )`
1060+ const [ , rawUrl ] = match
1061+ const url = await processSrcSet ( rawUrl , async ( { url } ) => {
1062+ // the url maybe url(...)
1063+ if ( cssUrlRE . test ( url ) ) {
1064+ return await rewriteCssUrls ( url , replacer )
1065+ }
1066+ return await doUrlReplace ( url , url , replacer )
1067+ } )
1068+ return url
10621069 } )
10631070}
10641071async function doUrlReplace (
@@ -1073,7 +1080,13 @@ async function doUrlReplace(
10731080 wrap = first
10741081 rawUrl = rawUrl . slice ( 1 , - 1 )
10751082 }
1076- if ( isExternalUrl ( rawUrl ) || isDataUrl ( rawUrl ) || rawUrl . startsWith ( '#' ) ) {
1083+
1084+ if (
1085+ isExternalUrl ( rawUrl ) ||
1086+ isDataUrl ( rawUrl ) ||
1087+ rawUrl . startsWith ( '#' ) ||
1088+ varRE . test ( rawUrl )
1089+ ) {
10771090 return matched
10781091 }
10791092
0 commit comments