@@ -5909,61 +5909,7 @@ func (c *linkerContext) generateChunkCSS(chunkIndex int, chunkWaitGroup *sync.Wa
59095909 rules = []css_ast.Rule {{Data : & css_ast.RAtLayer {Names : layers }}}
59105910 }
59115911
5912- for i := len (entry .conditions ) - 1 ; i >= 0 ; i -- {
5913- conditions := entry .conditions [i ]
5914-
5915- // Generate "@layer" wrappers. Note that empty "@layer" rules still have
5916- // a side effect (they set the layer order) so they cannot be removed.
5917- for _ , t := range conditions .Layers {
5918- if len (rules ) == 0 {
5919- if t .Children == nil {
5920- // Omit an empty "@layer {}" entirely
5921- continue
5922- } else {
5923- // Generate "@layer foo;" instead of "@layer foo {}"
5924- rules = nil
5925- }
5926- }
5927- var prelude []css_ast.Token
5928- if t .Children != nil {
5929- prelude = * t .Children
5930- }
5931- prelude , ast .ImportRecords = css_ast .CloneTokensWithImportRecords (prelude , entry .conditionImportRecords , nil , ast .ImportRecords )
5932- rules = []css_ast.Rule {{Data : & css_ast.RKnownAt {
5933- AtToken : "layer" ,
5934- Prelude : prelude ,
5935- Rules : rules ,
5936- }}}
5937- }
5938-
5939- // Generate "@supports" wrappers. This is not done if the rule block is
5940- // empty because empty "@supports" rules have no effect.
5941- if len (rules ) > 0 {
5942- for _ , t := range conditions .Supports {
5943- t .Kind = css_lexer .TOpenParen
5944- t .Text = "("
5945- var prelude []css_ast.Token
5946- prelude , ast .ImportRecords = css_ast .CloneTokensWithImportRecords ([]css_ast.Token {t }, entry .conditionImportRecords , nil , ast .ImportRecords )
5947- rules = []css_ast.Rule {{Data : & css_ast.RKnownAt {
5948- AtToken : "supports" ,
5949- Prelude : prelude ,
5950- Rules : rules ,
5951- }}}
5952- }
5953- }
5954-
5955- // Generate "@media" wrappers. This is not done if the rule block is
5956- // empty because empty "@media" rules have no effect.
5957- if len (rules ) > 0 && len (conditions .Media ) > 0 {
5958- var prelude []css_ast.Token
5959- prelude , ast .ImportRecords = css_ast .CloneTokensWithImportRecords (conditions .Media , entry .conditionImportRecords , nil , ast .ImportRecords )
5960- rules = []css_ast.Rule {{Data : & css_ast.RKnownAt {
5961- AtToken : "media" ,
5962- Prelude : prelude ,
5963- Rules : rules ,
5964- }}}
5965- }
5966- }
5912+ rules , ast .ImportRecords = wrapRulesWithConditions (rules , ast .ImportRecords , entry .conditions , entry .conditionImportRecords )
59675913
59685914 // Remove top-level duplicate rules across files
59695915 if c .options .MinifySyntax {
@@ -6253,6 +6199,69 @@ func (c *linkerContext) generateChunkCSS(chunkIndex int, chunkWaitGroup *sync.Wa
62536199 chunkWaitGroup .Done ()
62546200}
62556201
6202+ func wrapRulesWithConditions (
6203+ rules []css_ast.Rule , importRecords []ast.ImportRecord ,
6204+ conditions []css_ast.ImportConditions , conditionImportRecords []ast.ImportRecord ,
6205+ ) ([]css_ast.Rule , []ast.ImportRecord ) {
6206+ for i := len (conditions ) - 1 ; i >= 0 ; i -- {
6207+ item := conditions [i ]
6208+
6209+ // Generate "@layer" wrappers. Note that empty "@layer" rules still have
6210+ // a side effect (they set the layer order) so they cannot be removed.
6211+ for _ , t := range item .Layers {
6212+ if len (rules ) == 0 {
6213+ if t .Children == nil {
6214+ // Omit an empty "@layer {}" entirely
6215+ continue
6216+ } else {
6217+ // Generate "@layer foo;" instead of "@layer foo {}"
6218+ rules = nil
6219+ }
6220+ }
6221+ var prelude []css_ast.Token
6222+ if t .Children != nil {
6223+ prelude = * t .Children
6224+ }
6225+ prelude , importRecords = css_ast .CloneTokensWithImportRecords (prelude , conditionImportRecords , nil , importRecords )
6226+ rules = []css_ast.Rule {{Data : & css_ast.RKnownAt {
6227+ AtToken : "layer" ,
6228+ Prelude : prelude ,
6229+ Rules : rules ,
6230+ }}}
6231+ }
6232+
6233+ // Generate "@supports" wrappers. This is not done if the rule block is
6234+ // empty because empty "@supports" rules have no effect.
6235+ if len (rules ) > 0 {
6236+ for _ , t := range item .Supports {
6237+ t .Kind = css_lexer .TOpenParen
6238+ t .Text = "("
6239+ var prelude []css_ast.Token
6240+ prelude , importRecords = css_ast .CloneTokensWithImportRecords ([]css_ast.Token {t }, conditionImportRecords , nil , importRecords )
6241+ rules = []css_ast.Rule {{Data : & css_ast.RKnownAt {
6242+ AtToken : "supports" ,
6243+ Prelude : prelude ,
6244+ Rules : rules ,
6245+ }}}
6246+ }
6247+ }
6248+
6249+ // Generate "@media" wrappers. This is not done if the rule block is
6250+ // empty because empty "@media" rules have no effect.
6251+ if len (rules ) > 0 && len (item .Media ) > 0 {
6252+ var prelude []css_ast.Token
6253+ prelude , importRecords = css_ast .CloneTokensWithImportRecords (item .Media , conditionImportRecords , nil , importRecords )
6254+ rules = []css_ast.Rule {{Data : & css_ast.RKnownAt {
6255+ AtToken : "media" ,
6256+ Prelude : prelude ,
6257+ Rules : rules ,
6258+ }}}
6259+ }
6260+ }
6261+
6262+ return rules , importRecords
6263+ }
6264+
62566265type legalCommentEntry struct {
62576266 sourceIndex uint32
62586267 comments []string
0 commit comments