@jesscss/core 2.0.0-alpha.4 → 2.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/lib/index.cjs +20159 -0
  2. package/lib/index.d.cts +5993 -0
  3. package/lib/index.d.cts.map +1 -0
  4. package/lib/index.d.ts +5992 -21
  5. package/lib/index.d.ts.map +1 -1
  6. package/lib/index.js +19926 -22
  7. package/lib/index.js.map +1 -1
  8. package/package.json +15 -14
  9. package/src/__tests__/define-function-record.test.ts +58 -0
  10. package/src/__tests__/define-function-simple.test.ts +55 -0
  11. package/src/__tests__/define-function-split-sequence.test.ts +547 -0
  12. package/src/__tests__/define-function-type-parity.test.ts +9 -0
  13. package/src/__tests__/define-function.test.ts +763 -0
  14. package/src/__tests__/num-operations.test.ts +91 -0
  15. package/src/__tests__/safe-parse.test.ts +374 -0
  16. package/src/context.ts +896 -0
  17. package/src/conversions.ts +282 -0
  18. package/src/debug-log.ts +29 -0
  19. package/src/define-function.ts +1006 -0
  20. package/src/deprecation.ts +67 -0
  21. package/src/globals.d.ts +26 -0
  22. package/src/index.ts +31 -0
  23. package/src/jess-error.ts +773 -0
  24. package/src/logger/deprecation-processing.ts +109 -0
  25. package/src/logger.ts +31 -0
  26. package/src/plugin.ts +292 -0
  27. package/src/tree/LOOKUP_CHAINS.md +35 -0
  28. package/src/tree/README.md +18 -0
  29. package/src/tree/__tests__/__snapshots__/extend-eval-integration.test.ts.snap +1455 -0
  30. package/src/tree/__tests__/ampersand.test.ts +382 -0
  31. package/src/tree/__tests__/at-rule.test.ts +2047 -0
  32. package/src/tree/__tests__/basic-render.test.ts +212 -0
  33. package/src/tree/__tests__/block.test.ts +40 -0
  34. package/src/tree/__tests__/call.test.ts +346 -0
  35. package/src/tree/__tests__/color.test.ts +537 -0
  36. package/src/tree/__tests__/condition.test.ts +186 -0
  37. package/src/tree/__tests__/control.test.ts +564 -0
  38. package/src/tree/__tests__/declaration.test.ts +253 -0
  39. package/src/tree/__tests__/dependency-graph.test.ts +177 -0
  40. package/src/tree/__tests__/detached-rulesets.test.ts +213 -0
  41. package/src/tree/__tests__/dimension.test.ts +236 -0
  42. package/src/tree/__tests__/expression.test.ts +73 -0
  43. package/src/tree/__tests__/ext-node.test.ts +31 -0
  44. package/src/tree/__tests__/extend-eval-integration.test.ts +1033 -0
  45. package/src/tree/__tests__/extend-import-style.test.ts +929 -0
  46. package/src/tree/__tests__/extend-less-fixtures.test.ts +851 -0
  47. package/src/tree/__tests__/extend-list.test.ts +31 -0
  48. package/src/tree/__tests__/extend-roots.test.ts +1045 -0
  49. package/src/tree/__tests__/extend-rules.test.ts +740 -0
  50. package/src/tree/__tests__/func.test.ts +171 -0
  51. package/src/tree/__tests__/import-js.test.ts +33 -0
  52. package/src/tree/__tests__/import-style-test-helpers.ts +56 -0
  53. package/src/tree/__tests__/import-style.test.ts +1967 -0
  54. package/src/tree/__tests__/interpolated-reference.test.ts +44 -0
  55. package/src/tree/__tests__/interpolated.test.ts +41 -0
  56. package/src/tree/__tests__/list.test.ts +177 -0
  57. package/src/tree/__tests__/log.test.ts +83 -0
  58. package/src/tree/__tests__/mixin-recursion.test.ts +639 -0
  59. package/src/tree/__tests__/mixin.test.ts +2171 -0
  60. package/src/tree/__tests__/negative.test.ts +45 -0
  61. package/src/tree/__tests__/nesting-collapse.test.ts +519 -0
  62. package/src/tree/__tests__/node-flags-perf.test.ts +195 -0
  63. package/src/tree/__tests__/node-flags.test.ts +410 -0
  64. package/src/tree/__tests__/node-graph.test.ts +598 -0
  65. package/src/tree/__tests__/node-mutation.test.ts +182 -0
  66. package/src/tree/__tests__/operation.test.ts +18 -0
  67. package/src/tree/__tests__/paren.test.ts +90 -0
  68. package/src/tree/__tests__/preserve-mode-output.test.ts +50 -0
  69. package/src/tree/__tests__/quoted.test.ts +72 -0
  70. package/src/tree/__tests__/range.test.ts +59 -0
  71. package/src/tree/__tests__/reference.test.ts +743 -0
  72. package/src/tree/__tests__/rest.test.ts +29 -0
  73. package/src/tree/__tests__/rules-raw.test.ts +14 -0
  74. package/src/tree/__tests__/rules.test.ts +1271 -0
  75. package/src/tree/__tests__/ruleset.test.ts +597 -0
  76. package/src/tree/__tests__/selector-attr.test.ts +50 -0
  77. package/src/tree/__tests__/selector-basic.test.ts +44 -0
  78. package/src/tree/__tests__/selector-capture.test.ts +22 -0
  79. package/src/tree/__tests__/selector-complex.test.ts +120 -0
  80. package/src/tree/__tests__/selector-compound.test.ts +74 -0
  81. package/src/tree/__tests__/selector-interpolated.test.ts +50 -0
  82. package/src/tree/__tests__/selector-list.test.ts +59 -0
  83. package/src/tree/__tests__/selector-pseudo.test.ts +23 -0
  84. package/src/tree/__tests__/selector.test.ts +182 -0
  85. package/src/tree/__tests__/sequence.test.ts +226 -0
  86. package/src/tree/__tests__/serialize-types.test.ts +529 -0
  87. package/src/tree/__tests__/spaced.test.ts +8 -0
  88. package/src/tree/__tests__/url.test.ts +72 -0
  89. package/src/tree/__tests__/var-declaration.test.ts +90 -0
  90. package/src/tree/ampersand.ts +538 -0
  91. package/src/tree/any.ts +169 -0
  92. package/src/tree/at-rule.ts +760 -0
  93. package/src/tree/block.ts +72 -0
  94. package/src/tree/bool.ts +46 -0
  95. package/src/tree/call.ts +593 -0
  96. package/src/tree/collection.ts +52 -0
  97. package/src/tree/color.ts +629 -0
  98. package/src/tree/combinator.ts +30 -0
  99. package/src/tree/comment.ts +36 -0
  100. package/src/tree/condition.ts +194 -0
  101. package/src/tree/control.ts +452 -0
  102. package/src/tree/declaration-custom.ts +56 -0
  103. package/src/tree/declaration-var.ts +87 -0
  104. package/src/tree/declaration.ts +742 -0
  105. package/src/tree/default-guard.ts +35 -0
  106. package/src/tree/dimension.ts +392 -0
  107. package/src/tree/expression.ts +97 -0
  108. package/src/tree/extend-list.ts +51 -0
  109. package/src/tree/extend.ts +391 -0
  110. package/src/tree/function.ts +254 -0
  111. package/src/tree/import-js.ts +130 -0
  112. package/src/tree/import-style.ts +875 -0
  113. package/{lib/tree/index.js → src/tree/index.ts} +49 -22
  114. package/src/tree/interpolated.ts +346 -0
  115. package/src/tree/js-array.ts +21 -0
  116. package/src/tree/js-expr.ts +50 -0
  117. package/src/tree/js-function.ts +31 -0
  118. package/src/tree/js-object.ts +22 -0
  119. package/src/tree/list.ts +415 -0
  120. package/src/tree/log.ts +89 -0
  121. package/src/tree/mixin.ts +331 -0
  122. package/src/tree/negative.ts +58 -0
  123. package/src/tree/nil.ts +57 -0
  124. package/src/tree/node-base.ts +1716 -0
  125. package/src/tree/node-type.ts +122 -0
  126. package/src/tree/node.ts +118 -0
  127. package/src/tree/number.ts +54 -0
  128. package/src/tree/operation.ts +187 -0
  129. package/src/tree/paren.ts +132 -0
  130. package/src/tree/query-condition.ts +47 -0
  131. package/src/tree/quoted.ts +119 -0
  132. package/src/tree/range.ts +101 -0
  133. package/src/tree/reference.ts +1099 -0
  134. package/src/tree/rest.ts +55 -0
  135. package/src/tree/rules-raw.ts +52 -0
  136. package/src/tree/rules.ts +2896 -0
  137. package/src/tree/ruleset.ts +1217 -0
  138. package/src/tree/selector-attr.ts +172 -0
  139. package/src/tree/selector-basic.ts +75 -0
  140. package/src/tree/selector-capture.ts +85 -0
  141. package/src/tree/selector-complex.ts +189 -0
  142. package/src/tree/selector-compound.ts +205 -0
  143. package/src/tree/selector-interpolated.ts +95 -0
  144. package/src/tree/selector-list.ts +245 -0
  145. package/src/tree/selector-pseudo.ts +173 -0
  146. package/src/tree/selector-simple.ts +10 -0
  147. package/src/tree/selector.ts +152 -0
  148. package/src/tree/sequence.ts +463 -0
  149. package/src/tree/tree.ts +130 -0
  150. package/src/tree/url.ts +95 -0
  151. package/src/tree/util/EXTEND_ARCHITECTURE_ANALYSIS.md +215 -0
  152. package/src/tree/util/EXTEND_AUDIT.md +233 -0
  153. package/src/tree/util/EXTEND_BASELINE.md +64 -0
  154. package/src/tree/util/EXTEND_CALL_GRAPH_ANALYSIS.md +244 -0
  155. package/src/tree/util/EXTEND_DOCS.md +24 -0
  156. package/src/tree/util/EXTEND_FINAL_SUMMARY.md +95 -0
  157. package/src/tree/util/EXTEND_FUNCTION_AUDIT.md +1433 -0
  158. package/src/tree/util/EXTEND_OPTIMIZATION_PLAN.md +114 -0
  159. package/src/tree/util/EXTEND_REFACTORING_SUMMARY.md +152 -0
  160. package/src/tree/util/EXTEND_RULES.md +74 -0
  161. package/src/tree/util/EXTEND_UNUSED_FUNCTIONS.md +127 -0
  162. package/src/tree/util/EXTEND_UNUSED_FUNCTIONS_ANALYSIS.md +227 -0
  163. package/src/tree/util/NODE_COPY_REDUCTION_PLAN.md +12 -0
  164. package/src/tree/util/__tests__/EXTEND_TEST_INDEX.md +59 -0
  165. package/src/tree/util/__tests__/OPTIMIZATION-ANALYSIS.md +130 -0
  166. package/src/tree/util/__tests__/WALK_AND_CONSUME_DESIGN.md +138 -0
  167. package/src/tree/util/__tests__/_archive/2026-02-09__OPTIMIZATION-ANALYSIS.md +9 -0
  168. package/src/tree/util/__tests__/_archive/README.md +4 -0
  169. package/src/tree/util/__tests__/bitset.test.ts +142 -0
  170. package/src/tree/util/__tests__/debug-log.ts +50 -0
  171. package/src/tree/util/__tests__/extend-comment-handling.test.ts +187 -0
  172. package/src/tree/util/__tests__/extend-core-unit.test.ts +941 -0
  173. package/src/tree/util/__tests__/extend-pipeline-bench.test.ts +154 -0
  174. package/src/tree/util/__tests__/extend-pipeline-bench.ts +190 -0
  175. package/src/tree/util/__tests__/fast-reject.test.ts +377 -0
  176. package/src/tree/util/__tests__/is-node.test.ts +63 -0
  177. package/src/tree/util/__tests__/list-like.test.ts +63 -0
  178. package/src/tree/util/__tests__/outputwriter.test.ts +523 -0
  179. package/src/tree/util/__tests__/print.test.ts +183 -0
  180. package/src/tree/util/__tests__/process-extends.test.ts +226 -0
  181. package/src/tree/util/__tests__/process-leading-is.test.ts +205 -0
  182. package/src/tree/util/__tests__/recursion-helper.test.ts +184 -0
  183. package/src/tree/util/__tests__/selector-match-unit.test.ts +1427 -0
  184. package/src/tree/util/__tests__/sourcemap.test.ts +117 -0
  185. package/src/tree/util/ampersand-template.ts +9 -0
  186. package/src/tree/util/bitset.ts +194 -0
  187. package/src/tree/util/calculate.ts +11 -0
  188. package/src/tree/util/cast.ts +89 -0
  189. package/src/tree/util/cloning.ts +8 -0
  190. package/src/tree/util/collections.ts +299 -0
  191. package/src/tree/util/compare.ts +90 -0
  192. package/src/tree/util/cursor.ts +171 -0
  193. package/src/tree/util/extend-core.ts +2139 -0
  194. package/src/tree/util/extend-roots.ts +1108 -0
  195. package/src/tree/util/field-helpers.ts +354 -0
  196. package/src/tree/util/is-node.ts +43 -0
  197. package/src/tree/util/list-like.ts +93 -0
  198. package/src/tree/util/mixin-instance-primitives.ts +2020 -0
  199. package/src/tree/util/print.ts +303 -0
  200. package/src/tree/util/process-leading-is.ts +421 -0
  201. package/src/tree/util/recursion-helper.ts +54 -0
  202. package/src/tree/util/regex.ts +2 -0
  203. package/src/tree/util/registry-utils.ts +1953 -0
  204. package/src/tree/util/ruleset-trace.ts +17 -0
  205. package/src/tree/util/scoped-body-eval.ts +320 -0
  206. package/src/tree/util/selector-match-core.ts +2005 -0
  207. package/src/tree/util/selector-utils.ts +757 -0
  208. package/src/tree/util/serialize-helper.ts +535 -0
  209. package/src/tree/util/serialize-types.ts +318 -0
  210. package/src/tree/util/should-operate.ts +78 -0
  211. package/src/tree/util/sourcemap.ts +37 -0
  212. package/src/types/config.ts +247 -0
  213. package/src/types/index.ts +12 -0
  214. package/{lib/types/modes.d.ts → src/types/modes.ts} +2 -1
  215. package/src/types.d.ts +9 -0
  216. package/src/types.ts +68 -0
  217. package/src/use-webpack-resolver.ts +56 -0
  218. package/src/visitor/__tests__/visitor.test.ts +136 -0
  219. package/src/visitor/index.ts +263 -0
  220. package/{lib/visitor/less-visitor.js → src/visitor/less-visitor.ts} +3 -2
  221. package/lib/context.d.ts +0 -352
  222. package/lib/context.d.ts.map +0 -1
  223. package/lib/context.js +0 -636
  224. package/lib/context.js.map +0 -1
  225. package/lib/conversions.d.ts +0 -73
  226. package/lib/conversions.d.ts.map +0 -1
  227. package/lib/conversions.js +0 -253
  228. package/lib/conversions.js.map +0 -1
  229. package/lib/debug-log.d.ts +0 -2
  230. package/lib/debug-log.d.ts.map +0 -1
  231. package/lib/debug-log.js +0 -27
  232. package/lib/debug-log.js.map +0 -1
  233. package/lib/define-function.d.ts +0 -587
  234. package/lib/define-function.d.ts.map +0 -1
  235. package/lib/define-function.js +0 -726
  236. package/lib/define-function.js.map +0 -1
  237. package/lib/deprecation.d.ts +0 -34
  238. package/lib/deprecation.d.ts.map +0 -1
  239. package/lib/deprecation.js +0 -57
  240. package/lib/deprecation.js.map +0 -1
  241. package/lib/jess-error.d.ts +0 -343
  242. package/lib/jess-error.d.ts.map +0 -1
  243. package/lib/jess-error.js +0 -508
  244. package/lib/jess-error.js.map +0 -1
  245. package/lib/logger/deprecation-processing.d.ts +0 -41
  246. package/lib/logger/deprecation-processing.d.ts.map +0 -1
  247. package/lib/logger/deprecation-processing.js +0 -81
  248. package/lib/logger/deprecation-processing.js.map +0 -1
  249. package/lib/logger.d.ts +0 -10
  250. package/lib/logger.d.ts.map +0 -1
  251. package/lib/logger.js +0 -20
  252. package/lib/logger.js.map +0 -1
  253. package/lib/plugin.d.ts +0 -94
  254. package/lib/plugin.d.ts.map +0 -1
  255. package/lib/plugin.js +0 -174
  256. package/lib/plugin.js.map +0 -1
  257. package/lib/tree/ampersand.d.ts +0 -94
  258. package/lib/tree/ampersand.d.ts.map +0 -1
  259. package/lib/tree/ampersand.js +0 -269
  260. package/lib/tree/ampersand.js.map +0 -1
  261. package/lib/tree/any.d.ts +0 -58
  262. package/lib/tree/any.d.ts.map +0 -1
  263. package/lib/tree/any.js +0 -104
  264. package/lib/tree/any.js.map +0 -1
  265. package/lib/tree/at-rule.d.ts +0 -53
  266. package/lib/tree/at-rule.d.ts.map +0 -1
  267. package/lib/tree/at-rule.js +0 -503
  268. package/lib/tree/at-rule.js.map +0 -1
  269. package/lib/tree/block.d.ts +0 -22
  270. package/lib/tree/block.d.ts.map +0 -1
  271. package/lib/tree/block.js +0 -24
  272. package/lib/tree/block.js.map +0 -1
  273. package/lib/tree/bool.d.ts +0 -18
  274. package/lib/tree/bool.d.ts.map +0 -1
  275. package/lib/tree/bool.js +0 -28
  276. package/lib/tree/bool.js.map +0 -1
  277. package/lib/tree/call.d.ts +0 -66
  278. package/lib/tree/call.d.ts.map +0 -1
  279. package/lib/tree/call.js +0 -306
  280. package/lib/tree/call.js.map +0 -1
  281. package/lib/tree/collection.d.ts +0 -30
  282. package/lib/tree/collection.d.ts.map +0 -1
  283. package/lib/tree/collection.js +0 -37
  284. package/lib/tree/collection.js.map +0 -1
  285. package/lib/tree/color.d.ts +0 -101
  286. package/lib/tree/color.d.ts.map +0 -1
  287. package/lib/tree/color.js +0 -513
  288. package/lib/tree/color.js.map +0 -1
  289. package/lib/tree/combinator.d.ts +0 -13
  290. package/lib/tree/combinator.d.ts.map +0 -1
  291. package/lib/tree/combinator.js +0 -12
  292. package/lib/tree/combinator.js.map +0 -1
  293. package/lib/tree/comment.d.ts +0 -20
  294. package/lib/tree/comment.d.ts.map +0 -1
  295. package/lib/tree/comment.js +0 -19
  296. package/lib/tree/comment.js.map +0 -1
  297. package/lib/tree/condition.d.ts +0 -31
  298. package/lib/tree/condition.d.ts.map +0 -1
  299. package/lib/tree/condition.js +0 -103
  300. package/lib/tree/condition.js.map +0 -1
  301. package/lib/tree/control.d.ts +0 -104
  302. package/lib/tree/control.d.ts.map +0 -1
  303. package/lib/tree/control.js +0 -430
  304. package/lib/tree/control.js.map +0 -1
  305. package/lib/tree/declaration-custom.d.ts +0 -18
  306. package/lib/tree/declaration-custom.d.ts.map +0 -1
  307. package/lib/tree/declaration-custom.js +0 -24
  308. package/lib/tree/declaration-custom.js.map +0 -1
  309. package/lib/tree/declaration-var.d.ts +0 -35
  310. package/lib/tree/declaration-var.d.ts.map +0 -1
  311. package/lib/tree/declaration-var.js +0 -63
  312. package/lib/tree/declaration-var.js.map +0 -1
  313. package/lib/tree/declaration.d.ts +0 -78
  314. package/lib/tree/declaration.d.ts.map +0 -1
  315. package/lib/tree/declaration.js +0 -286
  316. package/lib/tree/declaration.js.map +0 -1
  317. package/lib/tree/default-guard.d.ts +0 -15
  318. package/lib/tree/default-guard.d.ts.map +0 -1
  319. package/lib/tree/default-guard.js +0 -19
  320. package/lib/tree/default-guard.js.map +0 -1
  321. package/lib/tree/dimension.d.ts +0 -34
  322. package/lib/tree/dimension.d.ts.map +0 -1
  323. package/lib/tree/dimension.js +0 -294
  324. package/lib/tree/dimension.js.map +0 -1
  325. package/lib/tree/expression.d.ts +0 -25
  326. package/lib/tree/expression.d.ts.map +0 -1
  327. package/lib/tree/expression.js +0 -32
  328. package/lib/tree/expression.js.map +0 -1
  329. package/lib/tree/extend-list.d.ts +0 -23
  330. package/lib/tree/extend-list.d.ts.map +0 -1
  331. package/lib/tree/extend-list.js +0 -23
  332. package/lib/tree/extend-list.js.map +0 -1
  333. package/lib/tree/extend.d.ts +0 -47
  334. package/lib/tree/extend.d.ts.map +0 -1
  335. package/lib/tree/extend.js +0 -296
  336. package/lib/tree/extend.js.map +0 -1
  337. package/lib/tree/function.d.ts +0 -48
  338. package/lib/tree/function.d.ts.map +0 -1
  339. package/lib/tree/function.js +0 -74
  340. package/lib/tree/function.js.map +0 -1
  341. package/lib/tree/import-js.d.ts +0 -35
  342. package/lib/tree/import-js.d.ts.map +0 -1
  343. package/lib/tree/import-js.js +0 -45
  344. package/lib/tree/import-js.js.map +0 -1
  345. package/lib/tree/import-style.d.ts +0 -156
  346. package/lib/tree/import-style.d.ts.map +0 -1
  347. package/lib/tree/import-style.js +0 -566
  348. package/lib/tree/import-style.js.map +0 -1
  349. package/lib/tree/index.d.ts +0 -71
  350. package/lib/tree/index.d.ts.map +0 -1
  351. package/lib/tree/index.js.map +0 -1
  352. package/lib/tree/interpolated-reference.d.ts +0 -24
  353. package/lib/tree/interpolated-reference.d.ts.map +0 -1
  354. package/lib/tree/interpolated-reference.js +0 -37
  355. package/lib/tree/interpolated-reference.js.map +0 -1
  356. package/lib/tree/interpolated.d.ts +0 -62
  357. package/lib/tree/interpolated.d.ts.map +0 -1
  358. package/lib/tree/interpolated.js +0 -204
  359. package/lib/tree/interpolated.js.map +0 -1
  360. package/lib/tree/js-array.d.ts +0 -10
  361. package/lib/tree/js-array.d.ts.map +0 -1
  362. package/lib/tree/js-array.js +0 -10
  363. package/lib/tree/js-array.js.map +0 -1
  364. package/lib/tree/js-expr.d.ts +0 -23
  365. package/lib/tree/js-expr.d.ts.map +0 -1
  366. package/lib/tree/js-expr.js +0 -28
  367. package/lib/tree/js-expr.js.map +0 -1
  368. package/lib/tree/js-function.d.ts +0 -20
  369. package/lib/tree/js-function.d.ts.map +0 -1
  370. package/lib/tree/js-function.js +0 -16
  371. package/lib/tree/js-function.js.map +0 -1
  372. package/lib/tree/js-object.d.ts +0 -10
  373. package/lib/tree/js-object.d.ts.map +0 -1
  374. package/lib/tree/js-object.js +0 -10
  375. package/lib/tree/js-object.js.map +0 -1
  376. package/lib/tree/list.d.ts +0 -38
  377. package/lib/tree/list.d.ts.map +0 -1
  378. package/lib/tree/list.js +0 -83
  379. package/lib/tree/list.js.map +0 -1
  380. package/lib/tree/log.d.ts +0 -29
  381. package/lib/tree/log.d.ts.map +0 -1
  382. package/lib/tree/log.js +0 -56
  383. package/lib/tree/log.js.map +0 -1
  384. package/lib/tree/mixin.d.ts +0 -87
  385. package/lib/tree/mixin.d.ts.map +0 -1
  386. package/lib/tree/mixin.js +0 -112
  387. package/lib/tree/mixin.js.map +0 -1
  388. package/lib/tree/negative.d.ts +0 -17
  389. package/lib/tree/negative.d.ts.map +0 -1
  390. package/lib/tree/negative.js +0 -22
  391. package/lib/tree/negative.js.map +0 -1
  392. package/lib/tree/nil.d.ts +0 -30
  393. package/lib/tree/nil.d.ts.map +0 -1
  394. package/lib/tree/nil.js +0 -35
  395. package/lib/tree/nil.js.map +0 -1
  396. package/lib/tree/node-base.d.ts +0 -361
  397. package/lib/tree/node-base.d.ts.map +0 -1
  398. package/lib/tree/node-base.js +0 -930
  399. package/lib/tree/node-base.js.map +0 -1
  400. package/lib/tree/node.d.ts +0 -10
  401. package/lib/tree/node.d.ts.map +0 -1
  402. package/lib/tree/node.js +0 -45
  403. package/lib/tree/node.js.map +0 -1
  404. package/lib/tree/number.d.ts +0 -21
  405. package/lib/tree/number.d.ts.map +0 -1
  406. package/lib/tree/number.js +0 -27
  407. package/lib/tree/number.js.map +0 -1
  408. package/lib/tree/operation.d.ts +0 -26
  409. package/lib/tree/operation.d.ts.map +0 -1
  410. package/lib/tree/operation.js +0 -103
  411. package/lib/tree/operation.js.map +0 -1
  412. package/lib/tree/paren.d.ts +0 -19
  413. package/lib/tree/paren.d.ts.map +0 -1
  414. package/lib/tree/paren.js +0 -92
  415. package/lib/tree/paren.js.map +0 -1
  416. package/lib/tree/query-condition.d.ts +0 -17
  417. package/lib/tree/query-condition.d.ts.map +0 -1
  418. package/lib/tree/query-condition.js +0 -39
  419. package/lib/tree/query-condition.js.map +0 -1
  420. package/lib/tree/quoted.d.ts +0 -28
  421. package/lib/tree/quoted.d.ts.map +0 -1
  422. package/lib/tree/quoted.js +0 -75
  423. package/lib/tree/quoted.js.map +0 -1
  424. package/lib/tree/range.d.ts +0 -33
  425. package/lib/tree/range.d.ts.map +0 -1
  426. package/lib/tree/range.js +0 -47
  427. package/lib/tree/range.js.map +0 -1
  428. package/lib/tree/reference.d.ts +0 -76
  429. package/lib/tree/reference.d.ts.map +0 -1
  430. package/lib/tree/reference.js +0 -521
  431. package/lib/tree/reference.js.map +0 -1
  432. package/lib/tree/rest.d.ts +0 -15
  433. package/lib/tree/rest.d.ts.map +0 -1
  434. package/lib/tree/rest.js +0 -32
  435. package/lib/tree/rest.js.map +0 -1
  436. package/lib/tree/rules-raw.d.ts +0 -17
  437. package/lib/tree/rules-raw.d.ts.map +0 -1
  438. package/lib/tree/rules-raw.js +0 -37
  439. package/lib/tree/rules-raw.js.map +0 -1
  440. package/lib/tree/rules.d.ts +0 -262
  441. package/lib/tree/rules.d.ts.map +0 -1
  442. package/lib/tree/rules.js +0 -2359
  443. package/lib/tree/rules.js.map +0 -1
  444. package/lib/tree/ruleset.d.ts +0 -92
  445. package/lib/tree/ruleset.d.ts.map +0 -1
  446. package/lib/tree/ruleset.js +0 -528
  447. package/lib/tree/ruleset.js.map +0 -1
  448. package/lib/tree/selector-attr.d.ts +0 -31
  449. package/lib/tree/selector-attr.d.ts.map +0 -1
  450. package/lib/tree/selector-attr.js +0 -99
  451. package/lib/tree/selector-attr.js.map +0 -1
  452. package/lib/tree/selector-basic.d.ts +0 -24
  453. package/lib/tree/selector-basic.d.ts.map +0 -1
  454. package/lib/tree/selector-basic.js +0 -38
  455. package/lib/tree/selector-basic.js.map +0 -1
  456. package/lib/tree/selector-capture.d.ts +0 -23
  457. package/lib/tree/selector-capture.d.ts.map +0 -1
  458. package/lib/tree/selector-capture.js +0 -34
  459. package/lib/tree/selector-capture.js.map +0 -1
  460. package/lib/tree/selector-complex.d.ts +0 -40
  461. package/lib/tree/selector-complex.d.ts.map +0 -1
  462. package/lib/tree/selector-complex.js +0 -143
  463. package/lib/tree/selector-complex.js.map +0 -1
  464. package/lib/tree/selector-compound.d.ts +0 -16
  465. package/lib/tree/selector-compound.d.ts.map +0 -1
  466. package/lib/tree/selector-compound.js +0 -114
  467. package/lib/tree/selector-compound.js.map +0 -1
  468. package/lib/tree/selector-interpolated.d.ts +0 -23
  469. package/lib/tree/selector-interpolated.d.ts.map +0 -1
  470. package/lib/tree/selector-interpolated.js +0 -27
  471. package/lib/tree/selector-interpolated.js.map +0 -1
  472. package/lib/tree/selector-list.d.ts +0 -17
  473. package/lib/tree/selector-list.d.ts.map +0 -1
  474. package/lib/tree/selector-list.js +0 -174
  475. package/lib/tree/selector-list.js.map +0 -1
  476. package/lib/tree/selector-pseudo.d.ts +0 -42
  477. package/lib/tree/selector-pseudo.d.ts.map +0 -1
  478. package/lib/tree/selector-pseudo.js +0 -204
  479. package/lib/tree/selector-pseudo.js.map +0 -1
  480. package/lib/tree/selector-simple.d.ts +0 -5
  481. package/lib/tree/selector-simple.d.ts.map +0 -1
  482. package/lib/tree/selector-simple.js +0 -6
  483. package/lib/tree/selector-simple.js.map +0 -1
  484. package/lib/tree/selector.d.ts +0 -43
  485. package/lib/tree/selector.d.ts.map +0 -1
  486. package/lib/tree/selector.js +0 -56
  487. package/lib/tree/selector.js.map +0 -1
  488. package/lib/tree/sequence.d.ts +0 -43
  489. package/lib/tree/sequence.d.ts.map +0 -1
  490. package/lib/tree/sequence.js +0 -151
  491. package/lib/tree/sequence.js.map +0 -1
  492. package/lib/tree/tree.d.ts +0 -87
  493. package/lib/tree/tree.d.ts.map +0 -1
  494. package/lib/tree/tree.js +0 -2
  495. package/lib/tree/tree.js.map +0 -1
  496. package/lib/tree/url.d.ts +0 -18
  497. package/lib/tree/url.d.ts.map +0 -1
  498. package/lib/tree/url.js +0 -35
  499. package/lib/tree/url.js.map +0 -1
  500. package/lib/tree/util/__tests__/debug-log.d.ts +0 -1
  501. package/lib/tree/util/__tests__/debug-log.d.ts.map +0 -1
  502. package/lib/tree/util/__tests__/debug-log.js +0 -36
  503. package/lib/tree/util/__tests__/debug-log.js.map +0 -1
  504. package/lib/tree/util/calculate.d.ts +0 -3
  505. package/lib/tree/util/calculate.d.ts.map +0 -1
  506. package/lib/tree/util/calculate.js +0 -10
  507. package/lib/tree/util/calculate.js.map +0 -1
  508. package/lib/tree/util/cast.d.ts +0 -10
  509. package/lib/tree/util/cast.d.ts.map +0 -1
  510. package/lib/tree/util/cast.js +0 -87
  511. package/lib/tree/util/cast.js.map +0 -1
  512. package/lib/tree/util/cloning.d.ts +0 -4
  513. package/lib/tree/util/cloning.d.ts.map +0 -1
  514. package/lib/tree/util/cloning.js +0 -8
  515. package/lib/tree/util/cloning.js.map +0 -1
  516. package/lib/tree/util/collections.d.ts +0 -57
  517. package/lib/tree/util/collections.d.ts.map +0 -1
  518. package/lib/tree/util/collections.js +0 -136
  519. package/lib/tree/util/collections.js.map +0 -1
  520. package/lib/tree/util/compare.d.ts +0 -11
  521. package/lib/tree/util/compare.d.ts.map +0 -1
  522. package/lib/tree/util/compare.js +0 -89
  523. package/lib/tree/util/compare.js.map +0 -1
  524. package/lib/tree/util/extend-helpers.d.ts +0 -2
  525. package/lib/tree/util/extend-helpers.d.ts.map +0 -1
  526. package/lib/tree/util/extend-helpers.js +0 -2
  527. package/lib/tree/util/extend-helpers.js.map +0 -1
  528. package/lib/tree/util/extend-roots.d.ts +0 -37
  529. package/lib/tree/util/extend-roots.d.ts.map +0 -1
  530. package/lib/tree/util/extend-roots.js +0 -700
  531. package/lib/tree/util/extend-roots.js.map +0 -1
  532. package/lib/tree/util/extend-roots.old.d.ts +0 -132
  533. package/lib/tree/util/extend-roots.old.d.ts.map +0 -1
  534. package/lib/tree/util/extend-roots.old.js +0 -2272
  535. package/lib/tree/util/extend-roots.old.js.map +0 -1
  536. package/lib/tree/util/extend-trace-debug.d.ts +0 -13
  537. package/lib/tree/util/extend-trace-debug.d.ts.map +0 -1
  538. package/lib/tree/util/extend-trace-debug.js +0 -34
  539. package/lib/tree/util/extend-trace-debug.js.map +0 -1
  540. package/lib/tree/util/extend-walk.d.ts +0 -53
  541. package/lib/tree/util/extend-walk.d.ts.map +0 -1
  542. package/lib/tree/util/extend-walk.js +0 -881
  543. package/lib/tree/util/extend-walk.js.map +0 -1
  544. package/lib/tree/util/extend.d.ts +0 -218
  545. package/lib/tree/util/extend.d.ts.map +0 -1
  546. package/lib/tree/util/extend.js +0 -3182
  547. package/lib/tree/util/extend.js.map +0 -1
  548. package/lib/tree/util/find-extendable-locations.d.ts +0 -2
  549. package/lib/tree/util/find-extendable-locations.d.ts.map +0 -1
  550. package/lib/tree/util/find-extendable-locations.js +0 -2
  551. package/lib/tree/util/find-extendable-locations.js.map +0 -1
  552. package/lib/tree/util/format.d.ts +0 -20
  553. package/lib/tree/util/format.d.ts.map +0 -1
  554. package/lib/tree/util/format.js +0 -67
  555. package/lib/tree/util/format.js.map +0 -1
  556. package/lib/tree/util/is-node.d.ts +0 -13
  557. package/lib/tree/util/is-node.d.ts.map +0 -1
  558. package/lib/tree/util/is-node.js +0 -43
  559. package/lib/tree/util/is-node.js.map +0 -1
  560. package/lib/tree/util/print.d.ts +0 -80
  561. package/lib/tree/util/print.d.ts.map +0 -1
  562. package/lib/tree/util/print.js +0 -205
  563. package/lib/tree/util/print.js.map +0 -1
  564. package/lib/tree/util/process-leading-is.d.ts +0 -25
  565. package/lib/tree/util/process-leading-is.d.ts.map +0 -1
  566. package/lib/tree/util/process-leading-is.js +0 -364
  567. package/lib/tree/util/process-leading-is.js.map +0 -1
  568. package/lib/tree/util/recursion-helper.d.ts +0 -15
  569. package/lib/tree/util/recursion-helper.d.ts.map +0 -1
  570. package/lib/tree/util/recursion-helper.js +0 -43
  571. package/lib/tree/util/recursion-helper.js.map +0 -1
  572. package/lib/tree/util/regex.d.ts +0 -4
  573. package/lib/tree/util/regex.d.ts.map +0 -1
  574. package/lib/tree/util/regex.js +0 -4
  575. package/lib/tree/util/regex.js.map +0 -1
  576. package/lib/tree/util/registry-utils.d.ts +0 -192
  577. package/lib/tree/util/registry-utils.d.ts.map +0 -1
  578. package/lib/tree/util/registry-utils.js +0 -1214
  579. package/lib/tree/util/registry-utils.js.map +0 -1
  580. package/lib/tree/util/ruleset-trace.d.ts +0 -4
  581. package/lib/tree/util/ruleset-trace.d.ts.map +0 -1
  582. package/lib/tree/util/ruleset-trace.js +0 -14
  583. package/lib/tree/util/ruleset-trace.js.map +0 -1
  584. package/lib/tree/util/selector-compare.d.ts +0 -2
  585. package/lib/tree/util/selector-compare.d.ts.map +0 -1
  586. package/lib/tree/util/selector-compare.js +0 -2
  587. package/lib/tree/util/selector-compare.js.map +0 -1
  588. package/lib/tree/util/selector-match-core.d.ts +0 -184
  589. package/lib/tree/util/selector-match-core.d.ts.map +0 -1
  590. package/lib/tree/util/selector-match-core.js +0 -1603
  591. package/lib/tree/util/selector-match-core.js.map +0 -1
  592. package/lib/tree/util/selector-utils.d.ts +0 -30
  593. package/lib/tree/util/selector-utils.d.ts.map +0 -1
  594. package/lib/tree/util/selector-utils.js +0 -100
  595. package/lib/tree/util/selector-utils.js.map +0 -1
  596. package/lib/tree/util/serialize-helper.d.ts +0 -13
  597. package/lib/tree/util/serialize-helper.d.ts.map +0 -1
  598. package/lib/tree/util/serialize-helper.js +0 -387
  599. package/lib/tree/util/serialize-helper.js.map +0 -1
  600. package/lib/tree/util/serialize-types.d.ts +0 -9
  601. package/lib/tree/util/serialize-types.d.ts.map +0 -1
  602. package/lib/tree/util/serialize-types.js +0 -216
  603. package/lib/tree/util/serialize-types.js.map +0 -1
  604. package/lib/tree/util/should-operate.d.ts +0 -23
  605. package/lib/tree/util/should-operate.d.ts.map +0 -1
  606. package/lib/tree/util/should-operate.js +0 -46
  607. package/lib/tree/util/should-operate.js.map +0 -1
  608. package/lib/tree/util/sourcemap.d.ts +0 -7
  609. package/lib/tree/util/sourcemap.d.ts.map +0 -1
  610. package/lib/tree/util/sourcemap.js +0 -25
  611. package/lib/tree/util/sourcemap.js.map +0 -1
  612. package/lib/types/config.d.ts +0 -205
  613. package/lib/types/config.d.ts.map +0 -1
  614. package/lib/types/config.js +0 -2
  615. package/lib/types/config.js.map +0 -1
  616. package/lib/types/index.d.ts +0 -15
  617. package/lib/types/index.d.ts.map +0 -1
  618. package/lib/types/index.js +0 -3
  619. package/lib/types/index.js.map +0 -1
  620. package/lib/types/modes.d.ts.map +0 -1
  621. package/lib/types/modes.js +0 -2
  622. package/lib/types/modes.js.map +0 -1
  623. package/lib/types.d.ts +0 -61
  624. package/lib/types.d.ts.map +0 -1
  625. package/lib/types.js +0 -2
  626. package/lib/types.js.map +0 -1
  627. package/lib/use-webpack-resolver.d.ts +0 -9
  628. package/lib/use-webpack-resolver.d.ts.map +0 -1
  629. package/lib/use-webpack-resolver.js +0 -41
  630. package/lib/use-webpack-resolver.js.map +0 -1
  631. package/lib/visitor/index.d.ts +0 -136
  632. package/lib/visitor/index.d.ts.map +0 -1
  633. package/lib/visitor/index.js +0 -135
  634. package/lib/visitor/index.js.map +0 -1
  635. package/lib/visitor/less-visitor.d.ts +0 -7
  636. package/lib/visitor/less-visitor.d.ts.map +0 -1
  637. package/lib/visitor/less-visitor.js.map +0 -1
@@ -0,0 +1,760 @@
1
+ import { Node, defineType, F_VISIBLE, CANONICAL, isVisibleInContext, type NodeOptions, type RenderKey } from './node.js';
2
+ import { Ruleset } from './ruleset.js';
3
+ import { Any } from './any.js';
4
+ import { Rules } from './rules.js';
5
+ import type { Context } from '../context.js';
6
+ import { type FinalPrintOptions, type PrintOptions, getPrintOptions } from './util/print.js';
7
+ import { isThenable, type MaybePromise, pipe } from '@jesscss/awaitable-pipe';
8
+ import { Ampersand } from './ampersand.js';
9
+ import { isNode } from './util/is-node.js';
10
+ import { N } from './node-type.js';
11
+ import { indent, normalizeIndent, serializeRulesContainer } from './util/serialize-helper.js';
12
+ import { Interpolated } from './interpolated.js';
13
+ import { Nil } from './nil.js';
14
+ import type { Selector } from './selector.js';
15
+ import { isPreEvaluated } from './util/field-helpers.js';
16
+ import { getCurrentParentNode, getParentRuleset } from './util/selector-utils.js';
17
+
18
+ /**
19
+ * When collapseNesting/hoist wrapped at-rule rules in a single Ruleset(&),
20
+ * the real rulesets (.ma, .md, etc.) registered to the inner Rules (the wrapper
21
+ * Ruleset's rules). Register that inner Rules as a child extend root so
22
+ * processExtends can find them. Extend behavior must not depend on collapseNesting.
23
+ */
24
+ function registerInnerExtendRootIfHoisted(
25
+ wrapperRules: Rules,
26
+ context: Context,
27
+ layerName?: string
28
+ ): void {
29
+ if (wrapperRules.value.length !== 1) {
30
+ return;
31
+ }
32
+ const first = wrapperRules.value[0];
33
+ if (!isNode(first, N.Ruleset)) {
34
+ return;
35
+ }
36
+ const innerRules = first.getRules(first.renderKey);
37
+ if (!innerRules || !isNode(innerRules, N.Rules)) {
38
+ return;
39
+ }
40
+ context.extendRoots.registerRoot(innerRules, wrapperRules, { layerName });
41
+ }
42
+
43
+ function getScopeParentNode(node: Node, renderKey?: RenderKey): Node | undefined {
44
+ if (renderKey !== undefined) {
45
+ return getCurrentParentNode(node, renderKey);
46
+ }
47
+ return node.parent;
48
+ }
49
+
50
+ export type AtRuleValue = {
51
+ name: Any<'atkeyword'> | Interpolated<'atkeyword'>;
52
+ /** The prelude */
53
+ prelude?: Node;
54
+ rules?: Rules;
55
+ };
56
+
57
+ export const NESTABLE_AT_RULES = ['@media', '@supports', '@layer', '@container', '@scope'] as const;
58
+ export const ROOT_ONLY_AT_RULES = [
59
+ '@charset',
60
+ '@import',
61
+ '@namespace',
62
+ '@font-face',
63
+ '@keyframes',
64
+ '@page',
65
+ '@property',
66
+ '@counter-style',
67
+ '@viewport'
68
+ ] as const;
69
+ const COLLAPSE_PRESERVING_AT_RULES = ['@starting-style'] as const;
70
+
71
+ export type AtRuleOptions = NodeOptions;
72
+
73
+ export type AtRuleChildData = {
74
+ name: Any<'atkeyword'> | Interpolated<'atkeyword'>;
75
+ prelude: Node | undefined;
76
+ rules: Rules | undefined;
77
+ frames: (Ruleset | AtRule)[] | undefined;
78
+ };
79
+
80
+ /**
81
+ * A rule like @charset or @media
82
+ */
83
+ export interface AtRule {
84
+ type: 'AtRule';
85
+ shortType: 'atrule';
86
+ }
87
+
88
+ export class AtRule extends Node<AtRuleValue, AtRuleOptions, AtRuleChildData> {
89
+ static override childKeys = ['name', 'prelude', 'rules'] as const;
90
+
91
+ name!: Any<'atkeyword'> | Interpolated<'atkeyword'>;
92
+ prelude: Node | undefined;
93
+ rules: Rules | undefined;
94
+ declare preludeEdge: Map<RenderKey, Node | undefined> | undefined;
95
+ declare rulesEdge: Map<RenderKey, Rules | undefined> | undefined;
96
+ private frames: (Ruleset | AtRule)[] | undefined;
97
+
98
+ private _resolveRenderKey(context?: Context): RenderKey | undefined {
99
+ return context?.renderKey ?? context?.rulesContext?.renderKey ?? this.renderKey;
100
+ }
101
+
102
+ private _assignRules(rules: Rules, context: Context): void {
103
+ const renderKey = this._resolveRenderKey(context);
104
+ if (renderKey !== undefined && renderKey !== CANONICAL) {
105
+ this.rulesEdge?.delete(renderKey);
106
+ if (this.rulesEdge?.size === 0) {
107
+ this.rulesEdge = undefined;
108
+ }
109
+ }
110
+ this.rules = rules;
111
+ this.adopt(rules, context);
112
+ }
113
+
114
+ private _assignPrelude(prelude: Node, context: Context): void {
115
+ const renderKey = this._resolveRenderKey(context);
116
+ if (renderKey !== undefined && renderKey !== CANONICAL) {
117
+ this.preludeEdge?.delete(renderKey);
118
+ if (this.preludeEdge?.size === 0) {
119
+ this.preludeEdge = undefined;
120
+ }
121
+ }
122
+ this.prelude = prelude;
123
+ this.adopt(prelude, context);
124
+ }
125
+
126
+ getPrelude(renderKey?: RenderKey): Node | undefined {
127
+ return renderKey !== undefined
128
+ ? this.preludeEdge?.get(renderKey) ?? this.prelude
129
+ : this.prelude;
130
+ }
131
+
132
+ getRules(renderKey?: RenderKey): Rules | undefined {
133
+ return renderKey !== undefined
134
+ ? this.rulesEdge?.get(renderKey) ?? this.rules
135
+ : this.rules;
136
+ }
137
+
138
+ enterRules(context?: Context): Rules | undefined {
139
+ const renderKey = this._resolveRenderKey(context);
140
+ const rules = this.getRules(renderKey);
141
+ return rules?.withRenderOwner(this, renderKey, context);
142
+ }
143
+
144
+ constructor(value: AtRuleValue, options?: AtRuleOptions, location?: any, treeContext?: any) {
145
+ super(value, options, location, treeContext);
146
+ this.name = value.name;
147
+ this.prelude = value.prelude;
148
+ this.rules = value.rules;
149
+ if (this.name instanceof Node) {
150
+ this.adopt(this.name);
151
+ }
152
+ if (this.prelude instanceof Node) {
153
+ this.adopt(this.prelude);
154
+ }
155
+ if (this.rules instanceof Node) {
156
+ this.adopt(this.rules);
157
+ }
158
+ this.allowRoot = true;
159
+ }
160
+
161
+ protected _valueOf: string | undefined;
162
+
163
+ /** Used for equality comparison with other at-rules */
164
+ override valueOf() {
165
+ return (this._valueOf ??= (this.name.toString() + (this.prelude ? ' ' + this.prelude.valueOf() : '')));
166
+ }
167
+
168
+ /**
169
+ * Means: can bubble ruleset parents to children.
170
+ *
171
+ * @todo - There's no reason to make this state-aware. At-rules can't change their name.
172
+ */
173
+ isNestable() {
174
+ return NESTABLE_AT_RULES.includes(this.name.valueOf() as (typeof NESTABLE_AT_RULES)[number]);
175
+ }
176
+
177
+ /**
178
+ * For legacy collapseNesting, will push ruleset to root silently.
179
+ *
180
+ * @todo - There's no reason to make this state-aware. At-rules can't change their name.
181
+ */
182
+ isRootOnly() {
183
+ return ROOT_ONLY_AT_RULES.includes(this.name.valueOf() as (typeof ROOT_ONLY_AT_RULES)[number]);
184
+ }
185
+
186
+ isHoisted(opts: { collapseNesting?: boolean; context?: Context }) {
187
+ if (
188
+ this.hoistToRoot === undefined
189
+ && opts.collapseNesting
190
+ && COLLAPSE_PRESERVING_AT_RULES.includes(this.name.valueOf() as (typeof COLLAPSE_PRESERVING_AT_RULES)[number])
191
+ ) {
192
+ return false;
193
+ }
194
+ return this.hoistToRoot ?? opts.collapseNesting ?? false;
195
+ }
196
+
197
+ override toTrimmedString(options?: PrintOptions): string {
198
+ options = getPrintOptions(options);
199
+ return serializeRulesContainer(this, options as FinalPrintOptions);
200
+ }
201
+
202
+ /**
203
+ * Pre-evaluate name and prelude (similar to Ruleset.preEval)
204
+ * This allows us to extract layer names before rules are evaluated
205
+ */
206
+ override preEval(context: Context): MaybePromise<AtRule | Nil> {
207
+ if (!this.preEvaluated) {
208
+ const node = this.clone(false, undefined, context);
209
+ node.preEvaluated = true;
210
+ // Index should already be assigned by parent Rules
211
+ node.sourceNode ??= this;
212
+
213
+ // Evaluate name if needed (for interpolated names)
214
+ const name = node.name;
215
+ if (name && name instanceof Interpolated) {
216
+ const maybeKey = name.eval(context);
217
+ if (isThenable(maybeKey)) {
218
+ return (maybeKey as Promise<Any<'atkeyword'>>).then((key) => {
219
+ node.name = key;
220
+ return this._preEvalPrelude(node, context);
221
+ });
222
+ }
223
+ node.name = maybeKey as Any<'atkeyword'>;
224
+ }
225
+
226
+ return this._preEvalPrelude(node, context);
227
+ }
228
+ return this;
229
+ }
230
+
231
+ private _preEvalPrelude(node: AtRule, context: Context): MaybePromise<AtRule | Nil> {
232
+ const renderKey = node._resolveRenderKey(context);
233
+ const prelude = node.getPrelude(renderKey);
234
+ const rules = node.enterRules(context);
235
+ // Preserve @import prelude as-authored (including comments). Evaluation here can
236
+ // normalize/strip comment tokens inside the prelude, but less.js expects them preserved.
237
+ const name = node.name;
238
+ const atRuleName = String(name.valueOf?.() ?? name ?? '').trim();
239
+ if (atRuleName === '@import') {
240
+ if (prelude) {
241
+ node.prelude = prelude;
242
+ }
243
+ // Reference branches are traversed for symbol/extend resolution, but plain
244
+ // CSS @import hoisting must remain a visible-output concern only.
245
+ if (!context.inReferenceImportScope) {
246
+ const topImports = (context.topImports ??= []);
247
+ const nodeLoc = node.location?.join(':') ?? '';
248
+ const nodeSig = `${name.valueOf?.() ?? name}:${prelude?.valueOf?.() ?? ''}`;
249
+ const alreadyQueued = topImports.some((queuedNode) => {
250
+ if (!isNode(queuedNode, N.AtRule)) {
251
+ return false;
252
+ }
253
+ const queued = queuedNode as AtRule;
254
+ const queuedName = queued.name;
255
+ const queuedPrelude = queued.getPrelude(queued._resolveRenderKey(context));
256
+ return (
257
+ queued === node
258
+ || queued.sourceNode === node.sourceNode
259
+ || queued.sourceNode === node
260
+ || (
261
+ (queued.location?.join(':') ?? '') === nodeLoc
262
+ && `${queuedName.valueOf?.() ?? queuedName}:${queuedPrelude?.valueOf?.() ?? ''}` === nodeSig
263
+ )
264
+ );
265
+ });
266
+ if (!alreadyQueued) {
267
+ topImports.push(node);
268
+ }
269
+ }
270
+ return new Nil();
271
+ }
272
+ // Defer prelude evaluation to evalNode so variable lookups happen in the correct
273
+ // call-time scope (e.g. mixin parameters referenced from nested @media preludes).
274
+ if (prelude) {
275
+ node.prelude = prelude;
276
+ }
277
+ // Depth-first: preEval child rules immediately so all nested rulesets/extends
278
+ // are registered in source order before we process extends.
279
+ if (rules && !isPreEvaluated(rules, context)) {
280
+ // For nestable at-rules we do NOT push the original here. The body's Rules.preEval
281
+ // pushes the clone (the Rules that ends up in the tree) so rulesets register to it.
282
+ // Pushing the original would leave the clone's registry empty (extend + collapseNesting bug).
283
+ let pushedExtendRootForPreEval = false;
284
+ if (!node.isNestable()) {
285
+ context.extendRoots.pushExtendRoot(rules);
286
+ pushedExtendRootForPreEval = true;
287
+ }
288
+ // Root-only at-rules (@keyframes, @font-face, etc.): do not let parent ruleset frames
289
+ // pierce into the body — clear rulesetFrames so 0%/100% etc. are not combined with .parent.
290
+ const savedRulesetFramesForPreEval = node.isRootOnly() ? context.rulesetFrames : undefined;
291
+ if (node.isRootOnly()) {
292
+ context.rulesetFrames = [];
293
+ }
294
+ const preEvaldRules = rules.preEval(context);
295
+ if (isThenable(preEvaldRules)) {
296
+ return (preEvaldRules as Promise<Rules>).then((evaldRules) => {
297
+ if (savedRulesetFramesForPreEval !== undefined) {
298
+ context.rulesetFrames = savedRulesetFramesForPreEval;
299
+ }
300
+ if (pushedExtendRootForPreEval) {
301
+ context.extendRoots.popExtendRoot();
302
+ }
303
+ node._assignRules(evaldRules, context);
304
+ return node;
305
+ });
306
+ }
307
+ if (savedRulesetFramesForPreEval !== undefined) {
308
+ context.rulesetFrames = savedRulesetFramesForPreEval;
309
+ }
310
+ if (pushedExtendRootForPreEval) {
311
+ context.extendRoots.popExtendRoot();
312
+ }
313
+ node._assignRules(preEvaldRules as Rules, context);
314
+ }
315
+ return node;
316
+ }
317
+
318
+ private _extractAndStoreLayerName(node: AtRule, context: Context): void {
319
+ const name = node.name;
320
+ const prelude = node.getPrelude(node._resolveRenderKey(context));
321
+ const atRuleName = name?.toTrimmedString?.() ?? name?.toString?.() ?? '';
322
+ if (atRuleName === '@layer' && prelude) {
323
+ const preludeStr = String(prelude.valueOf?.() ?? prelude.toTrimmedString?.() ?? prelude.toString?.() ?? '');
324
+ if (preludeStr) {
325
+ let parentLayerName: string | undefined;
326
+ for (let i = context.frames.length - 2; i >= 0; i--) {
327
+ const frame = context.frames[i]!;
328
+ if (isNode(frame, N.AtRule) && frame.name?.toTrimmedString?.() === '@layer') {
329
+ parentLayerName = context.extendRoots.getLayerName(frame as AtRule);
330
+ }
331
+ if (parentLayerName) {
332
+ break;
333
+ }
334
+ }
335
+ const layerName = parentLayerName ? `${parentLayerName}.${preludeStr}` : preludeStr;
336
+ context.extendRoots.setLayerName(node, layerName);
337
+ }
338
+ }
339
+ }
340
+
341
+ /** Render the opening of this at-rule (name and prelude) */
342
+ getHeaderString(options: FinalPrintOptions, withoutComments?: boolean): string {
343
+ const w = options.writer;
344
+ const name = this.name;
345
+ const renderKey = this.renderKey !== CANONICAL
346
+ ? this.renderKey
347
+ : this._resolveRenderKey(options.context);
348
+ const prelude = this.getPrelude(renderKey);
349
+ const rules = this.enterRules(options.context);
350
+
351
+ let idt = indent(options.depth);
352
+ let out = idt;
353
+
354
+ if (withoutComments) {
355
+ options = { ...options, suppressComments: true };
356
+ }
357
+
358
+ const withHeaderRenderKey = <T>(fn: () => T): T => {
359
+ const ctx = options.context;
360
+ if (!ctx || renderKey === undefined) {
361
+ return fn();
362
+ }
363
+ const previousRenderKey = ctx.renderKey;
364
+ ctx.renderKey = renderKey;
365
+ try {
366
+ return fn();
367
+ } finally {
368
+ ctx.renderKey = previousRenderKey;
369
+ }
370
+ };
371
+
372
+ const nameOut = withHeaderRenderKey(() => w.capture(() => name.toString(options)));
373
+ const nameEndsWithSpace = /\s$/.test(nameOut);
374
+ const preludeOut = prelude ? withHeaderRenderKey(() => w.capture(() => prelude.toString(options))) : '';
375
+ const hasPreludeContent = /\S/.test(preludeOut);
376
+ if (prelude && hasPreludeContent) {
377
+ const preludeStartsWithSpace = /^\s/.test(preludeOut);
378
+
379
+ out += nameOut;
380
+ // If name ends with space AND prelude starts with space, trim the prelude's leading space
381
+ // Otherwise, add a space only if neither has spacing
382
+ let finalPreludeOut = preludeOut;
383
+ if (nameEndsWithSpace && preludeStartsWithSpace) {
384
+ finalPreludeOut = preludeOut.replace(/^\s+/, '');
385
+ } else if (!nameEndsWithSpace && !preludeStartsWithSpace) {
386
+ out += ' ';
387
+ }
388
+ out += finalPreludeOut;
389
+ if (rules) {
390
+ const preludeEndsWithSpace = /\s$/.test(finalPreludeOut);
391
+ if (!preludeEndsWithSpace) {
392
+ out += ' ';
393
+ }
394
+ out = normalizeIndent(out + '{', idt) + '\n';
395
+ } else {
396
+ out = normalizeIndent(out + ';', idt);
397
+ }
398
+ } else {
399
+ out += nameOut;
400
+ if (rules) {
401
+ if (!nameEndsWithSpace) {
402
+ out += ' ';
403
+ }
404
+ out = normalizeIndent(out + '{', idt) + '\n';
405
+ } else {
406
+ out = normalizeIndent(out + ';', idt);
407
+ }
408
+ }
409
+ return out;
410
+ }
411
+
412
+ override evalNode(context: Context): MaybePromise<AtRule | Nil> {
413
+ let node = this as AtRule;
414
+ const renderKey = node._resolveRenderKey(context);
415
+ const previousRenderKey = context.renderKey;
416
+ if (renderKey !== undefined && renderKey !== CANONICAL) {
417
+ context.renderKey = renderKey;
418
+ }
419
+
420
+ // @plugin is handled by the Less compatibility plugin (preEval). If we reach eval and it's still visible, no plugin processed it.
421
+ const atName = String(node.name?.valueOf?.() ?? '');
422
+ if (atName === '@plugin' && isVisibleInContext(node, context)) {
423
+ throw new Error('@plugin is only supported when using the Less compatibility plugin (@jesscss/plugin-less-compat).');
424
+ }
425
+
426
+ // Check if this is a root-only at-rule that should bubble to root
427
+ // when nested inside a Ruleset. Use hoistToRoot for in-place rendering.
428
+ let shouldClearRulesetFrames = false;
429
+ if (context.bubbleRootAtRules && node.isRootOnly(context)) {
430
+ const hasRulesetParent = context.frames.some(f => isNode(f, N.Ruleset));
431
+ if (hasRulesetParent) {
432
+ // Mark for hoisting - this will render at root level but in-place
433
+ node.hoistToRoot = true;
434
+ // We'll clear rulesetFrames when evaluating internal rules
435
+ // to prevent selector inheritance from piercing through
436
+ shouldClearRulesetFrames = true;
437
+ }
438
+ }
439
+
440
+ // Store frames snapshot for hoisting serialization
441
+ const nodeHoistToRoot = node.hoistToRoot;
442
+ if (context.opts.collapseNesting || nodeHoistToRoot) {
443
+ node.frames = [...context.frames];
444
+ }
445
+
446
+ const tryMergeNestedMedia = () => {
447
+ // Nested @media merge is currently disabled to match less.js fixture expectations.
448
+ // (Some fixtures expect nested @media blocks to remain nested rather than being
449
+ // rewritten as `@media a and b`.)
450
+ if (process.env.ENABLE_NESTED_MEDIA_MERGE !== 'true') {
451
+ return;
452
+ }
453
+ if (node.name?.valueOf?.() !== '@media') {
454
+ return;
455
+ }
456
+ const outerRules = node.enterRules(context);
457
+ if (!outerRules) {
458
+ return;
459
+ }
460
+ const visible = outerRules.value.filter(n => isVisibleInContext(n, context));
461
+ if (visible.length !== 1) {
462
+ return;
463
+ }
464
+ const only = visible[0]!;
465
+ if (!isNode(only, N.AtRule) || (only as AtRule).name?.valueOf?.() !== '@media') {
466
+ return;
467
+ }
468
+ const inner = only as AtRule;
469
+ const innerRules = inner.enterRules(context);
470
+ if (!innerRules) {
471
+ return;
472
+ }
473
+
474
+ // Combine media queries using "and" like Less does.
475
+ const outerPrelude = node.getPrelude(node._resolveRenderKey(context));
476
+ const innerPrelude = inner.getPrelude(inner._resolveRenderKey(context));
477
+ if (outerPrelude && innerPrelude) {
478
+ // Build a normalized text prelude to avoid double-spacing from nested sequences.
479
+ const outerText = outerPrelude.toTrimmedString().trim();
480
+ const innerText = innerPrelude.toTrimmedString().trim();
481
+ const combined = `${outerText} and ${innerText}`.replace(/[ \t]+/g, ' ').trim();
482
+ node.prelude = new Any(combined);
483
+ } else {
484
+ node.prelude = outerPrelude ?? innerPrelude;
485
+ }
486
+
487
+ // Replace outer rules with the inner rules (flatten nested media).
488
+ node._assignRules(innerRules, context);
489
+ };
490
+
491
+ const out = pipe(
492
+ () => {
493
+ // Evaluate prelude in the correct scope (mixin params, vars, etc.).
494
+ const prelude = node.getPrelude(renderKey);
495
+ if (prelude) {
496
+ // Evaluate the prelude in the outer (enclosing) Rules scope, not the nested @media Rules scope.
497
+ // This matches Less behavior for mixin parameters referenced from nested @media preludes.
498
+ const savedRulesContext = context.rulesContext;
499
+ let liftedRulesContext = context.lookupScope ?? savedRulesContext;
500
+ // If our current rulesContext is a Rules whose parent is an AtRule, lift to the enclosing Rules.
501
+ if (liftedRulesContext && isNode(liftedRulesContext, N.Rules)) {
502
+ const renderKey = liftedRulesContext.renderKey;
503
+ let cursor: Node = liftedRulesContext;
504
+ let depth = 0;
505
+ while (getScopeParentNode(cursor, renderKey) && depth++ < 10) {
506
+ const cursorParent = getScopeParentNode(cursor, renderKey);
507
+ if (isNode(cursorParent, N.AtRule) && isNode(getScopeParentNode(cursorParent, renderKey), N.Rules)) {
508
+ cursor = getScopeParentNode(cursorParent, renderKey)!;
509
+ continue;
510
+ }
511
+ break;
512
+ }
513
+ liftedRulesContext = cursor;
514
+ }
515
+ context.rulesContext = liftedRulesContext;
516
+ const out = prelude.eval(context);
517
+ context.rulesContext = savedRulesContext;
518
+ if (isThenable(out)) {
519
+ return (out as Promise<Node>).then((n) => {
520
+ node._assignPrelude(n, context);
521
+ return undefined;
522
+ });
523
+ }
524
+ node._assignPrelude(out as Node, context);
525
+ }
526
+ },
527
+ () => {
528
+ let rules = node.enterRules(context);
529
+ if (rules) {
530
+ if (
531
+ context.opts.collapseNesting
532
+ && !COLLAPSE_PRESERVING_AT_RULES.includes(node.name.valueOf() as (typeof COLLAPSE_PRESERVING_AT_RULES)[number])
533
+ ) {
534
+ node.hoistToRoot = true;
535
+ }
536
+ // Push to frames before evaluating rules so we can use context.frames to find parent layers
537
+ // This allows nested layers to find their parent layer names
538
+ // NOTE: We do NOT pop here - the frame must remain accessible during rules evaluation
539
+ // The frame will be popped at the end of evalNode
540
+ context.frames.push(node);
541
+
542
+ // Extract and store layer name AFTER pushing to frames but BEFORE evaluating rules
543
+ // This ensures parent layers are already on the stack when we look for them
544
+ this._extractAndStoreLayerName(node, context);
545
+
546
+ // Wrap in Ruleset(&) when hoisted for nestable at-rules only. Do NOT wrap @keyframes,
547
+ // @font-face, or other at-rules in ROOT_ONLY_AT_RULES — their children must not get
548
+ // a wrapper so keyframe percentages (0%, 100%) etc. are not combined with parent selectors.
549
+ // Required for serialization: rulesets inside @media need this wrapper to output
550
+ // e.g. ".parent { font-size: 14px; }" inside @media.
551
+ if (node.isNestable() && !node.isRootOnly() && node.isHoisted(context.opts)) {
552
+ const parentRuleset = context.rulesetFrames.at(-1)
553
+ ?? (context.callStack.length > 0 ? context.callerRulesetFrame : undefined)
554
+ ?? getParentRuleset(node, context);
555
+ const parentSel = parentRuleset?.getEffectiveSelector(context.opts.collapseNesting ?? false, context);
556
+ const hasParentSel = parentSel && !isNode(parentSel, N.Nil);
557
+ const wrapperSel = hasParentSel
558
+ ? (parentSel!.copy(true) as Selector)
559
+ : undefined;
560
+ rules = Rules.create([
561
+ Ruleset.create({
562
+ selector: wrapperSel ?? Ampersand.create(undefined),
563
+ rules
564
+ }, wrapperSel
565
+ ? {
566
+ generated: true,
567
+ ownSelector: wrapperSel.copy(true) as Selector,
568
+ resolvedHoistWrapper: true
569
+ }
570
+ : { generated: true })
571
+ ]).inherit(rules);
572
+ node.adopt(rules);
573
+ }
574
+
575
+ // Register extend root for nestable at-rules (including @layer).
576
+ // Run preEval first so we push and later register the Rules that is actually evaluated
577
+ // (clone or original). Otherwise we push the original but eval runs on a clone, so the
578
+ // registered root has no rulesets and extend-chaining / nested at-rule extends fail.
579
+ let pushedExtendRoot = false;
580
+ let parentExtendRoot: Rules | undefined;
581
+ let bodyToEval: Rules = rules;
582
+ if (node.isNestable()) {
583
+ parentExtendRoot = context.extendRoots.getCurrentExtendRoot();
584
+ const preEvalResult = rules.preEval(context);
585
+ if (isThenable(preEvalResult)) {
586
+ return (preEvalResult as Promise<Rules>).then((resolved) => {
587
+ bodyToEval = resolved;
588
+ context.extendRoots.pushExtendRoot(bodyToEval);
589
+ pushedExtendRoot = true;
590
+ const savedRulesetFrames = shouldClearRulesetFrames ? context.rulesetFrames : undefined;
591
+ if (shouldClearRulesetFrames) {
592
+ context.rulesetFrames = [];
593
+ }
594
+ const onlyRuleSetChild = isNode(bodyToEval.value[0], N.Ruleset);
595
+ const evalOut = bodyToEval.eval(context);
596
+ const doRegister = (r: Rules) => {
597
+ if (savedRulesetFrames !== undefined) {
598
+ context.rulesetFrames = savedRulesetFrames;
599
+ }
600
+ const finalRules =
601
+ onlyRuleSetChild && isNode(r.value[0], N.Rules) ? r.value[0] : r;
602
+ node._assignRules(finalRules, context);
603
+ tryMergeNestedMedia();
604
+ context.extendRoots.popExtendRoot();
605
+ const layerName = context.extendRoots.takeLayerName(node);
606
+ const parent = parentExtendRoot ?? context.root ?? undefined;
607
+ context.extendRoots.registerRoot(bodyToEval, parent as Rules | undefined, {
608
+ layerName
609
+ });
610
+ registerInnerExtendRootIfHoisted(bodyToEval, context, layerName);
611
+ if (finalRules !== bodyToEval) {
612
+ context.extendRoots.registerRoot(finalRules as Rules, bodyToEval, { layerName });
613
+ registerInnerExtendRootIfHoisted(finalRules, context, layerName);
614
+ }
615
+ context.extendRoots.pushExtendRoot(bodyToEval);
616
+ context.extendRoots.popExtendRoot();
617
+ return node;
618
+ };
619
+ if (isThenable(evalOut)) {
620
+ return (evalOut as Promise<Rules>).then(doRegister);
621
+ }
622
+ return doRegister(evalOut as Rules);
623
+ });
624
+ }
625
+ bodyToEval = preEvalResult as Rules;
626
+ context.extendRoots.pushExtendRoot(bodyToEval);
627
+ pushedExtendRoot = true;
628
+ }
629
+
630
+ let onlyRuleSetChild = isNode(bodyToEval.value[0], N.Ruleset);
631
+
632
+ // For root-only at-rules that are hoisted, clear rulesetFrames
633
+ // so internal rulesets don't inherit parent selectors
634
+ const savedRulesetFrames = shouldClearRulesetFrames ? context.rulesetFrames : undefined;
635
+ if (shouldClearRulesetFrames) {
636
+ context.rulesetFrames = [];
637
+ }
638
+
639
+ let out = bodyToEval.eval(context);
640
+ if (isThenable(out)) {
641
+ return (out as Promise<Rules>).then((r) => {
642
+ // Restore rulesetFrames
643
+ if (savedRulesetFrames !== undefined) {
644
+ context.rulesetFrames = savedRulesetFrames;
645
+ }
646
+ // If the only rule was a ruleset, and it evaluated to Rules,
647
+ // discard the extra rules wrapper
648
+ const finalRules = onlyRuleSetChild && isNode(r.value[0], N.Rules) ? r.value[0] : r;
649
+ node._assignRules(finalRules, context);
650
+ tryMergeNestedMedia();
651
+
652
+ if (pushedExtendRoot && node.isNestable()) {
653
+ context.extendRoots.popExtendRoot();
654
+ const layerName = context.extendRoots.takeLayerName(node);
655
+ const parent = parentExtendRoot ?? context.root ?? undefined;
656
+ context.extendRoots.registerRoot(bodyToEval, parent as Rules | undefined, {
657
+ layerName
658
+ });
659
+ registerInnerExtendRootIfHoisted(bodyToEval, context, layerName);
660
+ if (finalRules !== bodyToEval) {
661
+ context.extendRoots.registerRoot(finalRules as Rules, bodyToEval, { layerName });
662
+ registerInnerExtendRootIfHoisted(finalRules, context, layerName);
663
+ }
664
+ context.extendRoots.pushExtendRoot(bodyToEval);
665
+ context.extendRoots.popExtendRoot();
666
+ }
667
+
668
+ return node;
669
+ });
670
+ }
671
+ // Restore rulesetFrames (sync path)
672
+ if (savedRulesetFrames !== undefined) {
673
+ context.rulesetFrames = savedRulesetFrames;
674
+ }
675
+
676
+ const finalRules =
677
+ onlyRuleSetChild && isNode(out.value[0], N.Rules) ? out.value[0] : out;
678
+ node._assignRules(finalRules, context);
679
+ tryMergeNestedMedia();
680
+
681
+ if (pushedExtendRoot && node.isNestable()) {
682
+ context.extendRoots.popExtendRoot();
683
+ const layerName = context.extendRoots.takeLayerName(node);
684
+ const parent = parentExtendRoot ?? context.root ?? undefined;
685
+ context.extendRoots.registerRoot(bodyToEval, parent as Rules | undefined, { layerName });
686
+ registerInnerExtendRootIfHoisted(bodyToEval, context, layerName);
687
+ if (finalRules !== bodyToEval) {
688
+ context.extendRoots.registerRoot(finalRules as Rules, bodyToEval, { layerName });
689
+ registerInnerExtendRootIfHoisted(finalRules, context, layerName);
690
+ }
691
+ context.extendRoots.pushExtendRoot(bodyToEval);
692
+ context.extendRoots.popExtendRoot();
693
+ }
694
+ }
695
+ return node;
696
+ },
697
+ () => {
698
+ // Pop the frame that was pushed in preEval
699
+ // This frame was kept on the stack during rules evaluation so children could access it
700
+ context.frames.pop();
701
+ let rules = node.enterRules(context);
702
+ if (rules && rules.visibleRules().length === 0) {
703
+ node._removeFlag(F_VISIBLE, context);
704
+ }
705
+ return node;
706
+ }
707
+ ) as MaybePromise<AtRule>;
708
+
709
+ if (isThenable(out)) {
710
+ return (out as Promise<AtRule>).then(
711
+ (result) => {
712
+ context.renderKey = previousRenderKey;
713
+ return result;
714
+ },
715
+ (error) => {
716
+ context.renderKey = previousRenderKey;
717
+ throw error;
718
+ }
719
+ );
720
+ }
721
+ context.renderKey = previousRenderKey;
722
+ return out;
723
+ }
724
+
725
+ /** @todo - move to visitors */
726
+ // toCSS(context: Context, out: OutputCollector) {
727
+ // out.add(`${this.name}`, this.location)
728
+ // /** Prelude expression includes white space */
729
+ // const value = this.data
730
+ // if (value) {
731
+ // value.toCSS(context, out)
732
+ // }
733
+ // if (this.rules) {
734
+ // this.rules.toCSS(context, out)
735
+ // } else {
736
+ // out.add(';')
737
+ // }
738
+ // }
739
+
740
+ // toModule(context: Context, out: OutputCollector) {
741
+ // out.add('$J.atrule({\n', this.location)
742
+ // const pre = context.pre
743
+ // context.indent++
744
+ // out.add(`${pre} name: ${JSON.stringify(this.name)}`)
745
+ // const value = this.data
746
+ // if (value) {
747
+ // out.add(`,\n${pre} value: `)
748
+ // value.toModule(context, out)
749
+ // }
750
+ // const rules = this.rules
751
+ // if (rules) {
752
+ // out.add(`,\n${pre} rules: `)
753
+ // rules.toModule(context, out)
754
+ // }
755
+ // context.indent--
756
+ // out.add(`\n${pre}},${JSON.stringify(this.location)})`)
757
+ // }
758
+ }
759
+
760
+ export const atrule = defineType(AtRule, 'AtRule');