@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,292 @@
1
+ import { defineType, Node, F_VISIBLE, F_IMPLICIT_AMPERSAND } from './node.js';
2
+ import { Ampersand } from './ampersand.js';
3
+ import { Nil } from './nil.js';
4
+ import { ComplexSelector } from './selector-complex.js';
5
+ import { Combinator } from './combinator.js';
6
+ import { PseudoSelector } from './selector-pseudo.js';
7
+ import { getPrintOptions } from './util/print.js';
8
+ import { isThenable } from '@jesscss/awaitable-pipe';
9
+ import { isNode } from './util/is-node.js';
10
+ export var ExtendFlag;
11
+ (function (ExtendFlag) {
12
+ /** Sass and Jess default */
13
+ ExtendFlag[ExtendFlag["All"] = 0] = "All";
14
+ /** Less default - must not be a partial selector match */
15
+ ExtendFlag[ExtendFlag["Exact"] = 1] = "Exact";
16
+ })(ExtendFlag || (ExtendFlag = {}));
17
+ export class Extend extends Node {
18
+ type = 'Extend';
19
+ shortType = 'extend';
20
+ state = 0b0000;
21
+ valueOf() {
22
+ return `$extend ${this.value.target.valueOf()}`;
23
+ }
24
+ toTrimmedString(options) {
25
+ options = getPrintOptions(options);
26
+ const w = options.writer;
27
+ let { target, selector, flag, namespace } = this.value;
28
+ const mark = w.mark();
29
+ w.add('$extend');
30
+ if (selector) {
31
+ let out = w.capture(() => selector.toString(options)).trim();
32
+ w.add(' ');
33
+ w.add(out, selector);
34
+ w.add(' ->');
35
+ }
36
+ let out = w.capture(() => target.toString(options)).trim();
37
+ w.add(' ');
38
+ if (namespace) {
39
+ w.add(`${namespace}|`);
40
+ }
41
+ w.add(out, target);
42
+ if (flag === ExtendFlag.Exact) {
43
+ w.add(' !exact');
44
+ }
45
+ w.add(';');
46
+ return w.getSince(mark);
47
+ }
48
+ // Don't preEval Extend - let it be evaluated in evalNode when the ruleset is in the frame
49
+ // This ensures the ampersand resolves to the correct ruleset selector, not the parent frame
50
+ evalNode(context) {
51
+ let { selector, target, flag } = this.value;
52
+ const currentFrame = context.rulesetFrames.at(-1);
53
+ // If selector is undefined, convert it to ampersand so it resolves to the ruleset's selector
54
+ // If selector is already set to a non-ampersand (e.g., from a bubbled extend), keep it as-is
55
+ // The parser sets the selector correctly when bubbling extends, so we should preserve it
56
+ if (!selector) {
57
+ // Set selector to ampersand - it will resolve to the current ruleset's selector when evaluated
58
+ // This matches the conceptual model: .c:extend(.ext all) is like { &:extend(.ext all); } inside .c
59
+ // The frame selector should already be :is(.a, .b) .c (the evaluated selector from preEval)
60
+ selector = Ampersand.create(undefined);
61
+ // Make the ampersand visible so it's included in the selector when evaluated
62
+ // This ensures the parent selector is properly included in the extend selector
63
+ selector.addFlag(F_VISIBLE);
64
+ }
65
+ // If selector is already set (e.g., .ext7 from a bubbled extend), use it directly
66
+ // Don't convert non-ampersand selectors to ampersand - they should be used as-is
67
+ // Get current extend root from registry stack
68
+ const extendRoot = context.extendRoots.getCurrentExtendRoot();
69
+ if (!extendRoot) {
70
+ /** Throw error? */
71
+ return new Nil();
72
+ }
73
+ const maybeSel = selector.eval(context);
74
+ if (isThenable(maybeSel)) {
75
+ return maybeSel.then((sel) => {
76
+ if (sel instanceof Nil) {
77
+ return new Nil();
78
+ }
79
+ // Resolve ampersand to its current parent selector if needed (live resolution for extend)
80
+ let resolvedSel = sel;
81
+ if (isNode(sel, 'Ampersand')) {
82
+ const ampResolved = sel.getResolvedSelector();
83
+ if (ampResolved && !(ampResolved instanceof Nil)) {
84
+ resolvedSel = ampResolved;
85
+ }
86
+ }
87
+ // Prefer the current ruleset's full selector (includes implicit &) so extend merges the full
88
+ // selector (e.g. .issue-2586-somepage .content not just .content).
89
+ if (currentFrame && isNode(currentFrame, 'Ruleset')) {
90
+ const rs = currentFrame;
91
+ const fullSel = rs.value?.selector;
92
+ let usedParentListComposition = false;
93
+ if (!this.value.selector) {
94
+ const ownSel = rs.options?.ownSelector;
95
+ const parentFrame = context.rulesetFrames.at(-2);
96
+ const parentSel = (parentFrame && isNode(parentFrame, 'Ruleset')
97
+ ? parentFrame.value?.selector
98
+ : undefined);
99
+ if (ownSel
100
+ && parentSel
101
+ && !(parentSel instanceof Nil)
102
+ && isNode(parentSel, 'SelectorList')) {
103
+ const parentIs = PseudoSelector.create({
104
+ name: ':is',
105
+ arg: parentSel.copy(true)
106
+ });
107
+ parentIs.generated = true;
108
+ resolvedSel = ComplexSelector.create([
109
+ parentIs,
110
+ Combinator.create(' '),
111
+ ownSel.copy(true)
112
+ ]);
113
+ usedParentListComposition = true;
114
+ }
115
+ }
116
+ if (!this.value.selector && !usedParentListComposition) {
117
+ if (fullSel && !(fullSel instanceof Nil)) {
118
+ resolvedSel = fullSel;
119
+ }
120
+ else {
121
+ // Extend ran during selector eval (e.g. .content:extend(...)); current frame is the parent.
122
+ // Build full selector as parent + ' ' + resolvedSel (e.g. .issue-2586-somepage .content).
123
+ if (isNode(currentFrame, 'Ruleset')) {
124
+ const parentSel = currentFrame.value?.selector;
125
+ if (parentSel && !(parentSel instanceof Nil) && resolvedSel.valueOf() !== parentSel.valueOf()) {
126
+ resolvedSel = ComplexSelector.create([
127
+ parentSel.copy(true),
128
+ Combinator.create(' '),
129
+ resolvedSel.copy(true)
130
+ ]);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ const beforeMaterialize = resolvedSel.valueOf();
137
+ resolvedSel = materializeImplicitAmpersands(resolvedSel, flag !== ExtendFlag.All);
138
+ const rs = currentFrame;
139
+ const docOrder = getDocumentOrderForExtend(rs, context);
140
+ const extendRootOptions = extendRoot.options;
141
+ // Extends declared while traversing a reference branch are tagged so the
142
+ // extend resolver can keep them non-side-effecting outside that branch.
143
+ const fromReferenceScope = (context.inReferenceImportScope
144
+ || extendRootOptions.referenceMode === true);
145
+ context.extends.push([target, resolvedSel, flag === ExtendFlag.All, extendRoot, this, docOrder, fromReferenceScope]);
146
+ return new Nil();
147
+ });
148
+ }
149
+ const sel = maybeSel;
150
+ if (sel instanceof Nil) {
151
+ return new Nil();
152
+ }
153
+ // Resolve ampersand to its current parent selector if needed (live resolution for extend)
154
+ let resolvedSel = sel;
155
+ if (isNode(sel, 'Ampersand')) {
156
+ const ampResolved = sel.getResolvedSelector();
157
+ if (ampResolved && !(ampResolved instanceof Nil)) {
158
+ resolvedSel = ampResolved;
159
+ }
160
+ }
161
+ // Prefer the current ruleset's full selector (includes implicit &) so extend merges the full
162
+ // selector (e.g. .issue-2586-somepage .content not just .content).
163
+ if (currentFrame && isNode(currentFrame, 'Ruleset')) {
164
+ const rs = currentFrame;
165
+ const fullSel = rs.value?.selector;
166
+ let usedParentListComposition = false;
167
+ if (!this.value.selector) {
168
+ const ownSel = rs.options?.ownSelector;
169
+ const parentFrame = context.rulesetFrames.at(-2);
170
+ const parentSel = (parentFrame && isNode(parentFrame, 'Ruleset')
171
+ ? parentFrame.value?.selector
172
+ : undefined);
173
+ if (ownSel
174
+ && parentSel
175
+ && !(parentSel instanceof Nil)
176
+ && isNode(parentSel, 'SelectorList')) {
177
+ const parentIs = PseudoSelector.create({
178
+ name: ':is',
179
+ arg: parentSel.copy(true)
180
+ });
181
+ parentIs.generated = true;
182
+ resolvedSel = ComplexSelector.create([
183
+ parentIs,
184
+ Combinator.create(' '),
185
+ ownSel.copy(true)
186
+ ]);
187
+ usedParentListComposition = true;
188
+ }
189
+ }
190
+ if (!this.value.selector && !usedParentListComposition) {
191
+ if (fullSel && !(fullSel instanceof Nil)) {
192
+ resolvedSel = fullSel;
193
+ }
194
+ else {
195
+ // Extend ran during selector eval (e.g. .content:extend(...)); current frame is the parent.
196
+ // Build full selector as parent + ' ' + resolvedSel (e.g. .issue-2586-somepage .content).
197
+ if (isNode(currentFrame, 'Ruleset')) {
198
+ const parentSel = currentFrame.value?.selector;
199
+ if (parentSel && !(parentSel instanceof Nil) && resolvedSel.valueOf() !== parentSel.valueOf()) {
200
+ resolvedSel = ComplexSelector.create([
201
+ parentSel.copy(true),
202
+ Combinator.create(' '),
203
+ resolvedSel.copy(true)
204
+ ]);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+ const beforeMaterialize = resolvedSel.valueOf();
211
+ resolvedSel = materializeImplicitAmpersands(resolvedSel, flag !== ExtendFlag.All);
212
+ const rs = currentFrame && isNode(currentFrame, 'Ruleset') ? currentFrame : undefined;
213
+ const docOrder = getDocumentOrderForExtend(rs, context);
214
+ const extendRootOptions = extendRoot.options;
215
+ // Same reference-scope tagging for sync path.
216
+ const fromReferenceScope = (context.inReferenceImportScope
217
+ || extendRootOptions.referenceMode === true);
218
+ context.extends.push([target, resolvedSel, flag === ExtendFlag.All, extendRoot, this, docOrder, fromReferenceScope]);
219
+ return new Nil();
220
+ }
221
+ }
222
+ function materializeImplicitAmpersands(selector, includeNonListImplicit) {
223
+ const materialize = (node) => {
224
+ if (isNode(node, 'Ampersand')) {
225
+ const amp = node;
226
+ const n = amp;
227
+ if (n.hasFlag(F_IMPLICIT_AMPERSAND)) {
228
+ const resolved = amp.getResolvedSelector();
229
+ if (resolved
230
+ && !(resolved instanceof Nil)
231
+ && (includeNonListImplicit || isNode(resolved, 'SelectorList'))) {
232
+ return materialize(resolved.copy(true));
233
+ }
234
+ }
235
+ return node.copy(true);
236
+ }
237
+ if (isNode(node, 'ComplexSelector')) {
238
+ const complex = node;
239
+ const parts = [];
240
+ for (const part of complex.value) {
241
+ if (isNode(part, 'Ampersand')) {
242
+ const amp = part;
243
+ const n = amp;
244
+ if (n.hasFlag(F_IMPLICIT_AMPERSAND)) {
245
+ const resolved = amp.getResolvedSelector();
246
+ if (resolved
247
+ && !(resolved instanceof Nil)
248
+ && (includeNonListImplicit || isNode(resolved, 'SelectorList'))) {
249
+ const repl = materialize(resolved.copy(true));
250
+ if (isNode(repl, 'ComplexSelector')) {
251
+ parts.push(...repl.value.map(x => x.copy(true)));
252
+ }
253
+ else {
254
+ parts.push(repl);
255
+ }
256
+ continue;
257
+ }
258
+ }
259
+ }
260
+ const repl = materialize(part);
261
+ parts.push(repl);
262
+ }
263
+ return ComplexSelector.create(parts).inherit(node);
264
+ }
265
+ const value = node.value;
266
+ if (Array.isArray(value)) {
267
+ const cloned = node.copy(true);
268
+ cloned.value = value.map(item => materialize(item));
269
+ return cloned;
270
+ }
271
+ return node.copy(true);
272
+ };
273
+ return materialize(selector);
274
+ }
275
+ /** Document order for extend: prefer parse location startOffset (source order), else assigned map, else push order (length). */
276
+ function getDocumentOrderForExtend(rs, context) {
277
+ if (!rs) {
278
+ return context.extends.length;
279
+ }
280
+ const loc = rs.location;
281
+ const fromLoc = Array.isArray(loc) && loc.length >= 1 && typeof loc[0] === 'number' ? loc[0] : undefined;
282
+ if (fromLoc !== undefined) {
283
+ return fromLoc;
284
+ }
285
+ const fromMap = context.documentOrderByRuleset?.get(rs);
286
+ if (fromMap !== undefined) {
287
+ return fromMap;
288
+ }
289
+ return context.extends.length;
290
+ }
291
+ export const extend = defineType(Extend, 'Extend');
292
+ //# sourceMappingURL=extend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend.js","sourceRoot":"","sources":["../../src/tree/extend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { type Context } from '../context.js';
2
+ import { Node, type LocationInfo, type TreeContext } from './node.js';
3
+ import type { Any, AnyRole } from './any.js';
4
+ import { Interpolated } from './interpolated.js';
5
+ import { type List } from './list.js';
6
+ import { type PrintOptions } from './util/print.js';
7
+ /**
8
+ * Stylesheet-defined function with a return value.
9
+ * Called `Func` to avoid conflict with the built-in `Function` class.
10
+ *
11
+ * Parsed by Sass/Jess-like languages (e.g. SCSS `@function`).
12
+ *
13
+ * Evaluation model:
14
+ * - Evaluate the function body in an isolated scope (like mixins) with bound params.
15
+ * - Then look up a declaration by name (default: `return`) and return its value.
16
+ */
17
+ export type FuncValue<Name extends AnyRole = 'name'> = {
18
+ name?: Any<Name> | Interpolated<Name>;
19
+ params?: List<Node>;
20
+ body: Node;
21
+ };
22
+ export type FuncOptions = {
23
+ /**
24
+ * Declaration name to look up after evaluating the body.
25
+ * Defaults to `'return'` (a `return: <expr>;` declaration).
26
+ */
27
+ returnName?: string;
28
+ };
29
+ export declare class Func extends Node<FuncValue, FuncOptions> {
30
+ type: "Func";
31
+ shortType: "fn";
32
+ constructor(value: FuncValue, options?: FuncOptions, location?: LocationInfo, treeContext?: TreeContext);
33
+ get nameKey(): string | undefined;
34
+ toTrimmedString(options?: PrintOptions): string;
35
+ /**
36
+ * Execute the function and return its looked-up value.
37
+ *
38
+ * We intentionally reuse the mixin-call machinery for argument binding & scoped evaluation
39
+ * to avoid duplicating complex param matching logic.
40
+ */
41
+ evalCall(context: Context, args?: List<Node>): Promise<Node>;
42
+ }
43
+ export declare const fn: (value: FuncValue | {
44
+ name?: string;
45
+ params?: List<Node>;
46
+ body: Node;
47
+ }, options?: FuncOptions, location?: LocationInfo, treeContext?: TreeContext) => Func;
48
+ //# sourceMappingURL=function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../src/tree/function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAyB,IAAI,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7F,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,KAAK,IAAI,EAAQ,MAAM,WAAW,CAAC;AAK5C,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AAErE;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,CAAC,IAAI,SAAS,OAAO,GAAG,MAAM,IAAI;IACrD,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,IAAK,SAAQ,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC;IACpD,IAAI,EAAG,MAAM,CAAU;IACvB,SAAS,EAAG,IAAI,CAAU;gBAEd,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,WAAW;IAMvG,IAAI,OAAO,IAAI,MAAM,GAAG,SAAS,CAMhC;IAEQ,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM;IAsBxD;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAE,IAAI,CAAC,IAAI,CAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAmC7E;AAED,eAAO,MAAM,EAAE,EAAqC,CAClD,KAAK,EAAE,SAAS,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EACrE,OAAO,CAAC,EAAE,WAAW,EACrB,QAAQ,CAAC,EAAE,YAAY,EACvB,WAAW,CAAC,EAAE,WAAW,KACtB,IAAI,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { defineType, F_VISIBLE, Node } from './node.js';
2
+ import { Rules } from './rules.js';
3
+ import { list } from './list.js';
4
+ import { Mixin } from './mixin.js';
5
+ import { getFunctionFromMixins } from './rules.js';
6
+ import { cast } from './util/cast.js';
7
+ import { getPrintOptions } from './util/print.js';
8
+ export class Func extends Node {
9
+ type = 'Func';
10
+ shortType = 'fn';
11
+ constructor(value, options, location, treeContext) {
12
+ super(value, options, location, treeContext);
13
+ // Like mixins/functions in source languages: not emitted directly.
14
+ this.removeFlag(F_VISIBLE);
15
+ }
16
+ get nameKey() {
17
+ const { name } = this.value;
18
+ if (!name) {
19
+ return undefined;
20
+ }
21
+ return String(name.valueOf());
22
+ }
23
+ toTrimmedString(options) {
24
+ options = getPrintOptions(options);
25
+ const w = options.writer;
26
+ const mark = w.mark();
27
+ const { name, params, body } = this.value;
28
+ w.add('$function', this);
29
+ w.add(' ');
30
+ w.add(name ? `${name}` : '@', this);
31
+ w.add('(');
32
+ if (params) {
33
+ params.toString(options);
34
+ }
35
+ w.add(') ');
36
+ // Body is always emitted as braced rules. If it's not a Rules node already, wrap it.
37
+ const bodyRules = body instanceof Rules ? body : Rules.create([body]);
38
+ bodyRules.toBraced(options);
39
+ return w.getSince(mark);
40
+ }
41
+ /**
42
+ * Execute the function and return its looked-up value.
43
+ *
44
+ * We intentionally reuse the mixin-call machinery for argument binding & scoped evaluation
45
+ * to avoid duplicating complex param matching logic.
46
+ */
47
+ async evalCall(context, args = list([])) {
48
+ const returnName = this.options?.returnName ?? 'return';
49
+ // Normalize body to a Rules node so it can be evaluated/scoped consistently.
50
+ const bodyNode = this.value.body;
51
+ const bodyRules = bodyNode instanceof Rules
52
+ ? bodyNode
53
+ : Rules.create([bodyNode]);
54
+ // Build a temporary anonymous mixin wrapper to observe the same param binding rules.
55
+ const mixinLike = new Mixin({ rules: bodyRules, params: this.value.params }, undefined, Array.isArray(this.location) && this.location.length === 6 ? this.location : undefined, this.treeContext);
56
+ // Ensure it participates in the same parent chain as this function definition.
57
+ if (this.parent) {
58
+ this.parent.adopt(mixinLike);
59
+ }
60
+ const fn = getFunctionFromMixins(mixinLike);
61
+ const evaluated = await fn.call(context, ...args.value.map(a => cast(a)));
62
+ if (!(evaluated instanceof Rules)) {
63
+ throw new Error(`Function ${this.nameKey ?? '<anonymous>'} must evaluate to rules`);
64
+ }
65
+ const decl = evaluated.find('declaration', returnName, 'Declaration', { searchParents: false });
66
+ if (!decl) {
67
+ throw new Error(`Function ${this.nameKey ?? '<anonymous>'} must return a value (missing "${returnName}: ...")`);
68
+ }
69
+ // Return the declaration's value (already in the correct scope).
70
+ return await decl.value.value.eval(context);
71
+ }
72
+ }
73
+ export const fn = defineType(Func, 'Func', 'fn');
74
+ //# sourceMappingURL=function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/tree/function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { Node } from './node.js';
2
+ import { type Quoted } from './quoted.js';
3
+ import { type PrintOptions } from './util/print.js';
4
+ /**
5
+ * Imports of TS/JS ESM modules.
6
+ *
7
+ * `@-use 'foo.js' as foo;`
8
+ */
9
+ type JsImportSpecifier = string | [string, string] | {
10
+ name: string;
11
+ alias?: string;
12
+ };
13
+ export type JsImportOptions = {
14
+ /** e.g. `@-use 'foo.js' as foo` sets namespace to `foo` */
15
+ namespace?: string;
16
+ /**
17
+ * - In array,
18
+ * - string is a plain import identifier
19
+ * - [string, string] is { [identifier1] as [identifier2] }
20
+ */
21
+ imports?: string | JsImportSpecifier[];
22
+ };
23
+ export type JsImportValue = {
24
+ path: Quoted;
25
+ imports?: JsImportSpecifier[];
26
+ };
27
+ export declare class JsImport extends Node<JsImportValue, JsImportOptions> {
28
+ type: "JsImport";
29
+ shortType: "js";
30
+ constructor(value: JsImportValue, options?: JsImportOptions, location?: any, treeContext?: any);
31
+ toTrimmedString(options?: PrintOptions): string;
32
+ }
33
+ export declare const js: (value?: any, options?: any, location?: any) => never;
34
+ export {};
35
+ //# sourceMappingURL=import-js.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-js.d.ts","sourceRoot":"","sources":["../../src/tree/import-js.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,IAAI,EAAc,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,iBAAiB,CAAC;AAErE;;;;GAIG;AAEH,KAAK,iBAAiB,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,MAAM,MAAM,eAAe,GAAG;IAC5B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;MAIE;IACF,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC/B,CAAC;AAEF,qBAAa,QAAS,SAAQ,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC;IAChE,IAAI,EAAG,UAAU,CAAU;IAC3B,SAAS,EAAG,IAAI,CAAU;gBAEd,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,GAAG;IAMrF,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY;CAiChD;AAED,eAAO,MAAM,EAAE,uDAAwD,CAAC"}
@@ -0,0 +1,45 @@
1
+ import { F_MAY_ASYNC, F_NON_STATIC, Node, defineType } from './node.js';
2
+ import { getPrintOptions } from './util/print.js';
3
+ export class JsImport extends Node {
4
+ type = 'JsImport';
5
+ shortType = 'js';
6
+ constructor(value, options, location, treeContext) {
7
+ super(value, options, location, treeContext);
8
+ // JS imports are always non-static and may be async
9
+ this.addFlags(F_MAY_ASYNC, F_NON_STATIC);
10
+ }
11
+ toTrimmedString(options) {
12
+ options = getPrintOptions(options);
13
+ const w = options.writer;
14
+ const mark = w.mark();
15
+ const { path } = this.value;
16
+ const { namespace } = this.options;
17
+ const imports = this.value.imports ?? (Array.isArray(this.options.imports) ? this.options.imports : undefined);
18
+ w.add('@-use ');
19
+ path.toString(options);
20
+ let explicitNamespace = namespace;
21
+ if (!explicitNamespace && imports?.length) {
22
+ const nsSpec = imports.find((specifier) => {
23
+ if (typeof specifier === 'string') {
24
+ return false;
25
+ }
26
+ if (Array.isArray(specifier)) {
27
+ return specifier[0] === '*';
28
+ }
29
+ return specifier.name === '*';
30
+ });
31
+ if (nsSpec) {
32
+ explicitNamespace = Array.isArray(nsSpec)
33
+ ? nsSpec[1]
34
+ : (typeof nsSpec === 'string' ? undefined : nsSpec.alias);
35
+ }
36
+ }
37
+ if (explicitNamespace) {
38
+ w.add(` as ${explicitNamespace}`);
39
+ }
40
+ w.add(';');
41
+ return w.getSince(mark);
42
+ }
43
+ }
44
+ export const js = defineType(JsImport, 'JsImport', 'js');
45
+ //# sourceMappingURL=import-js.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-js.js","sourceRoot":"","sources":["../../src/tree/import-js.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAExE,OAAO,EAAqB,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA0BrE,MAAM,OAAO,QAAS,SAAQ,IAAoC;IAChE,IAAI,GAAG,UAAmB,CAAC;IAC3B,SAAS,GAAG,IAAa,CAAC;IAE1B,YAAY,KAAoB,EAAE,OAAyB,EAAE,QAAc,EAAE,WAAiB;QAC5F,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC7C,oDAAoD;QACpD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3C,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,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAE/G,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,iBAAiB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,iBAAiB,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;gBACxC,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC7B,OAAO,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;gBAC9B,CAAC;gBACD,OAAO,SAAS,CAAC,IAAI,KAAK,GAAG,CAAC;YAChC,CAAC,CAAC,CAAC;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;oBACvC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACX,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QACD,IAAI,iBAAiB,EAAE,CAAC;YACtB,CAAC,CAAC,GAAG,CAAC,OAAO,iBAAiB,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACX,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAAgB,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC"}