@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,318 @@
1
+ import { Node } from '../node.js';
2
+
3
+ export type SerializeTypesOptions = {
4
+ // Include primitive main values next to the type when useful
5
+ showValues?: boolean;
6
+ // Include options next to the type when useful
7
+ showOptions?: boolean;
8
+ // Max length for printed strings; longer strings are truncated with …
9
+ maxStringLength?: number;
10
+ // Use shortType instead of type
11
+ useShortType?: boolean;
12
+ // Indentation size in spaces
13
+ indentSize?: number;
14
+ };
15
+
16
+ const defaultOptions: Required<SerializeTypesOptions> = {
17
+ showValues: true,
18
+ showOptions: false,
19
+ maxStringLength: 40,
20
+ useShortType: false,
21
+ indentSize: 2
22
+ };
23
+
24
+ function isJessNode(value: unknown): value is Node {
25
+ return value instanceof Node;
26
+ }
27
+
28
+ function isPlainObject(value: unknown): value is Record<string, unknown> {
29
+ return value !== null && !Array.isArray(value) && typeof value === 'object';
30
+ }
31
+
32
+ function truncate(str: string, max: number): string {
33
+ if (str.length <= max) {
34
+ return str;
35
+ }
36
+ return `${str.slice(0, max - 1)}…`;
37
+ }
38
+
39
+ function formatPrimitive(value: unknown, opts: Required<SerializeTypesOptions>): string {
40
+ if (typeof value === 'string') {
41
+ const content = truncate(value, opts.maxStringLength);
42
+ return `'${content.replace(/'/g, '\\\'')}'`;
43
+ }
44
+ if (typeof value === 'number' || typeof value === 'boolean') {
45
+ return String(value);
46
+ }
47
+ if (value === null) {
48
+ return 'null';
49
+ }
50
+ if (value === undefined) {
51
+ return 'undefined';
52
+ }
53
+ return String(value);
54
+ }
55
+
56
+ function indent(depth: number, size: number): string {
57
+ return ''.padStart(depth * size);
58
+ }
59
+
60
+ function summarizeArray(items: unknown[], opts: Required<SerializeTypesOptions>): string {
61
+ // For non-node arrays emit a compact summary: [a, b]
62
+ const parts = items.map((item) => {
63
+ if (isJessNode(item)) {
64
+ return opts.useShortType ? (item as any).shortType : (item as any).type;
65
+ }
66
+ if (Array.isArray(item)) {
67
+ return '[' + summarizeArray(item, opts) + ']';
68
+ }
69
+ return formatPrimitive(item, opts);
70
+ });
71
+ return parts.join(', ');
72
+ }
73
+
74
+ function serializeArray(arr: unknown[], depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
75
+ const pad = indent(depth, opts.indentSize);
76
+ if (arr.length === 0) {
77
+ return `${pad}[]`;
78
+ }
79
+ const first = arr[0];
80
+ if (isJessNode(first)) {
81
+ const inner = arr.map(item => serializeNode(item as Node, depth + 1, opts, visiting)).join('\n');
82
+ return `${pad}[\n${inner}\n${pad}]`;
83
+ }
84
+ // Not a node array; show compact
85
+ return `${pad}[${summarizeArray(arr, opts)}]`;
86
+ }
87
+
88
+ function serializePlainObject(obj: Record<string, unknown>, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
89
+ const keys = Object.keys(obj).filter(k => obj[k] !== undefined);
90
+ if (keys.length === 0) {
91
+ return '';
92
+ }
93
+ const lines: string[] = [];
94
+ for (const key of keys) {
95
+ const v = obj[key];
96
+ if (isJessNode(v)) {
97
+ const inner = '\n' + serializeNode(v, depth + 2, opts, visiting);
98
+ lines.push(`${indent(depth + 1, opts.indentSize)}${key}: ${inner}`);
99
+ } else if (Array.isArray(v)) {
100
+ const inner = serializeArray(v, depth + 2, opts, visiting);
101
+ lines.push(`${indent(depth + 1, opts.indentSize)}${key}:\n${inner}`);
102
+ } else if (isPlainObject(v)) {
103
+ const inner = serializePlainObject(v as Record<string, unknown>, depth + 1, opts, visiting);
104
+ if (inner) {
105
+ lines.push(`${indent(depth + 1, opts.indentSize)}${key}: {\n${inner}\n${indent(depth + 1, opts.indentSize)}}`);
106
+ } else {
107
+ lines.push(`${indent(depth + 1, opts.indentSize)}${key}: {}`);
108
+ }
109
+ } else {
110
+ lines.push(`${indent(depth + 1, opts.indentSize)}${key}: ${formatPrimitive(v, opts)}`);
111
+ }
112
+ }
113
+ return lines.join('\n');
114
+ }
115
+
116
+ function serializeNodeOptions(n: Node, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string | null {
117
+ if (!opts.showOptions) {
118
+ return null;
119
+ }
120
+ const nodeOptions = (n as any).options;
121
+ if (!nodeOptions || typeof nodeOptions !== 'object') {
122
+ return null;
123
+ }
124
+ // Check if there are any non-undefined properties
125
+ const keys = Object.keys(nodeOptions).filter(k => nodeOptions[k] !== undefined);
126
+ if (keys.length === 0) {
127
+ return null;
128
+ }
129
+ return serializePlainObject(nodeOptions, depth + 1, opts, visiting);
130
+ }
131
+
132
+ function getNodeRole(n: Node): string | undefined {
133
+ return (n as any).role ?? (n as any).options?.role;
134
+ }
135
+
136
+ function getNodeValue(n: Node): unknown {
137
+ const childKeys = (n.constructor as typeof Node).childKeys;
138
+ const NODE_INTERNAL = new Set([
139
+ 'parent', 'index', 'frames', 'pre', 'post', 'state', 'nodeType',
140
+ 'preEvaluated', 'evaluated',
141
+ 'renderKey',
142
+ 'isSelector', 'keySetLibrary', 'role',
143
+ 'fullRender',
144
+ 'rulesetRegistry', 'mixinRegistry', 'declarationRegistry', 'functionRegistry',
145
+ 'rulesIndexed', '_indexing',
146
+ '_valueOf', '_keySet', '_visibleKeySet', '_requiredKeySet'
147
+ ]);
148
+
149
+ if ((n as any).type === 'Color') {
150
+ const color = n as any;
151
+ const value: Record<string, unknown> = {};
152
+ if (color._nodeValue !== undefined) {
153
+ value.node = color._nodeValue;
154
+ }
155
+ if (color._rgbChannels !== undefined) {
156
+ value.rgb = color.rgb;
157
+ }
158
+ if (color._hslChannels !== undefined) {
159
+ value.hsl = color.hsl;
160
+ }
161
+ if (color._alphaValue !== undefined) {
162
+ value.alpha = color.alpha;
163
+ }
164
+ return Object.keys(value).length > 0 ? value : undefined;
165
+ }
166
+
167
+ if (Array.isArray(childKeys)) {
168
+ if (childKeys.length === 1) {
169
+ return (n as any)[childKeys[0]!];
170
+ }
171
+
172
+ const obj: Record<string, unknown> = {};
173
+ for (const key of childKeys) {
174
+ const value = (n as any)[key];
175
+ if (value !== undefined) {
176
+ obj[key] = value;
177
+ }
178
+ }
179
+ for (const key of Object.keys(n)) {
180
+ if (key.startsWith('_') || NODE_INTERNAL.has(key) || childKeys.includes(key)) {
181
+ continue;
182
+ }
183
+ const value = (n as any)[key];
184
+ if (value !== undefined) {
185
+ obj[key] = value;
186
+ }
187
+ }
188
+ return Object.keys(obj).length > 0 ? obj : undefined;
189
+ }
190
+
191
+ const directValue = (n as any).value as unknown;
192
+ if (directValue !== undefined) {
193
+ return directValue;
194
+ }
195
+
196
+ const obj: Record<string, unknown> = {};
197
+ for (const key of Object.keys(n)) {
198
+ if (key.startsWith('_') || NODE_INTERNAL.has(key)) {
199
+ continue;
200
+ }
201
+ const value = (n as any)[key];
202
+ if (value !== undefined && !isJessNode(value) && !Array.isArray(value)) {
203
+ obj[key] = value;
204
+ }
205
+ }
206
+ return Object.keys(obj).length > 0 ? obj : undefined;
207
+ }
208
+
209
+ function serializeNode(n: Node, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
210
+ const typeName = opts.useShortType ? (n as any).shortType : (n as any).type;
211
+ const pad = indent(depth, opts.indentSize);
212
+ const role = getNodeRole(n);
213
+ const meta = role ? ` [role=${role}]` : '';
214
+ const open = `${pad}(${typeName}${meta}`;
215
+
216
+ // Protect against cycles
217
+ if (visiting.has(n)) {
218
+ return `${open} …)`;
219
+ }
220
+ visiting.add(n);
221
+
222
+ const value = getNodeValue(n);
223
+ const optionsStr = serializeNodeOptions(n, depth, opts, visiting);
224
+
225
+ // If the main value is a primitive, include it inline
226
+ if (
227
+ value === null
228
+ || value === undefined
229
+ || typeof value === 'string'
230
+ || typeof value === 'number'
231
+ || typeof value === 'boolean'
232
+ ) {
233
+ visiting.delete(n);
234
+ if (optionsStr) {
235
+ if (opts.showValues && value !== undefined) {
236
+ const rendered = formatPrimitive(value, opts);
237
+ return `${open}\n${optionsStr}\n${indent(depth + 1, opts.indentSize)}${rendered}\n${pad})`;
238
+ }
239
+ return `${open}\n${optionsStr}\n${pad})`;
240
+ }
241
+ if (opts.showValues && value !== undefined) {
242
+ const rendered = formatPrimitive(value, opts);
243
+ return `${open} ${rendered})`;
244
+ }
245
+ return `${open})`;
246
+ }
247
+
248
+ // If the main value is a Node, print it on next line
249
+ if (isJessNode(value)) {
250
+ const inner = '\n' + serializeNode(value, depth + 1, opts, visiting);
251
+ visiting.delete(n);
252
+ if (optionsStr) {
253
+ return `${open}\n${optionsStr}${inner}\n${pad})`;
254
+ }
255
+ return `${open}${inner}\n${pad})`;
256
+ }
257
+
258
+ // Special-case Number plain object: print compact form
259
+ if (typeName === 'Num' && isPlainObject(value)) {
260
+ const num = (value as any).number;
261
+ const keys = Object.keys(value as Record<string, unknown>).filter(k => (value as any)[k] !== undefined);
262
+ if (typeof num === 'number' && (keys.length === 1 || (keys.length === 0))) {
263
+ visiting.delete(n);
264
+ if (optionsStr) {
265
+ return `${open}\n${optionsStr}\n${indent(depth + 1, opts.indentSize)}${num}\n${pad})`;
266
+ }
267
+ return `${open} ${num})`;
268
+ }
269
+ }
270
+
271
+ // If the main value is an array
272
+ if (Array.isArray(value)) {
273
+ const arrStr = serializeArray(value, depth + 1, opts, visiting);
274
+ visiting.delete(n);
275
+ if (optionsStr) {
276
+ return `${open}\n${optionsStr}\n${arrStr}\n${pad})`;
277
+ }
278
+ return `${open}\n${arrStr}\n${pad})`;
279
+ }
280
+
281
+ // If the main value is a plain object, print key: value summaries
282
+ if (isPlainObject(value)) {
283
+ const inner = serializePlainObject(value as Record<string, unknown>, depth, opts, visiting);
284
+ visiting.delete(n);
285
+ if (optionsStr) {
286
+ return `${open}\n${optionsStr}${inner ? '\n' + inner : ''}\n${pad})`;
287
+ }
288
+ return inner ? `${open}\n${inner}\n${pad})` : `${open})`;
289
+ }
290
+
291
+ visiting.delete(n);
292
+ if (optionsStr) {
293
+ return `${open}\n${optionsStr}\n${pad})`;
294
+ }
295
+ return `${open})`;
296
+ }
297
+
298
+ function serializeUnknown(value: unknown, depth: number, opts: Required<SerializeTypesOptions>, visiting: Set<Node>): string {
299
+ if (isJessNode(value)) {
300
+ return serializeNode(value, depth, opts, visiting);
301
+ }
302
+ if (Array.isArray(value)) {
303
+ const arr = summarizeArray(value, opts);
304
+ return `${indent(depth, opts.indentSize)}[${arr}]`;
305
+ }
306
+ if (isPlainObject(value)) {
307
+ const keys = Object.keys(value);
308
+ const parts = keys.map(k => `${k}: ${formatPrimitive((value as Record<string, unknown>)[k], opts)}`);
309
+ return `${indent(depth, opts.indentSize)}{ ${parts.join(', ')} }`;
310
+ }
311
+ return `${indent(depth, opts.indentSize)}${formatPrimitive(value, opts)}`;
312
+ }
313
+
314
+ export function serializeTypes(value: unknown, options?: SerializeTypesOptions): string {
315
+ const opts: Required<SerializeTypesOptions> = { ...defaultOptions, ...(options ?? {}) };
316
+ const visiting = new Set<Node>();
317
+ return serializeUnknown(value, 0, opts, visiting);
318
+ }
@@ -0,0 +1,78 @@
1
+ import type { MathMode } from '../../types/modes.js';
2
+ import type { Operator } from './calculate.js';
3
+ import { isNode } from './is-node.js';
4
+ import { N } from '../node-type.js';
5
+ import type { Node } from '../node.js';
6
+
7
+ export type MathFrameState = {
8
+ mathMode: MathMode;
9
+ /**
10
+ * Boolean stack. The current frame is the top-most value.
11
+ * - `true` enables Less/Sass "math in parens" semantics
12
+ * - `false` explicitly disables it (e.g. for call args)
13
+ */
14
+ parenFrames: ReadonlyArray<boolean>;
15
+ /** Number stack, modeled as a depth counter */
16
+ calcFrames: number;
17
+ };
18
+
19
+ export function isInParens(parenFrames: ReadonlyArray<boolean>): boolean {
20
+ return parenFrames.at(-1) ?? false;
21
+ }
22
+
23
+ /**
24
+ * Shared calculation decision logic for both eval-time (`Context.shouldOperate`)
25
+ * and parse-time decisions (Less→Jess conversion).
26
+ *
27
+ * This must remain behaviorally equivalent to `Context.shouldOperate`.
28
+ */
29
+ export function shouldOperateWithMathFrames(
30
+ state: MathFrameState,
31
+ op: Operator,
32
+ left: Node,
33
+ right: Node
34
+ ): boolean {
35
+ const { mathMode, calcFrames } = state;
36
+ const inParens = isInParens(state.parenFrames);
37
+ const inCalc = calcFrames !== 0;
38
+
39
+ if (inCalc) {
40
+ /** Only collapse safe units */
41
+ if (isNode(left, N.Dimension) && isNode(right, N.Dimension)) {
42
+ const lUnit = left.unit;
43
+ const rUnit = right.unit;
44
+ if ((op === '+' || op === '-') && lUnit === rUnit) {
45
+ return true;
46
+ }
47
+ /** Can't make square units */
48
+ if (op === '*' && (!lUnit || !rUnit)) {
49
+ return true;
50
+ }
51
+ /** Can't divide by a unit */
52
+ if (op === '/' && !rUnit) {
53
+ return true;
54
+ }
55
+ }
56
+
57
+ return false;
58
+ }
59
+
60
+ // Preserve CSS/Less slash syntax such as `font: small/20px` even under
61
+ // aggressive math modes. Keyword-like `Any` operands are overwhelmingly
62
+ // shorthand/value syntax, not arithmetic.
63
+ if (op === '/' && (isNode(left, N.Any) || isNode(right, N.Any))) {
64
+ return false;
65
+ }
66
+
67
+ /** Parens for Less/SCSS will set `canOperate` to true */
68
+ if (mathMode === 'always' || inParens) {
69
+ return true;
70
+ }
71
+ if (mathMode === 'parens-division') {
72
+ return op !== '/';
73
+ }
74
+ if (mathMode === 'parens' || mathMode === 'strict') {
75
+ return false;
76
+ }
77
+ return true;
78
+ }
@@ -0,0 +1,37 @@
1
+ import {
2
+ GenMapping,
3
+ addMapping,
4
+ setSourceContent,
5
+ toEncodedMap
6
+ } from '@jridgewell/gen-mapping';
7
+ import type { OutputWriter, SourceSegment } from './print.js';
8
+
9
+ export type BuildSourceMapOptions = {
10
+ file?: string;
11
+ sourcesContent?: Map<string, string>;
12
+ };
13
+
14
+ export function buildSourceMap(writer: OutputWriter, opts: BuildSourceMapOptions = {}) {
15
+ const map = new GenMapping({ file: opts.file });
16
+ const segs: SourceSegment[] = writer.getSegments();
17
+
18
+ for (const s of segs) {
19
+ if (s.source) {
20
+ addMapping(map, {
21
+ generated: { line: s.genLine + 1, column: s.genColumn },
22
+ source: s.source,
23
+ original: { line: s.origLine + 1, column: s.origColumn }
24
+ });
25
+ const content = opts.sourcesContent?.get(s.source);
26
+ if (content !== undefined) {
27
+ setSourceContent(map, s.source, content);
28
+ }
29
+ } else {
30
+ addMapping(map, {
31
+ generated: { line: s.genLine + 1, column: s.genColumn }
32
+ });
33
+ }
34
+ }
35
+
36
+ return toEncodedMap(map);
37
+ }
@@ -0,0 +1,247 @@
1
+ import type { EqualityMode, MathMode, UnitMode } from './modes.js';
2
+
3
+ export type { EqualityMode, MathMode, UnitMode };
4
+ export type ExtendSelectorKind = 'simple' | 'basic' | 'pseudo' | 'complex' | 'compound';
5
+
6
+ /**
7
+ * Less compiler options.
8
+ *
9
+ * Kept in `@jesscss/core` to avoid cyclic workspace dependencies with `styles-config`.
10
+ * Based on less.js default-options.js and bin/lessc.
11
+ */
12
+ export interface LessOptions {
13
+ /**
14
+ * Restrict which selector shapes are allowed in extend targets.
15
+ * When set, any other selector kind is a parse error.
16
+ *
17
+ * Supported kinds mirror selector node types in lowercase:
18
+ * - `simple`
19
+ * - `basic`
20
+ * - `pseudo`
21
+ * - `compound`
22
+ * - `complex`
23
+ *
24
+ * @default undefined
25
+ */
26
+ allowExtendSelectors?: ExtendSelectorKind[];
27
+
28
+ /**
29
+ * Inline Javascript - @plugin still allowed
30
+ * @default false
31
+ */
32
+ javascriptEnabled?: boolean;
33
+
34
+ /**
35
+ * Outputs a makefile import dependency list to stdout.
36
+ * @default false
37
+ */
38
+ depends?: boolean;
39
+
40
+ /**
41
+ * @deprecated Compress using less built-in compression.
42
+ * This does an okay job but does not utilise all the tricks of
43
+ * dedicated css compression.
44
+ * @default false
45
+ */
46
+ compress?: boolean;
47
+
48
+ /**
49
+ * Runs the less parser and just reports errors without any output.
50
+ * @default false
51
+ */
52
+ lint?: boolean;
53
+
54
+ /**
55
+ * Sets available include paths.
56
+ * If the file in an @import rule does not exist at that exact location,
57
+ * less will look for it at the location(s) passed to this option.
58
+ * @default []
59
+ */
60
+ paths?: string[];
61
+
62
+ /**
63
+ * Color output in the terminal
64
+ * @default true
65
+ */
66
+ color?: boolean;
67
+
68
+ /**
69
+ * @deprecated This option has confusing behavior and may be removed in a future version.
70
+ *
71
+ * Controls how @import statements for .less files are handled inside selector blocks (rulesets).
72
+ *
73
+ * Behavior:
74
+ * - @import at root level: Always processed
75
+ * - @import inside @-rules (@media, @supports, etc.): Processed (these are not selector blocks)
76
+ * - @import inside selector blocks (.class, #id, etc.): Behavior depends on this option
77
+ *
78
+ * Options:
79
+ * - `false` (default): All @import statements are processed regardless of context.
80
+ * - `true`: @import statements inside selector blocks are silently ignored and not output.
81
+ * - `'error'`: @import statements inside selector blocks will throw an error instead of being silently ignored.
82
+ *
83
+ * Note: Only affects .less file imports. CSS imports (url(...) or .css files) are
84
+ * always output as CSS @import statements regardless of this setting.
85
+ *
86
+ * @see https://github.com/less/less.js/issues/656
87
+ * @default false
88
+ */
89
+ strictImports?: boolean | 'error';
90
+
91
+ /**
92
+ * Allow Imports from Insecure HTTPS Hosts
93
+ * @default false
94
+ */
95
+ insecure?: boolean;
96
+
97
+ /**
98
+ * Allows you to add a path to every generated import and url in your css.
99
+ * This does not affect less import statements that are processed, just ones
100
+ * that are left in the output css.
101
+ * @default ''
102
+ */
103
+ rootpath?: string;
104
+
105
+ /**
106
+ * By default URLs are kept as-is, so if you import a file in a sub-directory
107
+ * that references an image, exactly the same URL will be output in the css.
108
+ * This option allows you to re-write URL's in imported files so that the
109
+ * URL is always relative to the base imported file
110
+ * @default false
111
+ */
112
+ rewriteUrls?: boolean | 'all' | 'local' | 'off';
113
+
114
+ /**
115
+ * How to process math operations
116
+ * - 'always': eagerly try to solve all operations
117
+ * - 'parens-division': require parens for division "/"
118
+ * - 'parens' or 'strict': require parens for all operations
119
+ * @default 'parens-division'
120
+ */
121
+ mathMode?: MathMode;
122
+
123
+ /**
124
+ * How to handle unit conversions in math operations
125
+ * - 'loose': Less's default 1.x-4.x behavior
126
+ * - 'preserve': Create calc() expressions for unit errors
127
+ * - 'strict': strict unit mode
128
+ * @default 'loose'
129
+ */
130
+ unitMode?: UnitMode;
131
+
132
+ /**
133
+ * How to handle equality/coercion in guards and comparisons.
134
+ * - 'coerce': Less-compatible coercion behavior
135
+ * - 'strict': type-strict behavior
136
+ * @default 'coerce'
137
+ */
138
+ equalityMode?: EqualityMode;
139
+
140
+ /**
141
+ * @deprecated Use `mathMode` instead. This option maps to `mathMode` as follows:
142
+ * - 0 or 'always' → 'always'
143
+ * - 1 or 'parens-division' → 'parens-division'
144
+ * - 2 or 'parens' or 'strict' → 'parens'
145
+ * - 3 or 'strict-legacy' → 'parens' (removed, will default to 'strict)
146
+ * @default undefined (uses mathMode if provided, otherwise 'parens-division')
147
+ */
148
+ math?: 0 | 1 | 2 | 3 | MathMode | 'strict-legacy';
149
+
150
+ /**
151
+ * @deprecated Use `unitMode` instead. If `true`, sets `unitMode` to 'strict'.
152
+ * If `false` or undefined, uses the `unitMode` value (defaults to 'loose').
153
+ * @default false
154
+ */
155
+ strictUnits?: boolean;
156
+
157
+ /**
158
+ * Effectively the declaration is put at the top of your base Less file,
159
+ * meaning it can be used but it also can be overridden if this variable
160
+ * is defined in the file.
161
+ * @default null
162
+ */
163
+ globalVars?: Record<string, string> | null;
164
+
165
+ /**
166
+ * As opposed to the global variable option, this puts the declaration at the
167
+ * end of your base file, meaning it will override anything defined in your Less file.
168
+ * @default null
169
+ */
170
+ modifyVars?: Record<string, string> | null;
171
+
172
+ /**
173
+ * This option allows you to specify a argument to go on to every URL.
174
+ * @default ''
175
+ */
176
+ urlArgs?: string;
177
+
178
+ /**
179
+ * @removed The dumpLineNumbers option is not useful nor supported in browsers. Use sourcemaps instead.
180
+ *
181
+ * @default undefined
182
+ */
183
+ dumpLineNumbers?: string;
184
+
185
+ /**
186
+ * Source map options
187
+ * @default undefined
188
+ */
189
+ sourceMap?: boolean | {
190
+ sourceMapFullFilename?: string;
191
+ sourceMapRootpath?: string;
192
+ sourceMapBasepath?: string;
193
+ sourceMapURL?: string;
194
+ sourceMapFileInline?: boolean;
195
+ outputSourceFiles?: boolean;
196
+ disableSourcemapAnnotation?: boolean;
197
+ sourceMapOutputFilename?: string;
198
+ sourceMapFilename?: string;
199
+ };
200
+
201
+ /**
202
+ * Verbose output
203
+ * @default false
204
+ */
205
+ verbose?: boolean;
206
+
207
+ /**
208
+ * Silent mode (suppress errors)
209
+ * @default false
210
+ */
211
+ silent?: boolean;
212
+
213
+ /**
214
+ * Quiet mode (suppress warnings)
215
+ * @default false
216
+ */
217
+ quiet?: boolean;
218
+
219
+ /**
220
+ * @deprecated This is legacy Less behavior.
221
+ *
222
+ * Controls whether mixins and detached rulesets "leak" their inner rules.
223
+ * When true:
224
+ * - Mixins: Mixin and VarDeclaration nodes are 'public' and 'optional' respectively
225
+ * - Detached rulesets: Mixin and VarDeclaration nodes are 'public' and 'private' respectively
226
+ * When false:
227
+ * - Both mixins and detached rulesets: Mixin and VarDeclaration nodes are 'private'
228
+ * @default true
229
+ */
230
+ leakyRules?: boolean;
231
+
232
+ /**
233
+ * Whether to collapse nested selectors (Less 1.x-4.x style flattening)
234
+ * When true, nested selectors like `.parent { .child { } }` are flattened to `.parent .child { }`
235
+ * @default false
236
+ */
237
+ collapseNesting?: boolean;
238
+
239
+ /**
240
+ * @deprecated This is legacy Less behavior.
241
+ *
242
+ * Whether to bubble root-only at-rules (@font-face, @keyframes, etc.) to the root
243
+ * when they are nested inside rulesets. Modern CSS supports nesting these at-rules.
244
+ * @default true
245
+ */
246
+ bubbleRootAtRules?: boolean;
247
+ }
@@ -0,0 +1,12 @@
1
+ import { type ILexingResult, type IRecognitionException, type IToken } from '@chevrotain/types';
2
+ import type { Node } from '../tree/index.js';
3
+
4
+ export * from './modes.js';
5
+ export * from './config.js';
6
+
7
+ export interface IParseResult<T extends Node = Node> {
8
+ lexerResult: ILexingResult;
9
+ errors: IRecognitionException[];
10
+ tree: T;
11
+ warnings?: Array<{ message: string; token?: IToken; deprecation?: string }>;
12
+ }