Showing preview only (2,053K chars total). Download the full file or copy to clipboard to get everything.
Repository: less/less.js
Branch: master
Commit: ea62d748d48c
Files: 904
Total size: 1.8 MB
Directory structure:
gitextract_l41uqth4/
├── .all-contributorsrc
├── .coderabbit.yaml
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.md
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── TESTING_PUBLISHING.md
│ ├── stale.yml
│ └── workflows/
│ ├── ci.yml
│ ├── create-release-pr.yml
│ └── publish.yml
├── .gitignore
├── .husky/
│ ├── post-merge
│ └── pre-commit
├── .nvmrc
├── .vscode/
│ └── launch.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── packages/
│ ├── less/
│ │ ├── .eslintignore
│ │ ├── .eslintrc.cjs
│ │ ├── .gitignore
│ │ ├── .npmignore
│ │ ├── Gruntfile.cjs
│ │ ├── README.md
│ │ ├── benchmark/
│ │ │ ├── benchmark-import-reference-target.less
│ │ │ ├── benchmark-import-target.less
│ │ │ ├── benchmark-runner.js
│ │ │ ├── benchmark-v3.less
│ │ │ ├── benchmark-v37.less
│ │ │ ├── benchmark-v39.less
│ │ │ ├── benchmark.less
│ │ │ ├── index.js
│ │ │ ├── results/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── latest/
│ │ │ │ │ └── macbook-pro_arm64.json
│ │ │ │ └── runs/
│ │ │ │ ├── 2026-03-09T21-34-11Z_macbook-pro_arm64.json
│ │ │ │ └── 2026-03-09_macbook-pro_arm64.json
│ │ │ └── run-historical.sh
│ │ ├── bin/
│ │ │ └── lessc
│ │ ├── bower.json
│ │ ├── build/
│ │ │ ├── banner.js
│ │ │ └── rollup.js
│ │ ├── index.cjs
│ │ ├── lib/
│ │ │ ├── less/
│ │ │ │ ├── constants.js
│ │ │ │ ├── contexts.js
│ │ │ │ ├── data/
│ │ │ │ │ ├── colors.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── unit-conversions.js
│ │ │ │ ├── default-options.js
│ │ │ │ ├── deprecation.js
│ │ │ │ ├── environment/
│ │ │ │ │ ├── abstract-file-manager.js
│ │ │ │ │ ├── abstract-plugin-loader.js
│ │ │ │ │ ├── environment-api.ts
│ │ │ │ │ ├── environment.js
│ │ │ │ │ └── file-manager-api.ts
│ │ │ │ ├── functions/
│ │ │ │ │ ├── boolean.js
│ │ │ │ │ ├── color-blending.js
│ │ │ │ │ ├── color.js
│ │ │ │ │ ├── data-uri.js
│ │ │ │ │ ├── default.js
│ │ │ │ │ ├── function-caller.js
│ │ │ │ │ ├── function-registry.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── list.js
│ │ │ │ │ ├── math-helper.js
│ │ │ │ │ ├── math.js
│ │ │ │ │ ├── number.js
│ │ │ │ │ ├── string.js
│ │ │ │ │ ├── style.js
│ │ │ │ │ ├── svg.js
│ │ │ │ │ └── types.js
│ │ │ │ ├── import-manager.js
│ │ │ │ ├── index.js
│ │ │ │ ├── less-error.js
│ │ │ │ ├── logger.js
│ │ │ │ ├── parse-tree.js
│ │ │ │ ├── parse.js
│ │ │ │ ├── parser/
│ │ │ │ │ ├── parser-input.js
│ │ │ │ │ └── parser.js
│ │ │ │ ├── plugin-manager.js
│ │ │ │ ├── render.js
│ │ │ │ ├── source-map-builder.js
│ │ │ │ ├── source-map-output.js
│ │ │ │ ├── transform-tree.js
│ │ │ │ ├── tree/
│ │ │ │ │ ├── anonymous.js
│ │ │ │ │ ├── assignment.js
│ │ │ │ │ ├── atrule-syntax.js
│ │ │ │ │ ├── atrule.js
│ │ │ │ │ ├── attribute.js
│ │ │ │ │ ├── call.js
│ │ │ │ │ ├── color.js
│ │ │ │ │ ├── combinator.js
│ │ │ │ │ ├── comment.js
│ │ │ │ │ ├── condition.js
│ │ │ │ │ ├── container.js
│ │ │ │ │ ├── debug-info.js
│ │ │ │ │ ├── declaration.js
│ │ │ │ │ ├── detached-ruleset.js
│ │ │ │ │ ├── dimension.js
│ │ │ │ │ ├── element.js
│ │ │ │ │ ├── expression.js
│ │ │ │ │ ├── extend.js
│ │ │ │ │ ├── import.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── javascript.js
│ │ │ │ │ ├── js-eval-node.js
│ │ │ │ │ ├── keyword.js
│ │ │ │ │ ├── media.js
│ │ │ │ │ ├── merge-rules.js
│ │ │ │ │ ├── mixin-call.js
│ │ │ │ │ ├── mixin-definition.js
│ │ │ │ │ ├── namespace-value.js
│ │ │ │ │ ├── negative.js
│ │ │ │ │ ├── nested-at-rule.js
│ │ │ │ │ ├── node.js
│ │ │ │ │ ├── operation.js
│ │ │ │ │ ├── paren.js
│ │ │ │ │ ├── property.js
│ │ │ │ │ ├── query-in-parens.js
│ │ │ │ │ ├── quoted.js
│ │ │ │ │ ├── ruleset.js
│ │ │ │ │ ├── selector.js
│ │ │ │ │ ├── unicode-descriptor.js
│ │ │ │ │ ├── unit.js
│ │ │ │ │ ├── url.js
│ │ │ │ │ ├── value.js
│ │ │ │ │ ├── variable-call.js
│ │ │ │ │ └── variable.js
│ │ │ │ ├── utils.js
│ │ │ │ └── visitors/
│ │ │ │ ├── extend-visitor.js
│ │ │ │ ├── import-sequencer.js
│ │ │ │ ├── import-visitor.js
│ │ │ │ ├── index.js
│ │ │ │ ├── join-selector-visitor.js
│ │ │ │ ├── set-tree-visibility-visitor.js
│ │ │ │ ├── to-css-visitor.js
│ │ │ │ └── visitor.js
│ │ │ ├── less-browser/
│ │ │ │ ├── add-default-options.js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── browser.js
│ │ │ │ ├── cache.js
│ │ │ │ ├── error-reporting.js
│ │ │ │ ├── file-manager.js
│ │ │ │ ├── image-size.js
│ │ │ │ ├── index.js
│ │ │ │ ├── log-listener.js
│ │ │ │ ├── plugin-loader.js
│ │ │ │ └── utils.js
│ │ │ └── less-node/
│ │ │ ├── environment.js
│ │ │ ├── file-manager.js
│ │ │ ├── fs.js
│ │ │ ├── image-size.js
│ │ │ ├── index.js
│ │ │ ├── lessc-helper.js
│ │ │ ├── plugin-loader.js
│ │ │ └── url-file-manager.js
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ ├── coverage-lines.js
│ │ │ ├── coverage-report.js
│ │ │ └── postinstall.js
│ │ ├── test/
│ │ │ ├── .eslintrc.json
│ │ │ ├── README.md
│ │ │ ├── browser/
│ │ │ │ ├── common.js
│ │ │ │ ├── css/
│ │ │ │ │ ├── global-vars/
│ │ │ │ │ │ └── simple.css
│ │ │ │ │ ├── modify-vars/
│ │ │ │ │ │ └── simple.css
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ └── plugin.css
│ │ │ │ │ ├── postProcessor/
│ │ │ │ │ │ └── postProcessor.css
│ │ │ │ │ ├── relative-urls/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rewrite-urls/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rootpath/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rootpath-relative/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rootpath-rewrite-urls/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ └── urls.css
│ │ │ │ ├── generator/
│ │ │ │ │ ├── benchmark.config.cjs
│ │ │ │ │ ├── generate.cjs
│ │ │ │ │ ├── generate.js
│ │ │ │ │ ├── runner.cjs
│ │ │ │ │ ├── runner.config.cjs
│ │ │ │ │ ├── runner.js
│ │ │ │ │ ├── template.cjs
│ │ │ │ │ └── utils.cjs
│ │ │ │ ├── less/
│ │ │ │ │ ├── console-errors/
│ │ │ │ │ │ ├── test-error.less
│ │ │ │ │ │ └── test-error.txt
│ │ │ │ │ ├── errors/
│ │ │ │ │ │ ├── image-height-error.less
│ │ │ │ │ │ ├── image-height-error.txt
│ │ │ │ │ │ ├── image-size-error.less
│ │ │ │ │ │ ├── image-size-error.txt
│ │ │ │ │ │ ├── image-width-error.less
│ │ │ │ │ │ └── image-width-error.txt
│ │ │ │ │ ├── global-vars/
│ │ │ │ │ │ └── simple.less
│ │ │ │ │ ├── imports/
│ │ │ │ │ │ ├── urls.less
│ │ │ │ │ │ └── urls2.less
│ │ │ │ │ ├── modify-vars/
│ │ │ │ │ │ ├── imports/
│ │ │ │ │ │ │ └── simple2.less
│ │ │ │ │ │ └── simple.less
│ │ │ │ │ ├── nested-gradient-with-svg-gradient/
│ │ │ │ │ │ ├── mixin-consumer.less
│ │ │ │ │ │ └── svg-gradient-mixin.less
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ ├── plugin.js
│ │ │ │ │ │ └── plugin.less
│ │ │ │ │ ├── postProcessor/
│ │ │ │ │ │ └── postProcessor.less
│ │ │ │ │ ├── relative-urls/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rewrite-urls/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rootpath/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rootpath-relative/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rootpath-rewrite-urls/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ └── urls.less
│ │ │ │ ├── runner-VisitorPlugin-options.js
│ │ │ │ ├── runner-VisitorPlugin.js
│ │ │ │ ├── runner-browser-options.js
│ │ │ │ ├── runner-browser-spec.js
│ │ │ │ ├── runner-console-errors.js
│ │ │ │ ├── runner-errors-options.js
│ │ │ │ ├── runner-errors-spec.js
│ │ │ │ ├── runner-filemanagerPlugin-options.js
│ │ │ │ ├── runner-filemanagerPlugin.js
│ │ │ │ ├── runner-global-vars-options.js
│ │ │ │ ├── runner-global-vars-spec.js
│ │ │ │ ├── runner-main-options.js
│ │ │ │ ├── runner-main-spec.js
│ │ │ │ ├── runner-modify-vars-options.js
│ │ │ │ ├── runner-modify-vars-spec.js
│ │ │ │ ├── runner-no-js-errors-options.js
│ │ │ │ ├── runner-no-js-errors-spec.js
│ │ │ │ ├── runner-postProcessorPlugin-options.js
│ │ │ │ ├── runner-postProcessorPlugin.js
│ │ │ │ ├── runner-preProcessorPlugin-options.js
│ │ │ │ ├── runner-preProcessorPlugin.js
│ │ │ │ ├── runner-production-options.js
│ │ │ │ ├── runner-production-spec.js
│ │ │ │ ├── runner-relative-urls-options.js
│ │ │ │ ├── runner-relative-urls-spec.js
│ │ │ │ ├── runner-rewrite-urls-options.js
│ │ │ │ ├── runner-rewrite-urls-spec.js
│ │ │ │ ├── runner-rootpath-options.js
│ │ │ │ ├── runner-rootpath-relative-options.js
│ │ │ │ ├── runner-rootpath-relative-spec.js
│ │ │ │ ├── runner-rootpath-rewrite-urls-options.js
│ │ │ │ ├── runner-rootpath-rewrite-urls-spec.js
│ │ │ │ ├── runner-rootpath-spec.js
│ │ │ │ ├── runner-strict-units-options.js
│ │ │ │ └── runner-strict-units-spec.js
│ │ │ ├── exports/
│ │ │ │ ├── import-patterns.cjs
│ │ │ │ ├── webpack-browser-entry.js
│ │ │ │ └── webpack-browser.cjs
│ │ │ ├── index.js
│ │ │ ├── less-test.js
│ │ │ ├── mocha-playwright/
│ │ │ │ └── runner.js
│ │ │ ├── modify-vars.js
│ │ │ ├── plugins/
│ │ │ │ ├── filemanager/
│ │ │ │ │ └── index.cjs
│ │ │ │ ├── postprocess/
│ │ │ │ │ └── index.cjs
│ │ │ │ ├── preprocess/
│ │ │ │ │ └── index.cjs
│ │ │ │ └── visitor/
│ │ │ │ └── index.cjs
│ │ │ ├── sourcemaps/
│ │ │ │ ├── basic.json
│ │ │ │ ├── comprehensive.json
│ │ │ │ ├── custom-props.json
│ │ │ │ ├── index.html
│ │ │ │ ├── sourcemaps-basepath.json
│ │ │ │ ├── sourcemaps-include-source.json
│ │ │ │ ├── sourcemaps-rootpath.json
│ │ │ │ └── sourcemaps-url.json
│ │ │ ├── sourcemaps-disable-annotation/
│ │ │ │ └── basic.json
│ │ │ ├── sourcemaps-variable-selector/
│ │ │ │ └── basic.json
│ │ │ ├── test-cjs-suite.cjs
│ │ │ ├── test-cjs.cjs
│ │ │ └── test-es6.js
│ │ ├── test.less
│ │ └── tsconfig.json
│ ├── test-data/
│ │ ├── data/
│ │ │ └── page.html
│ │ ├── index.js
│ │ ├── package.json
│ │ ├── plugin/
│ │ │ ├── plugin-collection.js
│ │ │ ├── plugin-global.js
│ │ │ ├── plugin-local.js
│ │ │ ├── plugin-preeval.js
│ │ │ ├── plugin-scope1.js
│ │ │ ├── plugin-scope2.js
│ │ │ ├── plugin-set-options-v2.js
│ │ │ ├── plugin-set-options-v3.js
│ │ │ ├── plugin-set-options.js
│ │ │ ├── plugin-simple.js
│ │ │ ├── plugin-transitive.js
│ │ │ ├── plugin-transitive.less
│ │ │ └── plugin-tree-nodes.js
│ │ ├── tests-config/
│ │ │ ├── 3rd-party/
│ │ │ │ ├── bootstrap4.css
│ │ │ │ ├── bootstrap4.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── at-rules-compressed/
│ │ │ │ ├── at-rules-compressed.css
│ │ │ │ ├── at-rules-compressed.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── at-rules-compressed-evaluation/
│ │ │ │ ├── at-rules-compressed-evaluation.css
│ │ │ │ ├── at-rules-compressed-evaluation.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── compression/
│ │ │ │ ├── compression.css
│ │ │ │ ├── compression.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── debug/
│ │ │ │ ├── all/
│ │ │ │ │ ├── linenumbers-all.css
│ │ │ │ │ ├── linenumbers-all.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ ├── comments/
│ │ │ │ │ ├── linenumbers-comments.css
│ │ │ │ │ ├── linenumbers-comments.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ ├── import/
│ │ │ │ │ └── test.less
│ │ │ │ ├── linenumbers.less
│ │ │ │ └── mediaquery/
│ │ │ │ ├── linenumbers-mediaquery.css
│ │ │ │ ├── linenumbers-mediaquery.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── filemanagerPlugin/
│ │ │ │ ├── colors.test
│ │ │ │ ├── filemanager.css
│ │ │ │ ├── filemanager.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── globalVars/
│ │ │ │ ├── extended.css
│ │ │ │ ├── extended.json
│ │ │ │ ├── extended.less
│ │ │ │ ├── simple.css
│ │ │ │ ├── simple.json
│ │ │ │ ├── simple.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── import-redirect/
│ │ │ │ └── import-redirect.less
│ │ │ ├── include-path/
│ │ │ │ ├── import-test-e.less
│ │ │ │ ├── include-path.css
│ │ │ │ ├── include-path.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── include-path-string/
│ │ │ │ ├── include-path-string.css
│ │ │ │ ├── include-path-string.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── js-type-errors/
│ │ │ │ ├── js-type-error-2.txt
│ │ │ │ ├── js-type-error.less
│ │ │ │ ├── js-type-error.txt
│ │ │ │ └── styles.config.cjs
│ │ │ ├── math/
│ │ │ │ ├── always/
│ │ │ │ │ ├── mixins-guards.css
│ │ │ │ │ └── no-sm-operations.css
│ │ │ │ ├── parens-division/
│ │ │ │ │ ├── media-math.css
│ │ │ │ │ ├── mixins-args.css
│ │ │ │ │ ├── new-division.css
│ │ │ │ │ └── parens.css
│ │ │ │ └── strict/
│ │ │ │ ├── css.css
│ │ │ │ ├── media-math.css
│ │ │ │ ├── mixins-args.css
│ │ │ │ └── parens.css
│ │ │ ├── math-always/
│ │ │ │ ├── mixins-guards.less
│ │ │ │ ├── no-sm-operations.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── math-parens-division/
│ │ │ │ ├── media-math.less
│ │ │ │ ├── mixins-args.less
│ │ │ │ ├── new-division.less
│ │ │ │ ├── parens.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── math-strict/
│ │ │ │ ├── css.less
│ │ │ │ ├── media-math.less
│ │ │ │ ├── mixins-args.less
│ │ │ │ ├── parens.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── modifyVars/
│ │ │ │ ├── extended.css
│ │ │ │ ├── extended.json
│ │ │ │ ├── extended.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── namespacing/
│ │ │ │ ├── imports/
│ │ │ │ │ ├── a-better-bootstrap.less
│ │ │ │ │ └── library.less
│ │ │ │ ├── namespacing-1.css
│ │ │ │ ├── namespacing-1.less
│ │ │ │ ├── namespacing-2.css
│ │ │ │ ├── namespacing-2.less
│ │ │ │ ├── namespacing-3.css
│ │ │ │ ├── namespacing-3.less
│ │ │ │ ├── namespacing-4.css
│ │ │ │ ├── namespacing-4.less
│ │ │ │ ├── namespacing-5.css
│ │ │ │ ├── namespacing-5.less
│ │ │ │ ├── namespacing-6.css
│ │ │ │ ├── namespacing-6.less
│ │ │ │ ├── namespacing-7.css
│ │ │ │ ├── namespacing-7.less
│ │ │ │ ├── namespacing-8.css
│ │ │ │ ├── namespacing-8.less
│ │ │ │ ├── namespacing-functions.css
│ │ │ │ ├── namespacing-functions.less
│ │ │ │ ├── namespacing-media.css
│ │ │ │ ├── namespacing-media.less
│ │ │ │ ├── namespacing-operations.css
│ │ │ │ ├── namespacing-operations.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── no-js-errors/
│ │ │ │ ├── no-js-errors.less
│ │ │ │ ├── no-js-errors.txt
│ │ │ │ └── styles.config.cjs
│ │ │ ├── postProcessorPlugin/
│ │ │ │ ├── postProcessor.css
│ │ │ │ ├── postProcessor.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── preProcessorPlugin/
│ │ │ │ ├── preProcessor.css
│ │ │ │ ├── preProcessor.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── process-imports/
│ │ │ │ ├── google.css
│ │ │ │ ├── google.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── rewrite-urls-all/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rewrite-urls-all.css
│ │ │ │ ├── rewrite-urls-all.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── rewrite-urls-local/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rewrite-urls-local.css
│ │ │ │ ├── rewrite-urls-local.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── root-registry/
│ │ │ │ ├── file.less
│ │ │ │ └── root.less
│ │ │ ├── rootpath-rewrite-urls-all/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rootpath-rewrite-urls-all.css
│ │ │ │ ├── rootpath-rewrite-urls-all.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── rootpath-rewrite-urls-local/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rootpath-rewrite-urls-local.css
│ │ │ │ ├── rootpath-rewrite-urls-local.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps/
│ │ │ │ ├── basic.json
│ │ │ │ ├── basic.less
│ │ │ │ ├── comprehensive/
│ │ │ │ │ ├── comprehensive.css
│ │ │ │ │ ├── comprehensive.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ ├── custom-props.less
│ │ │ │ ├── imported.css
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-basepath/
│ │ │ │ ├── sourcemaps-basepath.css
│ │ │ │ ├── sourcemaps-basepath.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-disable-annotation/
│ │ │ │ ├── basic.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-empty/
│ │ │ │ ├── empty.less
│ │ │ │ ├── styles.config.cjs
│ │ │ │ └── var-defs.less
│ │ │ ├── sourcemaps-include-source/
│ │ │ │ ├── sourcemaps-include-source.css
│ │ │ │ ├── sourcemaps-include-source.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-rootpath/
│ │ │ │ ├── sourcemaps-rootpath.css
│ │ │ │ ├── sourcemaps-rootpath.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-url/
│ │ │ │ ├── sourcemaps-url.css
│ │ │ │ ├── sourcemaps-url.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-variable-selector/
│ │ │ │ ├── basic.less
│ │ │ │ ├── styles.config.cjs
│ │ │ │ └── vars.less
│ │ │ ├── static-urls/
│ │ │ │ ├── styles.config.cjs
│ │ │ │ ├── urls.css
│ │ │ │ └── urls.less
│ │ │ ├── strict-imports/
│ │ │ │ ├── imported.less
│ │ │ │ ├── strict-imports.css
│ │ │ │ ├── strict-imports.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── units/
│ │ │ │ ├── no-strict/
│ │ │ │ │ ├── no-strict.css
│ │ │ │ │ ├── no-strict.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ └── strict/
│ │ │ │ ├── strict-units.css
│ │ │ │ ├── strict-units.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── url-args/
│ │ │ │ ├── styles.config.cjs
│ │ │ │ ├── urls.css
│ │ │ │ └── urls.less
│ │ │ └── visitorPlugin/
│ │ │ ├── styles.config.cjs
│ │ │ ├── visitor.css
│ │ │ └── visitor.less
│ │ ├── tests-error/
│ │ │ ├── eval/
│ │ │ │ ├── add-mixed-units.less
│ │ │ │ ├── add-mixed-units.txt
│ │ │ │ ├── add-mixed-units2.less
│ │ │ │ ├── add-mixed-units2.txt
│ │ │ │ ├── at-rules-undefined-var.less
│ │ │ │ ├── at-rules-undefined-var.txt
│ │ │ │ ├── color-func-invalid-color-2.less
│ │ │ │ ├── color-func-invalid-color-2.txt
│ │ │ │ ├── color-func-invalid-color.less
│ │ │ │ ├── color-func-invalid-color.txt
│ │ │ │ ├── css-guard-default-func.less
│ │ │ │ ├── css-guard-default-func.txt
│ │ │ │ ├── detached-ruleset-1.less
│ │ │ │ ├── detached-ruleset-1.txt
│ │ │ │ ├── detached-ruleset-2.less
│ │ │ │ ├── detached-ruleset-2.txt
│ │ │ │ ├── detached-ruleset-3.less
│ │ │ │ ├── detached-ruleset-3.txt
│ │ │ │ ├── detached-ruleset-5.less
│ │ │ │ ├── detached-ruleset-5.txt
│ │ │ │ ├── divide-mixed-units.less
│ │ │ │ ├── divide-mixed-units.txt
│ │ │ │ ├── extend-no-selector.less
│ │ │ │ ├── extend-no-selector.txt
│ │ │ │ ├── functions-1.less
│ │ │ │ ├── functions-1.txt
│ │ │ │ ├── functions-10-keyword.less
│ │ │ │ ├── functions-10-keyword.txt
│ │ │ │ ├── functions-11-operation.less
│ │ │ │ ├── functions-11-operation.txt
│ │ │ │ ├── functions-12-quoted.less
│ │ │ │ ├── functions-12-quoted.txt
│ │ │ │ ├── functions-13-selector.less
│ │ │ │ ├── functions-13-selector.txt
│ │ │ │ ├── functions-14-url.less
│ │ │ │ ├── functions-14-url.txt
│ │ │ │ ├── functions-15-value.less
│ │ │ │ ├── functions-15-value.txt
│ │ │ │ ├── functions-3-assignment.less
│ │ │ │ ├── functions-3-assignment.txt
│ │ │ │ ├── functions-4-call.less
│ │ │ │ ├── functions-4-call.txt
│ │ │ │ ├── functions-5-color-2.less
│ │ │ │ ├── functions-5-color-2.txt
│ │ │ │ ├── functions-5-color.less
│ │ │ │ ├── functions-5-color.txt
│ │ │ │ ├── functions-6-condition.less
│ │ │ │ ├── functions-6-condition.txt
│ │ │ │ ├── functions-7-dimension.less
│ │ │ │ ├── functions-7-dimension.txt
│ │ │ │ ├── functions-8-element.less
│ │ │ │ ├── functions-8-element.txt
│ │ │ │ ├── functions-9-expression.less
│ │ │ │ ├── functions-9-expression.txt
│ │ │ │ ├── import-missing.less
│ │ │ │ ├── import-missing.txt
│ │ │ │ ├── import-subfolder1.less
│ │ │ │ ├── import-subfolder1.txt
│ │ │ │ ├── imports/
│ │ │ │ │ ├── import-subfolder1.less
│ │ │ │ │ ├── import-test.less
│ │ │ │ │ └── subfolder/
│ │ │ │ │ └── mixin-not-defined.less
│ │ │ │ ├── javascript-undefined-var.less
│ │ │ │ ├── javascript-undefined-var.txt
│ │ │ │ ├── mixin-not-defined-2.less
│ │ │ │ ├── mixin-not-defined-2.txt
│ │ │ │ ├── mixin-not-defined.less
│ │ │ │ ├── mixin-not-defined.txt
│ │ │ │ ├── mixin-not-matched.less
│ │ │ │ ├── mixin-not-matched.txt
│ │ │ │ ├── mixin-not-matched2.less
│ │ │ │ ├── mixin-not-matched2.txt
│ │ │ │ ├── mixin-not-visible-in-scope-1.less
│ │ │ │ ├── mixin-not-visible-in-scope-1.txt
│ │ │ │ ├── mixins-guards-default-func-1.less
│ │ │ │ ├── mixins-guards-default-func-1.txt
│ │ │ │ ├── mixins-guards-default-func-2.less
│ │ │ │ ├── mixins-guards-default-func-2.txt
│ │ │ │ ├── mixins-guards-default-func-3.less
│ │ │ │ ├── mixins-guards-default-func-3.txt
│ │ │ │ ├── multiple-guards-on-css-selectors.less
│ │ │ │ ├── multiple-guards-on-css-selectors.txt
│ │ │ │ ├── multiple-guards-on-css-selectors2.less
│ │ │ │ ├── multiple-guards-on-css-selectors2.txt
│ │ │ │ ├── multiply-mixed-units.less
│ │ │ │ ├── multiply-mixed-units.txt
│ │ │ │ ├── namespace-property-not-found.less
│ │ │ │ ├── namespace-property-not-found.txt
│ │ │ │ ├── namespace-variable-not-found.less
│ │ │ │ ├── namespace-variable-not-found.txt
│ │ │ │ ├── namespacing-2.less
│ │ │ │ ├── namespacing-2.txt
│ │ │ │ ├── namespacing-3.less
│ │ │ │ ├── namespacing-3.txt
│ │ │ │ ├── namespacing-4.less
│ │ │ │ ├── namespacing-4.txt
│ │ │ │ ├── percentage-non-number-argument.less
│ │ │ │ ├── percentage-non-number-argument.txt
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── plugin-error-2.js
│ │ │ │ │ ├── plugin-error-3.js
│ │ │ │ │ └── plugin-error.js
│ │ │ │ ├── plugin-1.less
│ │ │ │ ├── plugin-1.txt
│ │ │ │ ├── plugin-2.less
│ │ │ │ ├── plugin-2.txt
│ │ │ │ ├── plugin-3.less
│ │ │ │ ├── plugin-3.txt
│ │ │ │ ├── property-in-root.less
│ │ │ │ ├── property-in-root.txt
│ │ │ │ ├── property-in-root2.less
│ │ │ │ ├── property-in-root2.txt
│ │ │ │ ├── property-in-root3.less
│ │ │ │ ├── property-in-root3.txt
│ │ │ │ ├── property-interp-not-defined.less
│ │ │ │ ├── property-interp-not-defined.txt
│ │ │ │ ├── property-undefined.less
│ │ │ │ ├── property-undefined.txt
│ │ │ │ ├── recursive-property.less
│ │ │ │ ├── recursive-property.txt
│ │ │ │ ├── recursive-variable.less
│ │ │ │ ├── recursive-variable.txt
│ │ │ │ ├── root-func-undefined-1.less
│ │ │ │ ├── root-func-undefined-1.txt
│ │ │ │ ├── root-func-undefined-2.less
│ │ │ │ ├── root-func-undefined-2.txt
│ │ │ │ ├── styles.config.cjs
│ │ │ │ ├── svg-gradient1.less
│ │ │ │ ├── svg-gradient1.txt
│ │ │ │ ├── svg-gradient2.less
│ │ │ │ ├── svg-gradient2.txt
│ │ │ │ ├── svg-gradient3.less
│ │ │ │ ├── svg-gradient3.txt
│ │ │ │ ├── svg-gradient4.less
│ │ │ │ ├── svg-gradient4.txt
│ │ │ │ ├── svg-gradient5.less
│ │ │ │ ├── svg-gradient5.txt
│ │ │ │ ├── svg-gradient6.less
│ │ │ │ ├── svg-gradient6.txt
│ │ │ │ ├── unit-function.less
│ │ │ │ └── unit-function.txt
│ │ │ └── parse/
│ │ │ ├── at-rules-unmatching-block.less
│ │ │ ├── at-rules-unmatching-block.txt
│ │ │ ├── bad-variable-declaration1.less
│ │ │ ├── bad-variable-declaration1.txt
│ │ │ ├── custom-property-unmatched-block-1.less
│ │ │ ├── custom-property-unmatched-block-1.txt
│ │ │ ├── custom-property-unmatched-block-2.less
│ │ │ ├── custom-property-unmatched-block-2.txt
│ │ │ ├── custom-property-unmatched-block-3.less
│ │ │ ├── custom-property-unmatched-block-3.txt
│ │ │ ├── detached-ruleset-6.less
│ │ │ ├── detached-ruleset-6.txt
│ │ │ ├── extend-not-at-end.less
│ │ │ ├── extend-not-at-end.txt
│ │ │ ├── import-malformed.less
│ │ │ ├── import-malformed.txt
│ │ │ ├── import-no-semi.less
│ │ │ ├── import-no-semi.txt
│ │ │ ├── import-subfolder2.less
│ │ │ ├── import-subfolder2.txt
│ │ │ ├── imports/
│ │ │ │ ├── import-subfolder2.less
│ │ │ │ └── subfolder/
│ │ │ │ └── parse-error-curly-bracket.less
│ │ │ ├── invalid-color-with-comment.less
│ │ │ ├── invalid-color-with-comment.txt
│ │ │ ├── mixed-mixin-definition-args-1.less
│ │ │ ├── mixed-mixin-definition-args-1.txt
│ │ │ ├── mixed-mixin-definition-args-2.less
│ │ │ ├── mixed-mixin-definition-args-2.txt
│ │ │ ├── mixins-guards-cond-expected.less
│ │ │ ├── mixins-guards-cond-expected.txt
│ │ │ ├── parens-error-1.less
│ │ │ ├── parens-error-1.txt
│ │ │ ├── parens-error-2.less
│ │ │ ├── parens-error-2.txt
│ │ │ ├── parens-error-3.less
│ │ │ ├── parens-error-3.txt
│ │ │ ├── parse-error-curly-bracket.less
│ │ │ ├── parse-error-curly-bracket.txt
│ │ │ ├── parse-error-media-no-block-1.less
│ │ │ ├── parse-error-media-no-block-1.txt
│ │ │ ├── parse-error-media-no-block-2.less
│ │ │ ├── parse-error-media-no-block-2.txt
│ │ │ ├── parse-error-media-no-block-3.less
│ │ │ ├── parse-error-media-no-block-3.txt
│ │ │ ├── parse-error-missing-bracket.less
│ │ │ ├── parse-error-missing-bracket.txt
│ │ │ ├── parse-error-missing-parens.less
│ │ │ ├── parse-error-missing-parens.txt
│ │ │ ├── parse-error-with-import.less
│ │ │ ├── parse-error-with-import.txt
│ │ │ ├── percentage-missing-space.less
│ │ │ ├── percentage-missing-space.txt
│ │ │ ├── property-asterisk-only-name.less
│ │ │ ├── property-asterisk-only-name.txt
│ │ │ ├── single-character.less
│ │ │ ├── single-character.txt
│ │ │ └── styles.config.cjs
│ │ └── tests-unit/
│ │ ├── at-rules/
│ │ │ ├── at-rules.css
│ │ │ └── at-rules.less
│ │ ├── at-rules-declarations/
│ │ │ ├── at-rules-declarations.css
│ │ │ └── at-rules-declarations.less
│ │ ├── at-rules-empty/
│ │ │ ├── at-rules-empty.css
│ │ │ └── at-rules-empty.less
│ │ ├── at-rules-empty-block/
│ │ │ ├── at-rules-empty-block.css
│ │ │ └── at-rules-empty-block.less
│ │ ├── at-rules-keyword-comments/
│ │ │ ├── at-rules-keyword-comments.css
│ │ │ └── at-rules-keyword-comments.less
│ │ ├── at-rules-targeted/
│ │ │ ├── at-rules-targeted.css
│ │ │ └── at-rules-targeted.less
│ │ ├── calc/
│ │ │ ├── calc.css
│ │ │ └── calc.less
│ │ ├── charsets/
│ │ │ ├── charsets.css
│ │ │ ├── charsets.less
│ │ │ └── import/
│ │ │ └── import-charset-test.less
│ │ ├── color-functions/
│ │ │ ├── alpha.css
│ │ │ ├── alpha.less
│ │ │ ├── basic.css
│ │ │ ├── basic.less
│ │ │ ├── comprehensive.css
│ │ │ ├── comprehensive.less
│ │ │ ├── formats.css
│ │ │ ├── formats.less
│ │ │ ├── modern-syntax.css
│ │ │ ├── modern-syntax.less
│ │ │ ├── modern.css
│ │ │ ├── modern.less
│ │ │ ├── operations.css
│ │ │ ├── operations.less
│ │ │ ├── rgba.css
│ │ │ └── rgba.less
│ │ ├── comments/
│ │ │ ├── comments.css
│ │ │ ├── comments.less
│ │ │ ├── comments2.css
│ │ │ └── comments2.less
│ │ ├── container/
│ │ │ ├── container.css
│ │ │ └── container.less
│ │ ├── css-3/
│ │ │ ├── css-3.css
│ │ │ └── css-3.less
│ │ ├── css-escapes/
│ │ │ ├── css-escapes.css
│ │ │ └── css-escapes.less
│ │ ├── css-grid/
│ │ │ ├── css-grid.css
│ │ │ └── css-grid.less
│ │ ├── css-guards/
│ │ │ ├── css-guards.css
│ │ │ └── css-guards.less
│ │ ├── detached-rulesets/
│ │ │ ├── detached-rulesets.css
│ │ │ └── detached-rulesets.less
│ │ ├── directives-bubbling/
│ │ │ ├── directives-bubbling.css
│ │ │ └── directives-bubbling.less
│ │ ├── empty/
│ │ │ ├── empty.css
│ │ │ └── empty.less
│ │ ├── extend/
│ │ │ ├── extend-clearfix.css
│ │ │ ├── extend-clearfix.less
│ │ │ ├── extend.css
│ │ │ └── extend.less
│ │ ├── extend-chaining/
│ │ │ ├── extend-chaining.css
│ │ │ └── extend-chaining.less
│ │ ├── extend-clearfix/
│ │ │ ├── extend-clearfix.css
│ │ │ └── extend-clearfix.less
│ │ ├── extend-exact/
│ │ │ ├── extend-exact.css
│ │ │ └── extend-exact.less
│ │ ├── extend-media/
│ │ │ ├── extend-media.css
│ │ │ └── extend-media.less
│ │ ├── extend-nest/
│ │ │ ├── extend-nest.css
│ │ │ └── extend-nest.less
│ │ ├── extend-selector/
│ │ │ ├── extend-selector.css
│ │ │ └── extend-selector.less
│ │ ├── extract-and-length/
│ │ │ ├── extract-and-length.css
│ │ │ └── extract-and-length.less
│ │ ├── functions/
│ │ │ ├── functions.css
│ │ │ └── functions.less
│ │ ├── functions-each/
│ │ │ ├── functions-each.css
│ │ │ └── functions-each.less
│ │ ├── ie-filters/
│ │ │ ├── ie-filters.css
│ │ │ └── ie-filters.less
│ │ ├── impor/
│ │ │ ├── impor.css
│ │ │ └── impor.less
│ │ ├── import/
│ │ │ ├── import/
│ │ │ │ ├── css-import.less
│ │ │ │ ├── deeper/
│ │ │ │ │ ├── deeper-2/
│ │ │ │ │ │ ├── url-import-2.less
│ │ │ │ │ │ └── url-import.less
│ │ │ │ │ ├── import-once-test-a.less
│ │ │ │ │ └── url-import.less
│ │ │ │ ├── import-and-relative-paths-test.less
│ │ │ │ ├── import-charset-test.less
│ │ │ │ ├── import-inline-invalid-css.less
│ │ │ │ ├── import-interpolation.less
│ │ │ │ ├── import-interpolation2.less
│ │ │ │ ├── import-once-test-c.less
│ │ │ │ ├── import-reference.less
│ │ │ │ ├── import-test-a.less
│ │ │ │ ├── import-test-b.less
│ │ │ │ ├── import-test-c.less
│ │ │ │ ├── import-test-d.css
│ │ │ │ ├── import-test-e.less
│ │ │ │ ├── import-test-f.less
│ │ │ │ ├── imports/
│ │ │ │ │ ├── font.less
│ │ │ │ │ └── logo.less
│ │ │ │ ├── interpolation-vars.less
│ │ │ │ ├── invalid-css.less
│ │ │ │ ├── json/
│ │ │ │ │ ├── index.json
│ │ │ │ │ └── index.less
│ │ │ │ ├── layer-import-2.css
│ │ │ │ ├── layer-import-3.css
│ │ │ │ ├── layer-import-4.css
│ │ │ │ ├── layer-import-5.css
│ │ │ │ ├── layer-import.less
│ │ │ │ └── urls.less
│ │ │ ├── import-inline.css
│ │ │ ├── import-inline.less
│ │ │ ├── import-interpolation.css
│ │ │ ├── import-interpolation.less
│ │ │ ├── import-module.css
│ │ │ ├── import-module.less
│ │ │ ├── import-once.css
│ │ │ ├── import-once.less
│ │ │ ├── import-reference-issues/
│ │ │ │ ├── appender-reference-1968.less
│ │ │ │ ├── comments-2991.less
│ │ │ │ ├── global-scope-import.less
│ │ │ │ ├── global-scope-nested.less
│ │ │ │ ├── mixin-1968.less
│ │ │ │ ├── multiple-import-nested.less
│ │ │ │ ├── multiple-import.less
│ │ │ │ ├── simple-mixin.css
│ │ │ │ └── simple-ruleset-2162.less
│ │ │ ├── import-reference-issues.css
│ │ │ ├── import-reference-issues.less
│ │ │ ├── import-reference.css
│ │ │ ├── import-reference.less
│ │ │ ├── import-remote.css
│ │ │ ├── import-remote.less
│ │ │ ├── import.css
│ │ │ ├── import.less
│ │ │ └── styles.config.cjs
│ │ ├── javascript/
│ │ │ ├── javascript.css
│ │ │ ├── javascript.less
│ │ │ └── styles.config.cjs
│ │ ├── layer/
│ │ │ ├── assets/
│ │ │ │ └── import/
│ │ │ │ └── layer-import.less
│ │ │ ├── import/
│ │ │ │ └── layer-import.less
│ │ │ ├── layer.css
│ │ │ └── layer.less
│ │ ├── lazy-eval/
│ │ │ ├── lazy-eval.css
│ │ │ └── lazy-eval.less
│ │ ├── media/
│ │ │ ├── media.css
│ │ │ └── media.less
│ │ ├── merge/
│ │ │ ├── merge.css
│ │ │ └── merge.less
│ │ ├── mixin-noparens/
│ │ │ ├── mixin-noparens.css
│ │ │ └── mixin-noparens.less
│ │ ├── mixins/
│ │ │ ├── maps.css
│ │ │ ├── maps.less
│ │ │ ├── mixins-advanced.css
│ │ │ ├── mixins-advanced.less
│ │ │ ├── mixins.css
│ │ │ └── mixins.less
│ │ ├── mixins-closure/
│ │ │ ├── mixins-closure.css
│ │ │ └── mixins-closure.less
│ │ ├── mixins-guards/
│ │ │ ├── mixins-guards.css
│ │ │ └── mixins-guards.less
│ │ ├── mixins-guards-default-func/
│ │ │ ├── mixins-guards-default-func.css
│ │ │ └── mixins-guards-default-func.less
│ │ ├── mixins-important/
│ │ │ ├── mixins-important.css
│ │ │ └── mixins-important.less
│ │ ├── mixins-interpolated/
│ │ │ ├── mixins-interpolated.css
│ │ │ └── mixins-interpolated.less
│ │ ├── mixins-named-args/
│ │ │ ├── mixins-named-args.css
│ │ │ └── mixins-named-args.less
│ │ ├── mixins-nested/
│ │ │ ├── mixins-nested.css
│ │ │ └── mixins-nested.less
│ │ ├── mixins-pattern/
│ │ │ ├── mixins-pattern.css
│ │ │ └── mixins-pattern.less
│ │ ├── namespace-targeted/
│ │ │ ├── namespace-targeted.css
│ │ │ └── namespace-targeted.less
│ │ ├── nesting/
│ │ │ ├── nesting.css
│ │ │ └── nesting.less
│ │ ├── no-output/
│ │ │ ├── no-output.css
│ │ │ └── no-output.less
│ │ ├── operations/
│ │ │ ├── operations-advanced.css
│ │ │ ├── operations-advanced.less
│ │ │ ├── operations.css
│ │ │ └── operations.less
│ │ ├── parse-interpolation/
│ │ │ ├── parse-interpolation.css
│ │ │ └── parse-interpolation.less
│ │ ├── parser-property-interp/
│ │ │ ├── parser-property-interp.css
│ │ │ └── parser-property-interp.less
│ │ ├── parser-slashed-combinator/
│ │ │ ├── parser-slashed-combinator.css
│ │ │ └── parser-slashed-combinator.less
│ │ ├── permissive-parse/
│ │ │ ├── permissive-parse.css
│ │ │ └── permissive-parse.less
│ │ ├── plugi/
│ │ │ ├── plugi.css
│ │ │ └── plugi.less
│ │ ├── plugin/
│ │ │ ├── plugin.css
│ │ │ └── plugin.less
│ │ ├── plugin-module/
│ │ │ ├── plugin-module.css
│ │ │ └── plugin-module.less
│ │ ├── plugin-preeval/
│ │ │ ├── plugin-preeval.css
│ │ │ └── plugin-preeval.less
│ │ ├── property-accessors/
│ │ │ ├── property-accessors.css
│ │ │ └── property-accessors.less
│ │ ├── property-name-interp/
│ │ │ ├── property-name-interp.css
│ │ │ └── property-name-interp.less
│ │ ├── property-targeted/
│ │ │ ├── property-targeted.css
│ │ │ └── property-targeted.less
│ │ ├── rulesets/
│ │ │ ├── rulesets.css
│ │ │ └── rulesets.less
│ │ ├── scope/
│ │ │ ├── scope.css
│ │ │ └── scope.less
│ │ ├── selectors/
│ │ │ ├── selectors.css
│ │ │ └── selectors.less
│ │ ├── starting-style/
│ │ │ ├── starting-style.css
│ │ │ └── starting-style.less
│ │ ├── strings/
│ │ │ ├── strings.css
│ │ │ └── strings.less
│ │ ├── styles.config.cjs
│ │ ├── tailwind/
│ │ │ ├── tailwind.css
│ │ │ └── tailwind.less
│ │ ├── urls/
│ │ │ ├── actual.css
│ │ │ ├── assets/
│ │ │ │ └── nested-gradient-with-svg-gradient/
│ │ │ │ ├── mixin-consumer.less
│ │ │ │ └── svg-gradient-mixin.less
│ │ │ ├── css/
│ │ │ │ └── background.css
│ │ │ ├── import/
│ │ │ │ ├── import-and-relative-paths-test.less
│ │ │ │ ├── import-test-d.css
│ │ │ │ └── imports/
│ │ │ │ ├── font.less
│ │ │ │ └── logo.less
│ │ │ ├── nested-gradient-with-svg-gradient/
│ │ │ │ ├── mixin-consumer.less
│ │ │ │ └── svg-gradient-mixin.less
│ │ │ ├── urls.css
│ │ │ └── urls.less
│ │ ├── variables/
│ │ │ ├── variable-advanced.css
│ │ │ ├── variable-advanced.less
│ │ │ ├── variables.css
│ │ │ └── variables.less
│ │ ├── variables-in-at-rules/
│ │ │ ├── variables-in-at-rules.css
│ │ │ └── variables-in-at-rules.less
│ │ └── whitespace/
│ │ ├── whitespace.css
│ │ └── whitespace.less
│ └── test-import-module/
│ ├── one/
│ │ ├── 1.less
│ │ └── two/
│ │ ├── 2.less
│ │ └── three/
│ │ └── 3.less
│ └── package.json
├── pnpm-workspace.yaml
└── scripts/
├── bump-and-publish.js
├── post-merge-version-fix.js
├── publish-beta.js
└── test-release-automation.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .all-contributorsrc
================================================
{
"projectName": "Less.js",
"projectOwner": "The Less CSS Team",
"repoType": "github",
"repoHost": "https://github.com/less/less.js",
"files": [
"README.md"
],
"imageSize": 100,
"commit": true,
"commitConvention": "gitmoji",
"contributors": [
{
"login": "matthew-dean",
"name": "Matthew Dean",
"avatar_url": "https://avatars.githubusercontent.com/u/414752?v=4",
"profile": "https://github.com/matthew-dean",
"contributions": [
"code",
"doc",
"maintenance",
"projectManagement"
]
},
{
"login": "cloudhead",
"name": "Alexis Sellier",
"avatar_url": "https://avatars.githubusercontent.com/u/40774?v=4",
"profile": "https://cloudhead.io/",
"contributions": [
"code",
"doc"
]
},
{
"login": "lukeapage",
"name": "Luke Page",
"avatar_url": "https://avatars.githubusercontent.com/u/309321?v=4",
"profile": "https://github.com/lukeapage",
"contributions": [
"code"
]
},
{
"login": "seven-phases-max",
"name": "Max Mikhailov",
"avatar_url": "https://avatars.githubusercontent.com/u/5304376?v=4",
"profile": "https://github.com/seven-phases-max",
"contributions": [
"code"
]
},
{
"login": "iChenLei",
"name": "Lei Chen",
"avatar_url": "https://avatars.githubusercontent.com/u/14012511?v=4",
"profile": "https://github.com/iChenLei",
"contributions": [
"code",
"bug",
"doc"
]
},
{
"login": "puckowski",
"name": "Daniel Puckowski",
"avatar_url": "https://avatars.githubusercontent.com/u/3059609?v=4",
"profile": "https://github.com/puckowski",
"contributions": [
"code",
"bug"
]
}
],
"contributorsPerLine": 7,
"linkToUsage": true
}
================================================
FILE: .coderabbit.yaml
================================================
reviews:
max_files: 200
================================================
FILE: .editorconfig
================================================
# @see http://editorconfig.org/
# the buck stops here
root = true
# all files
[*]
end_of_line = LF
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
================================================
FILE: .gitattributes
================================================
*.js text eol=lf
*.svg text eol=lf
lessc text eol=lf
*.less text eol=lf
*.css text eol=lf
*.htm text eol=lf
*.html text eol=lf
*.jpg binary
*.png binary
*.jpeg binary
# From https://github.com/alexkaratarakis/gitattributes/blob/master/Web.gitattributes
*.lock text -diff
package-lock.json text -diff
================================================
FILE: .github/ISSUE_TEMPLATE/bug.md
================================================
---
name: "\U0001F41E Bug report"
about: Something isn’t working as expected
title: ''
labels: 'bug'
assignees: ''
---
**To reproduce:**
<!-- If the issue you reported requires a complex codebase to reproduce, please provide a replicable method such as a Github repository, Codesandbox link, Stackblitz link, or other relevant method for maintainers to investigate your feedback effectively. Thanks ! -->
```less
// less code here
```
**Current behavior:**
<!-- A clear and concise description of what the bug is -->
**Expected behavior:**
<!-- A clear and concise description of what you expected to happen -->
**Environment information:**
<!-- Provide the `less` and `nodejs` packages versions -->
- `less` version:
- `nodejs` version:
- `operating system`:
<!-- macos, linux or windows ? -->
<!-- feel free to add additional comments -->
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: ✨ Feature Request / idea
url: https://github.com/less/less.js/discussions/new
about: Missing something in Less? Let us know.
- name: 💬 Question / Discussion
url: https://github.com/less/less.js/discussions/new
about: Feel free to ask anything
- name: 📖 View documentation
url: https://lesscss.org
about: Official Less documentation
- name: ❓ StackOverflow
url: https://stackoverflow.com/questions/tagged/less
about: Ask question or find answers on Stack overflow
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thanks for your interest in the project. I appreciate bugs filed and PRs submitted!
Please make sure that you are familiar with and follow the Code of Conduct for
this project (found in the CODE_OF_CONDUCT.md file).
Also, please make sure you're familiar with and follow the instructions in the
contributing guidelines (found in the CONTRIBUTING.md file).
If you're new to contributing to open source projects, you might find this free
video course helpful: http://kcd.im/pull-request
Please fill out the information below to expedite the review and (hopefully)
merge of your pull request!
-->
<!-- What changes are being made? (What feature/bug is being fixed here?) -->
**What**:
<!-- Why are these changes necessary? -->
**Why**:
<!-- Have you done all of these things? -->
**Checklist**:
<!-- add "N/A" to the end of each line that's irrelevant to your changes -->
<!-- to check an item, place an "x" in the box like so: "- [x] Documentation" -->
- [ ] Documentation
- [ ] Added/updated unit tests
- [ ] Code complete
<!-- feel free to add additional comments -->
================================================
FILE: .github/SECURITY.md
================================================
## Security contact information
To report a security vulnerability, please use the
[Tidelift security contact](https://tidelift.com/security).
Tidelift will coordinate the fix and disclosure.
================================================
FILE: .github/TESTING_PUBLISHING.md
================================================
# Testing the Publishing Flow
This guide explains how to test the publishing workflow without actually publishing to npm.
## Dry Run Mode
The publishing script supports a dry-run mode that shows what would happen without making any changes:
```bash
# Test from master branch
git checkout master
DRY_RUN=true pnpm run publish
# Or use the flag
pnpm run publish --dry-run
```
Dry-run mode will:
- ✅ Show what version would be created
- ✅ Show what packages would be published
- ✅ Show what git operations would happen
- ❌ **NOT** commit any changes
- ❌ **NOT** create git tags
- ❌ **NOT** push to remote
- ❌ **NOT** publish to npm
## Testing Locally
### 1. Test Version Calculation
```bash
# Check current version
node -p "require('./packages/less/package.json').version"
# Run dry-run to see what version would be created
DRY_RUN=true pnpm run publish
```
### 2. Test Branch Validation
```bash
# Try from a feature branch (should fail)
git checkout -b test-branch
pnpm run publish
# Should error: "Publishing is only allowed from 'master' or 'alpha' branches"
```
### 3. Test Alpha Branch Validations
```bash
# Switch to alpha branch
git checkout alpha
# Test with dry-run
DRY_RUN=true GITHUB_REF_NAME=alpha pnpm run publish
# This will show:
# - Version validation (must contain -alpha.)
# - Master sync check
# - Version comparison with master
```
### 4. Test Version Override
```bash
# Test explicit version override
EXPLICIT_VERSION=4.5.0 DRY_RUN=true pnpm run publish
# Should show: "✨ Using explicit version: 4.5.0"
```
## Testing the GitHub Actions Workflow
### 1. Test Workflow Syntax
```bash
# Validate workflow YAML
gh workflow view publish.yml
# Or use act (local GitHub Actions runner)
act push -W .github/workflows/publish.yml
```
### 2. Test on a Test Branch
Create a test branch that mimics master/alpha:
```bash
# Create test branch from master
git checkout -b test-publish-master master
# Make a small change
echo "# test" >> TEST.md
git add TEST.md
git commit -m "test: publishing workflow"
# Push to trigger workflow (if you want to test the full flow)
# Note: This will actually try to publish if version changed!
```
### 3. Test Workflow Manually
You can manually trigger the workflow from GitHub Actions UI:
1. Go to Actions tab
2. Select "Publish to NPM" workflow
3. Click "Run workflow"
4. Select branch and run
**Warning**: This will actually publish if conditions are met!
## Testing Specific Scenarios
### Test Master Branch Publishing
```bash
git checkout master
DRY_RUN=true pnpm run publish
# Should show:
# - Patch version increment (e.g., 4.4.2 → 4.4.3)
# - Publishing with 'latest' tag
# - Regular release creation
```
### Test Alpha Branch Publishing
```bash
git checkout alpha
DRY_RUN=true GITHUB_REF_NAME=alpha pnpm run publish
# Should show:
# - Alpha version increment (e.g., 5.0.0-alpha.1 → 5.0.0-alpha.2)
# - Publishing with 'alpha' tag
# - Pre-release creation
# - All alpha validations passing
```
### Test Version Validation
```bash
# Test that alpha versions can't go to latest
# (This is enforced in the script, so it will fail before publishing)
# Test that non-alpha versions can't go to alpha tag
# (Also enforced in the script)
```
## Safe Testing Checklist
Before actually publishing:
- [ ] Run dry-run mode to verify version calculation
- [ ] Verify branch restrictions work (try from wrong branch)
- [ ] Test alpha validations (if testing alpha branch)
- [ ] Check that version override works (if needed)
- [ ] Verify package.json files would be updated correctly
- [ ] Review what git operations would happen
- [ ] Confirm npm tag assignment is correct
## Troubleshooting
### Script fails with "branch not allowed"
Make sure you're on `master` or `alpha` branch, or set `GITHUB_REF_NAME` environment variable:
```bash
GITHUB_REF_NAME=master DRY_RUN=true pnpm run publish
```
### Version calculation seems wrong
Check the current version in `packages/less/package.json`:
```bash
node -p "require('./packages/less/package.json').version"
```
### Alpha validations failing
Make sure:
- Alpha branch is up-to-date with master
- Current version contains `-alpha.`
- Alpha base version is >= master version
## Real Publishing Test (Use with Caution)
If you want to test the actual publishing flow:
1. **Use a test npm package** (create a scoped package like `@your-username/less-test`)
2. **Temporarily modify the script** to use your test package name
3. **Test on a separate branch** that won't trigger the workflow
4. **Clean up** after testing
**Never test on the actual `less` package unless you're ready to publish!**
================================================
FILE: .github/stale.yml
================================================
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 120
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 30
# Issues with these labels will never be considered stale
exemptLabels:
- up-for-grabs
- bug
- "high priority" # if it's been prioritized, don't mark stale
- "medium priority"
- "low priority"
- "needs decision"
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
================================================
FILE: .github/workflows/ci.yml
================================================
# Github actions workflow name
name: CI
# Triggers the workflow on push or pull request events
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
jobs:
test:
name: 'Tests on ${{matrix.os}} with Node "${{matrix.node}}"'
strategy:
fail-fast: false
matrix:
# Test all mainstream operating systems
os: [ubuntu-latest, macos-latest, windows-latest]
node: ['current']
include:
- os: ubuntu-latest
node: 'lts/*'
- os: ubuntu-latest
node: 'lts/-1'
- os: ubuntu-latest
node: 'lts/-2'
- os: ubuntu-latest
node: 'lts/-3'
runs-on: ${{ matrix.os }}
# This has copy/paste steps and should be refactored using DRY
steps:
- uses: actions/checkout@v4
- name: Install pnpm
uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: 'pnpm'
- name: Install dependencies
run: pnpm install
- name: Print put node & npm version
run: node --version && pnpm --version
- name: Install chromium
run: pnpm exec playwright install chromium
- name: Run node tests (ESM + CJS)
run: pnpm run test:node
================================================
FILE: .github/workflows/create-release-pr.yml
================================================
name: Create Release PR
# When code lands on master or alpha (not a release PR merge itself),
# automatically create or update a release pull request that bumps the
# version. Maintainers then merge that PR to trigger publishing.
#
# master → "chore: release vX.Y.Z" PR targets master
# alpha → "chore: alpha release vX.Y.Z" PR targets alpha
on:
push:
branches:
- master
- alpha
# Only trigger for commits that touch package source files.
paths:
- 'packages/**'
permissions:
contents: write
pull-requests: write
jobs:
create-release-pr:
name: Create or Update Release PR
runs-on: ubuntu-latest
# Skip if this push is itself the merge of a release PR (prevents an
# infinite loop). We catch both squash-merged and regular-merged commits
# for both the master and alpha release PR title conventions.
if: |
github.repository == 'less/less.js' &&
!contains(github.event.head_commit.message, 'chore: release v') &&
!contains(github.event.head_commit.message, 'chore: alpha release v') &&
!contains(github.event.head_commit.message, '/release-v') &&
!contains(github.event.head_commit.message, '/alpha-release-v')
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Install pnpm
uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Determine next version
id: version
run: |
BRANCH="${{ github.ref_name }}"
CURRENT=$(node -p "require('./packages/less/package.json').version")
if [ "$BRANCH" = "alpha" ]; then
# Alpha: increment the alpha prerelease number.
# X.Y.Z-alpha.N → X.Y.Z-alpha.(N+1)
# If package.json doesn't carry an alpha version yet, bump the
# major and start a fresh alpha.1 series.
NEXT=$(node -e "
const cur = process.argv[1];
const m = cur.match(/^(\d+\.\d+\.\d+)-alpha\.(\d+)$/);
if (m) {
process.stdout.write(m[1] + '-alpha.' + (parseInt(m[2], 10) + 1));
} else {
const parts = cur.replace(/-.*/, '').split('.');
const nextMajor = parseInt(parts[0], 10) + 1;
process.stdout.write(nextMajor + '.0.0-alpha.1');
}
" "$CURRENT")
echo "next_version=$NEXT" >> "$GITHUB_OUTPUT"
echo "branch=chore/alpha-release-v$NEXT" >> "$GITHUB_OUTPUT"
echo "release_base=alpha" >> "$GITHUB_OUTPUT"
else
# Master: patch-increment from the latest npm published version.
NPM_VERSION=$(npm view less version 2>/dev/null || echo "")
NEXT=$(node -e "
const semver = require('semver');
const cur = process.argv[1];
const npm = process.argv[2] || null;
if (npm && semver.valid(cur) && semver.gt(cur, npm)) {
process.stdout.write(cur);
} else {
const base = npm || cur;
process.stdout.write(semver.inc(base, 'patch'));
}
" "$CURRENT" "$NPM_VERSION")
echo "next_version=$NEXT" >> "$GITHUB_OUTPUT"
echo "branch=chore/release-v$NEXT" >> "$GITHUB_OUTPUT"
echo "release_base=master" >> "$GITHUB_OUTPUT"
fi
- name: Configure Git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Create or update release branch and PR
env:
NEXT_VERSION: ${{ steps.version.outputs.next_version }}
RELEASE_BRANCH: ${{ steps.version.outputs.branch }}
RELEASE_BASE: ${{ steps.version.outputs.release_base }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
if [ "$RELEASE_BASE" = "alpha" ]; then
TITLE="chore: alpha release v${NEXT_VERSION}"
else
TITLE="chore: release v${NEXT_VERSION}"
fi
# Create or reset the release branch off the latest base branch so it
# always includes all recent commits.
if git ls-remote --exit-code origin "refs/heads/${RELEASE_BRANCH}" &>/dev/null; then
git fetch origin "${RELEASE_BRANCH}"
git checkout -B "${RELEASE_BRANCH}" "origin/${RELEASE_BASE}"
else
git checkout -b "${RELEASE_BRANCH}"
fi
# Bump version in all package.json files.
node -e "
const fs = require('fs');
const version = process.env.NEXT_VERSION;
const dirs = fs.readdirSync('packages', { withFileTypes: true })
.filter(d => d.isDirectory())
.map(d => 'packages/' + d.name + '/package.json');
for (const f of ['package.json', ...dirs].filter(f => fs.existsSync(f))) {
const pkg = JSON.parse(fs.readFileSync(f, 'utf8'));
if (!pkg.version) continue;
pkg.version = version;
fs.writeFileSync(f, JSON.stringify(pkg, null, '\t') + '\n');
}
"
git add package.json packages/*/package.json
COMMITTED=false
if git diff --cached --quiet; then
echo "No version changes; branch is already at v${NEXT_VERSION}"
else
git commit -m "${TITLE}"
COMMITTED=true
fi
# If no new commit was created the release branch has no commits
# ahead of master, so pushing it and trying to open a PR would fail
# with "no commits between head and base". Instead, just report
# whether an existing release PR is open and exit cleanly.
if [ "$COMMITTED" = "false" ]; then
EXISTING=$(gh pr list --head "${RELEASE_BRANCH}" --base "${RELEASE_BASE}" \
--json number --jq '.[0].number' 2>/dev/null || echo "")
if [ -n "${EXISTING}" ]; then
echo "✅ No new changes; release PR #${EXISTING} already exists"
else
echo "✅ No version bump needed and no existing release PR; nothing to do"
fi
exit 0
fi
# --force-with-lease refuses to overwrite if the remote has advanced
# past what we fetched, which protects against concurrent workflow
# runs. This is intentional: if two code PRs land simultaneously the
# second run will fail-fast here and the release branch stays coherent.
git push origin "${RELEASE_BRANCH}" --force-with-lease
# Open a PR if one doesn't already exist for this version.
EXISTING=$(gh pr list --head "${RELEASE_BRANCH}" --base "${RELEASE_BASE}" \
--json number --jq '.[0].number' 2>/dev/null || echo "")
if [ -z "${EXISTING}" ]; then
BODY="## Release v${NEXT_VERSION}
This PR bumps the version to \`${NEXT_VERSION}\` and will trigger an npm publish when merged.
**Before merging:**
- [ ] Update CHANGELOG.md with changes for this release
- [ ] Verify all CI checks pass"
gh pr create \
--title "${TITLE}" \
--body "${BODY}" \
--base "${RELEASE_BASE}" \
--head "${RELEASE_BRANCH}"
echo "✅ Created release PR for v${NEXT_VERSION}"
else
echo "✅ Release PR #${EXISTING} already exists; branch updated to include latest ${RELEASE_BASE} commits"
fi
================================================
FILE: .github/workflows/publish.yml
================================================
name: Publish to NPM
on:
# Publish when a release PR is merged:
# master branch: "chore: release vX.Y.Z" PR → publishes latest
# alpha branch: "chore: alpha release vX.Y.Z" PR → publishes alpha
# Both release PRs are created automatically by create-release-pr.yml.
pull_request:
types: [closed]
branches:
- master
- alpha
permissions:
id-token: write # Required for OIDC trusted publishing
contents: write # Required for creating releases and pushing tags
jobs:
publish:
name: Publish to NPM
runs-on: ubuntu-latest
# Only run when a release PR with the expected title is merged into master
# or alpha. Any other PR close (or merge without the right title) is
# silently skipped.
if: |
github.repository == 'less/less.js' &&
github.event.pull_request.merged == true &&
(
(github.event.pull_request.base.ref == 'master' &&
startsWith(github.event.pull_request.title, 'chore: release v')) ||
(github.event.pull_request.base.ref == 'alpha' &&
startsWith(github.event.pull_request.title, 'chore: alpha release v'))
)
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
# Check out the base branch (master or alpha) post-merge so the
# version bump from the release PR is already present.
ref: ${{ github.event.pull_request.base.ref }}
- name: Install pnpm
uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
registry-url: 'https://registry.npmjs.org'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
- name: Run node tests (ESM + CJS)
run: pnpm run test:node
- name: Build
run: |
cd packages/less
pnpm run build
- name: Configure Git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Determine branch and tag type
id: branch-info
run: |
# Always a pull_request event; base.ref is master or alpha.
BRANCH="${{ github.event.pull_request.base.ref }}"
echo "branch=$BRANCH" >> $GITHUB_OUTPUT
if [ "$BRANCH" = "alpha" ]; then
echo "is_alpha=true" >> $GITHUB_OUTPUT
echo "npm_tag=alpha" >> $GITHUB_OUTPUT
echo "release_type=prerelease" >> $GITHUB_OUTPUT
else
echo "is_alpha=false" >> $GITHUB_OUTPUT
echo "npm_tag=latest" >> $GITHUB_OUTPUT
echo "release_type=release" >> $GITHUB_OUTPUT
fi
- name: Validate alpha branch requirements
if: steps.branch-info.outputs.is_alpha == 'true'
run: |
# Fetch master branch
git fetch origin master:master || true
# Check 1: Alpha branch must not be behind master
echo "🔍 Checking if alpha branch is up to date with master..."
MASTER_COMMITS=$(git rev-list --count alpha..master 2>/dev/null || echo "0")
if [ "$MASTER_COMMITS" -gt 0 ]; then
echo "❌ ERROR: Alpha branch is behind master by $MASTER_COMMITS commit(s)"
echo " Alpha branch must include all commits from master before publishing"
exit 1
fi
echo "✅ Alpha branch is up to date with master"
# Check 2: Get current version and validate it contains 'alpha'
CURRENT_VERSION=$(node -p "require('./packages/less/package.json').version")
echo "📦 Current version: $CURRENT_VERSION"
if [[ ! "$CURRENT_VERSION" =~ -alpha\. ]]; then
echo "❌ ERROR: Alpha branch version must contain '-alpha.'"
echo " Current version: $CURRENT_VERSION"
echo " Expected format: X.Y.Z-alpha.N"
exit 1
fi
echo "✅ Version contains 'alpha' suffix"
# Check 3: Alpha base version must be >= master version
echo "🔍 Comparing alpha base version with master version..."
MASTER_VERSION=$(git show master:packages/less/package.json 2>/dev/null | node -p "try { JSON.parse(require('fs').readFileSync(0, 'utf-8')).version } catch(e) { '0.0.0' }" || echo "0.0.0")
if [ "$MASTER_VERSION" = "0.0.0" ]; then
echo "⚠️ Could not determine master version, skipping comparison"
else
echo "📦 Master version: $MASTER_VERSION"
# Extract base version (remove -alpha.X suffix)
ALPHA_BASE=$(echo "$CURRENT_VERSION" | sed 's/-alpha\.[0-9]*$//')
echo "📦 Alpha base version: $ALPHA_BASE"
# Compare versions using semver from root workspace
COMPARE_RESULT=$(node -e "
const semver = require('semver');
const alphaBase = process.argv[1];
const master = process.argv[2];
if (semver.lt(alphaBase, master)) {
console.log('ERROR');
} else {
console.log('OK');
}
" "$ALPHA_BASE" "$MASTER_VERSION" 2>/dev/null || echo "ERROR")
if [ "$COMPARE_RESULT" = "ERROR" ]; then
echo "❌ ERROR: Alpha base version ($ALPHA_BASE) is lower than master version ($MASTER_VERSION)"
echo " According to semver, alpha base version must be >= master version"
exit 1
fi
echo "✅ Alpha base version is >= master version"
fi
- name: Ensure npm 11.5.1 or later for trusted publishing
run: npm install -g npm@latest
- name: Bump version and publish
id: publish
env:
# Pass the resolved base branch name (master or alpha) so that
# bump-and-publish.js knows which branch it is publishing for.
GITHUB_REF_NAME: ${{ steps.branch-info.outputs.branch }}
run: |
pnpm run publish
# Extract version from package.json
VERSION=$(node -p "require('./packages/less/package.json').version")
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=v$VERSION" >> $GITHUB_OUTPUT
- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
TAG="${{ steps.publish.outputs.tag }}"
VERSION="${{ steps.publish.outputs.version }}"
IS_ALPHA="${{ steps.branch-info.outputs.is_alpha }}"
if [ "$IS_ALPHA" = "true" ]; then
TITLE="Alpha Release $TAG"
PRERELEASE="--prerelease"
BODY="## Alpha Release
This is an alpha release from the alpha branch.
## Installation
\`\`\`bash
npm install less@${VERSION} --tag alpha
\`\`\`
Or:
\`\`\`bash
npm install less@alpha
\`\`\`"
else
TITLE="Release $TAG"
PRERELEASE=""
BODY="## Changes
See [CHANGELOG.md](https://github.com/less/less.js/blob/master/CHANGELOG.md) for details.
## Installation
\`\`\`bash
npm install less@${VERSION}
\`\`\`"
fi
if gh release view "$TAG" &>/dev/null; then
echo "Release $TAG already exists, uploading assets to existing release"
gh release upload "$TAG" packages/less/dist/less.js packages/less/dist/less.min.js --clobber
else
gh release create "$TAG" \
--title "$TITLE" \
$PRERELEASE \
--notes "$BODY" \
packages/less/dist/less.js \
packages/less/dist/less.min.js
fi
================================================
FILE: .gitignore
================================================
# OS and IDE
.emacs*
*.flymake
*~
.#*
.idea
*.iml
*.sublime-*
.DS_Store
# npm
node_modules
!package-lock.json
npm-debug.log
# Coverage
.nyc_output
coverage
*.lcov
# Build output
dist
# Claude Code
.claude/
================================================
FILE: .husky/post-merge
================================================
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
# Post-merge hook to preserve alpha versions when merging master into alpha
node scripts/post-merge-version-fix.js
================================================
FILE: .husky/pre-commit
================================================
cd packages/less && npm run typecheck && cd ../..
pnpm test
================================================
FILE: .nvmrc
================================================
v18
================================================
FILE: .vscode/launch.json
================================================
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Less test",
"program": "${workspaceFolder}/packages/less/test/index.js",
"cwd": "${workspaceFolder}/packages/less",
"console": "integratedTerminal"
},
{
"type": "node",
"request": "launch",
"name": "Benchmark test",
"program": "${workspaceFolder}/packages/less/benchmark/index.js",
"cwd": "${workspaceFolder}/packages/less",
"console": "integratedTerminal"
}
]
}
================================================
FILE: CHANGELOG.md
================================================
## Change Log
### v4.6.0 (2026-03-09)
#### Bug Fixes
- [#4414](https://github.com/less/less.js/pull/4414) Fix pre-existing bugs in tree nodes: selector `this` binding, atrule parenting, mixin-call error propagation, container/media functionRegistry guard (@matthew-dean)
- [#4408](https://github.com/less/less.js/pull/4408) Fix [#4358](https://github.com/less/less.js/issues/4358) Resolve parent selectors in comma-separated pseudo-selector lists (@matthew-dean)
- [#4407](https://github.com/less/less.js/pull/4407) Fix [#4331](https://github.com/less/less.js/issues/4331) Exclude CSS at-rule keywords from declarationCall parsing (@matthew-dean)
- [#4389](https://github.com/less/less.js/pull/4389) Fix [#4354](https://github.com/less/less.js/issues/4354) Unknown at-rule expression commas (@puckowski)
- [#4404](https://github.com/less/less.js/pull/4404) Fix no-prototype-builtins issues in Ruleset and ToCSSVisitor (@matthew-dean)
- [#4236](https://github.com/less/less.js/pull/4236) Fix import subpath module bug (@nicolo-ribaudo)
- [#4327](https://github.com/less/less.js/pull/4327) Remove duplicate length check from expression.genCSS() (@nicolo-ribaudo)
- [#3791](https://github.com/less/less.js/pull/3791) Handle the lack of optional dependencies (@nicolo-ribaudo)
#### Features & Improvements
- [#4413](https://github.com/less/less.js/pull/4413) Add JSDoc type annotations for all tree node files (@matthew-dean)
- [#4412](https://github.com/less/less.js/pull/4412) Convert prototype-based tree nodes to ES6 classes (@matthew-dean)
- [#4411](https://github.com/less/less.js/pull/4411) Migrate to native ESM with no build step (@matthew-dean)
- [#4410](https://github.com/less/less.js/pull/4410) Optimize hot paths and fix benchmark infrastructure (@matthew-dean)
- [#4409](https://github.com/less/less.js/pull/4409) Code quality cleanup for container queries and related code (@matthew-dean)
#### Deprecation Warnings
- [#4402](https://github.com/less/less.js/pull/4402) Add deprecation warnings for features removed in Less 5.x, container query variable name fix, deprecation notice fix (@matthew-dean, @puckowski)
#### Chores
- [#4406](https://github.com/less/less.js/pull/4406) Add test for number with underscore parsing (@matthew-dean)
- [#4386](https://github.com/less/less.js/pull/4386) Update README.md copyright (@matthew-dean)
- [#3782](https://github.com/less/less.js/pull/3782) Remove phantom stuff (@nicolo-ribaudo)
- [#3702](https://github.com/less/less.js/pull/3702) Replace deprecated String.prototype.substr() (@nicolo-ribaudo)
- [#4265](https://github.com/less/less.js/pull/4265) Remove redundant return from parsers.blockRuleset() (@nicolo-ribaudo)
- [#4271](https://github.com/less/less.js/pull/4271) Remove unused parsers.entities.propertyCurly() (@nicolo-ribaudo)
### v4.5.1 (2025-12-28)
_Automated patch release — no user-facing changes._
### v4.4.2 (2025-08-27)
- [#4357](https://github.com/less/less.js/pull/4357) Migrate Less test data to use valid CSS (@matthew-dean)
- [#4363](https://github.com/less/less.js/pull/4363) Fix [#4362] no spacing regression for function (@puckowski)
### v4.4.1 (2025-07-25)
- [#4342](https://github.com/less/less.js/pull/4342) Add support for CSS scroll state container queries (@puckowski)
- [#4349](https://github.com/less/less.js/pull/4349) Fix [#4348](https://github.com/less/less.js/issues/4348) parse layer nesting syntax (@puckowski)
### v4.4.0 (2025-05-31)
- [#4337](https://github.com/less/less.js/pull/4337) Add support for layer at-rule (@puckowski)
- [#4340](https://github.com/less/less.js/pull/4340) Add support for import at-rule layer functionality (@puckowski)
- [#4346](https://github.com/less/less.js/pull/4346) Fix [#4343](https://github.com/less/less.js/issues/4343) add color operands (@puckowski)
### v4.3.0 (2025-04-04)
- [#4319](https://github.com/less/less.js/pull/4319) Add deprecation warnings to Less output during parsing and new quiet flag (@matthew-dean)
- [#4320](https://github.com/less/less.js/pull/4320) Update README.md to remove Lerna reference (@matthew-dean)
- [#4322](https://github.com/less/less.js/pull/4322) Revise Playwright install method for CI stability (@puckowski)
- [#4333](https://github.com/less/less.js/pull/4333) Add support for ```starting-style``` at rule. (@puckowski)
### v4.2.2 (2025-01-04)
- [#4290](https://github.com/less/less.js/pull/4290) Fix [#4268](https://github.com/less/less.js/issues/4268) nested pseudo-selector parsing (@puckowski)
- [#4291](https://github.com/less/less.js/pull/4291) Enhance Less.js test environment setup (#4291) (@iChenLei)
- [#4295](https://github.com/less/less.js/pull/4295) Fix [#4252](https://github.com/less/less.js/issues/4252) container queries created via mixin evaluating variables incorrectly (@puckowski)
- [#4294](https://github.com/less/less.js/pull/4294) Fix [#3737](https://github.com/less/less.js/issues/3737) allow blank variable declarationd (@puckowski)
- [#4292](https://github.com/less/less.js/pull/4292) Fix [#4258](https://github.com/less/less.js/issues/4258) variable interpolation after math (@puckowski)
- [#4293](https://github.com/less/less.js/pull/4293) Fix [#4264](https://github.com/less/less.js/issues/4264) strip line comment from expression (@puckowski)
- [#4302](https://github.com/less/less.js/pull/4302) Fix [#4301](https://github.com/less/less.js/issues/4301) at-rule declarations missing (@puckowski)
- [#4309](https://github.com/less/less.js/pull/4309) Fix Node 23 CI (#4309) (@iChenLei)
### v4.2.1 (2024-09-26)
- [#4237](https://github.com/less/less.js/pull/4237) Fix [#4235](https://github.com/less/less.js/issues/4235) container style queries extra space resolved (@puckowski)
### v4.2.0 (2023-08-06)
- [#3811](https://github.com/less/less.js/pull/3811) add support for [container queries](https://www.w3.org/TR/css-contain-3) (@puckowski)
- [#3761](https://github.com/less/less.js/pull/3761) fix faulty source map generation with variables in selectors, fixes [#3567](https://github.com/less/less.js/issues/3567) (@pgoldberg)
- [#3700](https://github.com/less/less.js/pull/3700) parsing variables fail when there is no trailing semicolon (@b-kelly)
- [#3719](https://github.com/less/less.js/pull/3719) modify `this` pointer so that it is not empty. (@lumburr)
- [#3649](https://github.com/less/less.js/pull/3649) fixes [#2991](https://github.com/less/less.js/issues/2991) empty @media queries generated when compiling less file with (reference) to bootstrap (@MoonCoral)
### v4.1.3 (2022-06-09)
- [#3673](https://github.com/less/less.js/pull/3673) Feat: add support for case-insensitive attribute selectors (#3673) (@iChenLei)
- [#3710](https://github.com/less/less.js/pull/3701) Feat: add `disablePluginRule` flag for render() options (#3710) (@broofa @edhgoose)
- [#3656](https://github.com/less/less.js/pull/3656) Fix [#3655](https://github.com/less/less.js/issues/3655) for param tag is null (#3658) (@langren1353)
- [#3658](https://github.com/less/less.js/pull/3658) Fix [#3646](https://github.com/less/less.js/issues/3656) forcefully change unsupported input to strings (#3658) (@gzb1128)
- [#3668](https://github.com/less/less.js/pull/3668) Fix change keyword plugin and import regexp (#3668) (@iChenLei)
- [#3613](https://github.com/less/less.js/pull/3613) Fix [#3591](https://github.com/less/less.js/issues/3591): refactor debugInfo from class to function (#3613) (@drdevlin)
- [#3716](https://github.com/less/less.js/pull/3716) Fix https failures on macOS (#3716) (@joeyparrish)
### v4.1.2 (2021-10-04)
- [#3602](https://github.com/less/less.js/pull/3602) Fix currentFileInfo and index properties on nodes (#3602) (@bjpbakker)
- [#3626](https://github.com/less/less.js/pull/3626) Fix [#3616](https://github.com/less/less.js/issues/3616) IfStatement requires double parentheses when dividing (#3626) (@iChenLei)
- [#3630](https://github.com/less/less.js/pull/3630) Fix needle dependency warning typo. (#3630) (@cjwilsontech)
### v4.1.1 (2021-01-31)
- [#3597](https://github.com/less/less.js/pull/3597) Fix expected response when there's a socket error (#3597) (@zxfrank)
- [#3589](https://github.com/less/less.js/pull/3589) Fixes [#3586](https://github.com/less/less.js/issues/3586) (#3589) (@matthew-dean)
### v4.1.0 (2021-01-10)
- [#3582](https://github.com/less/less.js/pull/3582) Fix [#3576](https://github.com/less/less.js/issues/3576) import redirects. Replace native-request with needle. (#3582) (@zaquest)
- [#3583](https://github.com/less/less.js/pull/3583) Update rollup and other build dependencies (#3583) (@pravi)
- [#3588](https://github.com/less/less.js/pull/3588) Roll back paren requirement on mixin calls (#3588) (@matthew-dean)
### v4.0.0 (2020-12-18)
- [#3573](https://github.com/less/less.js/pull/3573) v4.0.0 (#3573) (@matthew-dean)
### v3.13.1 (2020-12-18)
- [#3575](https://github.com/less/less.js/pull/3575) Fixes #3574 (#3575) (@matthew-dean)
### v3.13.0 (2020-12-12)
- [#3572](https://github.com/less/less.js/pull/3572) Fixes #3434 - memory / runtime improvements (#3572) (@matthew-dean)
- [#3550](https://github.com/less/less.js/pull/3550) Examples contain more valid CSS, to test with a new parser (#3550) (@matthew-dean)
- [#3546](https://github.com/less/less.js/pull/3546) Bug fixes - fixes #3446 #3368 (#3546) (@matthew-dean)
### v3.12.2 (2020-07-16)
- [#3545](https://github.com/less/less.js/pull/3545) Release 3.12.2 (#3545) (@matthew-dean)
### v3.12.1 (2020-07-16)
- [#3544](https://github.com/less/less.js/pull/3544) Fixes #3533 (#3544) (@matthew-dean)
- [#3543](https://github.com/less/less.js/pull/3543) Fixes #3541 (#3543) (@matthew-dean)
### v3.12.0 (2020-07-13)
- [#3540](https://github.com/less/less.js/pull/3540) v3.12.0-RC.2 (#3540) (@matthew-dean)
- [#3532](https://github.com/less/less.js/pull/3532) Fixes #3371 Allow conditional evaluation of function args (#3532) (@matthew-dean)
- [#3531](https://github.com/less/less.js/pull/3531) Remove lib folder from git (#3531) (@matthew-dean)
- [#3530](https://github.com/less/less.js/pull/3530) Move changelog to root (#3530) (@matthew-dean)
- [#3529](https://github.com/less/less.js/pull/3529) Duplicate dist files in root for older links (#3529) (@matthew-dean)
- [#3525](https://github.com/less/less.js/pull/3525) Test-data module (#3525) (@matthew-dean)
- [#3523](https://github.com/less/less.js/pull/3523) Fixes #3504 / organizes tests (#3523) (@matthew-dean)
- [#3501](https://github.com/less/less.js/pull/3501) Restore nuked scripts (?), replace dependencies (#3501) (#3522) (@matthew-dean)
- [#3521](https://github.com/less/less.js/pull/3521) Lerna refactor / TS compiling w/o bundling (#3521) (@matthew-dean)
- [#3517](https://github.com/less/less.js/pull/3517) Resolve #3398 Add flag to disable sourcemap url annotation (#3517) (@hirosato)
- [#3294](https://github.com/less/less.js/pull/3294) fix(#3294): use loadFileSync when loading plugins with syncImport: true (#3506) (@Justineo)
### v3.11.3 (2020-06-05)
- [#3509](https://github.com/less/less.js/pull/3509) Fixes #3508 (#3509) (@matthew-dean)
### v3.11.2 (2020-06-01)
- [#3498](https://github.com/less/less.js/pull/3498) Remove tree caching in import manager (#3498) (@matthew-dean)
- [#3482](https://github.com/less/less.js/pull/3482) issue#3481 ignore missing debugInfo (#3482) (@5UtJAjiRWj1q)
- [#3494](https://github.com/less/less.js/pull/3494) Additional check to avoid evaluating an expression if it is a comment (#3494) (@rgroothuijsen)
- [#3490](https://github.com/less/less.js/pull/3490) fix: Use make-dir instead of mkdirp (#3490) (@eps1lon)
- [#3493](https://github.com/less/less.js/pull/3493) Properly exit calc mode after use (#3493) (@rgroothuijsen)
- [#3477](https://github.com/less/less.js/pull/3477) Convert to auto-changelog (#3477) (@matthew-dean)
### v3.11.1 (2020-02-11)
- [#3475](https://github.com/less/less.js/pull/3475) Fixes #3469 - Include tslib dependency (#3475) (@matthew-dean)
### v3.11.0 (2020-02-09)
- [#3468](https://github.com/less/less.js/pull/3468) 3.11.0 (#3468) (@matthew-dean)
- [#3453](https://github.com/less/less.js/pull/3453) Import file with dots in file name (#3453) (@life777)
- [#3460](https://github.com/less/less.js/pull/3460) - Fixed replacer when visitor returns array of nodes (#3460) (@lmartorella)
- [#3454](https://github.com/less/less.js/pull/3454) Added financial contributors to the README (#3454) (@monkeywithacupcake)
- [#3431](https://github.com/less/less.js/pull/3431) Fixes #3430: Removed unnecessary 'important' from NamespaceValue. (#3431) (@batchunag)
- [#3426](https://github.com/less/less.js/pull/3426) Fixes #3405 (#3426) (@matthew-dean)
### v3.10.3 (2019-08-23)
- [#3424](https://github.com/less/less.js/pull/3424) Fixes #3423 #3420 (#3424) (@matthew-dean)
- [#3421](https://github.com/less/less.js/pull/3421) Rollup changed for Node 4 compatibility (#3421) (@matthew-dean)
### v3.10.0 (2019-08-17)
- [#3413](https://github.com/less/less.js/pull/3413) Release v3.10.0 (#3413) (@matthew-dean)
### v3.10.0-beta.2 (2019-08-07)
- [#3412](https://github.com/less/less.js/pull/3412) v3.10.0-beta.2 -- Cleanup NPM and git included files (#3412) (@matthew-dean)
### v3.10.0-beta (2019-08-03)
- [#3411](https://github.com/less/less.js/pull/3411) Conversion of Less to ES6 w/ TypeScript type linting support (#3411) (@matthew-dean)
- [#3363](https://github.com/less/less.js/pull/3363) Fixes #3346 #3338 #3345 (#3363) (@matthew-dean)
- [#3364](https://github.com/less/less.js/pull/3364) Operation.prototype.accept Issues#3327 (#3364) (@legu2009)
- [#3360](https://github.com/less/less.js/pull/3360) Ignore undefined content in generating source maps (#3360) (@cthrax)
- [#3305](https://github.com/less/less.js/pull/3305) Avoid Buffer constructor on newer Node.js (#3305) (#3307) (@gabrielschulhof)
- [#3352](https://github.com/less/less.js/pull/3352) Do not pollute window object in less-browser bootstrap (#3352) (@gaiazov)
- [#3337](https://github.com/less/less.js/pull/3337) Use the correct mime type when loading a plugin (#3337) (@g3rv4)
### v3.9.0 (2018-11-29)
- [#3334](https://github.com/less/less.js/pull/3334) Adds range() function for lists (#3334) (@matthew-dean)
- [#3333](https://github.com/less/less.js/pull/3333) Fixes #3325 #3313 #3328 - each() function fixes (#3333) (@matthew-dean)
- [#3335](https://github.com/less/less.js/pull/3335) Prevent Browserify from bundling Buffer (#3335) (@matthew-dean)
### v3.8.1 (2018-08-08)
- [#3302](https://github.com/less/less.js/pull/3302) v3.8.1 (#3302) (@matthew-dean)
- [#3301](https://github.com/less/less.js/pull/3301) Fixes: #3300 (#3301) (@matthew-dean)
- [#3292](https://github.com/less/less.js/pull/3292) Demonstrate 3.7 fixes #3160 (#3292) (@matthew-dean)
- [#3291](https://github.com/less/less.js/pull/3291) Color function updates - #RRGGBBAA and CSS Variables (#3291) (@matthew-dean)
### v3.8.0 (2018-07-23)
- [#3293](https://github.com/less/less.js/pull/3293) v3.8.0 (#3293) (@matthew-dean)
- [#3248](https://github.com/less/less.js/pull/3248) Feature/rewrite urls (#3248) (@matthew-dean)
### v3.7.1 (2018-07-11)
- [#3284](https://github.com/less/less.js/pull/3284) Release v3.7.1 (#3284) (@matthew-dean)
- [#3283](https://github.com/less/less.js/pull/3283) Fix #3281: console.warning → console.warn (#3283) (@calvinjuarez)
### v3.7.0 (2018-07-11)
- [#3279](https://github.com/less/less.js/pull/3279) v3.7.0 (#3279) (@matthew-dean)
- [#3274](https://github.com/less/less.js/pull/3274) Fixes #1880 - Adds two new math modes and deprecates strictMath (@matthew-dean)
- [#3258](https://github.com/less/less.js/pull/3258) Fixes #2824 - Expressions require a delimiter of some kind in mixin args (@matthew-dean)
- [#3263](https://github.com/less/less.js/pull/3263) Fixes #2270 - Adds each() function to Less functions (@calvinjuarez, @matthew-dean)
### v3.6.0 (2018-07-10)
- [#3278](https://github.com/less/less.js/pull/3278) v3.6.0 (@matthew-dean)
- [#3252](https://github.com/less/less.js/pull/3252) Removes `less-rhino` (broken for a long time) - Fixes #3241 (@matthew-dean)
- [#3259](https://github.com/less/less.js/pull/3259) Removes "double paren" issue for boolean / if function (@matthew-dean)
- [#3276](https://github.com/less/less.js/pull/3276) Bump Jasmine version (@matthew-dean)
- [#3275](https://github.com/less/less.js/pull/3275) Adds Promise polyfill for PhantomJS under Node 9 (@matthew-dean)
- [#3261](https://github.com/less/less.js/pull/3261) Fixes #2791 - svg-gradient() not working in Firefox (@matthew-dean)
- [#3270](https://github.com/less/less.js/pull/3270) Fixes #3231 - Adds UIKit, Bootstrap 3, and Bootstrap 4 to verified tests (@matthew-dean)
### v3.5.3 (2018-07-06)
- [#3272](https://github.com/less/less.js/pull/3272) Reverts operations not being performed in media queries (@matthew-dean)
- [#3257](https://github.com/less/less.js/pull/3257) Fixes #3182 (@matthew-dean)
### v3.5.1 (2018-07-05)
- [#3267](https://github.com/less/less.js/pull/3267) Fixes issue with parentheses following variable in expressions (@matthew-dean)
### v3.5.0 (2018-07-05)
- [#3264](https://github.com/less/less.js/pull/3264) Release v3.5.0 (@matthew-dean)
### v3.5.0-beta.7 (2018-07-04)
- [#3260](https://github.com/less/less.js/pull/3260) Release v3.5.0-beta.7 (#3260) (@matthew-dean)
- [#3256](https://github.com/less/less.js/pull/3256) Allow [] to resolve to last declaration's value (#3256) (@matthew-dean)
### v3.5.0-beta.6 (2018-07-03)
- [#3255](https://github.com/less/less.js/pull/3255) v3.5.0-beta.6 (#3255) (@matthew-dean)
- [#3247](https://github.com/less/less.js/pull/3247) Plugins: If minVersion >= 3.0.0, don't "pre-run" .setOptions() (#3247) (@calvinjuarez)
- [#3254](https://github.com/less/less.js/pull/3254) Tests and parser fixes for namespace values in MQ and mixin args (#3254) (@matthew-dean)
### v3.5.0-beta.5 (2018-07-02)
- [#3251](https://github.com/less/less.js/pull/3251) Bugfix - namespace values (#3251) (@matthew-dean)
- [#3250](https://github.com/less/less.js/pull/3250) Added small breakpoints example with namespaced values (#3250) (@matthew-dean)
### v3.5.0-beta.4 (2018-06-30)
- [#3242](https://github.com/less/less.js/pull/3242) [Feature] Namespaced values (#3242) (@matthew-dean)
- [#3246](https://github.com/less/less.js/pull/3246) Release/v3.5.0 beta.3 (#3246) (@matthew-dean)
- [#3229](https://github.com/less/less.js/pull/3229) Fixes #3187 (couldn't repo, but found bugs) (#3229) (@matthew-dean)
- [#3237](https://github.com/less/less.js/pull/3237) Fixes #3235 (#3237) (@matthew-dean)
### v3.5.0-beta.3 (2018-06-29)
- [#3239](https://github.com/less/less.js/pull/3239) fix: browser cache is always considered stale if .modifyVars wasn't set (#3239) (@balpha)
### v3.5.0-beta.2 (2018-06-27)
- [#3236](https://github.com/less/less.js/pull/3236) v3.5.0-beta.2 (#3236) (@matthew-dean)
- [#3228](https://github.com/less/less.js/pull/3228) Fixes #3205, partial 3.0 math regression #1880 (#3228) (@matthew-dean)
- [#3227](https://github.com/less/less.js/pull/3227) Fixes #1421 - re-parses variable-interpolated elements to selectors (no.2) (#3227) (@matthew-dean)
- [#3223](https://github.com/less/less.js/pull/3223) Fixes #3191 (#3223) (@matthew-dean)
### v3.5.0-beta (2018-06-25)
- [#3230](https://github.com/less/less.js/pull/3230) Release v3.5.0 beta (#3230) (@matthew-dean)
- [#3219](https://github.com/less/less.js/pull/3219) Invalidate less-node file cache if modified (#3219) (@matthew-dean)
- [#3213](https://github.com/less/less.js/pull/3213) Fixes #3147 #2715 (#3213) (@matthew-dean)
- [#3220](https://github.com/less/less.js/pull/3220) Revert "Fixes #1421 - re-parses variable-interpolated elements to selectors" (@matthew-dean)
- [#3217](https://github.com/less/less.js/pull/3217) Revert "Fixes #1421 - re-parses variable-interpolated elements to selectors (#3217)" (@matthew-dean)
- [#3212](https://github.com/less/less.js/pull/3212) Revert "Pull missed code merged into 3.x branch (#3212)" (@matthew-dean)
- [#3215](https://github.com/less/less.js/pull/3215) Revert "Fixes #3195 (#3215)" (@matthew-dean)
- [#3215](https://github.com/less/less.js/pull/3215) Fixes #3195 (#3215) (@matthew-dean)
- [#3212](https://github.com/less/less.js/pull/3212) Pull missed code merged into 3.x branch (#3212) (@matthew-dean)
- [#3217](https://github.com/less/less.js/pull/3217) Fixes #1421 - re-parses variable-interpolated elements to selectors (#3217) (@matthew-dean)
- [#3207](https://github.com/less/less.js/pull/3207) update changelog for 3.0.4 (@akkumar)
- [#3206](https://github.com/less/less.js/pull/3206) Release v3.0.4 (@matthew-dean)
### v3.0.4 (2018-05-07)
- [#3180](https://github.com/less/less.js/pull/3180) update source_map to 0.6.x (@akkumar)
- [#3172](https://github.com/less/less.js/pull/3172) Type checking length units (@jacobwarduk)
- [#3200](https://github.com/less/less.js/pull/3200) Fixes #3181 (@matthew-dean)
### v3.0.3 (2018-04-18)
- [#1](https://github.com/less/less.js/pull/1) Type checking length units (@jacobwarduk)
- [#3177](https://github.com/less/less.js/pull/3177) chore(package): update request to 2.83.0 (@Kartoffelsalat)
- [#3170](https://github.com/less/less.js/pull/3170) `inline` and `less` imports of the same name = race condition (@thorn0)
- [#3168](https://github.com/less/less.js/pull/3168) Fixes #3116 - lessc not loading plugins in 3.0 (@matthew-dean)
### v3.0.1 (2018-02-15)
- [#3163](https://github.com/less/less.js/pull/3163) Merge 3.x into master (@matthew-dean, @barnabycolby, @kirillrogovoy, @maxbrunsfeld, @seven-phases-max, @ryysud, @bdsomer, @wiinci, @nikeee, @anthony-redFox)
### v3.0.0-RC.2 (2018-02-11)
- [#3161](https://github.com/less/less.js/pull/3161) Remove legacy upgrade (@matthew-dean)
- [#3159](https://github.com/less/less.js/pull/3159) Bump to 3.0.0-RC.1 (@matthew-dean)
### v3.0.0-RC.1 (2018-02-04)
- [#3150](https://github.com/less/less.js/pull/3150) Drop node 0.10 and 0.12 and added node 9 matrix testing (@anthony-redFox)
### v2.7.3 (2017-10-24)
- [#3122](https://github.com/less/less.js/pull/3122) Mime update (@nikeee)
- [#3120](https://github.com/less/less.js/pull/3120) Issue3115 ext in node path (@robhuzzey)
- [#3119](https://github.com/less/less.js/pull/3119) Update © year (@wiinci)
- [#3107](https://github.com/less/less.js/pull/3107) pinned request dep to v2.81.0 (@MarkSG93)
### v3.0.0-alpha.3 (2017-10-09)
- [#3096](https://github.com/less/less.js/pull/3096) Switch from request to phin! (@bdsomer)
- [#3082](https://github.com/less/less.js/pull/3082) Add Node.js v8 to Travis CI and AppVeyor (@ryysud)
- [#3079](https://github.com/less/less.js/pull/3079) Initial support for custom parsed functions (`boolean`, `if` etc.) (@seven-phases-max)
- [#3076](https://github.com/less/less.js/pull/3076) Update mergeRules (@seven-phases-max)
### v2.7.2 (2017-01-05)
- [#2908](https://github.com/less/less.js/pull/2908) Added 'request' as optional dependency. (@maxrd2)
- [#2955](https://github.com/less/less.js/pull/2955) Allow less imports of paths like 'dir/css' (@maxbrunsfeld)
- [#2975](https://github.com/less/less.js/pull/2975) Refactor LessError and lesscHelper.formatError (@kirillrogovoy)
- [#2988](https://github.com/less/less.js/pull/2988) Fixes #2987, --source-map-map-inline works as expected (@nicoschoenmaker)
- [#2946](https://github.com/less/less.js/pull/2946) Fixed sourceMapBasepath bug as the option had no affect on the sourceMapURL value. (@barnabycolby)
- [#2941](https://github.com/less/less.js/pull/2941) CI Build Fixes. (@bd82)
- [#2905](https://github.com/less/less.js/pull/2905) Download PhantomJS from CDN (@abrobston)
- [#2866](https://github.com/less/less.js/pull/2866) Changed octals to hex for ES6 strict mode (@mlowijs)
- [#2891](https://github.com/less/less.js/pull/2891) Fix error reporting of lessc executable II (@jhnns)
### v2.7.0 (2016-05-08)
- [#2894](https://github.com/less/less.js/pull/2894) Update my name. (@nex3)
- [#2892](https://github.com/less/less.js/pull/2892) Fix invalid extraction of the host part from URL (@Taritsyn)
- [#2874](https://github.com/less/less.js/pull/2874) removed dependency to unused package "request" (@jeremyVignelles)
- [#2830](https://github.com/less/less.js/pull/2830) make --depends generate no CSS output (@gtalusan)
- [#2860](https://github.com/less/less.js/pull/2860) Remove unreachable code (@shkdee)
- [#2859](https://github.com/less/less.js/pull/2859) Fix typos found by codespell (@stweil)
- [#2858](https://github.com/less/less.js/pull/2858) Fix AST to include text for single line comments (@zzzzBov)
- [#2853](https://github.com/less/less.js/pull/2853) bin/lessc: Make sure path.dirname gets passed strings (@addaleax)
- [#2754](https://github.com/less/less.js/pull/2754) Update contrast function and tests, fixes #2743 (@Synchro)
- [#2785](https://github.com/less/less.js/pull/2785) Allows root (non-value) functions in Less (@seven-phases-max)
- [#2834](https://github.com/less/less.js/pull/2834) Make sourcemap generation a bit faster (@Medium)
### v2.6.1 (2016-03-04)
- [#2827](https://github.com/less/less.js/pull/2827) Revert "Update jit-grunt to version 0.10.0" (@seven-phases-max)
- [#2821](https://github.com/less/less.js/pull/2821) Update jit-grunt to version 0.10.0 (@greenkeeperio-bot)
- [#2797](https://github.com/less/less.js/pull/2797) Disallow whitespace in variable calls (i.e "DR"-calls) (@seven-phases-max)
- [#2820](https://github.com/less/less.js/pull/2820) update grunt-contrib-concat to version 1.0.0 (@greenkeeperio-bot)
- [#2819](https://github.com/less/less.js/pull/2819) Guard expressions regression in 2.6.0 (#2798) (@SomMeri)
- [#2804](https://github.com/less/less.js/pull/2804) use instanceof operator instead of class comparison optimization (@marijaselakovic)
- [#2817](https://github.com/less/less.js/pull/2817) Update grunt-contrib-jshint to version 1.0.0 🚀 (@greenkeeperio-bot)
- [#2815](https://github.com/less/less.js/pull/2815) Update grunt-contrib-clean to version 1.0.0 🚀 (@greenkeeperio-bot)
- [#2813](https://github.com/less/less.js/pull/2813) Fix typo on and/or change (@mbrodala)
- [#2811](https://github.com/less/less.js/pull/2811) Update CHANGELOG.md (@Justineo)
- [#2806](https://github.com/less/less.js/pull/2806) Fix comments after named color regression (@seven-phases-max)
- [#2794](https://github.com/less/less.js/pull/2794) Update grunt-jscs to version 2.7.0 🚀 (@greenkeeperio-bot)
- [#2784](https://github.com/less/less.js/pull/2784) Update grunt-contrib-jasmine to version 1.0.0 🚀 (@greenkeeperio-bot)
- [#2773](https://github.com/less/less.js/pull/2773) Update all dependencies 🌴 (@lukeapage, @greenkeeperio-bot)
### v2.6.0 (2016-01-29)
- [#2788](https://github.com/less/less.js/pull/2788) Update license year in README.md (@prayagverma)
- [#2735](https://github.com/less/less.js/pull/2735) Fix for #2384 and caching enabled with modifyVars set (@less)
- [#2783](https://github.com/less/less.js/pull/2783) Allow unknown non-{}-block at-rules (@seven-phases-max)
- [#2779](https://github.com/less/less.js/pull/2779) Logical operator and now has higher precedence then logical operator or. (@SomMeri)
- [#2775](https://github.com/less/less.js/pull/2775) Parsing Error "Unrecognised input" for color operations with color names #2124 (@SomMeri)
- [#2763](https://github.com/less/less.js/pull/2763) Added "or" keyword and allowed arbitrary logical expression in guards. (@SomMeri)
- [#2731](https://github.com/less/less.js/pull/2731) Faster builds and update npm versions to test against (@paladox)
- [#2759](https://github.com/less/less.js/pull/2759) Fixed extend leaking through nested parent selector. (@SomMeri)
- [#2738](https://github.com/less/less.js/pull/2738) Fail when image-size functions are used in browser-less. (@niom)
- [#2485](https://github.com/less/less.js/pull/2485) Allow underscore in a dimension unit (@seven-phases-max)
- [#2729](https://github.com/less/less.js/pull/2729) Fixing import by reference (@SomMeri)
### v2.5.2 (2015-09-24)
- [#2609](https://github.com/less/less.js/pull/2609) Skip missing optional imports (@mmelvin0)
- [#2644](https://github.com/less/less.js/pull/2644) `percentage` function should throw error if result would be `NaN` (@SomMeri)
- [#2646](https://github.com/less/less.js/pull/2646) Parametric mixins: parameters don't match error (@SomMeri)
- [#2688](https://github.com/less/less.js/pull/2688) Converted CLRFs in error tests (@mishal)
- [#2687](https://github.com/less/less.js/pull/2687) Updated test data files (@mishal)
- [#2642](https://github.com/less/less.js/pull/2642) Fixes import by reference inlines source's inline imports - 2620 (@SomMeri)
- [#2643](https://github.com/less/less.js/pull/2643) Keep shorthand color form the same way as named colors are kept. (@SomMeri)
- [#2677](https://github.com/less/less.js/pull/2677) Reference inline comments. (@betaorbust)
- [#2685](https://github.com/less/less.js/pull/2685) Update travis Node.js version & remove io.js (@demohi)
- [#2637](https://github.com/less/less.js/pull/2637) Undefined source map should result in an empty map file. (@SomMeri)
- [#2607](https://github.com/less/less.js/pull/2607) Remove moot `version` property from bower.json (@kkirsche)
### v2.5.1 (2015-05-21)
- [#2591](https://github.com/less/less.js/pull/2591) Update license attribute (@pdehaan)
- [#2575](https://github.com/less/less.js/pull/2575) Fix synchronously loading/applying stylesheets on page load. (@chipx86)
- [#2568](https://github.com/less/less.js/pull/2568) Add a Gitter chat badge to README.md (@gitter-badger)
- [#2559](https://github.com/less/less.js/pull/2559) Fix for #2558 (@seven-phases-max)
- [#2574](https://github.com/less/less.js/pull/2574) Fix `Ruleset.prototype.find` failing for certain frames (@seven-phases-max)
- [#2550](https://github.com/less/less.js/pull/2550) Update CHANGELOG.md (@chharvey)
### v2.5.0 (2015-04-03)
- [#2530](https://github.com/less/less.js/pull/2530) Proper non-primitive value replacement for `%` and `replace` (@seven-phases-max)
- [#2526](https://github.com/less/less.js/pull/2526) Image size (@bassjobsen)
- [#2533](https://github.com/less/less.js/pull/2533) Fix formatting to meet jscs settings (@seven-phases-max)
- [#2525](https://github.com/less/less.js/pull/2525) Add browser field (@whitecolor)
- [#2522](https://github.com/less/less.js/pull/2522) Fix `@plugin` scoping rules (@rjgotten)
- [#2527](https://github.com/less/less.js/pull/2527) Fix grunt shell:benchmark command (@seven-phases-max)
- [#2520](https://github.com/less/less.js/pull/2520) Fix 2440 (@lukeapage)
- [#2517](https://github.com/less/less.js/pull/2517) Quick fix for naked `url` imports (@seven-phases-max, @wahuneke, @bassjobsen)
- [#2515](https://github.com/less/less.js/pull/2515) re: #2508 - revert #2510 - undo all fixes. issue == WONTFIX (@wahuneke)
- [#2504](https://github.com/less/less.js/pull/2504) optional relative amounts for color functions, see#975 (@bassjobsen)
- [#2512](https://github.com/less/less.js/pull/2512) Fix selectors folding into directives (@rjgotten)
- [#2510](https://github.com/less/less.js/pull/2510) Fix issue 2508 (@wahuneke)
- [#2505](https://github.com/less/less.js/pull/2505) fix for issue #2500 (@bassjobsen)
- [#2479](https://github.com/less/less.js/pull/2479) Import plugin (@rjgotten, @bassjobsen)
- [#2497](https://github.com/less/less.js/pull/2497) Allow detached rulesets as mixin argument defaults (@calvinjuarez)
- [#2488](https://github.com/less/less.js/pull/2488) add jit-grunt to the build chain (@bassjobsen)
- [#2489](https://github.com/less/less.js/pull/2489) add browser postProcessor Plugin test (@bassjobsen)
- [#2473](https://github.com/less/less.js/pull/2473) Bubbling of nested directives (@SomMeri)
- [#2445](https://github.com/less/less.js/pull/2445) allow a list of colors as argument for the svg-gradient function (@bassjobsen)
### v2.4.0 (2015-02-08)
- [#2439](https://github.com/less/less.js/pull/2439) Fix empty sourcemaps (@OhJeez)
- [#2429](https://github.com/less/less.js/pull/2429) Implementing preprocessing plugins (@Justineo, @lukeapage)
- [#2427](https://github.com/less/less.js/pull/2427) Nested mixin changing important 2421 (@SomMeri)
- [#2423](https://github.com/less/less.js/pull/2423) Bug: extend doesn't work when appended on nested selector with & (@SomMeri)
- [#2420](https://github.com/less/less.js/pull/2420) endlines and comments (@bassjobsen)
### v2.3.1 (2015-01-28)
- [#2400](https://github.com/less/less.js/pull/2400) Nested parent selectors &:not(&) - 2026 (@SomMeri)
### v2.3.0 (2015-01-27)
- [#2401](https://github.com/less/less.js/pull/2401) Allow selector interpolation inside pseudoselectors. #1294 (@SomMeri)
- [#2404](https://github.com/less/less.js/pull/2404) Important on parametrized mixin (@SomMeri)
- [#2414](https://github.com/less/less.js/pull/2414) explain inline maps (@bassjobsen)
- [#2392](https://github.com/less/less.js/pull/2392) add support for `isruleset` (@Justineo)
- [#2390](https://github.com/less/less.js/pull/2390) message when sourcemap has been written (@bassjobsen)
- [#2391](https://github.com/less/less.js/pull/2391) Remove BOM in imports. (@DotNetSparky)
- [#2387](https://github.com/less/less.js/pull/2387) Data uri support for include-path (@lukeapage)
- [#2385](https://github.com/less/less.js/pull/2385) checking for doubles when warning for empty extends (@ddprrt)
- [#2380](https://github.com/less/less.js/pull/2380) Colour keyword as variable name reference (@seven-phases-max)
- [#2369](https://github.com/less/less.js/pull/2369) making sure :extend warning does not bubble up, fixes #1618 (@ddprrt)
### v2.2.0 (2015-01-04)
- [#2363](https://github.com/less/less.js/pull/2363) Change error message when caching fails (@bassjobsen)
- [#2337](https://github.com/less/less.js/pull/2337) Better output for the warning when file size exceeds (@bassjobsen)
- [#2319](https://github.com/less/less.js/pull/2319) Expose Less parsing as a top level feature of the less package (@jackwanders)
### v2.1.2 (2014-12-20)
- [#2315](https://github.com/less/less.js/pull/2315) Support non-JSON script attributes (@guybedford)
- [#2313](https://github.com/less/less.js/pull/2313) Remove second 'env:' in .travis.yml. (@vsn4ik)
### v2.1.1 (2014-11-27)
- [#2312](https://github.com/less/less.js/pull/2312) Fix double handling of exceptions (@ForbesLindesay)
- [#2311](https://github.com/less/less.js/pull/2311) Pass this from promise based calling (@ForbesLindesay)
- [#2309](https://github.com/less/less.js/pull/2309) Improve keyword and anonymous input for replace function (fixes #2308). (@seven-phases-max)
### v2.1.0 (2014-11-23)
- [#2298](https://github.com/less/less.js/pull/2298) Small improve in README.md and bower.json. (@vsn4ik)
- [#2297](https://github.com/less/less.js/pull/2297) Package: Updates request to 2.48.0 (@am11)
- [#2296](https://github.com/less/less.js/pull/2296) Fix getting of character at index (@Taritsyn)
- [#2279](https://github.com/less/less.js/pull/2279) Remove livereload cache buster param in extractId (@cgross)
### v2.0.0 (2014-11-09)
- [#2277](https://github.com/less/less.js/pull/2277) create index and browser scripts in root as require targets (@jackwanders, @lukeapage, @seven-phases-max, @Justineo, @lejenome)
- [#2269](https://github.com/less/less.js/pull/2269) Fix for wrong check in abstractFileManager.getPath (@dexif, @lukeapage, @seven-phases-max, @Justineo, @lejenome)
- [#2267](https://github.com/less/less.js/pull/2267) CLI: Fixes source-map-url description (#2264) (@am11)
- [#2268](https://github.com/less/less.js/pull/2268) typo fixes (@vlajos)
- [#2264](https://github.com/less/less.js/pull/2264) CLI: Fixes source-map-url description. (#2264) (@am11)
### v2.0.0-b3 (2014-11-01)
- [#2254](https://github.com/less/less.js/pull/2254) Fix for import relative path for url with parameters (@dexif)
### v2.0.0-b2 (2014-10-26)
- [#2246](https://github.com/less/less.js/pull/2246) Attempt to fix import sequencing (@lukeapage)
- [#2247](https://github.com/less/less.js/pull/2247) Add support for rebeccapurple (#663399) (@le717)
- [#663399](https://github.com/less/less.js/pull/663399) Add rebeccapurple (#663399) (Triangle717)
- [#2243](https://github.com/less/less.js/pull/2243) Support reading less options from its script tag data attributes (@lejenome)
- [#2241](https://github.com/less/less.js/pull/2241) Update CHANGELOG.md (@Justineo)
### v2.0.0-b1 (2014-10-19)
- [#1902](https://github.com/less/less.js/pull/1902) 2.0.0 Pull Request (@lukeapage, @seven-phases-max, @XhmikosR, @levithomason)
- [#2233](https://github.com/less/less.js/pull/2233) Method to scan for and register stylesheets (@levithomason)
- [#2226](https://github.com/less/less.js/pull/2226) Notify when less.js is done processing (@levithomason)
- [#2209](https://github.com/less/less.js/pull/2209) Remove unnecessary semicolon (@joscha)
- [#2217](https://github.com/less/less.js/pull/2217) Fix interpolated selector match regression (@seven-phases-max)
- [#2185](https://github.com/less/less.js/pull/2185) Use SVGs for all readme badges (@theodorejb)
- [#2182](https://github.com/less/less.js/pull/2182) Fixes #1973 (@seven-phases-max)
- [#2181](https://github.com/less/less.js/pull/2181) Case insensitive units parsing and comparison (@lukeapage)
### v1.7.5 (2014-09-03)
- [#2173](https://github.com/less/less.js/pull/2173) Property interpolation fix for `@*` values (@seven-phases-max)
- [#2169](https://github.com/less/less.js/pull/2169) Accept comments in @keyframe and after rule name - merging for next patch release. (@SomMeri)
- [#1921](https://github.com/less/less.js/pull/1921) Pass options object to parser.parse in less.render (@rback)
- [#2136](https://github.com/less/less.js/pull/2136) Fragment handling in data-uri function 1959 (@SomMeri)
- [#2135](https://github.com/less/less.js/pull/2135) Charsets should float on top #2126 (@SomMeri)
- [#2128](https://github.com/less/less.js/pull/2128) Mixin wrongly called (@SomMeri, @obecker, @dhaber)
- [#2144](https://github.com/less/less.js/pull/2144) Updating request dependency (@pdehaan)
- [#2123](https://github.com/less/less.js/pull/2123) Import into media 1645 (@SomMeri, @obecker, @dhaber)
### v1.7.4 (2014-07-27)
- [#2100](https://github.com/less/less.js/pull/2100) Update bower for 1.7.3 (@joscha)
- [#2121](https://github.com/less/less.js/pull/2121) Properties merging should work also inside directives #2035 (@SomMeri)
- [#2120](https://github.com/less/less.js/pull/2120) Misleading error message 2069 (@SomMeri, @obecker, @dhaber)
- [#2117](https://github.com/less/less.js/pull/2117) Fix ordering of @import and @charset rules #1954 #2013 (@SomMeri)
### v1.7.3 (2014-06-22)
- [#2062](https://github.com/less/less.js/pull/2062) Don't round values returned by colour query functions. (@seven-phases-max)
### v1.7.2 (2014-06-22)
- [#2045](https://github.com/less/less.js/pull/2045) Base64 encode source maps (@tim-smart)
### v1.7.1 (2014-06-08)
- [#2022](https://github.com/less/less.js/pull/2022) 2.0.0 refactor chunker and less error (@ForbesLindesay)
- [#2021](https://github.com/less/less.js/pull/2021) 2.0.0 promises (@ForbesLindesay)
- [#1976](https://github.com/less/less.js/pull/1976) Added condition to check if HEX code contain only valid characters (issue #1015) (@peruginni)
- [#2019](https://github.com/less/less.js/pull/2019) Remove the "done" message displayed at the end of the compilation with Rhino. (@gdelhumeau)
- [#2031](https://github.com/less/less.js/pull/2031) Fix a bug: if the less file end line is comments, the lessc command option "modify-var" will have no effect. (@chenboxiang)
- [#2046](https://github.com/less/less.js/pull/2046) window.ActiveXObject in IE11: fix boolean casting (@dkrnl)
- [#2016](https://github.com/less/less.js/pull/2016) e("") fix (@seven-phases-max)
- [#2000](https://github.com/less/less.js/pull/2000) Set CSS text after style element is added to DOM, to fix crash on IE < 9... (@David-Hari)
- [#2002](https://github.com/less/less.js/pull/2002) Fixes #2001 (@seven-phases-max)
- [#1981](https://github.com/less/less.js/pull/1981) fix bug with ../.. paths joining (@kolipka)
- [#1974](https://github.com/less/less.js/pull/1974) Change paths determination for CLI (@dominicbarnes)
- [#1929](https://github.com/less/less.js/pull/1929) Recursive mixin calls regression fix. (@seven-phases-max)
- [#1936](https://github.com/less/less.js/pull/1936) Fix error message when using cleancss with sourcemap (@danielchatfield)
- [#1919](https://github.com/less/less.js/pull/1919) Usage info for url-args option (@bcluca)
- [#1907](https://github.com/less/less.js/pull/1907) Remove trailing spaces from the license header. (@XhmikosR)
- [#1906](https://github.com/less/less.js/pull/1906) Remove twitter-bootstrap tag from SO link (@zlatanvasovic)
### v1.7.0 (2014-02-27)
- [#1890](https://github.com/less/less.js/pull/1890) Let `luma` follow spec (@seven-phases-max, @lukeapage)
- [#1859](https://github.com/less/less.js/pull/1859) detached rulesets (@lukeapage)
- [#1884](https://github.com/less/less.js/pull/1884) Minor `replace` and `%` funcs improvement. (@seven-phases-max)
- [#1855](https://github.com/less/less.js/pull/1855) Adding replace function (@jakebellacera, @mouyang)
- [#1866](https://github.com/less/less.js/pull/1866) Fixed empty args matching for named variadics. (@seven-phases-max)
- [#1860](https://github.com/less/less.js/pull/1860) Support for variables in certain at-rules. (@seven-phases-max)
- [#1847](https://github.com/less/less.js/pull/1847) Property merge with `+_` (replaces #1788) (@seven-phases-max, @mouyang)
### v1.6.3 (2014-02-08)
- [#1844](https://github.com/less/less.js/pull/1844) fix broken test case (@mouyang)
### v1.6.2 (2014-02-02)
- [#1841](https://github.com/less/less.js/pull/1841) Improved missing `(` and `{` error detection. (@seven-phases-max)
- [#1828](https://github.com/less/less.js/pull/1828) Updates bower.json for current version (@ruyadorno)
- [#1823](https://github.com/less/less.js/pull/1823) Improved multiple `default()` guards conflict detection. (@seven-phases-max)
- [#1822](https://github.com/less/less.js/pull/1822) Normalize require-calls for Browserify (@pateketrueke)
- [#1814](https://github.com/less/less.js/pull/1814) Rounding of output numbers. (@seven-phases-max)
- [#1806](https://github.com/less/less.js/pull/1806) rhino version not up to date (#1405) (@obecker, @dhaber)
- [#1815](https://github.com/less/less.js/pull/1815) Correct arguments for tree.Element (@oyejorge)
- [#16](https://github.com/less/less.js/pull/16) Don't lint source-map since its owned by another project (@dhaber)
- [#17](https://github.com/less/less.js/pull/17) Fix empty test (@dhaber)
- [#1803](https://github.com/less/less.js/pull/1803) ability to insert uppercase color names (@wareczek)
- [#1804](https://github.com/less/less.js/pull/1804) small compatibility fix for prototype.js (@cettox)
- [#13](https://github.com/less/less.js/pull/13) Add Support-Map Tests for Rhino (@dhaber)
- [#12](https://github.com/less/less.js/pull/12) Fix for some tests that were failing on my Mac (@dhaber)
- [#11](https://github.com/less/less.js/pull/11) Fix for issue #3: Tests should automatically take latest rhino file (@dhaber)
### v1.6.1 (2014-01-12)
- [#1780](https://github.com/less/less.js/pull/1780) #1778 standardised using starting index, to fix incorrectly mapped sourcemaps (@brenmar)
- [#1797](https://github.com/less/less.js/pull/1797) Updated .jshintrc to highlight for ... in without isOwnProperty (@DHainzl)
- [#1795](https://github.com/less/less.js/pull/1795) Fix for running test cases in a regular browser like Firefox or Chrome (@dhaber)
- [#1773](https://github.com/less/less.js/pull/1773) Fixes "function" test against regular expressions (@matthew-dean)
### v1.6.0 (2014-01-01)
- [#1737](https://github.com/less/less.js/pull/1737) Clamped rgba format color output (@seven-phases-max)
- [#1769](https://github.com/less/less.js/pull/1769) If result of evaluated javascript is a number return it as Dimension. (@lesswtf)
- [#1766](https://github.com/less/less.js/pull/1766) Improved error message for undefined variable in js eval statement. (@seven-phases-max)
- [#1758](https://github.com/less/less.js/pull/1758) Removed redundant code from tree.Selector.match() (@seven-phases-max)
- [#1757](https://github.com/less/less.js/pull/1757) Tree functions cleanup + CSS Guards `default` error. (@seven-phases-max)
- [#1624](https://github.com/less/less.js/pull/1624) Experimental support for mixins with interpolated selectors (@seven-phases-max)
- [#1743](https://github.com/less/less.js/pull/1743) Interleaved property merge fix (@seven-phases-max)
- [#1744](https://github.com/less/less.js/pull/1744) Fix CHANGELOG broken link in README. (@jeffslofish)
- [#1733](https://github.com/less/less.js/pull/1733) Remove alpha from contrast calc (@Synchro)
- [#1704](https://github.com/less/less.js/pull/1704) Color blending functions with transparency. (@seven-phases-max)
- [#1708](https://github.com/less/less.js/pull/1708) Updated Readme for full examples (@SomMeri, @Synchro)
- [#1717](https://github.com/less/less.js/pull/1717) Minifier complains about annotation in non-JSDoc tag (@joscha)
- [#1714](https://github.com/less/less.js/pull/1714) Fix for math expr/ops error messages line/column numbers. (@seven-phases-max)
### v1.5.1 (2013-11-17)
- [#1658](https://github.com/less/less.js/pull/1658) Fixes #1619 (@joshuaspence)
- [#1643](https://github.com/less/less.js/pull/1643) Check location.port for truthiness (@matthewp)
- [#1655](https://github.com/less/less.js/pull/1655) Support specifying custom variables when calling lessc and less.js. (@chipx86)
- [#1628](https://github.com/less/less.js/pull/1628) update bower.json main script (@tomfuertes)
### v1.5.0 (2013-10-21)
- [#1570](https://github.com/less/less.js/pull/1570) proposed solution to #1568: percentage as attribute (@MSamman, @danielfttorres)
- [#1572](https://github.com/less/less.js/pull/1572) util.error is deprecated (@robocoder)
- [#1542](https://github.com/less/less.js/pull/1542) Added `length` function (#1542). Added scalar value handling for `extract` and `length` (#1576). (@seven-phases-max)
- [#1558](https://github.com/less/less.js/pull/1558) Bower package: purge unnecessary files (@danielfttorres)
### v1.5.0-b3 (2013-09-17)
- [#1552](https://github.com/less/less.js/pull/1552) Replace deprecated sys.puts with console.log, resolve #1529 (@picomancer)
- [#1543](https://github.com/less/less.js/pull/1543) Sourcemap basepath option (@andjo)
- [#1412](https://github.com/less/less.js/pull/1412) Allow imports from self-signed SSL hosts (@christopherobin)
### v1.5.0-b2 (2013-09-09)
- [#1537](https://github.com/less/less.js/pull/1537) Fix Changelog link (@radium-v)
### v1.5.0-b1 (2013-09-03)
- [#1519](https://github.com/less/less.js/pull/1519) Update main property value of bower.json (@JacopKane)
- [#1](https://github.com/less/less.js/pull/1) Refactoring browser unit tests into grunt-contrib-jasmine (@SomMeri)
- [#1449](https://github.com/less/less.js/pull/1449) resolves #964 (@jonschlinkert)
### v1.4.2 (2013-07-20)
- [#1425](https://github.com/less/less.js/pull/1425) Windows path fixes (@SLaks)
- [#1388](https://github.com/less/less.js/pull/1388) Add .gitattributes to .npmignore (@dpatti)
### v1.4.0-b3 (2013-04-30)
- [#1278](https://github.com/less/less.js/pull/1278) Better fix for local path (cross-platform) (@losnir)
- [#1277](https://github.com/less/less.js/pull/1277) contributing.md updates. Fellow nerds! please wrap words with `@` signs in backticks! (@jonschlinkert)
- [#1273](https://github.com/less/less.js/pull/1273) Fix for local paths (@losnir)
- [#1244](https://github.com/less/less.js/pull/1244) Add Less license to package.json (@theoreticaLee)
- [#1236](https://github.com/less/less.js/pull/1236) Fixes small typo in command prompt usage text (@buley)
### v1.4.0-b2 (2013-03-18)
- [#1230](https://github.com/less/less.js/pull/1230) package.json edited (@jonschlinkert)
### v1.4.0-b1 (2013-03-08)
- [#1197](https://github.com/less/less.js/pull/1197) Updates copyright year in README.md (@Starefossen)
- [#1148](https://github.com/less/less.js/pull/1148) Better implementation of luma (@Synchro)
- [#1147](https://github.com/less/less.js/pull/1147) HSV support for #1143 (@Synchro)
- [#1145](https://github.com/less/less.js/pull/1145) Contrast percentage fix for #1144 (@Synchro)
- [#933](https://github.com/less/less.js/pull/933) Allow flexible naming for amd support (#933) (@guybedford)
### v1.3.1 (2012-10-18)
- [#889](https://github.com/less/less.js/pull/889) Add dppx and dpcm units to parser dimensions (@feelepxyz)
- [#890](https://github.com/less/less.js/pull/890) Add vmin unit to parser dimensions (@feelepxyz)
- [#879](https://github.com/less/less.js/pull/879) Allow numbers and underscores in attribute selectors (@dmcass)
- [#857](https://github.com/less/less.js/pull/857) Revert adding "transparent" as a color name (@clmsnskr)
- [#753](https://github.com/less/less.js/pull/753) Adding "dpi" as a valid dimensions for media queries (@clarkni5)
- [#800](https://github.com/less/less.js/pull/800) Added 'transparent' as a named color (@SpadarShut)
- [#804](https://github.com/less/less.js/pull/804) Fix for unnamed parameters test fail & failing test for import-once (@jreading)
- [#796](https://github.com/less/less.js/pull/796) fixed issue #795 (@comfuture)
- [#268](https://github.com/less/less.js/pull/268) Implemented named arguments (@jamesfoster)
### v1.3.0 (2012-03-10)
- [#673](https://github.com/less/less.js/pull/673) mocha found a couple global variable leaks. Here's the fix. (@andrewjstone)
- [#634](https://github.com/less/less.js/pull/634) Add @media bubbling/nesting/merging (@NDMarcel)
- [#631](https://github.com/less/less.js/pull/631) Fixed spelling error on benchmark/less-benchmark.js (@highergroundstudio)
- [#601](https://github.com/less/less.js/pull/601) Make parse error handler more robust (@adrianheine)
- [#595](https://github.com/less/less.js/pull/595) Fix callback called two times (@hokaccha, @cloudhead, @chrizel, @fat)
- [#604](https://github.com/less/less.js/pull/604) Fixes #602 (@treshugart)
- [#585](https://github.com/less/less.js/pull/585) newline all selectors whose combined length is greater than 25 chars (@fat)
- [#479](https://github.com/less/less.js/pull/479) CommonJS/AMD module support (@tobias104)
- [#516](https://github.com/less/less.js/pull/516) Improve Windows path support in lessc (@chrizel)
- [#557](https://github.com/less/less.js/pull/557) Fix for issue #466 (@kmchugh)
- [#515](https://github.com/less/less.js/pull/515) Shift the type setting in order to work with Webkit, and fix typo for IE (@imcotton)
- [#527](https://github.com/less/less.js/pull/527) Add function `percentage` (@hokaccha)
### 1.1.5-extend_patch (2011-12-13)
- [#496](https://github.com/less/less.js/pull/496) Removed call to put header into minified build, because it's already there. (@freeeve)
- [#379](https://github.com/less/less.js/pull/379) Accept 2xx statuses even for file requests (@khalsah)
- [#494](https://github.com/less/less.js/pull/494) Adding support for absolute paths on Windows. (@jmcclell)
- [#514](https://github.com/less/less.js/pull/514) Fix java.io.FileNotFoundException when @importing from LESS in subdirectory (@eager)
- [#461](https://github.com/less/less.js/pull/461) require 'util' instead of 'sys' in lessc and less-benchmark.js (@dmcass)
- [#506](https://github.com/less/less.js/pull/506) Issue #393 Add support for "rem" dimensions (@feelepxyz)
- [#507](https://github.com/less/less.js/pull/507) Fixed lessc require('sys') for nodejs 0.6.* (@garth)
- [#492](https://github.com/less/less.js/pull/492) fix comments in operations (ex: *height: 2px * 4 /* ie hack */) (@fat)
- [#458](https://github.com/less/less.js/pull/458) Assignment entities (@fat, @cloudhead, @asolove)
### 1.1.4-lastest (2011-11-14)
- [#445](https://github.com/less/less.js/pull/445) fix undefined reference (@asolove)
- [#450](https://github.com/less/less.js/pull/450) store index on selector element objects for line number inference (@fat)
- [#432](https://github.com/less/less.js/pull/432) #361: Fix for quoted data URIs getting prepended with path (@asolove)
- [#388](https://github.com/less/less.js/pull/388) Rhino support (@erwan)
- [#355](https://github.com/less/less.js/pull/355) support imports with querystrings (google fonts) fix #265 (@revolunet)
- [#340](https://github.com/less/less.js/pull/340) Read less-content from stdin (@snorkypie)
- [#341](https://github.com/less/less.js/pull/341) patch for Issue 322 (@ttfkam)
- [#335](https://github.com/less/less.js/pull/335) update ARGB support, fix IE9 style injection (@ttfkam)
- [#229](https://github.com/less/less.js/pull/229) add fade() function (@bennyschudel)
- [#347](https://github.com/less/less.js/pull/347) support @-moz-keyframes. (@idris)
- [#169](https://github.com/less/less.js/pull/169) (fix) including .less files via absolute path with IE7 (@ldaley)
- [#189](https://github.com/less/less.js/pull/189) Google Chrome(Chromium) support for extensions (@dz0ny)
- [#247](https://github.com/less/less.js/pull/247) New "escape" function (@gilt)
- [#134](https://github.com/less/less.js/pull/134) Fixed issue (#134) where subfiles' @imports were regarding #, ? and url portions thereafter as part of the base url. (@dbergey)
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Less.js
Thank you for your interest in contributing to Less.js! Contributions come in many forms—fixing bugs, improving code quality, enhancing tooling, updating documentation, and occasionally adding new features. This guide will help you get started.
## Getting Started
Before you begin, please note: **Words that begin with the at sign (`@`) must be wrapped in backticks!** This prevents unintended notifications to GitHub users. For example, use `` `@username` `` instead of `@username`.
GitHub has many great markdown features—[learn more about them here](https://help.github.com/articles/github-flavored-markdown).
## Reporting Issues
We welcome bug reports and feature requests! To help us help you, please follow these guidelines:
1. **Search for existing issues first.** Many issues have already been reported or resolved. Checking first saves everyone time.
2. **Create an isolated and reproducible test case.** Include [reduced test cases](http://css-tricks.com/reduced-test-cases/) that demonstrate the problem clearly.
3. **Test with the latest version.** Many issues are resolved in newer versions—please update first.
4. **Include examples with source code.** You can use [Less Preview](http://lesscss.org/less-preview/) to create a short test case.
5. **Share as much information as possible.** Include:
- Operating system and version
- How you're using Less (browser, command line, build tool, etc.)
- Browser and version (if applicable)
- Version of Less.js you're using
- Clear steps to reproduce the issue
6. **Suggest solutions if you have them.** If you know how to fix it, share your approach or submit a pull request!
Please report documentation issues in [the documentation project](https://github.com/less/less-docs).
## Feature Requests
When suggesting features:
* **Search existing feature requests first** to see if something similar already exists. Many features are already planned or under consideration.
* **Include a clear and specific use-case.** Help us understand the practical need and how it would be used.
* **Consider alternatives.** Sometimes a function or a 3rd-party build system might be a better fit than a core language feature.
**Note:** Most helpful contributions to Less.js are organizational—addressing bugs, improving code quality, enhancing tooling, and updating documentation. The language features are generally stable, even if not all planned features have been implemented yet.
## Pull Requests
Pull requests are welcome! Here's how to make them go smoothly:
* **For new features, start with a feature request** to get feedback and see how your idea is received.
* **If your PR solves an existing issue**, but approaches it differently, please create a new issue first and discuss it with core contributors. This helps avoid wasted effort.
* The `dist/` folder is gitignored—builds happen automatically during releases.
* **Please add tests** for your work. Run tests using `pnpm test`, which runs both Node.js and browser (Headless Chrome) tests.
### Coding Standards
* Always use spaces, never tabs
* End lines with semicolons
* Aim for ESLint standards
## Developing
If you want to work on an issue, add a comment saying you're taking it on—this helps prevent duplicate work.
Learn more about [developing Less.js](http://lesscss.org/usage/#developing-less).
## Releases
Releases are fully automated! Here's how it works:
### Automated Publishing
When code is pushed to specific branches, GitHub Actions automatically:
1. **Runs tests and builds** the project
2. **Bumps the version** automatically
3. **Publishes to npm** with the appropriate tag
4. **Creates a GitHub release**
### Release Branches
- **`master` branch**:
- Publishes regular releases (e.g., `4.4.2` → `4.4.3`)
- Published to npm with `latest` tag
- Creates regular GitHub releases
- Version auto-increments by patch unless explicitly set
- **`alpha` branch**:
- Publishes alpha releases (e.g., `5.0.0-alpha.1` → `5.0.0-alpha.2`)
- Published to npm with `alpha` tag
- Creates GitHub pre-releases
- Version auto-increments alpha suffix
### How to Publish
**For patch releases (automatic):**
1. Merge your PR into `master`
2. The workflow compares `package.json` against the latest npm version
3. If `package.json` is ahead, it uses that version; otherwise it bumps to the next patch
4. Publishes to npm and creates a GitHub release with `less.js` and `less.min.js` attached
**For minor/major releases:**
1. Create a release branch (e.g., `release/v4.7.0`)
2. Update `version` in all `package.json` files and update `CHANGELOG.md`
3. Merge into `master`
4. The workflow detects the version is ahead of npm and publishes it directly
**For alpha releases:**
1. Make your changes on the `alpha` branch
2. Commit and push
3. The workflow automatically increments the alpha version and publishes
### Version Override
To force a specific version (useful for CI or manual runs), set the `EXPLICIT_VERSION` environment variable:
```bash
EXPLICIT_VERSION=4.7.0 pnpm run publish
```
### Release Assets
Each GitHub release automatically includes:
- `less.js` — the full browser build
- `less.min.js` — the minified browser build
These are built during the workflow and attached to the release. They are not committed to git (the `dist/` directory is gitignored).
### Security
We use npm's [trusted publishing](https://docs.npmjs.com/trusted-publishers) with OIDC authentication. This means:
- No long-lived tokens needed
- Automatic provenance generation
- Enhanced security through short-lived, workflow-specific credentials
The publishing workflow (`.github/workflows/publish.yml`) handles both release types automatically.
### Important Notes
- Publishing only works from `master` or `alpha` branches
- Alpha versions must contain `-alpha.` and are published to the `alpha` tag
- Regular versions are published to the `latest` tag
- Alpha branch must be up-to-date with master before publishing
- Alpha base version must be >= master version (semver)
### Merging Master into Alpha
When merging `master` into `alpha`, the version in `package.json` might be overwritten. We have two layers of protection:
1. **Post-merge git hook** (automatic): Automatically restores alpha versions after merges
- Installed automatically via husky when you run `pnpm install`
- Runs automatically after `git merge`
- Restores and increments the alpha version if it was overwritten
- Prompts you to commit the restored version
2. **Publishing script detection** (safety net): The publishing script also detects overwritten versions
- Searches git history for the last alpha version
- Restores and increments it (e.g., if it was `5.0.0-alpha.3`, it becomes `5.0.0-alpha.4`)
- Updates all package.json files accordingly
**Note**: The git hook is managed by husky and installs automatically. The publishing script protection works as a backup even if the hook isn't installed.
---
Thank you for contributing to Less.js!
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
================================================
FILE: README.md
================================================
<p align="center"><img src="http://lesscss.org/public/img/less_logo.png" width="264" height="117"></p>
<p align="center">
<a href="https://github.com/less/less.js/actions?query=branch%3Amaster"><img src="https://github.com/less/less.js/actions/workflows/ci.yml/badge.svg?branch=master" alt="Github Actions CI"/></a>
<a href="https://www.npmtrends.com/less"><img src="https://img.shields.io/npm/dm/less.svg?sanitize=true" alt="Downloads"></a>
<a href="https://www.npmjs.com/package/less"><img src="https://img.shields.io/npm/v/less.svg?sanitize=true" /></a>
<a href="https://twitter.com/lesstocss"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/lesstocss.svg?style=flat-square" style="max-width:100%;" /></a>
</p>
This is the Less.js monorepo.
## More information
For general information on the language, configuration options or usage visit [lesscss.org](http://lesscss.org).
Here are other resources for using Less.js:
* [stackoverflow.com][so] is a great place to get answers about Less.
* [Less.js Issues][issues] for reporting bugs
## Contributing
Please read [CONTRIBUTING.md](CONTRIBUTING.md). Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com).
### Reporting Issues
Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas). After that if you find a bug or would like to make feature request, [please open a new issue][issues].
Please report documentation issues in [the documentation project](https://github.com/less/less-docs).
### Development
Read [Developing Less](http://lesscss.org/usage/#developing-less).
## Release History
See the [changelog](CHANGELOG.md)
## Contributors
This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
<a href="https://github.com/less/less.js/graphs/contributors"><img src="https://opencollective.com/less/contributors.svg?width=890&button=false" /></a>
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/matthew-dean"><img src="https://avatars.githubusercontent.com/u/414752?v=4?s=100" width="100px;" alt="Matthew Dean"/><br /><sub><b>Matthew Dean</b></sub></a><br /><a href="https://github.com/The Less CSS Team/Less.js/commits?author=matthew-dean" title="Code">💻</a> <a href="https://github.com/The Less CSS Team/Less.js/commits?author=matthew-dean" title="Documentation">📖</a> <a href="#maintenance-matthew-dean" title="Maintenance">🚧</a> <a href="#projectManagement-matthew-dean" title="Project Management">📆</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://cloudhead.io/"><img src="https://avatars.githubusercontent.com/u/40774?v=4?s=100" width="100px;" alt="Alexis Sellier"/><br /><sub><b>Alexis Sellier</b></sub></a><br /><a href="https://github.com/The Less CSS Team/Less.js/commits?author=cloudhead" title="Code">💻</a> <a href="https://github.com/The Less CSS Team/Less.js/commits?author=cloudhead" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/lukeapage"><img src="https://avatars.githubusercontent.com/u/309321?v=4?s=100" width="100px;" alt="Luke Page"/><br /><sub><b>Luke Page</b></sub></a><br /><a href="https://github.com/The Less CSS Team/Less.js/commits?author=lukeapage" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/seven-phases-max"><img src="https://avatars.githubusercontent.com/u/5304376?v=4?s=100" width="100px;" alt="Max Mikhailov"/><br /><sub><b>Max Mikhailov</b></sub></a><br /><a href="https://github.com/The Less CSS Team/Less.js/commits?author=seven-phases-max" title="Code">💻</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/iChenLei"><img src="https://avatars.githubusercontent.com/u/14012511?v=4?s=100" width="100px;" alt="Lei Chen"/><br /><sub><b>Lei Chen</b></sub></a><br /><a href="https://github.com/The Less CSS Team/Less.js/commits?author=iChenLei" title="Code">💻</a> <a href="https://github.com/The Less CSS Team/Less.js/issues?q=author%3AiChenLei" title="Bug reports">🐛</a> <a href="https://github.com/The Less CSS Team/Less.js/commits?author=iChenLei" title="Documentation">📖</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/puckowski"><img src="https://avatars.githubusercontent.com/u/3059609?v=4?s=100" width="100px;" alt="Daniel Puckowski"/><br /><sub><b>Daniel Puckowski</b></sub></a><br /><a href="https://github.com/The Less CSS Team/Less.js/commits?author=puckowski" title="Code">💻</a> <a href="https://github.com/The Less CSS Team/Less.js/issues?q=author%3Apuckowski" title="Bug reports">🐛</a></td>
</tr>
</tbody>
<tfoot>
<tr>
<td align="center" size="13px" colspan="7">
<img src="https://raw.githubusercontent.com/all-contributors/all-contributors-cli/1b8533af435da9854653492b1327a23a4dbd0a10/assets/logo-small.svg">
<a href="https://all-contributors.js.org/docs/en/bot/usage">Add your contributions</a>
</img>
</td>
</tr>
</tfoot>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
## [License](LICENSE)
Copyright (c) 2009-2025 [Alexis Sellier](http://cloudhead.io) & The Core Less Team
Licensed under the [Apache License](LICENSE).
[so]: http://stackoverflow.com/questions/tagged/less "StackOverflow.com"
[issues]: https://github.com/less/less.js/issues "GitHub Issues for Less.js"
[download]: https://github.com/less/less.js/zipball/master "Download Less.js"
================================================
FILE: package-lock.json
================================================
{
"name": "@less/root",
"version": "4.6.3",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@less/root",
"version": "4.6.3",
"hasInstallScript": true,
"license": "Apache-2.0",
"devDependencies": {
"all-contributors-cli": "~6.26.1",
"github-changes": "^1.1.2",
"husky": "~9.1.7",
"npm-run-all": "^4.1.5",
"playwright": "1.50.1",
"semver": "^6.3.1"
}
},
"node_modules/@babel/runtime": {
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
"integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/all-contributors-cli": {
"version": "6.26.1",
"resolved": "https://registry.npmjs.org/all-contributors-cli/-/all-contributors-cli-6.26.1.tgz",
"integrity": "sha512-Ymgo3FJACRBEd1eE653FD1J/+uD0kqpUNYfr9zNC1Qby0LgbhDBzB3EF6uvkAbYpycStkk41J+0oo37Lc02yEw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.7.6",
"async": "^3.1.0",
"chalk": "^4.0.0",
"didyoumean": "^1.2.1",
"inquirer": "^7.3.3",
"json-fixer": "^1.6.8",
"lodash": "^4.11.2",
"node-fetch": "^2.6.0",
"pify": "^5.0.0",
"yargs": "^15.0.1"
},
"bin": {
"all-contributors": "dist/cli.js"
},
"engines": {
"node": ">=4"
},
"optionalDependencies": {
"prettier": "^2"
}
},
"node_modules/ansi-escapes": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"type-fest": "^0.21.3"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/application-config": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/application-config/-/application-config-0.1.2.tgz",
"integrity": "sha512-Ryjni0MtYYW9Qz2iTIMF5B/4uRJV3dt5f7PYgQ7sjTh3BUf4EvOo83F84Z2//2HP+mUbwRw35/W1jhM5EZhk9Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"application-config-path": "^0.1.0",
"mkdirp": "^0.5.1"
}
},
"node_modules/application-config-path": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/application-config-path/-/application-config-path-0.1.1.tgz",
"integrity": "sha512-zy9cHePtMP0YhwG+CfHm0bgwdnga2X3gZexpdCwEj//dpb+TKajtiC8REEUJUSq6Ab4f9cgNy2l8ObXzCXFkEw==",
"dev": true,
"license": "MIT"
},
"node_modules/array-buffer-byte-length": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz",
"integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"is-array-buffer": "^3.0.5"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/arraybuffer.prototype.slice": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz",
"integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.1",
"call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.5",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"is-array-buffer": "^3.0.4"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/asn1": {
"version": "0.1.11",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
"integrity": "sha512-Fh9zh3G2mZ8qM/kwsiKwL2U2FmXxVsboP4x1mXjnhKHv3SmzaBZoYvxEQJz/YS2gnCgd8xlAVWcZnQyC9qZBsA==",
"dev": true,
"engines": {
"node": ">=0.4.9"
}
},
"node_modules/assert-plus": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
"integrity": "sha512-brU24g7ryhRwGCI2y+1dGQmQXiZF7TtIj583S96y0jjdajIe6wn8BuXyELYhvD22dtIxDQVFk04YTJwwdwOYJw==",
"dev": true,
"engines": {
"node": ">=0.8"
}
},
"node_modules/async": {
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"dev": true,
"license": "MIT"
},
"node_modules/async-function": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz",
"integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/available-typed-arrays": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
"integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"possible-typed-array-names": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/aws-sign": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/aws-sign/-/aws-sign-0.3.0.tgz",
"integrity": "sha512-pEMJAknifcXqXqYVXzGPIu8mJvxtJxIdpVpAs8HNS+paT+9srRUDMQn+3hULS7WbLmttcmvgMvnDcFujqXJyPw==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true,
"license": "MIT"
},
"node_modules/bl": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
"integrity": "sha512-njlCs8XLBIK7LCChTWfzWuIAxkpmmLXcL7/igCofFT1B039Sz0IPnAmosN5QaO22lU4qr8LcUz2ojUlE6pLkRQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"readable-stream": "~1.0.26"
}
},
"node_modules/bluebird": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-1.0.3.tgz",
"integrity": "sha512-97HxegERaUQxXTDVTITyt7QuXEapf5uVXPVXKg6UjPvFC3N46KGvg/obSNZQbekkDbZlzxppDdTjAxel7WSXaA==",
"dev": true,
"license": "MIT"
},
"node_modules/boom": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
"integrity": "sha512-OvfN8y1oAxxphzkl2SnCS+ztV/uVKTATtgLjWYg/7KwcNyf3rzpHxNQJZCKtsZd4+MteKczhWbSjtEX4bGgU9g==",
"deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
"dev": true,
"dependencies": {
"hoek": "0.9.x"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/boom/node_modules/hoek": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
"integrity": "sha512-ZZ6eGyzGjyMTmpSPYVECXy9uNfqBR7x5CavhUaLOeD6W0vWK1mp/b7O3f86XE0Mtfo9rZ6Bh3fnuw9Xr8MF9zA==",
"deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
"dev": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
"dev": true,
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/call-bind": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz",
"integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.0",
"es-define-property": "^1.0.0",
"get-intrinsic": "^1.2.4",
"set-function-length": "^1.2.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/call-bound": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"get-intrinsic": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"node_modules/chardet": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"dev": true,
"license": "MIT"
},
"node_modules/cli-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
"dev": true,
"license": "MIT",
"dependencies": {
"restore-cursor": "^3.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/cli-width": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
"integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
"dev": true,
"license": "ISC",
"engines": {
"node": ">= 10"
}
},
"node_modules/cliui": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
"integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
"dev": true,
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.0",
"wrap-ansi": "^6.2.0"
}
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
},
"engines": {
"node": ">=7.0.0"
}
},
"node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true,
"license": "MIT"
},
"node_modules/colors": {
"version": "0.5.1",
"resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
"integrity": "sha512-XjsuUwpDeY98+yz959OlUK6m7mLBM+1MEG5oaenfuQnNnrQk1WvtcvFgN3FNDP3f2NmZ211t0mNEfSEN1h0eIg==",
"dev": true,
"engines": {
"node": ">=0.1.90"
}
},
"node_modules/combined-stream": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
"integrity": "sha512-qfexlmLp9MyrkajQVyjEDb0Vj+KhRgR/rxLiVhaihlT+ZkX0lReqtH6Ack40CvMDERR4b5eFp3CreskpBs1Pig==",
"dev": true,
"dependencies": {
"delayed-stream": "0.0.5"
},
"engines": {
"node": ">= 0.8"
}
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"dev": true,
"license": "MIT"
},
"node_modules/cookie-jar": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/cookie-jar/-/cookie-jar-0.3.0.tgz",
"integrity": "sha512-dX1400pzPULr+ZovkIsDEqe7XH8xCAYGT5Dege4Eot44Qs2mS2iJmnh45TxTO5MIsCfrV/JGZVloLhm46AHxNw==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"dev": true,
"license": "MIT"
},
"node_modules/cross-spawn": {
"version": "6.0.6",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz",
"integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==",
"dev": true,
"license": "MIT",
"dependencies": {
"nice-try": "^1.0.4",
"path-key": "^2.0.1",
"semver": "^5.5.0",
"shebang-command": "^1.2.0",
"which": "^1.2.9"
},
"engines": {
"node": ">=4.8"
}
},
"node_modules/cross-spawn/node_modules/semver": {
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/cryptiles": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
"integrity": "sha512-gvWSbgqP+569DdslUiCelxIv3IYK5Lgmq1UrRnk+s1WxQOQ16j3GPDcjdtgL5Au65DU/xQi6q3xPtf5Kta+3IQ==",
"deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
"dev": true,
"dependencies": {
"boom": "0.4.x"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/ctype": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
"integrity": "sha512-T6CEkoSV4q50zW3TlTHMbzy1E5+zlnNcY+yb7tWVYlTwPhx9LpnfAkd4wecpWknDyptp4k97LUZeInlf6jdzBg==",
"dev": true,
"engines": {
"node": ">= 0.4"
}
},
"node_modules/data-view-buffer": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz",
"integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/data-view-byte-length": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz",
"integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/inspect-js"
}
},
"node_modules/data-view-byte-offset": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz",
"integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"is-data-view": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/define-data-property": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
"integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0",
"es-errors": "^1.3.0",
"gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-properties": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
"integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/delayed-stream": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
"integrity": "sha512-v+7uBd1pqe5YtgPacIIbZ8HuHeLFVNe4mUEyFDXL6KiqzEykjbw+5mXZXpGFgNVasdL4jWKgaKIXrEHiynN1LA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
"integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
"dev": true,
"license": "Apache-2.0"
},
"node_modules/dunder-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.1",
"es-errors": "^1.3.0",
"gopd": "^1.2.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/duplexer2": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
"integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==",
"dev": true,
"license": "BSD",
"dependencies": {
"readable-stream": "~1.1.9"
}
},
"node_modules/duplexer2/node_modules/readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true,
"license": "MIT"
},
"node_modules/error-ex": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
"integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
"node_modules/es-abstract": {
"version": "1.24.1",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz",
"integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==",
"dev": true,
"license": "MIT",
"dependencies": {
"array-buffer-byte-length": "^1.0.2",
"arraybuffer.prototype.slice": "^1.0.4",
"available-typed-arrays": "^1.0.7",
"call-bind": "^1.0.8",
"call-bound": "^1.0.4",
"data-view-buffer": "^1.0.2",
"data-view-byte-length": "^1.0.2",
"data-view-byte-offset": "^1.0.1",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"es-set-tostringtag": "^2.1.0",
"es-to-primitive": "^1.3.0",
"function.prototype.name": "^1.1.8",
"get-intrinsic": "^1.3.0",
"get-proto": "^1.0.1",
"get-symbol-description": "^1.1.0",
"globalthis": "^1.0.4",
"gopd": "^1.2.0",
"has-property-descriptors": "^1.0.2",
"has-proto": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"internal-slot": "^1.1.0",
"is-array-buffer": "^3.0.5",
"is-callable": "^1.2.7",
"is-data-view": "^1.0.2",
"is-negative-zero": "^2.0.3",
"is-regex": "^1.2.1",
"is-set": "^2.0.3",
"is-shared-array-buffer": "^1.0.4",
"is-string": "^1.1.1",
"is-typed-array": "^1.1.15",
"is-weakref": "^1.1.1",
"math-intrinsics": "^1.1.0",
"object-inspect": "^1.13.4",
"object-keys": "^1.1.1",
"object.assign": "^4.1.7",
"own-keys": "^1.0.1",
"regexp.prototype.flags": "^1.5.4",
"safe-array-concat": "^1.1.3",
"safe-push-apply": "^1.0.0",
"safe-regex-test": "^1.1.0",
"set-proto": "^1.0.0",
"stop-iteration-iterator": "^1.1.0",
"string.prototype.trim": "^1.2.10",
"string.prototype.trimend": "^1.0.9",
"string.prototype.trimstart": "^1.0.8",
"typed-array-buffer": "^1.0.3",
"typed-array-byte-length": "^1.0.3",
"typed-array-byte-offset": "^1.0.4",
"typed-array-length": "^1.0.7",
"unbox-primitive": "^1.1.0",
"which-typed-array": "^1.1.19"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/es-define-property": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-errors": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-object-atoms": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-set-tostringtag": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-to-primitive": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz",
"integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.2.7",
"is-date-object": "^1.0.5",
"is-symbol": "^1.0.4"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/external-editor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
"dev": true,
"license": "MIT",
"dependencies": {
"chardet": "^0.7.0",
"iconv-lite": "^0.4.24",
"tmp": "^0.0.33"
},
"engines": {
"node": ">=4"
}
},
"node_modules/figures": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
"dev": true,
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"license": "MIT",
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/for-each": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz",
"integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-callable": "^1.2.7"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/foreach": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz",
"integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==",
"dev": true,
"license": "MIT"
},
"node_modules/forever-agent": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
"integrity": "sha512-PDG5Ef0Dob/JsZUxUltJOhm/Y9mlteAE+46y3M9RBz/Rd3QVENJ75aGRhN56yekTUboaBIkd8KVWX2NjF6+91A==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/form-data": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-0.0.8.tgz",
"integrity": "sha512-yzpBIhe8Ll+dYTXjd+4ORxbQktke+abD0dJjedvqsVVayMkb+PgLGatJNLwo95Va75l3YDZ01SrouzyW9bC2Fg==",
"dev": true,
"dependencies": {
"async": "~0.2.7",
"combined-stream": "~0.0.4",
"mime": "~1.2.2"
},
"engines": {
"node": ">= 0.6"
}
},
"node_modules/form-data/node_modules/async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==",
"dev": true
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/function-bind": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/function.prototype.name": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz",
"integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"define-properties": "^1.2.1",
"functions-have-names": "^1.2.3",
"hasown": "^2.0.2",
"is-callable": "^1.2.7"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/functions-have-names": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
"integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/generator-function": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz",
"integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind-apply-helpers": "^1.0.2",
"es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"has-symbols": "^1.1.0",
"hasown": "^2.0.2",
"math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-proto": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
"dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/get-symbol-description": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz",
"integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"es-errors": "^1.3.0",
"get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/ghauth": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/ghauth/-/ghauth-3.0.0.tgz",
"integrity": "sha512-Ds/q5leXoYu8e+MUJyI1C2mqcvdQ4iTzoOM2WN/p9sh/Z0r609dPUq7mLNa0CoGeKdmesyUmVJOAJeWxQ3tcag==",
"dev": true,
"license": "MIT",
"dependencies": {
"application-config": "~0.1.1",
"bl": "~0.9.4",
"hyperquest": "~1.2.0",
"mkdirp": "~0.5.0",
"read": "~1.0.5",
"xtend": "~4.0.0"
}
},
"node_modules/github": {
"version": "0.1.16",
"resolved": "https://registry.npmjs.org/github/-/github-0.1.16.tgz",
"integrity": "sha512-IVtcAhrb2HsThCNs1MTPuntLk6C1km0Q4A+md/FD/00SgyyJc4+2XsG1UsF2SUM7enumAgP5VKGVqzyyUmuNCw==",
"deprecated": "'github' has been renamed to '@octokit/rest' (https://git.io/vNB11)",
"dev": true
},
"node_modules/github-changes": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/github-changes/-/github-changes-1.1.2.tgz",
"integrity": "sha512-S4lzHQHyPSyHm22JjE+Vsyr8/d797NPmYYpBqwfkPj9qHIbSwENoqKngyfGbaVbmPFTeE6QMgDbcX12TWy+fpg==",
"dev": true,
"license": "MIT",
"dependencies": {
"bluebird": "1.0.3",
"ghauth": "3.0.0",
"github": "0.1.16",
"github-commit-stream": "0.1.0",
"lodash": "2.4.1",
"moment-timezone": "0.5.5",
"nomnom": "1.6.2",
"parse-link-header": "0.1.0",
"semver": "5.4.1"
},
"bin": {
"github-changes": "bin/index.js"
}
},
"node_modules/github-changes/node_modules/lodash": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.1.tgz",
"integrity": "sha512-qa6QqjA9jJB4AYw+NpD2GI4dzHL6Mv0hL+By6iIul4Ce0C1refrjZJmcGvWdnLUwl4LIPtvzje3UQfGH+nCEsQ==",
"dev": true,
"engines": [
"node",
"rhino"
],
"license": "MIT"
},
"node_modules/github-changes/node_modules/semver": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
"integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/github-commit-stream": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/github-commit-stream/-/github-commit-stream-0.1.0.tgz",
"integrity": "sha512-rWmtBtoK/yViLU7VfxXzLCY9aW/cipSGzUz3TE0wNRcHEPxDjI26gFtkRV+lLhJ69cr+MR+NvFUT+MVPZRXLCw==",
"dev": true,
"license": "MIT",
"dependencies": {
"async": "~0.2.9",
"parse-link-header": "~0.1.0",
"request": "~2.22.0",
"through": "~2.3.4"
}
},
"node_modules/github-commit-stream/node_modules/async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
"integrity": "sha512-eAkdoKxU6/LkKDBzLpT+t6Ff5EtfSF4wx1WfJiPEEV7WNLnDaRXk0oVysiEPm262roaachGexwUv94WhSgN5TQ==",
"dev": true
},
"node_modules/globalthis": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
"integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"define-properties": "^1.2.1",
"gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true,
"license": "ISC"
},
"node_modules/has-bigints": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz",
"integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/has-property-descriptors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
"integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz",
"integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-tostringtag": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/hasown": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"function-bind": "^1.1.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/hawk": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-0.13.1.tgz",
"integrity": "sha512-f/1H9bruKJfgLN2KFd+666ILQvJYsJcxaCoIdHaaD2zgl7RUa08/202pGJXhOmQ1kTEdMTSxPnbCsu4l6JARhQ==",
"deprecated": "This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues.",
"dev": true,
"dependencies": {
"boom": "0.4.x",
"cryptiles": "0.2.x",
"hoek": "0.8.x",
"sntp": "0.2.x"
},
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/hoek": {
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-0.8.5.tgz",
"integrity": "sha512-NoKdeYUBOlQ7j9dgvT9BEX90rE6HtDkaMFwR6hfOj26LA2Mwyg5026jOpNBhmNrWIGdPnbBK3sQJI3POwh8wqg==",
"deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
"dev": true,
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true,
"license": "ISC"
},
"node_modules/http-signature": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
"integrity": "sha512-coK8uR5rq2IMj+Hen+sKPA5ldgbCc1/spPdKCL1Fw6h+D0s/2LzMcRK0Cqufs1h0ryx/niwBHGFu8HC3hwU+lA==",
"dev": true,
"license": "MIT",
"dependencies": {
"asn1": "0.1.11",
"assert-plus": "^0.1.5",
"ctype": "0.5.3"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/husky": {
"version": "9.1.7",
"resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz",
"integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==",
"dev": true,
"license": "MIT",
"bin": {
"husky": "bin.js"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/sponsors/typicode"
}
},
"node_modules/hyperquest": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/hyperquest/-/hyperquest-1.2.0.tgz",
"integrity": "sha512-N6QwIYr/ENmsE3+0aNA/x8M+jHF0wedvc9ZiGAhg7KK6TxwtJTSR95b0invqaLFPqUrsngYUrc4LVmLtrl7kvw==",
"dev": true,
"license": "MIT",
"dependencies": {
"duplexer2": "~0.0.2",
"through2": "~0.6.3"
}
},
"node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==",
"dev": true
},
"node_modules/inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true,
"license": "ISC"
},
"node_modules/inquirer": {
"version": "7.3.3",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
"integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-escapes": "^4.2.1",
"chalk": "^4.1.0",
"cli-cursor": "^3.1.0",
"cli-width": "^3.0.0",
"external-editor": "^3.0.3",
"figures": "^3.0.0",
"lodash": "^4.17.19",
"mute-stream": "0.0.8",
"run-async": "^2.4.0",
"rxjs": "^6.6.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0",
"through": "^2.3.6"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/internal-slot": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
"integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"hasown": "^2.0.2",
"side-channel": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/is": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz",
"integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/is-array-buffer": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
"integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true,
"license": "MIT"
},
"node_modules/is-async-function": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz",
"integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"async-function": "^1.0.0",
"call-bound": "^1.0.3",
"get-proto": "^1.0.1",
"has-tostringtag": "^1.0.2",
"safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-bigint": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz",
"integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-bigints": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-boolean-object": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz",
"integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
"integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-core-module": {
"version": "2.16.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
"integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
"license": "MIT",
"dependencies": {
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-data-view": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz",
"integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"get-intrinsic": "^1.2.6",
"is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-date-object": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz",
"integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-finalizationregistry": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz",
"integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/is-generator-function": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz",
"integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.4",
"generator-function": "^2.0.0",
"get-proto": "^1.0.1",
"has-tostringtag": "^1.0.2",
"safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-map": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz",
"integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-negative-zero": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
"integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-number-object": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz",
"integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-object": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz",
"integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==",
"dev": true
},
"node_modules/is-regex": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz",
"integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"gopd": "^1.2.0",
"has-tostringtag": "^1.0.2",
"hasown": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-set": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz",
"integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-shared-array-buffer": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz",
"integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-string": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz",
"integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"has-tostringtag": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-symbol": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz",
"integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"has-symbols": "^1.1.0",
"safe-regex-test": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-typed-array": {
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz",
"integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"which-typed-array": "^1.1.16"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakmap": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz",
"integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakref": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz",
"integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-weakset": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz",
"integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.3",
"get-intrinsic": "^1.2.6"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
"dev": true,
"license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"dev": true,
"license": "ISC"
},
"node_modules/json-fixer": {
"version": "1.6.15",
"resolved": "https://registry.npmjs.org/json-fixer/-/json-fixer-1.6.15.tgz",
"integrity": "sha512-TuDuZ5KrgyjoCIppdPXBMqiGfota55+odM+j2cQ5rt/XKyKmqGB3Whz1F8SN8+60yYGy/Nu5lbRZ+rx8kBIvBw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/runtime": "^7.18.9",
"chalk": "^4.1.2",
"pegjs": "^0.10.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/json-parse-better-errors": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true,
"license": "MIT"
},
"node_modules/json-stringify-safe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-4.0.0.tgz",
"integrity": "sha512-qzEpz1SDUb9xvA+LDOkNgjekdV7tuC7zDQf14sqMBtujh8kVbQhF11VWm4DeR99yFNjVSjTTfKa40c9ZQOtwXA==",
"dev": true,
"license": "BSD"
},
"node_modules/load-json-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
"integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"parse-json": "^4.0.0",
"pify": "^3.0.0",
"strip-bom": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/load-json-file/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"license": "MIT",
"dependencies": {
"p-locate": "^4.1.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/lodash": {
"version": "4.17.23",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
"dev": true,
"license": "MIT"
},
"node_modules/math-intrinsics": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/memorystream": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
"integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
"dev": true,
"engines": {
"node": ">= 0.10.0"
}
},
"node_modules/mime": {
"version": "1.2.11",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"integrity": "sha512-Ysa2F/nqTNGHhhm9MV8ure4+Hc+Y8AWiqUdHxsO7xu8zc92ND9f3kpALHjaP026Ft17UfxrMt95c50PLUeynBw==",
"dev": true
},
"node_modules/mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/minimatch": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
"integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
"dev": true,
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/minimist": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true,
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/mkdirp": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
"dev": true,
"license": "MIT",
"dependencies": {
"minimist": "^1.2.6"
},
"bin": {
"mkdirp": "bin/cmd.js"
}
},
"node_modules/moment": {
"version": "2.30.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
"dev": true,
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/moment-timezone": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.5.tgz",
"integrity": "sha512-/aaLDQVE4gnDiDIcX2wWgAfBvfmZAz5UEmVkSOL5FIPlVwsDGqvMzp/0N3MttZKUxeofRdnQhB1t7xI0FHLhZw==",
"dev": true,
"license": "MIT",
"dependencies": {
"moment": ">= 2.6.0"
},
"engines": {
"node": "*"
}
},
"node_modules/mute-stream": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true,
"license": "ISC"
},
"node_modules/nice-try": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true,
"license": "MIT"
},
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"dev": true,
"license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/node-uuid": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
"integrity": "sha512-TkCET/3rr9mUuRp+CpO7qfgT++aAxfDRaalQhwPFzI9BY/2rCDn6OfpZOVggi1AXfTPpfkTrg5f5WQx5G1uLxA==",
"deprecated": "Use uuid module instead",
"dev": true,
"bin": {
"uuid": "bin/uuid"
}
},
"node_modules/nomnom": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.6.2.tgz",
"integrity": "sha512-mscrcqifc/QKP6/afmtoC84/mK6SKcDTDEfKPMSgJKeV5dtshiw5+AF90uwHyAqHkMIYIEcGkSAJnV6+T9PY/g==",
"deprecated": "Package no longer supported. Contact support@npmjs.com for more info.",
"dev": true,
"dependencies": {
"colors": "0.5.x",
"underscore": "~1.4.4"
}
},
"node_modules/normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
"semver": "2 || 3 || 4 || 5",
"validate-npm-package-license": "^3.0.1"
}
},
"node_modules/normalize-package-data/node_modules/semver": {
"version": "5.7.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver"
}
},
"node_modules/npm-run-all": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
"integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"chalk": "^2.4.1",
"cross-spawn": "^6.0.5",
"memorystream": "^0.3.1",
"minimatch": "^3.0.4",
"pidtree": "^0.3.0",
"read-pkg": "^3.0.0",
"shell-quote": "^1.6.1",
"string.prototype.padend": "^3.0.0"
},
"bin": {
"npm-run-all": "bin/npm-run-all/index.js",
"run-p": "bin/run-p/index.js",
"run-s": "bin/run-s/index.js"
},
"engines": {
"node": ">= 4"
}
},
"node_modules/npm-run-all/node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/npm-run-all/node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
"supports-color": "^5.3.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/npm-run-all/node_modules/color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
}
},
"node_modules/npm-run-all/node_modules/color-name": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"dev": true,
"license": "MIT"
},
"node_modules/npm-run-all/node_modules/has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/npm-run-all/node_modules/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/oauth-sign": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz",
"integrity": "sha512-Tr31Sh5FnK9YKm7xTUPyDMsNOvMqkVDND0zvK/Wgj7/H9q8mpye0qG2nVzrnsvLhcsX5DtqXD0la0ks6rkPCGQ==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/object-inspect": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/object.assign": {
"version": "4.1.7",
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz",
"integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.3",
"define-properties": "^1.2.1",
"es-object-atoms": "^1.0.0",
"has-symbols": "^1.1.0",
"object-keys": "^1.1.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/own-keys": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz",
"integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==",
"dev": true,
"license": "MIT",
"dependencies": {
"get-intrinsic": "^1.2.6",
"object-keys": "^1.1.1",
"safe-push-apply": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"license": "MIT",
"dependencies": {
"p-limit": "^2.2.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
"integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
"dev": true,
"license": "MIT",
"dependencies": {
"error-ex": "^1.3.1",
"json-parse-better-errors": "^1.0.1"
},
"engines": {
"node": ">=4"
}
},
"node_modules/parse-link-header": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/parse-link-header/-/parse-link-header-0.1.0.tgz",
"integrity": "sha512-VZ0pZwX3LRTfpDARULYD2C0fHuQqg7TPSGmPoKEHfBBmBhH7KMG3LV27GkUtjezoixE/CCJNAVnNw54IxkskWg==",
"dev": true,
"license": "MIT",
"dependencies": {
"xtend": "~2.0.5"
}
},
"node_modules/parse-link-header/node_modules/object-keys": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz",
"integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==",
"deprecated": "Please update to the latest object-keys",
"dev": true,
"license": "MIT",
"dependencies": {
"foreach": "~2.0.1",
"indexof": "~0.0.1",
"is": "~0.2.6"
}
},
"node_modules/parse-link-header/node_modules/xtend": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz",
"integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==",
"dev": true,
"dependencies": {
"is-object": "~0.1.2",
"object-keys": "~0.2.0"
},
"engines": {
"node": ">=0.4"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/path-parse": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true,
"license": "MIT"
},
"node_modules/path-type": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
"integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
"dev": true,
"license": "MIT",
"dependencies": {
"pify": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/path-type/node_modules/pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/pegjs": {
"version": "0.10.0",
"resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz",
"integrity": "sha512-qI5+oFNEGi3L5HAxDwN2LA4Gg7irF70Zs25edhjld9QemOgp0CbvMtbFcMvFtEo1OityPrcCzkQFB8JP/hxgow==",
"dev": true,
"license": "MIT",
"bin": {
"pegjs": "bin/pegjs"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/pidtree": {
"version": "0.3.1",
"resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
"integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
"dev": true,
"license": "MIT",
"bin": {
"pidtree": "bin/pidtree.js"
},
"engines": {
"node": ">=0.10"
}
},
"node_modules/pify": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz",
"integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/playwright": {
"version": "1.50.1",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.50.1.tgz",
"integrity": "sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"playwright-core": "1.50.1"
},
"bin": {
"playwright": "cli.js"
},
"engines": {
"node": ">=18"
},
"optionalDependencies": {
"fsevents": "2.3.2"
}
},
"node_modules/playwright-core": {
"version": "1.50.1",
"resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.50.1.tgz",
"integrity": "sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"playwright-core": "cli.js"
},
"engines": {
"node": ">=18"
}
},
"node_modules/possible-typed-array-names": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
"integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.4"
}
},
"node_modules/prettier": {
"version": "2.8.8",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
"integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
"license": "MIT",
"optional": true,
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
},
"funding": {
"url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/qs": {
"version": "0.6.6",
"resolved": "https://registry.npmjs.org/qs/-/qs-0.6.6.tgz",
"integrity": "sha512-kN+yNdAf29Jgp+AYHUmC7X4QdJPR8czuMWLNLc0aRxkQ7tB3vJQEONKKT9ou/rW7EbqVec11srC9q9BiVbcnHA==",
"dev": true,
"engines": {
"node": "*"
}
},
"node_modules/read": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
"integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==",
"dev": true,
"license": "ISC",
"dependencies": {
"mute-stream": "~0.0.4"
},
"engines": {
"node": ">=0.8"
}
},
"node_modules/read-pkg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
"integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
"dev": true,
"license": "MIT",
"dependencies": {
"load-json-file": "^4.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^3.0.0"
},
"engines": {
"node": ">=4"
}
},
"node_modules/readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
"dev": true,
"license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.1",
"isarray": "0.0.1",
"string_decoder": "~0.10.x"
}
},
"node_modules/reflect.getprototypeof": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
"integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-abstract": "^1.23.9",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0",
"get-intrinsic": "^1.2.7",
"get-proto": "^1.0.1",
"which-builtin-type": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/regexp.prototype.flags": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
"integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"define-properties": "^1.2.1",
"es-errors": "^1.3.0",
"get-proto": "^1.0.1",
"gopd": "^1.2.0",
"set-function-name": "^2.0.2"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/request": {
"version": "2.22.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.22.0.tgz",
"integrity": "sha512-s05oCBjWuzNi/UbZtvwOnSJ85/lHUdYPriJyFUwdxHKr8VcZHB0wx0eTX8y5hCH3p7OTDi9iQUqMFyDkW6K7EQ==",
"deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
"dev": true,
"engines": [
"node >= 0.8.0"
],
"dependencies": {
"aws-sign": "~0.3.0",
"cookie-jar": "~0.3.0",
"forever-agent": "~0.5.0",
"form-data": "0.0.8",
"hawk": "~0.13.0",
"http-signature": "~0.10.0",
"json-stringify-safe": "~4.0.0",
"mime": "~1.2.9",
"node-uuid": "~1.4.0",
"oauth-sign": "~0.3.0",
"qs": "~0.6.0",
"tunnel-agent": "~0.3.0"
}
},
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/require-main-filename": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
"dev": true,
"license": "ISC"
},
"node_modules/resolve": {
"version": "1.22.11",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
"integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-core-module": "^2.16.1",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
"bin": {
"resolve": "bin/resolve"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
"dev": true,
"license": "MIT",
"dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
},
"engines": {
"node": ">=8"
}
},
"node_modules/run-async": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.12.0"
}
},
"node_modules/rxjs": {
"version": "6.6.7",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
"integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"tslib": "^1.9.0"
},
"engines": {
"npm": ">=2.0.0"
}
},
"node_modules/safe-array-concat": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz",
"integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bind": "^1.0.8",
"call-bound": "^1.0.2",
"get-intrinsic": "^1.2.6",
"has-symbols": "^1.1.0",
"isarray": "^2.0.5"
},
"engines": {
"node": ">=0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safe-array-concat/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true,
"license": "MIT"
},
"node_modules/safe-push-apply": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz",
"integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==",
"dev": true,
"license": "MIT",
"dependencies": {
"es-errors": "^1.3.0",
"isarray": "^2.0.5"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safe-push-apply/node_modules/isarray": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
"integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
"dev": true,
"license": "MIT"
},
"node_modules/safe-regex-test": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz",
"integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"call-bound": "^1.0.2",
"es-errors": "^1.3.0",
"is-regex": "^1.2.1"
},
"engines": {
"node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true,
"license": "MIT"
},
"node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"dev": true,
"license": "ISC"
},
"node_modules/set-function-length": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
"integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
"dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"get-intrinsic": "^1.2.4",
"gopd": "^1.0.1",
"has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
"integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"define-data-property": "^1.1.4",
"es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
"has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-proto": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz",
"integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==",
"dev": true,
"license": "MIT",
"dependencies": {
"dunder-proto": "^1.0.1",
"es-errors": "^1.3.0",
"es-object-atoms": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
"dev": true,
"license": "MIT",
"dependencies": {
"shebang-regex": "^1.0.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/shebang-regex": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/shell-quote": {
gitextract_l41uqth4/
├── .all-contributorsrc
├── .coderabbit.yaml
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug.md
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── SECURITY.md
│ ├── TESTING_PUBLISHING.md
│ ├── stale.yml
│ └── workflows/
│ ├── ci.yml
│ ├── create-release-pr.yml
│ └── publish.yml
├── .gitignore
├── .husky/
│ ├── post-merge
│ └── pre-commit
├── .nvmrc
├── .vscode/
│ └── launch.json
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── packages/
│ ├── less/
│ │ ├── .eslintignore
│ │ ├── .eslintrc.cjs
│ │ ├── .gitignore
│ │ ├── .npmignore
│ │ ├── Gruntfile.cjs
│ │ ├── README.md
│ │ ├── benchmark/
│ │ │ ├── benchmark-import-reference-target.less
│ │ │ ├── benchmark-import-target.less
│ │ │ ├── benchmark-runner.js
│ │ │ ├── benchmark-v3.less
│ │ │ ├── benchmark-v37.less
│ │ │ ├── benchmark-v39.less
│ │ │ ├── benchmark.less
│ │ │ ├── index.js
│ │ │ ├── results/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── latest/
│ │ │ │ │ └── macbook-pro_arm64.json
│ │ │ │ └── runs/
│ │ │ │ ├── 2026-03-09T21-34-11Z_macbook-pro_arm64.json
│ │ │ │ └── 2026-03-09_macbook-pro_arm64.json
│ │ │ └── run-historical.sh
│ │ ├── bin/
│ │ │ └── lessc
│ │ ├── bower.json
│ │ ├── build/
│ │ │ ├── banner.js
│ │ │ └── rollup.js
│ │ ├── index.cjs
│ │ ├── lib/
│ │ │ ├── less/
│ │ │ │ ├── constants.js
│ │ │ │ ├── contexts.js
│ │ │ │ ├── data/
│ │ │ │ │ ├── colors.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ └── unit-conversions.js
│ │ │ │ ├── default-options.js
│ │ │ │ ├── deprecation.js
│ │ │ │ ├── environment/
│ │ │ │ │ ├── abstract-file-manager.js
│ │ │ │ │ ├── abstract-plugin-loader.js
│ │ │ │ │ ├── environment-api.ts
│ │ │ │ │ ├── environment.js
│ │ │ │ │ └── file-manager-api.ts
│ │ │ │ ├── functions/
│ │ │ │ │ ├── boolean.js
│ │ │ │ │ ├── color-blending.js
│ │ │ │ │ ├── color.js
│ │ │ │ │ ├── data-uri.js
│ │ │ │ │ ├── default.js
│ │ │ │ │ ├── function-caller.js
│ │ │ │ │ ├── function-registry.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── list.js
│ │ │ │ │ ├── math-helper.js
│ │ │ │ │ ├── math.js
│ │ │ │ │ ├── number.js
│ │ │ │ │ ├── string.js
│ │ │ │ │ ├── style.js
│ │ │ │ │ ├── svg.js
│ │ │ │ │ └── types.js
│ │ │ │ ├── import-manager.js
│ │ │ │ ├── index.js
│ │ │ │ ├── less-error.js
│ │ │ │ ├── logger.js
│ │ │ │ ├── parse-tree.js
│ │ │ │ ├── parse.js
│ │ │ │ ├── parser/
│ │ │ │ │ ├── parser-input.js
│ │ │ │ │ └── parser.js
│ │ │ │ ├── plugin-manager.js
│ │ │ │ ├── render.js
│ │ │ │ ├── source-map-builder.js
│ │ │ │ ├── source-map-output.js
│ │ │ │ ├── transform-tree.js
│ │ │ │ ├── tree/
│ │ │ │ │ ├── anonymous.js
│ │ │ │ │ ├── assignment.js
│ │ │ │ │ ├── atrule-syntax.js
│ │ │ │ │ ├── atrule.js
│ │ │ │ │ ├── attribute.js
│ │ │ │ │ ├── call.js
│ │ │ │ │ ├── color.js
│ │ │ │ │ ├── combinator.js
│ │ │ │ │ ├── comment.js
│ │ │ │ │ ├── condition.js
│ │ │ │ │ ├── container.js
│ │ │ │ │ ├── debug-info.js
│ │ │ │ │ ├── declaration.js
│ │ │ │ │ ├── detached-ruleset.js
│ │ │ │ │ ├── dimension.js
│ │ │ │ │ ├── element.js
│ │ │ │ │ ├── expression.js
│ │ │ │ │ ├── extend.js
│ │ │ │ │ ├── import.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── javascript.js
│ │ │ │ │ ├── js-eval-node.js
│ │ │ │ │ ├── keyword.js
│ │ │ │ │ ├── media.js
│ │ │ │ │ ├── merge-rules.js
│ │ │ │ │ ├── mixin-call.js
│ │ │ │ │ ├── mixin-definition.js
│ │ │ │ │ ├── namespace-value.js
│ │ │ │ │ ├── negative.js
│ │ │ │ │ ├── nested-at-rule.js
│ │ │ │ │ ├── node.js
│ │ │ │ │ ├── operation.js
│ │ │ │ │ ├── paren.js
│ │ │ │ │ ├── property.js
│ │ │ │ │ ├── query-in-parens.js
│ │ │ │ │ ├── quoted.js
│ │ │ │ │ ├── ruleset.js
│ │ │ │ │ ├── selector.js
│ │ │ │ │ ├── unicode-descriptor.js
│ │ │ │ │ ├── unit.js
│ │ │ │ │ ├── url.js
│ │ │ │ │ ├── value.js
│ │ │ │ │ ├── variable-call.js
│ │ │ │ │ └── variable.js
│ │ │ │ ├── utils.js
│ │ │ │ └── visitors/
│ │ │ │ ├── extend-visitor.js
│ │ │ │ ├── import-sequencer.js
│ │ │ │ ├── import-visitor.js
│ │ │ │ ├── index.js
│ │ │ │ ├── join-selector-visitor.js
│ │ │ │ ├── set-tree-visibility-visitor.js
│ │ │ │ ├── to-css-visitor.js
│ │ │ │ └── visitor.js
│ │ │ ├── less-browser/
│ │ │ │ ├── add-default-options.js
│ │ │ │ ├── bootstrap.js
│ │ │ │ ├── browser.js
│ │ │ │ ├── cache.js
│ │ │ │ ├── error-reporting.js
│ │ │ │ ├── file-manager.js
│ │ │ │ ├── image-size.js
│ │ │ │ ├── index.js
│ │ │ │ ├── log-listener.js
│ │ │ │ ├── plugin-loader.js
│ │ │ │ └── utils.js
│ │ │ └── less-node/
│ │ │ ├── environment.js
│ │ │ ├── file-manager.js
│ │ │ ├── fs.js
│ │ │ ├── image-size.js
│ │ │ ├── index.js
│ │ │ ├── lessc-helper.js
│ │ │ ├── plugin-loader.js
│ │ │ └── url-file-manager.js
│ │ ├── package.json
│ │ ├── scripts/
│ │ │ ├── coverage-lines.js
│ │ │ ├── coverage-report.js
│ │ │ └── postinstall.js
│ │ ├── test/
│ │ │ ├── .eslintrc.json
│ │ │ ├── README.md
│ │ │ ├── browser/
│ │ │ │ ├── common.js
│ │ │ │ ├── css/
│ │ │ │ │ ├── global-vars/
│ │ │ │ │ │ └── simple.css
│ │ │ │ │ ├── modify-vars/
│ │ │ │ │ │ └── simple.css
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ └── plugin.css
│ │ │ │ │ ├── postProcessor/
│ │ │ │ │ │ └── postProcessor.css
│ │ │ │ │ ├── relative-urls/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rewrite-urls/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rootpath/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rootpath-relative/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ ├── rootpath-rewrite-urls/
│ │ │ │ │ │ └── urls.css
│ │ │ │ │ └── urls.css
│ │ │ │ ├── generator/
│ │ │ │ │ ├── benchmark.config.cjs
│ │ │ │ │ ├── generate.cjs
│ │ │ │ │ ├── generate.js
│ │ │ │ │ ├── runner.cjs
│ │ │ │ │ ├── runner.config.cjs
│ │ │ │ │ ├── runner.js
│ │ │ │ │ ├── template.cjs
│ │ │ │ │ └── utils.cjs
│ │ │ │ ├── less/
│ │ │ │ │ ├── console-errors/
│ │ │ │ │ │ ├── test-error.less
│ │ │ │ │ │ └── test-error.txt
│ │ │ │ │ ├── errors/
│ │ │ │ │ │ ├── image-height-error.less
│ │ │ │ │ │ ├── image-height-error.txt
│ │ │ │ │ │ ├── image-size-error.less
│ │ │ │ │ │ ├── image-size-error.txt
│ │ │ │ │ │ ├── image-width-error.less
│ │ │ │ │ │ └── image-width-error.txt
│ │ │ │ │ ├── global-vars/
│ │ │ │ │ │ └── simple.less
│ │ │ │ │ ├── imports/
│ │ │ │ │ │ ├── urls.less
│ │ │ │ │ │ └── urls2.less
│ │ │ │ │ ├── modify-vars/
│ │ │ │ │ │ ├── imports/
│ │ │ │ │ │ │ └── simple2.less
│ │ │ │ │ │ └── simple.less
│ │ │ │ │ ├── nested-gradient-with-svg-gradient/
│ │ │ │ │ │ ├── mixin-consumer.less
│ │ │ │ │ │ └── svg-gradient-mixin.less
│ │ │ │ │ ├── plugin/
│ │ │ │ │ │ ├── plugin.js
│ │ │ │ │ │ └── plugin.less
│ │ │ │ │ ├── postProcessor/
│ │ │ │ │ │ └── postProcessor.less
│ │ │ │ │ ├── relative-urls/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rewrite-urls/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rootpath/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rootpath-relative/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ ├── rootpath-rewrite-urls/
│ │ │ │ │ │ └── urls.less
│ │ │ │ │ └── urls.less
│ │ │ │ ├── runner-VisitorPlugin-options.js
│ │ │ │ ├── runner-VisitorPlugin.js
│ │ │ │ ├── runner-browser-options.js
│ │ │ │ ├── runner-browser-spec.js
│ │ │ │ ├── runner-console-errors.js
│ │ │ │ ├── runner-errors-options.js
│ │ │ │ ├── runner-errors-spec.js
│ │ │ │ ├── runner-filemanagerPlugin-options.js
│ │ │ │ ├── runner-filemanagerPlugin.js
│ │ │ │ ├── runner-global-vars-options.js
│ │ │ │ ├── runner-global-vars-spec.js
│ │ │ │ ├── runner-main-options.js
│ │ │ │ ├── runner-main-spec.js
│ │ │ │ ├── runner-modify-vars-options.js
│ │ │ │ ├── runner-modify-vars-spec.js
│ │ │ │ ├── runner-no-js-errors-options.js
│ │ │ │ ├── runner-no-js-errors-spec.js
│ │ │ │ ├── runner-postProcessorPlugin-options.js
│ │ │ │ ├── runner-postProcessorPlugin.js
│ │ │ │ ├── runner-preProcessorPlugin-options.js
│ │ │ │ ├── runner-preProcessorPlugin.js
│ │ │ │ ├── runner-production-options.js
│ │ │ │ ├── runner-production-spec.js
│ │ │ │ ├── runner-relative-urls-options.js
│ │ │ │ ├── runner-relative-urls-spec.js
│ │ │ │ ├── runner-rewrite-urls-options.js
│ │ │ │ ├── runner-rewrite-urls-spec.js
│ │ │ │ ├── runner-rootpath-options.js
│ │ │ │ ├── runner-rootpath-relative-options.js
│ │ │ │ ├── runner-rootpath-relative-spec.js
│ │ │ │ ├── runner-rootpath-rewrite-urls-options.js
│ │ │ │ ├── runner-rootpath-rewrite-urls-spec.js
│ │ │ │ ├── runner-rootpath-spec.js
│ │ │ │ ├── runner-strict-units-options.js
│ │ │ │ └── runner-strict-units-spec.js
│ │ │ ├── exports/
│ │ │ │ ├── import-patterns.cjs
│ │ │ │ ├── webpack-browser-entry.js
│ │ │ │ └── webpack-browser.cjs
│ │ │ ├── index.js
│ │ │ ├── less-test.js
│ │ │ ├── mocha-playwright/
│ │ │ │ └── runner.js
│ │ │ ├── modify-vars.js
│ │ │ ├── plugins/
│ │ │ │ ├── filemanager/
│ │ │ │ │ └── index.cjs
│ │ │ │ ├── postprocess/
│ │ │ │ │ └── index.cjs
│ │ │ │ ├── preprocess/
│ │ │ │ │ └── index.cjs
│ │ │ │ └── visitor/
│ │ │ │ └── index.cjs
│ │ │ ├── sourcemaps/
│ │ │ │ ├── basic.json
│ │ │ │ ├── comprehensive.json
│ │ │ │ ├── custom-props.json
│ │ │ │ ├── index.html
│ │ │ │ ├── sourcemaps-basepath.json
│ │ │ │ ├── sourcemaps-include-source.json
│ │ │ │ ├── sourcemaps-rootpath.json
│ │ │ │ └── sourcemaps-url.json
│ │ │ ├── sourcemaps-disable-annotation/
│ │ │ │ └── basic.json
│ │ │ ├── sourcemaps-variable-selector/
│ │ │ │ └── basic.json
│ │ │ ├── test-cjs-suite.cjs
│ │ │ ├── test-cjs.cjs
│ │ │ └── test-es6.js
│ │ ├── test.less
│ │ └── tsconfig.json
│ ├── test-data/
│ │ ├── data/
│ │ │ └── page.html
│ │ ├── index.js
│ │ ├── package.json
│ │ ├── plugin/
│ │ │ ├── plugin-collection.js
│ │ │ ├── plugin-global.js
│ │ │ ├── plugin-local.js
│ │ │ ├── plugin-preeval.js
│ │ │ ├── plugin-scope1.js
│ │ │ ├── plugin-scope2.js
│ │ │ ├── plugin-set-options-v2.js
│ │ │ ├── plugin-set-options-v3.js
│ │ │ ├── plugin-set-options.js
│ │ │ ├── plugin-simple.js
│ │ │ ├── plugin-transitive.js
│ │ │ ├── plugin-transitive.less
│ │ │ └── plugin-tree-nodes.js
│ │ ├── tests-config/
│ │ │ ├── 3rd-party/
│ │ │ │ ├── bootstrap4.css
│ │ │ │ ├── bootstrap4.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── at-rules-compressed/
│ │ │ │ ├── at-rules-compressed.css
│ │ │ │ ├── at-rules-compressed.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── at-rules-compressed-evaluation/
│ │ │ │ ├── at-rules-compressed-evaluation.css
│ │ │ │ ├── at-rules-compressed-evaluation.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── compression/
│ │ │ │ ├── compression.css
│ │ │ │ ├── compression.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── debug/
│ │ │ │ ├── all/
│ │ │ │ │ ├── linenumbers-all.css
│ │ │ │ │ ├── linenumbers-all.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ ├── comments/
│ │ │ │ │ ├── linenumbers-comments.css
│ │ │ │ │ ├── linenumbers-comments.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ ├── import/
│ │ │ │ │ └── test.less
│ │ │ │ ├── linenumbers.less
│ │ │ │ └── mediaquery/
│ │ │ │ ├── linenumbers-mediaquery.css
│ │ │ │ ├── linenumbers-mediaquery.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── filemanagerPlugin/
│ │ │ │ ├── colors.test
│ │ │ │ ├── filemanager.css
│ │ │ │ ├── filemanager.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── globalVars/
│ │ │ │ ├── extended.css
│ │ │ │ ├── extended.json
│ │ │ │ ├── extended.less
│ │ │ │ ├── simple.css
│ │ │ │ ├── simple.json
│ │ │ │ ├── simple.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── import-redirect/
│ │ │ │ └── import-redirect.less
│ │ │ ├── include-path/
│ │ │ │ ├── import-test-e.less
│ │ │ │ ├── include-path.css
│ │ │ │ ├── include-path.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── include-path-string/
│ │ │ │ ├── include-path-string.css
│ │ │ │ ├── include-path-string.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── js-type-errors/
│ │ │ │ ├── js-type-error-2.txt
│ │ │ │ ├── js-type-error.less
│ │ │ │ ├── js-type-error.txt
│ │ │ │ └── styles.config.cjs
│ │ │ ├── math/
│ │ │ │ ├── always/
│ │ │ │ │ ├── mixins-guards.css
│ │ │ │ │ └── no-sm-operations.css
│ │ │ │ ├── parens-division/
│ │ │ │ │ ├── media-math.css
│ │ │ │ │ ├── mixins-args.css
│ │ │ │ │ ├── new-division.css
│ │ │ │ │ └── parens.css
│ │ │ │ └── strict/
│ │ │ │ ├── css.css
│ │ │ │ ├── media-math.css
│ │ │ │ ├── mixins-args.css
│ │ │ │ └── parens.css
│ │ │ ├── math-always/
│ │ │ │ ├── mixins-guards.less
│ │ │ │ ├── no-sm-operations.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── math-parens-division/
│ │ │ │ ├── media-math.less
│ │ │ │ ├── mixins-args.less
│ │ │ │ ├── new-division.less
│ │ │ │ ├── parens.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── math-strict/
│ │ │ │ ├── css.less
│ │ │ │ ├── media-math.less
│ │ │ │ ├── mixins-args.less
│ │ │ │ ├── parens.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── modifyVars/
│ │ │ │ ├── extended.css
│ │ │ │ ├── extended.json
│ │ │ │ ├── extended.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── namespacing/
│ │ │ │ ├── imports/
│ │ │ │ │ ├── a-better-bootstrap.less
│ │ │ │ │ └── library.less
│ │ │ │ ├── namespacing-1.css
│ │ │ │ ├── namespacing-1.less
│ │ │ │ ├── namespacing-2.css
│ │ │ │ ├── namespacing-2.less
│ │ │ │ ├── namespacing-3.css
│ │ │ │ ├── namespacing-3.less
│ │ │ │ ├── namespacing-4.css
│ │ │ │ ├── namespacing-4.less
│ │ │ │ ├── namespacing-5.css
│ │ │ │ ├── namespacing-5.less
│ │ │ │ ├── namespacing-6.css
│ │ │ │ ├── namespacing-6.less
│ │ │ │ ├── namespacing-7.css
│ │ │ │ ├── namespacing-7.less
│ │ │ │ ├── namespacing-8.css
│ │ │ │ ├── namespacing-8.less
│ │ │ │ ├── namespacing-functions.css
│ │ │ │ ├── namespacing-functions.less
│ │ │ │ ├── namespacing-media.css
│ │ │ │ ├── namespacing-media.less
│ │ │ │ ├── namespacing-operations.css
│ │ │ │ ├── namespacing-operations.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── no-js-errors/
│ │ │ │ ├── no-js-errors.less
│ │ │ │ ├── no-js-errors.txt
│ │ │ │ └── styles.config.cjs
│ │ │ ├── postProcessorPlugin/
│ │ │ │ ├── postProcessor.css
│ │ │ │ ├── postProcessor.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── preProcessorPlugin/
│ │ │ │ ├── preProcessor.css
│ │ │ │ ├── preProcessor.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── process-imports/
│ │ │ │ ├── google.css
│ │ │ │ ├── google.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── rewrite-urls-all/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rewrite-urls-all.css
│ │ │ │ ├── rewrite-urls-all.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── rewrite-urls-local/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rewrite-urls-local.css
│ │ │ │ ├── rewrite-urls-local.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── root-registry/
│ │ │ │ ├── file.less
│ │ │ │ └── root.less
│ │ │ ├── rootpath-rewrite-urls-all/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rootpath-rewrite-urls-all.css
│ │ │ │ ├── rootpath-rewrite-urls-all.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── rootpath-rewrite-urls-local/
│ │ │ │ ├── folder/
│ │ │ │ │ └── file.less
│ │ │ │ ├── rootpath-rewrite-urls-local.css
│ │ │ │ ├── rootpath-rewrite-urls-local.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps/
│ │ │ │ ├── basic.json
│ │ │ │ ├── basic.less
│ │ │ │ ├── comprehensive/
│ │ │ │ │ ├── comprehensive.css
│ │ │ │ │ ├── comprehensive.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ ├── custom-props.less
│ │ │ │ ├── imported.css
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-basepath/
│ │ │ │ ├── sourcemaps-basepath.css
│ │ │ │ ├── sourcemaps-basepath.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-disable-annotation/
│ │ │ │ ├── basic.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-empty/
│ │ │ │ ├── empty.less
│ │ │ │ ├── styles.config.cjs
│ │ │ │ └── var-defs.less
│ │ │ ├── sourcemaps-include-source/
│ │ │ │ ├── sourcemaps-include-source.css
│ │ │ │ ├── sourcemaps-include-source.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-rootpath/
│ │ │ │ ├── sourcemaps-rootpath.css
│ │ │ │ ├── sourcemaps-rootpath.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-url/
│ │ │ │ ├── sourcemaps-url.css
│ │ │ │ ├── sourcemaps-url.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── sourcemaps-variable-selector/
│ │ │ │ ├── basic.less
│ │ │ │ ├── styles.config.cjs
│ │ │ │ └── vars.less
│ │ │ ├── static-urls/
│ │ │ │ ├── styles.config.cjs
│ │ │ │ ├── urls.css
│ │ │ │ └── urls.less
│ │ │ ├── strict-imports/
│ │ │ │ ├── imported.less
│ │ │ │ ├── strict-imports.css
│ │ │ │ ├── strict-imports.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── units/
│ │ │ │ ├── no-strict/
│ │ │ │ │ ├── no-strict.css
│ │ │ │ │ ├── no-strict.less
│ │ │ │ │ └── styles.config.cjs
│ │ │ │ └── strict/
│ │ │ │ ├── strict-units.css
│ │ │ │ ├── strict-units.less
│ │ │ │ └── styles.config.cjs
│ │ │ ├── url-args/
│ │ │ │ ├── styles.config.cjs
│ │ │ │ ├── urls.css
│ │ │ │ └── urls.less
│ │ │ └── visitorPlugin/
│ │ │ ├── styles.config.cjs
│ │ │ ├── visitor.css
│ │ │ └── visitor.less
│ │ ├── tests-error/
│ │ │ ├── eval/
│ │ │ │ ├── add-mixed-units.less
│ │ │ │ ├── add-mixed-units.txt
│ │ │ │ ├── add-mixed-units2.less
│ │ │ │ ├── add-mixed-units2.txt
│ │ │ │ ├── at-rules-undefined-var.less
│ │ │ │ ├── at-rules-undefined-var.txt
│ │ │ │ ├── color-func-invalid-color-2.less
│ │ │ │ ├── color-func-invalid-color-2.txt
│ │ │ │ ├── color-func-invalid-color.less
│ │ │ │ ├── color-func-invalid-color.txt
│ │ │ │ ├── css-guard-default-func.less
│ │ │ │ ├── css-guard-default-func.txt
│ │ │ │ ├── detached-ruleset-1.less
│ │ │ │ ├── detached-ruleset-1.txt
│ │ │ │ ├── detached-ruleset-2.less
│ │ │ │ ├── detached-ruleset-2.txt
│ │ │ │ ├── detached-ruleset-3.less
│ │ │ │ ├── detached-ruleset-3.txt
│ │ │ │ ├── detached-ruleset-5.less
│ │ │ │ ├── detached-ruleset-5.txt
│ │ │ │ ├── divide-mixed-units.less
│ │ │ │ ├── divide-mixed-units.txt
│ │ │ │ ├── extend-no-selector.less
│ │ │ │ ├── extend-no-selector.txt
│ │ │ │ ├── functions-1.less
│ │ │ │ ├── functions-1.txt
│ │ │ │ ├── functions-10-keyword.less
│ │ │ │ ├── functions-10-keyword.txt
│ │ │ │ ├── functions-11-operation.less
│ │ │ │ ├── functions-11-operation.txt
│ │ │ │ ├── functions-12-quoted.less
│ │ │ │ ├── functions-12-quoted.txt
│ │ │ │ ├── functions-13-selector.less
│ │ │ │ ├── functions-13-selector.txt
│ │ │ │ ├── functions-14-url.less
│ │ │ │ ├── functions-14-url.txt
│ │ │ │ ├── functions-15-value.less
│ │ │ │ ├── functions-15-value.txt
│ │ │ │ ├── functions-3-assignment.less
│ │ │ │ ├── functions-3-assignment.txt
│ │ │ │ ├── functions-4-call.less
│ │ │ │ ├── functions-4-call.txt
│ │ │ │ ├── functions-5-color-2.less
│ │ │ │ ├── functions-5-color-2.txt
│ │ │ │ ├── functions-5-color.less
│ │ │ │ ├── functions-5-color.txt
│ │ │ │ ├── functions-6-condition.less
│ │ │ │ ├── functions-6-condition.txt
│ │ │ │ ├── functions-7-dimension.less
│ │ │ │ ├── functions-7-dimension.txt
│ │ │ │ ├── functions-8-element.less
│ │ │ │ ├── functions-8-element.txt
│ │ │ │ ├── functions-9-expression.less
│ │ │ │ ├── functions-9-expression.txt
│ │ │ │ ├── import-missing.less
│ │ │ │ ├── import-missing.txt
│ │ │ │ ├── import-subfolder1.less
│ │ │ │ ├── import-subfolder1.txt
│ │ │ │ ├── imports/
│ │ │ │ │ ├── import-subfolder1.less
│ │ │ │ │ ├── import-test.less
│ │ │ │ │ └── subfolder/
│ │ │ │ │ └── mixin-not-defined.less
│ │ │ │ ├── javascript-undefined-var.less
│ │ │ │ ├── javascript-undefined-var.txt
│ │ │ │ ├── mixin-not-defined-2.less
│ │ │ │ ├── mixin-not-defined-2.txt
│ │ │ │ ├── mixin-not-defined.less
│ │ │ │ ├── mixin-not-defined.txt
│ │ │ │ ├── mixin-not-matched.less
│ │ │ │ ├── mixin-not-matched.txt
│ │ │ │ ├── mixin-not-matched2.less
│ │ │ │ ├── mixin-not-matched2.txt
│ │ │ │ ├── mixin-not-visible-in-scope-1.less
│ │ │ │ ├── mixin-not-visible-in-scope-1.txt
│ │ │ │ ├── mixins-guards-default-func-1.less
│ │ │ │ ├── mixins-guards-default-func-1.txt
│ │ │ │ ├── mixins-guards-default-func-2.less
│ │ │ │ ├── mixins-guards-default-func-2.txt
│ │ │ │ ├── mixins-guards-default-func-3.less
│ │ │ │ ├── mixins-guards-default-func-3.txt
│ │ │ │ ├── multiple-guards-on-css-selectors.less
│ │ │ │ ├── multiple-guards-on-css-selectors.txt
│ │ │ │ ├── multiple-guards-on-css-selectors2.less
│ │ │ │ ├── multiple-guards-on-css-selectors2.txt
│ │ │ │ ├── multiply-mixed-units.less
│ │ │ │ ├── multiply-mixed-units.txt
│ │ │ │ ├── namespace-property-not-found.less
│ │ │ │ ├── namespace-property-not-found.txt
│ │ │ │ ├── namespace-variable-not-found.less
│ │ │ │ ├── namespace-variable-not-found.txt
│ │ │ │ ├── namespacing-2.less
│ │ │ │ ├── namespacing-2.txt
│ │ │ │ ├── namespacing-3.less
│ │ │ │ ├── namespacing-3.txt
│ │ │ │ ├── namespacing-4.less
│ │ │ │ ├── namespacing-4.txt
│ │ │ │ ├── percentage-non-number-argument.less
│ │ │ │ ├── percentage-non-number-argument.txt
│ │ │ │ ├── plugin/
│ │ │ │ │ ├── plugin-error-2.js
│ │ │ │ │ ├── plugin-error-3.js
│ │ │ │ │ └── plugin-error.js
│ │ │ │ ├── plugin-1.less
│ │ │ │ ├── plugin-1.txt
│ │ │ │ ├── plugin-2.less
│ │ │ │ ├── plugin-2.txt
│ │ │ │ ├── plugin-3.less
│ │ │ │ ├── plugin-3.txt
│ │ │ │ ├── property-in-root.less
│ │ │ │ ├── property-in-root.txt
│ │ │ │ ├── property-in-root2.less
│ │ │ │ ├── property-in-root2.txt
│ │ │ │ ├── property-in-root3.less
│ │ │ │ ├── property-in-root3.txt
│ │ │ │ ├── property-interp-not-defined.less
│ │ │ │ ├── property-interp-not-defined.txt
│ │ │ │ ├── property-undefined.less
│ │ │ │ ├── property-undefined.txt
│ │ │ │ ├── recursive-property.less
│ │ │ │ ├── recursive-property.txt
│ │ │ │ ├── recursive-variable.less
│ │ │ │ ├── recursive-variable.txt
│ │ │ │ ├── root-func-undefined-1.less
│ │ │ │ ├── root-func-undefined-1.txt
│ │ │ │ ├── root-func-undefined-2.less
│ │ │ │ ├── root-func-undefined-2.txt
│ │ │ │ ├── styles.config.cjs
│ │ │ │ ├── svg-gradient1.less
│ │ │ │ ├── svg-gradient1.txt
│ │ │ │ ├── svg-gradient2.less
│ │ │ │ ├── svg-gradient2.txt
│ │ │ │ ├── svg-gradient3.less
│ │ │ │ ├── svg-gradient3.txt
│ │ │ │ ├── svg-gradient4.less
│ │ │ │ ├── svg-gradient4.txt
│ │ │ │ ├── svg-gradient5.less
│ │ │ │ ├── svg-gradient5.txt
│ │ │ │ ├── svg-gradient6.less
│ │ │ │ ├── svg-gradient6.txt
│ │ │ │ ├── unit-function.less
│ │ │ │ └── unit-function.txt
│ │ │ └── parse/
│ │ │ ├── at-rules-unmatching-block.less
│ │ │ ├── at-rules-unmatching-block.txt
│ │ │ ├── bad-variable-declaration1.less
│ │ │ ├── bad-variable-declaration1.txt
│ │ │ ├── custom-property-unmatched-block-1.less
│ │ │ ├── custom-property-unmatched-block-1.txt
│ │ │ ├── custom-property-unmatched-block-2.less
│ │ │ ├── custom-property-unmatched-block-2.txt
│ │ │ ├── custom-property-unmatched-block-3.less
│ │ │ ├── custom-property-unmatched-block-3.txt
│ │ │ ├── detached-ruleset-6.less
│ │ │ ├── detached-ruleset-6.txt
│ │ │ ├── extend-not-at-end.less
│ │ │ ├── extend-not-at-end.txt
│ │ │ ├── import-malformed.less
│ │ │ ├── import-malformed.txt
│ │ │ ├── import-no-semi.less
│ │ │ ├── import-no-semi.txt
│ │ │ ├── import-subfolder2.less
│ │ │ ├── import-subfolder2.txt
│ │ │ ├── imports/
│ │ │ │ ├── import-subfolder2.less
│ │ │ │ └── subfolder/
│ │ │ │ └── parse-error-curly-bracket.less
│ │ │ ├── invalid-color-with-comment.less
│ │ │ ├── invalid-color-with-comment.txt
│ │ │ ├── mixed-mixin-definition-args-1.less
│ │ │ ├── mixed-mixin-definition-args-1.txt
│ │ │ ├── mixed-mixin-definition-args-2.less
│ │ │ ├── mixed-mixin-definition-args-2.txt
│ │ │ ├── mixins-guards-cond-expected.less
│ │ │ ├── mixins-guards-cond-expected.txt
│ │ │ ├── parens-error-1.less
│ │ │ ├── parens-error-1.txt
│ │ │ ├── parens-error-2.less
│ │ │ ├── parens-error-2.txt
│ │ │ ├── parens-error-3.less
│ │ │ ├── parens-error-3.txt
│ │ │ ├── parse-error-curly-bracket.less
│ │ │ ├── parse-error-curly-bracket.txt
│ │ │ ├── parse-error-media-no-block-1.less
│ │ │ ├── parse-error-media-no-block-1.txt
│ │ │ ├── parse-error-media-no-block-2.less
│ │ │ ├── parse-error-media-no-block-2.txt
│ │ │ ├── parse-error-media-no-block-3.less
│ │ │ ├── parse-error-media-no-block-3.txt
│ │ │ ├── parse-error-missing-bracket.less
│ │ │ ├── parse-error-missing-bracket.txt
│ │ │ ├── parse-error-missing-parens.less
│ │ │ ├── parse-error-missing-parens.txt
│ │ │ ├── parse-error-with-import.less
│ │ │ ├── parse-error-with-import.txt
│ │ │ ├── percentage-missing-space.less
│ │ │ ├── percentage-missing-space.txt
│ │ │ ├── property-asterisk-only-name.less
│ │ │ ├── property-asterisk-only-name.txt
│ │ │ ├── single-character.less
│ │ │ ├── single-character.txt
│ │ │ └── styles.config.cjs
│ │ └── tests-unit/
│ │ ├── at-rules/
│ │ │ ├── at-rules.css
│ │ │ └── at-rules.less
│ │ ├── at-rules-declarations/
│ │ │ ├── at-rules-declarations.css
│ │ │ └── at-rules-declarations.less
│ │ ├── at-rules-empty/
│ │ │ ├── at-rules-empty.css
│ │ │ └── at-rules-empty.less
│ │ ├── at-rules-empty-block/
│ │ │ ├── at-rules-empty-block.css
│ │ │ └── at-rules-empty-block.less
│ │ ├── at-rules-keyword-comments/
│ │ │ ├── at-rules-keyword-comments.css
│ │ │ └── at-rules-keyword-comments.less
│ │ ├── at-rules-targeted/
│ │ │ ├── at-rules-targeted.css
│ │ │ └── at-rules-targeted.less
│ │ ├── calc/
│ │ │ ├── calc.css
│ │ │ └── calc.less
│ │ ├── charsets/
│ │ │ ├── charsets.css
│ │ │ ├── charsets.less
│ │ │ └── import/
│ │ │ └── import-charset-test.less
│ │ ├── color-functions/
│ │ │ ├── alpha.css
│ │ │ ├── alpha.less
│ │ │ ├── basic.css
│ │ │ ├── basic.less
│ │ │ ├── comprehensive.css
│ │ │ ├── comprehensive.less
│ │ │ ├── formats.css
│ │ │ ├── formats.less
│ │ │ ├── modern-syntax.css
│ │ │ ├── modern-syntax.less
│ │ │ ├── modern.css
│ │ │ ├── modern.less
│ │ │ ├── operations.css
│ │ │ ├── operations.less
│ │ │ ├── rgba.css
│ │ │ └── rgba.less
│ │ ├── comments/
│ │ │ ├── comments.css
│ │ │ ├── comments.less
│ │ │ ├── comments2.css
│ │ │ └── comments2.less
│ │ ├── container/
│ │ │ ├── container.css
│ │ │ └── container.less
│ │ ├── css-3/
│ │ │ ├── css-3.css
│ │ │ └── css-3.less
│ │ ├── css-escapes/
│ │ │ ├── css-escapes.css
│ │ │ └── css-escapes.less
│ │ ├── css-grid/
│ │ │ ├── css-grid.css
│ │ │ └── css-grid.less
│ │ ├── css-guards/
│ │ │ ├── css-guards.css
│ │ │ └── css-guards.less
│ │ ├── detached-rulesets/
│ │ │ ├── detached-rulesets.css
│ │ │ └── detached-rulesets.less
│ │ ├── directives-bubbling/
│ │ │ ├── directives-bubbling.css
│ │ │ └── directives-bubbling.less
│ │ ├── empty/
│ │ │ ├── empty.css
│ │ │ └── empty.less
│ │ ├── extend/
│ │ │ ├── extend-clearfix.css
│ │ │ ├── extend-clearfix.less
│ │ │ ├── extend.css
│ │ │ └── extend.less
│ │ ├── extend-chaining/
│ │ │ ├── extend-chaining.css
│ │ │ └── extend-chaining.less
│ │ ├── extend-clearfix/
│ │ │ ├── extend-clearfix.css
│ │ │ └── extend-clearfix.less
│ │ ├── extend-exact/
│ │ │ ├── extend-exact.css
│ │ │ └── extend-exact.less
│ │ ├── extend-media/
│ │ │ ├── extend-media.css
│ │ │ └── extend-media.less
│ │ ├── extend-nest/
│ │ │ ├── extend-nest.css
│ │ │ └── extend-nest.less
│ │ ├── extend-selector/
│ │ │ ├── extend-selector.css
│ │ │ └── extend-selector.less
│ │ ├── extract-and-length/
│ │ │ ├── extract-and-length.css
│ │ │ └── extract-and-length.less
│ │ ├── functions/
│ │ │ ├── functions.css
│ │ │ └── functions.less
│ │ ├── functions-each/
│ │ │ ├── functions-each.css
│ │ │ └── functions-each.less
│ │ ├── ie-filters/
│ │ │ ├── ie-filters.css
│ │ │ └── ie-filters.less
│ │ ├── impor/
│ │ │ ├── impor.css
│ │ │ └── impor.less
│ │ ├── import/
│ │ │ ├── import/
│ │ │ │ ├── css-import.less
│ │ │ │ ├── deeper/
│ │ │ │ │ ├── deeper-2/
│ │ │ │ │ │ ├── url-import-2.less
│ │ │ │ │ │ └── url-import.less
│ │ │ │ │ ├── import-once-test-a.less
│ │ │ │ │ └── url-import.less
│ │ │ │ ├── import-and-relative-paths-test.less
│ │ │ │ ├── import-charset-test.less
│ │ │ │ ├── import-inline-invalid-css.less
│ │ │ │ ├── import-interpolation.less
│ │ │ │ ├── import-interpolation2.less
│ │ │ │ ├── import-once-test-c.less
│ │ │ │ ├── import-reference.less
│ │ │ │ ├── import-test-a.less
│ │ │ │ ├── import-test-b.less
│ │ │ │ ├── import-test-c.less
│ │ │ │ ├── import-test-d.css
│ │ │ │ ├── import-test-e.less
│ │ │ │ ├── import-test-f.less
│ │ │ │ ├── imports/
│ │ │ │ │ ├── font.less
│ │ │ │ │ └── logo.less
│ │ │ │ ├── interpolation-vars.less
│ │ │ │ ├── invalid-css.less
│ │ │ │ ├── json/
│ │ │ │ │ ├── index.json
│ │ │ │ │ └── index.less
│ │ │ │ ├── layer-import-2.css
│ │ │ │ ├── layer-import-3.css
│ │ │ │ ├── layer-import-4.css
│ │ │ │ ├── layer-import-5.css
│ │ │ │ ├── layer-import.less
│ │ │ │ └── urls.less
│ │ │ ├── import-inline.css
│ │ │ ├── import-inline.less
│ │ │ ├── import-interpolation.css
│ │ │ ├── import-interpolation.less
│ │ │ ├── import-module.css
│ │ │ ├── import-module.less
│ │ │ ├── import-once.css
│ │ │ ├── import-once.less
│ │ │ ├── import-reference-issues/
│ │ │ │ ├── appender-reference-1968.less
│ │ │ │ ├── comments-2991.less
│ │ │ │ ├── global-scope-import.less
│ │ │ │ ├── global-scope-nested.less
│ │ │ │ ├── mixin-1968.less
│ │ │ │ ├── multiple-import-nested.less
│ │ │ │ ├── multiple-import.less
│ │ │ │ ├── simple-mixin.css
│ │ │ │ └── simple-ruleset-2162.less
│ │ │ ├── import-reference-issues.css
│ │ │ ├── import-reference-issues.less
│ │ │ ├── import-reference.css
│ │ │ ├── import-reference.less
│ │ │ ├── import-remote.css
│ │ │ ├── import-remote.less
│ │ │ ├── import.css
│ │ │ ├── import.less
│ │ │ └── styles.config.cjs
│ │ ├── javascript/
│ │ │ ├── javascript.css
│ │ │ ├── javascript.less
│ │ │ └── styles.config.cjs
│ │ ├── layer/
│ │ │ ├── assets/
│ │ │ │ └── import/
│ │ │ │ └── layer-import.less
│ │ │ ├── import/
│ │ │ │ └── layer-import.less
│ │ │ ├── layer.css
│ │ │ └── layer.less
│ │ ├── lazy-eval/
│ │ │ ├── lazy-eval.css
│ │ │ └── lazy-eval.less
│ │ ├── media/
│ │ │ ├── media.css
│ │ │ └── media.less
│ │ ├── merge/
│ │ │ ├── merge.css
│ │ │ └── merge.less
│ │ ├── mixin-noparens/
│ │ │ ├── mixin-noparens.css
│ │ │ └── mixin-noparens.less
│ │ ├── mixins/
│ │ │ ├── maps.css
│ │ │ ├── maps.less
│ │ │ ├── mixins-advanced.css
│ │ │ ├── mixins-advanced.less
│ │ │ ├── mixins.css
│ │ │ └── mixins.less
│ │ ├── mixins-closure/
│ │ │ ├── mixins-closure.css
│ │ │ └── mixins-closure.less
│ │ ├── mixins-guards/
│ │ │ ├── mixins-guards.css
│ │ │ └── mixins-guards.less
│ │ ├── mixins-guards-default-func/
│ │ │ ├── mixins-guards-default-func.css
│ │ │ └── mixins-guards-default-func.less
│ │ ├── mixins-important/
│ │ │ ├── mixins-important.css
│ │ │ └── mixins-important.less
│ │ ├── mixins-interpolated/
│ │ │ ├── mixins-interpolated.css
│ │ │ └── mixins-interpolated.less
│ │ ├── mixins-named-args/
│ │ │ ├── mixins-named-args.css
│ │ │ └── mixins-named-args.less
│ │ ├── mixins-nested/
│ │ │ ├── mixins-nested.css
│ │ │ └── mixins-nested.less
│ │ ├── mixins-pattern/
│ │ │ ├── mixins-pattern.css
│ │ │ └── mixins-pattern.less
│ │ ├── namespace-targeted/
│ │ │ ├── namespace-targeted.css
│ │ │ └── namespace-targeted.less
│ │ ├── nesting/
│ │ │ ├── nesting.css
│ │ │ └── nesting.less
│ │ ├── no-output/
│ │ │ ├── no-output.css
│ │ │ └── no-output.less
│ │ ├── operations/
│ │ │ ├── operations-advanced.css
│ │ │ ├── operations-advanced.less
│ │ │ ├── operations.css
│ │ │ └── operations.less
│ │ ├── parse-interpolation/
│ │ │ ├── parse-interpolation.css
│ │ │ └── parse-interpolation.less
│ │ ├── parser-property-interp/
│ │ │ ├── parser-property-interp.css
│ │ │ └── parser-property-interp.less
│ │ ├── parser-slashed-combinator/
│ │ │ ├── parser-slashed-combinator.css
│ │ │ └── parser-slashed-combinator.less
│ │ ├── permissive-parse/
│ │ │ ├── permissive-parse.css
│ │ │ └── permissive-parse.less
│ │ ├── plugi/
│ │ │ ├── plugi.css
│ │ │ └── plugi.less
│ │ ├── plugin/
│ │ │ ├── plugin.css
│ │ │ └── plugin.less
│ │ ├── plugin-module/
│ │ │ ├── plugin-module.css
│ │ │ └── plugin-module.less
│ │ ├── plugin-preeval/
│ │ │ ├── plugin-preeval.css
│ │ │ └── plugin-preeval.less
│ │ ├── property-accessors/
│ │ │ ├── property-accessors.css
│ │ │ └── property-accessors.less
│ │ ├── property-name-interp/
│ │ │ ├── property-name-interp.css
│ │ │ └── property-name-interp.less
│ │ ├── property-targeted/
│ │ │ ├── property-targeted.css
│ │ │ └── property-targeted.less
│ │ ├── rulesets/
│ │ │ ├── rulesets.css
│ │ │ └── rulesets.less
│ │ ├── scope/
│ │ │ ├── scope.css
│ │ │ └── scope.less
│ │ ├── selectors/
│ │ │ ├── selectors.css
│ │ │ └── selectors.less
│ │ ├── starting-style/
│ │ │ ├── starting-style.css
│ │ │ └── starting-style.less
│ │ ├── strings/
│ │ │ ├── strings.css
│ │ │ └── strings.less
│ │ ├── styles.config.cjs
│ │ ├── tailwind/
│ │ │ ├── tailwind.css
│ │ │ └── tailwind.less
│ │ ├── urls/
│ │ │ ├── actual.css
│ │ │ ├── assets/
│ │ │ │ └── nested-gradient-with-svg-gradient/
│ │ │ │ ├── mixin-consumer.less
│ │ │ │ └── svg-gradient-mixin.less
│ │ │ ├── css/
│ │ │ │ └── background.css
│ │ │ ├── import/
│ │ │ │ ├── import-and-relative-paths-test.less
│ │ │ │ ├── import-test-d.css
│ │ │ │ └── imports/
│ │ │ │ ├── font.less
│ │ │ │ └── logo.less
│ │ │ ├── nested-gradient-with-svg-gradient/
│ │ │ │ ├── mixin-consumer.less
│ │ │ │ └── svg-gradient-mixin.less
│ │ │ ├── urls.css
│ │ │ └── urls.less
│ │ ├── variables/
│ │ │ ├── variable-advanced.css
│ │ │ ├── variable-advanced.less
│ │ │ ├── variables.css
│ │ │ └── variables.less
│ │ ├── variables-in-at-rules/
│ │ │ ├── variables-in-at-rules.css
│ │ │ └── variables-in-at-rules.less
│ │ └── whitespace/
│ │ ├── whitespace.css
│ │ └── whitespace.less
│ └── test-import-module/
│ ├── one/
│ │ ├── 1.less
│ │ └── two/
│ │ ├── 2.less
│ │ └── three/
│ │ └── 3.less
│ └── package.json
├── pnpm-workspace.yaml
└── scripts/
├── bump-and-publish.js
├── post-merge-version-fix.js
├── publish-beta.js
└── test-release-automation.js
SYMBOL INDEX (622 symbols across 101 files)
FILE: packages/less/Gruntfile.cjs
function makeJob (line 91) | function makeJob(testName) {
FILE: packages/less/benchmark/benchmark-runner.js
function hrNow (line 81) | function hrNow() {
function runOnce (line 86) | function runOnce(callback) {
function runAll (line 107) | function runAll(i) {
function analyze (line 122) | function analyze(times, skipWarmup) {
function reportResults (line 159) | function reportResults() {
FILE: packages/less/benchmark/index.js
function nextRun (line 26) | function nextRun() {
function finish (line 55) | function finish() {
FILE: packages/less/build/rollup.js
function moduleShim (line 22) | function moduleShim() {
function inlinePackageVersion (line 39) | function inlinePackageVersion() {
function buildLessNodeCjs (line 58) | async function buildLessNodeCjs() {
function buildBrowser (line 79) | async function buildBrowser() {
function build (line 135) | async function build() {
FILE: packages/less/lib/less-browser/bootstrap.js
function resolveOrReject (line 37) | function resolveOrReject(data) {
FILE: packages/less/lib/less-browser/error-reporting.js
function errorHTML (line 6) | function errorHTML(e, rootHref) {
function removeErrorHTML (line 109) | function removeErrorHTML(path) {
function removeErrorConsole (line 116) | function removeErrorConsole() {
function removeError (line 120) | function removeError(path) {
function errorConsole (line 130) | function errorConsole(e, rootHref) {
function error (line 156) | function error(e, rootHref) {
FILE: packages/less/lib/less-browser/file-manager.js
method alwaysMakePathsAbsolute (line 10) | alwaysMakePathsAbsolute() {
method join (line 14) | join(basePath, laterPath) {
method doXHR (line 21) | doXHR(url, type, callback, errback) {
method supports (line 59) | supports() {
method clearFileCache (line 63) | clearFileCache() {
method loadFile (line 67) | loadFile(filename, currentDirectory, options) {
FILE: packages/less/lib/less-browser/image-size.js
function imageSize (line 5) | function imageSize() {
FILE: packages/less/lib/less-browser/index.js
function clone (line 44) | function clone(obj) {
function loadStyles (line 54) | function loadStyles(modifyVars) {
function loadStyleSheet (line 84) | function loadStyleSheet(sheet, callback, reload, remaining, modifyVars) {
function loadStyleSheets (line 146) | function loadStyleSheets(callback, reload, modifyVars) {
function initRunningMode (line 152) | function initRunningMode() {
FILE: packages/less/lib/less-browser/plugin-loader.js
method loadPlugin (line 15) | loadPlugin(filename, basePath, context, environment, fileManager) {
FILE: packages/less/lib/less-browser/utils.js
function extractId (line 3) | function extractId(href) {
function addDataAttr (line 16) | function addDataAttr(options, tag) {
FILE: packages/less/lib/less-node/environment.js
class SourceMapGeneratorFallback (line 5) | class SourceMapGeneratorFallback {
method addMapping (line 6) | addMapping(){}
method setSourceContent (line 7) | setSourceContent(){}
method toJSON (line 8) | toJSON(){
FILE: packages/less/lib/less-node/file-manager.js
method supports (line 10) | supports() {
method supportsSync (line 14) | supportsSync() {
method loadFile (line 18) | loadFile(filename, currentDirectory, options, environment, callback) {
method loadFileSync (line 150) | loadFileSync(filename, currentDirectory, options, environment) {
FILE: packages/less/lib/less-node/image-size.js
function imageSize (line 10) | function imageSize(functionContext, filePathNode) {
FILE: packages/less/lib/less-node/plugin-loader.js
method loadPlugin (line 27) | loadPlugin(filename, basePath, context, environment, fileManager) {
method loadPluginSync (line 55) | loadPluginSync(filename, basePath, context, environment, fileManager) {
FILE: packages/less/lib/less-node/url-file-manager.js
method supports (line 18) | supports(filename, currentDirectory, options, environment) {
method loadFile (line 22) | loadFile(filename, currentDirectory, options, environment) {
FILE: packages/less/lib/less/contexts.js
function isPathRelative (line 157) | function isPathRelative(path) {
function isPathLocalRelative (line 161) | function isPathLocalRelative(path) {
FILE: packages/less/lib/less/deprecation.js
constant MAX_REPETITIONS (line 39) | const MAX_REPETITIONS = 5;
class DeprecationHandler (line 41) | class DeprecationHandler {
method constructor (line 42) | constructor() {
method shouldWarn (line 48) | shouldWarn(deprecationId) {
method summarize (line 56) | summarize(logger) {
FILE: packages/less/lib/less/environment/abstract-file-manager.js
class AbstractFileManager (line 1) | class AbstractFileManager {
method getPath (line 2) | getPath(filename) {
method tryAppendExtension (line 17) | tryAppendExtension(path, ext) {
method tryAppendLessExtension (line 21) | tryAppendLessExtension(path) {
method supportsSync (line 25) | supportsSync() {
method alwaysMakePathsAbsolute (line 29) | alwaysMakePathsAbsolute() {
method isPathAbsolute (line 33) | isPathAbsolute(filename) {
method join (line 38) | join(basePath, laterPath) {
method pathDiff (line 45) | pathDiff(url, baseUrl) {
method extractUrlParts (line 81) | extractUrlParts(url, baseUrl) {
FILE: packages/less/lib/less/environment/abstract-plugin-loader.js
class AbstractPluginLoader (line 4) | class AbstractPluginLoader {
method constructor (line 5) | constructor() {
method evalPlugin (line 12) | evalPlugin(contents, context, imports, pluginOptions, fileInfo) {
method trySetOptions (line 119) | trySetOptions(plugin, filename, name, options) {
method validatePlugin (line 133) | validatePlugin(plugin, filename, name) {
method compareVersion (line 153) | compareVersion(aVersion, bVersion) {
method versionToString (line 166) | versionToString(version) {
method printUsage (line 174) | printUsage(plugins) {
FILE: packages/less/lib/less/environment/environment-api.ts
type Environment (line 1) | interface Environment {
FILE: packages/less/lib/less/environment/environment.js
class Environment (line 8) | class Environment {
method constructor (line 9) | constructor(externalEnvironment, fileManagers) {
method getFileManager (line 28) | getFileManager(filename, currentDirectory, options, environment, isSyn...
method addFileManager (line 50) | addFileManager(fileManager) {
method clearFileManagers (line 54) | clearFileManagers() {
FILE: packages/less/lib/less/environment/file-manager-api.ts
type FileManager (line 3) | interface FileManager {
FILE: packages/less/lib/less/functions/boolean.js
function boolean (line 4) | function boolean(condition) {
function If (line 12) | function If(context, condition, trueValue, falseValue) {
function isdefined (line 18) | function isdefined(context, variable) {
FILE: packages/less/lib/less/functions/color-blending.js
function colorBlend (line 6) | function colorBlend(mode, color1, color2) {
FILE: packages/less/lib/less/functions/color.js
function clamp (line 9) | function clamp(val) {
function hsla (line 12) | function hsla(origColor, hsl) {
function toHSL (line 24) | function toHSL(color) {
function toHSV (line 32) | function toHSV(color) {
function number (line 40) | function number(n) {
function scaled (line 52) | function scaled(n, size) {
function hue (line 127) | function hue(h) {
FILE: packages/less/lib/less/functions/function-caller.js
class functionCaller (line 3) | class functionCaller {
method constructor (line 4) | constructor(name, context, index, currentFileInfo) {
method isValid (line 13) | isValid() {
method call (line 17) | call(args) {
FILE: packages/less/lib/less/functions/function-registry.js
function makeRegistry (line 1) | function makeRegistry( base ) {
FILE: packages/less/lib/less/functions/svg.js
function throwArgumentDescriptor (line 22) | function throwArgumentDescriptor() {
FILE: packages/less/lib/less/import-manager.js
class ImportManager (line 17) | class ImportManager {
method constructor (line 18) | constructor(less, context, rootFileInfo) {
method push (line 40) | push(path, tryAppendExtension, currentFileInfo, importOptions, callbac...
FILE: packages/less/lib/less/parse-tree.js
class ParseTree (line 6) | class ParseTree {
method constructor (line 7) | constructor(root, imports) {
method toCSS (line 12) | toCSS(options) {
FILE: packages/less/lib/less/parser/parser-input.js
function skipWhitespace (line 36) | function skipWhitespace(length) {
FILE: packages/less/lib/less/parser/parser.js
function error (line 51) | function error(msg, type) {
function warn (line 71) | function warn(msg, index, type, deprecationId) {
function expect (line 89) | function expect(arg, msg) {
function expectChar (line 102) | function expectChar(arg, msg) {
function getDebugInfo (line 109) | function getDebugInfo(index) {
function parseNode (line 126) | function parseNode(str, parseList, callback) {
function f (line 533) | function f(parse, stop) {
function condition (line 541) | function condition() {
function testCurrentChar (line 1708) | function testCurrentChar() {
function or (line 2386) | function or() {
function insideCondition (line 2410) | function insideCondition() {
function and (line 2417) | function and() {
function tryConditionFollowedByParenthesis (line 2456) | function tryConditionFollowedByParenthesis(me) {
function match (line 2639) | function match(re) {
FILE: packages/less/lib/less/plugin-manager.js
class PluginManager (line 4) | class PluginManager {
method constructor (line 5) | constructor(less) {
method addPlugins (line 21) | addPlugins(plugins) {
method addPlugin (line 34) | addPlugin(plugin, filename, functionRegistry) {
method get (line 48) | get(filename) {
method addVisitor (line 57) | addVisitor(visitor) {
method addPreProcessor (line 66) | addPreProcessor(preProcessor, priority) {
method addPostProcessor (line 81) | addPostProcessor(postProcessor, priority) {
method addFileManager (line 95) | addFileManager(manager) {
method getPreProcessors (line 104) | getPreProcessors() {
method getPostProcessors (line 117) | getPostProcessors() {
method getVisitors (line 130) | getVisitors() {
method visitor (line 134) | visitor() {
method getFileManagers (line 153) | getFileManagers() {
FILE: packages/less/lib/less/source-map-builder.js
class SourceMapBuilder (line 2) | class SourceMapBuilder {
method constructor (line 3) | constructor(options) {
method toCSS (line 7) | toCSS(rootNode, options, imports) {
method getCSSAppendage (line 36) | getCSSAppendage() {
method getExternalSourceMap (line 56) | getExternalSourceMap() {
method setExternalSourceMap (line 60) | setExternalSourceMap(sourceMap) {
method isInline (line 64) | isInline() {
method getSourceMapURL (line 68) | getSourceMapURL() {
method getOutputFilename (line 72) | getOutputFilename() {
method getInputFilename (line 76) | getInputFilename() {
FILE: packages/less/lib/less/source-map-output.js
class SourceMapOutput (line 2) | class SourceMapOutput {
method constructor (line 3) | constructor(options) {
method removeBasepath (line 31) | removeBasepath(path) {
method normalizeFilename (line 42) | normalizeFilename(filename) {
method add (line 48) | add(chunk, fileInfo, index, mapLines) {
method isEmpty (line 110) | isEmpty() {
method toCSS (line 114) | toCSS(context) {
FILE: packages/less/lib/less/tree/anonymous.js
class Anonymous (line 5) | class Anonymous extends Node {
method type (line 6) | get type() { return 'Anonymous'; }
method constructor (line 16) | constructor(value, index, currentFileInfo, mapLines, rulesetLike, visi...
method eval (line 28) | eval() {
method compare (line 36) | compare(other) {
method isRulesetLike (line 41) | isRulesetLike() {
method genCSS (line 49) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/assignment.js
class Assignment (line 5) | class Assignment extends Node {
method type (line 6) | get type() { return 'Assignment'; }
method constructor (line 12) | constructor(key, val) {
method accept (line 19) | accept(visitor) {
method eval (line 27) | eval(context) {
method genCSS (line 38) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/atrule.js
class AtRule (line 24) | class AtRule extends Node {
method type (line 25) | get type() { return 'AtRule'; }
method constructor (line 37) | constructor(
method declarationsBlock (line 116) | declarationsBlock(rules, mergeable = false) {
method keywordList (line 128) | keywordList(rules) {
method accept (line 137) | accept(visitor) {
method isRulesetLike (line 151) | isRulesetLike() {
method isCharset (line 155) | isCharset() {
method genCSS (line 163) | genCSS(context, output) {
method eval (line 183) | eval(context) {
method evalRoot (line 225) | evalRoot(context, rules) {
method variable (line 276) | variable(name) {
method find (line 283) | find() {
method rulesets (line 290) | rulesets() {
method outputRuleset (line 302) | outputRuleset(context, output, rules) {
FILE: packages/less/lib/less/tree/attribute.js
class Attribute (line 5) | class Attribute extends Node {
method type (line 6) | get type() { return 'Attribute'; }
method constructor (line 14) | constructor(key, op, value, cif) {
method eval (line 26) | eval(context) {
method genCSS (line 39) | genCSS(context, output) {
method toCSS (line 47) | toCSS(context) {
FILE: packages/less/lib/less/tree/call.js
class Call (line 10) | class Call extends Node {
method type (line 11) | get type() { return 'Call'; }
method constructor (line 19) | constructor(name, args, index, currentFileInfo) {
method accept (line 29) | accept(visitor) {
method eval (line 50) | eval(context) {
method genCSS (line 118) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/color.js
class Color (line 10) | class Color extends Node {
method type (line 11) | get type() { return 'Color'; }
method constructor (line 18) | constructor(rgb, a, originalForm) {
method luma (line 60) | luma() {
method genCSS (line 74) | genCSS(context, output) {
method toCSS (line 83) | toCSS(context, doNotCompress) {
method operate (line 165) | operate(context, op, other) {
method toRGB (line 174) | toRGB() {
method toHSL (line 178) | toHSL() {
method toHSV (line 204) | toHSV() {
method toARGB (line 233) | toARGB() {
method compare (line 241) | compare(x) {
method fromKeyword (line 250) | static fromKeyword(keyword) {
function clamp (line 273) | function clamp(v, max) {
function toHex (line 278) | function toHex(v) {
FILE: packages/less/lib/less/tree/combinator.js
class Combinator (line 13) | class Combinator extends Node {
method type (line 14) | get type() { return 'Combinator'; }
method constructor (line 17) | constructor(value) {
method genCSS (line 32) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/comment.js
class Comment (line 7) | class Comment extends Node {
method type (line 8) | get type() { return 'Comment'; }
method constructor (line 16) | constructor(value, isLineComment, index, currentFileInfo) {
method genCSS (line 31) | genCSS(context, output) {
method isSilent (line 42) | isSilent(context) {
FILE: packages/less/lib/less/tree/condition.js
class Condition (line 5) | class Condition extends Node {
method type (line 6) | get type() { return 'Condition'; }
method constructor (line 15) | constructor(op, l, r, i, negate) {
method accept (line 25) | accept(visitor) {
method eval (line 36) | eval(context) {
FILE: packages/less/lib/less/tree/container.js
class Container (line 19) | class Container extends AtRule {
method type (line 20) | get type() { return 'Container'; }
method constructor (line 29) | constructor(value, features, index, currentFileInfo, visibilityInfo) {
method genCSS (line 55) | genCSS(context, output) {
method eval (line 65) | eval(context) {
FILE: packages/less/lib/less/tree/debug-info.js
function asComment (line 21) | function asComment(ctx) {
function asMediaQuery (line 34) | function asMediaQuery(ctx) {
function debugInfo (line 60) | function debugInfo(context, ctx, lineSeparator) {
FILE: packages/less/lib/less/tree/declaration.js
constant MATH (line 8) | const MATH = Constants.Math;
function evalName (line 15) | function evalName(context, name) {
class Declaration (line 27) | class Declaration extends Node {
method type (line 28) | get type() { return 'Declaration'; }
method constructor (line 40) | constructor(name, value, important, merge, index, currentFileInfo, inl...
method genCSS (line 63) | genCSS(context, output) {
method eval (line 78) | eval(context) {
method makeImportant (line 130) | makeImportant() {
FILE: packages/less/lib/less/tree/detached-ruleset.js
class DetachedRuleset (line 7) | class DetachedRuleset extends Node {
method type (line 8) | get type() { return 'DetachedRuleset'; }
method constructor (line 14) | constructor(ruleset, frames) {
method accept (line 23) | accept(visitor) {
method eval (line 31) | eval(context) {
method callEval (line 40) | callEval(context) {
FILE: packages/less/lib/less/tree/dimension.js
class Dimension (line 13) | class Dimension extends Node {
method type (line 14) | get type() { return 'Dimension'; }
method constructor (line 20) | constructor(value, unit) {
method accept (line 36) | accept(visitor) {
method eval (line 43) | eval(context) {
method toColor (line 47) | toColor() {
method genCSS (line 56) | genCSS(context, output) {
method operate (line 94) | operate(context, op, other) {
method compare (line 133) | compare(other) {
method unify (line 154) | unify() {
method convertTo (line 162) | convertTo(conversions) {
FILE: packages/less/lib/less/tree/element.js
class Element (line 7) | class Element extends Node {
method type (line 8) | get type() { return 'Element'; }
method constructor (line 18) | constructor(combinator, value, isVariable, index, currentFileInfo, vis...
method accept (line 39) | accept(visitor) {
method eval (line 48) | eval(context) {
method clone (line 56) | clone() {
method genCSS (line 68) | genCSS(context, output) {
method toCSS (line 73) | toCSS(context) {
FILE: packages/less/lib/less/tree/expression.js
class Expression (line 9) | class Expression extends Node {
method type (line 10) | get type() { return 'Expression'; }
method constructor (line 16) | constructor(value, noSpacing) {
method accept (line 31) | accept(visitor) {
method eval (line 36) | eval(context) {
method genCSS (line 80) | genCSS(context, output) {
method throwAwayComments (line 93) | throwAwayComments() {
FILE: packages/less/lib/less/tree/extend.js
class Extend (line 6) | class Extend extends Node {
method type (line 7) | get type() { return 'Extend'; }
method constructor (line 16) | constructor(selector, option, index, currentFileInfo, visibilityInfo) {
method accept (line 48) | accept(visitor) {
method eval (line 53) | eval(context) {
method clone (line 60) | clone(context) {
method findSelfSelectors (line 66) | findSelfSelectors(selectors) {
FILE: packages/less/lib/less/tree/import.js
class Import (line 33) | class Import extends Node {
method type (line 34) | get type() { return 'Import'; }
method constructor (line 44) | constructor(path, features, options, index, currentFileInfo, visibilit...
method accept (line 85) | accept(visitor) {
method genCSS (line 99) | genCSS(context, output) {
method getPath (line 112) | getPath() {
method isVariableImport (line 119) | isVariableImport() {
method evalForImport (line 132) | evalForImport(context) {
method evalPath (line 143) | evalPath(context) {
method eval (line 164) | eval(context) {
method doEval (line 179) | doEval(context) {
FILE: packages/less/lib/less/tree/javascript.js
class JavaScript (line 8) | class JavaScript extends JsEvalNode {
method type (line 9) | get type() { return 'JavaScript'; }
method constructor (line 17) | constructor(string, escaped, index, currentFileInfo) {
method eval (line 29) | eval(context) {
FILE: packages/less/lib/less/tree/js-eval-node.js
class JsEvalNode (line 6) | class JsEvalNode extends Node {
method evaluateJavaScript (line 12) | evaluateJavaScript(expression, context) {
method jsify (line 65) | jsify(obj) {
FILE: packages/less/lib/less/tree/keyword.js
class Keyword (line 6) | class Keyword extends Node {
method type (line 7) | get type() { return 'Keyword'; }
method constructor (line 10) | constructor(value) {
method genCSS (line 19) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/media.js
class Media (line 12) | class Media extends AtRule {
method type (line 13) | get type() { return 'Media'; }
method constructor (line 22) | constructor(value, features, index, currentFileInfo, visibilityInfo) {
method genCSS (line 45) | genCSS(context, output) {
method eval (line 55) | eval(context) {
FILE: packages/less/lib/less/tree/merge-rules.js
function mergeRules (line 11) | function mergeRules(rules) {
FILE: packages/less/lib/less/tree/mixin-call.js
class MixinCall (line 25) | class MixinCall extends Node {
method type (line 26) | get type() { return 'MixinCall'; }
method constructor (line 35) | constructor(elements, args, index, currentFileInfo, important) {
method accept (line 50) | accept(visitor) {
method eval (line 63) | eval(context) {
method _setVisibilityToReplacement (line 249) | _setVisibilityToReplacement(replacement) {
method format (line 263) | format(args) {
FILE: packages/less/lib/less/tree/mixin-definition.js
class Definition (line 29) | class Definition extends Ruleset {
method type (line 30) | get type() { return 'MixinDefinition'; }
method constructor (line 41) | constructor(name, params, rules, condition, variadic, frames, visibili...
method accept (line 79) | accept(visitor) {
method evalParams (line 96) | evalParams(context, mixinEnv, args, evaldArguments) {
method makeImportant (line 197) | makeImportant() {
method eval (line 213) | eval(context) {
method evalCall (line 223) | evalCall(context, args, important) {
method matchCondition (line 251) | matchCondition(args, context) {
method matchArgs (line 268) | matchArgs(args, context) {
FILE: packages/less/lib/less/tree/namespace-value.js
class NamespaceValue (line 8) | class NamespaceValue extends Node {
method type (line 9) | get type() { return 'NamespaceValue'; }
method constructor (line 17) | constructor(ruleCall, lookups, index, fileInfo) {
method eval (line 29) | eval(context) {
FILE: packages/less/lib/less/tree/negative.js
class Negative (line 7) | class Negative extends Node {
method type (line 8) | get type() { return 'Negative'; }
method constructor (line 11) | constructor(node) {
method genCSS (line 20) | genCSS(context, output) {
method eval (line 29) | eval(context) {
FILE: packages/less/lib/less/tree/nested-at-rule.js
method isRulesetLike (line 42) | isRulesetLike() {
method accept (line 47) | accept(visitor) {
method evalTop (line 89) | evalTop(context) {
method evalNested (line 113) | evalNested(context) {
method permute (line 168) | permute(arr) {
method bubbleSelectors (line 187) | bubbleSelectors(selectors) {
FILE: packages/less/lib/less/tree/node.js
class Node (line 69) | class Node {
method type (line 70) | get type() { return ''; }
method constructor (line 72) | constructor() {
method currentFileInfo (line 92) | get currentFileInfo() {
method index (line 96) | get index() {
method setParent (line 104) | setParent(nodes, parent) {
method getIndex (line 120) | getIndex() {
method fileInfo (line 125) | fileInfo() {
method isRulesetLike (line 130) | isRulesetLike() { return false; }
method toCSS (line 136) | toCSS(context) {
method genCSS (line 154) | genCSS(context, output) {
method accept (line 161) | accept(visitor) {
method eval (line 169) | eval(context) { return this; }
method _operate (line 178) | _operate(context, op, a, b) {
method fround (line 192) | fround(context, value) {
method compare (line 203) | static compare(a, b) {
method numericCompare (line 245) | static numericCompare(a, b) {
method blocksVisibility (line 252) | blocksVisibility() {
method addVisibilityBlock (line 259) | addVisibilityBlock() {
method removeVisibilityBlock (line 266) | removeVisibilityBlock() {
method ensureVisibility (line 273) | ensureVisibility() {
method ensureInvisibility (line 277) | ensureInvisibility() {
method isVisible (line 282) | isVisible() {
method visibilityInfo (line 287) | visibilityInfo() {
method copyVisibilityInfo (line 295) | copyVisibilityInfo(info) {
FILE: packages/less/lib/less/tree/operation.js
constant MATH (line 7) | const MATH = Constants.Math;
class Operation (line 9) | class Operation extends Node {
method type (line 10) | get type() { return 'Operation'; }
method constructor (line 17) | constructor(op, operands, isSpaced) {
method accept (line 25) | accept(visitor) {
method eval (line 33) | eval(context) {
method genCSS (line 68) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/paren.js
class Paren (line 5) | class Paren extends Node {
method type (line 6) | get type() { return 'Paren'; }
method constructor (line 9) | constructor(node) {
method genCSS (line 20) | genCSS(context, output) {
method eval (line 30) | eval(context) {
FILE: packages/less/lib/less/tree/property.js
class Property (line 7) | class Property extends Node {
method type (line 8) | get type() { return 'Property'; }
method constructor (line 15) | constructor(name, index, currentFileInfo) {
method eval (line 28) | eval(context) {
method find (line 87) | find(obj, fun) {
FILE: packages/less/lib/less/tree/query-in-parens.js
class QueryInParens (line 5) | class QueryInParens extends Node {
method type (line 6) | get type() { return 'QueryInParens'; }
method constructor (line 16) | constructor(op, l, m, op2, r, i) {
method accept (line 28) | accept(visitor) {
method eval (line 37) | eval(context) {
method genCSS (line 53) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/quoted.js
class Quoted (line 7) | class Quoted extends Node {
method type (line 8) | get type() { return 'Quoted'; }
method constructor (line 17) | constructor(str, content, escaped, index, currentFileInfo) {
method genCSS (line 39) | genCSS(context, output) {
method containsVariables (line 50) | containsVariables() {
method eval (line 55) | eval(context) {
method compare (line 101) | compare(other) {
FILE: packages/less/lib/less/tree/ruleset.js
class Ruleset (line 39) | class Ruleset extends Node {
method type (line 40) | get type() { return 'Ruleset'; }
method constructor (line 48) | constructor(selectors, rules, strictImports, visibilityInfo) {
method isRulesetLike (line 89) | isRulesetLike() { return true; }
method accept (line 92) | accept(visitor) {
method eval (line 104) | eval(context) {
method evalImports (line 291) | evalImports(context) {
method makeImportant (line 314) | makeImportant() {
method matchArgs (line 327) | matchArgs(args) {
method matchCondition (line 335) | matchCondition(args, context) {
method resetCache (line 349) | resetCache() {
method variables (line 356) | variables() {
method properties (line 379) | properties() {
method variable (line 400) | variable(name) {
method property (line 408) | property(name) {
method lastDeclaration (line 415) | lastDeclaration() {
method parseValue (line 425) | parseValue(toParse) {
method rulesets (line 467) | rulesets() {
method prependRule (line 488) | prependRule(rule) {
method find (line 504) | find(selector, self, filter) {
method genCSS (line 545) | genCSS(context, output) {
method joinSelectors (line 671) | joinSelectors(paths, context, selectors) {
method joinSelector (line 682) | joinSelector(paths, context, selector) {
FILE: packages/less/lib/less/tree/selector.js
class Selector (line 10) | class Selector extends Node {
method type (line 11) | get type() { return 'Selector'; }
method constructor (line 21) | constructor(elements, extendList, condition, index, currentFileInfo, v...
method accept (line 42) | accept(visitor) {
method createDerived (line 59) | createDerived(elements, extendList, evaldCondition) {
method getElements (line 72) | getElements(els) {
method createEmptySelectors (line 95) | createEmptySelectors() {
method match (line 105) | match(other) {
method mixinElements (line 128) | mixinElements() {
method isJustParentSelector (line 149) | isJustParentSelector() {
method eval (line 157) | eval(context) {
method genCSS (line 185) | genCSS(context, output) {
method getIsOutput (line 196) | getIsOutput() {
FILE: packages/less/lib/less/tree/unicode-descriptor.js
class UnicodeDescriptor (line 4) | class UnicodeDescriptor extends Node {
method type (line 5) | get type() { return 'UnicodeDescriptor'; }
method constructor (line 8) | constructor(value) {
FILE: packages/less/lib/less/tree/unit.js
class Unit (line 8) | class Unit extends Node {
method type (line 9) | get type() { return 'Unit'; }
method constructor (line 16) | constructor(numerator, denominator, backupUnit) {
method clone (line 30) | clone() {
method genCSS (line 38) | genCSS(context, output) {
method toString (line 50) | toString() {
method compare (line 62) | compare(other) {
method is (line 67) | is(unitString) {
method isLength (line 71) | isLength() {
method isEmpty (line 75) | isEmpty() {
method isSingular (line 79) | isSingular() {
method map (line 84) | map(callback) {
method usedUnits (line 97) | usedUnits() {
method cancel (line 128) | cancel() {
FILE: packages/less/lib/less/tree/url.js
function escapePath (line 9) | function escapePath(path) {
class URL (line 13) | class URL extends Node {
method type (line 14) | get type() { return 'Url'; }
method constructor (line 22) | constructor(val, index, currentFileInfo, isEvald) {
method accept (line 32) | accept(visitor) {
method genCSS (line 40) | genCSS(context, output) {
method eval (line 47) | eval(context) {
FILE: packages/less/lib/less/tree/value.js
class Value (line 5) | class Value extends Node {
method type (line 6) | get type() { return 'Value'; }
method constructor (line 9) | constructor(value) {
method accept (line 23) | accept(visitor) {
method eval (line 33) | eval(context) {
method genCSS (line 48) | genCSS(context, output) {
FILE: packages/less/lib/less/tree/variable-call.js
class VariableCall (line 9) | class VariableCall extends Node {
method type (line 10) | get type() { return 'VariableCall'; }
method constructor (line 17) | constructor(variable, index, currentFileInfo) {
method eval (line 29) | eval(context) {
FILE: packages/less/lib/less/tree/variable.js
class Variable (line 7) | class Variable extends Node {
method type (line 8) | get type() { return 'Variable'; }
method constructor (line 15) | constructor(name, index, currentFileInfo) {
method eval (line 28) | eval(context) {
method find (line 76) | find(obj, fun) {
FILE: packages/less/lib/less/utils.js
function getLocation (line 5) | function getLocation(index, inputStream) {
function copyArray (line 24) | function copyArray(arr) {
function clone (line 35) | function clone(obj) {
function defaults (line 45) | function defaults(obj1, obj2) {
function copyOptions (line 57) | function copyOptions(obj1, obj2) {
function merge (line 101) | function merge(obj1, obj2) {
function flattenArray (line 110) | function flattenArray(arr, result = []) {
function isNullOrUndefined (line 124) | function isNullOrUndefined(val) {
FILE: packages/less/lib/less/visitors/extend-visitor.js
class ExtendFinderVisitor (line 12) | class ExtendFinderVisitor {
method constructor (line 13) | constructor() {
method run (line 19) | run(root) {
method visitDeclaration (line 25) | visitDeclaration(declNode, visitArgs) {
method visitMixinDefinition (line 29) | visitMixinDefinition(mixinDefinitionNode, visitArgs) {
method visitRuleset (line 33) | visitRuleset(rulesetNode, visitArgs) {
method visitRulesetOut (line 81) | visitRulesetOut(rulesetNode) {
method visitMedia (line 87) | visitMedia(mediaNode, visitArgs) {
method visitMediaOut (line 92) | visitMediaOut(mediaNode) {
method visitAtRule (line 96) | visitAtRule(atRuleNode, visitArgs) {
method visitAtRuleOut (line 101) | visitAtRuleOut(atRuleNode) {
class ProcessExtendsVisitor (line 106) | class ProcessExtendsVisitor {
method constructor (line 107) | constructor() {
method run (line 111) | run(root) {
method checkExtendsForNonMatched (line 123) | checkExtendsForNonMatched(extendList) {
method doExtendChaining (line 146) | doExtendChaining(extendsList, extendsListTarget, iterationCount) {
method visitDeclaration (line 248) | visitDeclaration(ruleNode, visitArgs) {
method visitMixinDefinition (line 252) | visitMixinDefinition(mixinDefinitionNode, visitArgs) {
method visitSelector (line 256) | visitSelector(selectorNode, visitArgs) {
method visitRuleset (line 260) | visitRuleset(rulesetNode, visitArgs) {
method findMatch (line 298) | findMatch(extend, haystackSelectorPath) {
method isElementValuesEqual (line 376) | isElementValuesEqual(elementValue1, elementValue2) {
method extendSelector (line 415) | extendSelector(matches, selectorPath, replacementSelector, isVisible) {
method visitMedia (line 482) | visitMedia(mediaNode, visitArgs) {
method visitMediaOut (line 488) | visitMediaOut(mediaNode) {
method visitAtRule (line 493) | visitAtRule(atRuleNode, visitArgs) {
method visitAtRuleOut (line 499) | visitAtRuleOut(atRuleNode) {
FILE: packages/less/lib/less/visitors/import-sequencer.js
class ImportSequencer (line 1) | class ImportSequencer {
method constructor (line 2) | constructor(onSequencerEmpty) {
method addImport (line 9) | addImport(callback) {
method addVariableImport (line 24) | addVariableImport(callback) {
method tryRun (line 28) | tryRun() {
FILE: packages/less/lib/less/visitors/join-selector-visitor.js
class JoinSelectorVisitor (line 7) | class JoinSelectorVisitor {
method constructor (line 8) | constructor() {
method run (line 13) | run(root) {
method visitDeclaration (line 17) | visitDeclaration(declNode, visitArgs) {
method visitMixinDefinition (line 21) | visitMixinDefinition(mixinDefinitionNode, visitArgs) {
method visitRuleset (line 25) | visitRuleset(rulesetNode, visitArgs) {
method visitRulesetOut (line 44) | visitRulesetOut(rulesetNode) {
method visitMedia (line 48) | visitMedia(mediaNode, visitArgs) {
method visitAtRule (line 53) | visitAtRule(atRuleNode, visitArgs) {
FILE: packages/less/lib/less/visitors/set-tree-visibility-visitor.js
class SetTreeVisibilityVisitor (line 3) | class SetTreeVisibilityVisitor {
method constructor (line 5) | constructor(visible) {
method run (line 10) | run(root) {
method visitArray (line 18) | visitArray(nodes) {
method visit (line 35) | visit(node) {
FILE: packages/less/lib/less/visitors/to-css-visitor.js
class CSSVisitorUtils (line 9) | class CSSVisitorUtils {
method constructor (line 10) | constructor(context) {
method containsSilentNonBlockedChild (line 15) | containsSilentNonBlockedChild(bodyRules) {
method keepOnlyVisibleChilds (line 31) | keepOnlyVisibleChilds(owner) {
method isEmpty (line 37) | isEmpty(owner) {
method hasVisibleSelector (line 42) | hasVisibleSelector(rulesetNode) {
method resolveVisibility (line 47) | resolveVisibility(node) {
method isVisibleRuleset (line 69) | isVisibleRuleset(rulesetNode) {
function hasFakeRuleset (line 154) | function hasFakeRuleset(atRuleNode) {
function getBodyRules (line 158) | function getBodyRules(atRuleNode) {
FILE: packages/less/lib/less/visitors/visitor.js
function _noop (line 6) | function _noop(node) {
function indexNodeTypes (line 10) | function indexNodeTypes(parent, ticker) {
class Visitor (line 33) | class Visitor {
method constructor (line 34) | constructor(implementation) {
method visit (line 45) | visit(node) {
method visitArray (line 101) | visitArray(nodes, nonReplacing) {
method flatten (line 131) | flatten(arr, out) {
FILE: packages/less/scripts/postinstall.js
function isDevelopmentEnvironment (line 10) | function isDevelopmentEnvironment() {
function installPlaywrightBrowsers (line 28) | function installPlaywrightBrowsers() {
FILE: packages/less/test/browser/common.js
function extractId (line 129) | function extractId(href) {
FILE: packages/less/test/browser/generator/generate.cjs
function runSerial (line 29) | function runSerial(tasks) {
FILE: packages/less/test/browser/generator/generate.js
function runSerial (line 33) | function runSerial(tasks) {
FILE: packages/less/test/browser/generator/utils.cjs
function forceCovertToBrowserPath (line 8) | function forceCovertToBrowserPath (path) {
FILE: packages/less/test/exports/webpack-browser.cjs
function run (line 11) | async function run() {
FILE: packages/less/test/index.js
function testHttpRedirects (line 74) | function testHttpRedirects() {
function testImportRemote (line 104) | function testImportRemote() {
FILE: packages/less/test/less-test.js
method info (line 17) | info(msg) {
method warn (line 22) | warn(msg) {
method error (line 25) | error(msg) {
function queue (line 42) | function queue(func) {
function release (line 50) | function release() {
function validateSourcemapMappings (line 76) | function validateSourcemapMappings(sourcemap, lessFile, compiledCSS) {
function testSourcemap (line 145) | function testSourcemap(name, err, compiledLess, doReplacements, sourcema...
function testSourcemapWithoutUrlAnnotation (line 243) | function testSourcemapWithoutUrlAnnotation(name, err, compiledLess, doRe...
function testEmptySourcemap (line 270) | function testEmptySourcemap(name, err, compiledLess, doReplacements, sou...
function testSourcemapWithVariableInSelector (line 286) | function testSourcemapWithVariableInSelector(name, err, compiledLess, do...
function testImports (line 308) | function testImports(name, err, compiledLess, doReplacements, sourcemap,...
function testErrors (line 343) | function testErrors(name, err, compiledLess, doReplacements, sourcemap, ...
function testTypeErrors (line 364) | function testTypeErrors(name, err, compiledLess, doReplacements, sourcem...
function testJSImport (line 387) | function testJSImport() {
function globalReplacements (line 404) | function globalReplacements(input, directory, filename) {
function checkGlobalLeaks (line 448) | function checkGlobalLeaks() {
function testSyncronous (line 454) | function testSyncronous(options, filenameNoExtension) {
function runTestSet (line 475) | function runTestSet(options, foldername, verifyFunction, nameModifier, d...
function runTestSetNormalOnly (line 488) | function runTestSetNormalOnly(options, foldername, verifyFunction, nameM...
function runTestSetInternal (line 492) | function runTestSetInternal(baseFolder, opts, foldername, verifyFunction...
function diff (line 692) | function diff(left, right) {
function fail (line 709) | function fail(msg) {
function difference (line 715) | function difference(msg, left, right) {
function ok (line 725) | function ok(msg) {
function finished (line 731) | function finished() {
function endTest (line 736) | function endTest() {
function contains (line 757) | function contains(fullArray, obj) {
function toCSS (line 766) | function toCSS(options, filePath, callback) {
function testNoOptions (line 802) | function testNoOptions() {
function testDisablePluginRule (line 817) | function testDisablePluginRule() {
FILE: packages/less/test/mocha-playwright/runner.js
constant TIMEOUT_MILLISECONDS (line 4) | const TIMEOUT_MILLISECONDS = 60000;
function initMocha (line 6) | function initMocha(reporter) {
function configureViewport (line 117) | function configureViewport(width, height, page) {
function handleConsole (line 127) | function handleConsole(msg) {
function prepareUrl (line 145) | function prepareUrl(filePath) {
function runner (line 156) | function runner({ file, reporter, timeout, width, height, args, executab...
FILE: packages/less/test/plugins/filemanager/index.cjs
function TestFileManager (line 4) | function TestFileManager() { }
FILE: packages/less/test/test-cjs-suite.cjs
function runTest (line 15) | function runTest(name, lessFile, expectedCss) {
FILE: packages/test-data/plugin/plugin-preeval.js
method install (line 2) | install({ tree: { Quoted }, visitors }, manager) {
FILE: scripts/bump-and-publish.js
constant ROOT_DIR (line 28) | const ROOT_DIR = path.resolve(__dirname, '..');
constant PACKAGES_DIR (line 29) | const PACKAGES_DIR = path.join(ROOT_DIR, 'packages');
function getPackageFiles (line 32) | function getPackageFiles() {
function readPackage (line 57) | function readPackage(pkgPath) {
function writePackage (line 62) | function writePackage(pkgPath, pkg) {
function parseVersion (line 68) | function parseVersion(version) {
function getCurrentVersion (line 79) | function getCurrentVersion() {
function getNpmVersion (line 86) | function getNpmVersion(packageName) {
function getNpmAlphaVersion (line 96) | function getNpmAlphaVersion(packageName) {
function getTargetVersion (line 107) | function getTargetVersion(currentVersion, npmVersion) {
function updateAllVersions (line 128) | function updateAllVersions(newVersion) {
function getPublishablePackages (line 145) | function getPublishablePackages() {
function main (line 165) | function main() {
FILE: scripts/post-merge-version-fix.js
constant ROOT_DIR (line 16) | const ROOT_DIR = path.resolve(__dirname, '..');
constant LESS_PKG_PATH (line 17) | const LESS_PKG_PATH = path.join(ROOT_DIR, 'packages', 'less', 'package.j...
function getCurrentBranch (line 20) | function getCurrentBranch() {
function getVersion (line 32) | function getVersion(pkgPath) {
function updateVersion (line 42) | function updateVersion(pkgPath, newVersion) {
function findLastAlphaVersion (line 49) | function findLastAlphaVersion() {
function updateAllVersions (line 80) | function updateAllVersions(newVersion) {
function main (line 99) | function main() {
FILE: scripts/publish-beta.js
constant ROOT_DIR (line 22) | const ROOT_DIR = path.resolve(__dirname, '..');
constant PACKAGES_DIR (line 23) | const PACKAGES_DIR = path.join(ROOT_DIR, 'packages');
function getPackageFiles (line 25) | function getPackageFiles() {
function getNpmVersion (line 34) | function getNpmVersion(name) {
function updateAllVersions (line 42) | function updateAllVersions(version) {
function getPublishablePackages (line 52) | function getPublishablePackages() {
function main (line 63) | function main() {
FILE: scripts/test-release-automation.js
constant ROOT_DIR (line 49) | const ROOT_DIR = path.resolve(__dirname, '..');
function resolveSemverPath (line 55) | function resolveSemverPath() {
constant SEMVER_PATH (line 66) | const SEMVER_PATH = resolveSemverPath();
function test (line 76) | function test(name, fn) {
function section (line 89) | function section(title) {
function publishShouldRun (line 112) | function publishShouldRun({ repo, prMerged, prBaseRef, prTitle }) {
function createReleasePRShouldRun (line 138) | function createReleasePRShouldRun({ repo, commitMessage }) {
function nextAlphaVersion (line 154) | function nextAlphaVersion(current) {
function makeFakeRepo (line 168) | function makeFakeRepo({ packageVersion }) {
function runBumpAndPublish (line 202) | function runBumpAndPublish(fakeRoot, extraEnv = {}) {
function runCreateReleasePRStep (line 258) | function runCreateReleasePRStep({ repoDir, nextVersion, releaseBranch }) {
constant MASTER_TEST_VERSION (line 527) | const MASTER_TEST_VERSION = '999.0.0';
Condensed preview — 904 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,034K chars).
[
{
"path": ".all-contributorsrc",
"chars": 1916,
"preview": "{\n \"projectName\": \"Less.js\",\n \"projectOwner\": \"The Less CSS Team\",\n \"repoType\": \"github\",\n \"repoHost\": \"https://gith"
},
{
"path": ".coderabbit.yaml",
"chars": 26,
"preview": "reviews:\n max_files: 200\n"
},
{
"path": ".editorconfig",
"chars": 214,
"preview": "# @see http://editorconfig.org/\n\n# the buck stops here\nroot = true\n\n# all files\n[*]\nend_of_line = LF\nindent_style = spac"
},
{
"path": ".gitattributes",
"chars": 312,
"preview": "*.js text eol=lf\n*.svg text eol=lf\nlessc text eol=lf\n*.less text eol=lf\n*.css text eol=lf\n*.htm text eol=lf\n*.html text "
},
{
"path": ".github/ISSUE_TEMPLATE/bug.md",
"chars": 851,
"preview": "---\nname: \"\\U0001F41E Bug report\"\nabout: Something isn’t working as expected\ntitle: ''\nlabels: 'bug'\nassignees: ''\n---\n\n"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 558,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: ✨ Feature Request / idea\n url: https://github.com/less/less.js/d"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1083,
"preview": "<!--\nThanks for your interest in the project. I appreciate bugs filed and PRs submitted!\nPlease make sure that you are f"
},
{
"path": ".github/SECURITY.md",
"chars": 193,
"preview": "## Security contact information\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://"
},
{
"path": ".github/TESTING_PUBLISHING.md",
"chars": 4625,
"preview": "# Testing the Publishing Flow\n\nThis guide explains how to test the publishing workflow without actually publishing to np"
},
{
"path": ".github/stale.yml",
"chars": 812,
"preview": "# Number of days of inactivity before an issue becomes stale\ndaysUntilStale: 120\n# Number of days of inactivity before a"
},
{
"path": ".github/workflows/ci.yml",
"chars": 1364,
"preview": "# Github actions workflow name\r\nname: CI\r\n\r\n# Triggers the workflow on push or pull request events\r\non:\r\n push:\r\n br"
},
{
"path": ".github/workflows/create-release-pr.yml",
"chars": 7856,
"preview": "name: Create Release PR\n\n# When code lands on master or alpha (not a release PR merge itself),\n# automatically create or"
},
{
"path": ".github/workflows/publish.yml",
"chars": 7957,
"preview": "name: Publish to NPM\n\non:\n # Publish when a release PR is merged:\n # master branch: \"chore: release vX.Y.Z\" PR"
},
{
"path": ".gitignore",
"chars": 210,
"preview": "# OS and IDE\n.emacs*\n*.flymake\n*~\n.#*\n.idea\n*.iml\n*.sublime-*\n.DS_Store\n\n# npm\nnode_modules\n!package-lock.json\nnpm-debug"
},
{
"path": ".husky/post-merge",
"chars": 168,
"preview": "#!/usr/bin/env sh\n. \"$(dirname -- \"$0\")/_/husky.sh\"\n\n# Post-merge hook to preserve alpha versions when merging master in"
},
{
"path": ".husky/pre-commit",
"chars": 60,
"preview": "cd packages/less && npm run typecheck && cd ../..\npnpm test\n"
},
{
"path": ".nvmrc",
"chars": 3,
"preview": "v18"
},
{
"path": ".vscode/launch.json",
"chars": 743,
"preview": "{\n // Use IntelliSense to learn about possible attributes.\n // Hover to view descriptions of existing attributes.\n //"
},
{
"path": "CHANGELOG.md",
"chars": 53257,
"preview": "## Change Log\n\n### v4.6.0 (2026-03-09)\n\n#### Bug Fixes\n\n- [#4414](https://github.com/less/less.js/pull/4414) Fix pre-exi"
},
{
"path": "CONTRIBUTING.md",
"chars": 7036,
"preview": "# Contributing to Less.js\n\nThank you for your interest in contributing to Less.js! Contributions come in many forms—fixi"
},
{
"path": "LICENSE",
"chars": 9724,
"preview": "\n Apache License\n Version 2.0, January 2004\n htt"
},
{
"path": "README.md",
"chars": 5896,
"preview": "<p align=\"center\"><img src=\"http://lesscss.org/public/img/less_logo.png\" width=\"264\" height=\"117\"></p>\n\n<p align=\"center"
},
{
"path": "package-lock.json",
"chars": 115495,
"preview": "{\n\t\"name\": \"@less/root\",\n\t\"version\": \"4.6.3\",\n\t\"lockfileVersion\": 3,\n\t\"requires\": true,\n\t\"packages\": {\n\t\t\"\": {\n\t\t\t\"name\""
},
{
"path": "package.json",
"chars": 1140,
"preview": "{\n\t\"name\": \"@less/root\",\n\t\"private\": true,\n\t\"version\": \"4.6.3\",\n\t\"description\": \"Less monorepo\",\n\t\"homepage\": \"http://le"
},
{
"path": "packages/less/.eslintignore",
"chars": 69,
"preview": "Gruntfile.js\ndist/*\ntmp/*\nlib/*\ntest/browser/less.min.js\nnode_modules"
},
{
"path": "packages/less/.eslintrc.cjs",
"chars": 1773,
"preview": "module.exports = {\n 'parser': '@typescript-eslint/parser',\n 'extends': 'eslint:recommended',\n 'parserOptions': "
},
{
"path": "packages/less/.gitignore",
"chars": 181,
"preview": "# project-specific\ntmp\ndist\ntest/browser/less.min.js\ntest/browser/less.min.js.map\ntest/sourcemaps/**/*.map\ntest/sourcema"
},
{
"path": "packages/less/.npmignore",
"chars": 187,
"preview": ".git\n.gitattributes\n.travis.yml\n.grunt/\nappveyor.yml\nbuild/\nbenchmark/\nsrc/\ntest/\ntest/less-bom/\n# re-include test files"
},
{
"path": "packages/less/Gruntfile.cjs",
"chars": 14181,
"preview": "'use strict';\n\nvar resolve = require('resolve');\nvar path = require('path');\n\nvar testFolder = path.relative(process.cwd"
},
{
"path": "packages/less/README.md",
"chars": 2315,
"preview": "<p align=\"center\"><img src=\"http://lesscss.org/public/img/less_logo.png\" width=\"264\" height=\"117\" alt=\"Less.js logo\"></p"
},
{
"path": "packages/less/benchmark/benchmark-import-reference-target.less",
"chars": 1488,
"preview": "// Target for @import (reference) benchmarking\n// These should NOT appear in output unless extended\n\n.ref-button {\n dis"
},
{
"path": "packages/less/benchmark/benchmark-import-target.less",
"chars": 930,
"preview": "// Shared mixins and variables for import benchmarking\n@import-base-color: #3498db;\n@import-accent: #e74c3c;\n@import-spa"
},
{
"path": "packages/less/benchmark/benchmark-runner.js",
"chars": 4674,
"preview": "#!/usr/bin/env node\n// Portable benchmark runner - dropped into each version's worktree\n// Finds the Less compiler, comp"
},
{
"path": "packages/less/benchmark/benchmark-v3.less",
"chars": 3237,
"preview": "// Benchmark for Less v3.0+ features: if(), boolean(), $prop accessor, @plugin\n// This file is standalone and does NOT i"
},
{
"path": "packages/less/benchmark/benchmark-v37.less",
"chars": 2270,
"preview": "// Benchmark for Less v3.7+ features: each()\n// Standalone file.\n\n// --- each() with lists ---\n@breakpoints: xs, sm, md,"
},
{
"path": "packages/less/benchmark/benchmark-v39.less",
"chars": 1558,
"preview": "// Benchmark for Less v3.9+ features: range()\n// Standalone file.\n\n// --- range() basic ---\n@columns: range(1, 12);\n\neac"
},
{
"path": "packages/less/benchmark/benchmark.less",
"chars": 106724,
"preview": "@bg: #f01;\n@white: #fff;\n@grey: #eee;\n@black: #000;\n@blue: #000;\n@accent_colour: #000;\n@light_grey: #eee;\n@dark_grey: #e"
},
{
"path": "packages/less/benchmark/index.js",
"chars": 2780,
"preview": "import path from 'path';\nimport fs from 'fs';\nimport { fileURLToPath } from 'url';\nimport less from '../lib/less-node/in"
},
{
"path": "packages/less/benchmark/results/.gitignore",
"chars": 98,
"preview": "# Legacy flat files (migrated to runs/ + latest/)\nsystem-info.json\nbenchmark-results.json\nv*.json\n"
},
{
"path": "packages/less/benchmark/results/latest/macbook-pro_arm64.json",
"chars": 35936,
"preview": "{\n \"system\": {\n \"system_id\": \"macbook-pro_arm64\",\n \"hostname\": \"MacBook-Pro.local\",\n \"platform\": \"Darwin\",\n "
},
{
"path": "packages/less/benchmark/results/runs/2026-03-09T21-34-11Z_macbook-pro_arm64.json",
"chars": 35936,
"preview": "{\n \"system\": {\n \"system_id\": \"macbook-pro_arm64\",\n \"hostname\": \"MacBook-Pro.local\",\n \"platform\": \"Darwin\",\n "
},
{
"path": "packages/less/benchmark/results/runs/2026-03-09_macbook-pro_arm64.json",
"chars": 13972,
"preview": "{\n \"system\": {\n \"hostname\": \"MacBook-Pro.local\",\n \"platform\": \"Darwin\",\n \"arch\": \"arm64\",\n \"os_version\": \"2"
},
{
"path": "packages/less/benchmark/run-historical.sh",
"chars": 15248,
"preview": "#!/usr/bin/env bash\nset -euo pipefail\n\n# Historical Less Benchmark Runner\n# Benchmarks every major/minor Less release fr"
},
{
"path": "packages/less/bin/lessc",
"chars": 18366,
"preview": "#!/usr/bin/env node\n\n/* eslint indent: [2, 2, {\"SwitchCase\": 1}] */\n\nimport path from 'path';\nimport os from 'os';\nimpor"
},
{
"path": "packages/less/bower.json",
"chars": 309,
"preview": "{\n \"name\": \"less\",\n \"main\": \"dist/less.js\",\n \"ignore\": [\n \"**/.*\",\n \"benchmark\",\n \"bin\",\n \"lib\",\n \"src"
},
{
"path": "packages/less/build/banner.js",
"chars": 409,
"preview": "import { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\nconst pkg = require('./../packa"
},
{
"path": "packages/less/build/rollup.js",
"chars": 4037,
"preview": "import { rollup } from 'rollup';\nimport commonjs from '@rollup/plugin-commonjs';\nimport json from '@rollup/plugin-json';"
},
{
"path": "packages/less/index.cjs",
"chars": 99,
"preview": "// CJS entry — requires the pre-built CJS bundle\nmodule.exports = require('./dist/less-node.cjs');\n"
},
{
"path": "packages/less/lib/less/constants.js",
"chars": 182,
"preview": "\nexport const Math = {\n ALWAYS: 0,\n PARENS_DIVISION: 1,\n PARENS: 2\n // removed - STRICT_LEGACY: 3\n};\n\nexport"
},
{
"path": "packages/less/lib/less/contexts.js",
"chars": 5600,
"preview": "const contexts = {};\nexport default contexts;\nimport * as Constants from './constants.js';\n\nconst copyFromOriginal = fun"
},
{
"path": "packages/less/lib/less/data/colors.js",
"chars": 4004,
"preview": "export default {\n 'aliceblue':'#f0f8ff',\n 'antiquewhite':'#faebd7',\n 'aqua':'#00ffff',\n 'aquamarine':'#7fffd"
},
{
"path": "packages/less/lib/less/data/index.js",
"chars": 132,
"preview": "import colors from './colors.js';\nimport unitConversions from './unit-conversions.js';\n\nexport default { colors, unitCon"
},
{
"path": "packages/less/lib/less/data/unit-conversions.js",
"chars": 383,
"preview": "export default {\n length: {\n 'm': 1,\n 'cm': 0.01,\n 'mm': 0.001,\n 'in': 0.0254,\n 'p"
},
{
"path": "packages/less/lib/less/default-options.js",
"chars": 3930,
"preview": "// Export a new default each time\nexport default function() {\n return {\n /* Inline Javascript - @plugin still "
},
{
"path": "packages/less/lib/less/deprecation.js",
"chars": 2274,
"preview": "/**\n * Deprecation registry for Less.js\n *\n * Each deprecation has a unique ID and description.\n * Repetition limiting c"
},
{
"path": "packages/less/lib/less/environment/abstract-file-manager.js",
"chars": 4242,
"preview": "class AbstractFileManager {\n getPath(filename) {\n let j = filename.lastIndexOf('?');\n if (j > 0) {\n "
},
{
"path": "packages/less/lib/less/environment/abstract-plugin-loader.js",
"chars": 5777,
"preview": "import functionRegistry from '../functions/function-registry.js';\nimport LessError from '../less-error.js';\n\nclass Abstr"
},
{
"path": "packages/less/lib/less/environment/environment-api.ts",
"chars": 478,
"preview": "export interface Environment {\n /**\n * Converts a string to a base 64 string\n */\n encodeBase64(str: string"
},
{
"path": "packages/less/lib/less/environment/environment.js",
"chars": 2100,
"preview": "/**\n * @todo Document why this abstraction exists, and the relationship between\n * environment, file managers, and"
},
{
"path": "packages/less/lib/less/environment/file-manager-api.ts",
"chars": 2471,
"preview": "import type { Environment } from './environment-api'\n\nexport interface FileManager {\n /**\n * Given the full path "
},
{
"path": "packages/less/lib/less/functions/boolean.js",
"chars": 721,
"preview": "import Anonymous from '../tree/anonymous.js';\nimport Keyword from '../tree/keyword.js';\n\nfunction boolean(condition) {\n "
},
{
"path": "packages/less/lib/less/functions/color-blending.js",
"chars": 1998,
"preview": "import Color from '../tree/color.js';\n\n// Color Blending\n// ref: http://www.w3.org/TR/compositing-1\n\nfunction colorBlend"
},
{
"path": "packages/less/lib/less/functions/color.js",
"chars": 13290,
"preview": "import Dimension from '../tree/dimension.js';\nimport Color from '../tree/color.js';\nimport Quoted from '../tree/quoted.j"
},
{
"path": "packages/less/lib/less/functions/data-uri.js",
"chars": 2692,
"preview": "import Quoted from '../tree/quoted.js';\nimport URL from '../tree/url.js';\nimport * as utils from '../utils.js';\nimport l"
},
{
"path": "packages/less/lib/less/functions/default.js",
"chars": 571,
"preview": "import Keyword from '../tree/keyword.js';\nimport * as utils from '../utils.js';\n\nconst defaultFunc = {\n eval: functio"
},
{
"path": "packages/less/lib/less/functions/function-caller.js",
"chars": 1698,
"preview": "import Expression from '../tree/expression.js';\n\nclass functionCaller {\n constructor(name, context, index, currentFil"
},
{
"path": "packages/less/lib/less/functions/function-registry.js",
"chars": 1081,
"preview": "function makeRegistry( base ) {\n return {\n _data: {},\n add: function(name, func) {\n // preca"
},
{
"path": "packages/less/lib/less/functions/index.js",
"chars": 1227,
"preview": "import functionRegistry from './function-registry.js';\nimport functionCaller from './function-caller.js';\n\nimport boolea"
},
{
"path": "packages/less/lib/less/functions/list.js",
"chars": 4693,
"preview": "import Comment from '../tree/comment.js';\nimport Node from '../tree/node.js';\nimport Dimension from '../tree/dimension.j"
},
{
"path": "packages/less/lib/less/functions/math-helper.js",
"chars": 379,
"preview": "import Dimension from '../tree/dimension.js';\n\nconst MathHelper = (fn, unit, n) => {\n if (!(n instanceof Dimension)) "
},
{
"path": "packages/less/lib/less/functions/math.js",
"chars": 664,
"preview": "import mathHelper from './math-helper.js';\n\nconst mathFunctions = {\n // name, unit\n ceil: null,\n floor: null,"
},
{
"path": "packages/less/lib/less/functions/number.js",
"chars": 3616,
"preview": "import Dimension from '../tree/dimension.js';\nimport Anonymous from '../tree/anonymous.js';\nimport mathHelper from './ma"
},
{
"path": "packages/less/lib/less/functions/string.js",
"chars": 1567,
"preview": "import Quoted from '../tree/quoted.js';\nimport Anonymous from '../tree/anonymous.js';\nimport JavaScript from '../tree/ja"
},
{
"path": "packages/less/lib/less/functions/style.js",
"chars": 1025,
"preview": "import Variable from '../tree/variable.js';\nimport Anonymous from '../tree/anonymous.js';\n\n/** @param {*[]} args */\ncons"
},
{
"path": "packages/less/lib/less/functions/svg.js",
"chars": 3658,
"preview": "import Dimension from '../tree/dimension.js';\nimport Color from '../tree/color.js';\nimport Expression from '../tree/expr"
},
{
"path": "packages/less/lib/less/functions/types.js",
"chars": 2151,
"preview": "import Keyword from '../tree/keyword.js';\nimport DetachedRuleset from '../tree/detached-ruleset.js';\nimport Dimension fr"
},
{
"path": "packages/less/lib/less/import-manager.js",
"chars": 8754,
"preview": "import contexts from './contexts.js';\nimport Parser from './parser/parser.js';\nimport LessError from './less-error.js';\n"
},
{
"path": "packages/less/lib/less/index.js",
"chars": 3085,
"preview": "import Environment from './environment/environment.js';\nimport data from './data/index.js';\nimport tree from './tree/ind"
},
{
"path": "packages/less/lib/less/less-error.js",
"chars": 5383,
"preview": "import * as utils from './utils.js';\n\nconst anonymousFunc = /(<anonymous>|Function):(\\d+):(\\d+)/;\n\n/**\n * This is a cent"
},
{
"path": "packages/less/lib/less/logger.js",
"chars": 915,
"preview": "export default {\n error: function(msg) {\n this._fireEvent('error', msg);\n },\n warn: function(msg) {\n "
},
{
"path": "packages/less/lib/less/parse-tree.js",
"chars": 6402,
"preview": "import LessError from './less-error.js';\nimport transformTree from './transform-tree.js';\nimport logger from './logger.j"
},
{
"path": "packages/less/lib/less/parse.js",
"chars": 3233,
"preview": "import contexts from './contexts.js';\nimport Parser from './parser/parser.js';\nimport PluginManager from './plugin-manag"
},
{
"path": "packages/less/lib/less/parser/parser-input.js",
"chars": 12105,
"preview": "export default () => {\n let // Less input string\n input;\n\n let // current chunk\n j;\n\n const // ho"
},
{
"path": "packages/less/lib/less/parser/parser.js",
"chars": 105016,
"preview": "import LessError from '../less-error.js';\nimport tree from '../tree/index.js';\nimport visitors from '../visitors/index.j"
},
{
"path": "packages/less/lib/less/plugin-manager.js",
"chars": 4068,
"preview": "/**\n * Plugin Manager\n */\nclass PluginManager {\n constructor(less) {\n this.less = less;\n this.visitors "
},
{
"path": "packages/less/lib/less/render.js",
"chars": 1262,
"preview": "import * as utils from './utils.js';\n\nexport default function(environment, ParseTree) {\n const render = function (inp"
},
{
"path": "packages/less/lib/less/source-map-builder.js",
"chars": 2898,
"preview": "export default function (SourceMapOutput, environment) {\n class SourceMapBuilder {\n constructor(options) {\n "
},
{
"path": "packages/less/lib/less/source-map-output.js",
"chars": 6037,
"preview": "export default function (environment) {\n class SourceMapOutput {\n constructor(options) {\n this._css"
},
{
"path": "packages/less/lib/less/transform-tree.js",
"chars": 3198,
"preview": "import contexts from './contexts.js';\nimport visitor from './visitors/index.js';\nimport tree from './tree/index.js';\n\n/*"
},
{
"path": "packages/less/lib/less/tree/anonymous.js",
"chars": 1753,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, FileInfo, VisibilityInfo } from './node.js' */\nimport Node from './no"
},
{
"path": "packages/less/lib/less/tree/assignment.js",
"chars": 1207,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor } from './node.js' */\nimport Node from './node.js';\n\nclas"
},
{
"path": "packages/less/lib/less/tree/atrule-syntax.js",
"chars": 144,
"preview": "// @ts-check\nexport const MediaSyntaxOptions = {\n queryInParens: true\n};\n\nexport const ContainerSyntaxOptions = {\n "
},
{
"path": "packages/less/lib/less/tree/atrule.js",
"chars": 12863,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */\n/** @impo"
},
{
"path": "packages/less/lib/less/tree/attribute.js",
"chars": 1684,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput } from './node.js' */\nimport Node from './node.js';\n\nclass Attribute e"
},
{
"path": "packages/less/lib/less/tree/call.js",
"chars": 4362,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo } from './node.js' */\nimport Node from './node."
},
{
"path": "packages/less/lib/less/tree/color.js",
"chars": 8553,
"preview": "// @ts-check\nimport Node from './node.js';\nimport colors from '../data/colors.js';\n\n/** @import { EvalContext, CSSOutput"
},
{
"path": "packages/less/lib/less/tree/combinator.js",
"chars": 944,
"preview": "// @ts-check\nimport Node from './node.js';\n\n/** @import { EvalContext, CSSOutput } from './node.js' */\n\n/** @type {Recor"
},
{
"path": "packages/less/lib/less/tree/comment.js",
"chars": 1431,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, FileInfo } from './node.js' */\n/** @import { DebugInfoContext } from "
},
{
"path": "packages/less/lib/less/tree/condition.js",
"chars": 1879,
"preview": "// @ts-check\n/** @import { EvalContext, TreeVisitor } from './node.js' */\nimport Node from './node.js';\n\nclass Condition"
},
{
"path": "packages/less/lib/less/tree/container.js",
"chars": 3744,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, FileInfo, VisibilityInfo } from './node.js' */\n/** @import { Function"
},
{
"path": "packages/less/lib/less/tree/debug-info.js",
"chars": 2754,
"preview": "// @ts-check\n\n/**\n * @typedef {object} DebugInfoData\n * @property {number} lineNumber\n * @property {string} fileName\n */"
},
{
"path": "packages/less/lib/less/tree/declaration.js",
"chars": 5065,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, FileInfo } from './node.js' */\nimport Node from './node.js';\nimport V"
},
{
"path": "packages/less/lib/less/tree/detached-ruleset.js",
"chars": 1163,
"preview": "// @ts-check\n/** @import { EvalContext, TreeVisitor } from './node.js' */\nimport Node from './node.js';\nimport contexts "
},
{
"path": "packages/less/lib/less/tree/dimension.js",
"chars": 7054,
"preview": "// @ts-check\n/* eslint-disable no-prototype-builtins */\nimport Node from './node.js';\nimport unitConversions from '../da"
},
{
"path": "packages/less/lib/less/tree/element.js",
"chars": 3160,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */\nimport No"
},
{
"path": "packages/less/lib/less/tree/expression.js",
"chars": 3213,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor } from './node.js' */\nimport Node from './node.js';\nimpor"
},
{
"path": "packages/less/lib/less/tree/extend.js",
"chars": 3022,
"preview": "// @ts-check\n/** @import { EvalContext, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */\nimport Node from './"
},
{
"path": "packages/less/lib/less/tree/import.js",
"chars": 11649,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */\nimport No"
},
{
"path": "packages/less/lib/less/tree/index.js",
"chars": 2006,
"preview": "// @ts-check\nimport Node from './node.js';\nimport Color from './color.js';\nimport AtRule from './atrule.js';\nimport Deta"
},
{
"path": "packages/less/lib/less/tree/javascript.js",
"chars": 1447,
"preview": "// @ts-check\n/** @import { EvalContext, FileInfo } from './node.js' */\nimport JsEvalNode from './js-eval-node.js';\nimpor"
},
{
"path": "packages/less/lib/less/tree/js-eval-node.js",
"chars": 2659,
"preview": "// @ts-check\n/** @import { EvalContext } from './node.js' */\nimport Node from './node.js';\nimport Variable from './varia"
},
{
"path": "packages/less/lib/less/tree/keyword.js",
"chars": 659,
"preview": "// @ts-check\nimport Node from './node.js';\n\n/** @import { EvalContext, CSSOutput } from './node.js' */\n\nclass Keyword ex"
},
{
"path": "packages/less/lib/less/tree/media.js",
"chars": 3441,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, FileInfo, VisibilityInfo } from './node.js' */\n/** @import { Nestable"
},
{
"path": "packages/less/lib/less/tree/merge-rules.js",
"chars": 1649,
"preview": "// @ts-check\nimport Expression from './expression.js';\nimport Value from './value.js';\nimport Node from './node.js';\n\n/*"
},
{
"path": "packages/less/lib/less/tree/mixin-call.js",
"chars": 11665,
"preview": "// @ts-check\n/** @import { EvalContext, TreeVisitor, FileInfo } from './node.js' */\n/** @import { FunctionRegistry } fro"
},
{
"path": "packages/less/lib/less/tree/mixin-definition.js",
"chars": 11577,
"preview": "// @ts-check\n/** @import { EvalContext, TreeVisitor, VisibilityInfo } from './node.js' */\n/** @import { FunctionRegistry"
},
{
"path": "packages/less/lib/less/tree/namespace-value.js",
"chars": 3039,
"preview": "// @ts-check\n/** @import { EvalContext, FileInfo } from './node.js' */\nimport Node from './node.js';\nimport Variable fro"
},
{
"path": "packages/less/lib/less/tree/negative.js",
"chars": 940,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput } from './node.js' */\nimport Node from './node.js';\nimport Operation f"
},
{
"path": "packages/less/lib/less/tree/nested-at-rule.js",
"chars": 7354,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */\nimport Ru"
},
{
"path": "packages/less/lib/less/tree/node.js",
"chars": 8338,
"preview": "// @ts-check\n/**\n * @typedef {object} FileInfo\n * @property {string} [filename]\n * @property {string} [rootpath]\n * @pro"
},
{
"path": "packages/less/lib/less/tree/operation.js",
"chars": 2567,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor } from './node.js' */\nimport Node from './node.js';\nimpor"
},
{
"path": "packages/less/lib/less/tree/paren.js",
"chars": 896,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput } from './node.js' */\nimport Node from './node.js';\n\nclass Paren exten"
},
{
"path": "packages/less/lib/less/tree/property.js",
"chars": 2964,
"preview": "// @ts-check\n/** @import { EvalContext, FileInfo } from './node.js' */\nimport Node from './node.js';\nimport Declaration "
},
{
"path": "packages/less/lib/less/tree/query-in-parens.js",
"chars": 1669,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor } from './node.js' */\nimport Node from './node.js';\n\nclas"
},
{
"path": "packages/less/lib/less/tree/quoted.js",
"chars": 4019,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, FileInfo } from './node.js' */\nimport Node from './node.js';\nimport V"
},
{
"path": "packages/less/lib/less/tree/ruleset.js",
"chars": 42240,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo, VisibilityInfo } from './node.js' */\n/** @impo"
},
{
"path": "packages/less/lib/less/tree/selector.js",
"chars": 6883,
"preview": "// @ts-check\nimport Node from './node.js';\nimport Element from './element.js';\nimport LessError from '../less-error.js';"
},
{
"path": "packages/less/lib/less/tree/unicode-descriptor.js",
"chars": 277,
"preview": "// @ts-check\nimport Node from './node.js';\n\nclass UnicodeDescriptor extends Node {\n get type() { return 'UnicodeDescr"
},
{
"path": "packages/less/lib/less/tree/unit.js",
"chars": 5239,
"preview": "// @ts-check\nimport Node from './node.js';\nimport unitConversions from '../data/unit-conversions.js';\nimport * as utils "
},
{
"path": "packages/less/lib/less/tree/url.js",
"chars": 2722,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor, FileInfo } from './node.js' */\nimport Node from './node."
},
{
"path": "packages/less/lib/less/tree/value.js",
"chars": 1512,
"preview": "// @ts-check\n/** @import { EvalContext, CSSOutput, TreeVisitor } from './node.js' */\nimport Node from './node.js';\n\nclas"
},
{
"path": "packages/less/lib/less/tree/variable-call.js",
"chars": 1894,
"preview": "// @ts-check\n/** @import { EvalContext, FileInfo } from './node.js' */\nimport Node from './node.js';\nimport Variable fro"
},
{
"path": "packages/less/lib/less/tree/variable.js",
"chars": 2537,
"preview": "// @ts-check\n/** @import { EvalContext, FileInfo } from './node.js' */\nimport Node from './node.js';\nimport Call from '."
},
{
"path": "packages/less/lib/less/utils.js",
"chars": 3204,
"preview": "/* jshint proto: true */\nimport * as Constants from './constants.js';\nimport { copy } from 'copy-anything';\n\nexport func"
},
{
"path": "packages/less/lib/less/visitors/extend-visitor.js",
"chars": 21837,
"preview": "/* eslint-disable no-unused-vars */\n/**\n * @todo - Remove unused when JSDoc types are added for visitor methods\n */\nimpo"
},
{
"path": "packages/less/lib/less/visitors/import-sequencer.js",
"chars": 1665,
"preview": "class ImportSequencer {\n constructor(onSequencerEmpty) {\n this.imports = [];\n this.variableImports = []"
},
{
"path": "packages/less/lib/less/visitors/import-visitor.js",
"chars": 6946,
"preview": "/* eslint-disable no-unused-vars */\n/**\n * @todo - Remove unused when JSDoc types are added for visitor methods\n */\nimpo"
},
{
"path": "packages/less/lib/less/visitors/index.js",
"chars": 467,
"preview": "import Visitor from './visitor.js';\nimport ImportVisitor from './import-visitor.js';\nimport MarkVisibleSelectorsVisitor "
},
{
"path": "packages/less/lib/less/visitors/join-selector-visitor.js",
"chars": 2044,
"preview": "/* eslint-disable no-unused-vars */\n/**\n * @todo - Remove unused when JSDoc types are added for visitor methods\n */\nimpo"
},
{
"path": "packages/less/lib/less/visitors/set-tree-visibility-visitor.js",
"chars": 1120,
"preview": "import Node from '../tree/node.js';\n\nclass SetTreeVisibilityVisitor {\n /** @param {boolean} visible */\n constructo"
},
{
"path": "packages/less/lib/less/visitors/to-css-visitor.js",
"chars": 10798,
"preview": "/* eslint-disable no-unused-vars */\n/**\n * @todo - Remove unused when JSDoc types are added for visitor methods\n */\nimpo"
},
{
"path": "packages/less/lib/less/visitors/visitor.js",
"chars": 4313,
"preview": "import tree from '../tree/index.js';\n\nconst _visitArgs = { visitDeeper: true };\nlet _hasIndexed = false;\n\nfunction _noop"
},
{
"path": "packages/less/lib/less-browser/add-default-options.js",
"chars": 1731,
"preview": "import {addDataAttr} from './utils.js';\nimport browser from './browser.js';\n\n/**\n * @param {Window} window\n * @param {Re"
},
{
"path": "packages/less/lib/less-browser/bootstrap.js",
"chars": 1763,
"preview": "/**\n * Kicks off less and compiles any stylesheets\n * used in the browser distributed version of less\n * to kick-start l"
},
{
"path": "packages/less/lib/less-browser/browser.js",
"chars": 2703,
"preview": "import * as utils from './utils.js';\n\nexport default {\n createCSS: function (document, styles, sheet) {\n // St"
},
{
"path": "packages/less/lib/less-browser/cache.js",
"chars": 1716,
"preview": "// Cache system is a bit outdated and could do with work\n\nexport default (window, options, logger) => {\n let cache = "
},
{
"path": "packages/less/lib/less-browser/error-reporting.js",
"chars": 5944,
"preview": "import * as utils from './utils.js';\nimport browser from './browser.js';\n\nexport default (window, less, options) => {\n\n "
},
{
"path": "packages/less/lib/less-browser/file-manager.js",
"chars": 3834,
"preview": "import AbstractFileManager from '../less/environment/abstract-file-manager.js';\n\nlet options;\nlet logger;\nlet fileCache "
},
{
"path": "packages/less/lib/less-browser/image-size.js",
"chars": 741,
"preview": "\nimport functionRegistry from './../less/functions/function-registry.js';\n\nexport default () => {\n function imageSize"
},
{
"path": "packages/less/lib/less-browser/index.js",
"chars": 9758,
"preview": "//\n// index.js\n// Should expose the additional browser functions on to the less object\n//\nimport {addDataAttr} from './u"
},
{
"path": "packages/less/lib/less-browser/log-listener.js",
"chars": 1339,
"preview": "export default (less, options) => {\n const logLevel_debug = 4;\n const logLevel_info = 3;\n const logLevel_warn ="
},
{
"path": "packages/less/lib/less-browser/plugin-loader.js",
"chars": 656,
"preview": "/**\n * @todo Add tests for browser `@plugin`\n */\nimport AbstractPluginLoader from '../less/environment/abstract-plugin-l"
},
{
"path": "packages/less/lib/less-browser/utils.js",
"chars": 1194,
"preview": "\n/** @param {string} href */\nexport function extractId(href) {\n return href.replace(/^[a-z-]+:\\/+?[^/]+/, '') // Rem"
},
{
"path": "packages/less/lib/less-node/environment.js",
"chars": 1317,
"preview": "import { createRequire } from 'module';\n\nconst require = createRequire(import.meta.url);\n\nclass SourceMapGeneratorFallba"
},
{
"path": "packages/less/lib/less-node/file-manager.js",
"chars": 6162,
"preview": "import path from 'path';\nimport { createRequire } from 'module';\nimport fs from './fs.js';\nimport AbstractFileManager fr"
},
{
"path": "packages/less/lib/less-node/fs.js",
"chars": 266,
"preview": "/** @typedef {import('fs')} FS */\nimport nodeFs from 'fs';\nimport { createRequire } from 'module';\n\nconst require = crea"
},
{
"path": "packages/less/lib/less-node/image-size.js",
"chars": 2076,
"preview": "import { createRequire } from 'module';\nimport Dimension from '../less/tree/dimension.js';\nimport Expression from '../le"
},
{
"path": "packages/less/lib/less-node/index.js",
"chars": 1054,
"preview": "import { createRequire } from 'module';\nimport environment from './environment.js';\nimport FileManager from './file-mana"
},
{
"path": "packages/less/lib/less-node/lessc-helper.js",
"chars": 6926,
"preview": "// lessc_helper.js\n//\n// helper functions for lessc\nconst lessc_helper = {\n\n // Stylize a string\n stylize : f"
},
{
"path": "packages/less/lib/less-node/plugin-loader.js",
"chars": 1864,
"preview": "import path from 'path';\nimport { createRequire } from 'module';\nimport AbstractPluginLoader from '../less/environment/a"
},
{
"path": "packages/less/lib/less-node/url-file-manager.js",
"chars": 2404,
"preview": "/* eslint-disable no-unused-vars */\n/**\n * @todo - remove top eslint rule when FileManagers have JSDoc type\n * and are T"
},
{
"path": "packages/less/package.json",
"chars": 4301,
"preview": "{\n\t\"name\": \"less\",\n\t\"version\": \"4.6.3\",\n\t\"description\": \"Leaner CSS\",\n\t\"homepage\": \"http://lesscss.org\",\n\t\"author\": {\n\t\t"
},
{
"path": "packages/less/scripts/coverage-lines.js",
"chars": 7590,
"preview": "#!/usr/bin/env node\n\n/**\n * Generates a line-by-line coverage report showing uncovered lines\n * Reads from LCOV format a"
},
{
"path": "packages/less/scripts/coverage-report.js",
"chars": 5456,
"preview": "#!/usr/bin/env node\n\n/**\n * Generates a per-file coverage report table for lib/ directories\n */\n\nimport fs from 'fs';\nim"
},
{
"path": "packages/less/scripts/postinstall.js",
"chars": 1375,
"preview": "#!/usr/bin/env node\n\nimport fs from 'fs';\nimport path from 'path';\nimport { execSync } from 'child_process';\nimport { fi"
},
{
"path": "packages/less/test/.eslintrc.json",
"chars": 105,
"preview": "{\n \"env\": {\n \"node\": true,\n \"browser\": true\n },\n \"parserOptions\": { \n \"ecmaVersion\": 6\n }\n}\n"
},
{
"path": "packages/less/test/README.md",
"chars": 136,
"preview": "Tests are generally organized in the `less/` folder by what options are set in index.js.\n\nThe main tests are located und"
},
{
"path": "packages/less/test/browser/common.js",
"chars": 10050,
"preview": "var logMessages = [];\nwindow.less = window.less || {};\n\nvar logLevel_debug = 4,\n logLevel_info = 3,\n logLevel_warn"
},
{
"path": "packages/less/test/browser/css/global-vars/simple.css",
"chars": 24,
"preview": ".test {\n color: red;\n}\n"
},
{
"path": "packages/less/test/browser/css/modify-vars/simple.css",
"chars": 99,
"preview": ".testisimported {\n color: gainsboro;\n}\n.test {\n color1: green;\n color2: purple;\n scalar: 20;\n}\n"
},
{
"path": "packages/less/test/browser/css/plugin/plugin.css",
"chars": 91,
"preview": ".test {\n val: http://localhost:8081/packages/less/tmp/browser/test-runner-browser.html;\n}\n"
},
{
"path": "packages/less/test/browser/css/postProcessor/postProcessor.css",
"chars": 44,
"preview": "hr {height:50px;}\n.test {\n color: white;\n}\n"
},
{
"path": "packages/less/test/browser/css/relative-urls/urls.css",
"chars": 1748,
"preview": "@import \"http://localhost:8081/packages/less/test/browser/less/imports/modify-this.css\";\n@import \"http://localhost:8081/"
},
{
"path": "packages/less/test/browser/css/rewrite-urls/urls.css",
"chars": 1742,
"preview": "@import \"http://localhost:8081/packages/less/test/browser/less/imports/modify-this.css\";\n@import \"http://localhost:8081/"
},
{
"path": "packages/less/test/browser/css/rootpath/urls.css",
"chars": 1238,
"preview": "@import \"https://localhost/modify-this.css\";\n@import \"https://localhost/modify-again.css\";\n.modify {\n my-url: url(\"http"
},
{
"path": "packages/less/test/browser/css/rootpath-relative/urls.css",
"chars": 1468,
"preview": "@import \"https://www.github.com/cloudhead/imports/modify-this.css\";\n@import \"https://www.github.com/cloudhead/imports/mo"
},
{
"path": "packages/less/test/browser/css/rootpath-rewrite-urls/urls.css",
"chars": 1468,
"preview": "@import \"https://www.github.com/cloudhead/imports/modify-this.css\";\n@import \"https://www.github.com/cloudhead/imports/mo"
},
{
"path": "packages/less/test/browser/css/urls.css",
"chars": 5203,
"preview": "@import \"http://localhost:8081/packages/less/test/browser/less/modify-this.css\";\n@import \"http://localhost:8081/packages"
},
{
"path": "packages/less/test/browser/generator/benchmark.config.cjs",
"chars": 1659,
"preview": "\nmodule.exports = {\n current: {\n // src is used to build list of less files to compile\n src: [\n "
},
{
"path": "packages/less/test/browser/generator/generate.cjs",
"chars": 2266,
"preview": "const template = require('./template.cjs')\nlet config\nconst fs = require('fs-extra')\nconst path = require('path')\nconst "
},
{
"path": "packages/less/test/browser/generator/generate.js",
"chars": 2392,
"preview": "import { createRequire } from 'module';\nimport fs from 'fs-extra';\nimport path from 'path';\nimport globby from 'globby';"
},
{
"path": "packages/less/test/browser/generator/runner.cjs",
"chars": 49,
"preview": "const runner = require('./generate.cjs')\nrunner()"
},
{
"path": "packages/less/test/browser/generator/runner.config.cjs",
"chars": 7147,
"preview": "var path = require('path');\nvar resolve = require('resolve')\nvar { forceCovertToBrowserPath } = require('./utils.cjs');\n"
},
{
"path": "packages/less/test/browser/generator/runner.js",
"chars": 50,
"preview": "import generate from './generate.js';\ngenerate();\n"
},
{
"path": "packages/less/test/browser/generator/template.cjs",
"chars": 3688,
"preview": "const html = require('html-template-tag')\nconst path = require('path')\nconst { forceCovertToBrowserPath } = require('./u"
},
{
"path": "packages/less/test/browser/generator/utils.cjs",
"chars": 284,
"preview": "/**\n * utils for covert browser paths,\n * fix https://github.com/less/less.js/pull/4213 \n * \n * @param {string} path \n *"
},
{
"path": "packages/less/test/browser/less/console-errors/test-error.less",
"chars": 26,
"preview": ".a {\n prop: (3 / #fff);\n}"
},
{
"path": "packages/less/test/browser/less/console-errors/test-error.txt",
"chars": 159,
"preview": "less: OperationError: Can't subtract or divide a color from a number in {pathhref}console-errors/test-error.less on line"
},
{
"path": "packages/less/test/browser/less/errors/image-height-error.less",
"chars": 60,
"preview": ".test-height{\n height: image-height(\"../data/image.jpg\")\n}\n"
},
{
"path": "packages/less/test/browser/less/errors/image-height-error.txt",
"chars": 236,
"preview": "RuntimeError: Error evaluating function `image-height`: Image size functions are not supported in browser version of les"
},
{
"path": "packages/less/test/browser/less/errors/image-size-error.less",
"chars": 53,
"preview": ".test-size{\n size: image-size(\"../data/image.jpg\")\n}"
},
{
"path": "packages/less/test/browser/less/errors/image-size-error.txt",
"chars": 225,
"preview": "RuntimeError: Error evaluating function `image-size`: Image size functions are not supported in browser version of less "
},
{
"path": "packages/less/test/browser/less/errors/image-width-error.less",
"chars": 56,
"preview": ".test-width{\n width: image-width(\"../data/image.jpg\")\n}"
},
{
"path": "packages/less/test/browser/less/errors/image-width-error.txt",
"chars": 231,
"preview": "RuntimeError: Error evaluating function `image-width`: Image size functions are not supported in browser version of less"
},
{
"path": "packages/less/test/browser/less/global-vars/simple.less",
"chars": 32,
"preview": ".test {\n color: @global-var;\n}\n"
},
{
"path": "packages/less/test/browser/less/imports/urls.less",
"chars": 62,
"preview": "@import \"modify-this.css\";\n.modify {\n my-url: url(\"a.png\");\n}"
},
{
"path": "packages/less/test/browser/less/imports/urls2.less",
"chars": 63,
"preview": "@import \"modify-again.css\";\n.modify {\n my-url: url(\"b.png\");\n}"
},
{
"path": "packages/less/test/browser/less/modify-vars/imports/simple2.less",
"chars": 52,
"preview": "@var2: blue;\n.testisimported {\n color: gainsboro;\n}"
},
{
"path": "packages/less/test/browser/less/modify-vars/simple.less",
"chars": 111,
"preview": "@import \"imports/simple2\";\n@var1: red;\n@scale: 10;\n.test {\n color1: @var1;\n color2: @var2;\n scalar: @scale\n}"
},
{
"path": "packages/less/test/browser/less/nested-gradient-with-svg-gradient/mixin-consumer.less",
"chars": 80,
"preview": "@import \"svg-gradient-mixin.less\";\n\n.gray-gradient {\n .gradient-mixin(#999);\n}\n"
}
]
// ... and 704 more files (download for full content)
About this extraction
This page contains the full source code of the less/less.js GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 904 files (1.8 MB), approximately 632.6k tokens, and a symbol index with 622 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.