less 4.4.2 → 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 (333) hide show
  1. package/bin/lessc +67 -58
  2. package/dist/less.js +14496 -11811
  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 -56
  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 +52 -23
  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 +65 -46
  36. package/lib/less/logger.js +11 -14
  37. package/lib/less/parse-tree.js +94 -38
  38. package/lib/less/parse.js +44 -44
  39. package/lib/less/parser/parser-input.js +152 -131
  40. package/lib/less/parser/parser.js +866 -672
  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 +57 -44
  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 +53 -11
  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 +28 -28
  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 +31 -19
  119. package/.eslintignore +0 -6
  120. package/.eslintrc.js +0 -63
  121. package/Gruntfile.js +0 -404
  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/chunker.js +0 -148
  159. package/lib/less/parser/chunker.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/test/.eslintrc.json +0 -9
  239. package/test/README.md +0 -3
  240. package/test/browser/common.js +0 -230
  241. package/test/browser/css/global-vars/simple.css +0 -3
  242. package/test/browser/css/modify-vars/simple.css +0 -8
  243. package/test/browser/css/plugin/plugin.css +0 -3
  244. package/test/browser/css/postProcessor/postProcessor.css +0 -4
  245. package/test/browser/css/relative-urls/urls.css +0 -36
  246. package/test/browser/css/rewrite-urls/urls.css +0 -36
  247. package/test/browser/css/rootpath/urls.css +0 -35
  248. package/test/browser/css/rootpath-relative/urls.css +0 -35
  249. package/test/browser/css/rootpath-rewrite-urls/urls.css +0 -35
  250. package/test/browser/css/urls.css +0 -54
  251. package/test/browser/generator/benchmark.config.js +0 -50
  252. package/test/browser/generator/generate.js +0 -78
  253. package/test/browser/generator/runner.config.js +0 -188
  254. package/test/browser/generator/runner.js +0 -2
  255. package/test/browser/generator/template.js +0 -93
  256. package/test/browser/generator/utils.js +0 -14
  257. package/test/browser/less/console-errors/test-error.less +0 -3
  258. package/test/browser/less/console-errors/test-error.txt +0 -2
  259. package/test/browser/less/errors/image-height-error.less +0 -3
  260. package/test/browser/less/errors/image-height-error.txt +0 -4
  261. package/test/browser/less/errors/image-size-error.less +0 -3
  262. package/test/browser/less/errors/image-size-error.txt +0 -4
  263. package/test/browser/less/errors/image-width-error.less +0 -3
  264. package/test/browser/less/errors/image-width-error.txt +0 -4
  265. package/test/browser/less/global-vars/simple.less +0 -3
  266. package/test/browser/less/imports/urls.less +0 -4
  267. package/test/browser/less/imports/urls2.less +0 -4
  268. package/test/browser/less/modify-vars/imports/simple2.less +0 -4
  269. package/test/browser/less/modify-vars/simple.less +0 -8
  270. package/test/browser/less/nested-gradient-with-svg-gradient/mixin-consumer.less +0 -5
  271. package/test/browser/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less +0 -15
  272. package/test/browser/less/plugin/plugin.js +0 -4
  273. package/test/browser/less/plugin/plugin.less +0 -4
  274. package/test/browser/less/postProcessor/postProcessor.less +0 -4
  275. package/test/browser/less/relative-urls/urls.less +0 -34
  276. package/test/browser/less/rewrite-urls/urls.less +0 -34
  277. package/test/browser/less/rootpath/urls.less +0 -33
  278. package/test/browser/less/rootpath-relative/urls.less +0 -33
  279. package/test/browser/less/rootpath-rewrite-urls/urls.less +0 -33
  280. package/test/browser/less/urls.less +0 -62
  281. package/test/browser/runner-VisitorPlugin-options.js +0 -3
  282. package/test/browser/runner-VisitorPlugin.js +0 -3
  283. package/test/browser/runner-browser-options.js +0 -51
  284. package/test/browser/runner-browser-spec.js +0 -12
  285. package/test/browser/runner-console-errors.js +0 -5
  286. package/test/browser/runner-errors-options.js +0 -6
  287. package/test/browser/runner-errors-spec.js +0 -3
  288. package/test/browser/runner-filemanagerPlugin-options.js +0 -5
  289. package/test/browser/runner-filemanagerPlugin.js +0 -3
  290. package/test/browser/runner-global-vars-options.js +0 -7
  291. package/test/browser/runner-global-vars-spec.js +0 -3
  292. package/test/browser/runner-legacy-options.js +0 -6
  293. package/test/browser/runner-legacy-spec.js +0 -3
  294. package/test/browser/runner-main-options.js +0 -17
  295. package/test/browser/runner-main-spec.js +0 -7
  296. package/test/browser/runner-modify-vars-options.js +0 -5
  297. package/test/browser/runner-modify-vars-spec.js +0 -33
  298. package/test/browser/runner-no-js-errors-options.js +0 -4
  299. package/test/browser/runner-no-js-errors-spec.js +0 -3
  300. package/test/browser/runner-postProcessorPlugin-options.js +0 -3
  301. package/test/browser/runner-postProcessorPlugin.js +0 -3
  302. package/test/browser/runner-preProcessorPlugin-options.js +0 -3
  303. package/test/browser/runner-preProcessorPlugin.js +0 -3
  304. package/test/browser/runner-production-options.js +0 -3
  305. package/test/browser/runner-production-spec.js +0 -5
  306. package/test/browser/runner-relative-urls-options.js +0 -3
  307. package/test/browser/runner-relative-urls-spec.js +0 -3
  308. package/test/browser/runner-rewrite-urls-options.js +0 -3
  309. package/test/browser/runner-rewrite-urls-spec.js +0 -3
  310. package/test/browser/runner-rootpath-options.js +0 -3
  311. package/test/browser/runner-rootpath-relative-options.js +0 -4
  312. package/test/browser/runner-rootpath-relative-spec.js +0 -3
  313. package/test/browser/runner-rootpath-rewrite-urls-options.js +0 -4
  314. package/test/browser/runner-rootpath-rewrite-urls-spec.js +0 -3
  315. package/test/browser/runner-rootpath-spec.js +0 -3
  316. package/test/browser/runner-strict-units-options.js +0 -5
  317. package/test/browser/runner-strict-units-spec.js +0 -3
  318. package/test/index.js +0 -112
  319. package/test/less-test.js +0 -625
  320. package/test/mocha-playwright/runner.js +0 -210
  321. package/test/modify-vars.js +0 -28
  322. package/test/plugins/filemanager/index.js +0 -19
  323. package/test/plugins/postprocess/index.js +0 -14
  324. package/test/plugins/preprocess/index.js +0 -19
  325. package/test/plugins/visitor/index.js +0 -24
  326. package/test/sourcemaps/basic.json +0 -1
  327. package/test/sourcemaps/custom-props.json +0 -1
  328. package/test/sourcemaps/index.html +0 -17
  329. package/test/sourcemaps-disable-annotation/basic.json +0 -1
  330. package/test/sourcemaps-variable-selector/basic.json +0 -1
  331. package/test/test-es6.ts +0 -17
  332. package/tsconfig.build.json +0 -7
  333. package/tsconfig.json +0 -21
@@ -1,60 +1,127 @@
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 mixin_definition_1 = tslib_1.__importDefault(require("./mixin-definition"));
7
- var default_1 = tslib_1.__importDefault(require("../functions/default"));
8
- var MixinCall = function (elements, args, index, currentFileInfo, important) {
9
- this.selector = new selector_1.default(elements);
10
- this.arguments = args || [];
11
- this._index = index;
12
- this._fileInfo = currentFileInfo;
13
- this.important = important;
14
- this.allowRoot = true;
15
- this.setParent(this.selector, this);
16
- };
17
- MixinCall.prototype = Object.assign(new node_1.default(), {
18
- type: 'MixinCall',
19
- accept: function (visitor) {
1
+ // @ts-check
2
+ /** @import { EvalContext, TreeVisitor, FileInfo } from './node.js' */
3
+ /** @import { FunctionRegistry } from './nested-at-rule.js' */
4
+ import Node from './node.js';
5
+ import Selector from './selector.js';
6
+ import MixinDefinition from './mixin-definition.js';
7
+ import defaultFunc from '../functions/default.js';
8
+
9
+ /**
10
+ * @typedef {{ name?: string, value: Node, expand?: boolean }} MixinArg
11
+ */
12
+
13
+ /**
14
+ * @typedef {Node & {
15
+ * rules?: Node[],
16
+ * selectors?: Selector[],
17
+ * originalRuleset?: Node,
18
+ * matchArgs: (args: MixinArg[] | null, context: EvalContext) => boolean,
19
+ * matchCondition?: (args: MixinArg[] | null, context: EvalContext) => boolean,
20
+ * find: (selector: Selector, self?: Node | null, filter?: (rule: Node) => boolean) => Array<{ rule: Node & { rules?: Node[], originalRuleset?: Node, matchArgs: Function, matchCondition?: Function, evalCall?: Function }, path: Node[] }>,
21
+ * functionRegistry?: FunctionRegistry
22
+ * }} MixinSearchFrame
23
+ */
24
+
25
+ class MixinCall extends Node {
26
+ get type() { return 'MixinCall'; }
27
+
28
+ /**
29
+ * @param {import('./element.js').default[]} elements
30
+ * @param {MixinArg[]} [args]
31
+ * @param {number} [index]
32
+ * @param {FileInfo} [currentFileInfo]
33
+ * @param {string} [important]
34
+ */
35
+ constructor(elements, args, index, currentFileInfo, important) {
36
+ super();
37
+ /** @type {Selector} */
38
+ this.selector = new Selector(elements);
39
+ /** @type {MixinArg[]} */
40
+ this.arguments = args || [];
41
+ this._index = index;
42
+ this._fileInfo = currentFileInfo;
43
+ /** @type {string | undefined} */
44
+ this.important = important;
45
+ this.allowRoot = true;
46
+ this.setParent(this.selector, /** @type {Node} */ (/** @type {unknown} */ (this)));
47
+ }
48
+
49
+ /** @param {TreeVisitor} visitor */
50
+ accept(visitor) {
20
51
  if (this.selector) {
21
- this.selector = visitor.visit(this.selector);
52
+ this.selector = /** @type {Selector} */ (visitor.visit(this.selector));
22
53
  }
23
54
  if (this.arguments.length) {
24
- this.arguments = visitor.visitArray(this.arguments);
55
+ this.arguments = /** @type {MixinArg[]} */ (/** @type {unknown} */ (visitor.visitArray(/** @type {Node[]} */ (/** @type {unknown} */ (this.arguments)))));
25
56
  }
26
- },
27
- eval: function (context) {
28
- var mixins;
29
- var mixin;
30
- var mixinPath;
31
- var args = [];
32
- var arg;
33
- var argValue;
34
- var rules = [];
35
- var match = false;
36
- var i;
37
- var m;
38
- var f;
39
- var isRecursive;
40
- var isOneFound;
41
- var candidates = [];
42
- var candidate;
43
- var conditionResult = [];
44
- var defaultResult;
45
- var defFalseEitherCase = -1;
46
- var defNone = 0;
47
- var defTrue = 1;
48
- var defFalse = 2;
49
- var count;
50
- var originalRuleset;
51
- var noArgumentsFilter;
52
- this.selector = this.selector.eval(context);
57
+ }
58
+
59
+ /**
60
+ * @param {EvalContext} context
61
+ * @returns {Node}
62
+ */
63
+ eval(context) {
64
+ /** @type {{ rule: Node & { rules?: Node[], originalRuleset?: Node, matchArgs: Function, matchCondition?: Function, evalCall?: Function }, path: Node[] }[] | undefined} */
65
+ let mixins;
66
+ /** @type {Node & { rules?: Node[], originalRuleset?: Node, matchArgs: Function, matchCondition?: Function, evalCall?: Function }} */
67
+ let mixin;
68
+ /** @type {Node[]} */
69
+ let mixinPath;
70
+ /** @type {MixinArg[]} */
71
+ const args = [];
72
+ /** @type {MixinArg} */
73
+ let arg;
74
+ /** @type {Node} */
75
+ let argValue;
76
+ /** @type {Node[]} */
77
+ const rules = [];
78
+ let match = false;
79
+ /** @type {number} */
80
+ let i;
81
+ /** @type {number} */
82
+ let m;
83
+ /** @type {number} */
84
+ let f;
85
+ /** @type {boolean} */
86
+ let isRecursive;
87
+ /** @type {boolean | undefined} */
88
+ let isOneFound;
89
+ /** @type {{ mixin: Node & { rules?: Node[], originalRuleset?: Node, matchArgs: Function, matchCondition?: Function, evalCall?: Function }, group: number }[]} */
90
+ const candidates = [];
91
+ /** @type {{ mixin: Node & { rules?: Node[], originalRuleset?: Node, matchArgs: Function, matchCondition?: Function, evalCall?: Function }, group: number } | number} */
92
+ let candidate;
93
+ /** @type {boolean[]} */
94
+ const conditionResult = [];
95
+ /** @type {number | undefined} */
96
+ let defaultResult;
97
+ const defFalseEitherCase = -1;
98
+ const defNone = 0;
99
+ const defTrue = 1;
100
+ const defFalse = 2;
101
+ /** @type {number[]} */
102
+ let count;
103
+ /** @type {Node | undefined} */
104
+ let originalRuleset;
105
+ /** @type {((rule: MixinSearchFrame) => boolean) | undefined} */
106
+ let noArgumentsFilter;
107
+
108
+ this.selector = /** @type {Selector} */ (this.selector.eval(context));
109
+
110
+ /**
111
+ * @param {Node & { matchCondition?: Function }} mixin
112
+ * @param {Node[]} mixinPath
113
+ */
53
114
  function calcDefGroup(mixin, mixinPath) {
54
- var f, p, namespace;
115
+ /** @type {number} */
116
+ let f;
117
+ /** @type {number} */
118
+ let p;
119
+ /** @type {Node & { matchCondition?: Function }} */
120
+ let namespace;
121
+
55
122
  for (f = 0; f < 2; f++) {
56
123
  conditionResult[f] = true;
57
- default_1.default.value(f);
124
+ defaultFunc.value(f);
58
125
  for (p = 0; p < mixinPath.length && conditionResult[f]; p++) {
59
126
  namespace = mixinPath[p];
60
127
  if (namespace.matchCondition) {
@@ -70,37 +137,42 @@ MixinCall.prototype = Object.assign(new node_1.default(), {
70
137
  return conditionResult[1] ?
71
138
  defTrue : defFalse;
72
139
  }
140
+
73
141
  return defNone;
74
142
  }
75
143
  return defFalseEitherCase;
76
144
  }
145
+
77
146
  for (i = 0; i < this.arguments.length; i++) {
78
147
  arg = this.arguments[i];
79
148
  argValue = arg.value.eval(context);
80
149
  if (arg.expand && Array.isArray(argValue.value)) {
81
- argValue = argValue.value;
82
- for (m = 0; m < argValue.length; m++) {
83
- args.push({ value: argValue[m] });
150
+ const expandedValues = /** @type {Node[]} */ (argValue.value);
151
+ for (m = 0; m < expandedValues.length; m++) {
152
+ args.push({value: expandedValues[m]});
84
153
  }
85
- }
86
- else {
87
- args.push({ name: arg.name, value: argValue });
154
+ } else {
155
+ args.push({name: arg.name, value: argValue});
88
156
  }
89
157
  }
90
- noArgumentsFilter = function (rule) { return rule.matchArgs(null, context); };
158
+
159
+ noArgumentsFilter = function(/** @type {MixinSearchFrame} */ rule) {return rule.matchArgs(null, context);};
160
+
91
161
  for (i = 0; i < context.frames.length; i++) {
92
- if ((mixins = context.frames[i].find(this.selector, null, noArgumentsFilter)).length > 0) {
162
+ if ((mixins = /** @type {MixinSearchFrame} */ (context.frames[i]).find(this.selector, null, /** @type {(rule: Node) => boolean} */ (/** @type {unknown} */ (noArgumentsFilter)))).length > 0) {
93
163
  isOneFound = true;
164
+
94
165
  // To make `default()` function independent of definition order we have two "subpasses" here.
95
166
  // At first we evaluate each guard *twice* (with `default() == true` and `default() == false`),
96
167
  // and build candidate list with corresponding flags. Then, when we know all possible matches,
97
168
  // we make a final decision.
169
+
98
170
  for (m = 0; m < mixins.length; m++) {
99
171
  mixin = mixins[m].rule;
100
172
  mixinPath = mixins[m].path;
101
173
  isRecursive = false;
102
174
  for (f = 0; f < context.frames.length; f++) {
103
- if ((!(mixin instanceof mixin_definition_1.default)) && mixin === (context.frames[f].originalRuleset || context.frames[f])) {
175
+ if ((!(mixin instanceof MixinDefinition)) && mixin === (/** @type {Node & { originalRuleset?: Node }} */ (context.frames[f]).originalRuleset || context.frames[f])) {
104
176
  isRecursive = true;
105
177
  break;
106
178
  }
@@ -108,89 +180,100 @@ MixinCall.prototype = Object.assign(new node_1.default(), {
108
180
  if (isRecursive) {
109
181
  continue;
110
182
  }
183
+
111
184
  if (mixin.matchArgs(args, context)) {
112
- candidate = { mixin: mixin, group: calcDefGroup(mixin, mixinPath) };
113
- if (candidate.group !== defFalseEitherCase) {
114
- candidates.push(candidate);
185
+ candidate = {mixin, group: calcDefGroup(mixin, mixinPath)};
186
+
187
+ if (/** @type {{ mixin: Node, group: number }} */ (candidate).group !== defFalseEitherCase) {
188
+ candidates.push(/** @type {{ mixin: Node & { rules?: Node[], originalRuleset?: Node, matchArgs: Function, matchCondition?: Function, evalCall?: Function }, group: number }} */ (candidate));
115
189
  }
190
+
116
191
  match = true;
117
192
  }
118
193
  }
119
- default_1.default.reset();
194
+
195
+ defaultFunc.reset();
196
+
120
197
  count = [0, 0, 0];
121
198
  for (m = 0; m < candidates.length; m++) {
122
199
  count[candidates[m].group]++;
123
200
  }
201
+
124
202
  if (count[defNone] > 0) {
125
203
  defaultResult = defFalse;
126
- }
127
- else {
204
+ } else {
128
205
  defaultResult = defTrue;
129
206
  if ((count[defTrue] + count[defFalse]) > 1) {
130
207
  throw { type: 'Runtime',
131
- message: "Ambiguous use of `default()` found when matching for `".concat(this.format(args), "`"),
208
+ message: `Ambiguous use of \`default()\` found when matching for \`${this.format(args)}\``,
132
209
  index: this.getIndex(), filename: this.fileInfo().filename };
133
210
  }
134
211
  }
212
+
135
213
  for (m = 0; m < candidates.length; m++) {
136
214
  candidate = candidates[m].group;
137
215
  if ((candidate === defNone) || (candidate === defaultResult)) {
138
216
  try {
139
217
  mixin = candidates[m].mixin;
140
- if (!(mixin instanceof mixin_definition_1.default)) {
141
- originalRuleset = mixin.originalRuleset || mixin;
142
- mixin = new mixin_definition_1.default('', [], mixin.rules, null, false, null, originalRuleset.visibilityInfo());
143
- mixin.originalRuleset = originalRuleset;
218
+ if (!(mixin instanceof MixinDefinition)) {
219
+ originalRuleset = /** @type {Node & { originalRuleset?: Node }} */ (mixin).originalRuleset || mixin;
220
+ mixin = new MixinDefinition('', [], mixin.rules, null, false, null, originalRuleset.visibilityInfo());
221
+ /** @type {Node & { originalRuleset?: Node }} */ (mixin).originalRuleset = originalRuleset;
144
222
  }
145
- var newRules = mixin.evalCall(context, args, this.important).rules;
223
+ const newRules = /** @type {MixinDefinition} */ (mixin).evalCall(context, args, this.important).rules;
146
224
  this._setVisibilityToReplacement(newRules);
147
225
  Array.prototype.push.apply(rules, newRules);
148
- }
149
- catch (e) {
150
- throw { message: e.message, index: this.getIndex(), filename: this.fileInfo().filename, stack: e.stack };
226
+ } catch (e) {
227
+ throw { .../** @type {object} */ (e), index: this.getIndex(), filename: this.fileInfo().filename };
151
228
  }
152
229
  }
153
230
  }
231
+
154
232
  if (match) {
155
- return rules;
233
+ return /** @type {Node} */ (/** @type {unknown} */ (rules));
156
234
  }
157
235
  }
158
236
  }
159
237
  if (isOneFound) {
160
- throw { type: 'Runtime',
161
- message: "No matching definition was found for `".concat(this.format(args), "`"),
162
- index: this.getIndex(), filename: this.fileInfo().filename };
238
+ throw { type: 'Runtime',
239
+ message: `No matching definition was found for \`${this.format(args)}\``,
240
+ index: this.getIndex(), filename: this.fileInfo().filename };
241
+ } else {
242
+ throw { type: 'Name',
243
+ message: `${this.selector.toCSS(/** @type {EvalContext} */ ({})).trim()} is undefined`,
244
+ index: this.getIndex(), filename: this.fileInfo().filename };
163
245
  }
164
- else {
165
- throw { type: 'Name',
166
- message: "".concat(this.selector.toCSS().trim(), " is undefined"),
167
- index: this.getIndex(), filename: this.fileInfo().filename };
168
- }
169
- },
170
- _setVisibilityToReplacement: function (replacement) {
171
- var i, rule;
246
+ }
247
+
248
+ /** @param {Node[]} replacement */
249
+ _setVisibilityToReplacement(replacement) {
250
+ /** @type {number} */
251
+ let i;
252
+ /** @type {Node} */
253
+ let rule;
172
254
  if (this.blocksVisibility()) {
173
255
  for (i = 0; i < replacement.length; i++) {
174
256
  rule = replacement[i];
175
257
  rule.addVisibilityBlock();
176
258
  }
177
259
  }
178
- },
179
- format: function (args) {
180
- return "".concat(this.selector.toCSS().trim(), "(").concat(args ? args.map(function (a) {
181
- var argValue = '';
260
+ }
261
+
262
+ /** @param {MixinArg[]} args */
263
+ format(args) {
264
+ return `${this.selector.toCSS(/** @type {EvalContext} */ ({})).trim()}(${args ? args.map(function (/** @type {MixinArg} */ a) {
265
+ let argValue = '';
182
266
  if (a.name) {
183
- argValue += "".concat(a.name, ":");
267
+ argValue += `${a.name}:`;
184
268
  }
185
269
  if (a.value.toCSS) {
186
- argValue += a.value.toCSS();
187
- }
188
- else {
270
+ argValue += a.value.toCSS(/** @type {EvalContext} */ ({}));
271
+ } else {
189
272
  argValue += '???';
190
273
  }
191
274
  return argValue;
192
- }).join(', ') : '', ")");
275
+ }).join(', ') : ''})`;
193
276
  }
194
- });
195
- exports.default = MixinCall;
196
- //# sourceMappingURL=mixin-call.js.map
277
+ }
278
+
279
+ export default MixinCall;