less 4.5.1 → 4.6.0

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 (338) hide show
  1. package/bin/lessc +37 -23
  2. package/dist/less.js +14497 -11745
  3. package/dist/less.min.js +4 -4
  4. package/dist/less.min.js.map +1 -1
  5. package/lib/less/constants.js +5 -7
  6. package/lib/less/contexts.js +71 -55
  7. package/lib/less/data/colors.js +150 -153
  8. package/lib/less/data/index.js +4 -7
  9. package/lib/less/data/unit-conversions.js +2 -5
  10. package/lib/less/default-options.js +36 -26
  11. package/lib/less/deprecation.js +67 -0
  12. package/lib/less/environment/abstract-file-manager.js +62 -50
  13. package/lib/less/environment/abstract-plugin-loader.js +69 -46
  14. package/lib/less/environment/environment-api.ts +21 -0
  15. package/lib/less/environment/environment.js +34 -30
  16. package/lib/less/environment/file-manager-api.ts +77 -0
  17. package/lib/less/functions/boolean.js +13 -13
  18. package/lib/less/functions/color-blending.js +39 -31
  19. package/lib/less/functions/color.js +153 -137
  20. package/lib/less/functions/data-uri.js +73 -64
  21. package/lib/less/functions/default.js +9 -11
  22. package/lib/less/functions/function-caller.js +35 -34
  23. package/lib/less/functions/function-registry.js +16 -17
  24. package/lib/less/functions/index.js +33 -33
  25. package/lib/less/functions/list.js +88 -75
  26. package/lib/less/functions/math-helper.js +8 -11
  27. package/lib/less/functions/math.js +21 -21
  28. package/lib/less/functions/number.js +42 -53
  29. package/lib/less/functions/string.js +18 -22
  30. package/lib/less/functions/style.js +21 -20
  31. package/lib/less/functions/svg.js +83 -82
  32. package/lib/less/functions/types.js +28 -32
  33. package/lib/less/import-manager.js +73 -64
  34. package/lib/less/index.js +65 -65
  35. package/lib/less/less-error.js +63 -45
  36. package/lib/less/logger.js +11 -14
  37. package/lib/less/parse-tree.js +52 -53
  38. package/lib/less/parse.js +44 -44
  39. package/lib/less/parser/parser-input.js +151 -113
  40. package/lib/less/parser/parser.js +864 -658
  41. package/lib/less/plugin-manager.js +57 -46
  42. package/lib/less/render.js +17 -23
  43. package/lib/less/source-map-builder.js +52 -43
  44. package/lib/less/source-map-output.js +56 -43
  45. package/lib/less/transform-tree.js +40 -30
  46. package/lib/less/tree/anonymous.js +52 -28
  47. package/lib/less/tree/assignment.js +44 -27
  48. package/lib/less/tree/atrule-syntax.js +4 -6
  49. package/lib/less/tree/atrule.js +247 -140
  50. package/lib/less/tree/attribute.js +55 -24
  51. package/lib/less/tree/call.js +70 -42
  52. package/lib/less/tree/color.js +194 -145
  53. package/lib/less/tree/combinator.js +31 -21
  54. package/lib/less/tree/comment.js +44 -23
  55. package/lib/less/tree/condition.js +61 -36
  56. package/lib/less/tree/container.js +90 -34
  57. package/lib/less/tree/debug-info.js +28 -15
  58. package/lib/less/tree/declaration.js +97 -52
  59. package/lib/less/tree/detached-ruleset.js +42 -24
  60. package/lib/less/tree/dimension.js +127 -71
  61. package/lib/less/tree/element.js +82 -52
  62. package/lib/less/tree/expression.js +75 -50
  63. package/lib/less/tree/extend.js +71 -42
  64. package/lib/less/tree/import.js +184 -110
  65. package/lib/less/tree/index.js +52 -81
  66. package/lib/less/tree/javascript.js +43 -32
  67. package/lib/less/tree/js-eval-node.js +46 -32
  68. package/lib/less/tree/keyword.js +25 -17
  69. package/lib/less/tree/media.js +77 -35
  70. package/lib/less/tree/merge-rules.js +47 -0
  71. package/lib/less/tree/mixin-call.js +181 -98
  72. package/lib/less/tree/mixin-definition.js +211 -117
  73. package/lib/less/tree/namespace-value.js +63 -44
  74. package/lib/less/tree/negative.js +34 -21
  75. package/lib/less/tree/nested-at-rule.js +149 -66
  76. package/lib/less/tree/node.js +225 -90
  77. package/lib/less/tree/operation.js +59 -34
  78. package/lib/less/tree/paren.js +34 -17
  79. package/lib/less/tree/property.js +66 -35
  80. package/lib/less/tree/query-in-parens.js +52 -60
  81. package/lib/less/tree/quoted.js +93 -44
  82. package/lib/less/tree/ruleset.js +632 -318
  83. package/lib/less/tree/selector.js +151 -77
  84. package/lib/less/tree/unicode-descriptor.js +14 -12
  85. package/lib/less/tree/unit.js +111 -63
  86. package/lib/less/tree/url.js +62 -38
  87. package/lib/less/tree/value.js +50 -34
  88. package/lib/less/tree/variable-call.js +47 -30
  89. package/lib/less/tree/variable.js +53 -31
  90. package/lib/less/utils.js +44 -47
  91. package/lib/less/visitors/extend-visitor.js +233 -172
  92. package/lib/less/visitors/import-sequencer.js +24 -24
  93. package/lib/less/visitors/import-visitor.js +62 -52
  94. package/lib/less/visitors/index.js +14 -17
  95. package/lib/less/visitors/join-selector-visitor.js +40 -37
  96. package/lib/less/visitors/set-tree-visibility-visitor.js +32 -18
  97. package/lib/less/visitors/to-css-visitor.js +135 -128
  98. package/lib/less/visitors/visitor.js +60 -45
  99. package/lib/less-browser/add-default-options.js +23 -13
  100. package/lib/less-browser/bootstrap.js +23 -17
  101. package/lib/less-browser/browser.js +24 -21
  102. package/lib/less-browser/cache.js +17 -19
  103. package/lib/less-browser/error-reporting.js +52 -44
  104. package/lib/less-browser/file-manager.js +52 -42
  105. package/lib/less-browser/image-size.js +12 -12
  106. package/lib/less-browser/index.js +131 -105
  107. package/lib/less-browser/log-listener.js +30 -31
  108. package/lib/less-browser/plugin-loader.js +10 -10
  109. package/lib/less-browser/utils.js +19 -21
  110. package/lib/less-node/environment.js +32 -8
  111. package/lib/less-node/file-manager.js +62 -45
  112. package/lib/less-node/fs.js +11 -8
  113. package/lib/less-node/image-size.js +40 -31
  114. package/lib/less-node/index.js +28 -19
  115. package/lib/less-node/lessc-helper.js +20 -21
  116. package/lib/less-node/plugin-loader.js +35 -27
  117. package/lib/less-node/url-file-manager.js +33 -31
  118. package/package.json +25 -18
  119. package/.eslintignore +0 -6
  120. package/.eslintrc.js +0 -63
  121. package/Gruntfile.js +0 -403
  122. package/bower.json +0 -22
  123. package/lib/less/constants.js.map +0 -1
  124. package/lib/less/contexts.js.map +0 -1
  125. package/lib/less/data/colors.js.map +0 -1
  126. package/lib/less/data/index.js.map +0 -1
  127. package/lib/less/data/unit-conversions.js.map +0 -1
  128. package/lib/less/default-options.js.map +0 -1
  129. package/lib/less/environment/abstract-file-manager.js.map +0 -1
  130. package/lib/less/environment/abstract-plugin-loader.js.map +0 -1
  131. package/lib/less/environment/environment-api.js +0 -3
  132. package/lib/less/environment/environment-api.js.map +0 -1
  133. package/lib/less/environment/environment.js.map +0 -1
  134. package/lib/less/environment/file-manager-api.js +0 -3
  135. package/lib/less/environment/file-manager-api.js.map +0 -1
  136. package/lib/less/functions/boolean.js.map +0 -1
  137. package/lib/less/functions/color-blending.js.map +0 -1
  138. package/lib/less/functions/color.js.map +0 -1
  139. package/lib/less/functions/data-uri.js.map +0 -1
  140. package/lib/less/functions/default.js.map +0 -1
  141. package/lib/less/functions/function-caller.js.map +0 -1
  142. package/lib/less/functions/function-registry.js.map +0 -1
  143. package/lib/less/functions/index.js.map +0 -1
  144. package/lib/less/functions/list.js.map +0 -1
  145. package/lib/less/functions/math-helper.js.map +0 -1
  146. package/lib/less/functions/math.js.map +0 -1
  147. package/lib/less/functions/number.js.map +0 -1
  148. package/lib/less/functions/string.js.map +0 -1
  149. package/lib/less/functions/style.js.map +0 -1
  150. package/lib/less/functions/svg.js.map +0 -1
  151. package/lib/less/functions/types.js.map +0 -1
  152. package/lib/less/import-manager.js.map +0 -1
  153. package/lib/less/index.js.map +0 -1
  154. package/lib/less/less-error.js.map +0 -1
  155. package/lib/less/logger.js.map +0 -1
  156. package/lib/less/parse-tree.js.map +0 -1
  157. package/lib/less/parse.js.map +0 -1
  158. package/lib/less/parser/parser-input.js.map +0 -1
  159. package/lib/less/parser/parser.js.map +0 -1
  160. package/lib/less/plugin-manager.js.map +0 -1
  161. package/lib/less/render.js.map +0 -1
  162. package/lib/less/source-map-builder.js.map +0 -1
  163. package/lib/less/source-map-output.js.map +0 -1
  164. package/lib/less/transform-tree.js.map +0 -1
  165. package/lib/less/tree/anonymous.js.map +0 -1
  166. package/lib/less/tree/assignment.js.map +0 -1
  167. package/lib/less/tree/atrule-syntax.js.map +0 -1
  168. package/lib/less/tree/atrule.js.map +0 -1
  169. package/lib/less/tree/attribute.js.map +0 -1
  170. package/lib/less/tree/call.js.map +0 -1
  171. package/lib/less/tree/color.js.map +0 -1
  172. package/lib/less/tree/combinator.js.map +0 -1
  173. package/lib/less/tree/comment.js.map +0 -1
  174. package/lib/less/tree/condition.js.map +0 -1
  175. package/lib/less/tree/container.js.map +0 -1
  176. package/lib/less/tree/debug-info.js.map +0 -1
  177. package/lib/less/tree/declaration.js.map +0 -1
  178. package/lib/less/tree/detached-ruleset.js.map +0 -1
  179. package/lib/less/tree/dimension.js.map +0 -1
  180. package/lib/less/tree/element.js.map +0 -1
  181. package/lib/less/tree/expression.js.map +0 -1
  182. package/lib/less/tree/extend.js.map +0 -1
  183. package/lib/less/tree/import.js.map +0 -1
  184. package/lib/less/tree/index.js.map +0 -1
  185. package/lib/less/tree/javascript.js.map +0 -1
  186. package/lib/less/tree/js-eval-node.js.map +0 -1
  187. package/lib/less/tree/keyword.js.map +0 -1
  188. package/lib/less/tree/media.js.map +0 -1
  189. package/lib/less/tree/mixin-call.js.map +0 -1
  190. package/lib/less/tree/mixin-definition.js.map +0 -1
  191. package/lib/less/tree/namespace-value.js.map +0 -1
  192. package/lib/less/tree/negative.js.map +0 -1
  193. package/lib/less/tree/nested-at-rule.js.map +0 -1
  194. package/lib/less/tree/node.js.map +0 -1
  195. package/lib/less/tree/operation.js.map +0 -1
  196. package/lib/less/tree/paren.js.map +0 -1
  197. package/lib/less/tree/property.js.map +0 -1
  198. package/lib/less/tree/query-in-parens.js.map +0 -1
  199. package/lib/less/tree/quoted.js.map +0 -1
  200. package/lib/less/tree/ruleset.js.map +0 -1
  201. package/lib/less/tree/selector.js.map +0 -1
  202. package/lib/less/tree/unicode-descriptor.js.map +0 -1
  203. package/lib/less/tree/unit.js.map +0 -1
  204. package/lib/less/tree/url.js.map +0 -1
  205. package/lib/less/tree/value.js.map +0 -1
  206. package/lib/less/tree/variable-call.js.map +0 -1
  207. package/lib/less/tree/variable.js.map +0 -1
  208. package/lib/less/utils.js.map +0 -1
  209. package/lib/less/visitors/extend-visitor.js.map +0 -1
  210. package/lib/less/visitors/import-sequencer.js.map +0 -1
  211. package/lib/less/visitors/import-visitor.js.map +0 -1
  212. package/lib/less/visitors/index.js.map +0 -1
  213. package/lib/less/visitors/join-selector-visitor.js.map +0 -1
  214. package/lib/less/visitors/set-tree-visibility-visitor.js.map +0 -1
  215. package/lib/less/visitors/to-css-visitor.js.map +0 -1
  216. package/lib/less/visitors/visitor.js.map +0 -1
  217. package/lib/less-browser/add-default-options.js.map +0 -1
  218. package/lib/less-browser/bootstrap.js.map +0 -1
  219. package/lib/less-browser/browser.js.map +0 -1
  220. package/lib/less-browser/cache.js.map +0 -1
  221. package/lib/less-browser/error-reporting.js.map +0 -1
  222. package/lib/less-browser/file-manager.js.map +0 -1
  223. package/lib/less-browser/image-size.js.map +0 -1
  224. package/lib/less-browser/index.js.map +0 -1
  225. package/lib/less-browser/log-listener.js.map +0 -1
  226. package/lib/less-browser/plugin-loader.js.map +0 -1
  227. package/lib/less-browser/utils.js.map +0 -1
  228. package/lib/less-node/environment.js.map +0 -1
  229. package/lib/less-node/file-manager.js.map +0 -1
  230. package/lib/less-node/fs.js.map +0 -1
  231. package/lib/less-node/image-size.js.map +0 -1
  232. package/lib/less-node/index.js.map +0 -1
  233. package/lib/less-node/lessc-helper.js.map +0 -1
  234. package/lib/less-node/plugin-loader.js.map +0 -1
  235. package/lib/less-node/url-file-manager.js.map +0 -1
  236. package/scripts/coverage-lines.js +0 -207
  237. package/scripts/coverage-report.js +0 -158
  238. package/scripts/postinstall.js +0 -61
  239. package/test/.eslintrc.json +0 -9
  240. package/test/README.md +0 -3
  241. package/test/browser/common.js +0 -251
  242. package/test/browser/css/global-vars/simple.css +0 -3
  243. package/test/browser/css/modify-vars/simple.css +0 -8
  244. package/test/browser/css/plugin/plugin.css +0 -3
  245. package/test/browser/css/postProcessor/postProcessor.css +0 -4
  246. package/test/browser/css/relative-urls/urls.css +0 -36
  247. package/test/browser/css/rewrite-urls/urls.css +0 -36
  248. package/test/browser/css/rootpath/urls.css +0 -35
  249. package/test/browser/css/rootpath-relative/urls.css +0 -35
  250. package/test/browser/css/rootpath-rewrite-urls/urls.css +0 -35
  251. package/test/browser/css/urls.css +0 -54
  252. package/test/browser/generator/benchmark.config.js +0 -50
  253. package/test/browser/generator/generate.js +0 -78
  254. package/test/browser/generator/runner.config.js +0 -184
  255. package/test/browser/generator/runner.js +0 -2
  256. package/test/browser/generator/template.js +0 -104
  257. package/test/browser/generator/utils.js +0 -14
  258. package/test/browser/less/console-errors/test-error.less +0 -3
  259. package/test/browser/less/console-errors/test-error.txt +0 -2
  260. package/test/browser/less/errors/image-height-error.less +0 -3
  261. package/test/browser/less/errors/image-height-error.txt +0 -4
  262. package/test/browser/less/errors/image-size-error.less +0 -3
  263. package/test/browser/less/errors/image-size-error.txt +0 -4
  264. package/test/browser/less/errors/image-width-error.less +0 -3
  265. package/test/browser/less/errors/image-width-error.txt +0 -4
  266. package/test/browser/less/global-vars/simple.less +0 -3
  267. package/test/browser/less/imports/urls.less +0 -4
  268. package/test/browser/less/imports/urls2.less +0 -4
  269. package/test/browser/less/modify-vars/imports/simple2.less +0 -4
  270. package/test/browser/less/modify-vars/simple.less +0 -8
  271. package/test/browser/less/nested-gradient-with-svg-gradient/mixin-consumer.less +0 -5
  272. package/test/browser/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less +0 -15
  273. package/test/browser/less/plugin/plugin.js +0 -4
  274. package/test/browser/less/plugin/plugin.less +0 -4
  275. package/test/browser/less/postProcessor/postProcessor.less +0 -4
  276. package/test/browser/less/relative-urls/urls.less +0 -34
  277. package/test/browser/less/rewrite-urls/urls.less +0 -34
  278. package/test/browser/less/rootpath/urls.less +0 -33
  279. package/test/browser/less/rootpath-relative/urls.less +0 -33
  280. package/test/browser/less/rootpath-rewrite-urls/urls.less +0 -33
  281. package/test/browser/less/urls.less +0 -62
  282. package/test/browser/runner-VisitorPlugin-options.js +0 -3
  283. package/test/browser/runner-VisitorPlugin.js +0 -3
  284. package/test/browser/runner-browser-options.js +0 -51
  285. package/test/browser/runner-browser-spec.js +0 -12
  286. package/test/browser/runner-console-errors.js +0 -5
  287. package/test/browser/runner-errors-options.js +0 -6
  288. package/test/browser/runner-errors-spec.js +0 -3
  289. package/test/browser/runner-filemanagerPlugin-options.js +0 -5
  290. package/test/browser/runner-filemanagerPlugin.js +0 -3
  291. package/test/browser/runner-global-vars-options.js +0 -7
  292. package/test/browser/runner-global-vars-spec.js +0 -3
  293. package/test/browser/runner-main-options.js +0 -17
  294. package/test/browser/runner-main-spec.js +0 -7
  295. package/test/browser/runner-modify-vars-options.js +0 -5
  296. package/test/browser/runner-modify-vars-spec.js +0 -33
  297. package/test/browser/runner-no-js-errors-options.js +0 -4
  298. package/test/browser/runner-no-js-errors-spec.js +0 -3
  299. package/test/browser/runner-postProcessorPlugin-options.js +0 -3
  300. package/test/browser/runner-postProcessorPlugin.js +0 -3
  301. package/test/browser/runner-preProcessorPlugin-options.js +0 -3
  302. package/test/browser/runner-preProcessorPlugin.js +0 -3
  303. package/test/browser/runner-production-options.js +0 -3
  304. package/test/browser/runner-production-spec.js +0 -5
  305. package/test/browser/runner-relative-urls-options.js +0 -3
  306. package/test/browser/runner-relative-urls-spec.js +0 -3
  307. package/test/browser/runner-rewrite-urls-options.js +0 -3
  308. package/test/browser/runner-rewrite-urls-spec.js +0 -3
  309. package/test/browser/runner-rootpath-options.js +0 -3
  310. package/test/browser/runner-rootpath-relative-options.js +0 -4
  311. package/test/browser/runner-rootpath-relative-spec.js +0 -3
  312. package/test/browser/runner-rootpath-rewrite-urls-options.js +0 -4
  313. package/test/browser/runner-rootpath-rewrite-urls-spec.js +0 -3
  314. package/test/browser/runner-rootpath-spec.js +0 -3
  315. package/test/browser/runner-strict-units-options.js +0 -5
  316. package/test/browser/runner-strict-units-spec.js +0 -3
  317. package/test/index.js +0 -307
  318. package/test/less-test.js +0 -984
  319. package/test/mocha-playwright/runner.js +0 -210
  320. package/test/modify-vars.js +0 -28
  321. package/test/plugins/filemanager/index.js +0 -19
  322. package/test/plugins/postprocess/index.js +0 -14
  323. package/test/plugins/preprocess/index.js +0 -19
  324. package/test/plugins/visitor/index.js +0 -24
  325. package/test/sourcemaps/basic.json +0 -1
  326. package/test/sourcemaps/comprehensive.json +0 -1
  327. package/test/sourcemaps/custom-props.json +0 -1
  328. package/test/sourcemaps/index.html +0 -17
  329. package/test/sourcemaps/sourcemaps-basepath.json +0 -1
  330. package/test/sourcemaps/sourcemaps-include-source.json +0 -1
  331. package/test/sourcemaps/sourcemaps-rootpath.json +0 -1
  332. package/test/sourcemaps/sourcemaps-url.json +0 -1
  333. package/test/sourcemaps-disable-annotation/basic.json +0 -1
  334. package/test/sourcemaps-variable-selector/basic.json +0 -1
  335. package/test/test-es6.ts +0 -17
  336. package/test.less +0 -1
  337. package/tsconfig.build.json +0 -7
  338. package/tsconfig.json +0 -21
@@ -1,44 +1,60 @@
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 Value = function (value) {
6
- if (!value) {
7
- throw new Error('Value requires an array argument');
8
- }
9
- if (!Array.isArray(value)) {
10
- this.value = [value];
11
- }
12
- else {
13
- this.value = value;
14
- }
15
- };
16
- Value.prototype = Object.assign(new node_1.default(), {
17
- type: 'Value',
18
- accept: function (visitor) {
19
- if (this.value) {
20
- this.value = visitor.visitArray(this.value);
1
+ // @ts-check
2
+ /** @import { EvalContext, CSSOutput, TreeVisitor } from './node.js' */
3
+ import Node from './node.js';
4
+
5
+ class Value extends Node {
6
+ get type() { return 'Value'; }
7
+
8
+ /** @param {Node[] | Node} value */
9
+ constructor(value) {
10
+ super();
11
+ if (!value) {
12
+ throw new Error('Value requires an array argument');
21
13
  }
22
- },
23
- eval: function (context) {
24
- if (this.value.length === 1) {
25
- return this.value[0].eval(context);
14
+ if (!Array.isArray(value)) {
15
+ this.value = [ value ];
26
16
  }
27
17
  else {
28
- return new Value(this.value.map(function (v) {
18
+ this.value = value;
19
+ }
20
+ }
21
+
22
+ /** @param {TreeVisitor} visitor */
23
+ accept(visitor) {
24
+ if (this.value) {
25
+ this.value = visitor.visitArray(/** @type {Node[]} */ (this.value));
26
+ }
27
+ }
28
+
29
+ /**
30
+ * @param {EvalContext} context
31
+ * @returns {Node}
32
+ */
33
+ eval(context) {
34
+ const value = /** @type {Node[]} */ (this.value);
35
+ if (value.length === 1) {
36
+ return value[0].eval(context);
37
+ } else {
38
+ return new Value(value.map(function (v) {
29
39
  return v.eval(context);
30
40
  }));
31
41
  }
32
- },
33
- genCSS: function (context, output) {
34
- var i;
35
- for (i = 0; i < this.value.length; i++) {
36
- this.value[i].genCSS(context, output);
37
- if (i + 1 < this.value.length) {
42
+ }
43
+
44
+ /**
45
+ * @param {EvalContext} context
46
+ * @param {CSSOutput} output
47
+ */
48
+ genCSS(context, output) {
49
+ const value = /** @type {Node[]} */ (this.value);
50
+ let i;
51
+ for (i = 0; i < value.length; i++) {
52
+ value[i].genCSS(context, output);
53
+ if (i + 1 < value.length) {
38
54
  output.add((context && context.compress) ? ',' : ', ');
39
55
  }
40
56
  }
41
57
  }
42
- });
43
- exports.default = Value;
44
- //# sourceMappingURL=value.js.map
58
+ }
59
+
60
+ export default Value;
@@ -1,43 +1,60 @@
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 variable_1 = tslib_1.__importDefault(require("./variable"));
6
- var ruleset_1 = tslib_1.__importDefault(require("./ruleset"));
7
- var detached_ruleset_1 = tslib_1.__importDefault(require("./detached-ruleset"));
8
- var less_error_1 = tslib_1.__importDefault(require("../less-error"));
9
- var VariableCall = function (variable, index, currentFileInfo) {
10
- this.variable = variable;
11
- this._index = index;
12
- this._fileInfo = currentFileInfo;
13
- this.allowRoot = true;
14
- };
15
- VariableCall.prototype = Object.assign(new node_1.default(), {
16
- type: 'VariableCall',
17
- eval: function (context) {
18
- var rules;
19
- var detachedRuleset = new variable_1.default(this.variable, this.getIndex(), this.fileInfo()).eval(context);
20
- var error = new less_error_1.default({ message: "Could not evaluate variable call ".concat(this.variable) });
21
- if (!detachedRuleset.ruleset) {
22
- if (detachedRuleset.rules) {
1
+ // @ts-check
2
+ /** @import { EvalContext, FileInfo } from './node.js' */
3
+ import Node from './node.js';
4
+ import Variable from './variable.js';
5
+ import Ruleset from './ruleset.js';
6
+ import DetachedRuleset from './detached-ruleset.js';
7
+ import LessError from '../less-error.js';
8
+
9
+ class VariableCall extends Node {
10
+ get type() { return 'VariableCall'; }
11
+
12
+ /**
13
+ * @param {string} variable
14
+ * @param {number} index
15
+ * @param {FileInfo} currentFileInfo
16
+ */
17
+ constructor(variable, index, currentFileInfo) {
18
+ super();
19
+ this.variable = variable;
20
+ this._index = index;
21
+ this._fileInfo = currentFileInfo;
22
+ this.allowRoot = true;
23
+ }
24
+
25
+ /**
26
+ * @param {EvalContext} context
27
+ * @returns {Node}
28
+ */
29
+ eval(context) {
30
+ let rules;
31
+ /** @type {DetachedRuleset | Node} */
32
+ let detachedRuleset = new Variable(this.variable, this.getIndex(), this.fileInfo()).eval(context);
33
+ const error = new LessError({message: `Could not evaluate variable call ${this.variable}`});
34
+
35
+ if (!(/** @type {DetachedRuleset} */ (detachedRuleset)).ruleset) {
36
+ const dr = /** @type {Node & { rules?: Node[] }} */ (detachedRuleset);
37
+ if (dr.rules) {
23
38
  rules = detachedRuleset;
24
39
  }
25
40
  else if (Array.isArray(detachedRuleset)) {
26
- rules = new ruleset_1.default('', detachedRuleset);
41
+ rules = new Ruleset(null, detachedRuleset);
27
42
  }
28
43
  else if (Array.isArray(detachedRuleset.value)) {
29
- rules = new ruleset_1.default('', detachedRuleset.value);
44
+ rules = new Ruleset(null, detachedRuleset.value);
30
45
  }
31
46
  else {
32
47
  throw error;
33
48
  }
34
- detachedRuleset = new detached_ruleset_1.default(rules);
49
+ detachedRuleset = new DetachedRuleset(rules);
35
50
  }
36
- if (detachedRuleset.ruleset) {
37
- return detachedRuleset.callEval(context);
51
+
52
+ const dr = /** @type {DetachedRuleset} */ (detachedRuleset);
53
+ if (dr.ruleset) {
54
+ return dr.callEval(context);
38
55
  }
39
56
  throw error;
40
57
  }
41
- });
42
- exports.default = VariableCall;
43
- //# sourceMappingURL=variable-call.js.map
58
+ }
59
+
60
+ export default VariableCall;
@@ -1,37 +1,56 @@
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 call_1 = tslib_1.__importDefault(require("./call"));
6
- var Variable = function (name, index, currentFileInfo) {
7
- this.name = name;
8
- this._index = index;
9
- this._fileInfo = currentFileInfo;
10
- };
11
- Variable.prototype = Object.assign(new node_1.default(), {
12
- type: 'Variable',
13
- eval: function (context) {
14
- var variable, name = this.name;
1
+ // @ts-check
2
+ /** @import { EvalContext, FileInfo } from './node.js' */
3
+ import Node from './node.js';
4
+ import Call from './call.js';
5
+ import Ruleset from './ruleset.js';
6
+
7
+ class Variable extends Node {
8
+ get type() { return 'Variable'; }
9
+
10
+ /**
11
+ * @param {string} name
12
+ * @param {number} [index]
13
+ * @param {FileInfo} [currentFileInfo]
14
+ */
15
+ constructor(name, index, currentFileInfo) {
16
+ super();
17
+ this.name = name;
18
+ this._index = index;
19
+ this._fileInfo = currentFileInfo;
20
+ /** @type {boolean | undefined} */
21
+ this.evaluating = undefined;
22
+ }
23
+
24
+ /**
25
+ * @param {EvalContext} context
26
+ * @returns {Node}
27
+ */
28
+ eval(context) {
29
+ let variable, name = this.name;
30
+
15
31
  if (name.indexOf('@@') === 0) {
16
- name = "@".concat(new Variable(name.slice(1), this.getIndex(), this.fileInfo()).eval(context).value);
32
+ name = `@${new Variable(name.slice(1), this.getIndex(), this.fileInfo()).eval(context).value}`;
17
33
  }
34
+
18
35
  if (this.evaluating) {
19
36
  throw { type: 'Name',
20
- message: "Recursive variable definition for ".concat(name),
37
+ message: `Recursive variable definition for ${name}`,
21
38
  filename: this.fileInfo().filename,
22
39
  index: this.getIndex() };
23
40
  }
41
+
24
42
  this.evaluating = true;
43
+
25
44
  variable = this.find(context.frames, function (frame) {
26
- var v = frame.variable(name);
45
+ const v = /** @type {Ruleset} */ (frame).variable(name);
27
46
  if (v) {
28
47
  if (v.important) {
29
- var importantScope = context.importantScope[context.importantScope.length - 1];
48
+ const importantScope = context.importantScope[context.importantScope.length - 1];
30
49
  importantScope.important = v.important;
31
50
  }
32
51
  // If in calc, wrap vars in a function call to cascade evaluate args first
33
52
  if (context.inCalc) {
34
- return (new call_1.default('_SELF', [v.value])).eval(context);
53
+ return (new Call('_SELF', [v.value], 0, undefined)).eval(context);
35
54
  }
36
55
  else {
37
56
  return v.value.eval(context);
@@ -41,23 +60,26 @@ Variable.prototype = Object.assign(new node_1.default(), {
41
60
  if (variable) {
42
61
  this.evaluating = false;
43
62
  return variable;
44
- }
45
- else {
63
+ } else {
46
64
  throw { type: 'Name',
47
- message: "variable ".concat(name, " is undefined"),
65
+ message: `variable ${name} is undefined`,
48
66
  filename: this.fileInfo().filename,
49
67
  index: this.getIndex() };
50
68
  }
51
- },
52
- find: function (obj, fun) {
53
- for (var i = 0, r = void 0; i < obj.length; i++) {
69
+ }
70
+
71
+ /**
72
+ * @param {Node[]} obj
73
+ * @param {(frame: Node) => Node | undefined} fun
74
+ * @returns {Node | null}
75
+ */
76
+ find(obj, fun) {
77
+ for (let i = 0, r; i < obj.length; i++) {
54
78
  r = fun.call(obj, obj[i]);
55
- if (r) {
56
- return r;
57
- }
79
+ if (r) { return r; }
58
80
  }
59
81
  return null;
60
82
  }
61
- });
62
- exports.default = Variable;
63
- //# sourceMappingURL=variable.js.map
83
+ }
84
+
85
+ export default Variable;
package/lib/less/utils.js CHANGED
@@ -1,63 +1,64 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNullOrUndefined = exports.flattenArray = exports.merge = exports.copyOptions = exports.defaults = exports.clone = exports.copyArray = exports.getLocation = void 0;
4
- var tslib_1 = require("tslib");
5
1
  /* jshint proto: true */
6
- var Constants = tslib_1.__importStar(require("./constants"));
7
- var copy_anything_1 = require("copy-anything");
8
- function getLocation(index, inputStream) {
9
- var n = index + 1;
10
- var line = null;
11
- var column = -1;
2
+ import * as Constants from './constants.js';
3
+ import { copy } from 'copy-anything';
4
+
5
+ export function getLocation(index, inputStream) {
6
+ let n = index + 1;
7
+ let line = null;
8
+ let column = -1;
9
+
12
10
  while (--n >= 0 && inputStream.charAt(n) !== '\n') {
13
11
  column++;
14
12
  }
13
+
15
14
  if (typeof index === 'number') {
16
15
  line = (inputStream.slice(0, index).match(/\n/g) || '').length;
17
16
  }
17
+
18
18
  return {
19
- line: line,
20
- column: column
19
+ line,
20
+ column
21
21
  };
22
22
  }
23
- exports.getLocation = getLocation;
24
- function copyArray(arr) {
25
- var i;
26
- var length = arr.length;
27
- var copy = new Array(length);
23
+
24
+ export function copyArray(arr) {
25
+ let i;
26
+ const length = arr.length;
27
+ const copy = new Array(length);
28
+
28
29
  for (i = 0; i < length; i++) {
29
30
  copy[i] = arr[i];
30
31
  }
31
32
  return copy;
32
33
  }
33
- exports.copyArray = copyArray;
34
- function clone(obj) {
35
- var cloned = {};
36
- for (var prop in obj) {
34
+
35
+ export function clone(obj) {
36
+ const cloned = {};
37
+ for (const prop in obj) {
37
38
  if (Object.prototype.hasOwnProperty.call(obj, prop)) {
38
39
  cloned[prop] = obj[prop];
39
40
  }
40
41
  }
41
42
  return cloned;
42
43
  }
43
- exports.clone = clone;
44
- function defaults(obj1, obj2) {
45
- var newObj = obj2 || {};
44
+
45
+ export function defaults(obj1, obj2) {
46
+ let newObj = obj2 || {};
46
47
  if (!obj2._defaults) {
47
48
  newObj = {};
48
- var defaults_1 = (0, copy_anything_1.copy)(obj1);
49
- newObj._defaults = defaults_1;
50
- var cloned = obj2 ? (0, copy_anything_1.copy)(obj2) : {};
51
- Object.assign(newObj, defaults_1, cloned);
49
+ const defaults = copy(obj1);
50
+ newObj._defaults = defaults;
51
+ const cloned = obj2 ? copy(obj2) : {};
52
+ Object.assign(newObj, defaults, cloned);
52
53
  }
53
54
  return newObj;
54
55
  }
55
- exports.defaults = defaults;
56
- function copyOptions(obj1, obj2) {
56
+
57
+ export function copyOptions(obj1, obj2) {
57
58
  if (obj2 && obj2._defaults) {
58
59
  return obj2;
59
60
  }
60
- var opts = defaults(obj1, obj2);
61
+ const opts = defaults(obj1, obj2);
61
62
  if (opts.strictMath) {
62
63
  opts.math = Constants.Math.PARENS;
63
64
  }
@@ -96,24 +97,22 @@ function copyOptions(obj1, obj2) {
96
97
  }
97
98
  return opts;
98
99
  }
99
- exports.copyOptions = copyOptions;
100
- function merge(obj1, obj2) {
101
- for (var prop in obj2) {
100
+
101
+ export function merge(obj1, obj2) {
102
+ for (const prop in obj2) {
102
103
  if (Object.prototype.hasOwnProperty.call(obj2, prop)) {
103
104
  obj1[prop] = obj2[prop];
104
105
  }
105
106
  }
106
107
  return obj1;
107
108
  }
108
- exports.merge = merge;
109
- function flattenArray(arr, result) {
110
- if (result === void 0) { result = []; }
111
- for (var i = 0, length_1 = arr.length; i < length_1; i++) {
112
- var value = arr[i];
109
+
110
+ export function flattenArray(arr, result = []) {
111
+ for (let i = 0, length = arr.length; i < length; i++) {
112
+ const value = arr[i];
113
113
  if (Array.isArray(value)) {
114
114
  flattenArray(value, result);
115
- }
116
- else {
115
+ } else {
117
116
  if (value !== undefined) {
118
117
  result.push(value);
119
118
  }
@@ -121,9 +120,7 @@ function flattenArray(arr, result) {
121
120
  }
122
121
  return result;
123
122
  }
124
- exports.flattenArray = flattenArray;
125
- function isNullOrUndefined(val) {
126
- return val === null || val === undefined;
127
- }
128
- exports.isNullOrUndefined = isNullOrUndefined;
129
- //# sourceMappingURL=utils.js.map
123
+
124
+ export function isNullOrUndefined(val) {
125
+ return val === null || val === undefined
126
+ }