From b8bf961931513d46a88a0d3bb48f79c04ecf4bd7 Mon Sep 17 00:00:00 2001 From: Victor Date: Wed, 22 Nov 2023 15:57:33 +0100 Subject: [PATCH] Add prettier as pre-commit hook, clean up CI --- .cirrus.yml | 37 +- .husky/pre-commit | 4 + .npmignore | 3 +- .prettierignore | 6 + README.md | 85 +- docs/CONTRIBUTING.md | 12 +- docs/RELEASING.md | 6 +- docs/rules/cognitive-complexity.md | 2 +- docs/rules/elseif-without-else.md | 3 +- docs/rules/no-collection-size-mischeck.md | 20 +- docs/rules/no-duplicate-string.md | 5 +- docs/rules/no-duplicated-branches.md | 3 +- docs/rules/no-element-overwrite.md | 8 +- docs/rules/no-empty-collection.md | 4 +- docs/rules/no-extra-arguments.md | 4 +- docs/rules/no-identical-conditions.md | 9 +- docs/rules/no-identical-expressions.md | 16 +- docs/rules/no-inverted-boolean-check.md | 10 +- docs/rules/no-nested-switch.md | 4 +- docs/rules/no-nested-template-literals.md | 6 +- docs/rules/no-one-iteration-loop.md | 2 +- docs/rules/no-redundant-boolean.md | 1 - docs/rules/no-redundant-jump.md | 6 +- docs/rules/no-same-line-conditional.md | 6 +- docs/rules/no-unused-collection.md | 2 +- docs/rules/no-use-of-empty-return-value.md | 4 +- docs/rules/non-existent-operator.md | 10 +- docs/rules/prefer-immediate-return.md | 2 +- docs/rules/prefer-object-literal.md | 16 +- docs/rules/prefer-single-boolean-return.md | 2 +- docs/rules/prefer-while.md | 2 +- package-lock.json | 1704 ++++++-------------- package.json | 25 +- ruling/.eslintrc.js | 21 +- ruling/index.ts | 81 +- scripts/generate-rules-sonar-meta.ts | 35 +- tsconfig-src.json | 9 - tsconfig.json | 9 +- 38 files changed, 781 insertions(+), 1403 deletions(-) create mode 100644 .husky/pre-commit create mode 100644 .prettierignore delete mode 100644 tsconfig-src.json diff --git a/.cirrus.yml b/.cirrus.yml index 15f502ef..b2bc1dbe 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -5,8 +5,8 @@ env: SONAR_TOKEN: VAULT[development/kv/data/sonarcloud data.token] ARTIFACTORY_URL: https://repox.jfrog.io/ - ARTIFACTORY_DEPLOY_ACCESS_TOKEN : VAULT[development/artifactory/token/${CIRRUS_REPO_OWNER}-${CIRRUS_REPO_NAME}-qa-deployer access_token] - ARTIFACTORY_PROMOTE_ACCESS_TOKEN : VAULT[development/artifactory/token/${CIRRUS_REPO_OWNER}-${CIRRUS_REPO_NAME}-promoter access_token] + ARTIFACTORY_DEPLOY_ACCESS_TOKEN: VAULT[development/artifactory/token/${CIRRUS_REPO_OWNER}-${CIRRUS_REPO_NAME}-qa-deployer access_token] + ARTIFACTORY_PROMOTE_ACCESS_TOKEN: VAULT[development/artifactory/token/${CIRRUS_REPO_OWNER}-${CIRRUS_REPO_NAME}-promoter access_token] # Use bash (instead of sh on linux or cmd.exe on windows) CIRRUS_SHELL: bash @@ -26,6 +26,29 @@ container_definition: &CONTAINER_DEFINITION build_task: <<: *ONLY_SONARSOURCE_QA + eks_container: + <<: *CONTAINER_DEFINITION + docker_arguments: + CIRRUS_AWS_ACCOUNT: ${CIRRUS_AWS_ACCOUNT} + cpu: 3 + memory: 8G + env: + SONARSOURCE_QA: true + node_version_script: + - node --version + script: + - if [ -n "${CIRRUS_BASE_BRANCH}" ]; then git fetch origin "${CIRRUS_BASE_BRANCH}"; fi + - jfrog config add repox --url $ARTIFACTORY_URL --access-token $ARTIFACTORY_DEPLOY_ACCESS_TOKEN + - jfrog rt npm-config --repo-resolve npm --repo-deploy sonarsource-npm-public-qa + - jfrog rt npm-ci + - npm run check-format + - npm run build + - ./scripts/test-ci.sh + - ./scripts/analyze_and_publish.sh + +qa_task: + depends_on: + - build eks_container: matrix: - docker_arguments: @@ -41,7 +64,6 @@ build_task: cpu: 3 memory: 8G env: - CIRRUS_CLONE_DEPTH: 10 SONARSOURCE_QA: true node_version_script: - node --version @@ -50,13 +72,8 @@ build_task: - jfrog rt npm-config --repo-resolve npm --repo-deploy sonarsource-npm-public-qa - git submodule update --init --depth 1 -r - jfrog rt npm-ci - - npm run typecheck - npm run build - - ./scripts/test-ci.sh - - npm run check-format - - npm run lint - npm run ruling - - ./scripts/analyze_and_publish.sh ws_scan_task: depends_on: @@ -75,7 +92,7 @@ ws_scan_task: folder: ${CIRRUS_WORKING_DIR}/.m2/repository whitesource_script: - ./scripts/run_ws_scan.sh - allow_failures: "true" + allow_failures: 'true' always: ws_artifacts: - path: "whitesource/**/*" + path: 'whitesource/**/*' diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000..3e1cef88 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +npm run precommit diff --git a/.npmignore b/.npmignore index 69aad075..50725cc1 100644 --- a/.npmignore +++ b/.npmignore @@ -9,6 +9,7 @@ .idea/ .vscode/ .github/ +.husky coverage/ docs/ @@ -20,13 +21,13 @@ tests/ .gitattributes .gitmodules .npmignore +.prettierignore .travis.yml .eslintrc.js .editorconfig sonar-project.properties test-report.xml tsconfig.json -tsconfig-src.json .cirrus/ .cirrus.yml .jfrog/ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..d637bc91 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +.github +.jfrog +coverage +lib +javascript-test-sources +docs diff --git a/README.md b/README.md index 09e07f73..74c1f126 100644 --- a/README.md +++ b/README.md @@ -8,43 +8,43 @@ SonarJS rules for ESLint to help developers produce [Clean Code](https://www.son Rules in this category aim to find places in code that have a high chance of being bugs, i.e. don't work as intended. -* All branches in a conditional structure should not have exactly the same implementation ([`no-all-duplicated-branches`]) -* Collection elements should not be replaced unconditionally ([`no-element-overwrite`]) -* Empty collections should not be accessed or iterated ([`no-empty-collection`]) -* Function calls should not pass extra arguments ([`no-extra-arguments`]) -* Related "if/else if" statements should not have the same condition ([`no-identical-conditions`]) -* Identical expressions should not be used on both sides of a binary operator ([`no-identical-expressions`]) -* Return values from functions without side effects should not be ignored ([`no-ignored-return`]) (*uses-types*) -* Loops with at most one iteration should be refactored ([`no-one-iteration-loop`]) -* The output of functions that don't return anything should not be used ([`no-use-of-empty-return-value`]) -* Non-existent operators '=+', '=-' and '=!' should not be used ([`non-existent-operator`]) (:wrench: *fixable*) +- All branches in a conditional structure should not have exactly the same implementation ([`no-all-duplicated-branches`]) +- Collection elements should not be replaced unconditionally ([`no-element-overwrite`]) +- Empty collections should not be accessed or iterated ([`no-empty-collection`]) +- Function calls should not pass extra arguments ([`no-extra-arguments`]) +- Related "if/else if" statements should not have the same condition ([`no-identical-conditions`]) +- Identical expressions should not be used on both sides of a binary operator ([`no-identical-expressions`]) +- Return values from functions without side effects should not be ignored ([`no-ignored-return`]) (_uses-types_) +- Loops with at most one iteration should be refactored ([`no-one-iteration-loop`]) +- The output of functions that don't return anything should not be used ([`no-use-of-empty-return-value`]) +- Non-existent operators '=+', '=-' and '=!' should not be used ([`non-existent-operator`]) (:wrench: _fixable_) ### Code Smell Detection :pig: Code Smells, or maintainability issues, are raised for places of code which might be costly to change in the future. These rules also help to keep the high code quality and readability. And finally, some rules report issues on different suspicious code patterns. -* Cognitive Complexity of functions should not be too high ([`cognitive-complexity`]) -* "if ... else if" constructs should end with "else" clauses ([`elseif-without-else`]) (*disabled*) -* "switch" statements should not have too many "case" clauses ([`max-switch-cases`]) -* Collapsible "if" statements should be merged ([`no-collapsible-if`]) -* Collection sizes and array length comparisons should make sense ([`no-collection-size-mischeck`]) (:wrench: *fixable*, *uses-types*) -* String literals should not be duplicated ([`no-duplicate-string`]) -* Two branches in a conditional structure should not have exactly the same implementation ([`no-duplicated-branches`]) -* Boolean expressions should not be gratuitous ([`no-gratuitous-expressions`]) -* Functions should not have identical implementations ([`no-identical-functions`]) -* Boolean checks should not be inverted ([`no-inverted-boolean-check`]) (:wrench: *fixable*, *disabled*) -* "switch" statements should not be nested ([`no-nested-switch`]) -* Template literals should not be nested ([`no-nested-template-literals`]) -* Boolean literals should not be redundant ([`no-redundant-boolean`]) -* Jump statements should not be redundant ([`no-redundant-jump`]) (:wrench: *fixable*) -* Conditionals should start on new lines ([`no-same-line-conditional`]) (:wrench: *fixable*) -* "switch" statements should have at least 3 "case" clauses ([`no-small-switch`]) -* Collection and array contents should be used ([`no-unused-collection`]) -* "catch" clauses should do more than rethrow ([`no-useless-catch`]) -* Local variables should not be declared and then immediately returned or thrown ([`prefer-immediate-return`]) (:wrench: *fixable*) -* Object literal syntax should be used ([`prefer-object-literal`]) -* Return of boolean expressions should not be wrapped into an "if-then-else" statement ([`prefer-single-boolean-return`]) (:wrench: *fixable*) -* A "while" loop should be used instead of a "for" loop ([`prefer-while`]) (:wrench: *fixable*) +- Cognitive Complexity of functions should not be too high ([`cognitive-complexity`]) +- "if ... else if" constructs should end with "else" clauses ([`elseif-without-else`]) (_disabled_) +- "switch" statements should not have too many "case" clauses ([`max-switch-cases`]) +- Collapsible "if" statements should be merged ([`no-collapsible-if`]) +- Collection sizes and array length comparisons should make sense ([`no-collection-size-mischeck`]) (:wrench: _fixable_, _uses-types_) +- String literals should not be duplicated ([`no-duplicate-string`]) +- Two branches in a conditional structure should not have exactly the same implementation ([`no-duplicated-branches`]) +- Boolean expressions should not be gratuitous ([`no-gratuitous-expressions`]) +- Functions should not have identical implementations ([`no-identical-functions`]) +- Boolean checks should not be inverted ([`no-inverted-boolean-check`]) (:wrench: _fixable_, _disabled_) +- "switch" statements should not be nested ([`no-nested-switch`]) +- Template literals should not be nested ([`no-nested-template-literals`]) +- Boolean literals should not be redundant ([`no-redundant-boolean`]) +- Jump statements should not be redundant ([`no-redundant-jump`]) (:wrench: _fixable_) +- Conditionals should start on new lines ([`no-same-line-conditional`]) (:wrench: _fixable_) +- "switch" statements should have at least 3 "case" clauses ([`no-small-switch`]) +- Collection and array contents should be used ([`no-unused-collection`]) +- "catch" clauses should do more than rethrow ([`no-useless-catch`]) +- Local variables should not be declared and then immediately returned or thrown ([`prefer-immediate-return`]) (:wrench: _fixable_) +- Object literal syntax should be used ([`prefer-object-literal`]) +- Return of boolean expressions should not be wrapped into an "if-then-else" statement ([`prefer-single-boolean-return`]) (:wrench: _fixable_) +- A "while" loop should be used instead of a "for" loop ([`prefer-while`]) (:wrench: _fixable_) [`cognitive-complexity`]: ./docs/rules/cognitive-complexity.md [`elseif-without-else`]: ./docs/rules/elseif-without-else.md @@ -81,20 +81,20 @@ Code Smells, or maintainability issues, are raised for places of code which migh ## Prerequisites -* Node.js (>=14.x). -* ESLint 5.x, 6.x, 7.x or 8.x (peer dependency for the plugin). +- Node.js (>=14.x). +- ESLint 5.x, 6.x, 7.x or 8.x (peer dependency for the plugin). ## Usage -* If you don't have ESLint yet configured for your project, follow [these instructions](https://github.com/eslint/eslint#installation-and-usage). -* Install `eslint-plugin-sonarjs` using `npm` (or `yarn`) for your project or globally: +- If you don't have ESLint yet configured for your project, follow [these instructions](https://github.com/eslint/eslint#installation-and-usage). +- Install `eslint-plugin-sonarjs` using `npm` (or `yarn`) for your project or globally: ```sh npm install eslint-plugin-sonarjs --save-dev # install for your project npm install eslint-plugin-sonarjs -g # or install globally ``` -* Add `eslint-plugin-sonarjs` to the `plugins` option of your `.eslintrc`: +- Add `eslint-plugin-sonarjs` to the `plugins` option of your `.eslintrc`: ```json { @@ -102,7 +102,7 @@ npm install eslint-plugin-sonarjs -g # or install globally } ``` -* Add `plugin:sonarjs/recommended` to the `extends` option to enable all recommended rules: +- Add `plugin:sonarjs/recommended` to the `extends` option to enable all recommended rules: ```json { @@ -110,7 +110,7 @@ npm install eslint-plugin-sonarjs -g # or install globally } ``` -* or enable only some rules manually: +- or enable only some rules manually: ```javascript { @@ -121,15 +121,16 @@ npm install eslint-plugin-sonarjs -g # or install globally } } ``` -* To enable all rules of this plugin, use `@typescript-eslint/parser` as a parser for ESLint ([like we do](https://github.com/SonarSource/eslint-plugin-sonarjs/blob/6e06d59a233e07b28fbbd6398e08b9b0c63b18f9/.eslintrc.js#L4)) and set the [parserOptions.project](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#parseroptionsproject) option. Thanks to it, type information is available, which is beneficial or even essential for some rules. + +- To enable all rules of this plugin, use `@typescript-eslint/parser` as a parser for ESLint ([like we do](https://github.com/SonarSource/eslint-plugin-sonarjs/blob/6e06d59a233e07b28fbbd6398e08b9b0c63b18f9/.eslintrc.js#L4)) and set the [parserOptions.project](https://github.com/typescript-eslint/typescript-eslint/tree/master/packages/parser#parseroptionsproject) option. Thanks to it, type information is available, which is beneficial or even essential for some rules. ## Available Configurations -This plugin provides only a `recommended` configuration. Almost all rules are activated in this profile with a few exceptions (check the `disabled` tag in the rules list). The `recommended` configuration activates rules with `error` severity. +This plugin provides only a `recommended` configuration. Almost all rules are activated in this profile with a few exceptions (check the `disabled` tag in the rules list). The `recommended` configuration activates rules with `error` severity. ## ESLint and Sonar -This plugin exposes to ESLint users a subset of JS/TS rules from Sonar-* products (aka [SonarJS](https://github.com/SonarSource/SonarJS)). We extracted the rules that are not available in ESLint core or other ESLint plugins to be beneficial for the ESLint community. +This plugin exposes to ESLint users a subset of JS/TS rules from Sonar-\* products (aka [SonarJS](https://github.com/SonarSource/SonarJS)). We extracted the rules that are not available in ESLint core or other ESLint plugins to be beneficial for the ESLint community. If you are a [SonarQube](https://www.sonarqube.org) or [SonarCloud](https://sonarcloud.io) user, to lint your code locally, we suggest using [SonarLint](https://www.sonarlint.org) IDE extension (available for VSCode, JetBrains IDEs and Eclipse). You can connect SonarLint to your SonarQube/SonarCloud project to synchronize rules configuration, issue statuses, etc. diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 95694cb9..63299bd1 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -8,12 +8,12 @@ Report bugs and suggest improvements. If something doesn't work well for you or ## Create New Rule -* Create a new file for the rule implementation in `src/rules`. File name should be lowercased, words must be separated by dashes (`-`). -* Create a test file `.test.ts` in `test/rules`. -* Add the rule to `src/index.ts`. -* In folder `docs/rules` create a rule documentation file `.md` -* In `README.md` add a reference to this documentation file. -* Run [Ruling](#ruling) test. +- Create a new file for the rule implementation in `src/rules`. File name should be lowercased, words must be separated by dashes (`-`). +- Create a test file `.test.ts` in `test/rules`. +- Add the rule to `src/index.ts`. +- In folder `docs/rules` create a rule documentation file `.md` +- In `README.md` add a reference to this documentation file. +- Run [Ruling](#ruling) test. ## Testing diff --git a/docs/RELEASING.md b/docs/RELEASING.md index 09e12b6d..4f6c7012 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -1,5 +1,5 @@ ## Releasing npm package -* [Create a Jira release ticket](https://jira.sonarsource.com/projects/REL) like [this one](https://sonarsource.atlassian.net/browse/REL-2313) -* [Publish a new GitHub release](https://github.com/SonarSource/eslint-plugin-sonarjs/releases/new) -* [Bump the package version for the next development iteration](https://github.com/SonarSource/eslint-plugin-sonarjs/pull/418/files) +- [Create a Jira release ticket](https://jira.sonarsource.com/projects/REL) like [this one](https://sonarsource.atlassian.net/browse/REL-2313) +- [Publish a new GitHub release](https://github.com/SonarSource/eslint-plugin-sonarjs/releases/new) +- [Bump the package version for the next development iteration](https://github.com/SonarSource/eslint-plugin-sonarjs/pull/418/files) diff --git a/docs/rules/cognitive-complexity.md b/docs/rules/cognitive-complexity.md index b4acf5f5..653818f3 100644 --- a/docs/rules/cognitive-complexity.md +++ b/docs/rules/cognitive-complexity.md @@ -4,7 +4,7 @@ Cognitive Complexity is a measure of how hard the control flow of a function is ## See -* [Cognitive Complexity](http://redirect.sonarsource.com/doc/cognitive-complexity.html) +- [Cognitive Complexity](http://redirect.sonarsource.com/doc/cognitive-complexity.html) ## Configuration diff --git a/docs/rules/elseif-without-else.md b/docs/rules/elseif-without-else.md index 9e9e693a..ce0009a6 100644 --- a/docs/rules/elseif-without-else.md +++ b/docs/rules/elseif-without-else.md @@ -15,6 +15,7 @@ if (x == 0) { doSomethingElse(); } ``` + ## Compliant Solution ```javascript @@ -23,7 +24,7 @@ if (x == 0) { } else if (x == 1) { doSomethingElse(); } else { - throw "Unexpected value for x"; + throw 'Unexpected value for x'; } ``` diff --git a/docs/rules/no-collection-size-mischeck.md b/docs/rules/no-collection-size-mischeck.md index 20040e2a..48e0c19a 100644 --- a/docs/rules/no-collection-size-mischeck.md +++ b/docs/rules/no-collection-size-mischeck.md @@ -1,25 +1,33 @@ # no-collection-size-mischeck -:wrench: *fixable* +:wrench: _fixable_ The size of a collection and the length of an array are always greater than or equal to zero. So testing that a size or length is greater than or equal to zero doesn't make sense, since the result is always `true`. Similarly testing that it is less than zero will always return `false`. Perhaps the intent was to check the non-emptiness of the collection or array instead. ## Noncompliant Code Example ```javascript -if (someSet.size >= 0) {...} // Noncompliant +if (someSet.size >= 0) { // Noncompliant + //... +} -if (someMap.size < 0) {...} // Noncompliant +if (someMap.size < 0) { // Noncompliant + //... +} -const result = someArray.length >= 0; // Noncompliant +const result = someArray.length >= 0; // Noncompliant ``` ## Compliant Solution ```javascript -if (someSet.size > 0) {...} +if (someSet.size > 0) { + //... +} -if (someMap.size == 0) {...} +if (someMap.size == 0) { + //... +} const result = someArray.length > 0; ``` diff --git a/docs/rules/no-duplicate-string.md b/docs/rules/no-duplicate-string.md index 65a3964f..71949415 100644 --- a/docs/rules/no-duplicate-string.md +++ b/docs/rules/no-duplicate-string.md @@ -1,9 +1,11 @@ # no-duplicate-string + Duplicated string literals make the process of refactoring error-prone, since you must be sure to update all occurrences. On the other hand, constants can be referenced from many places, but only need to be updated in a single place. ## Exceptions -To prevent generating some false-positives, literals having less than 10 characters are excluded as well as literals matching /^\w*$/. String literals inside import/export statements are also ignored. The same goes for statement-like string literals, e.g. `'use strict';` + +To prevent generating some false-positives, literals having less than 10 characters are excluded as well as literals matching /^\w\*$/. String literals inside import/export statements are also ignored. The same goes for statement-like string literals, e.g. `'use strict';` ## Configuration @@ -23,3 +25,4 @@ Comma-separated list of strings that must be ignored. Default is `"application/j "no-duplicate-string": "error", "no-duplicate-string": ["error", { "ignoreStrings": "foo,bar,baz" }] } +``` diff --git a/docs/rules/no-duplicated-branches.md b/docs/rules/no-duplicated-branches.md index d55e973e..3d126f62 100644 --- a/docs/rules/no-duplicated-branches.md +++ b/docs/rules/no-duplicated-branches.md @@ -28,8 +28,7 @@ if (a >= 0 && a < 10) { doTheThing(); } else if (a >= 10 && a < 20) { doTheOtherThing(); -} else if (a >= 20 && a < 50) { - // Noncompliant; duplicates first condition +} else if (a >= 20 && a < 50) { // Noncompliant; duplicates first condition doFirstThing(); doTheThing(); } else { diff --git a/docs/rules/no-element-overwrite.md b/docs/rules/no-element-overwrite.md index 264e0339..e870ee13 100644 --- a/docs/rules/no-element-overwrite.md +++ b/docs/rules/no-element-overwrite.md @@ -5,11 +5,11 @@ It is highly suspicious when a value is saved for a key or index and then uncond ## Noncompliant Code Example ```javascript -fruits[1] = "banana"; -fruits[1] = "apple"; // Noncompliant - value on index 1 is overwritten +fruits[1] = 'banana'; +fruits[1] = 'apple'; // Noncompliant - value on index 1 is overwritten -myMap.set("key", 1); -myMap.set("key", 2); // Noncompliant - value for key "key" is replaced +myMap.set('key', 1); +myMap.set('key', 2); // Noncompliant - value for key "key" is replaced mySet.add(1); mySet.add(1); // Noncompliant - element is already in the set diff --git a/docs/rules/no-empty-collection.md b/docs/rules/no-empty-collection.md index af541917..584d29a5 100644 --- a/docs/rules/no-empty-collection.md +++ b/docs/rules/no-empty-collection.md @@ -7,9 +7,9 @@ When a collection is empty it makes no sense to access or iterate it. Doing so a ```javascript let strings = []; -if (strings.includes("foo")) {} // Noncompliant +if (strings.includes('foo')) {} // Noncompliant -for (str of strings) {} // Noncompliant +for (str of strings) {} // Noncompliant strings.forEach(str => doSomething(str)); // Noncompliant ``` diff --git a/docs/rules/no-extra-arguments.md b/docs/rules/no-extra-arguments.md index 862fb75a..e287142e 100644 --- a/docs/rules/no-extra-arguments.md +++ b/docs/rules/no-extra-arguments.md @@ -6,10 +6,10 @@ You can easily call a JavaScript function with more arguments than the function ```javascript function say(a, b) { - print(a + " " + b); + print(a + ' ' + b); } -say("hello", "world", "!"); // Noncompliant; last argument is not used +say('hello', 'world', '!'); // Noncompliant; last argument is not used ``` ## Exceptions diff --git a/docs/rules/no-identical-conditions.md b/docs/rules/no-identical-conditions.md index 9081239c..4b1ad036 100644 --- a/docs/rules/no-identical-conditions.md +++ b/docs/rules/no-identical-conditions.md @@ -34,12 +34,9 @@ switch (param) { ## Compliant Solution ```javascript -if (param == 1) - openWindow(); -else if (param == 2) - closeWindow(); -else if (param == 3) - moveWindowToTheBackground(); +if (param == 1) openWindow(); +else if (param == 2) closeWindow(); +else if (param == 3) moveWindowToTheBackground(); switch (param) { case 1: diff --git a/docs/rules/no-identical-expressions.md b/docs/rules/no-identical-expressions.md index 4db93663..78396ad4 100644 --- a/docs/rules/no-identical-expressions.md +++ b/docs/rules/no-identical-expressions.md @@ -1,9 +1,9 @@ # no-identical-expressions -Using the same value on either side of a binary operator is almost always a mistake. In the case -of logical operators, it is either a copy/paste error and therefore a bug, or it is simply wasted -code, and should be simplified. In the case of bitwise operators and most binary mathematical -operators, having the same value on both sides of an operator yields predictable results, and +Using the same value on either side of a binary operator is almost always a mistake. In the case +of logical operators, it is either a copy/paste error and therefore a bug, or it is simply wasted +code, and should be simplified. In the case of bitwise operators and most binary mathematical +operators, having the same value on both sides of an operator yields predictable results, and should be simplified. This rule ignores `*`, `+`, and `=`. @@ -11,10 +11,10 @@ This rule ignores `*`, `+`, and `=`. ## Noncompliant Code Example ```javascript -if (a == b && a == b) { // if the first one is true, the second one is too +if (a == b && a == b) { // Noncompliant: if the first one is true, the second one is too doX(); } -if (a > a) { // always false +if (a > a) { // Noncompliant: always false doW(); } @@ -32,9 +32,9 @@ Moreover comma operator , and `instanceof` operator are ignored as there are use ```javascript if (f !== f) { // test for NaN value - console.log("f is NaN"); + console.log('f is NaN'); } var i = 1 << 1; // Compliant var j = a << a; // Noncompliant -``` \ No newline at end of file +``` diff --git a/docs/rules/no-inverted-boolean-check.md b/docs/rules/no-inverted-boolean-check.md index 8c7e6fd7..712587ba 100644 --- a/docs/rules/no-inverted-boolean-check.md +++ b/docs/rules/no-inverted-boolean-check.md @@ -1,17 +1,21 @@ # no-inverted-boolean-check -:wrench: *fixable* +:wrench: _fixable_ It is needlessly complex to invert the result of a boolean comparison. The opposite comparison should be made instead. ## Noncompliant Code Example ```javascript -if (!(a === 2)) { ... } // Noncompliant +if (!(a === 2)) { // Noncompliant + //... +} ``` ## Compliant Solution ```javascript -if (a !== 2) { ... } +if (a !== 2) { + //... +} ``` diff --git a/docs/rules/no-nested-switch.md b/docs/rules/no-nested-switch.md index 6a314663..4135cc50 100644 --- a/docs/rules/no-nested-switch.md +++ b/docs/rules/no-nested-switch.md @@ -10,7 +10,7 @@ Specifically, you should structure your code to avoid the need for nested `switc function foo(n, m) { switch (n) { case 0: - switch (m) { // Noncompliant; nested switch + switch (m) { // Noncompliant; nested switch // ... } case 1: @@ -36,7 +36,7 @@ function foo(n, m) { } function bar(m) { - switch(m) { + switch (m) { // ... } } diff --git a/docs/rules/no-nested-template-literals.md b/docs/rules/no-nested-template-literals.md index 2f1848ec..eb5a0858 100644 --- a/docs/rules/no-nested-template-literals.md +++ b/docs/rules/no-nested-template-literals.md @@ -9,7 +9,7 @@ In such situations, it’s preferable to move the nested template into a separat ## Noncompliant Code Example ```javascript -let color = "red"; +let color = 'red'; let count = 3; let message = `I have ${color ? `${count} ${color}` : count} apples`; // Noncompliant; nested template strings not easy to read ``` @@ -17,7 +17,7 @@ let message = `I have ${color ? `${count} ${color}` : count} apples`; // Noncomp ## Compliant Solution ```javascript -let color = "red"; +let color = 'red'; let count = 3; let apples = color ? `${count} ${color}` : count; let message = `I have ${apples} apples`; @@ -28,7 +28,7 @@ let message = `I have ${apples} apples`; Nested template is ignored when the nesting one starts and ends on a different line. ```javascript -let color = "red"; +let color = 'red'; let count = 3; let message = `I have ${color ? `${count} ${color}` : count} diff --git a/docs/rules/no-one-iteration-loop.md b/docs/rules/no-one-iteration-loop.md index a79da1ac..3160dee9 100644 --- a/docs/rules/no-one-iteration-loop.md +++ b/docs/rules/no-one-iteration-loop.md @@ -1,7 +1,7 @@ # no-one-iteration-loop A loop with at most one iteration is equivalent to the use of an `if` statement to conditionally execute one piece of code. No developer expects to find such a use of a loop statement. If the initial intention of the author was really to conditionally execute one piece of code, an `if` statement should be used instead. - + At worst that was not the initial intention of the author and so the body of the loop should be fixed to use the nested `return`, `break` or `throw` statements in a more appropriate way. ## Noncompliant Code Example diff --git a/docs/rules/no-redundant-boolean.md b/docs/rules/no-redundant-boolean.md index 8b6b2647..94a30113 100644 --- a/docs/rules/no-redundant-boolean.md +++ b/docs/rules/no-redundant-boolean.md @@ -21,4 +21,3 @@ if (booleanMethod()) { /* ... */ } doSomething(true); doSomething(booleanMethod()); ``` - diff --git a/docs/rules/no-redundant-jump.md b/docs/rules/no-redundant-jump.md index 2262193b..217826ce 100644 --- a/docs/rules/no-redundant-jump.md +++ b/docs/rules/no-redundant-jump.md @@ -1,6 +1,6 @@ # no-redundant-jump -:wrench: *fixable* +:wrench: _fixable_ Jump statements, such as `return`, `break` and `continue` let you change the default flow of program execution, but jump statements that direct the control flow to the original direction are just a waste of keystrokes. @@ -9,7 +9,7 @@ Jump statements, such as `return`, `break` and `continue` let you change the def ```javascript function redundantJump(x) { if (x == 1) { - console.log("x == 1"); + console.log('x == 1'); return; // Noncompliant } } @@ -20,7 +20,7 @@ function redundantJump(x) { ```javascript function redundantJump(x) { if (x == 1) { - console.log("x == 1"); + console.log('x == 1'); } } ``` diff --git a/docs/rules/no-same-line-conditional.md b/docs/rules/no-same-line-conditional.md index 12bb672c..fdbb1f58 100644 --- a/docs/rules/no-same-line-conditional.md +++ b/docs/rules/no-same-line-conditional.md @@ -1,15 +1,15 @@ # no-same-line-conditional -:wrench: *fixable* +:wrench: _fixable_ -Code is clearest when each statement has its own line. Nonetheless, it is a common pattern to combine on the same line an `if` and its resulting *then* statement. However, when an `if` is placed on the same line as the closing `}` from a preceding *then*, *else* or *else if* part, it is either an error - `else` is missing - or the invitation to a future error as maintainers fail to understand that the two statements are unconnected. +Code is clearest when each statement has its own line. Nonetheless, it is a common pattern to combine on the same line an `if` and its resulting _then_ statement. However, when an `if` is placed on the same line as the closing `}` from a preceding _then_, _else_ or _else if_ part, it is either an error - `else` is missing - or the invitation to a future error as maintainers fail to understand that the two statements are unconnected. ## Noncompliant Code Example ```javascript if (condition1) { // ... -} if (condition2) { // Noncompliant +} if (condition2) { // Noncompliant //... } ``` diff --git a/docs/rules/no-unused-collection.md b/docs/rules/no-unused-collection.md index 705be1fb..aec8e297 100644 --- a/docs/rules/no-unused-collection.md +++ b/docs/rules/no-unused-collection.md @@ -8,7 +8,7 @@ This rule raises an issue when no methods are called on a collection other than ```javascript function getLength(a, b, c) { - const strings = []; // Noncompliant + const strings = []; // Noncompliant strings.push(a); strings.push(b); strings.push(c); diff --git a/docs/rules/no-use-of-empty-return-value.md b/docs/rules/no-use-of-empty-return-value.md index 2abe57dc..e368b972 100644 --- a/docs/rules/no-use-of-empty-return-value.md +++ b/docs/rules/no-use-of-empty-return-value.md @@ -6,7 +6,7 @@ If a function does not return anything, it makes no sense to use its output. Spe ```javascript function foo() { - console.log("Hello, World!"); + console.log('Hello, World!'); } a = foo(); @@ -16,7 +16,7 @@ a = foo(); ```javascript function foo() { - console.log("Hello, World!"); + console.log('Hello, World!'); } foo(); diff --git a/docs/rules/non-existent-operator.md b/docs/rules/non-existent-operator.md index 678eec43..b1880688 100644 --- a/docs/rules/non-existent-operator.md +++ b/docs/rules/non-existent-operator.md @@ -1,6 +1,6 @@ # non-existent-operator -:wrench: *fixable* +:wrench: _fixable_ The use of operators pairs (`=+`, `=-` or `=!`) where the reversed, single operator was meant (`+=`, `-=` or `!=`) will compile and run, but not produce the expected results. @@ -9,11 +9,11 @@ This rule raises an issue when `=+`, `=-` and `=!` are used without any space be ## Noncompliant Code Example ```javascript -let target =-5; +let target = -5; let num = 3; -target =- num; // Noncompliant; target = -3. Is that really what's meant? -target =+ num; // Noncompliant; target = 3 +target = -num; // Noncompliant; target = -3. Is that really what's meant? +target = +num; // Noncompliant; target = 3 ``` ## Compliant Solution @@ -22,6 +22,6 @@ target =+ num; // Noncompliant; target = 3 let target = -5; let num = 3; -target = -num; // Compliant; intent to assign inverse value of num is clear +target = -num; // Compliant; intent to assign inverse value of num is clear target += num; ``` diff --git a/docs/rules/prefer-immediate-return.md b/docs/rules/prefer-immediate-return.md index e5d8a4fc..41df936b 100644 --- a/docs/rules/prefer-immediate-return.md +++ b/docs/rules/prefer-immediate-return.md @@ -1,6 +1,6 @@ # prefer-immediate-return -:wrench: *fixable* +:wrench: _fixable_ Declaring a variable only to immediately return or throw it is a bad practice. diff --git a/docs/rules/prefer-object-literal.md b/docs/rules/prefer-object-literal.md index cb0ab9e5..6729635c 100644 --- a/docs/rules/prefer-object-literal.md +++ b/docs/rules/prefer-object-literal.md @@ -4,24 +4,24 @@ Object literal syntax, which initializes an object's properties inside the objec An issue is raised when the following pattern is met: -* An empty object is created. -* A consecutive single-line statement adds a property to the created object. +- An empty object is created. +- A consecutive single-line statement adds a property to the created object. ## Noncompliant Code Example ```javascript var person = {}; // Noncompliant -person.firstName = "John"; -person.middleInitial = "Q"; -person.lastName = "Public"; +person.firstName = 'John'; +person.middleInitial = 'Q'; +person.lastName = 'Public'; ``` ## Compliant Solution ```javascript var person = { - firstName: "John", - middleInitial: "Q", - lastName: "Public", + firstName: 'John', + middleInitial: 'Q', + lastName: 'Public', }; ``` diff --git a/docs/rules/prefer-single-boolean-return.md b/docs/rules/prefer-single-boolean-return.md index 786bebd6..15ee404f 100644 --- a/docs/rules/prefer-single-boolean-return.md +++ b/docs/rules/prefer-single-boolean-return.md @@ -1,6 +1,6 @@ # prefer-single-boolean-return -:wrench: *fixable* +:wrench: _fixable_ Return of boolean literal statements wrapped into `if-then-else` flow should be simplified. diff --git a/docs/rules/prefer-while.md b/docs/rules/prefer-while.md index 927bbd53..29ac9439 100644 --- a/docs/rules/prefer-while.md +++ b/docs/rules/prefer-while.md @@ -1,6 +1,6 @@ # prefer-while -:wrench: *fixable* +:wrench: _fixable_ When only the condition expression is defined in a `for` loop, and the initialization and increment expressions are missing, a `while` loop should be used instead to increase readability. diff --git a/package-lock.json b/package-lock.json index ab8ac2df..c37dc987 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,12 +28,13 @@ "eslint-plugin-import": "2.26.0", "eslint-plugin-notice": "0.9.10", "eslint-plugin-sonarjs": "0.23.0", + "husky": "8.0.3", "jest": "29.5.0", "jest-sonar-reporter": "2.0.0", - "lint-staged": "13.0.3", "lodash": "4.17.21", "minimist": "1.2.6", "prettier": "2.7.1", + "pretty-quick": "3.1.3", "rimraf": "3.0.2", "ts-jest": "29.1.1", "ts-node": "10.9.1", @@ -3221,6 +3222,12 @@ "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", "dev": true }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "node_modules/@types/minimist": { "version": "1.2.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/@types/minimist/-/minimist-1.2.2.tgz", @@ -3442,19 +3449,6 @@ "node": ">=0.4.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ajv/-/ajv-6.12.6.tgz", @@ -3535,6 +3529,15 @@ "is-array-buffer": "^3.0.1" } }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/array-includes": { "version": "3.1.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/array-includes/-/array-includes-3.1.6.tgz", @@ -3592,10 +3595,10 @@ "node": ">= 0.4" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "engines": { "node": ">=8" @@ -3833,40 +3836,6 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cliui/-/cliui-8.0.1.tgz", @@ -3941,21 +3910,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/commander": { - "version": "9.5.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || >=14" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/concat-map/-/concat-map-0.0.1.tgz", @@ -4183,12 +4137,6 @@ "node": ">=6.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "node_modules/electron-to-chromium": { "version": "1.4.569", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/electron-to-chromium/-/electron-to-chromium-1.4.569.tgz", @@ -4204,11 +4152,14 @@ "node": ">=12" } }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } }, "node_modules/error-ex": { "version": "1.3.2", @@ -5374,6 +5325,18 @@ "node": ">=10.17.0" } }, + "node_modules/husky": { + "version": "8.0.3", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ignore/-/ignore-5.2.4.tgz", @@ -5421,15 +5384,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/inflight/-/inflight-1.0.6.tgz", @@ -5538,15 +5492,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/is-generator-fn": { "version": "2.1.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -7737,524 +7682,209 @@ "node": ">= 0.8.0" } }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/lint-staged": { - "version": "13.0.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lint-staged/-/lint-staged-13.0.3.tgz", - "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" + "p-locate": "^4.1.0" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "6.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true, - "engines": { - "node": ">=12.20.0" - } + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "dependencies": { + "yallist": "^3.0.2" } }, - "node_modules/lint-staged/node_modules/mimic-fn": { + "node_modules/make-dir": { "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "path-key": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "mimic-fn": "^4.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/lint-staged/node_modules/path-key": { + "node_modules/make-dir/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "engines": { - "node": ">=12" - } + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "tmpl": "1.0.5" } }, - "node_modules/listr2": { - "version": "4.0.5", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "node": ">= 8" } }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/metric-lcs": { + "version": "0.1.2", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/metric-lcs/-/metric-lcs-0.1.2.tgz", + "integrity": "sha512-+TZ5dUDPKPJaU/rscTzxyN8ZkX7eAVLAiQU/e+YINleXPv03SCmJShaMT1If1liTH8OcmWXZs0CmzCBRBLcMpA==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, - "node_modules/listr2/node_modules/cli-truncate": { + "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/listr2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=7.0.0" + "node": "*" } }, - "node_modules/listr2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, - "node_modules/listr2/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { + "node_modules/multimatch": { "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" }, "engines": { "node": ">=8" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/metric-lcs": { - "version": "0.1.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/metric-lcs/-/metric-lcs-0.1.2.tgz", - "integrity": "sha512-+TZ5dUDPKPJaU/rscTzxyN8ZkX7eAVLAiQU/e+YINleXPv03SCmJShaMT1If1liTH8OcmWXZs0CmzCBRBLcMpA==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8412,18 +8042,6 @@ "node": ">=6" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/p-try/-/p-try-2.2.0.tgz", @@ -8517,18 +8135,6 @@ "node": ">=8.6" } }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pirates/-/pirates-4.0.6.tgz", @@ -8594,6 +8200,134 @@ "node": ">=10" } }, + "node_modules/pretty-quick": { + "version": "3.1.3", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pretty-quick/-/pretty-quick-3.1.3.tgz", + "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "execa": "^4.0.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.5", + "multimatch": "^4.0.0" + }, + "bin": { + "pretty-quick": "bin/pretty-quick.js" + }, + "engines": { + "node": ">=10.13" + }, + "peerDependencies": { + "prettier": ">=2.0.0" + } + }, + "node_modules/pretty-quick/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pretty-quick/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/pretty-quick/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pretty-quick/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/pretty-quick/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/prompts/-/prompts-2.4.2.tgz", @@ -8607,6 +8341,16 @@ "node": ">= 6" } }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/punycode/-/punycode-2.3.0.tgz", @@ -8781,19 +8525,6 @@ "node": ">=10" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/reusify/-/reusify-1.0.4.tgz", @@ -8804,12 +8535,6 @@ "node": ">=0.10.0" } }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/rimraf/-/rimraf-3.0.2.tgz", @@ -8825,19 +8550,10 @@ "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "dependencies": { - "tslib": "^2.1.0" + "queue-microtask": "^1.2.2" } }, "node_modules/safe-array-concat": { @@ -8928,28 +8644,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/source-map/-/source-map-0.6.1.tgz", @@ -8996,15 +8690,6 @@ "node": ">=8" } }, - "node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-length/-/string-length-4.0.2.tgz", @@ -9018,41 +8703,6 @@ "node": ">=10" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/string.prototype.trim": { "version": "1.2.7", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", @@ -9169,12 +8819,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/tmpl/-/tmpl-1.0.5.tgz", @@ -9354,12 +8998,6 @@ "node": ">=4" } }, - "node_modules/tslib": { - "version": "2.6.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/tsutils/-/tsutils-3.21.0.tgz", @@ -9743,15 +9381,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "node_modules/yaml": { - "version": "2.3.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/yargs/-/yargs-17.7.2.tgz", @@ -12179,6 +11808,12 @@ "integrity": "sha512-/THyiqyQAP9AfARo4pF+aCGcyiQ94tX/Is2I7HofNRqoYLgN1PBoOWu2/zTA5zMxzP5EFutMtWtGAFRKUe961Q==", "dev": true }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, "@types/minimist": { "version": "1.2.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/@types/minimist/-/minimist-1.2.2.tgz", @@ -12341,16 +11976,6 @@ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ajv/-/ajv-6.12.6.tgz", @@ -12419,6 +12044,12 @@ "is-array-buffer": "^3.0.1" } }, + "array-differ": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true + }, "array-includes": { "version": "3.1.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/array-includes/-/array-includes-3.1.6.tgz", @@ -12464,10 +12095,10 @@ "is-shared-array-buffer": "^1.0.2" } }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "arrify": { + "version": "2.0.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, "available-typed-arrays": { @@ -12657,31 +12288,6 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-truncate": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - } - }, "cliui": { "version": "8.0.1", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cliui/-/cliui-8.0.1.tgz", @@ -12745,18 +12351,6 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "colorette": { - "version": "2.0.20", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "commander": { - "version": "9.5.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", - "dev": true - }, "concat-map": { "version": "0.0.1", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/concat-map/-/concat-map-0.0.1.tgz", @@ -12929,12 +12523,6 @@ "esutils": "^2.0.2" } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "electron-to-chromium": { "version": "1.4.569", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/electron-to-chromium/-/electron-to-chromium-1.4.569.tgz", @@ -12947,11 +12535,14 @@ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", "dev": true }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } }, "error-ex": { "version": "1.3.2", @@ -13890,6 +13481,12 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, + "husky": { + "version": "8.0.3", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true + }, "ignore": { "version": "5.2.4", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ignore/-/ignore-5.2.4.tgz", @@ -13922,12 +13519,6 @@ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/inflight/-/inflight-1.0.6.tgz", @@ -14021,12 +13612,6 @@ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, - "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true - }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -15694,245 +15279,65 @@ "requires": { "argparse": "^2.0.1" } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "lint-staged": { - "version": "13.0.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lint-staged/-/lint-staged-13.0.3.tgz", - "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - }, - "dependencies": { - "execa": { - "version": "6.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - } - }, - "human-signals": { - "version": "3.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true - }, - "is-stream": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true - }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, - "npm-run-path": { - "version": "5.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "requires": { - "path-key": "^4.0.0" - } - }, - "onetime": { - "version": "6.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "requires": { - "mimic-fn": "^4.0.0" - } - }, - "path-key": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true - }, - "strip-final-newline": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true - } - } - }, - "listr2": { - "version": "4.0.5", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "locate-path": { "version": "5.0.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/locate-path/-/locate-path-5.0.0.tgz", @@ -15966,89 +15371,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "log-update": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, "lru-cache": { "version": "5.1.1", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/lru-cache/-/lru-cache-5.1.1.tgz", @@ -16157,12 +15479,31 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "mri": { + "version": "1.2.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "multimatch": { + "version": "4.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/multimatch/-/multimatch-4.0.0.tgz", + "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/natural-compare/-/natural-compare-1.4.0.tgz", @@ -16292,15 +15633,6 @@ } } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/p-try/-/p-try-2.2.0.tgz", @@ -16370,12 +15702,6 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "pidtree": { - "version": "0.6.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true - }, "pirates": { "version": "4.0.6", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pirates/-/pirates-4.0.6.tgz", @@ -16422,6 +15748,103 @@ } } }, + "pretty-quick": { + "version": "3.1.3", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pretty-quick/-/pretty-quick-3.1.3.tgz", + "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "execa": "^4.0.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.5", + "multimatch": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "prompts": { "version": "2.4.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/prompts/-/prompts-2.4.2.tgz", @@ -16432,6 +15855,16 @@ "sisteransi": "^1.0.5" } }, + "pump": { + "version": "3.0.0", + "resolved": "https://repox.jfrog.io/repox/api/npm/npm/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.3.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/punycode/-/punycode-2.3.0.tgz", @@ -16574,28 +16007,12 @@ "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, "reusify": { "version": "1.0.4", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "rfdc": { - "version": "1.3.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/rimraf/-/rimraf-3.0.2.tgz", @@ -16614,15 +16031,6 @@ "queue-microtask": "^1.2.2" } }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - } - }, "safe-array-concat": { "version": "1.0.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/safe-array-concat/-/safe-array-concat-1.0.0.tgz", @@ -16696,24 +16104,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "5.0.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - } - } - }, "source-map": { "version": "0.6.1", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/source-map/-/source-map-0.6.1.tgz", @@ -16753,12 +16143,6 @@ } } }, - "string-argv": { - "version": "0.3.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true - }, "string-length": { "version": "4.0.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-length/-/string-length-4.0.2.tgz", @@ -16769,34 +16153,6 @@ "strip-ansi": "^6.0.0" } }, - "string-width": { - "version": "5.1.2", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "strip-ansi": { - "version": "7.1.0", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, "string.prototype.trim": { "version": "1.2.7", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", @@ -16889,12 +16245,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, "tmpl": { "version": "1.0.5", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/tmpl/-/tmpl-1.0.5.tgz", @@ -17008,12 +16358,6 @@ } } }, - "tslib": { - "version": "2.6.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/tslib/-/tslib-2.6.1.tgz", - "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", - "dev": true - }, "tsutils": { "version": "3.21.0", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/tsutils/-/tsutils-3.21.0.tgz", @@ -17319,12 +16663,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, - "yaml": { - "version": "2.3.1", - "resolved": "https://repox.jfrog.io/repox/api/npm/npm/yaml/-/yaml-2.3.1.tgz", - "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", - "dev": true - }, "yargs": { "version": "17.7.2", "resolved": "https://repox.jfrog.io/repox/api/npm/npm/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index 7d42c6f4..26b71e90 100644 --- a/package.json +++ b/package.json @@ -19,15 +19,14 @@ "node": ">=14" }, "scripts": { - "build": "rimraf lib && npm run check-format && tsc -d -p tsconfig-src.json", + "build": "rimraf lib && tsc -d -p tsconfig.json", "test": "jest", "ruling": "ts-node --files ruling/index.ts", - "typecheck": "tsc -p tsconfig.json", - "lint": "eslint --ext js,ts src tests ruling/index.ts", - "precommit": "lint-staged && npm run typecheck", + "precommit": "pretty-quick --staged", + "prepare": "husky install .husky", "prepack": "npm run build", - "format": "prettier --write \"{src,tests}/**/*.ts\"", - "check-format": "prettier --list-different \"{src,tests}/**/*.ts\"" + "format": "prettier --write .", + "check-format": "prettier --list-different ." }, "peerDependencies": { "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" @@ -52,12 +51,13 @@ "eslint-plugin-import": "2.26.0", "eslint-plugin-notice": "0.9.10", "eslint-plugin-sonarjs": "0.23.0", + "husky": "8.0.3", "jest": "29.5.0", "jest-sonar-reporter": "2.0.0", - "lint-staged": "13.0.3", "lodash": "4.17.21", "minimist": "1.2.6", "prettier": "2.7.1", + "pretty-quick": "3.1.3", "rimraf": "3.0.2", "ts-jest": "29.1.1", "ts-node": "10.9.1", @@ -94,16 +94,5 @@ "testMatch": [ "/tests/**/*.test.ts" ] - }, - "lint-staged": { - "*.{ts,tsx,js}": [ - "eslint", - "prettier --write", - "git add" - ], - "*.json": [ - "prettier --write", - "git add" - ] } } diff --git a/ruling/.eslintrc.js b/ruling/.eslintrc.js index f79180c1..8054c7bf 100644 --- a/ruling/.eslintrc.js +++ b/ruling/.eslintrc.js @@ -1,5 +1,24 @@ +/* + * eslint-plugin-sonarjs + * Copyright (C) 2018-2021 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ module.exports = { rules: { - "no-console": "off", + 'no-console': 'off', }, }; diff --git a/ruling/index.ts b/ruling/index.ts index b8e7fb59..db0924c7 100644 --- a/ruling/index.ts +++ b/ruling/index.ts @@ -17,48 +17,48 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import * as fs from "fs"; -import * as path from "path"; -import { ESLint } from "eslint"; -import * as lodash from "lodash"; -import * as minimist from "minimist"; +import * as fs from 'fs'; +import * as path from 'path'; +import { ESLint } from 'eslint'; +import * as lodash from 'lodash'; +import * as minimist from 'minimist'; -const rulesPath = path.join(__dirname, "../lib/rules"); +const rulesPath = path.join(__dirname, '../lib/rules'); run(); async function run() { const argv = minimist(process.argv.slice(2), { - string: ["rule"], - boolean: ["update"], + string: ['rule'], + boolean: ['update'], }); const rules = getRules(argv.rule); if (!rules.length) { - console.error("No rules found!"); + console.error('No rules found!'); process.exit(1); } - console.log("Found rules:"); + console.log('Found rules:'); rules.forEach(rule => { - console.log(" *", rule); + console.log(' *', rule); }); - console.log(""); + console.log(''); - const sourcesPath = path.join(__dirname, "javascript-test-sources/src"); + const sourcesPath = path.join(__dirname, 'javascript-test-sources/src'); if (!fs.existsSync(sourcesPath)) { - console.error("No sources found!"); + console.error('No sources found!'); process.exit(1); } const eslint = new ESLint({ overrideConfig: { - parser: "@babel/eslint-parser", + parser: '@babel/eslint-parser', parserOptions: { ecmaFeatures: { jsx: true, experimentalObjectRestSpread: true }, ecmaVersion: 2018, - sourceType: "module", + sourceType: 'module', requireConfigFile: false, babelOptions: { babelrc: false, @@ -66,16 +66,19 @@ async function run() { parserOpts: { allowReturnOutsideFunction: true, }, - presets: ["@babel/preset-env", "@babel/preset-flow", "@babel/preset-react"], - plugins: ["@babel/plugin-proposal-function-bind", "@babel/plugin-proposal-export-default-from"] - } + presets: ['@babel/preset-env', '@babel/preset-flow', '@babel/preset-react'], + plugins: [ + '@babel/plugin-proposal-function-bind', + '@babel/plugin-proposal-export-default-from', + ], + }, }, rules: getEslintRules(rules), }, rulePaths: [rulesPath], useEslintrc: false, allowInlineConfig: false, - ignorePath: path.join(__dirname, ".eslintignore"), + ignorePath: path.join(__dirname, '.eslintignore'), }); const reportResults = await eslint.lintFiles([sourcesPath]); @@ -113,8 +116,8 @@ async function run() { function getRules(rule?: string) { const rules = fs .readdirSync(rulesPath) - .filter(file => file.endsWith(".js")) - .map(file => file.substring(0, file.indexOf(".js"))); + .filter(file => file.endsWith('.js')) + .map(file => file.substring(0, file.indexOf('.js'))); if (rule) { return rules.includes(rule) ? [rule] : []; @@ -124,9 +127,9 @@ function getRules(rule?: string) { } function getEslintRules(rules: string[]) { - const eslintRules: { [rule: string]: "error" } = {}; + const eslintRules: { [rule: string]: 'error' } = {}; rules.forEach(rule => { - eslintRules[rule] = "error"; + eslintRules[rule] = 'error'; }); return eslintRules; } @@ -142,7 +145,7 @@ function addToResults(results: Results, filePath: string, ruleId: string, line: } function getFileNameForSnapshot(path: string): string { - const marker = "/javascript-test-sources/"; + const marker = '/javascript-test-sources/'; const unixPath = path.replace(/\\+/g, '/'); const pos = unixPath.indexOf(marker); return unixPath.substr(pos + marker.length); @@ -165,7 +168,7 @@ function writeResults(results: Results) { content.push(`${file}: ${lines.join()}`); }); - writeSnapshot(rule, content.join("\n") + "\n"); + writeSnapshot(rule, content.join('\n') + '\n'); }); } @@ -186,20 +189,20 @@ function checkResults(actual: Results) { const missingLines = lodash.difference(expectedLines, actualLines); if (missingLines.length > 0) { passed = false; - console.log("Missing issues:"); - console.log(" * Rule:", rule); - console.log(" * File:", file); - console.log(" * Lines:", missingLines.join(", ")); + console.log('Missing issues:'); + console.log(' * Rule:', rule); + console.log(' * File:', file); + console.log(' * Lines:', missingLines.join(', ')); console.log(); } const extraLines = lodash.difference(actualLines, expectedLines); if (extraLines.length > 0) { passed = false; - console.log("Extra issues:"); - console.log(" * Rule:", rule); - console.log(" * File:", file); - console.log(" * Lines:", extraLines.join(", ")); + console.log('Extra issues:'); + console.log(' * Rule:', rule); + console.log(' * File:', file); + console.log(' * Lines:', extraLines.join(', ')); console.log(); } }); @@ -209,24 +212,24 @@ function checkResults(actual: Results) { } function writeSnapshot(rule: string, content: string): void { - const fileName = path.join(__dirname, "snapshots", rule); + const fileName = path.join(__dirname, 'snapshots', rule); fs.writeFileSync(fileName, content); } function readSnapshots(rules: string[]): Results { - const snapshotsDir = path.join(__dirname, "snapshots"); + const snapshotsDir = path.join(__dirname, 'snapshots'); const results: Results = {}; rules.forEach(rule => { results[rule] = {}; const content = readSnapshotFile(snapshotsDir, rule); content.forEach(line => { - const colonIndex = line.indexOf(":"); + const colonIndex = line.indexOf(':'); if (colonIndex !== -1) { const file = line.substring(0, colonIndex); const lines = line .substr(colonIndex + 1) - .split(",") + .split(',') .map(s => parseInt(s, 10)); results[rule][file] = lines; } @@ -239,7 +242,7 @@ function readSnapshots(rules: string[]): Results { function readSnapshotFile(snapshotsDir: string, ruleName: string) { const rulePath = path.join(snapshotsDir, ruleName); if (fs.existsSync(rulePath)) { - return fs.readFileSync(rulePath, "utf-8").split("\n"); + return fs.readFileSync(rulePath, 'utf-8').split('\n'); } else { return []; } diff --git a/scripts/generate-rules-sonar-meta.ts b/scripts/generate-rules-sonar-meta.ts index 57d10788..e91480f1 100644 --- a/scripts/generate-rules-sonar-meta.ts +++ b/scripts/generate-rules-sonar-meta.ts @@ -17,36 +17,36 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import * as fs from "fs"; +import * as fs from 'fs'; const outputPath = process.argv[2]; const meta = []; -const readmeContent = fs.readFileSync("README.md", "utf-8"); +const readmeContent = fs.readFileSync('README.md', 'utf-8'); const lines = readmeContent.split(/\n/); -let state: "before-bug" | "bug" | "between" | "code-smell" = "before-bug"; +let state: 'before-bug' | 'bug' | 'between' | 'code-smell' = 'before-bug'; for (const line of lines) { - if (state === "before-bug" && line.startsWith("*")) { - state = "bug"; + if (state === 'before-bug' && line.startsWith('*')) { + state = 'bug'; } - if (state === "bug") { - if (line.startsWith("*")) { - addRule(line, "BUG"); + if (state === 'bug') { + if (line.startsWith('*')) { + addRule(line, 'BUG'); } else { - state = "between"; + state = 'between'; } } - if (state === "between" && line.startsWith("*")) { - state = "code-smell"; + if (state === 'between' && line.startsWith('*')) { + state = 'code-smell'; } - if (state === "code-smell") { - if (line.startsWith("*")) { - addRule(line, "CODE_SMELL"); + if (state === 'code-smell') { + if (line.startsWith('*')) { + addRule(line, 'CODE_SMELL'); } else { break; } @@ -54,11 +54,8 @@ for (const line of lines) { } function addRule(line: string, type: string) { - const name = line - .substr(2) - .split("([")[0] - .trim(); - const key = "sonarjs/" + line.split("`")[1].trim(); + const name = line.substr(2).split('([')[0].trim(); + const key = 'sonarjs/' + line.split('`')[1].trim(); meta.push({ key, diff --git a/tsconfig-src.json b/tsconfig-src.json deleted file mode 100644 index 102489ae..00000000 --- a/tsconfig-src.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "noEmit": false, - "outDir": "lib", - "sourceMap": true - }, - "include": ["src/**/*.ts"] -} diff --git a/tsconfig.json b/tsconfig.json index 6982ed9d..b36491a7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,9 +7,10 @@ "noImplicitAny": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noEmit": true, - "allowSyntheticDefaultImports": true + "allowSyntheticDefaultImports": true, + "noEmit": false, + "outDir": "lib", + "sourceMap": true }, - "include": ["ruling", "src", "tests", "typings"], - "exclude": ["ruling/javascript-test-sources"] + "include": ["src/**/*.ts"] }