@jesscss/core 2.0.0-alpha.1

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 (423) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/lib/context.d.ts +352 -0
  4. package/lib/context.d.ts.map +1 -0
  5. package/lib/context.js +636 -0
  6. package/lib/context.js.map +1 -0
  7. package/lib/conversions.d.ts +73 -0
  8. package/lib/conversions.d.ts.map +1 -0
  9. package/lib/conversions.js +253 -0
  10. package/lib/conversions.js.map +1 -0
  11. package/lib/debug-log.d.ts +2 -0
  12. package/lib/debug-log.d.ts.map +1 -0
  13. package/lib/debug-log.js +27 -0
  14. package/lib/debug-log.js.map +1 -0
  15. package/lib/define-function.d.ts +587 -0
  16. package/lib/define-function.d.ts.map +1 -0
  17. package/lib/define-function.js +726 -0
  18. package/lib/define-function.js.map +1 -0
  19. package/lib/deprecation.d.ts +34 -0
  20. package/lib/deprecation.d.ts.map +1 -0
  21. package/lib/deprecation.js +57 -0
  22. package/lib/deprecation.js.map +1 -0
  23. package/lib/index.d.ts +22 -0
  24. package/lib/index.d.ts.map +1 -0
  25. package/lib/index.js +23 -0
  26. package/lib/index.js.map +1 -0
  27. package/lib/jess-error.d.ts +343 -0
  28. package/lib/jess-error.d.ts.map +1 -0
  29. package/lib/jess-error.js +508 -0
  30. package/lib/jess-error.js.map +1 -0
  31. package/lib/logger/deprecation-processing.d.ts +41 -0
  32. package/lib/logger/deprecation-processing.d.ts.map +1 -0
  33. package/lib/logger/deprecation-processing.js +81 -0
  34. package/lib/logger/deprecation-processing.js.map +1 -0
  35. package/lib/logger.d.ts +10 -0
  36. package/lib/logger.d.ts.map +1 -0
  37. package/lib/logger.js +20 -0
  38. package/lib/logger.js.map +1 -0
  39. package/lib/plugin.d.ts +94 -0
  40. package/lib/plugin.d.ts.map +1 -0
  41. package/lib/plugin.js +174 -0
  42. package/lib/plugin.js.map +1 -0
  43. package/lib/tree/ampersand.d.ts +94 -0
  44. package/lib/tree/ampersand.d.ts.map +1 -0
  45. package/lib/tree/ampersand.js +269 -0
  46. package/lib/tree/ampersand.js.map +1 -0
  47. package/lib/tree/any.d.ts +58 -0
  48. package/lib/tree/any.d.ts.map +1 -0
  49. package/lib/tree/any.js +101 -0
  50. package/lib/tree/any.js.map +1 -0
  51. package/lib/tree/at-rule.d.ts +53 -0
  52. package/lib/tree/at-rule.d.ts.map +1 -0
  53. package/lib/tree/at-rule.js +503 -0
  54. package/lib/tree/at-rule.js.map +1 -0
  55. package/lib/tree/block.d.ts +22 -0
  56. package/lib/tree/block.d.ts.map +1 -0
  57. package/lib/tree/block.js +24 -0
  58. package/lib/tree/block.js.map +1 -0
  59. package/lib/tree/bool.d.ts +17 -0
  60. package/lib/tree/bool.d.ts.map +1 -0
  61. package/lib/tree/bool.js +24 -0
  62. package/lib/tree/bool.js.map +1 -0
  63. package/lib/tree/call.d.ts +66 -0
  64. package/lib/tree/call.d.ts.map +1 -0
  65. package/lib/tree/call.js +306 -0
  66. package/lib/tree/call.js.map +1 -0
  67. package/lib/tree/collection.d.ts +30 -0
  68. package/lib/tree/collection.d.ts.map +1 -0
  69. package/lib/tree/collection.js +37 -0
  70. package/lib/tree/collection.js.map +1 -0
  71. package/lib/tree/color.d.ts +101 -0
  72. package/lib/tree/color.d.ts.map +1 -0
  73. package/lib/tree/color.js +513 -0
  74. package/lib/tree/color.js.map +1 -0
  75. package/lib/tree/combinator.d.ts +12 -0
  76. package/lib/tree/combinator.d.ts.map +1 -0
  77. package/lib/tree/combinator.js +8 -0
  78. package/lib/tree/combinator.js.map +1 -0
  79. package/lib/tree/comment.d.ts +20 -0
  80. package/lib/tree/comment.d.ts.map +1 -0
  81. package/lib/tree/comment.js +18 -0
  82. package/lib/tree/comment.js.map +1 -0
  83. package/lib/tree/condition.d.ts +31 -0
  84. package/lib/tree/condition.d.ts.map +1 -0
  85. package/lib/tree/condition.js +103 -0
  86. package/lib/tree/condition.js.map +1 -0
  87. package/lib/tree/control.d.ts +104 -0
  88. package/lib/tree/control.d.ts.map +1 -0
  89. package/lib/tree/control.js +430 -0
  90. package/lib/tree/control.js.map +1 -0
  91. package/lib/tree/declaration-custom.d.ts +18 -0
  92. package/lib/tree/declaration-custom.d.ts.map +1 -0
  93. package/lib/tree/declaration-custom.js +24 -0
  94. package/lib/tree/declaration-custom.js.map +1 -0
  95. package/lib/tree/declaration-var.d.ts +36 -0
  96. package/lib/tree/declaration-var.d.ts.map +1 -0
  97. package/lib/tree/declaration-var.js +63 -0
  98. package/lib/tree/declaration-var.js.map +1 -0
  99. package/lib/tree/declaration.d.ts +78 -0
  100. package/lib/tree/declaration.d.ts.map +1 -0
  101. package/lib/tree/declaration.js +289 -0
  102. package/lib/tree/declaration.js.map +1 -0
  103. package/lib/tree/default-guard.d.ts +15 -0
  104. package/lib/tree/default-guard.d.ts.map +1 -0
  105. package/lib/tree/default-guard.js +19 -0
  106. package/lib/tree/default-guard.js.map +1 -0
  107. package/lib/tree/dimension.d.ts +33 -0
  108. package/lib/tree/dimension.d.ts.map +1 -0
  109. package/lib/tree/dimension.js +291 -0
  110. package/lib/tree/dimension.js.map +1 -0
  111. package/lib/tree/expression.d.ts +24 -0
  112. package/lib/tree/expression.d.ts.map +1 -0
  113. package/lib/tree/expression.js +28 -0
  114. package/lib/tree/expression.js.map +1 -0
  115. package/lib/tree/extend-list.d.ts +23 -0
  116. package/lib/tree/extend-list.d.ts.map +1 -0
  117. package/lib/tree/extend-list.js +20 -0
  118. package/lib/tree/extend-list.js.map +1 -0
  119. package/lib/tree/extend.d.ts +47 -0
  120. package/lib/tree/extend.d.ts.map +1 -0
  121. package/lib/tree/extend.js +292 -0
  122. package/lib/tree/extend.js.map +1 -0
  123. package/lib/tree/function.d.ts +48 -0
  124. package/lib/tree/function.d.ts.map +1 -0
  125. package/lib/tree/function.js +74 -0
  126. package/lib/tree/function.js.map +1 -0
  127. package/lib/tree/import-js.d.ts +35 -0
  128. package/lib/tree/import-js.d.ts.map +1 -0
  129. package/lib/tree/import-js.js +45 -0
  130. package/lib/tree/import-js.js.map +1 -0
  131. package/lib/tree/import-style.d.ts +156 -0
  132. package/lib/tree/import-style.d.ts.map +1 -0
  133. package/lib/tree/import-style.js +556 -0
  134. package/lib/tree/import-style.js.map +1 -0
  135. package/lib/tree/index.d.ts +71 -0
  136. package/lib/tree/index.d.ts.map +1 -0
  137. package/lib/tree/index.js +95 -0
  138. package/lib/tree/index.js.map +1 -0
  139. package/lib/tree/interpolated-reference.d.ts +24 -0
  140. package/lib/tree/interpolated-reference.d.ts.map +1 -0
  141. package/lib/tree/interpolated-reference.js +37 -0
  142. package/lib/tree/interpolated-reference.js.map +1 -0
  143. package/lib/tree/interpolated.d.ts +62 -0
  144. package/lib/tree/interpolated.d.ts.map +1 -0
  145. package/lib/tree/interpolated.js +204 -0
  146. package/lib/tree/interpolated.js.map +1 -0
  147. package/lib/tree/js-array.d.ts +10 -0
  148. package/lib/tree/js-array.d.ts.map +1 -0
  149. package/lib/tree/js-array.js +10 -0
  150. package/lib/tree/js-array.js.map +1 -0
  151. package/lib/tree/js-expr.d.ts +23 -0
  152. package/lib/tree/js-expr.d.ts.map +1 -0
  153. package/lib/tree/js-expr.js +28 -0
  154. package/lib/tree/js-expr.js.map +1 -0
  155. package/lib/tree/js-function.d.ts +20 -0
  156. package/lib/tree/js-function.d.ts.map +1 -0
  157. package/lib/tree/js-function.js +16 -0
  158. package/lib/tree/js-function.js.map +1 -0
  159. package/lib/tree/js-object.d.ts +10 -0
  160. package/lib/tree/js-object.d.ts.map +1 -0
  161. package/lib/tree/js-object.js +10 -0
  162. package/lib/tree/js-object.js.map +1 -0
  163. package/lib/tree/list.d.ts +38 -0
  164. package/lib/tree/list.d.ts.map +1 -0
  165. package/lib/tree/list.js +83 -0
  166. package/lib/tree/list.js.map +1 -0
  167. package/lib/tree/log.d.ts +29 -0
  168. package/lib/tree/log.d.ts.map +1 -0
  169. package/lib/tree/log.js +56 -0
  170. package/lib/tree/log.js.map +1 -0
  171. package/lib/tree/mixin.d.ts +87 -0
  172. package/lib/tree/mixin.d.ts.map +1 -0
  173. package/lib/tree/mixin.js +112 -0
  174. package/lib/tree/mixin.js.map +1 -0
  175. package/lib/tree/negative.d.ts +17 -0
  176. package/lib/tree/negative.d.ts.map +1 -0
  177. package/lib/tree/negative.js +22 -0
  178. package/lib/tree/negative.js.map +1 -0
  179. package/lib/tree/nil.d.ts +31 -0
  180. package/lib/tree/nil.d.ts.map +1 -0
  181. package/lib/tree/nil.js +36 -0
  182. package/lib/tree/nil.js.map +1 -0
  183. package/lib/tree/node-base.d.ts +359 -0
  184. package/lib/tree/node-base.d.ts.map +1 -0
  185. package/lib/tree/node-base.js +884 -0
  186. package/lib/tree/node-base.js.map +1 -0
  187. package/lib/tree/node.d.ts +10 -0
  188. package/lib/tree/node.d.ts.map +1 -0
  189. package/lib/tree/node.js +45 -0
  190. package/lib/tree/node.js.map +1 -0
  191. package/lib/tree/number.d.ts +21 -0
  192. package/lib/tree/number.d.ts.map +1 -0
  193. package/lib/tree/number.js +27 -0
  194. package/lib/tree/number.js.map +1 -0
  195. package/lib/tree/operation.d.ts +26 -0
  196. package/lib/tree/operation.d.ts.map +1 -0
  197. package/lib/tree/operation.js +103 -0
  198. package/lib/tree/operation.js.map +1 -0
  199. package/lib/tree/paren.d.ts +18 -0
  200. package/lib/tree/paren.d.ts.map +1 -0
  201. package/lib/tree/paren.js +86 -0
  202. package/lib/tree/paren.js.map +1 -0
  203. package/lib/tree/query-condition.d.ts +17 -0
  204. package/lib/tree/query-condition.d.ts.map +1 -0
  205. package/lib/tree/query-condition.js +39 -0
  206. package/lib/tree/query-condition.js.map +1 -0
  207. package/lib/tree/quoted.d.ts +27 -0
  208. package/lib/tree/quoted.d.ts.map +1 -0
  209. package/lib/tree/quoted.js +66 -0
  210. package/lib/tree/quoted.js.map +1 -0
  211. package/lib/tree/range.d.ts +33 -0
  212. package/lib/tree/range.d.ts.map +1 -0
  213. package/lib/tree/range.js +47 -0
  214. package/lib/tree/range.js.map +1 -0
  215. package/lib/tree/reference.d.ts +76 -0
  216. package/lib/tree/reference.d.ts.map +1 -0
  217. package/lib/tree/reference.js +521 -0
  218. package/lib/tree/reference.js.map +1 -0
  219. package/lib/tree/rest.d.ts +15 -0
  220. package/lib/tree/rest.d.ts.map +1 -0
  221. package/lib/tree/rest.js +32 -0
  222. package/lib/tree/rest.js.map +1 -0
  223. package/lib/tree/rules-raw.d.ts +17 -0
  224. package/lib/tree/rules-raw.d.ts.map +1 -0
  225. package/lib/tree/rules-raw.js +37 -0
  226. package/lib/tree/rules-raw.js.map +1 -0
  227. package/lib/tree/rules.d.ts +255 -0
  228. package/lib/tree/rules.d.ts.map +1 -0
  229. package/lib/tree/rules.js +2293 -0
  230. package/lib/tree/rules.js.map +1 -0
  231. package/lib/tree/ruleset.d.ts +91 -0
  232. package/lib/tree/ruleset.d.ts.map +1 -0
  233. package/lib/tree/ruleset.js +506 -0
  234. package/lib/tree/ruleset.js.map +1 -0
  235. package/lib/tree/selector-attr.d.ts +31 -0
  236. package/lib/tree/selector-attr.d.ts.map +1 -0
  237. package/lib/tree/selector-attr.js +99 -0
  238. package/lib/tree/selector-attr.js.map +1 -0
  239. package/lib/tree/selector-basic.d.ts +23 -0
  240. package/lib/tree/selector-basic.d.ts.map +1 -0
  241. package/lib/tree/selector-basic.js +34 -0
  242. package/lib/tree/selector-basic.js.map +1 -0
  243. package/lib/tree/selector-capture.d.ts +23 -0
  244. package/lib/tree/selector-capture.d.ts.map +1 -0
  245. package/lib/tree/selector-capture.js +34 -0
  246. package/lib/tree/selector-capture.js.map +1 -0
  247. package/lib/tree/selector-complex.d.ts +40 -0
  248. package/lib/tree/selector-complex.d.ts.map +1 -0
  249. package/lib/tree/selector-complex.js +143 -0
  250. package/lib/tree/selector-complex.js.map +1 -0
  251. package/lib/tree/selector-compound.d.ts +16 -0
  252. package/lib/tree/selector-compound.d.ts.map +1 -0
  253. package/lib/tree/selector-compound.js +114 -0
  254. package/lib/tree/selector-compound.js.map +1 -0
  255. package/lib/tree/selector-interpolated.d.ts +23 -0
  256. package/lib/tree/selector-interpolated.d.ts.map +1 -0
  257. package/lib/tree/selector-interpolated.js +27 -0
  258. package/lib/tree/selector-interpolated.js.map +1 -0
  259. package/lib/tree/selector-list.d.ts +17 -0
  260. package/lib/tree/selector-list.d.ts.map +1 -0
  261. package/lib/tree/selector-list.js +184 -0
  262. package/lib/tree/selector-list.js.map +1 -0
  263. package/lib/tree/selector-pseudo.d.ts +42 -0
  264. package/lib/tree/selector-pseudo.d.ts.map +1 -0
  265. package/lib/tree/selector-pseudo.js +191 -0
  266. package/lib/tree/selector-pseudo.js.map +1 -0
  267. package/lib/tree/selector-simple.d.ts +5 -0
  268. package/lib/tree/selector-simple.d.ts.map +1 -0
  269. package/lib/tree/selector-simple.js +6 -0
  270. package/lib/tree/selector-simple.js.map +1 -0
  271. package/lib/tree/selector.d.ts +43 -0
  272. package/lib/tree/selector.d.ts.map +1 -0
  273. package/lib/tree/selector.js +56 -0
  274. package/lib/tree/selector.js.map +1 -0
  275. package/lib/tree/sequence.d.ts +43 -0
  276. package/lib/tree/sequence.d.ts.map +1 -0
  277. package/lib/tree/sequence.js +148 -0
  278. package/lib/tree/sequence.js.map +1 -0
  279. package/lib/tree/tree.d.ts +87 -0
  280. package/lib/tree/tree.d.ts.map +1 -0
  281. package/lib/tree/tree.js +2 -0
  282. package/lib/tree/tree.js.map +1 -0
  283. package/lib/tree/url.d.ts +18 -0
  284. package/lib/tree/url.d.ts.map +1 -0
  285. package/lib/tree/url.js +35 -0
  286. package/lib/tree/url.js.map +1 -0
  287. package/lib/tree/util/__tests__/debug-log.d.ts +1 -0
  288. package/lib/tree/util/__tests__/debug-log.d.ts.map +1 -0
  289. package/lib/tree/util/__tests__/debug-log.js +36 -0
  290. package/lib/tree/util/__tests__/debug-log.js.map +1 -0
  291. package/lib/tree/util/calculate.d.ts +3 -0
  292. package/lib/tree/util/calculate.d.ts.map +1 -0
  293. package/lib/tree/util/calculate.js +10 -0
  294. package/lib/tree/util/calculate.js.map +1 -0
  295. package/lib/tree/util/cast.d.ts +10 -0
  296. package/lib/tree/util/cast.d.ts.map +1 -0
  297. package/lib/tree/util/cast.js +87 -0
  298. package/lib/tree/util/cast.js.map +1 -0
  299. package/lib/tree/util/cloning.d.ts +4 -0
  300. package/lib/tree/util/cloning.d.ts.map +1 -0
  301. package/lib/tree/util/cloning.js +8 -0
  302. package/lib/tree/util/cloning.js.map +1 -0
  303. package/lib/tree/util/collections.d.ts +57 -0
  304. package/lib/tree/util/collections.d.ts.map +1 -0
  305. package/lib/tree/util/collections.js +136 -0
  306. package/lib/tree/util/collections.js.map +1 -0
  307. package/lib/tree/util/compare.d.ts +11 -0
  308. package/lib/tree/util/compare.d.ts.map +1 -0
  309. package/lib/tree/util/compare.js +89 -0
  310. package/lib/tree/util/compare.js.map +1 -0
  311. package/lib/tree/util/extend-helpers.d.ts +2 -0
  312. package/lib/tree/util/extend-helpers.d.ts.map +1 -0
  313. package/lib/tree/util/extend-helpers.js +2 -0
  314. package/lib/tree/util/extend-helpers.js.map +1 -0
  315. package/lib/tree/util/extend-roots.d.ts +37 -0
  316. package/lib/tree/util/extend-roots.d.ts.map +1 -0
  317. package/lib/tree/util/extend-roots.js +682 -0
  318. package/lib/tree/util/extend-roots.js.map +1 -0
  319. package/lib/tree/util/extend-roots.old.d.ts +132 -0
  320. package/lib/tree/util/extend-roots.old.d.ts.map +1 -0
  321. package/lib/tree/util/extend-roots.old.js +2272 -0
  322. package/lib/tree/util/extend-roots.old.js.map +1 -0
  323. package/lib/tree/util/extend-trace-debug.d.ts +13 -0
  324. package/lib/tree/util/extend-trace-debug.d.ts.map +1 -0
  325. package/lib/tree/util/extend-trace-debug.js +34 -0
  326. package/lib/tree/util/extend-trace-debug.js.map +1 -0
  327. package/lib/tree/util/extend.d.ts +218 -0
  328. package/lib/tree/util/extend.d.ts.map +1 -0
  329. package/lib/tree/util/extend.js +3033 -0
  330. package/lib/tree/util/extend.js.map +1 -0
  331. package/lib/tree/util/find-extendable-locations.d.ts +2 -0
  332. package/lib/tree/util/find-extendable-locations.d.ts.map +1 -0
  333. package/lib/tree/util/find-extendable-locations.js +2 -0
  334. package/lib/tree/util/find-extendable-locations.js.map +1 -0
  335. package/lib/tree/util/format.d.ts +20 -0
  336. package/lib/tree/util/format.d.ts.map +1 -0
  337. package/lib/tree/util/format.js +67 -0
  338. package/lib/tree/util/format.js.map +1 -0
  339. package/lib/tree/util/is-node.d.ts +13 -0
  340. package/lib/tree/util/is-node.d.ts.map +1 -0
  341. package/lib/tree/util/is-node.js +43 -0
  342. package/lib/tree/util/is-node.js.map +1 -0
  343. package/lib/tree/util/print.d.ts +80 -0
  344. package/lib/tree/util/print.d.ts.map +1 -0
  345. package/lib/tree/util/print.js +205 -0
  346. package/lib/tree/util/print.js.map +1 -0
  347. package/lib/tree/util/process-leading-is.d.ts +25 -0
  348. package/lib/tree/util/process-leading-is.d.ts.map +1 -0
  349. package/lib/tree/util/process-leading-is.js +364 -0
  350. package/lib/tree/util/process-leading-is.js.map +1 -0
  351. package/lib/tree/util/recursion-helper.d.ts +15 -0
  352. package/lib/tree/util/recursion-helper.d.ts.map +1 -0
  353. package/lib/tree/util/recursion-helper.js +43 -0
  354. package/lib/tree/util/recursion-helper.js.map +1 -0
  355. package/lib/tree/util/regex.d.ts +4 -0
  356. package/lib/tree/util/regex.d.ts.map +1 -0
  357. package/lib/tree/util/regex.js +4 -0
  358. package/lib/tree/util/regex.js.map +1 -0
  359. package/lib/tree/util/registry-utils.d.ts +192 -0
  360. package/lib/tree/util/registry-utils.d.ts.map +1 -0
  361. package/lib/tree/util/registry-utils.js +1242 -0
  362. package/lib/tree/util/registry-utils.js.map +1 -0
  363. package/lib/tree/util/ruleset-trace.d.ts +4 -0
  364. package/lib/tree/util/ruleset-trace.d.ts.map +1 -0
  365. package/lib/tree/util/ruleset-trace.js +14 -0
  366. package/lib/tree/util/ruleset-trace.js.map +1 -0
  367. package/lib/tree/util/selector-compare.d.ts +2 -0
  368. package/lib/tree/util/selector-compare.d.ts.map +1 -0
  369. package/lib/tree/util/selector-compare.js +2 -0
  370. package/lib/tree/util/selector-compare.js.map +1 -0
  371. package/lib/tree/util/selector-match-core.d.ts +171 -0
  372. package/lib/tree/util/selector-match-core.d.ts.map +1 -0
  373. package/lib/tree/util/selector-match-core.js +1578 -0
  374. package/lib/tree/util/selector-match-core.js.map +1 -0
  375. package/lib/tree/util/selector-utils.d.ts +30 -0
  376. package/lib/tree/util/selector-utils.d.ts.map +1 -0
  377. package/lib/tree/util/selector-utils.js +100 -0
  378. package/lib/tree/util/selector-utils.js.map +1 -0
  379. package/lib/tree/util/serialize-helper.d.ts +13 -0
  380. package/lib/tree/util/serialize-helper.d.ts.map +1 -0
  381. package/lib/tree/util/serialize-helper.js +387 -0
  382. package/lib/tree/util/serialize-helper.js.map +1 -0
  383. package/lib/tree/util/serialize-types.d.ts +9 -0
  384. package/lib/tree/util/serialize-types.d.ts.map +1 -0
  385. package/lib/tree/util/serialize-types.js +216 -0
  386. package/lib/tree/util/serialize-types.js.map +1 -0
  387. package/lib/tree/util/should-operate.d.ts +23 -0
  388. package/lib/tree/util/should-operate.d.ts.map +1 -0
  389. package/lib/tree/util/should-operate.js +46 -0
  390. package/lib/tree/util/should-operate.js.map +1 -0
  391. package/lib/tree/util/sourcemap.d.ts +7 -0
  392. package/lib/tree/util/sourcemap.d.ts.map +1 -0
  393. package/lib/tree/util/sourcemap.js +25 -0
  394. package/lib/tree/util/sourcemap.js.map +1 -0
  395. package/lib/types/config.d.ts +205 -0
  396. package/lib/types/config.d.ts.map +1 -0
  397. package/lib/types/config.js +2 -0
  398. package/lib/types/config.js.map +1 -0
  399. package/lib/types/index.d.ts +15 -0
  400. package/lib/types/index.d.ts.map +1 -0
  401. package/lib/types/index.js +3 -0
  402. package/lib/types/index.js.map +1 -0
  403. package/lib/types/modes.d.ts +24 -0
  404. package/lib/types/modes.d.ts.map +1 -0
  405. package/lib/types/modes.js +2 -0
  406. package/lib/types/modes.js.map +1 -0
  407. package/lib/types.d.ts +61 -0
  408. package/lib/types.d.ts.map +1 -0
  409. package/lib/types.js +2 -0
  410. package/lib/types.js.map +1 -0
  411. package/lib/use-webpack-resolver.d.ts +9 -0
  412. package/lib/use-webpack-resolver.d.ts.map +1 -0
  413. package/lib/use-webpack-resolver.js +41 -0
  414. package/lib/use-webpack-resolver.js.map +1 -0
  415. package/lib/visitor/index.d.ts +136 -0
  416. package/lib/visitor/index.d.ts.map +1 -0
  417. package/lib/visitor/index.js +135 -0
  418. package/lib/visitor/index.js.map +1 -0
  419. package/lib/visitor/less-visitor.d.ts +7 -0
  420. package/lib/visitor/less-visitor.d.ts.map +1 -0
  421. package/lib/visitor/less-visitor.js +7 -0
  422. package/lib/visitor/less-visitor.js.map +1 -0
  423. package/package.json +66 -0
@@ -0,0 +1,99 @@
1
+ import { defineType } from './node.js';
2
+ import { SimpleSelector } from './selector-simple.js';
3
+ import { getPrintOptions } from './util/print.js';
4
+ import { Any } from './any.js';
5
+ import { quoted } from './quoted.js';
6
+ import { pipe, isThenable } from '@jesscss/awaitable-pipe';
7
+ import { isNode } from './util/is-node.js';
8
+ /**
9
+ * An attribute selector
10
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
11
+ * e.g. [id="foo"]
12
+ */
13
+ export class AttributeSelector extends SimpleSelector {
14
+ type = 'AttributeSelector';
15
+ shortType = 'attr';
16
+ evalNode(context) {
17
+ return pipe(() => {
18
+ return super.evalNode(context);
19
+ }, () => {
20
+ const { value } = this.value;
21
+ // Handle Less interpolation that the parser may have left as a raw token in selectors:
22
+ // [data=@{attr-data}]
23
+ // In Less semantics this should resolve to the variable value and be serialized quoted.
24
+ if (value instanceof Any && typeof value.value === 'string') {
25
+ const raw = value.value.trim();
26
+ const m = raw.match(/^@\{([^}]+)\}$/);
27
+ if (m) {
28
+ const key = m[1];
29
+ const rules = this.rulesParent;
30
+ if (rules) {
31
+ const found = rules.find('declaration', key, 'VarDeclaration');
32
+ const decl = Array.isArray(found) ? found[0] : found;
33
+ if (decl && isNode(decl, 'VarDeclaration')) {
34
+ const out = decl.value.value.eval(context);
35
+ if (isThenable(out)) {
36
+ return out.then((evaluated) => {
37
+ this.value.value = quoted(String(evaluated.valueOf()));
38
+ this._valueOf = undefined;
39
+ this._keySet = undefined;
40
+ this._visibleKeySet = undefined;
41
+ this._canFastReject = undefined;
42
+ return this;
43
+ });
44
+ }
45
+ this.value.value = quoted(String(out.valueOf()));
46
+ this._valueOf = undefined;
47
+ this._keySet = undefined;
48
+ this._visibleKeySet = undefined;
49
+ this._canFastReject = undefined;
50
+ }
51
+ }
52
+ }
53
+ }
54
+ return this;
55
+ });
56
+ }
57
+ toTrimmedString(options) {
58
+ options = getPrintOptions(options);
59
+ const w = options.writer;
60
+ const mark = w.mark();
61
+ const { name, op, value, mod } = this.value;
62
+ w.add('[');
63
+ if (typeof name === 'string') {
64
+ w.add(name, this);
65
+ }
66
+ else {
67
+ name.toString(options);
68
+ }
69
+ if (op) {
70
+ w.add(op);
71
+ }
72
+ if (value) {
73
+ value.toString(options);
74
+ }
75
+ if (mod) {
76
+ w.add(' ');
77
+ w.add(mod);
78
+ }
79
+ w.add(']');
80
+ return w.getSince(mark);
81
+ }
82
+ valueOf() {
83
+ let valueOf = this._valueOf;
84
+ if (!valueOf) {
85
+ let { name, op, value, mod } = this.value;
86
+ /** Attributes are case-insensitive */
87
+ let keyStr = (typeof name === 'string' ? name : name.toTrimmedString()).toLowerCase();
88
+ if (!op) {
89
+ return `[${keyStr}]`;
90
+ }
91
+ let valueStr = value?.valueOf() ?? '';
92
+ valueOf = this._valueOf = `[${keyStr}${op}"${valueStr}"${mod ? ` ${mod}` : ''}]`;
93
+ }
94
+ return valueOf;
95
+ }
96
+ }
97
+ /** Not sure why types couldn't be properly inferred */
98
+ export const attr = defineType(AttributeSelector, 'AttributeSelector', 'attr');
99
+ //# sourceMappingURL=selector-attr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-attr.js","sourceRoot":"","sources":["../../src/tree/selector-attr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Context } from '../context.js';
2
+ import { SimpleSelector } from './selector-simple.js';
3
+ export interface BasicSelector extends SimpleSelector<string> {
4
+ eval(context: Context): BasicSelector;
5
+ }
6
+ /**
7
+ * A basic selector
8
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors/Selectors_and_combinators#basic_selectors
9
+ * e.g. div, .foo, #bar
10
+ */
11
+ export declare class BasicSelector extends SimpleSelector<string> {
12
+ type: "BasicSelector";
13
+ shortType: "el";
14
+ get isClass(): boolean;
15
+ get isId(): boolean;
16
+ /** A tag-type selector */
17
+ get isTag(): boolean;
18
+ evalNode(context: Context): BasicSelector;
19
+ valueOf(): string;
20
+ }
21
+ /** Short form of a basic selector is a short 'el' for 'element' */
22
+ export declare const el: (value?: string | undefined, options?: import("./node-base.js").NodeOptions | undefined, location?: import("./node-base.js").LocationInfo | undefined) => BasicSelector;
23
+ //# sourceMappingURL=selector-basic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-basic.d.ts","sourceRoot":"","sources":["../../src/tree/selector-basic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC3D,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAAC;CACvC;AAED;;;;EAIE;AACF,qBAAa,aAAc,SAAQ,cAAc,CAAC,MAAM,CAAC;IACvD,IAAI,EAAG,eAAe,CAAU;IAChC,SAAS,EAAG,IAAI,CAAU;IAE1B,IAAI,OAAO,YAEV;IAED,IAAI,IAAI,YAEP;IAED,0BAA0B;IAC1B,IAAI,KAAK,YAER;IAEQ,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa;IAQzC,OAAO,IAAI,MAAM;CAmB3B;AAED,mEAAmE;AACnE,eAAO,MAAM,EAAE,yKAAmD,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { defineType } from './node.js';
2
+ import { SimpleSelector } from './selector-simple.js';
3
+ /**
4
+ * A basic selector
5
+ * @see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_selectors/Selectors_and_combinators#basic_selectors
6
+ * e.g. div, .foo, #bar
7
+ */
8
+ export class BasicSelector extends SimpleSelector {
9
+ type = 'BasicSelector';
10
+ shortType = 'el';
11
+ get isClass() {
12
+ return /^\./.test(this.value);
13
+ }
14
+ get isId() {
15
+ return /^#/.test(this.value);
16
+ }
17
+ /** A tag-type selector */
18
+ get isTag() {
19
+ return /^[^.#*]/.test(this.value);
20
+ }
21
+ evalNode(context) {
22
+ const node = super.evalNode(context);
23
+ if (node.isClass) {
24
+ context.hashClass(node.value);
25
+ }
26
+ return node;
27
+ }
28
+ valueOf() {
29
+ return (this._valueOf ??= (this.isTag ? this.value.toLowerCase() : this.value));
30
+ }
31
+ }
32
+ /** Short form of a basic selector is a short 'el' for 'element' */
33
+ export const el = defineType(BasicSelector, 'BasicSelector', 'el');
34
+ //# sourceMappingURL=selector-basic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-basic.js","sourceRoot":"","sources":["../../src/tree/selector-basic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMtD;;;;EAIE;AACF,MAAM,OAAO,aAAc,SAAQ,cAAsB;IACvD,IAAI,GAAG,eAAwB,CAAC;IAChC,SAAS,GAAG,IAAa,CAAC;IAE1B,IAAI,OAAO;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,0BAA0B;IAC1B,IAAI,KAAK;QACP,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEQ,QAAQ,CAAC,OAAgB;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAkB,CAAC;QACtD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEQ,OAAO;QACd,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClF,CAAC;CAiBF;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type Context } from '../context.js';
2
+ import { Node } from './node.js';
3
+ import { Selector } from './selector.js';
4
+ import { type PrintOptions } from './util/print.js';
5
+ import { type MaybePromise } from '@jesscss/awaitable-pipe';
6
+ export interface SelectorCapture extends Node<Selector> {
7
+ eval(context: Context): MaybePromise<Selector>;
8
+ }
9
+ /**
10
+ * Explicit selector-capture wrapper used by parsers for selector-valued payloads
11
+ * (e.g. Less `*[ ... ]`, Sass `selector.parse(\"...\")`).
12
+ */
13
+ export declare class SelectorCapture extends Node<Selector> {
14
+ type: "SelectorCapture";
15
+ shortType: "selcap";
16
+ valueOf(): string;
17
+ toTrimmedString(options?: PrintOptions): string;
18
+ evalNode(context: Context): MaybePromise<Selector>;
19
+ }
20
+ type Params = ConstructorParameters<typeof SelectorCapture>;
21
+ export declare const selcap: (value: Params[0], options?: Params[1], location?: Params[2], treeContext?: Params[3]) => SelectorCapture;
22
+ export {};
23
+ //# sourceMappingURL=selector-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-capture.d.ts","sourceRoot":"","sources":["../../src/tree/selector-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAc,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,yBAAyB,CAAC;AAExE,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,QAAQ,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,IAAI,CAAC,QAAQ,CAAC;IACjD,IAAI,EAAG,iBAAiB,CAAU;IAClC,SAAS,EAAG,QAAQ,CAAU;IAErB,OAAO,IAAI,MAAM;IAIjB,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAU/C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC;CAS5D;AAED,KAAK,MAAM,GAAG,qBAAqB,CAAC,OAAO,eAAe,CAAC,CAAC;AAE5D,eAAO,MAAM,MAAM,EAA+D,CAChF,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EACpB,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,KACpB,eAAe,CAAC"}
@@ -0,0 +1,34 @@
1
+ import { Node, defineType } from './node.js';
2
+ import { getPrintOptions } from './util/print.js';
3
+ import { isThenable } from '@jesscss/awaitable-pipe';
4
+ /**
5
+ * Explicit selector-capture wrapper used by parsers for selector-valued payloads
6
+ * (e.g. Less `*[ ... ]`, Sass `selector.parse(\"...\")`).
7
+ */
8
+ export class SelectorCapture extends Node {
9
+ type = 'SelectorCapture';
10
+ shortType = 'selcap';
11
+ valueOf() {
12
+ return String(this.value.valueOf());
13
+ }
14
+ toTrimmedString(options) {
15
+ options = getPrintOptions(options);
16
+ const w = options.writer;
17
+ const mark = w.mark();
18
+ w.add('*[', this);
19
+ this.value.toString(options);
20
+ w.add(']', this);
21
+ return w.getSince(mark);
22
+ }
23
+ evalNode(context) {
24
+ const out = this.value.eval(context);
25
+ if (isThenable(out)) {
26
+ return out.then((selector) => {
27
+ return selector;
28
+ });
29
+ }
30
+ return out;
31
+ }
32
+ }
33
+ export const selcap = defineType(SelectorCapture, 'SelectorCapture', 'selcap');
34
+ //# sourceMappingURL=selector-capture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-capture.js","sourceRoot":"","sources":["../../src/tree/selector-capture.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,EAAqB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAqB,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAMxE;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,IAAc;IACjD,IAAI,GAAG,iBAA0B,CAAC;IAClC,SAAS,GAAG,QAAiB,CAAC;IAErB,OAAO;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IAEQ,eAAe,CAAC,OAAsB;QAC7C,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAO,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjB,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEQ,QAAQ,CAAC,OAAgB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,OAAQ,GAAyB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAClD,OAAO,QAAQ,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAe,CAAC;IACzB,CAAC;CACF;AAID,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,eAAe,EAAE,iBAAiB,EAAE,QAAQ,CAKzD,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type Combinator } from './combinator.js';
2
+ import { type Ampersand } from './ampersand.js';
3
+ import type { Context } from '../context.js';
4
+ import { type Nil } from './nil.js';
5
+ import { Selector } from './selector.js';
6
+ import type { SimpleSelector } from './selector-simple.js';
7
+ import type { CompoundSelector } from './selector-compound.js';
8
+ import { type PrintOptions } from './util/print.js';
9
+ import { type MaybePromise } from '@jesscss/awaitable-pipe';
10
+ export type ComplexSelectorComponent = SimpleSelector | CompoundSelector | Combinator | Ampersand;
11
+ export type ComplexSelectorValue = ComplexSelectorComponent[];
12
+ /**
13
+ * Selectors with combinators.
14
+ *
15
+ * @example
16
+ * #id > .class.class
17
+ *
18
+ * @note A complex selector may not always start with a selector. We also use this for a
19
+ * relative selector, which means it may start with a combinator.
20
+ */
21
+ export declare class ComplexSelector extends Selector<ComplexSelectorValue> {
22
+ type: string;
23
+ shortType: string;
24
+ /**
25
+ * Essentially, a#id.class === a.class#id as being identical selectors,
26
+ * so we normalize groups and combinators
27
+ *
28
+ */
29
+ valueOf(): string;
30
+ protected _computeKeySetAndFastReject(): void;
31
+ toTrimmedString(options?: PrintOptions): string;
32
+ /**
33
+ * @todo - Re-write and simplify, now that we have a distinct CompoundSelector
34
+ */
35
+ evalNode(context: Context): MaybePromise<Selector | Nil>;
36
+ }
37
+ type SelectorParams = ConstructorParameters<typeof ComplexSelector>;
38
+ export declare const sel: (value: ComplexSelectorValue, options?: SelectorParams[1], location?: SelectorParams[2], treeContext?: SelectorParams[3]) => ComplexSelector;
39
+ export {};
40
+ //# sourceMappingURL=selector-complex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-complex.d.ts","sourceRoot":"","sources":["../../src/tree/selector-complex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,KAAK,SAAS,EAA+B,MAAM,gBAAgB,CAAC;AAM7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,KAAK,YAAY,EAAmC,MAAM,yBAAyB,CAAC;AAG7F,MAAM,MAAM,wBAAwB,GAAG,cAAc,GAAG,gBAAgB,GAAG,UAAU,GAAG,SAAS,CAAC;AAElG,MAAM,MAAM,oBAAoB,GAAG,wBAAwB,EAAE,CAAC;AAE9D;;;;;;;;GAQG;AACH,qBAAa,eAAgB,SAAQ,QAAQ,CAAC,oBAAoB,CAAC;IACjE,IAAI,SAAqB;IACzB,SAAS,SAAS;IAClB;;;;OAIG;IACM,OAAO;cASG,2BAA2B,IAAI,IAAI;IAwC7C,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAqCxD;;OAEG;IACM,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,QAAQ,GAAG,GAAG,CAAC;CAsIlE;AAED,KAAK,cAAc,GAAG,qBAAqB,CAAC,OAAO,eAAe,CAAC,CAAC;AAEpE,eAAO,MAAM,GAAG,EAAkF,CAChG,KAAK,EAAE,oBAAoB,EAC3B,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAC3B,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAC5B,WAAW,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,KAC5B,eAAe,CAAC"}
@@ -0,0 +1,143 @@
1
+ import { defineType, F_VISIBLE, F_IMPLICIT_AMPERSAND } from './node.js';
2
+ import { isNode } from './util/is-node.js';
3
+ import { Selector } from './selector.js';
4
+ import { getEntries } from './util/collections.js';
5
+ import { getPrintOptions } from './util/print.js';
6
+ import { pipe, isThenable, serialForEach } from '@jesscss/awaitable-pipe';
7
+ /**
8
+ * Selectors with combinators.
9
+ *
10
+ * @example
11
+ * #id > .class.class
12
+ *
13
+ * @note A complex selector may not always start with a selector. We also use this for a
14
+ * relative selector, which means it may start with a combinator.
15
+ */
16
+ export class ComplexSelector extends Selector {
17
+ type = 'ComplexSelector';
18
+ shortType = 'sel';
19
+ /**
20
+ * Essentially, a#id.class === a.class#id as being identical selectors,
21
+ * so we normalize groups and combinators
22
+ *
23
+ */
24
+ valueOf() {
25
+ if (!Array.isArray(this.value)) {
26
+ // Attempt to repair a malformed ComplexSelector that holds a single component directly.
27
+ // We treat the current `value` as a single component.
28
+ this.value = [this.value];
29
+ }
30
+ return (this._valueOf ??= this.value.map(n => n.valueOf()).join(''));
31
+ }
32
+ _computeKeySetAndFastReject() {
33
+ let combinedKeySet = new Set();
34
+ let combinedVisibleKeySet = new Set();
35
+ let canFastReject = true;
36
+ for (const component of this.value) {
37
+ // Skip combinators - they don't contribute keys
38
+ if (isNode(component, 'Combinator')) {
39
+ continue;
40
+ }
41
+ // Get keys from selector components
42
+ const selector = component;
43
+ const selectorKeySet = selector.keySet;
44
+ if (selectorKeySet instanceof Set) {
45
+ combinedKeySet = combinedKeySet.union(selectorKeySet);
46
+ }
47
+ // Only add to visibleKeySet if the component is visible AND not an implicit ampersand
48
+ // Implicit ampersands should be excluded from visibleKeySet for indexing purposes,
49
+ // regardless of visibility (they're added by getImplicitSelector, not written by user)
50
+ if (component.hasFlag(F_VISIBLE) && !component.hasFlag(F_IMPLICIT_AMPERSAND)) {
51
+ const selectorVisibleKeySet = selector.visibleKeySet;
52
+ if (selectorVisibleKeySet instanceof Set) {
53
+ combinedVisibleKeySet = combinedVisibleKeySet.union(selectorVisibleKeySet);
54
+ }
55
+ }
56
+ // If component is invisible (like an implicit ampersand), its visibleKeySet should be empty anyway
57
+ // If any selector component can't fast reject, this complex selector can't either
58
+ if (!selector.canFastReject) {
59
+ canFastReject = false;
60
+ }
61
+ }
62
+ this._keySet = combinedKeySet;
63
+ this._visibleKeySet = combinedVisibleKeySet;
64
+ this._canFastReject = canFastReject;
65
+ }
66
+ toTrimmedString(options) {
67
+ options = getPrintOptions(options);
68
+ const w = options.writer;
69
+ let { value } = this;
70
+ let length = value.length;
71
+ const mark = w.mark();
72
+ for (let i = 0; i < length; i++) {
73
+ let component = value[i];
74
+ /** Add some combinator spacing */
75
+ if (isNode(component, 'Combinator')) {
76
+ /** Skip spacing if the previous node is a Nil */
77
+ if (isNode(value[i - 1], 'Nil')) {
78
+ continue;
79
+ }
80
+ let co = component.value;
81
+ if (co !== ' ') {
82
+ // For non-space combinators (>, +, ~, etc.), handle spacing explicitly
83
+ // pre spacing (default to single space when no explicit pre)
84
+ let out = w.capture(() => component.toString(options));
85
+ /** Namespace combinator traditionally written without spacing */
86
+ if (out !== '|') {
87
+ w.add(` ${out.trim()} `, component);
88
+ }
89
+ else {
90
+ w.add(out.trim(), component);
91
+ }
92
+ }
93
+ else {
94
+ let out = w.capture(() => component.toString(options));
95
+ w.add(` ${out.trim()}`, component);
96
+ }
97
+ }
98
+ else {
99
+ let out = w.capture(() => component.toString(options));
100
+ w.add(out.trim(), component);
101
+ }
102
+ }
103
+ return w.getSince(mark);
104
+ }
105
+ /**
106
+ * @todo - Re-write and simplify, now that we have a distinct CompoundSelector
107
+ */
108
+ evalNode(context) {
109
+ return pipe(() => {
110
+ const selector = this;
111
+ let { value } = selector;
112
+ const maybe = serialForEach(Array.from(getEntries(value)), ([sel, i]) => {
113
+ const out = sel.eval(context);
114
+ if (isThenable(out)) {
115
+ return out.then((res) => {
116
+ value[i] = res;
117
+ return undefined;
118
+ });
119
+ }
120
+ value[i] = out;
121
+ return undefined;
122
+ });
123
+ if (isThenable(maybe)) {
124
+ return maybe.then(() => {
125
+ return selector;
126
+ });
127
+ }
128
+ return selector;
129
+ }, (selector) => {
130
+ const { value } = selector;
131
+ if (value.length === 1) {
132
+ const only = value[0].inherit(selector);
133
+ if (selector.hoistToRoot) {
134
+ only.hoistToRoot = true;
135
+ }
136
+ return only;
137
+ }
138
+ return selector;
139
+ });
140
+ }
141
+ }
142
+ export const sel = defineType(ComplexSelector, 'ComplexSelector', 'sel');
143
+ //# sourceMappingURL=selector-complex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-complex.js","sourceRoot":"","sources":["../../src/tree/selector-complex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Context } from '../context.js';
2
+ import { Nil } from './nil.js';
3
+ import { Selector } from './selector.js';
4
+ import type { SimpleSelector } from './selector-simple.js';
5
+ import { type MaybePromise } from '@jesscss/awaitable-pipe';
6
+ import type { PrintOptions } from './util/print.js';
7
+ export declare class CompoundSelector extends Selector<SimpleSelector[]> {
8
+ type: "CompoundSelector";
9
+ shortType: "compound";
10
+ protected _computeKeySetAndFastReject(): void;
11
+ valueOf(): string;
12
+ toTrimmedString(options?: PrintOptions): string;
13
+ evalNode(context: Context): MaybePromise<CompoundSelector | Selector | Nil>;
14
+ }
15
+ export declare const compound: (value?: SimpleSelector<any, import("./node-base.js").NodeOptions>[] | undefined, options?: import("./node-base.js").NodeOptions | undefined, location?: import("./node-base.js").LocationInfo | undefined) => CompoundSelector;
16
+ //# sourceMappingURL=selector-compound.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-compound.d.ts","sourceRoot":"","sources":["../../src/tree/selector-compound.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,OAAO,EAAE,KAAK,YAAY,EAAmC,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAUpD,qBAAa,gBAAiB,SAAQ,QAAQ,CAAC,cAAc,EAAE,CAAC;IAC9D,IAAI,EAAG,kBAAkB,CAAU;IACnC,SAAS,EAAG,UAAU,CAAU;cAEb,2BAA2B,IAAI,IAAI;IAoB7C,OAAO;IA0BP,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAW/C,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,gBAAgB,GAAG,QAAQ,GAAG,GAAG,CAAC;CAiErF;AAED,eAAO,MAAM,QAAQ,iOAA+D,CAAC"}
@@ -0,0 +1,114 @@
1
+ import { defineType } from './node.js';
2
+ import { Nil } from './nil.js';
3
+ import { Selector } from './selector.js';
4
+ import { getEntries } from './util/collections.js';
5
+ import { pipe, isThenable, serialForEach } from '@jesscss/awaitable-pipe';
6
+ /**
7
+ * @example
8
+ * .class#id
9
+ *
10
+ * Must have at least 2 selectors. Otherwise it would be collapsed.
11
+ */
12
+ /** Anything other than type (element) or universal, which must come first */
13
+ const nonElementRegex = /^[.#:[]/;
14
+ export class CompoundSelector extends Selector {
15
+ type = 'CompoundSelector';
16
+ shortType = 'compound';
17
+ _computeKeySetAndFastReject() {
18
+ let combinedKeySet = new Set();
19
+ let combinedVisibleKeySet = new Set();
20
+ let canFastReject = true;
21
+ for (const selector of this.value) {
22
+ // Union each child's keySet
23
+ combinedKeySet = combinedKeySet.union(selector.keySet);
24
+ combinedVisibleKeySet = combinedVisibleKeySet.union(selector.visibleKeySet);
25
+ // If any child can't fast reject, this compound can't either
26
+ if (!selector.canFastReject) {
27
+ canFastReject = false;
28
+ }
29
+ }
30
+ this._keySet = combinedKeySet;
31
+ this._visibleKeySet = combinedVisibleKeySet;
32
+ this._canFastReject = canFastReject;
33
+ }
34
+ valueOf() {
35
+ let value = this._valueOf;
36
+ if (!value) {
37
+ // Convert selectors to strings
38
+ const components = this.value.map(n => n.valueOf());
39
+ // Find element selectors (those that don't start with .#:[)
40
+ const elementSelectors = [];
41
+ const nonElementSelectors = [];
42
+ for (const component of components) {
43
+ if (!nonElementRegex.test(component)) {
44
+ elementSelectors.push(component);
45
+ }
46
+ else {
47
+ nonElementSelectors.push(component);
48
+ }
49
+ }
50
+ // Element selectors must come first for valid CSS
51
+ // Non-element selectors maintain their original order (no sorting)
52
+ value = [...elementSelectors, ...nonElementSelectors].join('');
53
+ this._valueOf = value;
54
+ }
55
+ return value;
56
+ }
57
+ toTrimmedString(options) {
58
+ // Components in a compound selector are joined without spaces.
59
+ // However, parser/copy/extend pipelines can preserve `post=1` (single space) on components,
60
+ // which would serialize `.e.e` as `.e .e`. Normalize here as a final guard.
61
+ const value = this.value;
62
+ for (let i = 0; i < value.length - 1; i++) {
63
+ value[i].post = undefined;
64
+ }
65
+ return super.toTrimmedString(options);
66
+ }
67
+ evalNode(context) {
68
+ return pipe(() => {
69
+ const sel = this;
70
+ let { value } = sel;
71
+ const maybe = serialForEach(Array.from(getEntries(value)), ([item, i]) => {
72
+ const out = item.eval(context);
73
+ if (isThenable(out)) {
74
+ return out.then((res) => {
75
+ value[i] = res;
76
+ return undefined;
77
+ });
78
+ }
79
+ value[i] = out;
80
+ return undefined;
81
+ });
82
+ if (isThenable(maybe)) {
83
+ return maybe.then(() => sel);
84
+ }
85
+ return sel;
86
+ }, (sel) => {
87
+ let { value } = sel;
88
+ value = value.filter(n => n && !(n instanceof Nil));
89
+ value = value.sort((a, b) => {
90
+ let aIsElement = !nonElementRegex.test(a.valueOf());
91
+ let bIsElement = !nonElementRegex.test(b.valueOf());
92
+ if (aIsElement && bIsElement) {
93
+ return a.valueOf() < b.valueOf() ? -1 : 1;
94
+ }
95
+ return aIsElement ? -1 : bIsElement ? 1 : 0;
96
+ });
97
+ if (value.length === 0) {
98
+ return (new Nil()).inherit(this);
99
+ }
100
+ if (value.length === 1) {
101
+ return value[0].inherit(this);
102
+ }
103
+ // Clear post on all components except the last one
104
+ // Components in a compound selector are joined without spaces
105
+ for (let i = 0; i < value.length - 1; i++) {
106
+ value[i].post = undefined;
107
+ }
108
+ sel.value = value;
109
+ return sel;
110
+ });
111
+ }
112
+ }
113
+ export const compound = defineType(CompoundSelector, 'CompoundSelector', 'compound');
114
+ //# sourceMappingURL=selector-compound.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-compound.js","sourceRoot":"","sources":["../../src/tree/selector-compound.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Context } from '../context.js';
2
+ import { SimpleSelector } from './selector-simple.js';
3
+ import { Selector } from './selector.js';
4
+ import { Interpolated } from './interpolated.js';
5
+ import { type MaybePromise } from '@jesscss/awaitable-pipe';
6
+ export interface InterpolatedSelector extends SimpleSelector<Interpolated> {
7
+ eval(context: Context): MaybePromise<Selector>;
8
+ }
9
+ /**
10
+ * A selector that wraps an interpolated value
11
+ * This allows interpolation to be used in selector contexts
12
+ */
13
+ export declare class InterpolatedSelector extends SimpleSelector<Interpolated> {
14
+ type: "InterpolatedSelector";
15
+ shortType: "interpolated-selector";
16
+ get isClass(): boolean;
17
+ get isId(): boolean;
18
+ get isTag(): boolean;
19
+ evalNode(context: Context): MaybePromise<Selector>;
20
+ valueOf(): string;
21
+ }
22
+ export declare const interpolatedSelector: (value?: Interpolated<import("./any.js").AnyRole> | undefined, options?: import("./node-base.js").NodeOptions | undefined, location?: import("./node-base.js").LocationInfo | undefined) => InterpolatedSelector;
23
+ //# sourceMappingURL=selector-interpolated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector-interpolated.d.ts","sourceRoot":"","sources":["../../src/tree/selector-interpolated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,WAAW,oBAAqB,SAAQ,cAAc,CAAC,YAAY,CAAC;IACxE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;CAChD;AAED;;;GAGG;AACH,qBAAa,oBAAqB,SAAQ,cAAc,CAAC,YAAY,CAAC;IACpE,IAAI,EAAG,sBAAsB,CAAU;IACvC,SAAS,EAAG,uBAAuB,CAAU;IAE7C,IAAI,OAAO,YAEV;IAED,IAAI,IAAI,YAEP;IAED,IAAI,KAAK,YAER;IAEQ,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC;IAIlD,OAAO,IAAI,MAAM;CAG3B;AAED,eAAO,MAAM,oBAAoB,kNAAoF,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { defineType } from './node.js';
2
+ import { SimpleSelector } from './selector-simple.js';
3
+ /**
4
+ * A selector that wraps an interpolated value
5
+ * This allows interpolation to be used in selector contexts
6
+ */
7
+ export class InterpolatedSelector extends SimpleSelector {
8
+ type = 'InterpolatedSelector';
9
+ shortType = 'interpolated-selector';
10
+ get isClass() {
11
+ return /^\./.test(this.valueOf());
12
+ }
13
+ get isId() {
14
+ return /^#/.test(this.valueOf());
15
+ }
16
+ get isTag() {
17
+ return /^[^.#*]/.test(this.valueOf());
18
+ }
19
+ evalNode(context) {
20
+ return this.value.evalToSelector(context);
21
+ }
22
+ valueOf() {
23
+ return this.value.valueOf();
24
+ }
25
+ }
26
+ export const interpolatedSelector = defineType(InterpolatedSelector, 'InterpolatedSelector', 'interpolated-selector');
27
+ //# sourceMappingURL=selector-interpolated.js.map