less 3.13.1 → 4.1.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 (200) hide show
  1. package/Gruntfile.js +1 -1
  2. package/bin/lessc +14 -3
  3. package/dist/less.js +11156 -11157
  4. package/dist/less.min.js +3 -3
  5. package/dist/less.min.js.map +1 -1
  6. package/lib/less/constants.js +2 -2
  7. package/lib/less/constants.js.map +1 -1
  8. package/lib/less/contexts.js +88 -110
  9. package/lib/less/contexts.js.map +1 -1
  10. package/lib/less/data/index.js +3 -5
  11. package/lib/less/data/index.js.map +1 -1
  12. package/lib/less/default-options.js +57 -53
  13. package/lib/less/default-options.js.map +1 -1
  14. package/lib/less/environment/abstract-file-manager.js +6 -6
  15. package/lib/less/environment/abstract-file-manager.js.map +1 -1
  16. package/lib/less/environment/abstract-plugin-loader.js +7 -13
  17. package/lib/less/environment/abstract-plugin-loader.js.map +1 -1
  18. package/lib/less/environment/environment.js +9 -11
  19. package/lib/less/environment/environment.js.map +1 -1
  20. package/lib/less/functions/boolean.js +14 -6
  21. package/lib/less/functions/boolean.js.map +1 -1
  22. package/lib/less/functions/color-blending.js +2 -4
  23. package/lib/less/functions/color-blending.js.map +1 -1
  24. package/lib/less/functions/color.js +41 -9
  25. package/lib/less/functions/color.js.map +1 -1
  26. package/lib/less/functions/data-uri.js +5 -26
  27. package/lib/less/functions/data-uri.js.map +1 -1
  28. package/lib/less/functions/default.js +2 -4
  29. package/lib/less/functions/default.js.map +1 -1
  30. package/lib/less/functions/function-caller.js +19 -35
  31. package/lib/less/functions/function-caller.js.map +1 -1
  32. package/lib/less/functions/index.js +14 -16
  33. package/lib/less/functions/index.js.map +1 -1
  34. package/lib/less/functions/list.js +21 -12
  35. package/lib/less/functions/list.js.map +1 -1
  36. package/lib/less/functions/math-helper.js +2 -4
  37. package/lib/less/functions/math-helper.js.map +1 -1
  38. package/lib/less/functions/math.js +2 -4
  39. package/lib/less/functions/math.js.map +1 -1
  40. package/lib/less/functions/number.js +12 -8
  41. package/lib/less/functions/number.js.map +1 -1
  42. package/lib/less/functions/string.js +4 -6
  43. package/lib/less/functions/string.js.map +1 -1
  44. package/lib/less/functions/svg.js +6 -8
  45. package/lib/less/functions/svg.js.map +1 -1
  46. package/lib/less/functions/types.js +9 -11
  47. package/lib/less/functions/types.js.map +1 -1
  48. package/lib/less/import-manager.js +6 -27
  49. package/lib/less/import-manager.js.map +1 -1
  50. package/lib/less/index.js +48 -82
  51. package/lib/less/index.js.map +1 -1
  52. package/lib/less/less-error.js +6 -24
  53. package/lib/less/less-error.js.map +1 -1
  54. package/lib/less/parse-tree.js +8 -8
  55. package/lib/less/parse-tree.js.map +1 -1
  56. package/lib/less/parse.js +11 -31
  57. package/lib/less/parse.js.map +1 -1
  58. package/lib/less/parser/chunker.js +4 -2
  59. package/lib/less/parser/chunker.js.map +1 -1
  60. package/lib/less/parser/parser-input.js +2 -4
  61. package/lib/less/parser/parser-input.js.map +1 -1
  62. package/lib/less/parser/parser.js +8 -29
  63. package/lib/less/parser/parser.js.map +1 -1
  64. package/lib/less/plugin-manager.js +2 -3
  65. package/lib/less/plugin-manager.js.map +1 -1
  66. package/lib/less/render.js +6 -22
  67. package/lib/less/render.js.map +1 -1
  68. package/lib/less/source-map-builder.js +4 -2
  69. package/lib/less/source-map-builder.js.map +1 -1
  70. package/lib/less/source-map-output.js +5 -7
  71. package/lib/less/source-map-output.js.map +1 -1
  72. package/lib/less/transform-tree.js +9 -9
  73. package/lib/less/transform-tree.js.map +1 -1
  74. package/lib/less/tree/anonymous.js +19 -20
  75. package/lib/less/tree/anonymous.js.map +1 -1
  76. package/lib/less/tree/assignment.js +22 -23
  77. package/lib/less/tree/assignment.js.map +1 -1
  78. package/lib/less/tree/atrule.js +105 -116
  79. package/lib/less/tree/atrule.js.map +1 -1
  80. package/lib/less/tree/attribute.js +18 -19
  81. package/lib/less/tree/attribute.js.map +1 -1
  82. package/lib/less/tree/call.js +68 -69
  83. package/lib/less/tree/call.js.map +1 -1
  84. package/lib/less/tree/color.js +163 -172
  85. package/lib/less/tree/color.js.map +1 -1
  86. package/lib/less/tree/combinator.js +9 -10
  87. package/lib/less/tree/combinator.js.map +1 -1
  88. package/lib/less/tree/comment.js +15 -16
  89. package/lib/less/tree/comment.js.map +1 -1
  90. package/lib/less/tree/condition.js +29 -30
  91. package/lib/less/tree/condition.js.map +1 -1
  92. package/lib/less/tree/debug-info.js +32 -30
  93. package/lib/less/tree/debug-info.js.map +1 -1
  94. package/lib/less/tree/declaration.js +71 -95
  95. package/lib/less/tree/declaration.js.map +1 -1
  96. package/lib/less/tree/detached-ruleset.js +18 -38
  97. package/lib/less/tree/detached-ruleset.js.map +1 -1
  98. package/lib/less/tree/dimension.js +126 -129
  99. package/lib/less/tree/dimension.js.map +1 -1
  100. package/lib/less/tree/element.js +40 -41
  101. package/lib/less/tree/element.js.map +1 -1
  102. package/lib/less/tree/expression.js +55 -74
  103. package/lib/less/tree/expression.js.map +1 -1
  104. package/lib/less/tree/extend.js +28 -34
  105. package/lib/less/tree/extend.js.map +1 -1
  106. package/lib/less/tree/import.js +120 -140
  107. package/lib/less/tree/import.js.map +1 -1
  108. package/lib/less/tree/index.js +37 -39
  109. package/lib/less/tree/index.js.map +1 -1
  110. package/lib/less/tree/javascript.js +23 -24
  111. package/lib/less/tree/javascript.js.map +1 -1
  112. package/lib/less/tree/js-eval-node.js +51 -50
  113. package/lib/less/tree/js-eval-node.js.map +1 -1
  114. package/lib/less/tree/keyword.js +10 -11
  115. package/lib/less/tree/keyword.js.map +1 -1
  116. package/lib/less/tree/media.js +111 -131
  117. package/lib/less/tree/media.js.map +1 -1
  118. package/lib/less/tree/mixin-call.js +156 -160
  119. package/lib/less/tree/mixin-call.js.map +1 -1
  120. package/lib/less/tree/mixin-definition.js +164 -184
  121. package/lib/less/tree/mixin-definition.js.map +1 -1
  122. package/lib/less/tree/namespace-value.js +53 -57
  123. package/lib/less/tree/namespace-value.js.map +1 -1
  124. package/lib/less/tree/negative.js +16 -17
  125. package/lib/less/tree/negative.js.map +1 -1
  126. package/lib/less/tree/node.js +39 -39
  127. package/lib/less/tree/node.js.map +1 -1
  128. package/lib/less/tree/operation.js +41 -63
  129. package/lib/less/tree/operation.js.map +1 -1
  130. package/lib/less/tree/paren.js +13 -14
  131. package/lib/less/tree/paren.js.map +1 -1
  132. package/lib/less/tree/property.js +48 -49
  133. package/lib/less/tree/property.js.map +1 -1
  134. package/lib/less/tree/quoted.js +50 -51
  135. package/lib/less/tree/quoted.js.map +1 -1
  136. package/lib/less/tree/ruleset.js +665 -702
  137. package/lib/less/tree/ruleset.js.map +1 -1
  138. package/lib/less/tree/selector.js +105 -106
  139. package/lib/less/tree/selector.js.map +1 -1
  140. package/lib/less/tree/unicode-descriptor.js +5 -6
  141. package/lib/less/tree/unicode-descriptor.js.map +1 -1
  142. package/lib/less/tree/unit.js +99 -120
  143. package/lib/less/tree/unit.js.map +1 -1
  144. package/lib/less/tree/url.js +44 -45
  145. package/lib/less/tree/url.js.map +1 -1
  146. package/lib/less/tree/value.js +27 -26
  147. package/lib/less/tree/value.js.map +1 -1
  148. package/lib/less/tree/variable-call.js +30 -31
  149. package/lib/less/tree/variable-call.js.map +1 -1
  150. package/lib/less/tree/variable.js +46 -48
  151. package/lib/less/tree/variable.js.map +1 -1
  152. package/lib/less/utils.js +5 -23
  153. package/lib/less/utils.js.map +1 -1
  154. package/lib/less/visitors/extend-visitor.js +14 -41
  155. package/lib/less/visitors/extend-visitor.js.map +1 -1
  156. package/lib/less/visitors/import-sequencer.js +2 -7
  157. package/lib/less/visitors/import-sequencer.js.map +1 -1
  158. package/lib/less/visitors/import-visitor.js +7 -33
  159. package/lib/less/visitors/import-visitor.js.map +1 -1
  160. package/lib/less/visitors/index.js +7 -9
  161. package/lib/less/visitors/index.js.map +1 -1
  162. package/lib/less/visitors/join-selector-visitor.js +2 -4
  163. package/lib/less/visitors/join-selector-visitor.js.map +1 -1
  164. package/lib/less/visitors/to-css-visitor.js +4 -6
  165. package/lib/less/visitors/to-css-visitor.js.map +1 -1
  166. package/lib/less/visitors/visitor.js +4 -12
  167. package/lib/less/visitors/visitor.js.map +1 -1
  168. package/lib/less-browser/add-default-options.js +2 -4
  169. package/lib/less-browser/add-default-options.js.map +1 -1
  170. package/lib/less-browser/bootstrap.js +4 -6
  171. package/lib/less-browser/bootstrap.js.map +1 -1
  172. package/lib/less-browser/browser.js +2 -20
  173. package/lib/less-browser/browser.js.map +1 -1
  174. package/lib/less-browser/error-reporting.js +3 -24
  175. package/lib/less-browser/error-reporting.js.map +1 -1
  176. package/lib/less-browser/file-manager.js +17 -36
  177. package/lib/less-browser/file-manager.js.map +1 -1
  178. package/lib/less-browser/image-size.js +2 -4
  179. package/lib/less-browser/image-size.js.map +1 -1
  180. package/lib/less-browser/index.js +9 -11
  181. package/lib/less-browser/index.js.map +1 -1
  182. package/lib/less-browser/plugin-loader.js +10 -29
  183. package/lib/less-browser/plugin-loader.js.map +1 -1
  184. package/lib/less-node/file-manager.js +15 -34
  185. package/lib/less-node/file-manager.js.map +1 -1
  186. package/lib/less-node/image-size.js +4 -6
  187. package/lib/less-node/image-size.js.map +1 -1
  188. package/lib/less-node/index.js +10 -16
  189. package/lib/less-node/index.js.map +1 -1
  190. package/lib/less-node/plugin-loader.js +23 -42
  191. package/lib/less-node/plugin-loader.js.map +1 -1
  192. package/lib/less-node/url-file-manager.js +23 -38
  193. package/lib/less-node/url-file-manager.js.map +1 -1
  194. package/package.json +12 -9
  195. package/test/browser/less/errors/image-height-error.txt +1 -1
  196. package/test/browser/less/errors/image-size-error.txt +1 -1
  197. package/test/browser/less/errors/image-width-error.txt +1 -1
  198. package/test/index.js +28 -9
  199. package/test/less-test.js +36 -16
  200. package/tsconfig.json +1 -0
@@ -1,46 +1,28 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- extendStatics(d, b);
11
- function __() { this.constructor = d; }
12
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
- };
14
- })();
15
- var __importDefault = (this && this.__importDefault) || function (mod) {
16
- return (mod && mod.__esModule) ? mod : { "default": mod };
17
- };
18
2
  Object.defineProperty(exports, "__esModule", { value: true });
19
- var path_1 = __importDefault(require("path"));
20
- var abstract_plugin_loader_js_1 = __importDefault(require("../less/environment/abstract-plugin-loader.js"));
3
+ var tslib_1 = require("tslib");
4
+ var path_1 = tslib_1.__importDefault(require("path"));
5
+ var abstract_plugin_loader_js_1 = tslib_1.__importDefault(require("../less/environment/abstract-plugin-loader.js"));
21
6
  /**
22
7
  * Node Plugin Loader
23
8
  */
24
- var PluginLoader = /** @class */ (function (_super) {
25
- __extends(PluginLoader, _super);
26
- function PluginLoader(less) {
27
- var _this = _super.call(this) || this;
28
- _this.less = less;
29
- _this.require = function (prefix) {
30
- prefix = path_1.default.dirname(prefix);
31
- return function (id) {
32
- var str = id.substr(0, 2);
33
- if (str === '..' || str === './') {
34
- return require(path_1.default.join(prefix, id));
35
- }
36
- else {
37
- return require(id);
38
- }
39
- };
9
+ var PluginLoader = function (less) {
10
+ this.less = less;
11
+ this.require = function (prefix) {
12
+ prefix = path_1.default.dirname(prefix);
13
+ return function (id) {
14
+ var str = id.substr(0, 2);
15
+ if (str === '..' || str === './') {
16
+ return require(path_1.default.join(prefix, id));
17
+ }
18
+ else {
19
+ return require(id);
20
+ }
40
21
  };
41
- return _this;
42
- }
43
- PluginLoader.prototype.loadPlugin = function (filename, basePath, context, environment, fileManager) {
22
+ };
23
+ };
24
+ PluginLoader.prototype = Object.assign(new abstract_plugin_loader_js_1.default(), {
25
+ loadPlugin: function (filename, basePath, context, environment, fileManager) {
44
26
  var prefix = filename.slice(0, 1);
45
27
  var explicit = prefix === '.' || prefix === '/' || filename.slice(-3).toLowerCase() === '.js';
46
28
  if (!explicit) {
@@ -62,12 +44,11 @@ var PluginLoader = /** @class */ (function (_super) {
62
44
  reject(err);
63
45
  });
64
46
  });
65
- };
66
- PluginLoader.prototype.loadPluginSync = function (filename, basePath, context, environment, fileManager) {
47
+ },
48
+ loadPluginSync: function (filename, basePath, context, environment, fileManager) {
67
49
  context.syncImport = true;
68
50
  return this.loadPlugin(filename, basePath, context, environment, fileManager);
69
- };
70
- return PluginLoader;
71
- }(abstract_plugin_loader_js_1.default));
51
+ }
52
+ });
72
53
  exports.default = PluginLoader;
73
54
  //# sourceMappingURL=plugin-loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../src/less-node/plugin-loader.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,8CAAwB;AACxB,4GAAiF;AAEjF;;GAEG;AACH;IAA2B,gCAAoB;IAC3C,sBAAY,IAAI;QAAhB,YACI,iBAAO,SAeV;QAbG,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,OAAO,GAAG,UAAA,MAAM;YACjB,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9B,OAAO,UAAA,EAAE;gBACL,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE;oBAC9B,OAAO,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;iBACzC;qBACI;oBACD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;iBACtB;YACL,CAAC,CAAC;QACN,CAAC,CAAC;;IACN,CAAC;IAED,iCAAU,GAAV,UAAW,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW;QAC5D,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAM,QAAQ,GAAG,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;QAChG,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,CAAC,QAAQ,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;SAC3C;QAED,IAAI,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;SAC7E;QAED,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/D,UAAA,IAAI;gBACA,IAAI;oBACA,OAAO,CAAC,IAAI,CAAC,CAAC;iBACjB;gBACD,OAAO,CAAC,EAAE;oBACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACf,MAAM,CAAC,CAAC,CAAC,CAAC;iBACb;YACL,CAAC,CACJ,CAAC,KAAK,CAAC,UAAA,GAAG;gBACP,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,qCAAc,GAAd,UAAe,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW;QAChE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAClF,CAAC;IACL,mBAAC;AAAD,CAAC,AAnDD,CAA2B,mCAAoB,GAmD9C;AAED,kBAAe,YAAY,CAAC","sourcesContent":["import path from 'path';\nimport AbstractPluginLoader from '../less/environment/abstract-plugin-loader.js';\n\n/**\n * Node Plugin Loader\n */\nclass PluginLoader extends AbstractPluginLoader {\n constructor(less) {\n super();\n\n this.less = less;\n this.require = prefix => {\n prefix = path.dirname(prefix);\n return id => {\n const str = id.substr(0, 2);\n if (str === '..' || str === './') {\n return require(path.join(prefix, id));\n }\n else {\n return require(id);\n }\n };\n };\n }\n\n loadPlugin(filename, basePath, context, environment, fileManager) {\n const prefix = filename.slice(0, 1);\n const explicit = prefix === '.' || prefix === '/' || filename.slice(-3).toLowerCase() === '.js';\n if (!explicit) {\n context.prefixes = ['less-plugin-', ''];\n }\n\n if (context.syncImport) {\n return fileManager.loadFileSync(filename, basePath, context, environment);\n }\n\n return new Promise((fulfill, reject) => {\n fileManager.loadFile(filename, basePath, context, environment).then(\n data => {\n try {\n fulfill(data);\n }\n catch (e) {\n console.log(e);\n reject(e);\n }\n }\n ).catch(err => {\n reject(err);\n });\n });\n }\n\n loadPluginSync(filename, basePath, context, environment, fileManager) {\n context.syncImport = true;\n return this.loadPlugin(filename, basePath, context, environment, fileManager);\n }\n}\n\nexport default PluginLoader;\n\n"]}
1
+ {"version":3,"file":"plugin-loader.js","sourceRoot":"","sources":["../../src/less-node/plugin-loader.js"],"names":[],"mappings":";;;AAAA,sDAAwB;AACxB,oHAAiF;AAEjF;;GAEG;AACH,IAAM,YAAY,GAAG,UAAS,IAAI;IAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,IAAI,CAAC,OAAO,GAAG,UAAA,MAAM;QACjB,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,UAAA,EAAE;YACL,IAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE;gBAC9B,OAAO,OAAO,CAAC,cAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;aACzC;iBACI;gBACD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAC;aACtB;QACL,CAAC,CAAC;IACN,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,mCAAoB,EAAE,EAAE;IAC/D,UAAU,YAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW;QAC5D,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAM,QAAQ,GAAG,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;QAChG,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO,CAAC,QAAQ,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;SAC3C;QAED,IAAI,OAAO,CAAC,UAAU,EAAE;YACpB,OAAO,WAAW,CAAC,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;SAC7E;QAED,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,WAAW,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CAC/D,UAAA,IAAI;gBACA,IAAI;oBACA,OAAO,CAAC,IAAI,CAAC,CAAC;iBACjB;gBACD,OAAO,CAAC,EAAE;oBACN,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACf,MAAM,CAAC,CAAC,CAAC,CAAC;iBACb;YACL,CAAC,CACJ,CAAC,KAAK,CAAC,UAAA,GAAG;gBACP,MAAM,CAAC,GAAG,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,cAAc,YAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW;QAChE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAClF,CAAC;CACJ,CAAC,CAAC;AAEH,kBAAe,YAAY,CAAC","sourcesContent":["import path from 'path';\nimport AbstractPluginLoader from '../less/environment/abstract-plugin-loader.js';\n\n/**\n * Node Plugin Loader\n */\nconst PluginLoader = function(less) {\n this.less = less;\n this.require = prefix => {\n prefix = path.dirname(prefix);\n return id => {\n const str = id.substr(0, 2);\n if (str === '..' || str === './') {\n return require(path.join(prefix, id));\n }\n else {\n return require(id);\n }\n };\n };\n};\n\nPluginLoader.prototype = Object.assign(new AbstractPluginLoader(), {\n loadPlugin(filename, basePath, context, environment, fileManager) {\n const prefix = filename.slice(0, 1);\n const explicit = prefix === '.' || prefix === '/' || filename.slice(-3).toLowerCase() === '.js';\n if (!explicit) {\n context.prefixes = ['less-plugin-', ''];\n }\n\n if (context.syncImport) {\n return fileManager.loadFileSync(filename, basePath, context, environment);\n }\n\n return new Promise((fulfill, reject) => {\n fileManager.loadFile(filename, basePath, context, environment).then(\n data => {\n try {\n fulfill(data);\n }\n catch (e) {\n console.log(e);\n reject(e);\n }\n }\n ).catch(err => {\n reject(err);\n });\n });\n },\n\n loadPluginSync(filename, basePath, context, environment, fileManager) {\n context.syncImport = true;\n return this.loadPlugin(filename, basePath, context, environment, fileManager);\n }\n});\n\nexport default PluginLoader;\n\n"]}
@@ -1,39 +1,21 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- extendStatics(d, b);
11
- function __() { this.constructor = d; }
12
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13
- };
14
- })();
15
- var __importDefault = (this && this.__importDefault) || function (mod) {
16
- return (mod && mod.__esModule) ? mod : { "default": mod };
17
- };
18
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
19
4
  var isUrlRe = /^(?:https?:)?\/\//i;
20
- var url_1 = __importDefault(require("url"));
5
+ var url_1 = tslib_1.__importDefault(require("url"));
21
6
  var request;
22
- var abstract_file_manager_js_1 = __importDefault(require("../less/environment/abstract-file-manager.js"));
23
- var logger_1 = __importDefault(require("../less/logger"));
24
- var UrlFileManager = /** @class */ (function (_super) {
25
- __extends(UrlFileManager, _super);
26
- function UrlFileManager() {
27
- return _super !== null && _super.apply(this, arguments) || this;
28
- }
29
- UrlFileManager.prototype.supports = function (filename, currentDirectory, options, environment) {
7
+ var abstract_file_manager_js_1 = tslib_1.__importDefault(require("../less/environment/abstract-file-manager.js"));
8
+ var logger_1 = tslib_1.__importDefault(require("../less/logger"));
9
+ var UrlFileManager = function () { };
10
+ UrlFileManager.prototype = Object.assign(new abstract_file_manager_js_1.default(), {
11
+ supports: function (filename, currentDirectory, options, environment) {
30
12
  return isUrlRe.test(filename) || isUrlRe.test(currentDirectory);
31
- };
32
- UrlFileManager.prototype.loadFile = function (filename, currentDirectory, options, environment) {
13
+ },
14
+ loadFile: function (filename, currentDirectory, options, environment) {
33
15
  return new Promise(function (fulfill, reject) {
34
16
  if (request === undefined) {
35
17
  try {
36
- request = require('native-request');
18
+ request = require('needle');
37
19
  }
38
20
  catch (e) {
39
21
  request = null;
@@ -46,23 +28,26 @@ var UrlFileManager = /** @class */ (function (_super) {
46
28
  var urlStr = isUrlRe.test(filename) ? filename : url_1.default.resolve(currentDirectory, filename);
47
29
  /** native-request currently has a bug */
48
30
  var hackUrlStr = urlStr.indexOf('?') === -1 ? urlStr + '?' : urlStr;
49
- request.get(hackUrlStr, function (error, body, status) {
50
- if (status === 404) {
51
- reject({ type: 'File', message: "resource '" + urlStr + "' was not found\n" });
31
+ request.get(hackUrlStr, { follow_max: 5 }, function (err, resp, body) {
32
+ if (err || resp.statusCode >= 400) {
33
+ var message = resp.statusCode === 404
34
+ ? "resource '" + urlStr + "' was not found\n"
35
+ : "resource '" + urlStr + "' gave this Error:\n " + (err || resp.statusMessage || resp.statusCode) + "\n";
36
+ reject({ type: 'File', message: message });
52
37
  return;
53
38
  }
54
- if (error) {
55
- reject({ type: 'File', message: "resource '" + urlStr + "' gave this Error:\n " + error + "\n" });
39
+ if (resp.statusCode >= 300) {
40
+ reject({ type: 'File', message: "resource '" + urlStr + "' caused too many redirects" });
56
41
  return;
57
42
  }
43
+ body = body.toString('utf8');
58
44
  if (!body) {
59
- logger_1.default.warn("Warning: Empty body (HTTP " + status + ") returned by \"" + urlStr + "\"");
45
+ logger_1.default.warn("Warning: Empty body (HTTP " + resp.statusCode + ") returned by \"" + urlStr + "\"");
60
46
  }
61
- fulfill({ contents: body, filename: urlStr });
47
+ fulfill({ contents: body || '', filename: urlStr });
62
48
  });
63
49
  });
64
- };
65
- return UrlFileManager;
66
- }(abstract_file_manager_js_1.default));
50
+ }
51
+ });
67
52
  exports.default = UrlFileManager;
68
53
  //# sourceMappingURL=url-file-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-file-manager.js","sourceRoot":"","sources":["../../src/less-node/url-file-manager.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAM,OAAO,GAAG,oBAAoB,CAAC;AACrC,4CAAsB;AACtB,IAAI,OAAO,CAAC;AACZ,0GAA+E;AAC/E,0DAAoC;AAEpC;IAA6B,kCAAmB;IAAhD;;IAqCA,CAAC;IApCG,iCAAQ,GAAR,UAAS,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW;QACrD,OAAO,OAAO,CAAC,IAAI,CAAE,QAAQ,CAAE,IAAI,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtE,CAAC;IAED,iCAAQ,GAAR,UAAS,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW;QACrD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,IAAI;oBAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;iBAAE;gBAC5C,OAAO,CAAC,EAAE;oBAAE,OAAO,GAAG,IAAI,CAAC;iBAAE;aAChC;YACD,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,0EAA0E,EAAE,CAAC,CAAC;gBAC9G,OAAO;aACV;YAED,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAE,QAAQ,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAE3F,yCAAyC;YACzC,IAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;YAErE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,UAAC,KAAK,EAAE,IAAI,EAAE,MAAM;gBACxC,IAAI,MAAM,KAAK,GAAG,EAAE;oBAChB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAa,MAAM,sBAAmB,EAAE,CAAC,CAAC;oBAC1E,OAAO;iBACV;gBACD,IAAI,KAAK,EAAE;oBACP,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAa,MAAM,8BAAyB,KAAK,OAAI,EAAE,CAAC,CAAC;oBACzF,OAAO;iBACV;gBACD,IAAI,CAAC,IAAI,EAAE;oBACP,gBAAM,CAAC,IAAI,CAAC,+BAA6B,MAAM,wBAAkB,MAAM,OAAG,CAAC,CAAC;iBAC/E;gBACD,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAClD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IACL,qBAAC;AAAD,CAAC,AArCD,CAA6B,kCAAmB,GAqC/C;AAED,kBAAe,cAAc,CAAC","sourcesContent":["const isUrlRe = /^(?:https?:)?\\/\\//i;\nimport url from 'url';\nlet request;\nimport AbstractFileManager from '../less/environment/abstract-file-manager.js';\nimport logger from '../less/logger';\n\nclass UrlFileManager extends AbstractFileManager {\n supports(filename, currentDirectory, options, environment) {\n return isUrlRe.test( filename ) || isUrlRe.test(currentDirectory);\n }\n\n loadFile(filename, currentDirectory, options, environment) {\n return new Promise((fulfill, reject) => {\n if (request === undefined) {\n try { request = require('native-request'); }\n catch (e) { request = null; }\n }\n if (!request) {\n reject({ type: 'File', message: 'optional dependency \\'native-request\\' required to import over http(s)\\n' });\n return;\n }\n\n let urlStr = isUrlRe.test( filename ) ? filename : url.resolve(currentDirectory, filename);\n \n /** native-request currently has a bug */\n const hackUrlStr = urlStr.indexOf('?') === -1 ? urlStr + '?' : urlStr\n\n request.get(hackUrlStr, (error, body, status) => {\n if (status === 404) {\n reject({ type: 'File', message: `resource '${urlStr}' was not found\\n` });\n return;\n }\n if (error) {\n reject({ type: 'File', message: `resource '${urlStr}' gave this Error:\\n ${error}\\n` });\n return;\n }\n if (!body) {\n logger.warn(`Warning: Empty body (HTTP ${status}) returned by \"${urlStr}\"`);\n }\n fulfill({ contents: body, filename: urlStr });\n });\n });\n }\n}\n\nexport default UrlFileManager;\n"]}
1
+ {"version":3,"file":"url-file-manager.js","sourceRoot":"","sources":["../../src/less-node/url-file-manager.js"],"names":[],"mappings":";;;AAAA,IAAM,OAAO,GAAG,oBAAoB,CAAC;AACrC,oDAAsB;AACtB,IAAI,OAAO,CAAC;AACZ,kHAA+E;AAC/E,kEAAoC;AAEpC,IAAM,cAAc,GAAG,cAAY,CAAC,CAAA;AACpC,cAAc,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,kCAAmB,EAAE,EAAE;IAChE,QAAQ,YAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW;QACrD,OAAO,OAAO,CAAC,IAAI,CAAE,QAAQ,CAAE,IAAI,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACtE,CAAC;IAED,QAAQ,YAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW;QACrD,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAI,OAAO,KAAK,SAAS,EAAE;gBACvB,IAAI;oBAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;iBAAE;gBACpC,OAAO,CAAC,EAAE;oBAAE,OAAO,GAAG,IAAI,CAAC;iBAAE;aAChC;YACD,IAAI,CAAC,OAAO,EAAE;gBACV,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,0EAA0E,EAAE,CAAC,CAAC;gBAC9G,OAAO;aACV;YAED,IAAI,MAAM,GAAG,OAAO,CAAC,IAAI,CAAE,QAAQ,CAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAG,CAAC,OAAO,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YAE3F,yCAAyC;YACzC,IAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAA;YAErE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,UAAC,GAAG,EAAE,IAAI,EAAE,IAAI;gBACvD,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE;oBAC/B,IAAM,OAAO,GAAG,IAAI,CAAC,UAAU,KAAK,GAAG;wBACnC,CAAC,CAAC,eAAa,MAAM,sBAAmB;wBACxC,CAAC,CAAC,eAAa,MAAM,+BAAyB,GAAG,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,QAAI,CAAC;oBACnG,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;oBAClC,OAAO;iBACV;gBACD,IAAI,IAAI,CAAC,UAAU,IAAI,GAAG,EAAE;oBACxB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAa,MAAM,gCAA6B,EAAE,CAAC,CAAC;oBACpF,OAAO;iBACV;gBACD,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI,EAAE;oBACP,gBAAM,CAAC,IAAI,CAAC,+BAA6B,IAAI,CAAC,UAAU,wBAAkB,MAAM,OAAG,CAAC,CAAC;iBACxF;gBACD,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC,CAAC;AAEH,kBAAe,cAAc,CAAC","sourcesContent":["const isUrlRe = /^(?:https?:)?\\/\\//i;\nimport url from 'url';\nlet request;\nimport AbstractFileManager from '../less/environment/abstract-file-manager.js';\nimport logger from '../less/logger';\n\nconst UrlFileManager = function() {}\nUrlFileManager.prototype = Object.assign(new AbstractFileManager(), {\n supports(filename, currentDirectory, options, environment) {\n return isUrlRe.test( filename ) || isUrlRe.test(currentDirectory);\n },\n\n loadFile(filename, currentDirectory, options, environment) {\n return new Promise((fulfill, reject) => {\n if (request === undefined) {\n try { request = require('needle'); }\n catch (e) { request = null; }\n }\n if (!request) {\n reject({ type: 'File', message: 'optional dependency \\'native-request\\' required to import over http(s)\\n' });\n return;\n }\n\n let urlStr = isUrlRe.test( filename ) ? filename : url.resolve(currentDirectory, filename);\n\n /** native-request currently has a bug */\n const hackUrlStr = urlStr.indexOf('?') === -1 ? urlStr + '?' : urlStr\n\n request.get(hackUrlStr, { follow_max: 5 }, (err, resp, body) => {\n if (err || resp.statusCode >= 400) {\n const message = resp.statusCode === 404\n ? `resource '${urlStr}' was not found\\n`\n : `resource '${urlStr}' gave this Error:\\n ${err || resp.statusMessage || resp.statusCode}\\n`;\n reject({ type: 'File', message });\n return;\n }\n if (resp.statusCode >= 300) {\n reject({ type: 'File', message: `resource '${urlStr}' caused too many redirects` });\n return;\n }\n body = body.toString('utf8');\n if (!body) {\n logger.warn(`Warning: Empty body (HTTP ${resp.statusCode}) returned by \"${urlStr}\"`);\n }\n fulfill({ contents: body || '', filename: urlStr });\n });\n });\n }\n});\n\nexport default UrlFileManager;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "less",
3
- "version": "3.13.1",
3
+ "version": "4.1.0",
4
4
  "description": "Leaner CSS",
5
5
  "homepage": "http://lesscss.org",
6
6
  "author": {
@@ -50,12 +50,15 @@
50
50
  "image-size": "~0.5.0",
51
51
  "make-dir": "^2.1.0",
52
52
  "mime": "^1.4.1",
53
- "native-request": "^1.0.5",
53
+ "needle": "^2.5.2",
54
54
  "source-map": "~0.6.0"
55
55
  },
56
56
  "devDependencies": {
57
- "@less/test-data": "^3.13.0",
58
- "@less/test-import-module": "^3.13.0",
57
+ "@less/test-data": "^4.1.0",
58
+ "@less/test-import-module": "^4.0.0",
59
+ "@rollup/plugin-commonjs": "^17.0.0",
60
+ "@rollup/plugin-json": "^4.1.0",
61
+ "@rollup/plugin-node-resolve": "^11.0.0",
59
62
  "@typescript-eslint/eslint-plugin": "^3.3.0",
60
63
  "@typescript-eslint/parser": "^3.3.0",
61
64
  "benny": "^3.6.12",
@@ -81,22 +84,21 @@
81
84
  "mocha": "^6.2.1",
82
85
  "mocha-headless-chrome": "^2.0.3",
83
86
  "mocha-teamcity-reporter": "^3.0.0",
87
+ "nock": "^11.8.2",
84
88
  "npm-run-all": "^4.1.5",
85
89
  "performance-now": "^0.2.0",
86
90
  "phin": "^2.2.3",
87
91
  "promise": "^7.1.1",
88
92
  "read-glob": "^3.0.0",
89
93
  "resolve": "^1.17.0",
90
- "rollup": "^1.17.0",
91
- "rollup-plugin-commonjs": "^10.0.1",
92
- "rollup-plugin-node-resolve": "^5.2.0",
94
+ "rollup": "^2.34.1",
93
95
  "rollup-plugin-terser": "^5.1.1",
94
- "rollup-plugin-typescript2": "^0.24.3",
96
+ "rollup-plugin-typescript2": "^0.29.0",
95
97
  "semver": "^6.3.0",
96
98
  "shx": "^0.3.2",
97
99
  "time-grunt": "^1.3.0",
98
100
  "ts-node": "^8.4.1",
99
- "typescript": "^3.6.3",
101
+ "typescript": "^4.1.3",
100
102
  "uikit": "2.27.4"
101
103
  },
102
104
  "keywords": [
@@ -128,6 +130,7 @@
128
130
  "sourcearchive": "https://github.com/less/less.js/archive/v",
129
131
  "dependencies": {
130
132
  "copy-anything": "^2.0.1",
133
+ "parse-node-version": "^1.0.1",
131
134
  "tslib": "^1.10.0"
132
135
  }
133
136
  }
@@ -1,4 +1,4 @@
1
- RuntimeError: error evaluating function `image-height`: Image size functions are not supported in browser version of less in image-height-error.less on line 2, column 11:
1
+ RuntimeError: Error evaluating function `image-height`: Image size functions are not supported in browser version of less in image-height-error.less on line 2, column 11:
2
2
  1 .test-height{
3
3
  2 height: image-height("../data/image.jpg")
4
4
  3 }
@@ -1,4 +1,4 @@
1
- RuntimeError: error evaluating function `image-size`: Image size functions are not supported in browser version of less in image-size-error.less on line 2, column 9:
1
+ RuntimeError: Error evaluating function `image-size`: Image size functions are not supported in browser version of less in image-size-error.less on line 2, column 9:
2
2
  1 .test-size{
3
3
  2 size: image-size("../data/image.jpg")
4
4
  3 }
@@ -1,4 +1,4 @@
1
- RuntimeError: error evaluating function `image-width`: Image size functions are not supported in browser version of less in image-width-error.less on line 2, column 10:
1
+ RuntimeError: Error evaluating function `image-width`: Image size functions are not supported in browser version of less in image-width-error.less on line 2, column 10:
2
2
  1 .test-width{
3
3
  2 width: image-width("../data/image.jpg")
4
4
  3 }
package/test/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  var lessTest = require('./less-test'),
2
2
  lessTester = lessTest(),
3
3
  path = require('path'),
4
- stylize = require('../lib/less-node/lessc-helper').stylize;
4
+ stylize = require('../lib/less-node/lessc-helper').stylize,
5
+ nock = require('nock');
5
6
 
6
7
  console.log('\n' + stylize('Less', 'underline') + '\n');
7
8
 
@@ -13,15 +14,15 @@ var testMap = [
13
14
  javascriptEnabled: true
14
15
  }, '_main/'],
15
16
  [{}, 'namespacing/'],
16
- [{
17
- math: 'strict-legacy'
18
- }, 'math/strict-legacy/'],
19
17
  [{
20
18
  math: 'parens'
21
19
  }, 'math/strict/'],
22
20
  [{
23
21
  math: 'parens-division'
24
22
  }, 'math/parens-division/'],
23
+ [{
24
+ math: 'always'
25
+ }, 'math/always/'],
25
26
  // Use legacy strictMath: true here to demonstrate it still works
26
27
  [{strictMath: true, strictUnits: true, javascriptEnabled: true}, '../errors/eval/',
27
28
  lessTester.testErrors, null],
@@ -39,8 +40,10 @@ var testMap = [
39
40
  // TODO: Change this to rewriteUrls: false once the relativeUrls option is removed
40
41
  [{math: 'strict', relativeUrls: false, rootpath: 'folder (1)/'}, 'static-urls/'],
41
42
  [{math: 'strict', compress: true}, 'compression/'],
42
- [{math: 0, strictUnits: true}, 'strict-units/'],
43
- [{}, 'legacy/'],
43
+
44
+ [{math: 0, strictUnits: true}, 'units/strict/'],
45
+ [{math: 0, strictUnits: false}, 'units/no-strict/'],
46
+
44
47
  [{math: 'strict', strictUnits: true, sourceMap: true, globalVars: true }, 'sourcemaps/',
45
48
  lessTester.testSourcemap, null, null,
46
49
  function(filename, type, baseFolder) {
@@ -74,8 +77,7 @@ var testMap = [
74
77
  [{plugin: 'test/plugins/preprocess/'}, 'preProcessorPlugin/'],
75
78
  [{plugin: 'test/plugins/visitor/'}, 'visitorPlugin/'],
76
79
  [{plugin: 'test/plugins/filemanager/'}, 'filemanagerPlugin/'],
77
- [{}, 'no-strict-math/'],
78
- [{}, '3rd-party/'],
80
+ [{math: 0}, '3rd-party/'],
79
81
  [{ processImports: false }, 'process-imports/']
80
82
  ];
81
83
  testMap.forEach(function(args) {
@@ -83,7 +85,24 @@ testMap.forEach(function(args) {
83
85
  });
84
86
  lessTester.testSyncronous({syncImport: true}, '_main/import');
85
87
  lessTester.testSyncronous({syncImport: true}, '_main/plugin');
86
- lessTester.testSyncronous({syncImport: true}, 'math/strict-legacy/css');
88
+ lessTester.testSyncronous({syncImport: true}, 'math/strict/css');
87
89
  lessTester.testNoOptions();
88
90
  lessTester.testJSImport();
89
91
  lessTester.finished();
92
+
93
+ (() => {
94
+ // Create new tester, since tests are not independent and tests
95
+ // above modify tester in a way that breaks remote imports.
96
+ lessTester = lessTest();
97
+ var scope = nock('https://example.com')
98
+ .get('/redirect.less').query(true)
99
+ .reply(301, null, { location: '/target.less' })
100
+ .get('/target.less').query(true)
101
+ .reply(200);
102
+ lessTester.runTestSet(
103
+ {},
104
+ 'import-redirect/',
105
+ lessTester.testImportRedirect(scope)
106
+ );
107
+ lessTester.finished();
108
+ })();
package/test/less-test.js CHANGED
@@ -1,5 +1,23 @@
1
1
  /* jshint latedef: nofunc */
2
2
 
3
+ var logger = require('../lib/less/logger').default;
4
+
5
+ var isVerbose = process.env.npm_config_loglevel !== 'concise';
6
+ logger.addListener({
7
+ info(msg) {
8
+ if (isVerbose) {
9
+ process.stdout.write(msg + '\n');
10
+ }
11
+ },
12
+ warn(msg) {
13
+ process.stdout.write(msg + '\n');
14
+ },
15
+ erro(msg) {
16
+ process.stdout.write(msg + '\n');
17
+ }
18
+ });
19
+
20
+
3
21
  module.exports = function() {
4
22
  var path = require('path'),
5
23
  fs = require('fs'),
@@ -14,8 +32,6 @@ module.exports = function() {
14
32
  var oneTestOnly = process.argv[2],
15
33
  isFinished = false;
16
34
 
17
- var isVerbose = process.env.npm_config_loglevel !== 'concise';
18
-
19
35
  var testFolder = path.dirname(require.resolve('@less/test-data'));
20
36
  var lessFolder = path.join(testFolder, 'less');
21
37
 
@@ -27,20 +43,6 @@ module.exports = function() {
27
43
  }
28
44
  }
29
45
 
30
- less.logger.addListener({
31
- info: function(msg) {
32
- if (isVerbose) {
33
- process.stdout.write(msg + '\n');
34
- }
35
- },
36
- warn: function(msg) {
37
- process.stdout.write(msg + '\n');
38
- },
39
- error: function(msg) {
40
- process.stdout.write(msg + '\n');
41
- }
42
- });
43
-
44
46
  var queueList = [],
45
47
  queueRunning = false;
46
48
  function queue(func) {
@@ -519,6 +521,23 @@ module.exports = function() {
519
521
  ok(stylize('OK\n', 'green'));
520
522
  }
521
523
 
524
+ function testImportRedirect(nockScope) {
525
+ return (name, err, css, doReplacements, sourcemap, baseFolder) => {
526
+ process.stdout.write('- ' + path.join(baseFolder, name) + ': ');
527
+ if (err) {
528
+ fail('FAIL: ' + (err && err.message));
529
+ return;
530
+ }
531
+ const expected = 'h1 {\n color: red;\n}\n';
532
+ if (css !== expected) {
533
+ difference('FAIL', expected, css);
534
+ return;
535
+ }
536
+ nockScope.done();
537
+ ok('OK');
538
+ };
539
+ }
540
+
522
541
  return {
523
542
  runTestSet: runTestSet,
524
543
  runTestSetNormalOnly: runTestSetNormalOnly,
@@ -527,6 +546,7 @@ module.exports = function() {
527
546
  testSourcemap: testSourcemap,
528
547
  testSourcemapWithoutUrlAnnotation: testSourcemapWithoutUrlAnnotation,
529
548
  testImports: testImports,
549
+ testImportRedirect: testImportRedirect,
530
550
  testEmptySourcemap: testEmptySourcemap,
531
551
  testNoOptions: testNoOptions,
532
552
  testJSImport: testJSImport,
package/tsconfig.json CHANGED
@@ -6,6 +6,7 @@
6
6
  "sourceMap": true,
7
7
  "inlineSources": true,
8
8
  "esModuleInterop": true,
9
+ "importHelpers": true,
9
10
  "target": "ES5"
10
11
  },
11
12
  "include": ["src/**/*"],