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.
- package/bin/lessc +67 -58
- package/dist/less.js +14496 -11811
- package/dist/less.min.js +4 -4
- package/dist/less.min.js.map +1 -1
- package/lib/less/constants.js +5 -7
- package/lib/less/contexts.js +71 -56
- package/lib/less/data/colors.js +150 -153
- package/lib/less/data/index.js +4 -7
- package/lib/less/data/unit-conversions.js +2 -5
- package/lib/less/default-options.js +52 -23
- package/lib/less/deprecation.js +67 -0
- package/lib/less/environment/abstract-file-manager.js +62 -50
- package/lib/less/environment/abstract-plugin-loader.js +69 -46
- package/lib/less/environment/environment-api.ts +21 -0
- package/lib/less/environment/environment.js +34 -30
- package/lib/less/environment/file-manager-api.ts +77 -0
- package/lib/less/functions/boolean.js +13 -13
- package/lib/less/functions/color-blending.js +39 -31
- package/lib/less/functions/color.js +153 -137
- package/lib/less/functions/data-uri.js +73 -64
- package/lib/less/functions/default.js +9 -11
- package/lib/less/functions/function-caller.js +35 -34
- package/lib/less/functions/function-registry.js +16 -17
- package/lib/less/functions/index.js +33 -33
- package/lib/less/functions/list.js +88 -75
- package/lib/less/functions/math-helper.js +8 -11
- package/lib/less/functions/math.js +21 -21
- package/lib/less/functions/number.js +42 -53
- package/lib/less/functions/string.js +18 -22
- package/lib/less/functions/style.js +21 -20
- package/lib/less/functions/svg.js +83 -82
- package/lib/less/functions/types.js +28 -32
- package/lib/less/import-manager.js +73 -64
- package/lib/less/index.js +65 -65
- package/lib/less/less-error.js +65 -46
- package/lib/less/logger.js +11 -14
- package/lib/less/parse-tree.js +94 -38
- package/lib/less/parse.js +44 -44
- package/lib/less/parser/parser-input.js +152 -131
- package/lib/less/parser/parser.js +866 -672
- package/lib/less/plugin-manager.js +57 -46
- package/lib/less/render.js +17 -23
- package/lib/less/source-map-builder.js +52 -43
- package/lib/less/source-map-output.js +57 -44
- package/lib/less/transform-tree.js +40 -30
- package/lib/less/tree/anonymous.js +52 -28
- package/lib/less/tree/assignment.js +44 -27
- package/lib/less/tree/atrule-syntax.js +4 -6
- package/lib/less/tree/atrule.js +247 -140
- package/lib/less/tree/attribute.js +55 -24
- package/lib/less/tree/call.js +70 -42
- package/lib/less/tree/color.js +194 -145
- package/lib/less/tree/combinator.js +31 -21
- package/lib/less/tree/comment.js +44 -23
- package/lib/less/tree/condition.js +61 -36
- package/lib/less/tree/container.js +90 -34
- package/lib/less/tree/debug-info.js +53 -11
- package/lib/less/tree/declaration.js +97 -52
- package/lib/less/tree/detached-ruleset.js +42 -24
- package/lib/less/tree/dimension.js +127 -71
- package/lib/less/tree/element.js +82 -52
- package/lib/less/tree/expression.js +75 -50
- package/lib/less/tree/extend.js +71 -42
- package/lib/less/tree/import.js +184 -110
- package/lib/less/tree/index.js +52 -81
- package/lib/less/tree/javascript.js +43 -32
- package/lib/less/tree/js-eval-node.js +46 -32
- package/lib/less/tree/keyword.js +25 -17
- package/lib/less/tree/media.js +77 -35
- package/lib/less/tree/merge-rules.js +47 -0
- package/lib/less/tree/mixin-call.js +181 -98
- package/lib/less/tree/mixin-definition.js +211 -117
- package/lib/less/tree/namespace-value.js +63 -44
- package/lib/less/tree/negative.js +34 -21
- package/lib/less/tree/nested-at-rule.js +149 -66
- package/lib/less/tree/node.js +225 -90
- package/lib/less/tree/operation.js +59 -34
- package/lib/less/tree/paren.js +34 -17
- package/lib/less/tree/property.js +66 -35
- package/lib/less/tree/query-in-parens.js +52 -60
- package/lib/less/tree/quoted.js +93 -44
- package/lib/less/tree/ruleset.js +632 -318
- package/lib/less/tree/selector.js +151 -77
- package/lib/less/tree/unicode-descriptor.js +14 -12
- package/lib/less/tree/unit.js +111 -63
- package/lib/less/tree/url.js +62 -38
- package/lib/less/tree/value.js +50 -34
- package/lib/less/tree/variable-call.js +47 -30
- package/lib/less/tree/variable.js +53 -31
- package/lib/less/utils.js +44 -47
- package/lib/less/visitors/extend-visitor.js +233 -172
- package/lib/less/visitors/import-sequencer.js +24 -24
- package/lib/less/visitors/import-visitor.js +62 -52
- package/lib/less/visitors/index.js +14 -17
- package/lib/less/visitors/join-selector-visitor.js +40 -37
- package/lib/less/visitors/set-tree-visibility-visitor.js +32 -18
- package/lib/less/visitors/to-css-visitor.js +135 -128
- package/lib/less/visitors/visitor.js +60 -45
- package/lib/less-browser/add-default-options.js +23 -13
- package/lib/less-browser/bootstrap.js +23 -17
- package/lib/less-browser/browser.js +24 -21
- package/lib/less-browser/cache.js +17 -19
- package/lib/less-browser/error-reporting.js +52 -44
- package/lib/less-browser/file-manager.js +52 -42
- package/lib/less-browser/image-size.js +12 -12
- package/lib/less-browser/index.js +131 -105
- package/lib/less-browser/log-listener.js +30 -31
- package/lib/less-browser/plugin-loader.js +10 -10
- package/lib/less-browser/utils.js +19 -21
- package/lib/less-node/environment.js +32 -8
- package/lib/less-node/file-manager.js +62 -45
- package/lib/less-node/fs.js +11 -8
- package/lib/less-node/image-size.js +40 -31
- package/lib/less-node/index.js +28 -19
- package/lib/less-node/lessc-helper.js +28 -28
- package/lib/less-node/plugin-loader.js +35 -27
- package/lib/less-node/url-file-manager.js +33 -31
- package/package.json +31 -19
- package/.eslintignore +0 -6
- package/.eslintrc.js +0 -63
- package/Gruntfile.js +0 -404
- package/bower.json +0 -22
- package/lib/less/constants.js.map +0 -1
- package/lib/less/contexts.js.map +0 -1
- package/lib/less/data/colors.js.map +0 -1
- package/lib/less/data/index.js.map +0 -1
- package/lib/less/data/unit-conversions.js.map +0 -1
- package/lib/less/default-options.js.map +0 -1
- package/lib/less/environment/abstract-file-manager.js.map +0 -1
- package/lib/less/environment/abstract-plugin-loader.js.map +0 -1
- package/lib/less/environment/environment-api.js +0 -3
- package/lib/less/environment/environment-api.js.map +0 -1
- package/lib/less/environment/environment.js.map +0 -1
- package/lib/less/environment/file-manager-api.js +0 -3
- package/lib/less/environment/file-manager-api.js.map +0 -1
- package/lib/less/functions/boolean.js.map +0 -1
- package/lib/less/functions/color-blending.js.map +0 -1
- package/lib/less/functions/color.js.map +0 -1
- package/lib/less/functions/data-uri.js.map +0 -1
- package/lib/less/functions/default.js.map +0 -1
- package/lib/less/functions/function-caller.js.map +0 -1
- package/lib/less/functions/function-registry.js.map +0 -1
- package/lib/less/functions/index.js.map +0 -1
- package/lib/less/functions/list.js.map +0 -1
- package/lib/less/functions/math-helper.js.map +0 -1
- package/lib/less/functions/math.js.map +0 -1
- package/lib/less/functions/number.js.map +0 -1
- package/lib/less/functions/string.js.map +0 -1
- package/lib/less/functions/style.js.map +0 -1
- package/lib/less/functions/svg.js.map +0 -1
- package/lib/less/functions/types.js.map +0 -1
- package/lib/less/import-manager.js.map +0 -1
- package/lib/less/index.js.map +0 -1
- package/lib/less/less-error.js.map +0 -1
- package/lib/less/logger.js.map +0 -1
- package/lib/less/parse-tree.js.map +0 -1
- package/lib/less/parse.js.map +0 -1
- package/lib/less/parser/chunker.js +0 -148
- package/lib/less/parser/chunker.js.map +0 -1
- package/lib/less/parser/parser-input.js.map +0 -1
- package/lib/less/parser/parser.js.map +0 -1
- package/lib/less/plugin-manager.js.map +0 -1
- package/lib/less/render.js.map +0 -1
- package/lib/less/source-map-builder.js.map +0 -1
- package/lib/less/source-map-output.js.map +0 -1
- package/lib/less/transform-tree.js.map +0 -1
- package/lib/less/tree/anonymous.js.map +0 -1
- package/lib/less/tree/assignment.js.map +0 -1
- package/lib/less/tree/atrule-syntax.js.map +0 -1
- package/lib/less/tree/atrule.js.map +0 -1
- package/lib/less/tree/attribute.js.map +0 -1
- package/lib/less/tree/call.js.map +0 -1
- package/lib/less/tree/color.js.map +0 -1
- package/lib/less/tree/combinator.js.map +0 -1
- package/lib/less/tree/comment.js.map +0 -1
- package/lib/less/tree/condition.js.map +0 -1
- package/lib/less/tree/container.js.map +0 -1
- package/lib/less/tree/debug-info.js.map +0 -1
- package/lib/less/tree/declaration.js.map +0 -1
- package/lib/less/tree/detached-ruleset.js.map +0 -1
- package/lib/less/tree/dimension.js.map +0 -1
- package/lib/less/tree/element.js.map +0 -1
- package/lib/less/tree/expression.js.map +0 -1
- package/lib/less/tree/extend.js.map +0 -1
- package/lib/less/tree/import.js.map +0 -1
- package/lib/less/tree/index.js.map +0 -1
- package/lib/less/tree/javascript.js.map +0 -1
- package/lib/less/tree/js-eval-node.js.map +0 -1
- package/lib/less/tree/keyword.js.map +0 -1
- package/lib/less/tree/media.js.map +0 -1
- package/lib/less/tree/mixin-call.js.map +0 -1
- package/lib/less/tree/mixin-definition.js.map +0 -1
- package/lib/less/tree/namespace-value.js.map +0 -1
- package/lib/less/tree/negative.js.map +0 -1
- package/lib/less/tree/nested-at-rule.js.map +0 -1
- package/lib/less/tree/node.js.map +0 -1
- package/lib/less/tree/operation.js.map +0 -1
- package/lib/less/tree/paren.js.map +0 -1
- package/lib/less/tree/property.js.map +0 -1
- package/lib/less/tree/query-in-parens.js.map +0 -1
- package/lib/less/tree/quoted.js.map +0 -1
- package/lib/less/tree/ruleset.js.map +0 -1
- package/lib/less/tree/selector.js.map +0 -1
- package/lib/less/tree/unicode-descriptor.js.map +0 -1
- package/lib/less/tree/unit.js.map +0 -1
- package/lib/less/tree/url.js.map +0 -1
- package/lib/less/tree/value.js.map +0 -1
- package/lib/less/tree/variable-call.js.map +0 -1
- package/lib/less/tree/variable.js.map +0 -1
- package/lib/less/utils.js.map +0 -1
- package/lib/less/visitors/extend-visitor.js.map +0 -1
- package/lib/less/visitors/import-sequencer.js.map +0 -1
- package/lib/less/visitors/import-visitor.js.map +0 -1
- package/lib/less/visitors/index.js.map +0 -1
- package/lib/less/visitors/join-selector-visitor.js.map +0 -1
- package/lib/less/visitors/set-tree-visibility-visitor.js.map +0 -1
- package/lib/less/visitors/to-css-visitor.js.map +0 -1
- package/lib/less/visitors/visitor.js.map +0 -1
- package/lib/less-browser/add-default-options.js.map +0 -1
- package/lib/less-browser/bootstrap.js.map +0 -1
- package/lib/less-browser/browser.js.map +0 -1
- package/lib/less-browser/cache.js.map +0 -1
- package/lib/less-browser/error-reporting.js.map +0 -1
- package/lib/less-browser/file-manager.js.map +0 -1
- package/lib/less-browser/image-size.js.map +0 -1
- package/lib/less-browser/index.js.map +0 -1
- package/lib/less-browser/log-listener.js.map +0 -1
- package/lib/less-browser/plugin-loader.js.map +0 -1
- package/lib/less-browser/utils.js.map +0 -1
- package/lib/less-node/environment.js.map +0 -1
- package/lib/less-node/file-manager.js.map +0 -1
- package/lib/less-node/fs.js.map +0 -1
- package/lib/less-node/image-size.js.map +0 -1
- package/lib/less-node/index.js.map +0 -1
- package/lib/less-node/lessc-helper.js.map +0 -1
- package/lib/less-node/plugin-loader.js.map +0 -1
- package/lib/less-node/url-file-manager.js.map +0 -1
- package/test/.eslintrc.json +0 -9
- package/test/README.md +0 -3
- package/test/browser/common.js +0 -230
- package/test/browser/css/global-vars/simple.css +0 -3
- package/test/browser/css/modify-vars/simple.css +0 -8
- package/test/browser/css/plugin/plugin.css +0 -3
- package/test/browser/css/postProcessor/postProcessor.css +0 -4
- package/test/browser/css/relative-urls/urls.css +0 -36
- package/test/browser/css/rewrite-urls/urls.css +0 -36
- package/test/browser/css/rootpath/urls.css +0 -35
- package/test/browser/css/rootpath-relative/urls.css +0 -35
- package/test/browser/css/rootpath-rewrite-urls/urls.css +0 -35
- package/test/browser/css/urls.css +0 -54
- package/test/browser/generator/benchmark.config.js +0 -50
- package/test/browser/generator/generate.js +0 -78
- package/test/browser/generator/runner.config.js +0 -188
- package/test/browser/generator/runner.js +0 -2
- package/test/browser/generator/template.js +0 -93
- package/test/browser/generator/utils.js +0 -14
- package/test/browser/less/console-errors/test-error.less +0 -3
- package/test/browser/less/console-errors/test-error.txt +0 -2
- package/test/browser/less/errors/image-height-error.less +0 -3
- package/test/browser/less/errors/image-height-error.txt +0 -4
- package/test/browser/less/errors/image-size-error.less +0 -3
- package/test/browser/less/errors/image-size-error.txt +0 -4
- package/test/browser/less/errors/image-width-error.less +0 -3
- package/test/browser/less/errors/image-width-error.txt +0 -4
- package/test/browser/less/global-vars/simple.less +0 -3
- package/test/browser/less/imports/urls.less +0 -4
- package/test/browser/less/imports/urls2.less +0 -4
- package/test/browser/less/modify-vars/imports/simple2.less +0 -4
- package/test/browser/less/modify-vars/simple.less +0 -8
- package/test/browser/less/nested-gradient-with-svg-gradient/mixin-consumer.less +0 -5
- package/test/browser/less/nested-gradient-with-svg-gradient/svg-gradient-mixin.less +0 -15
- package/test/browser/less/plugin/plugin.js +0 -4
- package/test/browser/less/plugin/plugin.less +0 -4
- package/test/browser/less/postProcessor/postProcessor.less +0 -4
- package/test/browser/less/relative-urls/urls.less +0 -34
- package/test/browser/less/rewrite-urls/urls.less +0 -34
- package/test/browser/less/rootpath/urls.less +0 -33
- package/test/browser/less/rootpath-relative/urls.less +0 -33
- package/test/browser/less/rootpath-rewrite-urls/urls.less +0 -33
- package/test/browser/less/urls.less +0 -62
- package/test/browser/runner-VisitorPlugin-options.js +0 -3
- package/test/browser/runner-VisitorPlugin.js +0 -3
- package/test/browser/runner-browser-options.js +0 -51
- package/test/browser/runner-browser-spec.js +0 -12
- package/test/browser/runner-console-errors.js +0 -5
- package/test/browser/runner-errors-options.js +0 -6
- package/test/browser/runner-errors-spec.js +0 -3
- package/test/browser/runner-filemanagerPlugin-options.js +0 -5
- package/test/browser/runner-filemanagerPlugin.js +0 -3
- package/test/browser/runner-global-vars-options.js +0 -7
- package/test/browser/runner-global-vars-spec.js +0 -3
- package/test/browser/runner-legacy-options.js +0 -6
- package/test/browser/runner-legacy-spec.js +0 -3
- package/test/browser/runner-main-options.js +0 -17
- package/test/browser/runner-main-spec.js +0 -7
- package/test/browser/runner-modify-vars-options.js +0 -5
- package/test/browser/runner-modify-vars-spec.js +0 -33
- package/test/browser/runner-no-js-errors-options.js +0 -4
- package/test/browser/runner-no-js-errors-spec.js +0 -3
- package/test/browser/runner-postProcessorPlugin-options.js +0 -3
- package/test/browser/runner-postProcessorPlugin.js +0 -3
- package/test/browser/runner-preProcessorPlugin-options.js +0 -3
- package/test/browser/runner-preProcessorPlugin.js +0 -3
- package/test/browser/runner-production-options.js +0 -3
- package/test/browser/runner-production-spec.js +0 -5
- package/test/browser/runner-relative-urls-options.js +0 -3
- package/test/browser/runner-relative-urls-spec.js +0 -3
- package/test/browser/runner-rewrite-urls-options.js +0 -3
- package/test/browser/runner-rewrite-urls-spec.js +0 -3
- package/test/browser/runner-rootpath-options.js +0 -3
- package/test/browser/runner-rootpath-relative-options.js +0 -4
- package/test/browser/runner-rootpath-relative-spec.js +0 -3
- package/test/browser/runner-rootpath-rewrite-urls-options.js +0 -4
- package/test/browser/runner-rootpath-rewrite-urls-spec.js +0 -3
- package/test/browser/runner-rootpath-spec.js +0 -3
- package/test/browser/runner-strict-units-options.js +0 -5
- package/test/browser/runner-strict-units-spec.js +0 -3
- package/test/index.js +0 -112
- package/test/less-test.js +0 -625
- package/test/mocha-playwright/runner.js +0 -210
- package/test/modify-vars.js +0 -28
- package/test/plugins/filemanager/index.js +0 -19
- package/test/plugins/postprocess/index.js +0 -14
- package/test/plugins/preprocess/index.js +0 -19
- package/test/plugins/visitor/index.js +0 -24
- package/test/sourcemaps/basic.json +0 -1
- package/test/sourcemaps/custom-props.json +0 -1
- package/test/sourcemaps/index.html +0 -17
- package/test/sourcemaps-disable-annotation/basic.json +0 -1
- package/test/sourcemaps-variable-selector/basic.json +0 -1
- package/test/test-es6.ts +0 -17
- package/tsconfig.build.json +0 -7
- package/tsconfig.json +0 -21
|
@@ -1,37 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
FileManager
|
|
9
|
-
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import fs from './fs.js';
|
|
4
|
+
import AbstractFileManager from '../less/environment/abstract-file-manager.js';
|
|
5
|
+
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
|
|
8
|
+
const FileManager = function() {}
|
|
9
|
+
FileManager.prototype = Object.assign(new AbstractFileManager(), {
|
|
10
|
+
supports() {
|
|
10
11
|
return true;
|
|
11
12
|
},
|
|
12
|
-
|
|
13
|
+
|
|
14
|
+
supportsSync() {
|
|
13
15
|
return true;
|
|
14
16
|
},
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
|
|
18
|
+
loadFile(filename, currentDirectory, options, environment, callback) {
|
|
19
|
+
let fullFilename;
|
|
20
|
+
const isAbsoluteFilename = this.isPathAbsolute(filename);
|
|
21
|
+
const filenamesTried = [];
|
|
22
|
+
const self = this;
|
|
23
|
+
const prefix = filename.slice(0, 1);
|
|
24
|
+
const explicit = prefix === '.' || prefix === '/';
|
|
25
|
+
let result = null;
|
|
26
|
+
let isNodeModule = false;
|
|
27
|
+
const npmPrefix = 'npm://';
|
|
28
|
+
|
|
25
29
|
options = options || {};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
|
|
31
|
+
const paths = isAbsoluteFilename ? [''] : [currentDirectory];
|
|
32
|
+
|
|
33
|
+
if (options.paths) { paths.push.apply(paths, options.paths); }
|
|
34
|
+
|
|
35
|
+
if (!isAbsoluteFilename && paths.indexOf('.') === -1) { paths.push('.'); }
|
|
36
|
+
|
|
37
|
+
const prefixes = options.prefixes || [''];
|
|
38
|
+
const fileParts = this.extractUrlParts(filename);
|
|
39
|
+
|
|
35
40
|
if (options.syncImport) {
|
|
36
41
|
getFileData(returnData, returnData);
|
|
37
42
|
if (callback) {
|
|
@@ -47,6 +52,7 @@ FileManager.prototype = Object.assign(new abstract_file_manager_js_1.default(),
|
|
|
47
52
|
// to be closed before it continues with the next file
|
|
48
53
|
return new Promise(getFileData);
|
|
49
54
|
}
|
|
55
|
+
|
|
50
56
|
function returnData(data) {
|
|
51
57
|
if (!data.filename) {
|
|
52
58
|
result = { error: data };
|
|
@@ -55,10 +61,12 @@ FileManager.prototype = Object.assign(new abstract_file_manager_js_1.default(),
|
|
|
55
61
|
result = data;
|
|
56
62
|
}
|
|
57
63
|
}
|
|
64
|
+
|
|
58
65
|
function getFileData(fulfill, reject) {
|
|
59
66
|
(function tryPathIndex(i) {
|
|
60
67
|
function tryWithExtension() {
|
|
61
|
-
|
|
68
|
+
const extFilename = options.ext ? self.tryAppendExtension(fullFilename, options.ext) : fullFilename;
|
|
69
|
+
|
|
62
70
|
if (extFilename !== fullFilename && !explicit && paths[i] === '.') {
|
|
63
71
|
try {
|
|
64
72
|
fullFilename = require.resolve(extFilename);
|
|
@@ -78,9 +86,16 @@ FileManager.prototype = Object.assign(new abstract_file_manager_js_1.default(),
|
|
|
78
86
|
if (j < prefixes.length) {
|
|
79
87
|
isNodeModule = false;
|
|
80
88
|
fullFilename = fileParts.rawPath + prefixes[j] + fileParts.filename;
|
|
89
|
+
|
|
81
90
|
if (paths[i]) {
|
|
82
|
-
|
|
91
|
+
if (paths[i].startsWith('#')) {
|
|
92
|
+
// Handling paths starting with '#'
|
|
93
|
+
fullFilename = paths[i].substr(1) + fullFilename;
|
|
94
|
+
}else{
|
|
95
|
+
fullFilename = path.join(paths[i], fullFilename);
|
|
96
|
+
}
|
|
83
97
|
}
|
|
98
|
+
|
|
84
99
|
if (!explicit && paths[i] === '.') {
|
|
85
100
|
try {
|
|
86
101
|
fullFilename = require.resolve(fullFilename);
|
|
@@ -93,15 +108,16 @@ FileManager.prototype = Object.assign(new abstract_file_manager_js_1.default(),
|
|
|
93
108
|
}
|
|
94
109
|
else {
|
|
95
110
|
tryWithExtension();
|
|
96
|
-
}
|
|
97
|
-
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const readFileArgs = [fullFilename];
|
|
98
114
|
if (!options.rawBuffer) {
|
|
99
115
|
readFileArgs.push('utf-8');
|
|
100
116
|
}
|
|
101
117
|
if (options.syncImport) {
|
|
102
118
|
try {
|
|
103
|
-
|
|
104
|
-
fulfill({ contents: data, filename: fullFilename
|
|
119
|
+
const data = fs.readFileSync.apply(this, readFileArgs);
|
|
120
|
+
fulfill({ contents: data, filename: fullFilename});
|
|
105
121
|
}
|
|
106
122
|
catch (e) {
|
|
107
123
|
filenamesTried.push(isNodeModule ? npmPrefix + fullFilename : fullFilename);
|
|
@@ -109,31 +125,32 @@ FileManager.prototype = Object.assign(new abstract_file_manager_js_1.default(),
|
|
|
109
125
|
}
|
|
110
126
|
}
|
|
111
127
|
else {
|
|
112
|
-
readFileArgs.push(function
|
|
128
|
+
readFileArgs.push(function(e, data) {
|
|
113
129
|
if (e) {
|
|
114
130
|
filenamesTried.push(isNodeModule ? npmPrefix + fullFilename : fullFilename);
|
|
115
131
|
return tryPrefix(j + 1);
|
|
116
|
-
}
|
|
117
|
-
fulfill({ contents: data, filename: fullFilename
|
|
132
|
+
}
|
|
133
|
+
fulfill({ contents: data, filename: fullFilename});
|
|
118
134
|
});
|
|
119
|
-
|
|
135
|
+
fs.readFile.apply(this, readFileArgs);
|
|
120
136
|
}
|
|
137
|
+
|
|
121
138
|
}
|
|
122
139
|
else {
|
|
123
140
|
tryPathIndex(i + 1);
|
|
124
141
|
}
|
|
125
142
|
})(0);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
reject({ type: 'File', message: "'".concat(filename, "' wasn't found. Tried - ").concat(filenamesTried.join(',')) });
|
|
143
|
+
} else {
|
|
144
|
+
reject({ type: 'File', message: `'${filename}' wasn't found. Tried - ${filenamesTried.join(',')}` });
|
|
129
145
|
}
|
|
130
146
|
}(0));
|
|
131
147
|
}
|
|
132
148
|
},
|
|
133
|
-
|
|
149
|
+
|
|
150
|
+
loadFileSync(filename, currentDirectory, options, environment) {
|
|
134
151
|
options.syncImport = true;
|
|
135
152
|
return this.loadFile(filename, currentDirectory, options, environment);
|
|
136
153
|
}
|
|
137
154
|
});
|
|
138
|
-
|
|
139
|
-
|
|
155
|
+
|
|
156
|
+
export default FileManager;
|
package/lib/less-node/fs.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/** @typedef {import('fs')} FS */
|
|
2
|
+
import nodeFs from 'fs';
|
|
3
|
+
import { createRequire } from 'module';
|
|
4
|
+
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
6
|
+
|
|
7
|
+
/** @type {FS} */
|
|
8
|
+
let fs;
|
|
4
9
|
try {
|
|
5
10
|
fs = require('graceful-fs');
|
|
11
|
+
} catch (e) {
|
|
12
|
+
fs = nodeFs;
|
|
6
13
|
}
|
|
7
|
-
|
|
8
|
-
fs = require('fs');
|
|
9
|
-
}
|
|
10
|
-
exports.default = fs;
|
|
11
|
-
//# sourceMappingURL=fs.js.map
|
|
14
|
+
export default fs;
|
|
@@ -1,50 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
import Dimension from '../less/tree/dimension.js';
|
|
3
|
+
import Expression from '../less/tree/expression.js';
|
|
4
|
+
import functionRegistry from './../less/functions/function-registry.js';
|
|
5
|
+
|
|
6
|
+
const require = createRequire(import.meta.url);
|
|
7
|
+
|
|
8
|
+
export default environment => {
|
|
9
|
+
|
|
8
10
|
function imageSize(functionContext, filePathNode) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
let filePath = filePathNode.value;
|
|
12
|
+
const currentFileInfo = functionContext.currentFileInfo;
|
|
13
|
+
const currentDirectory = currentFileInfo.rewriteUrls ?
|
|
12
14
|
currentFileInfo.currentDirectory : currentFileInfo.entryPath;
|
|
13
|
-
|
|
15
|
+
|
|
16
|
+
const fragmentStart = filePath.indexOf('#');
|
|
14
17
|
if (fragmentStart !== -1) {
|
|
15
18
|
filePath = filePath.slice(0, fragmentStart);
|
|
16
19
|
}
|
|
17
|
-
|
|
20
|
+
|
|
21
|
+
const fileManager = environment.getFileManager(filePath, currentDirectory, functionContext.context, environment, true);
|
|
22
|
+
|
|
18
23
|
if (!fileManager) {
|
|
19
24
|
throw {
|
|
20
25
|
type: 'File',
|
|
21
|
-
message:
|
|
26
|
+
message: `Can not set up FileManager for ${filePathNode}`
|
|
22
27
|
};
|
|
23
28
|
}
|
|
24
|
-
|
|
29
|
+
|
|
30
|
+
const fileSync = fileManager.loadFileSync(filePath, currentDirectory, functionContext.context, environment);
|
|
31
|
+
|
|
25
32
|
if (fileSync.error) {
|
|
26
33
|
throw fileSync.error;
|
|
27
34
|
}
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
|
|
36
|
+
const sizeOf = require('image-size');
|
|
37
|
+
return sizeOf ? sizeOf(fileSync.filename) : {width: 0, height: 0};
|
|
30
38
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
new
|
|
39
|
+
|
|
40
|
+
const imageFunctions = {
|
|
41
|
+
'image-size': function(filePathNode) {
|
|
42
|
+
const size = imageSize(this, filePathNode);
|
|
43
|
+
return new Expression([
|
|
44
|
+
new Dimension(size.width, 'px'),
|
|
45
|
+
new Dimension(size.height, 'px')
|
|
37
46
|
]);
|
|
38
47
|
},
|
|
39
|
-
'image-width': function
|
|
40
|
-
|
|
41
|
-
return new
|
|
48
|
+
'image-width': function(filePathNode) {
|
|
49
|
+
const size = imageSize(this, filePathNode);
|
|
50
|
+
return new Dimension(size.width, 'px');
|
|
42
51
|
},
|
|
43
|
-
'image-height': function
|
|
44
|
-
|
|
45
|
-
return new
|
|
52
|
+
'image-height': function(filePathNode) {
|
|
53
|
+
const size = imageSize(this, filePathNode);
|
|
54
|
+
return new Dimension(size.height, 'px');
|
|
46
55
|
}
|
|
47
56
|
};
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
57
|
+
|
|
58
|
+
functionRegistry.addMultiple(imageFunctions);
|
|
59
|
+
};
|
package/lib/less-node/index.js
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
import environment from './environment.js';
|
|
3
|
+
import FileManager from './file-manager.js';
|
|
4
|
+
import UrlFileManager from './url-file-manager.js';
|
|
5
|
+
import createFromEnvironment from '../less/index.js';
|
|
6
|
+
import lesscHelper from './lessc-helper.js';
|
|
7
|
+
import PluginLoader from './plugin-loader.js';
|
|
8
|
+
import fs from './fs.js';
|
|
9
|
+
import defaultOptions from '../less/default-options.js';
|
|
10
|
+
import imageSize from './image-size.js';
|
|
11
|
+
|
|
12
|
+
const require = createRequire(import.meta.url);
|
|
13
|
+
const { version } = require('../../package.json');
|
|
14
|
+
|
|
15
|
+
const less = createFromEnvironment(environment, [new FileManager(), new UrlFileManager()], version);
|
|
16
|
+
|
|
10
17
|
// allow people to create less with their own environment
|
|
11
|
-
less.createFromEnvironment =
|
|
12
|
-
less.lesscHelper =
|
|
13
|
-
less.PluginLoader =
|
|
14
|
-
less.fs =
|
|
15
|
-
less.FileManager =
|
|
16
|
-
less.UrlFileManager =
|
|
18
|
+
less.createFromEnvironment = createFromEnvironment;
|
|
19
|
+
less.lesscHelper = lesscHelper;
|
|
20
|
+
less.PluginLoader = PluginLoader;
|
|
21
|
+
less.fs = fs;
|
|
22
|
+
less.FileManager = FileManager;
|
|
23
|
+
less.UrlFileManager = UrlFileManager;
|
|
24
|
+
|
|
17
25
|
// Set up options
|
|
18
|
-
less.options =
|
|
26
|
+
less.options = defaultOptions();
|
|
27
|
+
|
|
19
28
|
// provide image-size functionality
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
29
|
+
imageSize(less.environment);
|
|
30
|
+
|
|
31
|
+
export default less;
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
// lessc_helper.js
|
|
2
2
|
//
|
|
3
3
|
// helper functions for lessc
|
|
4
|
-
|
|
4
|
+
const lessc_helper = {
|
|
5
|
+
|
|
5
6
|
// Stylize a string
|
|
6
|
-
stylize: function
|
|
7
|
-
|
|
8
|
-
'reset': [0,
|
|
9
|
-
'bold': [1,
|
|
10
|
-
'inverse': [7,
|
|
11
|
-
'underline': [4,
|
|
12
|
-
'yellow': [33, 39],
|
|
13
|
-
'green': [32, 39],
|
|
14
|
-
'red': [31, 39],
|
|
15
|
-
'grey': [90, 39]
|
|
7
|
+
stylize : function(str, style) {
|
|
8
|
+
const styles = {
|
|
9
|
+
'reset' : [0, 0],
|
|
10
|
+
'bold' : [1, 22],
|
|
11
|
+
'inverse' : [7, 27],
|
|
12
|
+
'underline' : [4, 24],
|
|
13
|
+
'yellow' : [33, 39],
|
|
14
|
+
'green' : [32, 39],
|
|
15
|
+
'red' : [31, 39],
|
|
16
|
+
'grey' : [90, 39]
|
|
16
17
|
};
|
|
17
|
-
return
|
|
18
|
+
return `\x1b[${styles[style][0]}m${str}\x1b[${styles[style][1]}m`;
|
|
18
19
|
},
|
|
20
|
+
|
|
19
21
|
// Print command line options
|
|
20
|
-
printUsage: function
|
|
22
|
+
printUsage: function() {
|
|
21
23
|
console.log('usage: lessc [option option=parameter ...] <source> [destination]');
|
|
22
24
|
console.log('');
|
|
23
25
|
console.log('If source is set to `-\' (dash or hyphen-minus), input is read from stdin.');
|
|
@@ -32,7 +34,7 @@ var lessc_helper = {
|
|
|
32
34
|
console.log(' -l, --lint Syntax check only (lint).');
|
|
33
35
|
console.log(' -s, --silent Suppresses output of error messages.');
|
|
34
36
|
console.log(' --quiet Suppresses output of warnings.');
|
|
35
|
-
console.log(' --strict-imports
|
|
37
|
+
console.log(' --strict-imports (DEPRECATED) Ignores .less imports inside selector blocks. Has confusing behavior.');
|
|
36
38
|
console.log(' --insecure Allows imports from insecure https hosts.');
|
|
37
39
|
console.log(' -v, --version Prints version number and exit.');
|
|
38
40
|
console.log(' --verbose Be verbose.');
|
|
@@ -68,16 +70,19 @@ var lessc_helper = {
|
|
|
68
70
|
console.log(' or --clean-css="advanced"');
|
|
69
71
|
console.log(' --disable-plugin-rule Disallow @plugin statements');
|
|
70
72
|
console.log('');
|
|
73
|
+
console.log(' --quiet-deprecations Suppress deprecation warnings only (keeps other warnings).');
|
|
74
|
+
console.log('');
|
|
71
75
|
console.log('-------------------------- Deprecated ----------------');
|
|
72
76
|
console.log(' -sm=on|off Legacy parens-only math. Use --math');
|
|
73
77
|
console.log(' --strict-math=on|off ');
|
|
74
78
|
console.log('');
|
|
75
|
-
console.log(' --line-numbers=TYPE Outputs filename and line numbers.');
|
|
76
|
-
console.log(' TYPE can be either \'comments\',
|
|
77
|
-
console.log('
|
|
78
|
-
console.log('
|
|
79
|
-
console.log('
|
|
80
|
-
console.log('
|
|
79
|
+
console.log(' --line-numbers=TYPE (DEPRECATED) Outputs filename and line numbers.');
|
|
80
|
+
console.log(' TYPE can be either \'comments\', \'mediaquery\', or \'all\'.');
|
|
81
|
+
console.log(' The entire dumpLineNumbers option is deprecated.');
|
|
82
|
+
console.log(' Use sourcemaps (--source-map) instead.');
|
|
83
|
+
console.log(' All modes will be removed in a future version.');
|
|
84
|
+
console.log(' Note: \'mediaquery\' and \'all\' modes generate @media -sass-debug-info');
|
|
85
|
+
console.log(' which had short-lived usage and is no longer recommended.');
|
|
81
86
|
console.log(' -x, --compress Compresses output by removing some whitespaces.');
|
|
82
87
|
console.log(' We recommend you use a dedicated minifer like less-plugin-clean-css');
|
|
83
88
|
console.log('');
|
|
@@ -85,11 +90,6 @@ var lessc_helper = {
|
|
|
85
90
|
console.log('Home page: <http://lesscss.org/>');
|
|
86
91
|
}
|
|
87
92
|
};
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (lessc_helper.hasOwnProperty(h)) {
|
|
92
|
-
exports[h] = lessc_helper[h];
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=lessc-helper.js.map
|
|
93
|
+
|
|
94
|
+
export const { stylize, printUsage } = lessc_helper;
|
|
95
|
+
export default lessc_helper;
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import path from 'path';
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import AbstractPluginLoader from '../less/environment/abstract-plugin-loader.js';
|
|
4
|
+
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
6
|
+
|
|
6
7
|
/**
|
|
7
8
|
* Node Plugin Loader
|
|
8
9
|
*/
|
|
9
|
-
|
|
10
|
+
const PluginLoader = function(less) {
|
|
10
11
|
this.less = less;
|
|
11
|
-
this.require =
|
|
12
|
-
prefix =
|
|
13
|
-
return
|
|
14
|
-
|
|
12
|
+
this.require = prefix => {
|
|
13
|
+
prefix = path.dirname(prefix);
|
|
14
|
+
return id => {
|
|
15
|
+
const str = id.slice(0, 2);
|
|
15
16
|
if (str === '..' || str === './') {
|
|
16
|
-
return require(
|
|
17
|
+
return require(path.join(prefix, id));
|
|
17
18
|
}
|
|
18
19
|
else {
|
|
19
20
|
return require(id);
|
|
@@ -21,34 +22,41 @@ var PluginLoader = function (less) {
|
|
|
21
22
|
};
|
|
22
23
|
};
|
|
23
24
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
|
|
26
|
+
PluginLoader.prototype = Object.assign(new AbstractPluginLoader(), {
|
|
27
|
+
loadPlugin(filename, basePath, context, environment, fileManager) {
|
|
28
|
+
const prefix = filename.slice(0, 1);
|
|
29
|
+
const explicit = prefix === '.' || prefix === '/' || filename.slice(-3).toLowerCase() === '.js';
|
|
28
30
|
if (!explicit) {
|
|
29
31
|
context.prefixes = ['less-plugin-', ''];
|
|
30
32
|
}
|
|
33
|
+
|
|
31
34
|
if (context.syncImport) {
|
|
32
35
|
return fileManager.loadFileSync(filename, basePath, context, environment);
|
|
33
36
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
|
|
38
|
+
return new Promise((fulfill, reject) => {
|
|
39
|
+
fileManager.loadFile(filename, basePath, context, environment).then(
|
|
40
|
+
data => {
|
|
41
|
+
try {
|
|
42
|
+
fulfill(data);
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
console.log(e);
|
|
46
|
+
reject(e);
|
|
47
|
+
}
|
|
38
48
|
}
|
|
39
|
-
|
|
40
|
-
console.log(e);
|
|
41
|
-
reject(e);
|
|
42
|
-
}
|
|
43
|
-
}).catch(function (err) {
|
|
49
|
+
).catch(err => {
|
|
44
50
|
reject(err);
|
|
45
51
|
});
|
|
46
52
|
});
|
|
47
53
|
},
|
|
48
|
-
|
|
54
|
+
|
|
55
|
+
loadPluginSync(filename, basePath, context, environment, fileManager) {
|
|
49
56
|
context.syncImport = true;
|
|
50
57
|
return this.loadPlugin(filename, basePath, context, environment, fileManager);
|
|
51
58
|
}
|
|
52
59
|
});
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
|
|
61
|
+
export default PluginLoader;
|
|
62
|
+
|
|
@@ -1,58 +1,60 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
var tslib_1 = require("tslib");
|
|
4
1
|
/* eslint-disable no-unused-vars */
|
|
5
2
|
/**
|
|
6
3
|
* @todo - remove top eslint rule when FileManagers have JSDoc type
|
|
7
4
|
* and are TS-type-checked
|
|
8
5
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
6
|
+
import { createRequire } from 'module';
|
|
7
|
+
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
|
|
10
|
+
const isUrlRe = /^(?:https?:)?\/\//i;
|
|
11
|
+
import url from 'url';
|
|
12
|
+
let request;
|
|
13
|
+
import AbstractFileManager from '../less/environment/abstract-file-manager.js';
|
|
14
|
+
import logger from '../less/logger.js';
|
|
15
|
+
|
|
16
|
+
const UrlFileManager = function() {}
|
|
17
|
+
UrlFileManager.prototype = Object.assign(new AbstractFileManager(), {
|
|
18
|
+
supports(filename, currentDirectory, options, environment) {
|
|
19
|
+
return isUrlRe.test( filename ) || isUrlRe.test(currentDirectory);
|
|
18
20
|
},
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
|
|
22
|
+
loadFile(filename, currentDirectory, options, environment) {
|
|
23
|
+
return new Promise((fulfill, reject) => {
|
|
21
24
|
if (request === undefined) {
|
|
22
|
-
try {
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
request = null;
|
|
27
|
-
}
|
|
25
|
+
try { request = require('needle'); }
|
|
26
|
+
catch (e) { request = null; }
|
|
28
27
|
}
|
|
29
28
|
if (!request) {
|
|
30
29
|
reject({ type: 'File', message: 'optional dependency \'needle\' required to import over http(s)\n' });
|
|
31
30
|
return;
|
|
32
31
|
}
|
|
33
|
-
|
|
32
|
+
|
|
33
|
+
let urlStr = isUrlRe.test( filename ) ? filename : url.resolve(currentDirectory, filename);
|
|
34
|
+
|
|
34
35
|
/** native-request currently has a bug */
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
const hackUrlStr = urlStr.indexOf('?') === -1 ? urlStr + '?' : urlStr
|
|
37
|
+
|
|
38
|
+
request.get(hackUrlStr, { follow_max: 5 }, (err, resp, body) => {
|
|
37
39
|
if (err || resp && resp.statusCode >= 400) {
|
|
38
|
-
|
|
39
|
-
?
|
|
40
|
-
:
|
|
41
|
-
reject({ type: 'File', message
|
|
40
|
+
const message = resp && resp.statusCode === 404
|
|
41
|
+
? `resource '${urlStr}' was not found\n`
|
|
42
|
+
: `resource '${urlStr}' gave this Error:\n ${err || resp.statusMessage || resp.statusCode}\n`;
|
|
43
|
+
reject({ type: 'File', message });
|
|
42
44
|
return;
|
|
43
45
|
}
|
|
44
46
|
if (resp.statusCode >= 300) {
|
|
45
|
-
reject({ type: 'File', message:
|
|
47
|
+
reject({ type: 'File', message: `resource '${urlStr}' caused too many redirects` });
|
|
46
48
|
return;
|
|
47
49
|
}
|
|
48
50
|
body = body.toString('utf8');
|
|
49
51
|
if (!body) {
|
|
50
|
-
|
|
52
|
+
logger.warn(`Warning: Empty body (HTTP ${resp.statusCode}) returned by "${urlStr}"`);
|
|
51
53
|
}
|
|
52
54
|
fulfill({ contents: body || '', filename: urlStr });
|
|
53
55
|
});
|
|
54
56
|
});
|
|
55
57
|
}
|
|
56
58
|
});
|
|
57
|
-
|
|
58
|
-
|
|
59
|
+
|
|
60
|
+
export default UrlFileManager;
|