less 4.5.1 → 4.6.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 (340) hide show
  1. package/README.md +70 -5
  2. package/bin/lessc +37 -23
  3. package/dist/less.js +14501 -11745
  4. package/dist/less.min.js +4 -4
  5. package/dist/less.min.js.map +1 -1
  6. package/index.cjs +41 -0
  7. package/lib/less/constants.js +5 -7
  8. package/lib/less/contexts.js +71 -55
  9. package/lib/less/data/colors.js +150 -153
  10. package/lib/less/data/index.js +4 -7
  11. package/lib/less/data/unit-conversions.js +2 -5
  12. package/lib/less/default-options.js +36 -26
  13. package/lib/less/deprecation.js +67 -0
  14. package/lib/less/environment/abstract-file-manager.js +62 -50
  15. package/lib/less/environment/abstract-plugin-loader.js +69 -46
  16. package/lib/less/environment/environment-api.ts +21 -0
  17. package/lib/less/environment/environment.js +34 -30
  18. package/lib/less/environment/file-manager-api.ts +77 -0
  19. package/lib/less/functions/boolean.js +13 -13
  20. package/lib/less/functions/color-blending.js +39 -31
  21. package/lib/less/functions/color.js +153 -137
  22. package/lib/less/functions/data-uri.js +73 -64
  23. package/lib/less/functions/default.js +9 -11
  24. package/lib/less/functions/function-caller.js +35 -34
  25. package/lib/less/functions/function-registry.js +16 -17
  26. package/lib/less/functions/index.js +33 -33
  27. package/lib/less/functions/list.js +88 -75
  28. package/lib/less/functions/math-helper.js +8 -11
  29. package/lib/less/functions/math.js +21 -21
  30. package/lib/less/functions/number.js +42 -53
  31. package/lib/less/functions/string.js +18 -22
  32. package/lib/less/functions/style.js +21 -20
  33. package/lib/less/functions/svg.js +83 -82
  34. package/lib/less/functions/types.js +28 -32
  35. package/lib/less/import-manager.js +73 -64
  36. package/lib/less/index.js +65 -65
  37. package/lib/less/less-error.js +63 -45
  38. package/lib/less/logger.js +11 -14
  39. package/lib/less/parse-tree.js +52 -53
  40. package/lib/less/parse.js +44 -44
  41. package/lib/less/parser/parser-input.js +151 -113
  42. package/lib/less/parser/parser.js +864 -658
  43. package/lib/less/plugin-manager.js +57 -46
  44. package/lib/less/render.js +17 -23
  45. package/lib/less/source-map-builder.js +52 -43
  46. package/lib/less/source-map-output.js +56 -43
  47. package/lib/less/transform-tree.js +40 -30
  48. package/lib/less/tree/anonymous.js +52 -28
  49. package/lib/less/tree/assignment.js +44 -27
  50. package/lib/less/tree/atrule-syntax.js +4 -6
  51. package/lib/less/tree/atrule.js +247 -140
  52. package/lib/less/tree/attribute.js +55 -24
  53. package/lib/less/tree/call.js +70 -42
  54. package/lib/less/tree/color.js +194 -145
  55. package/lib/less/tree/combinator.js +31 -21
  56. package/lib/less/tree/comment.js +44 -23
  57. package/lib/less/tree/condition.js +61 -36
  58. package/lib/less/tree/container.js +90 -34
  59. package/lib/less/tree/debug-info.js +28 -15
  60. package/lib/less/tree/declaration.js +97 -52
  61. package/lib/less/tree/detached-ruleset.js +42 -24
  62. package/lib/less/tree/dimension.js +127 -71
  63. package/lib/less/tree/element.js +82 -52
  64. package/lib/less/tree/expression.js +75 -50
  65. package/lib/less/tree/extend.js +71 -42
  66. package/lib/less/tree/import.js +184 -110
  67. package/lib/less/tree/index.js +52 -81
  68. package/lib/less/tree/javascript.js +43 -32
  69. package/lib/less/tree/js-eval-node.js +46 -32
  70. package/lib/less/tree/keyword.js +25 -17
  71. package/lib/less/tree/media.js +77 -35
  72. package/lib/less/tree/merge-rules.js +47 -0
  73. package/lib/less/tree/mixin-call.js +181 -98
  74. package/lib/less/tree/mixin-definition.js +211 -117
  75. package/lib/less/tree/namespace-value.js +63 -44
  76. package/lib/less/tree/negative.js +34 -21
  77. package/lib/less/tree/nested-at-rule.js +149 -66
  78. package/lib/less/tree/node.js +225 -90
  79. package/lib/less/tree/operation.js +59 -34
  80. package/lib/less/tree/paren.js +34 -17
  81. package/lib/less/tree/property.js +66 -35
  82. package/lib/less/tree/query-in-parens.js +52 -60
  83. package/lib/less/tree/quoted.js +93 -44
  84. package/lib/less/tree/ruleset.js +632 -318
  85. package/lib/less/tree/selector.js +151 -77
  86. package/lib/less/tree/unicode-descriptor.js +14 -12
  87. package/lib/less/tree/unit.js +111 -63
  88. package/lib/less/tree/url.js +62 -38
  89. package/lib/less/tree/value.js +50 -34
  90. package/lib/less/tree/variable-call.js +47 -30
  91. package/lib/less/tree/variable.js +53 -31
  92. package/lib/less/utils.js +44 -47
  93. package/lib/less/visitors/extend-visitor.js +233 -172
  94. package/lib/less/visitors/import-sequencer.js +24 -24
  95. package/lib/less/visitors/import-visitor.js +62 -52
  96. package/lib/less/visitors/index.js +14 -17
  97. package/lib/less/visitors/join-selector-visitor.js +40 -37
  98. package/lib/less/visitors/set-tree-visibility-visitor.js +32 -18
  99. package/lib/less/visitors/to-css-visitor.js +135 -128
  100. package/lib/less/visitors/visitor.js +60 -45
  101. package/lib/less-browser/add-default-options.js +23 -13
  102. package/lib/less-browser/bootstrap.js +23 -17
  103. package/lib/less-browser/browser.js +24 -21
  104. package/lib/less-browser/cache.js +17 -19
  105. package/lib/less-browser/error-reporting.js +52 -44
  106. package/lib/less-browser/file-manager.js +52 -42
  107. package/lib/less-browser/image-size.js +12 -12
  108. package/lib/less-browser/index.js +131 -105
  109. package/lib/less-browser/log-listener.js +30 -31
  110. package/lib/less-browser/plugin-loader.js +10 -10
  111. package/lib/less-browser/utils.js +19 -21
  112. package/lib/less-node/environment.js +32 -8
  113. package/lib/less-node/file-manager.js +62 -45
  114. package/lib/less-node/fs.js +11 -8
  115. package/lib/less-node/image-size.js +40 -31
  116. package/lib/less-node/index.js +28 -19
  117. package/lib/less-node/lessc-helper.js +20 -21
  118. package/lib/less-node/plugin-loader.js +35 -27
  119. package/lib/less-node/url-file-manager.js +33 -31
  120. package/package.json +29 -18
  121. package/.eslintignore +0 -6
  122. package/.eslintrc.js +0 -63
  123. package/Gruntfile.js +0 -403
  124. package/bower.json +0 -22
  125. package/lib/less/constants.js.map +0 -1
  126. package/lib/less/contexts.js.map +0 -1
  127. package/lib/less/data/colors.js.map +0 -1
  128. package/lib/less/data/index.js.map +0 -1
  129. package/lib/less/data/unit-conversions.js.map +0 -1
  130. package/lib/less/default-options.js.map +0 -1
  131. package/lib/less/environment/abstract-file-manager.js.map +0 -1
  132. package/lib/less/environment/abstract-plugin-loader.js.map +0 -1
  133. package/lib/less/environment/environment-api.js +0 -3
  134. package/lib/less/environment/environment-api.js.map +0 -1
  135. package/lib/less/environment/environment.js.map +0 -1
  136. package/lib/less/environment/file-manager-api.js +0 -3
  137. package/lib/less/environment/file-manager-api.js.map +0 -1
  138. package/lib/less/functions/boolean.js.map +0 -1
  139. package/lib/less/functions/color-blending.js.map +0 -1
  140. package/lib/less/functions/color.js.map +0 -1
  141. package/lib/less/functions/data-uri.js.map +0 -1
  142. package/lib/less/functions/default.js.map +0 -1
  143. package/lib/less/functions/function-caller.js.map +0 -1
  144. package/lib/less/functions/function-registry.js.map +0 -1
  145. package/lib/less/functions/index.js.map +0 -1
  146. package/lib/less/functions/list.js.map +0 -1
  147. package/lib/less/functions/math-helper.js.map +0 -1
  148. package/lib/less/functions/math.js.map +0 -1
  149. package/lib/less/functions/number.js.map +0 -1
  150. package/lib/less/functions/string.js.map +0 -1
  151. package/lib/less/functions/style.js.map +0 -1
  152. package/lib/less/functions/svg.js.map +0 -1
  153. package/lib/less/functions/types.js.map +0 -1
  154. package/lib/less/import-manager.js.map +0 -1
  155. package/lib/less/index.js.map +0 -1
  156. package/lib/less/less-error.js.map +0 -1
  157. package/lib/less/logger.js.map +0 -1
  158. package/lib/less/parse-tree.js.map +0 -1
  159. package/lib/less/parse.js.map +0 -1
  160. package/lib/less/parser/parser-input.js.map +0 -1
  161. package/lib/less/parser/parser.js.map +0 -1
  162. package/lib/less/plugin-manager.js.map +0 -1
  163. package/lib/less/render.js.map +0 -1
  164. package/lib/less/source-map-builder.js.map +0 -1
  165. package/lib/less/source-map-output.js.map +0 -1
  166. package/lib/less/transform-tree.js.map +0 -1
  167. package/lib/less/tree/anonymous.js.map +0 -1
  168. package/lib/less/tree/assignment.js.map +0 -1
  169. package/lib/less/tree/atrule-syntax.js.map +0 -1
  170. package/lib/less/tree/atrule.js.map +0 -1
  171. package/lib/less/tree/attribute.js.map +0 -1
  172. package/lib/less/tree/call.js.map +0 -1
  173. package/lib/less/tree/color.js.map +0 -1
  174. package/lib/less/tree/combinator.js.map +0 -1
  175. package/lib/less/tree/comment.js.map +0 -1
  176. package/lib/less/tree/condition.js.map +0 -1
  177. package/lib/less/tree/container.js.map +0 -1
  178. package/lib/less/tree/debug-info.js.map +0 -1
  179. package/lib/less/tree/declaration.js.map +0 -1
  180. package/lib/less/tree/detached-ruleset.js.map +0 -1
  181. package/lib/less/tree/dimension.js.map +0 -1
  182. package/lib/less/tree/element.js.map +0 -1
  183. package/lib/less/tree/expression.js.map +0 -1
  184. package/lib/less/tree/extend.js.map +0 -1
  185. package/lib/less/tree/import.js.map +0 -1
  186. package/lib/less/tree/index.js.map +0 -1
  187. package/lib/less/tree/javascript.js.map +0 -1
  188. package/lib/less/tree/js-eval-node.js.map +0 -1
  189. package/lib/less/tree/keyword.js.map +0 -1
  190. package/lib/less/tree/media.js.map +0 -1
  191. package/lib/less/tree/mixin-call.js.map +0 -1
  192. package/lib/less/tree/mixin-definition.js.map +0 -1
  193. package/lib/less/tree/namespace-value.js.map +0 -1
  194. package/lib/less/tree/negative.js.map +0 -1
  195. package/lib/less/tree/nested-at-rule.js.map +0 -1
  196. package/lib/less/tree/node.js.map +0 -1
  197. package/lib/less/tree/operation.js.map +0 -1
  198. package/lib/less/tree/paren.js.map +0 -1
  199. package/lib/less/tree/property.js.map +0 -1
  200. package/lib/less/tree/query-in-parens.js.map +0 -1
  201. package/lib/less/tree/quoted.js.map +0 -1
  202. package/lib/less/tree/ruleset.js.map +0 -1
  203. package/lib/less/tree/selector.js.map +0 -1
  204. package/lib/less/tree/unicode-descriptor.js.map +0 -1
  205. package/lib/less/tree/unit.js.map +0 -1
  206. package/lib/less/tree/url.js.map +0 -1
  207. package/lib/less/tree/value.js.map +0 -1
  208. package/lib/less/tree/variable-call.js.map +0 -1
  209. package/lib/less/tree/variable.js.map +0 -1
  210. package/lib/less/utils.js.map +0 -1
  211. package/lib/less/visitors/extend-visitor.js.map +0 -1
  212. package/lib/less/visitors/import-sequencer.js.map +0 -1
  213. package/lib/less/visitors/import-visitor.js.map +0 -1
  214. package/lib/less/visitors/index.js.map +0 -1
  215. package/lib/less/visitors/join-selector-visitor.js.map +0 -1
  216. package/lib/less/visitors/set-tree-visibility-visitor.js.map +0 -1
  217. package/lib/less/visitors/to-css-visitor.js.map +0 -1
  218. package/lib/less/visitors/visitor.js.map +0 -1
  219. package/lib/less-browser/add-default-options.js.map +0 -1
  220. package/lib/less-browser/bootstrap.js.map +0 -1
  221. package/lib/less-browser/browser.js.map +0 -1
  222. package/lib/less-browser/cache.js.map +0 -1
  223. package/lib/less-browser/error-reporting.js.map +0 -1
  224. package/lib/less-browser/file-manager.js.map +0 -1
  225. package/lib/less-browser/image-size.js.map +0 -1
  226. package/lib/less-browser/index.js.map +0 -1
  227. package/lib/less-browser/log-listener.js.map +0 -1
  228. package/lib/less-browser/plugin-loader.js.map +0 -1
  229. package/lib/less-browser/utils.js.map +0 -1
  230. package/lib/less-node/environment.js.map +0 -1
  231. package/lib/less-node/file-manager.js.map +0 -1
  232. package/lib/less-node/fs.js.map +0 -1
  233. package/lib/less-node/image-size.js.map +0 -1
  234. package/lib/less-node/index.js.map +0 -1
  235. package/lib/less-node/lessc-helper.js.map +0 -1
  236. package/lib/less-node/plugin-loader.js.map +0 -1
  237. package/lib/less-node/url-file-manager.js.map +0 -1
  238. package/scripts/coverage-lines.js +0 -207
  239. package/scripts/coverage-report.js +0 -158
  240. package/scripts/postinstall.js +0 -61
  241. package/test/.eslintrc.json +0 -9
  242. package/test/README.md +0 -3
  243. package/test/browser/common.js +0 -251
  244. package/test/browser/css/global-vars/simple.css +0 -3
  245. package/test/browser/css/modify-vars/simple.css +0 -8
  246. package/test/browser/css/plugin/plugin.css +0 -3
  247. package/test/browser/css/postProcessor/postProcessor.css +0 -4
  248. package/test/browser/css/relative-urls/urls.css +0 -36
  249. package/test/browser/css/rewrite-urls/urls.css +0 -36
  250. package/test/browser/css/rootpath/urls.css +0 -35
  251. package/test/browser/css/rootpath-relative/urls.css +0 -35
  252. package/test/browser/css/rootpath-rewrite-urls/urls.css +0 -35
  253. package/test/browser/css/urls.css +0 -54
  254. package/test/browser/generator/benchmark.config.js +0 -50
  255. package/test/browser/generator/generate.js +0 -78
  256. package/test/browser/generator/runner.config.js +0 -184
  257. package/test/browser/generator/runner.js +0 -2
  258. package/test/browser/generator/template.js +0 -104
  259. package/test/browser/generator/utils.js +0 -14
  260. package/test/browser/less/console-errors/test-error.less +0 -3
  261. package/test/browser/less/console-errors/test-error.txt +0 -2
  262. package/test/browser/less/errors/image-height-error.less +0 -3
  263. package/test/browser/less/errors/image-height-error.txt +0 -4
  264. package/test/browser/less/errors/image-size-error.less +0 -3
  265. package/test/browser/less/errors/image-size-error.txt +0 -4
  266. package/test/browser/less/errors/image-width-error.less +0 -3
  267. package/test/browser/less/errors/image-width-error.txt +0 -4
  268. package/test/browser/less/global-vars/simple.less +0 -3
  269. package/test/browser/less/imports/urls.less +0 -4
  270. package/test/browser/less/imports/urls2.less +0 -4
  271. package/test/browser/less/modify-vars/imports/simple2.less +0 -4
  272. package/test/browser/less/modify-vars/simple.less +0 -8
  273. package/test/browser/less/nested-gradient-with-svg-gradient/mixin-consumer.less +0 -5
  274. package/test/browser/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less +0 -15
  275. package/test/browser/less/plugin/plugin.js +0 -4
  276. package/test/browser/less/plugin/plugin.less +0 -4
  277. package/test/browser/less/postProcessor/postProcessor.less +0 -4
  278. package/test/browser/less/relative-urls/urls.less +0 -34
  279. package/test/browser/less/rewrite-urls/urls.less +0 -34
  280. package/test/browser/less/rootpath/urls.less +0 -33
  281. package/test/browser/less/rootpath-relative/urls.less +0 -33
  282. package/test/browser/less/rootpath-rewrite-urls/urls.less +0 -33
  283. package/test/browser/less/urls.less +0 -62
  284. package/test/browser/runner-VisitorPlugin-options.js +0 -3
  285. package/test/browser/runner-VisitorPlugin.js +0 -3
  286. package/test/browser/runner-browser-options.js +0 -51
  287. package/test/browser/runner-browser-spec.js +0 -12
  288. package/test/browser/runner-console-errors.js +0 -5
  289. package/test/browser/runner-errors-options.js +0 -6
  290. package/test/browser/runner-errors-spec.js +0 -3
  291. package/test/browser/runner-filemanagerPlugin-options.js +0 -5
  292. package/test/browser/runner-filemanagerPlugin.js +0 -3
  293. package/test/browser/runner-global-vars-options.js +0 -7
  294. package/test/browser/runner-global-vars-spec.js +0 -3
  295. package/test/browser/runner-main-options.js +0 -17
  296. package/test/browser/runner-main-spec.js +0 -7
  297. package/test/browser/runner-modify-vars-options.js +0 -5
  298. package/test/browser/runner-modify-vars-spec.js +0 -33
  299. package/test/browser/runner-no-js-errors-options.js +0 -4
  300. package/test/browser/runner-no-js-errors-spec.js +0 -3
  301. package/test/browser/runner-postProcessorPlugin-options.js +0 -3
  302. package/test/browser/runner-postProcessorPlugin.js +0 -3
  303. package/test/browser/runner-preProcessorPlugin-options.js +0 -3
  304. package/test/browser/runner-preProcessorPlugin.js +0 -3
  305. package/test/browser/runner-production-options.js +0 -3
  306. package/test/browser/runner-production-spec.js +0 -5
  307. package/test/browser/runner-relative-urls-options.js +0 -3
  308. package/test/browser/runner-relative-urls-spec.js +0 -3
  309. package/test/browser/runner-rewrite-urls-options.js +0 -3
  310. package/test/browser/runner-rewrite-urls-spec.js +0 -3
  311. package/test/browser/runner-rootpath-options.js +0 -3
  312. package/test/browser/runner-rootpath-relative-options.js +0 -4
  313. package/test/browser/runner-rootpath-relative-spec.js +0 -3
  314. package/test/browser/runner-rootpath-rewrite-urls-options.js +0 -4
  315. package/test/browser/runner-rootpath-rewrite-urls-spec.js +0 -3
  316. package/test/browser/runner-rootpath-spec.js +0 -3
  317. package/test/browser/runner-strict-units-options.js +0 -5
  318. package/test/browser/runner-strict-units-spec.js +0 -3
  319. package/test/index.js +0 -307
  320. package/test/less-test.js +0 -984
  321. package/test/mocha-playwright/runner.js +0 -210
  322. package/test/modify-vars.js +0 -28
  323. package/test/plugins/filemanager/index.js +0 -19
  324. package/test/plugins/postprocess/index.js +0 -14
  325. package/test/plugins/preprocess/index.js +0 -19
  326. package/test/plugins/visitor/index.js +0 -24
  327. package/test/sourcemaps/basic.json +0 -1
  328. package/test/sourcemaps/comprehensive.json +0 -1
  329. package/test/sourcemaps/custom-props.json +0 -1
  330. package/test/sourcemaps/index.html +0 -17
  331. package/test/sourcemaps/sourcemaps-basepath.json +0 -1
  332. package/test/sourcemaps/sourcemaps-include-source.json +0 -1
  333. package/test/sourcemaps/sourcemaps-rootpath.json +0 -1
  334. package/test/sourcemaps/sourcemaps-url.json +0 -1
  335. package/test/sourcemaps-disable-annotation/basic.json +0 -1
  336. package/test/sourcemaps-variable-selector/basic.json +0 -1
  337. package/test/test-es6.ts +0 -17
  338. package/test.less +0 -1
  339. package/tsconfig.build.json +0 -7
  340. package/tsconfig.json +0 -21
@@ -1,46 +1,73 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var node_1 = tslib_1.__importDefault(require("./node"));
5
- var selector_1 = tslib_1.__importDefault(require("./selector"));
6
- var Extend = function (selector, option, index, currentFileInfo, visibilityInfo) {
7
- this.selector = selector;
8
- this.option = option;
9
- this.object_id = Extend.next_id++;
10
- this.parent_ids = [this.object_id];
11
- this._index = index;
12
- this._fileInfo = currentFileInfo;
13
- this.copyVisibilityInfo(visibilityInfo);
14
- this.allowRoot = true;
15
- switch (option) {
16
- case '!all':
17
- case 'all':
18
- this.allowBefore = true;
19
- this.allowAfter = true;
20
- break;
21
- default:
22
- this.allowBefore = false;
23
- this.allowAfter = false;
24
- break;
1
+ // @ts-check
2
+ /** @import { EvalContext, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */
3
+ import Node from './node.js';
4
+ import Selector from './selector.js';
5
+
6
+ class Extend extends Node {
7
+ get type() { return 'Extend'; }
8
+
9
+ /**
10
+ * @param {Selector} selector
11
+ * @param {string} option
12
+ * @param {number} index
13
+ * @param {FileInfo} currentFileInfo
14
+ * @param {VisibilityInfo} [visibilityInfo]
15
+ */
16
+ constructor(selector, option, index, currentFileInfo, visibilityInfo) {
17
+ super();
18
+ this.selector = selector;
19
+ this.option = option;
20
+ this.object_id = Extend.next_id++;
21
+ /** @type {number[]} */
22
+ this.parent_ids = [this.object_id];
23
+ this._index = index;
24
+ this._fileInfo = currentFileInfo;
25
+ this.copyVisibilityInfo(visibilityInfo);
26
+ /** @type {boolean} */
27
+ this.allowRoot = true;
28
+ /** @type {boolean} */
29
+ this.allowBefore = false;
30
+ /** @type {boolean} */
31
+ this.allowAfter = false;
32
+
33
+ switch (option) {
34
+ case '!all':
35
+ case 'all':
36
+ this.allowBefore = true;
37
+ this.allowAfter = true;
38
+ break;
39
+ default:
40
+ this.allowBefore = false;
41
+ this.allowAfter = false;
42
+ break;
43
+ }
44
+ this.setParent(this.selector, this);
45
+ }
46
+
47
+ /** @param {TreeVisitor} visitor */
48
+ accept(visitor) {
49
+ this.selector = /** @type {Selector} */ (visitor.visit(this.selector));
25
50
  }
26
- this.setParent(this.selector, this);
27
- };
28
- Extend.prototype = Object.assign(new node_1.default(), {
29
- type: 'Extend',
30
- accept: function (visitor) {
31
- this.selector = visitor.visit(this.selector);
32
- },
33
- eval: function (context) {
34
- return new Extend(this.selector.eval(context), this.option, this.getIndex(), this.fileInfo(), this.visibilityInfo());
35
- },
51
+
52
+ /** @param {EvalContext} context */
53
+ eval(context) {
54
+ return new Extend(/** @type {Selector} */ (this.selector.eval(context)), this.option, this.getIndex(), this.fileInfo(), this.visibilityInfo());
55
+ }
56
+
36
57
  // remove when Nodes have JSDoc types
37
58
  // eslint-disable-next-line no-unused-vars
38
- clone: function (context) {
59
+ /** @param {EvalContext} [context] */
60
+ clone(context) {
39
61
  return new Extend(this.selector, this.option, this.getIndex(), this.fileInfo(), this.visibilityInfo());
40
- },
62
+ }
63
+
41
64
  // it concatenates (joins) all selectors in selector array
42
- findSelfSelectors: function (selectors) {
43
- var selfElements = [], i, selectorElements;
65
+ /** @param {Selector[]} selectors */
66
+ findSelfSelectors(selectors) {
67
+ /** @type {import('./element.js').default[]} */
68
+ let selfElements = [];
69
+ let i, selectorElements;
70
+
44
71
  for (i = 0; i < selectors.length; i++) {
45
72
  selectorElements = selectors[i].elements;
46
73
  // duplicate the logic in genCSS function inside the selector node.
@@ -50,10 +77,12 @@ Extend.prototype = Object.assign(new node_1.default(), {
50
77
  }
51
78
  selfElements = selfElements.concat(selectors[i].elements);
52
79
  }
53
- this.selfSelectors = [new selector_1.default(selfElements)];
80
+
81
+ /** @type {Selector[]} */
82
+ this.selfSelectors = [new Selector(selfElements)];
54
83
  this.selfSelectors[0].copyVisibilityInfo(this.visibilityInfo());
55
84
  }
56
- });
85
+ }
86
+
57
87
  Extend.next_id = 0;
58
- exports.default = Extend;
59
- //# sourceMappingURL=extend.js.map
88
+ export default Extend;
@@ -1,15 +1,23 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var node_1 = tslib_1.__importDefault(require("./node"));
5
- var media_1 = tslib_1.__importDefault(require("./media"));
6
- var url_1 = tslib_1.__importDefault(require("./url"));
7
- var quoted_1 = tslib_1.__importDefault(require("./quoted"));
8
- var ruleset_1 = tslib_1.__importDefault(require("./ruleset"));
9
- var anonymous_1 = tslib_1.__importDefault(require("./anonymous"));
10
- var utils = tslib_1.__importStar(require("../utils"));
11
- var less_error_1 = tslib_1.__importDefault(require("../less-error"));
12
- var expression_1 = tslib_1.__importDefault(require("./expression"));
1
+ // @ts-check
2
+ /** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */
3
+ import Node from './node.js';
4
+ import Media from './media.js';
5
+ import URL from './url.js';
6
+ import Quoted from './quoted.js';
7
+ import Ruleset from './ruleset.js';
8
+ import Anonymous from './anonymous.js';
9
+ import Expression from './expression.js';
10
+ import * as utils from '../utils.js';
11
+ import LessError from '../less-error.js';
12
+
13
+ /**
14
+ * @typedef {object} ImportOptions
15
+ * @property {boolean} [less]
16
+ * @property {boolean} [inline]
17
+ * @property {boolean} [isPlugin]
18
+ * @property {boolean} [reference]
19
+ */
20
+
13
21
  //
14
22
  // CSS @import node
15
23
  //
@@ -22,38 +30,73 @@ var expression_1 = tslib_1.__importDefault(require("./expression"));
22
30
  // `import,push`, we also pass it a callback, which it'll call once
23
31
  // the file has been fetched, and parsed.
24
32
  //
25
- var Import = function (path, features, options, index, currentFileInfo, visibilityInfo) {
26
- this.options = options;
27
- this._index = index;
28
- this._fileInfo = currentFileInfo;
29
- this.path = path;
30
- this.features = features;
31
- this.allowRoot = true;
32
- if (this.options.less !== undefined || this.options.inline) {
33
- this.css = !this.options.less || this.options.inline;
34
- }
35
- else {
36
- var pathValue = this.getPath();
37
- if (pathValue && /[#.&?]css([?;].*)?$/.test(pathValue)) {
38
- this.css = true;
33
+ class Import extends Node {
34
+ get type() { return 'Import'; }
35
+
36
+ /**
37
+ * @param {Node} path
38
+ * @param {Node | null} features
39
+ * @param {ImportOptions} options
40
+ * @param {number} index
41
+ * @param {FileInfo} [currentFileInfo]
42
+ * @param {VisibilityInfo} [visibilityInfo]
43
+ */
44
+ constructor(path, features, options, index, currentFileInfo, visibilityInfo) {
45
+ super();
46
+ /** @type {ImportOptions} */
47
+ this.options = options;
48
+ this._index = index;
49
+ this._fileInfo = currentFileInfo;
50
+ this.path = path;
51
+ /** @type {Node | null} */
52
+ this.features = features;
53
+ /** @type {boolean} */
54
+ this.allowRoot = true;
55
+
56
+ /** @type {boolean | undefined} */
57
+ this.css = undefined;
58
+ /** @type {boolean | undefined} */
59
+ this.layerCss = undefined;
60
+ /** @type {(Ruleset & { imports?: object, filename?: string, functions?: object, functionRegistry?: { addMultiple: (fns: object) => void } }) | undefined} */
61
+ this.root = undefined;
62
+ /** @type {string | undefined} */
63
+ this.importedFilename = undefined;
64
+ /** @type {boolean | (() => boolean) | undefined} */
65
+ this.skip = undefined;
66
+ /** @type {{ message: string, index: number, filename: string } | undefined} */
67
+ this.error = undefined;
68
+
69
+ if (this.options.less !== undefined || this.options.inline) {
70
+ this.css = !this.options.less || this.options.inline;
71
+ } else {
72
+ const pathValue = this.getPath();
73
+ if (pathValue && /[#.&?]css([?;].*)?$/.test(pathValue)) {
74
+ this.css = true;
75
+ }
76
+ }
77
+ this.copyVisibilityInfo(visibilityInfo);
78
+ if (this.features) {
79
+ this.setParent(this.features, /** @type {Node} */ (this));
39
80
  }
81
+ this.setParent(this.path, /** @type {Node} */ (this));
40
82
  }
41
- this.copyVisibilityInfo(visibilityInfo);
42
- this.setParent(this.features, this);
43
- this.setParent(this.path, this);
44
- };
45
- Import.prototype = Object.assign(new node_1.default(), {
46
- type: 'Import',
47
- accept: function (visitor) {
83
+
84
+ /** @param {TreeVisitor} visitor */
85
+ accept(visitor) {
48
86
  if (this.features) {
49
87
  this.features = visitor.visit(this.features);
50
88
  }
51
89
  this.path = visitor.visit(this.path);
52
90
  if (!this.options.isPlugin && !this.options.inline && this.root) {
53
- this.root = visitor.visit(this.root);
91
+ this.root = /** @type {Ruleset} */ (visitor.visit(this.root));
54
92
  }
55
- },
56
- genCSS: function (context, output) {
93
+ }
94
+
95
+ /**
96
+ * @param {EvalContext} context
97
+ * @param {CSSOutput} output
98
+ */
99
+ genCSS(context, output) {
57
100
  if (this.css && this.path._fileInfo.reference === undefined) {
58
101
  output.add('@import ', this._fileInfo, this._index);
59
102
  this.path.genCSS(context, output);
@@ -63,79 +106,105 @@ Import.prototype = Object.assign(new node_1.default(), {
63
106
  }
64
107
  output.add(';');
65
108
  }
66
- },
67
- getPath: function () {
68
- return (this.path instanceof url_1.default) ?
69
- this.path.value.value : this.path.value;
70
- },
71
- isVariableImport: function () {
72
- var path = this.path;
73
- if (path instanceof url_1.default) {
74
- path = path.value;
109
+ }
110
+
111
+ /** @returns {string | undefined} */
112
+ getPath() {
113
+ return (this.path instanceof URL) ?
114
+ /** @type {string} */ (/** @type {Node} */ (this.path.value).value) :
115
+ /** @type {string | undefined} */ (this.path.value);
116
+ }
117
+
118
+ /** @returns {boolean | RegExpMatchArray | null} */
119
+ isVariableImport() {
120
+ let path = this.path;
121
+ if (path instanceof URL) {
122
+ path = /** @type {Node} */ (path.value);
75
123
  }
76
- if (path instanceof quoted_1.default) {
124
+ if (path instanceof Quoted) {
77
125
  return path.containsVariables();
78
126
  }
127
+
79
128
  return true;
80
- },
81
- evalForImport: function (context) {
82
- var path = this.path;
83
- if (path instanceof url_1.default) {
84
- path = path.value;
129
+ }
130
+
131
+ /** @param {EvalContext} context */
132
+ evalForImport(context) {
133
+ let path = this.path;
134
+
135
+ if (path instanceof URL) {
136
+ path = /** @type {Node} */ (path.value);
85
137
  }
86
- return new Import(path.eval(context), this.features, this.options, this._index, this._fileInfo, this.visibilityInfo());
87
- },
88
- evalPath: function (context) {
89
- var path = this.path.eval(context);
90
- var fileInfo = this._fileInfo;
91
- if (!(path instanceof url_1.default)) {
138
+
139
+ return new Import(path.eval(context), this.features, this.options, this._index || 0, this._fileInfo, this.visibilityInfo());
140
+ }
141
+
142
+ /** @param {EvalContext} context */
143
+ evalPath(context) {
144
+ const path = this.path.eval(context);
145
+ const fileInfo = this._fileInfo;
146
+
147
+ if (!(path instanceof URL)) {
92
148
  // Add the rootpath if the URL requires a rewrite
93
- var pathValue = path.value;
149
+ const pathValue = /** @type {string} */ (path.value);
94
150
  if (fileInfo &&
95
151
  pathValue &&
96
152
  context.pathRequiresRewrite(pathValue)) {
97
153
  path.value = context.rewritePath(pathValue, fileInfo.rootpath);
98
- }
99
- else {
100
- path.value = context.normalizePath(path.value);
154
+ } else {
155
+ path.value = context.normalizePath(/** @type {string} */ (path.value));
101
156
  }
102
157
  }
158
+
103
159
  return path;
104
- },
105
- eval: function (context) {
106
- var result = this.doEval(context);
160
+ }
161
+
162
+ /** @param {EvalContext} context */
163
+ // @ts-ignore - Import.eval returns Node | Node[] | Import (wider than Node.eval's Node return)
164
+ eval(context) {
165
+ const result = this.doEval(context);
107
166
  if (this.options.reference || this.blocksVisibility()) {
108
- if (result.length || result.length === 0) {
167
+ if (Array.isArray(result)) {
109
168
  result.forEach(function (node) {
110
169
  node.addVisibilityBlock();
111
170
  });
112
- }
113
- else {
114
- result.addVisibilityBlock();
171
+ } else {
172
+ /** @type {Node} */ (result).addVisibilityBlock();
115
173
  }
116
174
  }
117
175
  return result;
118
- },
119
- doEval: function (context) {
120
- var ruleset;
121
- var registry;
122
- var features = this.features && this.features.eval(context);
176
+ }
177
+
178
+ /** @param {EvalContext} context */
179
+ doEval(context) {
180
+ /** @type {Ruleset | undefined} */
181
+ let ruleset;
182
+ const features = this.features && this.features.eval(context);
183
+
123
184
  if (this.options.isPlugin) {
124
185
  if (this.root && this.root.eval) {
125
186
  try {
126
187
  this.root.eval(context);
127
188
  }
128
189
  catch (e) {
129
- e.message = 'Plugin error during evaluation';
130
- throw new less_error_1.default(e, this.root.imports, this.root.filename);
190
+ const err = /** @type {{ message: string }} */ (e);
191
+ err.message = 'Plugin error during evaluation';
192
+ throw new LessError(
193
+ /** @type {{ message: string, index?: number, filename?: string }} */ (e),
194
+ /** @type {{ imports: object }} */ (/** @type {unknown} */ (this.root)).imports,
195
+ /** @type {{ filename: string }} */ (/** @type {unknown} */ (this.root)).filename
196
+ );
131
197
  }
132
198
  }
133
- registry = context.frames[0] && context.frames[0].functionRegistry;
199
+ const frame0 = /** @type {Ruleset & { functionRegistry?: { addMultiple: (fns: object) => void } }} */ (context.frames[0]);
200
+ const registry = frame0 && frame0.functionRegistry;
134
201
  if (registry && this.root && this.root.functions) {
135
202
  registry.addMultiple(this.root.functions);
136
203
  }
204
+
137
205
  return [];
138
206
  }
207
+
139
208
  if (this.skip) {
140
209
  if (typeof this.skip === 'function') {
141
210
  this.skip = this.skip();
@@ -145,12 +214,12 @@ Import.prototype = Object.assign(new node_1.default(), {
145
214
  }
146
215
  }
147
216
  if (this.features) {
148
- var featureValue = this.features.value;
217
+ let featureValue = /** @type {Node[]} */ (this.features.value);
149
218
  if (Array.isArray(featureValue) && featureValue.length >= 1) {
150
- var expr = featureValue[0];
151
- if (expr.type === 'Expression' && Array.isArray(expr.value) && expr.value.length >= 2) {
152
- featureValue = expr.value;
153
- var isLayer = featureValue[0].type === 'Keyword' && featureValue[0].value === 'layer'
219
+ const expr = featureValue[0];
220
+ if (expr.type === 'Expression' && Array.isArray(expr.value) && /** @type {Node[]} */ (expr.value).length >= 2) {
221
+ featureValue = /** @type {Node[]} */ (expr.value);
222
+ const isLayer = featureValue[0].type === 'Keyword' && featureValue[0].value === 'layer'
154
223
  && featureValue[1].type === 'Paren';
155
224
  if (isLayer) {
156
225
  this.css = false;
@@ -159,14 +228,20 @@ Import.prototype = Object.assign(new node_1.default(), {
159
228
  }
160
229
  }
161
230
  if (this.options.inline) {
162
- var contents = new anonymous_1.default(this.root, 0, {
163
- filename: this.importedFilename,
164
- reference: this.path._fileInfo && this.path._fileInfo.reference
165
- }, true, true);
166
- return this.features ? new media_1.default([contents], this.features.value) : [contents];
167
- }
168
- else if (this.css || this.layerCss) {
169
- var newImport = new Import(this.evalPath(context), features, this.options, this._index);
231
+ const contents = new Anonymous(
232
+ /** @type {string} */ (/** @type {unknown} */ (this.root)),
233
+ 0,
234
+ {
235
+ filename: this.importedFilename,
236
+ reference: this.path._fileInfo && this.path._fileInfo.reference
237
+ },
238
+ true,
239
+ true
240
+ );
241
+
242
+ return this.features ? new Media([contents], /** @type {Node[]} */ (this.features.value)) : [contents];
243
+ } else if (this.css || this.layerCss) {
244
+ const newImport = new Import(this.evalPath(context), features, this.options, this._index || 0);
170
245
  if (this.layerCss) {
171
246
  newImport.css = this.layerCss;
172
247
  newImport.path._fileInfo = this._fileInfo;
@@ -175,43 +250,42 @@ Import.prototype = Object.assign(new node_1.default(), {
175
250
  throw this.error;
176
251
  }
177
252
  return newImport;
178
- }
179
- else if (this.root) {
253
+ } else if (this.root) {
180
254
  if (this.features) {
181
- var featureValue = this.features.value;
255
+ let featureValue = /** @type {Node[]} */ (this.features.value);
182
256
  if (Array.isArray(featureValue) && featureValue.length === 1) {
183
- var expr = featureValue[0];
184
- if (expr.type === 'Expression' && Array.isArray(expr.value) && expr.value.length >= 2) {
185
- featureValue = expr.value;
186
- var isLayer = featureValue[0].type === 'Keyword' && featureValue[0].value === 'layer'
257
+ const expr = featureValue[0];
258
+ if (expr.type === 'Expression' && Array.isArray(expr.value) && /** @type {Node[]} */ (expr.value).length >= 2) {
259
+ featureValue = /** @type {Node[]} */ (expr.value);
260
+ const isLayer = featureValue[0].type === 'Keyword' && featureValue[0].value === 'layer'
187
261
  && featureValue[1].type === 'Paren';
188
262
  if (isLayer) {
189
263
  this.layerCss = true;
190
- featureValue[0] = new expression_1.default(featureValue.slice(0, 2));
264
+ featureValue[0] = new Expression(/** @type {Node[]} */ (featureValue.slice(0, 2)));
191
265
  featureValue.splice(1, 1);
192
- featureValue[0].noSpacing = true;
266
+ /** @type {Expression} */ (featureValue[0]).noSpacing = true;
193
267
  return this;
194
268
  }
195
269
  }
196
270
  }
197
271
  }
198
- ruleset = new ruleset_1.default(null, utils.copyArray(this.root.rules));
272
+ ruleset = new Ruleset(null, utils.copyArray(this.root.rules));
199
273
  ruleset.evalImports(context);
200
- return this.features ? new media_1.default(ruleset.rules, this.features.value) : ruleset.rules;
201
- }
202
- else {
274
+
275
+ return this.features ? new Media(ruleset.rules, /** @type {Node[]} */ (this.features.value)) : ruleset.rules;
276
+ } else {
203
277
  if (this.features) {
204
- var featureValue = this.features.value;
278
+ let featureValue = /** @type {Node[]} */ (this.features.value);
205
279
  if (Array.isArray(featureValue) && featureValue.length >= 1) {
206
- featureValue = featureValue[0].value;
280
+ featureValue = /** @type {Node[]} */ (featureValue[0].value);
207
281
  if (Array.isArray(featureValue) && featureValue.length >= 2) {
208
- var isLayer = featureValue[0].type === 'Keyword' && featureValue[0].value === 'layer'
282
+ const isLayer = featureValue[0].type === 'Keyword' && featureValue[0].value === 'layer'
209
283
  && featureValue[1].type === 'Paren';
210
284
  if (isLayer) {
211
285
  this.css = true;
212
- featureValue[0] = new expression_1.default(featureValue.slice(0, 2));
286
+ featureValue[0] = new Expression(/** @type {Node[]} */ (featureValue.slice(0, 2)));
213
287
  featureValue.splice(1, 1);
214
- featureValue[0].noSpacing = true;
288
+ /** @type {Expression} */ (featureValue[0]).noSpacing = true;
215
289
  return this;
216
290
  }
217
291
  }
@@ -220,6 +294,6 @@ Import.prototype = Object.assign(new node_1.default(), {
220
294
  return [];
221
295
  }
222
296
  }
223
- });
224
- exports.default = Import;
225
- //# sourceMappingURL=import.js.map
297
+ }
298
+
299
+ export default Import;