diff --git a/.eslintrc.json b/.eslintrc.json index 5962cf884..af33e4e62 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,7 +6,6 @@ "eslint-plugin", "functional", "import", - "jest", "jsdoc", "prettier" ], @@ -15,173 +14,38 @@ "node": true }, "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript", + "@rebeccastevens/eslint-config/modern", + "@rebeccastevens/eslint-config/typescript", + "@rebeccastevens/eslint-config/common-overrides", "plugin:eslint-plugin/recommended", - "plugin:functional/recommended", "plugin:prettier/recommended", "prettier" ], "parserOptions": { "ecmaVersion": 10, - "project": [ - "./tsconfig.json", - "./tests/tsconfig.json" - ], + "project": ["./tsconfig.json", "./tests/tsconfig.json"], "sourceType": "module" }, - "ignorePatterns": [ - "build/", - "lib/" - ], + "ignorePatterns": ["build/", "coverage/", "lib/"], "rules": { - // Built in. - "no-param-reassign": "error", - "no-var": "error", - // Our rules. - "functional/prefer-readonly-type": [ - "error", - { - "allowMutableReturnType": true - } - ], - "functional/no-conditional-statement": [ - "error", - { - "allowReturningBranches": true - } - ], - "functional/functional-parameters": [ - "error", - { - "ignorePattern": [ - "^tsInstalled$" - ] - } - ] + "@typescript-eslint/no-unnecessary-condition": "off", + "import/no-relative-parent-imports": "error", + "node/no-unsupported-features/es-builtins": "off", + "node/no-unsupported-features/es-syntax": "off", + // enable once supported in all our supported node versions. + "unicorn/prefer-node-protocol": "off" }, "overrides": [ // Top level files. { - "files": [ - "*" - ], + "files": ["*"], "rules": { "functional/immutable-data": "off", - "functional/functional-parameters": "off", - "functional/no-expression-statement": "off" - } - }, - // TypeScript files. - { - "files": [ - "**/*.ts" - ], - "extends": [ - "plugin:@typescript-eslint/recommended" - ], - "rules": { - "@typescript-eslint/array-type": [ - "error", - { - "default": "generic" - } - ], - "@typescript-eslint/ban-types": [ - "error", - { - "types": { - "Object": { - "message": "Use object instead", - "fixWith": "object" - }, - "{}": false, - "object": false - }, - "extendDefaults": true - } - ], - "@typescript-eslint/prefer-interface": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-require-imports": "error", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-unused-vars-experimental": [ - "warn", - { - "ignoredNamesRegex": "^_", - "ignoreArgsIfArgsAfterAreUsed": true - } - ], - "@typescript-eslint/no-use-before-define": [ - "error", - { - "functions": false, - "classes": true, - "variables": true, - "typedefs": true - } - ] - } - }, - // Source files. - { - "files": [ - "src/**/*" - ], - "rules": { - // JSDoc. - "jsdoc/check-alignment": "warn", - "jsdoc/check-indentation": "warn", - "jsdoc/check-param-names": "warn", - "jsdoc/check-tag-names": "warn", - "jsdoc/implements-on-classes": "warn", - "jsdoc/newline-after-description": "warn", - "jsdoc/no-types": "warn", - "jsdoc/require-description": "warn", - "jsdoc/require-description-complete-sentence": "warn", - "jsdoc/require-hyphen-before-param-description": "warn", - "jsdoc/require-jsdoc": "warn", - "jsdoc/require-param-description": "warn", - "jsdoc/require-param-name": "warn", - "jsdoc/require-returns-check": "warn", - "jsdoc/require-returns-description": "warn" - } - }, - // Testing Files. - { - "files": [ - "tests/**/*" - ], - "env": { - "jest/globals": true - }, - "extends": [ - "plugin:jest/recommended" - ], - "rules": { "functional/functional-parameters": "off", "functional/no-conditional-statement": "off", "functional/no-expression-statement": "off", - "jest/no-alias-methods": "error", - "jest/no-test-return-statement": "error", - "jest/prefer-called-with": "warn", - "jest/prefer-expect-assertions": "error", - "jest/prefer-spy-on": "warn", - "jest/prefer-strict-equal": "warn", - "jest/prefer-to-be-null": "warn", - "jest/prefer-to-be-undefined": "warn", - "jest/prefer-to-contain": "warn", - "jest/prefer-to-have-length": "warn", - "jest/prefer-todo": "error" + "functional/no-throw-statement": "off" } } - ], - "settings": { - "import/ignore": [ - "escape-string-regexp" - ] - } + ] } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44cf32465..1ad18de00 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: - name: Setup NodeJs uses: actions/setup-node@v1 with: - node-version: "14" + node-version: "16" - name: Install Dependencies run: yarn install --frozen-lockfile @@ -48,10 +48,9 @@ jobs: os: - "ubuntu-latest" node_version: - - "10" - "12" - "14" - - "15" + - "16" ts_version: - "next" - "latest" @@ -60,19 +59,18 @@ jobs: runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.ts_version == 'next' }} env: - # Use compiled tests on everything instances except this one. - USE_COMPILED_TEST: ${{ fromJSON('["false", "true"]')[matrix.ts_version != 'latest' || matrix.node_version != '14' || matrix.os != 'ubuntu-latest'] }} + REPORT_COVERAGE: ${{ fromJSON('["false", "true"]')[matrix.ts_version == 'latest' && matrix.node_version == '16' && matrix.os != 'ubuntu-latest'] }} steps: - name: Checkout uses: actions/checkout@v2 with: # Fetch all commits for codecov. - fetch-depth: ${{ fromJSON('[0, 1]')[ env.USE_COMPILED_TEST == 'true'] }} + fetch-depth: ${{ fromJSON('[0, 1]')[ env.REPORT_COVERAGE == 'true'] }} - - name: Setup NodeJs + - name: Setup NodeJs for building uses: actions/setup-node@v1 with: - node-version: ${{ matrix.node_version }} + node-version: "16" - name: Install Dependencies run: yarn install --frozen-lockfile @@ -81,26 +79,28 @@ jobs: run: yarn build - name: Compile Tests - if: env.USE_COMPILED_TEST == 'true' + if: env.REPORT_COVERAGE == 'false' run: yarn compile-tests + - name: Setup NodeJs ${{ matrix.node_version }} for testing + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node_version }} + - name: Remove Dev TypeScript - run: yarn remove typescript + run: yarn remove typescript --ignore-engines - name: Add TypeScript "${{ matrix.ts_version }}" if: matrix.ts_version != 'JS' - run: yarn add -D typescript@"${{ matrix.ts_version }}" + run: yarn add -D typescript@"${{ matrix.ts_version }}" --ignore-engines - - name: Run Tests (Uncompiled) - if: env.USE_COMPILED_TEST != 'true' + - name: Run Tests run: yarn test - - - name: Run Tests (Compiled) - if: env.USE_COMPILED_TEST == 'true' - run: yarn test-compiled + env: + USE_COMPILED_TESTS: ${{ env.REPORT_COVERAGE == 'false' }} - name: Report coverage uses: codecov/codecov-action@v1 - if: env.USE_COMPILED_TEST != 'true' + if: env.REPORT_COVERAGE == 'true' with: file: coverage/lcov.info diff --git a/.gitignore b/.gitignore index 5d44030c6..5093bc8b3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ .DS_Store thumbs.db *.log -.rpt2_cache/ +.nyc_output/ node_modules/ /build/ /lib/ diff --git a/.nycrc b/.nycrc new file mode 100644 index 000000000..332fc26a4 --- /dev/null +++ b/.nycrc @@ -0,0 +1,20 @@ +{ + "extends": "@istanbuljs/nyc-config-typescript", + "include": [ + "src/**/*" + ], + "exclude": [ + "src/util/conditional-imports/**/*" + ], + "reporter": [ + "lcov", + "text" + ], + "check-coverage": false, + "watermarks": { + "lines": [80, 95], + "functions": [80, 95], + "branches": [80, 95], + "statements": [80, 95] + } +} diff --git a/.vscode/launch.json b/.vscode/launch.json index 620098634..32d87b5cc 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,13 +7,18 @@ { "type": "node", "request": "launch", - "name": "Jest Test Current Test File", - "program": "${workspaceFolder}/node_modules/.bin/jest", + "name": "AVA Test Current Test File", + "program": "${workspaceFolder}/node_modules/.bin/ava", "args": [ - "--runInBand", - "--no-coverage", "${relativeFile}" ], + "outputCapture": "std", + "skipFiles": [ + "/**/*.js" + ], + "env": { + "TEST_ALL_FILE": "1" + }, "sourceMaps": true, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", diff --git a/.vscode/settings.json b/.vscode/settings.json index c85328e89..25a330b12 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,12 +1,12 @@ { "files.exclude": { - ".rpt2_cache": true, + ".nyc_output": true, "coverage": true, }, "files.trimTrailingWhitespace": true, "search.exclude": { "**/.git/": true, - "**/.rpt2_cache/": true, + "**/.nyc_output/": true, "**/yarn.lock": true, ".vscode/": true, "build/": true, diff --git a/README.md b/README.md index 7d4991240..80b63e20c 100644 --- a/README.md +++ b/README.md @@ -203,12 +203,11 @@ The [below section](#supported-rules) gives details on which rules are enabled b :see_no_evil: = `no-object-orientation` Ruleset. -| Name | Description | :see_no_evil: | :hear_no_evil: | :speak_no_evil: | :wrench: | :blue_heart: | -| ------------------------------------------------------------ | ------------------------------------------------------------------------ | :------------------------------------------------------: | :--------------------------------------: | :----------------------------------------------: | :------: | :---------------: | -| [`no-class`](./docs/rules/no-class.md) | Disallow classes | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | -| [`no-mixed-type`](./docs/rules/no-mixed-type.md) | Restrict types so that only members of the same kind are allowed in them | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | :thought_balloon: | -| [`no-this-expression`](./docs/rules/no-this-expression.md) | Disallow `this` access | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | -| [`prefer-type-literal`](./docs/rules/prefer-type-literal.md) | Use type literals over interfaces | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | :thought_balloon: | +| Name | Description | :see_no_evil: | :hear_no_evil: | :speak_no_evil: | :wrench: | :blue_heart: | +| ---------------------------------------------------------- | ------------------------------------------------------------------------ | :------------------------------------------------------: | :--------------------------------------: | :----------------------------------------------: | :------: | :---------------: | +| [`no-class`](./docs/rules/no-class.md) | Disallow classes | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | +| [`no-mixed-type`](./docs/rules/no-mixed-type.md) | Restrict types so that only members of the same kind are allowed in them | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | :thought_balloon: | +| [`no-this-expression`](./docs/rules/no-this-expression.md) | Disallow `this` access | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | | | ### No Statements Rules @@ -245,7 +244,7 @@ The [below section](#supported-rules) gives details on which rules are enabled b | Name | Description | :see_no_evil: | :hear_no_evil: | :speak_no_evil: | :wrench: | :blue_heart: | | ---------------------------------------------- | ----------------------- | :------------------------------------------: | :--------------------------------------: | :----------------------------------------------: | :------: | :----------: | -| [`prefer-tacit`](./docs/rules/prefer-tacit.md) | Tacit/Point-Free style. | :heavy_check_mark: | | | :wrench: | :blue_heart: | +| [`prefer-tacit`](./docs/rules/prefer-tacit.md) | Tacit/Point-Free style. | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :wrench: | :blue_heart: | ## Recommended standard rules @@ -265,17 +264,20 @@ Without this rule, function parameters are mutable. This rule is helpful when converting from an imperative code style to a functional one. -### [@typescript-eslint/explicit-function-return-type](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/explicit-function-return-type.md) +### [@typescript-eslint/prefer-readonly](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/prefer-readonly.md) -For performance reasons, eslint-plugin-functional does not check implicit return types. So for example this function will return a mutable array but will not be detected: +This rule is helpful when working with classes. -```js -function foo() { - return [1, 2, 3]; -} -``` +### [@typescript-eslint/prefer-readonly-parameter-types](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/prefer-readonly-parameter-types.md) + +Functional functions must not modify any data passed into them. +This rule marks mutable parameters as a violation as they prevent readonly versions of that data from being passed in. + +However, due to many 3rd-party libraries only providing mutable versions of their types, often it can not be easy to satisfy this rule. Thus by default we only enable this rule with the "warn" serverity rather than "error". + +### [@typescript-eslint/switch-exhaustiveness-check](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/switch-exhaustiveness-check.md) -To avoid this situation you can enable `@typescript-eslint/explicit-function-return-type`. Now the above function is forced to declare the return type and the mutability will be detected. +Although our [no-conditional-statement](./docs/rules/no-conditional-statement.md) rule also performs this check, this rule has a fixer that will implement the unimplemented cases which can be useful. ## How to contribute diff --git a/ava.config.js b/ava.config.js new file mode 100644 index 000000000..74b29490c --- /dev/null +++ b/ava.config.js @@ -0,0 +1,43 @@ +// @ts-check + +/** + * Get the intended boolean value from the given string. + */ +function getBoolean(value) { + if (value === undefined) { + return false; + } + const asNumber = Number(value); + return Number.isNaN(asNumber) + ? Boolean(String(value).toLowerCase().replace("false", "")) + : Boolean(asNumber); +} + +const useCompiledTests = getBoolean(process.env.USE_COMPILED_TESTS); +const testAllFile = getBoolean(process.env.TEST_ALL_FILE); + +const avaCommonConfig = { + files: testAllFile ? ["tests/**/*.test.*"] : ["tests/**/!(work)*.test.*"], + timeout: "5m", +}; + +const avaTsConfig = { + ...avaCommonConfig, + extensions: ["ts"], + require: ["ts-node/register", "tsconfig-paths/register"], + environmentVariables: { + TS_NODE_PROJECT: "tests/tsconfig.json", + }, +}; + +const avaJsConfig = { + ...avaCommonConfig, + files: avaCommonConfig.files.map((file) => `build/${file}`), + extensions: ["js"], + require: ["tsconfig-paths/register"], + environmentVariables: { + TS_NODE_PROJECT: "build/tests/tsconfig.json", + }, +}; + +export default useCompiledTests ? avaJsConfig : avaTsConfig; diff --git a/docs/rules/prefer-readonly-type.md b/docs/rules/prefer-readonly-type.md index 1043c89c2..c7db101a2 100644 --- a/docs/rules/prefer-readonly-type.md +++ b/docs/rules/prefer-readonly-type.md @@ -106,7 +106,7 @@ The default options: ```ts { allowLocalMutation: false, - allowMutableReturnType: false, + allowMutableReturnType: true, checkImplicit: false, ignoreClass: false, ignoreInterface: false, diff --git a/docs/rules/prefer-type-literal.md b/docs/rules/prefer-type-literal.md deleted file mode 100644 index 708b7849a..000000000 --- a/docs/rules/prefer-type-literal.md +++ /dev/null @@ -1,42 +0,0 @@ -# Prefer type over interface (prefer-type-literal) - -This rule enforces use of the type literals over interfaces. - -## Rule Details - -Interfaces are part of Object Oriented Design. -When it comes to functional design, types should be used instead. - -Examples of **incorrect** code for this rule: - -```ts -/* eslint functional/prefer-type-literal: "error" */ - -interface Foo { - bar: string; -} -``` - -Examples of **correct** code for this rule: - -```ts -/* eslint functional/prefer-type-literal: "error" */ - -type Foo = { - bar: string; -}; -``` - -## Options - -This rule accepts an options object of the following type: - -```ts -{ - ignorePattern?: string | Array; -} -``` - -### `ignorePattern` - -See the [ignorePattern](./options/ignore-pattern.md) docs. diff --git a/docs/user-guide/migrating-from-tslint.md b/docs/user-guide/migrating-from-tslint.md index 9c9e55b46..187aea55c 100644 --- a/docs/user-guide/migrating-from-tslint.md +++ b/docs/user-guide/migrating-from-tslint.md @@ -60,7 +60,6 @@ Below is a table mapping the `eslint-plugin-functional` rules to their `tslint-i | [`functional/no-this-expression`](../rules/no-this-expression.md) | `no-this` | | [`functional/no-class`](../rules/no-class.md) | `no-class` | | [`functional/no-mixed-type`](../rules/no-mixed-type.md) | `no-mixed-interface` | -| [`functional/prefer-type-literal`](../rules/prefer-type-literal.md) | - | | [`functional/no-expression-statement`](../rules/no-expression-statement.md) | `no-expression-statement` | | [`functional/no-conditional-statement`](../rules/no-conditional-statement.md) | `no-if-statement` | | [`functional/no-loop-statement`](../rules/no-loop-statement.md) | `no-loop-statement` | diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index ffbcdc94a..000000000 --- a/jest.config.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; - -/** - * Used compiled rules? i.e. test against JS files instead of TS files. - */ -const useCompiled = Boolean(process.env.USE_COMPLIED); - -module.exports = { - testEnvironment: "node", - transform: { - "^.+\\.ts$": "ts-jest", - }, - testRegex: useCompiled - ? "./build/tests/.+\\.test\\.js$" - : "./tests/.+\\.test\\.ts$", - collectCoverage: !useCompiled, - collectCoverageFrom: useCompiled ? ["build/src/**/*.js"] : ["src/**/*.ts"], - moduleFileExtensions: ["ts", "js", "json", "node"], - coverageReporters: ["text-summary", "lcov"], - globals: { - "ts-jest": { - tsconfig: "tests/tsconfig.json", - }, - }, -}; diff --git a/package.json b/package.json index bad5dc1c1..3af1ef93c 100644 --- a/package.json +++ b/package.json @@ -46,13 +46,12 @@ "prebuild-tests": "rimraf build", "build-tests": "yarn compile-tests", "compile": "rollup -c", - "compile-tests": "tsc -p tests/tsconfig.json && cpx ./tests/helpers/tsconfig.json ./build/tests/helpers/", + "compile-tests": "ts-node -P scripts/tsconfig.json scripts/compile-tests.ts", "prelint": "yarn build && yarn link && yarn link 'eslint-plugin-functional'", - "lint": "eslint . -f visualstudio", + "lint": "eslint .", "lint-fix": "yarn lint --fix", - "test": "jest --testPathIgnorePatterns _work.test", - "test-compiled": "cross-env USE_COMPLIED=1 yarn test", - "test-work": "jest tests/rules/_work.test.ts --no-coverage", + "test": "nyc ava", + "test-work": "TEST_ALL_FILE=1 ava", "verify": "yarn build && yarn lint && yarn build-tests && yarn test-compiled && rimraf build", "preversion": "yarn verify", "version": "auto-changelog -p && git add CHANGELOG.md", @@ -60,12 +59,12 @@ }, "dependencies": { "@typescript-eslint/experimental-utils": "^4.9.1", - "array.prototype.flatmap": "^1.2.4", "deepmerge": "^4.2.2", - "escape-string-regexp": "^4.0.0", - "object.fromentries": "^2.0.3" + "escape-string-regexp": "^4.0.0" }, "devDependencies": { + "@istanbuljs/nyc-config-typescript": "^1.0.1", + "@rebeccastevens/eslint-config": "^1.0.12", "@rollup/plugin-commonjs": "^17.0.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "^11.0.0", @@ -74,34 +73,47 @@ "@types/eslint": "^7.2.6", "@types/estree": "^0.0.46", "@types/glob": "^7.1.1", - "@types/jest": "^26.0.19", "@types/node": "15.0.1", - "@typescript-eslint/eslint-plugin": "^4.9.1", - "@typescript-eslint/parser": "^4.9.1", + "@types/rollup-plugin-auto-external": "^2.0.2", + "@typescript-eslint/eslint-plugin": "^4.28.4", + "@typescript-eslint/parser": "^4.28.4", "auto-changelog": "^2.2.1", + "ava": "^3.15.0", "babel-eslint": "^10.0.2", "codecov": "^3.8.1", - "cpx": "^1.5.0", "cross-env": "^7.0.3", "dedent": "^0.7.0", - "eslint": "^7.15.0", + "eslint": "^7.31.0", + "eslint-ava-rule-tester": "^4.0.0", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-eslint-plugin": "^2.2.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.1.3", - "eslint-plugin-jsdoc": "^32.3.0", - "eslint-plugin-prettier": "^3.2.0", + "eslint-import-resolver-typescript": "^2.4.0", + "eslint-plugin-ava": "^12.0.0", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-eslint-plugin": "^3.4.0", + "eslint-plugin-import": "^2.23.4", + "eslint-plugin-jsdoc": "^35.5.1", + "eslint-plugin-markdown": "^2.2.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-optimize-regex": "^1.2.0", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-promise": "^5.1.0", + "eslint-plugin-sonarjs": "^0.9.1", + "eslint-plugin-unicorn": "^34.0.1", + "espree": "^8.0.0", "glob": "^7.1.6", "husky": "^6.0.0", - "jest": "^26.6.3", "json-schema": "^0.3.0", + "jsonc-parser": "^3.0.0", "lint-staged": "^10.5.3", + "nyc": "^15.1.0", "prettier": "^2.2.1", "rimraf": "^3.0.0", "rollup": "^2.34.2", "rollup-plugin-auto-external": "^2.0.0", "shelljs": "^0.8.3", - "ts-jest": "^26.4.4", + "ts-node": "^10.1.0", + "tsc-prog": "^2.2.1", + "tsconfig-paths": "^3.10.1", "tslib": "^2.0.3", "tsutils": "^3.21.0", "typescript": "^4.1.3" @@ -120,6 +132,6 @@ } }, "engines": { - "node": ">=10.18.0" + "node": ">=12.4.0" } } diff --git a/rollup.config.js b/rollup.config.js index 4664e4aab..5681da009 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -4,16 +4,11 @@ // @ts-check import rollupPluginCommonjs from "@rollup/plugin-commonjs"; +import rollupPluginJSON from "@rollup/plugin-json"; import rollupPluginNodeResolve from "@rollup/plugin-node-resolve"; import rollupPluginTypescript from "@rollup/plugin-typescript"; -import rollupPluginJSON from "@rollup/plugin-json"; import rollupPluginAutoExternal from "rollup-plugin-auto-external"; -const polyfills = [ - "array.prototype.flatmap/auto.js", - "object.fromentries/auto.js", -]; - const common = { input: "src/index.ts", @@ -23,11 +18,11 @@ const common = { sourcemap: false, }, - external: polyfills, + external: [], treeshake: { annotations: true, - moduleSideEffects: polyfills, + moduleSideEffects: [], propertyReadSideEffects: false, unknownGlobalSideEffects: false, }, diff --git a/scripts/.eslintrc.json b/scripts/.eslintrc.json new file mode 100644 index 000000000..3274bf64c --- /dev/null +++ b/scripts/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "node/no-unsupported-features/node-builtins": "off" + } +} diff --git a/scripts/compile-tests.ts b/scripts/compile-tests.ts new file mode 100644 index 000000000..2dfd38843 --- /dev/null +++ b/scripts/compile-tests.ts @@ -0,0 +1,62 @@ +import { promises as fs } from "fs"; +import * as JSONC from "jsonc-parser"; +import * as tsc from "tsc-prog"; + +/** + * The script. + */ +async function run() { + transpileTests(); + await Promise.all([createTestsTsConfig(), createTestsHelpersTsConfig()]); +} + +/** + * Transpile the tests. + */ +function transpileTests() { + const program = tsc.createProgramFromConfig({ + basePath: `${process.cwd()}/tests`, + configFilePath: "tsconfig.json", + }); + + tsc.emit(program, { + clean: { outDir: true }, + }); +} + +/** + * Create a suitable "build/tests/tsconfig.json" file. + */ +async function createTestsTsConfig() { + const testsTsConfig = JSONC.parse( + await fs.readFile("tests/tsconfig.json", { encoding: "utf-8" }) + ); + + const updatedTestsTsConfig = { + ...testsTsConfig, + extends: `../${testsTsConfig.extends}`, + compilerOptions: { + ...testsTsConfig.compilerOptions, + baseUrl: "..", + }, + }; + + return fs.writeFile( + "build/tests/tsconfig.json", + JSON.stringify(updatedTestsTsConfig, null, 2), + { encoding: "utf-8" } + ); +} + +/** + * Create a suitable "build/tests/helpers/tsconfig.json" file. + */ +async function createTestsHelpersTsConfig() { + return fs.copyFile( + "tests/helpers/test-tsconfig.json", + "build/tests/helpers/test-tsconfig.json" + ); +} + +// Run the script. +void run(); diff --git a/scripts/tsconfig.json b/scripts/tsconfig.json new file mode 100644 index 000000000..034159ece --- /dev/null +++ b/scripts/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2018", + "module": "CommonJS", + "lib": ["esnext"], + "alwaysStrict": true, + "strict": true, + "esModuleInterop": true, + "moduleResolution": "node", + "noImplicitAny": false, + "noImplicitReturns": true, + "noImplicitThis": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true, + "importHelpers": false, + "newLine": "LF", + "noEmitOnError": true, + "removeComments": true + } +} diff --git a/src/common/ignore-options.ts b/src/common/ignore-options.ts index fd86f0b46..e5638d711 100644 --- a/src/common/ignore-options.ts +++ b/src/common/ignore-options.ts @@ -1,12 +1,9 @@ -// Polyfill. -import "array.prototype.flatmap/auto.js"; - -import { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; import escapeRegExp from "escape-string-regexp"; -import { JSONSchema4 } from "json-schema"; +import type { JSONSchema4 } from "json-schema"; -import { BaseOptions, RuleContext } from "../util/rule"; -import { inClass, inFunctionBody, inInterface } from "../util/tree"; +import type { BaseOptions, RuleContext } from "~/util/rule"; +import { inClass, inFunctionBody, inInterface } from "~/util/tree"; import { hasID, hasKey, @@ -24,7 +21,7 @@ import { isTSTypeReference, isUnaryExpression, isVariableDeclaration, -} from "../util/typeguard"; +} from "~/util/typeguard"; export type AllowLocalMutationOption = { readonly allowLocalMutation: boolean; @@ -41,7 +38,7 @@ export const allowLocalMutationOptionSchema: JSONSchema4 = { }; export type IgnorePatternOption = { - readonly ignorePattern?: string | ReadonlyArray; + readonly ignorePattern?: ReadonlyArray | string; }; export const ignorePatternOptionSchema: JSONSchema4 = { @@ -58,7 +55,7 @@ export const ignorePatternOptionSchema: JSONSchema4 = { }; export type IgnoreAccessorPatternOption = { - readonly ignoreAccessorPattern?: string | ReadonlyArray; + readonly ignoreAccessorPattern?: ReadonlyArray | string; }; export const ignoreAccessorPatternOptionSchema: JSONSchema4 = { @@ -114,7 +111,7 @@ export const ignoreInterfaceOptionSchema: JSONSchema4 = { * Get the identifier text of the given node. */ function getNodeIdentifierText( - node: TSESTree.Node | undefined | null, + node: TSESTree.Node | null | undefined, context: RuleContext ): string | undefined { return node === undefined || node === null @@ -178,7 +175,7 @@ function shouldIgnoreViaPattern( : [ignorePattern as string]; // One or more patterns match? - return patterns.some((pattern) => new RegExp(pattern).test(text)); + return patterns.some((pattern) => new RegExp(pattern, "u").test(text)); } /** @@ -217,9 +214,10 @@ function accessorPatternMatch( allowExtra ) : // Text matches pattern? - new RegExp(`^${escapeRegExp(pattern).replace(/\\\*/g, ".*")}$`).test( - textParts[0] - ) && + new RegExp( + `^${escapeRegExp(pattern).replace(/\\\*/gu, ".*")}$`, + "u" + ).test(textParts[0]) && accessorPatternMatch( remainingPatternParts, textParts.slice(1), @@ -259,11 +257,11 @@ export function shouldIgnore( node: TSESTree.Node, context: RuleContext, options: Partial< - IgnoreAccessorPatternOption & + AllowLocalMutationOption & + IgnoreAccessorPatternOption & IgnoreClassOption & IgnoreInterfaceOption & - IgnorePatternOption & - AllowLocalMutationOption + IgnorePatternOption > ): boolean { return ( diff --git a/src/configs/all.ts b/src/configs/all.ts index c710a989c..0db73d9d0 100644 --- a/src/configs/all.ts +++ b/src/configs/all.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { @@ -23,7 +23,6 @@ const config: Linter.Config = { "functional/no-mixed-type": "error", "functional/prefer-readonly-type": "error", "functional/prefer-tacit": ["error", { assumeTypes: false }], - "functional/prefer-type-literal": "error", "functional/no-return-void": "error", }, }, diff --git a/src/configs/currying.ts b/src/configs/currying.ts index 2d9f559bc..856c0b2f4 100644 --- a/src/configs/currying.ts +++ b/src/configs/currying.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { diff --git a/src/configs/external-recommended.ts b/src/configs/external-recommended.ts index 03b8c9733..9a2e2de91 100644 --- a/src/configs/external-recommended.ts +++ b/src/configs/external-recommended.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { @@ -10,14 +10,9 @@ const config: Linter.Config = { { files: ["*.ts", "*.tsx"], rules: { - "@typescript-eslint/explicit-function-return-type": [ - "error", - { - allowExpressions: true, - allowTypedFunctionExpressions: true, - allowHigherOrderFunctions: true, - }, - ], + "@typescript-eslint/prefer-readonly": "error", + "@typescript-eslint/prefer-readonly-parameter-types": "warn", + "@typescript-eslint/switch-exhaustiveness-check": "error", }, }, ], diff --git a/src/configs/functional-lite.ts b/src/configs/functional-lite.ts index 0ba1e7292..6ca2b0197 100644 --- a/src/configs/functional-lite.ts +++ b/src/configs/functional-lite.ts @@ -1,5 +1,5 @@ import deepMerge from "deepmerge"; -import { Linter } from "eslint"; +import type { Linter } from "eslint"; import functional from "./functional"; diff --git a/src/configs/functional.ts b/src/configs/functional.ts index 4f688c4c7..474d3e34b 100644 --- a/src/configs/functional.ts +++ b/src/configs/functional.ts @@ -1,11 +1,12 @@ import { all as deepMerge } from "deepmerge"; -import { Linter } from "eslint"; +import type { Linter } from "eslint"; -import currying from "./currying"; -import noMutations from "./no-mutations"; -import noExceptions from "./no-exceptions"; -import noObjectOrientation from "./no-object-orientation"; -import noStatements from "./no-statements"; +import currying from "~/configs/currying"; +import noExceptions from "~/configs/no-exceptions"; +import noMutations from "~/configs/no-mutations"; +import noObjectOrientation from "~/configs/no-object-orientation"; +import noStatements from "~/configs/no-statements"; +import stylistic from "~/configs/stylistic"; const config: Linter.Config = deepMerge([ currying, @@ -13,6 +14,7 @@ const config: Linter.Config = deepMerge([ noExceptions, noObjectOrientation, noStatements, + stylistic, ]); export default config; diff --git a/src/configs/no-exceptions.ts b/src/configs/no-exceptions.ts index a7d322d60..bbac17993 100644 --- a/src/configs/no-exceptions.ts +++ b/src/configs/no-exceptions.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { diff --git a/src/configs/no-mutations.ts b/src/configs/no-mutations.ts index 5640ced9d..bc5cc4600 100644 --- a/src/configs/no-mutations.ts +++ b/src/configs/no-mutations.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { diff --git a/src/configs/no-object-orientation.ts b/src/configs/no-object-orientation.ts index 80d083b77..4681ba459 100644 --- a/src/configs/no-object-orientation.ts +++ b/src/configs/no-object-orientation.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { @@ -10,7 +10,6 @@ const config: Linter.Config = { files: ["*.ts", "*.tsx"], rules: { "functional/no-mixed-type": "error", - "functional/prefer-type-literal": "error", }, }, ], diff --git a/src/configs/no-statements.ts b/src/configs/no-statements.ts index 887b3fabe..6f4d55487 100644 --- a/src/configs/no-statements.ts +++ b/src/configs/no-statements.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { diff --git a/src/configs/stylistic.ts b/src/configs/stylistic.ts index e92acac1a..0c30872c5 100644 --- a/src/configs/stylistic.ts +++ b/src/configs/stylistic.ts @@ -1,4 +1,4 @@ -import { Linter } from "eslint"; +import type { Linter } from "eslint"; const config: Linter.Config = { rules: { diff --git a/src/index.ts b/src/index.ts index 7b3e926e0..de60c913d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,17 +1,16 @@ -import { Linter, Rule } from "eslint"; +import type { Linter, Rule } from "eslint"; -import all from "./configs/all"; -import currying from "./configs/currying"; -import externalRecommended from "./configs/external-recommended"; -import functional from "./configs/functional"; -import functionalLite from "./configs/functional-lite"; -import noMutations from "./configs/no-mutations"; -import noExceptions from "./configs/no-exceptions"; -import noObjectOrientation from "./configs/no-object-orientation"; -import noStatements from "./configs/no-statements"; -import stylistic from "./configs/stylistic"; - -import { rules } from "./rules"; +import all from "~/configs/all"; +import currying from "~/configs/currying"; +import externalRecommended from "~/configs/external-recommended"; +import functional from "~/configs/functional"; +import functionalLite from "~/configs/functional-lite"; +import noExceptions from "~/configs/no-exceptions"; +import noMutations from "~/configs/no-mutations"; +import noObjectOrientation from "~/configs/no-object-orientation"; +import noStatements from "~/configs/no-statements"; +import stylistic from "~/configs/stylistic"; +import { rules } from "~/rules"; type EslintPluginConfig = { readonly rules: Record; @@ -30,8 +29,6 @@ const config: EslintPluginConfig = { "no-object-orientation": noObjectOrientation, "no-statements": noStatements, currying, - /** @deprecated Use `stylistic` instead. */ - stylitic: stylistic, stylistic, }, }; diff --git a/src/rules/functional-parameters.ts b/src/rules/functional-parameters.ts index 30cd67052..a0baa8587 100644 --- a/src/rules/functional-parameters.ts +++ b/src/rules/functional-parameters.ts @@ -1,19 +1,13 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; import { all as deepMerge } from "deepmerge"; -import { JSONSchema4 } from "json-schema"; +import type { JSONSchema4 } from "json-schema"; -import { - IgnorePatternOption, - ignorePatternOptionSchema, -} from "../common/ignore-options"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; -import { isIIFE, isPropertyAccess, isPropertyName } from "../util/tree"; -import { isRestElement } from "../util/typeguard"; +import type { IgnorePatternOption } from "~/common/ignore-options"; +import { ignorePatternOptionSchema } from "~/common/ignore-options"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; +import { isIIFE, isPropertyAccess, isPropertyName } from "~/util/tree"; +import { isRestElement } from "~/util/typeguard"; // The name of this rule. export const name = "functional-parameters" as const; @@ -25,8 +19,8 @@ type Options = IgnorePatternOption & { readonly allowRestParameter: boolean; readonly allowArgumentsKeyword: boolean; readonly enforceParameterCount: - | false | ParameterCountOptions + | false | { readonly count: ParameterCountOptions; readonly ignoreIIFE: boolean; @@ -103,7 +97,7 @@ const meta: RuleMetaData = { docs: { description: "Enforce functional parameters.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, @@ -115,9 +109,9 @@ const meta: RuleMetaData = { function getRestParamViolations( allowRestParameter: Options["allowRestParameter"], node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression ): RuleResult["descriptors"] { return !allowRestParameter && node.params.length > 0 && @@ -137,9 +131,9 @@ function getRestParamViolations( function getParamCountViolations( enforceParameterCount: Options["enforceParameterCount"], node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression ): RuleResult["descriptors"] { if ( enforceParameterCount === false || @@ -149,7 +143,8 @@ function getParamCountViolations( isIIFE(node)) ) { return []; - } else if ( + } + if ( node.params.length === 0 && (enforceParameterCount === "atLeastOne" || (typeof enforceParameterCount === "object" && @@ -161,7 +156,8 @@ function getParamCountViolations( messageId: "paramCountAtLeastOne", }, ]; - } else if ( + } + if ( node.params.length !== 1 && (enforceParameterCount === "exactlyOne" || (typeof enforceParameterCount === "object" && @@ -173,9 +169,8 @@ function getParamCountViolations( messageId: "paramCountExactlyOne", }, ]; - } else { - return []; } + return []; } /** @@ -183,9 +178,9 @@ function getParamCountViolations( */ function checkFunction( node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression, + | TSESTree.FunctionExpression, context: RuleContext, options: Options ): RuleResult { diff --git a/src/rules/immutable-data.ts b/src/rules/immutable-data.ts index 67fedd02b..c643da745 100644 --- a/src/rules/immutable-data.ts +++ b/src/rules/immutable-data.ts @@ -1,25 +1,22 @@ -import { IgnoreClassOption } from "./../common/ignore-options"; -import { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; import { all as deepMerge } from "deepmerge"; -import { JSONSchema4 } from "json-schema"; +import type { JSONSchema4 } from "json-schema"; -import { +import type { IgnoreAccessorPatternOption, + IgnorePatternOption, + IgnoreClassOption, +} from "~/common/ignore-options"; +import { ignoreAccessorPatternOptionSchema, ignoreClassOptionSchema, - IgnorePatternOption, ignorePatternOptionSchema, shouldIgnore, -} from "../common/ignore-options"; -import { isExpected } from "../util/misc"; -import { - createRule, - getTypeOfNode, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; -import { inConstructor } from "../util/tree"; +} from "~/common/ignore-options"; +import { isExpected } from "~/util/misc"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule, getTypeOfNode } from "~/util/rule"; +import { inConstructor } from "~/util/tree"; import { isArrayConstructorType, isArrayExpression, @@ -29,15 +26,15 @@ import { isMemberExpression, isNewExpression, isObjectConstructorType, -} from "../util/typeguard"; +} from "~/util/typeguard"; // The name of this rule. export const name = "immutable-data" as const; // The options this rule can take. -type Options = IgnorePatternOption & +type Options = IgnoreAccessorPatternOption & IgnoreClassOption & - IgnoreAccessorPatternOption & { + IgnorePatternOption & { readonly ignoreImmediateMutation: boolean; readonly assumeTypes: | boolean @@ -118,7 +115,7 @@ const meta: RuleMetaData = { * * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype#Methods#Mutator_methods */ -const arrayMutatorMethods = [ +const arrayMutatorMethods = new Set([ "copyWithin", "fill", "pop", @@ -128,7 +125,7 @@ const arrayMutatorMethods = [ "sort", "splice", "unshift", -] as const; +]); /** * Array methods that return a new object (or array) without mutating the original. @@ -143,26 +140,26 @@ const arrayNewObjectReturningMethods = [ "map", "reduce", "reduceRight", -] as const; +]; /** * Array constructor functions that create a new array. * * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#Methods */ -const arrayConstructorFunctions = ["from", "of"] as const; +const arrayConstructorFunctions = ["from", "of"]; /** * Object constructor functions that mutate an object. * * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#Methods_of_the_Object_constructor */ -const objectConstructorMutatorFunctions = [ +const objectConstructorMutatorFunctions = new Set([ "assign", "defineProperties", "defineProperty", "setPrototypeOf", -] as const; +]); /** * Check if the given assignment expression violates this rule. @@ -281,14 +278,7 @@ function checkCallExpression( ? // Potential array mutation? // Check if allowed here - this cannot be automatically checked beforehand. !shouldIgnore(node.callee.object, context, options) && - arrayMutatorMethods.some( - (m) => - m === - ( - (node.callee as TSESTree.MemberExpression) - .property as TSESTree.Identifier - ).name - ) && + arrayMutatorMethods.has(node.callee.property.name) && (!options.ignoreImmediateMutation || !isInChainCallAndFollowsNew( node.callee, @@ -302,14 +292,7 @@ function checkCallExpression( ) ? [{ node, messageId: "array" }] : // Potential non-array object mutation (ex. Object.assign on identifier)? - objectConstructorMutatorFunctions.some( - (m) => - m === - ( - (node.callee as TSESTree.MemberExpression) - .property as TSESTree.Identifier - ).name - ) && + objectConstructorMutatorFunctions.has(node.callee.property.name) && node.arguments.length >= 2 && (isIdentifier(node.arguments[0]) || isMemberExpression(node.arguments[0])) && diff --git a/src/rules/index.ts b/src/rules/index.ts index d60774a59..06eb7baef 100644 --- a/src/rules/index.ts +++ b/src/rules/index.ts @@ -14,7 +14,6 @@ import * as noThrowStatement from "./no-throw-statement"; import * as noTryStatement from "./no-try-statement"; import * as preferReadonlyTypes from "./prefer-readonly-type"; import * as preferTacit from "./prefer-tacit"; -import * as preferType from "./prefer-type-literal"; /** * All of the custom rules. @@ -36,5 +35,4 @@ export const rules = { [noTryStatement.name]: noTryStatement.rule, [preferReadonlyTypes.name]: preferReadonlyTypes.rule, [preferTacit.name]: preferTacit.rule, - [preferType.name]: preferType.rule, }; diff --git a/src/rules/no-class.ts b/src/rules/no-class.ts index 58e43c95c..ecdc4bc9c 100644 --- a/src/rules/no-class.ts +++ b/src/rules/no-class.ts @@ -1,12 +1,8 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-class" as const; @@ -31,7 +27,7 @@ const meta: RuleMetaData = { docs: { description: "Disallow classes.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, diff --git a/src/rules/no-conditional-statement.ts b/src/rules/no-conditional-statement.ts index 339a94eea..5baf17f89 100644 --- a/src/rules/no-conditional-statement.ts +++ b/src/rules/no-conditional-statement.ts @@ -1,16 +1,10 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; -import { Type } from "typescript"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; +import type { Type } from "typescript"; -import tsutils from "../util/conditional-imports/tsutils"; - -import { - createRule, - getTypeOfNode, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import tsutils from "~/conditional-imports/tsutils"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule, getTypeOfNode } from "~/util/rule"; import { isBlockStatement, isExpressionStatement, @@ -18,7 +12,7 @@ import { isNeverType, isReturnStatement, isThrowStatement, -} from "../util/typeguard"; +} from "~/util/typeguard"; // The name of this rule. export const name = "no-conditional-statement" as const; @@ -72,12 +66,44 @@ const meta: RuleMetaData = { docs: { description: "Disallow conditional statements.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, }; +/** + * Report the given node as an incomplete branch violation. + * + * @param node - The node to report. + * @returns A violation rule result. + */ +function incompleteBranchViolation( + node: TSESTree.Node +): RuleResult["descriptors"] { + return [{ node, messageId: "incompleteBranch" }]; +} + +/** + * Get a function that tests if the given statement is never returning. + */ +function getIsNeverExpressions( + context: RuleContext +) { + return (statement: TSESTree.Statement) => { + if (isExpressionStatement(statement)) { + const expressionStatementType = getTypeOfNode( + statement.expression, + context + ); + return ( + expressionStatementType !== null && isNeverType(expressionStatementType) + ); + } + return false; + }; +} + /** * Get all of the violations in the given if statement assuming if statements * are allowed. @@ -132,21 +158,8 @@ function getIfBranchViolations( return false; } - if ( - branch.body.some((statement) => { - if (isExpressionStatement(statement)) { - const expressionStatementType = getTypeOfNode( - statement.expression, - context - ); - return ( - expressionStatementType !== null && - isNeverType(expressionStatementType) - ); - } - return false; - }) - ) { + const isNeverExpressions = getIsNeverExpressions(context); + if (branch.body.some(isNeverExpressions)) { return false; } } @@ -155,9 +168,7 @@ function getIfBranchViolations( } ); - return violations.flatMap((node) => [ - { node, messageId: "incompleteBranch" }, - ]); + return violations.flatMap(incompleteBranchViolation); } /** @@ -168,6 +179,8 @@ function getSwitchViolations( node: TSESTree.SwitchStatement, context: RuleContext ): RuleResult["descriptors"] { + const isNeverExpressions = getIsNeverExpressions(context); + const violations = node.cases.filter((branch) => { if (branch.consequent.length === 0) { return false; @@ -193,49 +206,19 @@ function getSwitchViolations( return false; } - if ( - lastBlock.body.some((statement) => { - if (isExpressionStatement(statement)) { - const expressionStatementType = getTypeOfNode( - statement.expression, - context - ); - return ( - expressionStatementType !== null && - isNeverType(expressionStatementType) - ); - } - return false; - }) - ) { + if (lastBlock.body.some(isNeverExpressions)) { return false; } } - if ( - branch.consequent.some((statement) => { - if (isExpressionStatement(statement)) { - const expressionStatementType = getTypeOfNode( - statement.expression, - context - ); - return ( - expressionStatementType !== null && - isNeverType(expressionStatementType) - ); - } - return false; - }) - ) { + if (branch.consequent.some(isNeverExpressions)) { return false; } return true; }); - return violations.flatMap((node) => [ - { node, messageId: "incompleteBranch" }, - ]); + return violations.flatMap(incompleteBranchViolation); } /** @@ -254,22 +237,20 @@ function isExhaustiveTypeSwitchViolation( ): boolean { if (tsutils === undefined) { return true; - } else { - const discriminantType = getTypeOfNode(node.discriminant, context); + } - if (discriminantType === null || !discriminantType.isUnion()) { - return true; - } else { - const unionTypes = tsutils.unionTypeParts(discriminantType); - const caseTypes = node.cases.reduce>( - (types, c) => new Set([...types, getTypeOfNode(c.test!, context)!]), - new Set() - ); - return ( - unionTypes.filter((unionType) => !caseTypes.has(unionType)).length !== 0 - ); - } + const discriminantType = getTypeOfNode(node.discriminant, context); + if (discriminantType === null || !discriminantType.isUnion()) { + return true; } + + const unionTypes = tsutils.unionTypeParts(discriminantType); + const caseTypes = node.cases.reduce>( + (types, c) => new Set([...types, getTypeOfNode(c.test!, context)!]), + new Set() + ); + + return unionTypes.some((unionType) => !caseTypes.has(unionType)); } /** @@ -299,13 +280,14 @@ function checkIfStatement( ): RuleResult { return { context, - descriptors: options.allowReturningBranches - ? options.allowReturningBranches === "ifExhaustive" + descriptors: + options.allowReturningBranches === false + ? [{ node, messageId: "unexpectedIf" }] + : options.allowReturningBranches === "ifExhaustive" ? isExhaustiveIfViolation(node) ? [{ node, messageId: "incompleteIf" }] : getIfBranchViolations(node, context) - : getIfBranchViolations(node, context) - : [{ node, messageId: "unexpectedIf" }], + : getIfBranchViolations(node, context), }; } @@ -319,13 +301,14 @@ function checkSwitchStatement( ): RuleResult { return { context, - descriptors: options.allowReturningBranches - ? options.allowReturningBranches === "ifExhaustive" + descriptors: + options.allowReturningBranches === false + ? [{ node, messageId: "unexpectedSwitch" }] + : options.allowReturningBranches === "ifExhaustive" ? isExhaustiveSwitchViolation(node, context) ? [{ node, messageId: "incompleteSwitch" }] : getSwitchViolations(node, context) - : getSwitchViolations(node, context) - : [{ node, messageId: "unexpectedSwitch" }], + : getSwitchViolations(node, context), }; } diff --git a/src/rules/no-expression-statement.ts b/src/rules/no-expression-statement.ts index d4e3ffa05..2a4da5f6f 100644 --- a/src/rules/no-expression-statement.ts +++ b/src/rules/no-expression-statement.ts @@ -1,17 +1,11 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - IgnorePatternOption, - ignorePatternOptionSchema, -} from "../common/ignore-options"; -import { isDirectivePrologue } from "../util/misc"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { IgnorePatternOption } from "~/common/ignore-options"; +import { ignorePatternOptionSchema } from "~/common/ignore-options"; +import { isDirectivePrologue } from "~/util/misc"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-expression-statement" as const; @@ -36,7 +30,7 @@ const meta: RuleMetaData = { docs: { description: "Disallow expression statements.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, diff --git a/src/rules/no-let.ts b/src/rules/no-let.ts index 3f74e3371..f69eb4203 100644 --- a/src/rules/no-let.ts +++ b/src/rules/no-let.ts @@ -1,19 +1,17 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; import { all as deepMerge } from "deepmerge"; -import { JSONSchema4 } from "json-schema"; +import type { JSONSchema4 } from "json-schema"; -import { +import type { AllowLocalMutationOption, - allowLocalMutationOptionSchema, IgnorePatternOption, - ignorePatternOptionSchema, -} from "../common/ignore-options"; +} from "~/common/ignore-options"; import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; + allowLocalMutationOptionSchema, + ignorePatternOptionSchema, +} from "~/common/ignore-options"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-let" as const; diff --git a/src/rules/no-loop-statement.ts b/src/rules/no-loop-statement.ts index 3158c37ca..c59daf5ef 100644 --- a/src/rules/no-loop-statement.ts +++ b/src/rules/no-loop-statement.ts @@ -1,12 +1,8 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-loop-statement" as const; @@ -31,7 +27,7 @@ const meta: RuleMetaData = { docs: { description: "Disallow imperative loops.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, @@ -42,11 +38,11 @@ const meta: RuleMetaData = { */ function checkLoop( node: - | TSESTree.ForStatement + | TSESTree.DoWhileStatement | TSESTree.ForInStatement | TSESTree.ForOfStatement - | TSESTree.WhileStatement - | TSESTree.DoWhileStatement, + | TSESTree.ForStatement + | TSESTree.WhileStatement, context: RuleContext ): RuleResult { // All loops violate this rule. diff --git a/src/rules/no-method-signature.ts b/src/rules/no-method-signature.ts index 5a9edd21a..aeafb8abc 100644 --- a/src/rules/no-method-signature.ts +++ b/src/rules/no-method-signature.ts @@ -1,12 +1,8 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-method-signature" as const; @@ -33,7 +29,7 @@ const meta: RuleMetaData = { description: "Prefer property signatures with readonly modifiers over method signatures.", category: "Best Practices", - recommended: "error", + recommended: "warn", }, messages: errorMessages, schema, diff --git a/src/rules/no-mixed-type.ts b/src/rules/no-mixed-type.ts index 1728e7e9d..9f6e18816 100644 --- a/src/rules/no-mixed-type.ts +++ b/src/rules/no-mixed-type.ts @@ -1,16 +1,10 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import { AST_NODE_TYPES } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; -import { isTSPropertySignature, isTSTypeLiteral } from "../util/typeguard"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; +import { isTSPropertySignature, isTSTypeLiteral } from "~/util/typeguard"; // The name of this rule. export const name = "no-mixed-type" as const; @@ -55,7 +49,7 @@ const meta: RuleMetaData = { description: "Restrict types so that only members of the same kind of are allowed in them.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, diff --git a/src/rules/no-promise-reject.ts b/src/rules/no-promise-reject.ts index 1a93b5021..51d46f532 100644 --- a/src/rules/no-promise-reject.ts +++ b/src/rules/no-promise-reject.ts @@ -1,13 +1,9 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; -import { isIdentifier, isMemberExpression } from "../util/typeguard"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; +import { isIdentifier, isMemberExpression } from "~/util/typeguard"; // The name of this rule. export const name = "no-promise-reject" as const; diff --git a/src/rules/no-return-void.ts b/src/rules/no-return-void.ts index eba520cf2..5e5212040 100644 --- a/src/rules/no-return-void.ts +++ b/src/rules/no-return-void.ts @@ -1,17 +1,13 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; import { isTSNullKeyword, isTSUndefinedKeyword, isTSVoidKeyword, -} from "../util/typeguard"; +} from "~/util/typeguard"; // The name of this rule. export const name = "no-return-void" as const; @@ -55,7 +51,7 @@ const meta: RuleMetaData = { docs: { description: "Disallow functions that don't return anything.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, @@ -66,9 +62,9 @@ const meta: RuleMetaData = { */ function checkFunction( node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression | TSESTree.TSFunctionType, context: RuleContext, options: Options diff --git a/src/rules/no-this-expression.ts b/src/rules/no-this-expression.ts index 6ad1509c7..6ce9e07f8 100644 --- a/src/rules/no-this-expression.ts +++ b/src/rules/no-this-expression.ts @@ -1,12 +1,8 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-this-expression" as const; @@ -31,7 +27,7 @@ const meta: RuleMetaData = { docs: { description: "Disallow this access.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, diff --git a/src/rules/no-throw-statement.ts b/src/rules/no-throw-statement.ts index ac177cf39..3b82f98f7 100644 --- a/src/rules/no-throw-statement.ts +++ b/src/rules/no-throw-statement.ts @@ -1,12 +1,8 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-throw-statement" as const; @@ -31,7 +27,7 @@ const meta: RuleMetaData = { docs: { description: "Disallow throwing exceptions.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, diff --git a/src/rules/no-try-statement.ts b/src/rules/no-try-statement.ts index 331c4361f..1b4bb85ea 100644 --- a/src/rules/no-try-statement.ts +++ b/src/rules/no-try-statement.ts @@ -1,12 +1,8 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { JSONSchema4 } from "json-schema"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule } from "~/util/rule"; // The name of this rule. export const name = "no-try-statement" as const; @@ -51,7 +47,7 @@ const meta: RuleMetaData = { docs: { description: "Disallow try-catch[-finally] and try-finally patterns.", category: "Best Practices", - recommended: false, + recommended: "error", }, messages: errorMessages, schema, diff --git a/src/rules/prefer-readonly-type.ts b/src/rules/prefer-readonly-type.ts index 9fb6471fd..dd407ca72 100644 --- a/src/rules/prefer-readonly-type.ts +++ b/src/rules/prefer-readonly-type.ts @@ -1,28 +1,22 @@ -// Polyfill. -import "array.prototype.flatmap/auto.js"; - -import { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; import { all as deepMerge } from "deepmerge"; -import { JSONSchema4 } from "json-schema"; +import type { JSONSchema4 } from "json-schema"; -import { +import type { AllowLocalMutationOption, - allowLocalMutationOptionSchema, IgnoreClassOption, - ignoreClassOptionSchema, IgnoreInterfaceOption, - ignoreInterfaceOptionSchema, IgnorePatternOption, - ignorePatternOptionSchema, -} from "../common/ignore-options"; +} from "~/common/ignore-options"; import { - createRule, - getTypeOfNode, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; -import { isInReturnType } from "../util/tree"; + allowLocalMutationOptionSchema, + ignoreClassOptionSchema, + ignoreInterfaceOptionSchema, + ignorePatternOptionSchema, +} from "~/common/ignore-options"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule, getTypeOfNode } from "~/util/rule"; +import { isInReturnType, isInTSTypeAliasDeclaration } from "~/util/tree"; import { isArrayType, isAssignmentPattern, @@ -34,16 +28,16 @@ import { isTSPropertySignature, isTSTupleType, isTSTypeOperator, -} from "../util/typeguard"; +} from "~/util/typeguard"; // The name of this rule. export const name = "prefer-readonly-type" as const; // The options this rule can take. type Options = AllowLocalMutationOption & - IgnorePatternOption & IgnoreClassOption & - IgnoreInterfaceOption & { + IgnoreInterfaceOption & + IgnorePatternOption & { readonly allowMutableReturnType: boolean; readonly checkImplicit: boolean; readonly ignoreCollections: boolean; @@ -81,7 +75,7 @@ const defaultOptions: Options = { ignoreInterface: false, ignoreCollections: false, allowLocalMutation: false, - allowMutableReturnType: false, + allowMutableReturnType: true, }; // The possible error messages. @@ -115,7 +109,8 @@ const mutableToImmutableTypes: ReadonlyMap = new Map< ["Set", "ReadonlySet"], ]); const mutableTypeRegex = new RegExp( - `^${Array.from(mutableToImmutableTypes.keys()).join("|")}$` + `^${[...mutableToImmutableTypes.keys()].join("|")}$`, + "u" ); /** @@ -131,30 +126,29 @@ function checkArrayOrTupleType( context, descriptors: [], }; - } else { - return { - context, - descriptors: - (!node.parent || - !isTSTypeOperator(node.parent) || - node.parent.operator !== "readonly") && - (!options.allowMutableReturnType || !isInReturnType(node)) - ? [ - { - node, - messageId: isTSTupleType(node) ? "tuple" : "array", - fix: - node.parent && isTSArrayType(node.parent) - ? (fixer) => [ - fixer.insertTextBefore(node, "(readonly "), - fixer.insertTextAfter(node, ")"), - ] - : (fixer) => fixer.insertTextBefore(node, "readonly "), - }, - ] - : [], - }; } + return { + context, + descriptors: + (node.parent === undefined || + !isTSTypeOperator(node.parent) || + node.parent.operator !== "readonly") && + (!options.allowMutableReturnType || !isInReturnType(node)) + ? [ + { + node, + messageId: isTSTupleType(node) ? "tuple" : "array", + fix: + node.parent !== undefined && isTSArrayType(node.parent) + ? (fixer) => [ + fixer.insertTextBefore(node, "(readonly "), + fixer.insertTextAfter(node, ")"), + ] + : (fixer) => fixer.insertTextBefore(node, "readonly "), + }, + ] + : [], + }; } /** @@ -166,19 +160,20 @@ function checkMappedType( ): RuleResult { return { context, - descriptors: node.readonly - ? [] - : [ - { - node, - messageId: "property", - fix: (fixer) => - fixer.insertTextBeforeRange( - [node.range[0] + 1, node.range[1]], - " readonly" - ), - }, - ], + descriptors: + node.readonly === true || node.readonly === "+" + ? [] + : [ + { + node, + messageId: "property", + fix: (fixer) => + fixer.insertTextBeforeRange( + [node.range[0] + 1, node.range[1]], + " readonly" + ), + }, + ], }; } @@ -190,39 +185,39 @@ function checkTypeReference( context: RuleContext, options: Options ): RuleResult { - if (isIdentifier(node.typeName)) { - if ( - options.ignoreCollections && - node.typeName.name.match(mutableTypeRegex) - ) { - return { - context, - descriptors: [], - }; - } else { - const immutableType = mutableToImmutableTypes.get(node.typeName.name); - return { - context, - descriptors: - immutableType && - (!options.allowMutableReturnType || !isInReturnType(node)) - ? [ - { - node, - messageId: "type", - fix: (fixer) => - fixer.replaceText(node.typeName, immutableType), - }, - ] - : [], - }; - } - } else { + if ( + !isIdentifier(node.typeName) || + (options.ignoreCollections && mutableTypeRegex.test(node.typeName.name)) || + isInTSTypeAliasDeclaration(node) + ) { return { context, descriptors: [], }; } + + const immutableType = mutableToImmutableTypes.get(node.typeName.name); + if ( + immutableType !== undefined && + immutableType.length > 0 && + (!options.allowMutableReturnType || !isInReturnType(node)) + ) { + return { + context, + descriptors: [ + { + node, + messageId: "type", + fix: (fixer) => fixer.replaceText(node.typeName, immutableType), + }, + ], + }; + } + + return { + context, + descriptors: [], + }; } /** @@ -240,7 +235,7 @@ function checkProperty( return { context, descriptors: - !node.readonly && + node.readonly !== true && (!options.allowMutableReturnType || !isInReturnType(node)) ? [ { @@ -264,10 +259,10 @@ function checkProperty( */ function checkImplicitType( node: - | TSESTree.VariableDeclaration + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression, + | TSESTree.VariableDeclaration, context: RuleContext, options: Options ): RuleResult { @@ -318,12 +313,11 @@ function checkImplicitType( : [] ), }; - } else { - return { - context, - descriptors: [], - }; } + return { + context, + descriptors: [], + }; } // Create the rule. diff --git a/src/rules/prefer-tacit.ts b/src/rules/prefer-tacit.ts index 27d6ba585..f375fb2e6 100644 --- a/src/rules/prefer-tacit.ts +++ b/src/rules/prefer-tacit.ts @@ -1,20 +1,13 @@ -import { FunctionLikeDeclaration, Type } from "typescript"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { ReportDescriptor } from "@typescript-eslint/experimental-utils/dist/ts-eslint"; import { all as deepMerge } from "deepmerge"; -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; +import type { JSONSchema4 } from "json-schema"; +import type { FunctionLikeDeclaration, Type } from "typescript"; -import { - IgnorePatternOption, - ignorePatternOptionSchema, -} from "../common/ignore-options"; -import { - createRule, - getESTreeNode, - getTypeOfNode, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; +import type { IgnorePatternOption } from "~/common/ignore-options"; +import { ignorePatternOptionSchema } from "~/common/ignore-options"; +import type { RuleContext, RuleMetaData, RuleResult } from "~/util/rule"; +import { createRule, getESTreeNode, getTypeOfNode } from "~/util/rule"; import { isBlockStatement, isCallExpression, @@ -22,8 +15,7 @@ import { isIdentifier, isReturnStatement, isTSFunctionType, -} from "../util/typeguard"; -import { ReportDescriptor } from "@typescript-eslint/experimental-utils/dist/ts-eslint"; +} from "~/util/typeguard"; // The name of this rule. export const name = "prefer-tacit" as const; @@ -103,32 +95,29 @@ function isCallerViolation( ): boolean { if (calleeType.symbol === undefined) { return false; - } else { - const tsDeclaration = - calleeType.symbol.valueDeclaration ?? calleeType.symbol.declarations?.[0]; - - if (tsDeclaration === undefined) { - return false; - } else { - const declaration = getESTreeNode(tsDeclaration, context); + } + const tsDeclaration = + calleeType.symbol.valueDeclaration ?? calleeType.symbol.declarations?.[0]; - return ( - (declaration !== null && - declaration !== undefined && - (isFunctionLike(declaration) || isTSFunctionType(declaration)) && - declaration.params.length === caller.arguments.length) || - // Check for optional params. - ((tsDeclaration as FunctionLikeDeclaration).parameters !== undefined && - (tsDeclaration as FunctionLikeDeclaration).parameters - .slice(caller.arguments.length) - .every( - (param) => - param.initializer !== undefined || - param.questionToken !== undefined - )) - ); - } + if (tsDeclaration === undefined) { + return false; } + const declaration = getESTreeNode(tsDeclaration, context); + + return ( + (declaration !== null && + declaration !== undefined && + (isFunctionLike(declaration) || isTSFunctionType(declaration)) && + declaration.params.length === caller.arguments.length) || + // Check for optional params. + ((tsDeclaration as FunctionLikeDeclaration).parameters !== undefined && + (tsDeclaration as FunctionLikeDeclaration).parameters + .slice(caller.arguments.length) + .every( + (param) => + param.initializer !== undefined || param.questionToken !== undefined + )) + ); } /** @@ -136,9 +125,9 @@ function isCallerViolation( */ function getCallDescriptors( node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression, + | TSESTree.FunctionExpression, context: RuleContext, options: Options, caller: TSESTree.CallExpression @@ -167,7 +156,7 @@ function getCallDescriptors( const calleeName = caller.callee.name; return [ { - node: node, + node, messageId: "generic", fix: // No fixer when assuming types as this is dangerous. @@ -179,12 +168,10 @@ function getCallDescriptors( : (fixer) => fixer.replaceText(node, calleeName), }, ]; - } else { - return []; } - } else { return []; } + return []; } /** @@ -192,17 +179,16 @@ function getCallDescriptors( */ function getDirectCallDescriptors( node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression, + | TSESTree.FunctionExpression, context: RuleContext, options: Options ): Array> { if (isCallExpression(node.body)) { return getCallDescriptors(node, context, options, node.body); - } else { - return []; } + return []; } /** @@ -210,9 +196,9 @@ function getDirectCallDescriptors( */ function getNestedCallDescriptors( node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression, + | TSESTree.FunctionExpression, context: RuleContext, options: Options ): Array> { @@ -229,9 +215,8 @@ function getNestedCallDescriptors( options, node.body.body[0].argument ); - } else { - return []; } + return []; } /** @@ -239,9 +224,9 @@ function getNestedCallDescriptors( */ function checkFunction( node: + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression, + | TSESTree.FunctionExpression, context: RuleContext, options: Options ): RuleResult { diff --git a/src/rules/prefer-type-literal.ts b/src/rules/prefer-type-literal.ts deleted file mode 100644 index bfa82c5b1..000000000 --- a/src/rules/prefer-type-literal.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; -import { JSONSchema4 } from "json-schema"; - -import { - IgnorePatternOption, - ignorePatternOptionSchema, -} from "../common/ignore-options"; -import { - createRule, - RuleContext, - RuleMetaData, - RuleResult, -} from "../util/rule"; -import { isIdentifier } from "../util/typeguard"; - -// The name of this rule. -export const name = "prefer-type-literal" as const; - -// The options this rule can take. -type Options = IgnorePatternOption; - -// The schema for the rule options. -const schema: JSONSchema4 = [ignorePatternOptionSchema]; - -// The default options for the rule. -const defaultOptions: Options = {}; - -// The possible error messages. -const errorMessages = { - generic: "Unexpected interface, use a type literal instead.", -} as const; - -// The meta data for this rule. -const meta: RuleMetaData = { - deprecated: true, - replacedBy: ["@typescript-eslint/consistent-type-definitions"], - type: "suggestion", - docs: { - description: "Prefer Type Literals over Interfaces.", - category: "Best Practices", - recommended: false, - }, - messages: errorMessages, - fixable: "code", - schema, -}; - -/** - * Check if the given interface node violates this rule. - */ -function checkInterface( - node: TSESTree.TSInterfaceDeclaration, - context: RuleContext -): RuleResult { - return { - context, - descriptors: [ - { - node, - messageId: "generic", - fix: - node.extends === undefined || - node.extends.every((type) => isIdentifier(type.expression)) - ? (fixer) => [ - fixer.replaceTextRange( - [node.range[0], node.range[0] + "interface".length], - "type" - ), - fixer.insertTextBefore(node.body, "= "), - ...(node.extends === undefined - ? [] - : [ - fixer.replaceTextRange( - [node.id.range[1], node.body.range[0]], - " " - ), - ...node.extends.map((type) => - fixer.insertTextBefore( - node.body, - `${(type.expression as TSESTree.Identifier).name} & ` - ) - ), - ]), - fixer.insertTextAfter(node, ";"), - ] - : undefined, - }, - ], - }; -} - -// Create the rule. -export const rule = createRule( - name, - meta, - defaultOptions, - { - TSInterfaceDeclaration: checkInterface, - } -); diff --git a/src/util/conditional-imports/.eslintrc.json b/src/util/conditional-imports/.eslintrc.json index d33e86739..493563629 100644 --- a/src/util/conditional-imports/.eslintrc.json +++ b/src/util/conditional-imports/.eslintrc.json @@ -1,7 +1,14 @@ { "rules": { - "@typescript-eslint/no-require-imports": "off", + "@typescript-eslint/no-var-requires": "off", "functional/functional-parameters": "off", - "functional/no-try-statement": "off" + "functional/no-try-statement": "off", + "import/no-extraneous-dependencies": [ + "error", + { + "peerDependencies": true + } + ], + "unicorn/prefer-module": "off" } } diff --git a/src/util/conditional-imports/tsutils.ts b/src/util/conditional-imports/tsutils.ts index db214bade..7f8aa3ada 100644 --- a/src/util/conditional-imports/tsutils.ts +++ b/src/util/conditional-imports/tsutils.ts @@ -1,11 +1,11 @@ // Note: This import will be stripped out by rollup. -import * as tsutils from "tsutils"; +import type * as tsutils from "tsutils"; // Conditionally loaded tsutils but only if it is avaliable. export default (() => { try { return require("tsutils") as typeof tsutils; - } catch (error) { + } catch { return undefined; } })(); diff --git a/src/util/conditional-imports/typescript.ts b/src/util/conditional-imports/typescript.ts index 94125317d..0efc6354e 100644 --- a/src/util/conditional-imports/typescript.ts +++ b/src/util/conditional-imports/typescript.ts @@ -1,11 +1,11 @@ // Note: This import will be stripped out by rollup. -import ts from "typescript"; +import type ts from "typescript"; // Conditionally loaded TypeScript but only if it is available. export default (() => { try { return require("typescript") as typeof ts; - } catch (error) { + } catch { return undefined; } })(); diff --git a/src/util/misc.ts b/src/util/misc.ts index b4e0d2d72..2e3f7c808 100644 --- a/src/util/misc.ts +++ b/src/util/misc.ts @@ -1,7 +1,5 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import { AST_NODE_TYPES } from "@typescript-eslint/experimental-utils"; /** * Returns a function that checks if the given value is the same as the expected diff --git a/src/util/rule.ts b/src/util/rule.ts index c6d4f2eb6..b736f1a61 100644 --- a/src/util/rule.ts +++ b/src/util/rule.ts @@ -1,19 +1,10 @@ -// Polyfill. -import "object.fromentries/auto.js"; +import type { TSESLint, TSESTree } from "@typescript-eslint/experimental-utils"; +import { ESLintUtils } from "@typescript-eslint/experimental-utils"; +import type { Rule } from "eslint"; +import type { Node, Type } from "typescript"; -import { - ESLintUtils, - TSESLint, - TSESTree, -} from "@typescript-eslint/experimental-utils"; -import { Rule } from "eslint"; -import { Node, Type } from "typescript"; - -import { shouldIgnore } from "../common/ignore-options"; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -- This file is outside of the root dir (i.e. src/). -import { version } from "../../package.json"; +import { shouldIgnore } from "~/common/ignore-options"; +import { version } from "~/package.json"; export type BaseOptions = object; @@ -21,9 +12,12 @@ export type BaseOptions = object; export type RuleMetaDataDocs = Omit; // "docs.url" will be set automatically. -export type RuleMetaData = { +export type RuleMetaData = Omit< + TSESLint.RuleMetaData, + "docs" +> & { readonly docs: RuleMetaDataDocs; -} & Omit, "docs">; +}; export type RuleContext< MessageIds extends string, @@ -75,12 +69,13 @@ function checkNode< options: Options ): (node: Node) => void { return (node: Node) => { - if (!options || !shouldIgnore(node, context, options)) { + if (!shouldIgnore(node, context, options)) { const result = check(node, context, options); - result.descriptors.forEach((descriptor) => - result.context.report(descriptor) - ); + // eslint-disable-next-line functional/no-loop-statement -- can't really be avoided. + for (const descriptor of result.descriptors) { + result.context.report(descriptor); + } } }; } @@ -134,14 +129,13 @@ export function getTypeOfNode>( parserServices.esTreeNodeToTSNodeMap === undefined ) { return null; - } else { - const checker = parserServices.program.getTypeChecker(); - const nodeType = checker.getTypeAtLocation( - parserServices.esTreeNodeToTSNodeMap.get(node) - ); - const constrained = checker.getBaseConstraintOfType(nodeType); - return constrained ?? nodeType; } + const checker = parserServices.program.getTypeChecker(); + const nodeType = checker.getTypeAtLocation( + parserServices.esTreeNodeToTSNodeMap.get(node) + ); + const constrained = checker.getBaseConstraintOfType(nodeType); + return constrained ?? nodeType; } /** diff --git a/src/util/tree.ts b/src/util/tree.ts index 812ab6602..56e8a0b27 100644 --- a/src/util/tree.ts +++ b/src/util/tree.ts @@ -1,4 +1,4 @@ -import { TSESTree } from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; import { isCallExpression, @@ -10,6 +10,7 @@ import { isMethodDefinition, isProperty, isTSInterfaceBody, + isTSTypeAliasDeclaration, } from "./typeguard"; /** @@ -22,7 +23,7 @@ function getAncestorOfType( ): T | null { return checker(node, child) ? node - : node.parent == undefined + : node.parent === null || node.parent === undefined ? null : getAncestorOfType(checker, node.parent, node); } @@ -72,7 +73,8 @@ export function isInReturnType(node: TSESTree.Node): boolean { return ( getAncestorOfType( (n): n is TSESTree.Node => - n.parent != undefined && + n.parent !== undefined && + n.parent !== null && isFunctionLike(n.parent) && n.parent.returnType === n, node @@ -80,6 +82,13 @@ export function isInReturnType(node: TSESTree.Node): boolean { ); } +/** + * Is the given node in a TS Type Alias Declaration. + */ +export function isInTSTypeAliasDeclaration(node: TSESTree.Node): boolean { + return getAncestorOfType(isTSTypeAliasDeclaration, node) !== null; +} + /** * Is the given identifier a property of an object? */ diff --git a/src/util/typeguard.ts b/src/util/typeguard.ts index ef314dc2b..165e82fba 100644 --- a/src/util/typeguard.ts +++ b/src/util/typeguard.ts @@ -2,17 +2,16 @@ * @file Functions that typeguard the given node/type. */ -import { - AST_NODE_TYPES, - TSESTree, -} from "@typescript-eslint/experimental-utils"; +import type { TSESTree } from "@typescript-eslint/experimental-utils"; +import { AST_NODE_TYPES } from "@typescript-eslint/experimental-utils"; // TS import - only use this for types, will be stripped out by rollup. -import { Type, UnionType } from "typescript"; +import type { Type, UnionType } from "typescript"; // TS import - conditionally imported only when typescript is available. -import ts from "../util/conditional-imports/typescript"; +import ts from "~/conditional-imports/typescript"; // Any JSDoc for these functions would be tedious. +// eslint-disable-next-line eslint-comments/disable-enable-pair /* eslint-disable jsdoc/require-jsdoc */ /* @@ -110,7 +109,7 @@ export function isFunctionDeclaration( */ export function isFunctionExpressionLike( node: TSESTree.Node -): node is TSESTree.FunctionExpression | TSESTree.ArrowFunctionExpression { +): node is TSESTree.ArrowFunctionExpression | TSESTree.FunctionExpression { return ( node.type === AST_NODE_TYPES.FunctionExpression || node.type === AST_NODE_TYPES.ArrowFunctionExpression @@ -125,9 +124,9 @@ export function isFunctionExpressionLike( export function isFunctionLike( node: TSESTree.Node ): node is + | TSESTree.ArrowFunctionExpression | TSESTree.FunctionDeclaration - | TSESTree.FunctionExpression - | TSESTree.ArrowFunctionExpression { + | TSESTree.FunctionExpression { return isFunctionDeclaration(node) || isFunctionExpressionLike(node); } @@ -235,6 +234,12 @@ export function isTSTupleType( return node.type === AST_NODE_TYPES.TSTupleType; } +export function isTSTypeAliasDeclaration( + node: TSESTree.Node +): node is TSESTree.TSTypeAliasDeclaration { + return node.type === AST_NODE_TYPES.TSTypeAliasDeclaration; +} + export function isTSTypeAnnotation( node: TSESTree.Node ): node is TSESTree.TSTypeAnnotation { @@ -333,7 +338,7 @@ export function isArrayType( return assumeType === true && type === null ? node !== null : type !== null && - ((type.symbol && type.symbol.name === "Array") || + ((type.symbol !== undefined && type.symbol.name === "Array") || (isUnionType(type) && type.types.some((t) => isArrayType(t, false, null)))); } @@ -364,7 +369,8 @@ export function isArrayConstructorType( return assumeType === true && type === null ? node !== null && isIdentifier(node) && node.name === "Array" : type !== null && - ((type.symbol && type.symbol.name === "ArrayConstructor") || + ((type.symbol !== undefined && + type.symbol.name === "ArrayConstructor") || (isUnionType(type) && type.types.some((t) => isArrayConstructorType(t, false, null)))); } @@ -395,7 +401,8 @@ export function isObjectConstructorType( return assumeType === true && type === null ? node !== null && isIdentifier(node) && node.name === "Object" : type !== null && - ((type.symbol && type.symbol.name === "ObjectConstructor") || + ((type.symbol !== undefined && + type.symbol.name === "ObjectConstructor") || (isUnionType(type) && type.types.some((t) => isObjectConstructorType(t, false, null)))); } diff --git a/tests/.eslintrc.json b/tests/.eslintrc.json new file mode 100644 index 000000000..0967526bc --- /dev/null +++ b/tests/.eslintrc.json @@ -0,0 +1,20 @@ +{ + "plugins": ["ava"], + "extends": ["plugin:ava/recommended"], + "rules": { + "@typescript-eslint/no-unused-vars-experimental": "off", + "@typescript-eslint/strict-boolean-expressions": "off", + "ava/no-import-test-files": ["error", { "files": ["tests/**/*.test.ts"] }], + "eslint-comments/disable-enable-pair": "off", + "eslint-comments/no-unlimited-disable": "off", + "functional/functional-parameters": "off", + "functional/no-conditional-statement": "off", + "functional/no-expression-statement": "off", + "functional/no-loop-statement": "off", + "functional/no-return-void": "off", + "import/no-named-as-default-member": "off", + "sonarjs/no-duplicate-string": "off", + "sonarjs/no-identical-functions": "off", + "unicorn/prefer-module": "off" + } +} diff --git a/tests/common/ignore-options.test.ts b/tests/common/ignore-options.test.ts index 5657db529..b98ff659d 100644 --- a/tests/common/ignore-options.test.ts +++ b/tests/common/ignore-options.test.ts @@ -1,240 +1,235 @@ -import { TSESLint } from "@typescript-eslint/experimental-utils"; +import type { TSESLint } from "@typescript-eslint/experimental-utils"; +import assert from "assert"; +import test from "ava"; import dedent from "dedent"; -import { Rule, RuleTester } from "eslint"; +import RuleTester from "eslint-ava-rule-tester"; -import { +import type { IgnoreAccessorPatternOption, IgnorePatternOption, - shouldIgnore, -} from "../../src/common/ignore-options"; -import { filename, es9 } from "../helpers/configs"; -import { addFilename, createDummyRule } from "../helpers/util"; +} from "~/common/ignore-options"; +import { shouldIgnore } from "~/common/ignore-options"; +import { filename, configs } from "~/tests/helpers/configs"; +import { testWrapper } from "~/tests/helpers/testers"; +import { addFilename, createDummyRule } from "~/tests/helpers/util"; -describe("option: ignore", () => { - describe("ignoreAccessorPattern", () => { - const tests: ReadonlyArray< - TSESLint.ValidTestCase - > = [ - // Exact match. - { - code: dedent` - mutable = 0;`, - options: [true, { ignoreAccessorPattern: "mutable" }], - }, - { - code: dedent` - mutable.foo = 0;`, - options: [true, { ignoreAccessorPattern: "mutable.foo" }], - }, - { - code: dedent` - x = 0; - xxx_mutable_xxx = 0; - mutable.foo.bar = 0; - mutable.foo[0] = 0; - mutable.foo["foo-bar"] = 0;`, - options: [false, { ignoreAccessorPattern: "mutable" }], - }, - // Prefix match. - { - code: dedent` - mutable_ = 0; - mutable_xxx = 0;`, - options: [true, { ignoreAccessorPattern: "mutable_*" }], - }, - { - code: dedent` - x = 0; - xxx_mutable_xxx = 0; - mutable_xxx.foo = 0; - mutable_xxx[0] = 0; - mutable_xxx["foo-bar"] = 0;`, - options: [false, { ignoreAccessorPattern: "mutable_*" }], - }, - // Suffix match. - { - code: dedent` - _mutable = 0; - xxx_mutable = 0;`, - options: [true, { ignoreAccessorPattern: "*_mutable" }], - }, - { - code: dedent` - x = 0; - xxx_mutable_xxx = 0; - xxx_mutable.foo = 0; - xxx_mutable[0] = 0; - xxx_mutable["foo-bar"] = 0;`, - options: [false, { ignoreAccessorPattern: "*_mutable" }], - }, - // Middle match. - { - code: dedent` - xxx_mutable_xxx = 0;`, - options: [true, { ignoreAccessorPattern: "*_mutable_*" }], - }, - { - code: dedent` - x = 0; - xxx_mutable_xxx.foo = 0; - xxx_mutable_xxx[0] = 0; - xxx_mutable_xxx["foo-bar"] = 0;`, - options: [false, { ignoreAccessorPattern: "*_mutable_*" }], - }, - // Mutable properties. - { - code: dedent` - mutable_xxx.foo = 0; - mutable_xxx[0] = 0; - mutable_xxx["foo-bar"] = 0;`, - options: [true, { ignoreAccessorPattern: "mutable_*.*" }], - }, - { - code: dedent` - mutable_xxx = 0; - mutable_xxx.foo.bar = 0; - mutable_xxx.foo[0] = 0; - mutable_xxx.foo["foo-bar"] = 0;`, - options: [false, { ignoreAccessorPattern: "mutable_*.*" }], - }, - // Mutable deep properties. - { - code: dedent` - mutable_xxx.foo.bar[0] = 0; - mutable_xxx.foo.bar["foo-bar"] = 0; - mutable_xxx.foo.bar = [0, 1, 2]; - mutable_xxx.foo = 0; - mutable_xxx[0] = 0; - mutable_xxx["foo-bar"] = 0;`, - options: [true, { ignoreAccessorPattern: "mutable_*.*.**" }], - }, - { - code: dedent` - mutable_xxx = 0;`, - options: [false, { ignoreAccessorPattern: "mutable_*.*.**" }], - }, - // Mutable deep properties and container. - { - code: dedent` - mutable_xxx.foo.bar[0] = 0; - mutable_xxx.foo.bar["foo-bar"] = 0; - mutable_xxx.foo.bar = [0, 1, 2]; - mutable_xxx.foo = 0; - mutable_xxx[0] = 0; - mutable_xxx["foo-bar"] = 0; - mutable_xxx = 0;`, - options: [true, { ignoreAccessorPattern: "mutable_*.**" }], - }, - ]; - - new RuleTester(es9).run( - "AssignmentExpression", - createDummyRule((context) => { - const [allowed, options] = context.options; - return { - AssignmentExpression: (node) => { - expect(shouldIgnore(node, context, options)).toBe(allowed); - }, - }; - }) as Rule.RuleModule, - addFilename(filename, { - valid: [ - ...(tests as unknown as ReadonlyArray), - ], - invalid: [], - }) - ); +/** + * Create a dummy rule that operates on AssignmentExpression nodes. + */ +function createDummyAssignmentExpressionRule() { + return createDummyRule((context) => { + const [allowed, options] = context.options; + return { + AssignmentExpression: (node) => { + assert(shouldIgnore(node, context, options) === allowed); + }, + }; }); +} - describe("ignorePattern", () => { - const assignmentExpressionTests: ReadonlyArray< - TSESLint.ValidTestCase - > = [ - // Prefix match. - { - code: dedent` - mutable_ = 0; - mutable_xxx = 0; - mutable_xxx.foo = 0; - mutable_xxx[0] = 0;`, - options: [true, { ignorePattern: "^mutable_" }], - }, - // Suffix match. - { - code: dedent` - _mutable = 0; - xxx_mutable = 0; - foo.xxx_mutable = 0;`, - options: [true, { ignorePattern: "_mutable$" }], - }, - // Middle match. - { - code: dedent` - mutable = 0;`, - options: [true, { ignorePattern: "^mutable$" }], - }, - { - code: dedent` - mutable.foo.bar = 0; - mutable.bar[0] = 0;`, - options: [false, { ignorePattern: "^mutable$" }], - }, - ]; +const tests: ReadonlyArray< + TSESLint.ValidTestCase +> = [ + // Exact match. + { + code: dedent` + mutable = 0;`, + options: [true, { ignoreAccessorPattern: "mutable" }], + }, + { + code: dedent` + mutable.foo = 0;`, + options: [true, { ignoreAccessorPattern: "mutable.foo" }], + }, + { + code: dedent` + x = 0; + xxx_mutable_xxx = 0; + mutable.foo.bar = 0; + mutable.foo[0] = 0; + mutable.foo["foo-bar"] = 0;`, + options: [false, { ignoreAccessorPattern: "mutable" }], + }, + // Prefix match. + { + code: dedent` + mutable_ = 0; + mutable_xxx = 0;`, + options: [true, { ignoreAccessorPattern: "mutable_*" }], + }, + { + code: dedent` + x = 0; + xxx_mutable_xxx = 0; + mutable_xxx.foo = 0; + mutable_xxx[0] = 0; + mutable_xxx["foo-bar"] = 0;`, + options: [false, { ignoreAccessorPattern: "mutable_*" }], + }, + // Suffix match. + { + code: dedent` + _mutable = 0; + xxx_mutable = 0;`, + options: [true, { ignoreAccessorPattern: "*_mutable" }], + }, + { + code: dedent` + x = 0; + xxx_mutable_xxx = 0; + xxx_mutable.foo = 0; + xxx_mutable[0] = 0; + xxx_mutable["foo-bar"] = 0;`, + options: [false, { ignoreAccessorPattern: "*_mutable" }], + }, + // Middle match. + { + code: dedent` + xxx_mutable_xxx = 0;`, + options: [true, { ignoreAccessorPattern: "*_mutable_*" }], + }, + { + code: dedent` + x = 0; + xxx_mutable_xxx.foo = 0; + xxx_mutable_xxx[0] = 0; + xxx_mutable_xxx["foo-bar"] = 0;`, + options: [false, { ignoreAccessorPattern: "*_mutable_*" }], + }, + // Mutable properties. + { + code: dedent` + mutable_xxx.foo = 0; + mutable_xxx[0] = 0; + mutable_xxx["foo-bar"] = 0;`, + options: [true, { ignoreAccessorPattern: "mutable_*.*" }], + }, + { + code: dedent` + mutable_xxx = 0; + mutable_xxx.foo.bar = 0; + mutable_xxx.foo[0] = 0; + mutable_xxx.foo["foo-bar"] = 0;`, + options: [false, { ignoreAccessorPattern: "mutable_*.*" }], + }, + // Mutable deep properties. + { + code: dedent` + mutable_xxx.foo.bar[0] = 0; + mutable_xxx.foo.bar["foo-bar"] = 0; + mutable_xxx.foo.bar = [0, 1, 2]; + mutable_xxx.foo = 0; + mutable_xxx[0] = 0; + mutable_xxx["foo-bar"] = 0;`, + options: [true, { ignoreAccessorPattern: "mutable_*.*.**" }], + }, + { + code: dedent` + mutable_xxx = 0;`, + options: [false, { ignoreAccessorPattern: "mutable_*.*.**" }], + }, + // Mutable deep properties and container. + { + code: dedent` + mutable_xxx.foo.bar[0] = 0; + mutable_xxx.foo.bar["foo-bar"] = 0; + mutable_xxx.foo.bar = [0, 1, 2]; + mutable_xxx.foo = 0; + mutable_xxx[0] = 0; + mutable_xxx["foo-bar"] = 0; + mutable_xxx = 0;`, + options: [true, { ignoreAccessorPattern: "mutable_*.**" }], + }, +]; - new RuleTester(es9).run( - "AssignmentExpression", - createDummyRule((context) => { - const [allowed, options] = context.options; - return { - AssignmentExpression: (node) => { - expect(shouldIgnore(node, context, options)).toBe(allowed); - }, - }; - }) as Rule.RuleModule, - addFilename(filename, { - valid: [ - ...(assignmentExpressionTests as unknown as ReadonlyArray), - ], - invalid: [], - }) - ); +new RuleTester(testWrapper(test), configs.es10).run( + "AssignmentExpression", + createDummyAssignmentExpressionRule(), + addFilename(filename, { + valid: [...(tests as unknown as ReadonlyArray)], + invalid: [], + }) +); - const expressionStatementTests: ReadonlyArray< - TSESLint.ValidTestCase - > = [ - { - code: dedent` - const x = 0;`, - options: [true, { ignorePattern: "^const x" }], - }, - { - code: dedent` - const x = 0;`, - options: [true, { ignorePattern: "= 0;$" }], - }, - { - code: dedent` - const x = 0;`, - options: [true, { ignorePattern: "^const x = 0;$" }], - }, - ]; +const assignmentExpressionTests: ReadonlyArray< + TSESLint.ValidTestCase +> = [ + // Prefix match. + { + code: dedent` + mutable_ = 0; + mutable_xxx = 0; + mutable_xxx.foo = 0; + mutable_xxx[0] = 0;`, + options: [true, { ignorePattern: "^mutable_" }], + }, + // Suffix match. + { + code: dedent` + _mutable = 0; + xxx_mutable = 0; + foo.xxx_mutable = 0;`, + options: [true, { ignorePattern: "_mutable$" }], + }, + // Middle match. + { + code: dedent` + mutable = 0;`, + options: [true, { ignorePattern: "^mutable$" }], + }, + { + code: dedent` + mutable.foo.bar = 0; + mutable.bar[0] = 0;`, + options: [false, { ignorePattern: "^mutable$" }], + }, +]; - new RuleTester(es9).run( - "ExpressionStatement", - createDummyRule((context) => { - const [allowed, options] = context.options; - return { - ExpressionStatement: (node) => { - expect(shouldIgnore(node, context, options)).toBe(allowed); - }, - }; - }) as Rule.RuleModule, - addFilename(filename, { - valid: [ - ...(expressionStatementTests as unknown as ReadonlyArray), - ], - invalid: [], - }) - ); - }); -}); +new RuleTester(testWrapper(test), configs.es10).run( + "AssignmentExpression", + createDummyAssignmentExpressionRule(), + addFilename(filename, { + valid: [ + ...(assignmentExpressionTests as unknown as ReadonlyArray), + ], + invalid: [], + }) +); + +const expressionStatementTests: ReadonlyArray< + TSESLint.ValidTestCase +> = [ + { + code: dedent` + const x = 0;`, + options: [true, { ignorePattern: "^const x" }], + }, + { + code: dedent` + const x = 0;`, + options: [true, { ignorePattern: "= 0;$" }], + }, + { + code: dedent` + const x = 0;`, + options: [true, { ignorePattern: "^const x = 0;$" }], + }, +]; + +new RuleTester(testWrapper(test), configs.es10).run( + "ExpressionStatement", + createDummyRule((context) => { + const [allowed, options] = context.options; + return { + ExpressionStatement: (node) => { + assert(shouldIgnore(node, context, options) === allowed); + }, + }; + }), + addFilename(filename, { + valid: [ + ...(expressionStatementTests as unknown as ReadonlyArray), + ], + invalid: [], + }) +); diff --git a/tests/configs.test.ts b/tests/configs.test.ts index f1653ea77..ef1f3ef54 100644 --- a/tests/configs.test.ts +++ b/tests/configs.test.ts @@ -1,64 +1,61 @@ /** * @file Tests for all configs except `all`. */ -import { Linter } from "eslint"; +import test from "ava"; -import all from "../src/configs/all"; -import currying from "../src/configs/currying"; -import functional from "../src/configs/functional"; -import functionalLite from "../src/configs/functional-lite"; -import noMutations from "../src/configs/no-mutations"; -import noExceptions from "../src/configs/no-exceptions"; -import noObjectOrientation from "../src/configs/no-object-orientation"; -import noStatements from "../src/configs/no-statements"; -import stylistic from "../src/configs/stylistic"; -import { rules } from "../src/rules"; +import all from "~/configs/all"; +import currying from "~/configs/currying"; +import functional from "~/configs/functional"; +import functionalLite from "~/configs/functional-lite"; +import noExceptions from "~/configs/no-exceptions"; +import noMutations from "~/configs/no-mutations"; +import noObjectOrientation from "~/configs/no-object-orientation"; +import noStatements from "~/configs/no-statements"; +import stylistic from "~/configs/stylistic"; +import { rules } from "~/rules"; -/** - * Test the given config. - */ -function testConfig(config: Linter.Config, master: Linter.Config) { - return () => { - it("should not have any JS rules that the all config does not have", () => { - expect.hasAssertions(); - expect(config).not.toStrictEqual(master); - Object.keys(config.rules ?? {}).every((rule) => { - expect(master.rules?.[rule]).toBeDefined(); - }); - }); +test('Config "All" - should have all the rules', (t) => { + const allRules = Object.keys(rules); - it("should not have any TS rules that the all config does not have", () => { - expect.hasAssertions(); - expect(config).not.toStrictEqual(master); - Object.keys(config.overrides?.[0].rules ?? {}).every((rule) => { - expect(master.overrides?.[0].rules?.[rule]).toBeDefined(); - }); - }); - }; -} + const configAllJSRules = Object.keys(all.rules ?? {}); + const configAllTSRules = Object.keys(all.overrides?.[0].rules ?? {}); + const configAllRules = new Set([...configAllJSRules, ...configAllTSRules]); + + t.is(configAllRules.size, allRules.length); +}); -describe("configs", () => { - describe("All", () => { - const allRules = Object.keys(rules); - const configJSRules = Object.keys(all.rules ?? {}); - const configTSRules = Object.keys(all.overrides?.[0].rules ?? {}); +/** + * A map of each config (except the "all" config) to it's name. + */ +const configs = new Map([ + [currying, "Currying"], + [functional, "Functional"], + [functionalLite, "Functional Lite"], + [noExceptions, "No Mutations"], + [noMutations, "No Exceptions"], + [noObjectOrientation, "No Object Orientation"], + [noStatements, "No Statements"], + [stylistic, "Stylistic"], +]); - it("should have all the rules", () => { - expect.assertions(1); - expect(new Set([...configJSRules, ...configTSRules]).size).toBe( - allRules.length - ); - }); +for (const [config, name] of [...configs.entries()]) { + test(`Config "${name}" - should not have any *JS* rules that the all config does not have`, (t) => { + const rulesNames = Object.keys(config.rules ?? {}); + if (rulesNames.length === 0) { + t.pass("no tests"); + } + for (const rule of rulesNames) { + t.not(all.rules?.[rule], undefined); + } }); - /* eslint-disable jest/valid-describe */ - describe("Currying", testConfig(currying, all)); - describe("Functional", testConfig(functional, all)); - describe("Functional Lite", testConfig(functionalLite, all)); - describe("No Mutations", testConfig(noMutations, all)); - describe("No Exceptions", testConfig(noExceptions, all)); - describe("No Object Orientation", testConfig(noObjectOrientation, all)); - describe("No Statements", testConfig(noStatements, all)); - describe("Stylistic", testConfig(stylistic, all)); - /* eslint-enable jest/valid-describe */ -}); + test(`Config "${name}" - should not have any *TS* rules that the all config does not have`, (t) => { + const rulesNames = Object.keys(config.overrides?.[0].rules ?? {}); + if (rulesNames.length === 0) { + t.pass("no tests"); + } + for (const rule of rulesNames) { + t.not(all.overrides?.[0].rules?.[rule], undefined); + } + }); +} diff --git a/tests/helpers/configs.ts b/tests/helpers/configs.ts index 3ad542ea6..82d9bc5df 100644 --- a/tests/helpers/configs.ts +++ b/tests/helpers/configs.ts @@ -1,54 +1,74 @@ -import { Linter } from "eslint"; -import * as path from "path"; +import type { Linter } from "eslint"; +import path from "path"; export const filename = path.join(__dirname, "file.ts"); -export const typescript: Linter.Config = { - parser: require.resolve("@typescript-eslint/parser"), - parserOptions: { - sourceType: "module", - project: path.join(__dirname, "./tsconfig.json"), - }, -}; +const typescriptParser = "@typescript-eslint/parser"; +const babelParser = "babel-eslint"; +const espreeParser = "espree"; -export const es9: Linter.Config = { - parser: require.resolve("babel-eslint"), - parserOptions: { - ecmaVersion: 9, - }, -}; +export const configs = { + typescript: { + parser: require.resolve(typescriptParser), + parserOptions: { + sourceType: "module", + project: path.join(__dirname, "./test-tsconfig.json"), + }, + } as Linter.Config, -export const es8: Linter.Config = { - parser: require.resolve("babel-eslint"), - parserOptions: { - ecmaVersion: 8, - }, -}; + es11: { + parser: require.resolve(babelParser), + parserOptions: { + ecmaVersion: 9, + }, + } as Linter.Config, -export const es7: Linter.Config = { - parser: require.resolve("babel-eslint"), - parserOptions: { - ecmaVersion: 7, - }, -}; + es10: { + parser: require.resolve(babelParser), + parserOptions: { + ecmaVersion: 9, + }, + } as Linter.Config, -export const es6: Linter.Config = { - parser: require.resolve("babel-eslint"), - parserOptions: { - ecmaVersion: 6, - }, -}; + es9: { + parser: require.resolve(babelParser), + parserOptions: { + ecmaVersion: 9, + }, + } as Linter.Config, -export const es5: Linter.Config = { - parser: require.resolve("espree"), - parserOptions: { - ecmaVersion: 5, - }, -}; + es8: { + parser: require.resolve(babelParser), + parserOptions: { + ecmaVersion: 8, + }, + } as Linter.Config, + + es7: { + parser: require.resolve(babelParser), + parserOptions: { + ecmaVersion: 7, + }, + } as Linter.Config, + + es6: { + parser: require.resolve(babelParser), + parserOptions: { + ecmaVersion: 6, + }, + } as Linter.Config, + + es5: { + parser: require.resolve(espreeParser), + parserOptions: { + ecmaVersion: 5, + }, + } as Linter.Config, -export const es3: Linter.Config = { - parser: require.resolve("espree"), - parserOptions: { - ecmaVersion: 3, - }, + es3: { + parser: require.resolve(espreeParser), + parserOptions: { + ecmaVersion: 3, + }, + } as Linter.Config, }; diff --git a/tests/helpers/tsconfig.json b/tests/helpers/test-tsconfig.json similarity index 100% rename from tests/helpers/tsconfig.json rename to tests/helpers/test-tsconfig.json diff --git a/tests/helpers/testers.ts b/tests/helpers/testers.ts new file mode 100644 index 000000000..5ae18d45a --- /dev/null +++ b/tests/helpers/testers.ts @@ -0,0 +1,66 @@ +import test from "ava"; +// eslint-disable-next-line ava/use-test +import type { Implementation } from "ava"; +import type { Rule } from "eslint"; +import RuleTester from "eslint-ava-rule-tester"; + +import { configs } from "./configs"; +import { + processInvalidTestCase, + processValidTestCase, + isTsInstalled, +} from "./util"; +import type { ValidTestCase, InvalidTestCase } from "./util"; + +type TestFunction = ( + ruleName: string, + rule: Rule.RuleModule, + tests: { + readonly valid: ReadonlyArray; + readonly invalid: ReadonlyArray; + } +) => void; + +const testNames = new Map(); + +/** + * A wrapper function to wrap a given ava test function and issue a unique title + * is given to each rule. + */ +export function testWrapper( + avaTest: (title: string, callback: Implementation) => void +) { + return (title: string, callback: Implementation) => { + const count = (testNames.get(title) ?? 0) + 1; + testNames.set(title, count); + avaTest(`v${count} - ${title}`, callback); + }; +} + +export const testUsing = [...Object.entries(configs)] + .map( + ([configName, config]) => + [ + configName, + ((ruleName, rule, { valid, invalid }) => { + const ruleTester = new RuleTester( + testWrapper( + configName === "typescript" && !isTsInstalled() ? test.skip : test + ), + config + ); + + ruleTester.run(ruleName, rule, { + valid: processValidTestCase(valid), + invalid: processInvalidTestCase(invalid), + }); + }) as TestFunction, + ] as const + ) + .reduce( + (carry, [configName, fn]) => ({ + ...carry, + [configName]: fn, + }), + {} + ) as Record; diff --git a/tests/helpers/util.ts b/tests/helpers/util.ts index 24e4f646a..8f42edcdb 100644 --- a/tests/helpers/util.ts +++ b/tests/helpers/util.ts @@ -1,8 +1,9 @@ -import { TSESLint } from "@typescript-eslint/experimental-utils"; -import { Rule, RuleTester as ESLintRuleTester } from "eslint"; -import { filename } from "./configs"; +import type { TSESLint } from "@typescript-eslint/experimental-utils"; +import type { Rule, RuleTester as ESLintRuleTester } from "eslint"; + +import ts from "~/conditional-imports/typescript"; -import ts from "../../src/util/conditional-imports/typescript"; +import { filename } from "./configs"; type OptionsSet = { /** @@ -83,7 +84,7 @@ export function createDummyRule( export type RuleTesterTests = { // eslint-disable-next-line functional/prefer-readonly-type - valid?: Array; + valid?: Array; // eslint-disable-next-line functional/prefer-readonly-type invalid?: Array; }; @@ -109,11 +110,6 @@ export function addFilename( /** * Returns whether or not TypeScript is installed locally. */ -export function tsInstalled(): boolean { +export function isTsInstalled(): boolean { return ts !== undefined; } - -/** - * Jest `describe` function that won't run if TypeScript isn't present. - */ -export const describeTsOnly = tsInstalled() ? describe : describe.skip; diff --git a/tests/index.test.ts b/tests/index.test.ts index 3cb2b2794..48e0ce125 100644 --- a/tests/index.test.ts +++ b/tests/index.test.ts @@ -2,28 +2,31 @@ * @file Tests the index file. */ -import plugin from "../src/index"; - +import test from "ava"; import { readdirSync } from "fs"; -describe("plugin", () => { - const ruleFiles: ReadonlyArray = readdirSync("./src/rules").filter( - (file) => file !== "index.ts" && file.endsWith(".ts") - ); +import plugin from "~/index"; + +const ruleFiles: ReadonlyArray = readdirSync("./src/rules").filter( + (file) => file !== "index.ts" && file.endsWith(".ts") +); - const configFiles: ReadonlyArray = readdirSync( - "./src/configs" - ).filter((file) => file !== "index.ts" && file.endsWith(".ts")); +const configFiles: ReadonlyArray = readdirSync("./src/configs").filter( + (file) => file !== "index.ts" && file.endsWith(".ts") +); - it("should have all the rules", () => { - expect.assertions(2); - expect(plugin).toHaveProperty("rules"); - expect(Object.keys(plugin.rules)).toHaveLength(ruleFiles.length); - }); +test("should have all the rules", (t) => { + t.true( + Object.prototype.hasOwnProperty.call(plugin, "rules"), + 'The plugin\'s config object should have a "rules" property.' + ); + t.assert(Object.keys(plugin.rules).length === ruleFiles.length); +}); - it("should have all the configs", () => { - expect.assertions(2); - expect(plugin).toHaveProperty("configs"); - expect(Object.keys(plugin.configs)).toHaveLength(configFiles.length + 1); - }); +test("should have all the configs", (t) => { + t.true( + Object.prototype.hasOwnProperty.call(plugin, "configs"), + 'The plugin\'s config object should have a "configs" property.' + ); + t.assert(Object.keys(plugin.configs).length === configFiles.length); }); diff --git a/tests/rules/functional-parameters.test.ts b/tests/rules/functional-parameters.test.ts deleted file mode 100644 index 6242298e3..000000000 --- a/tests/rules/functional-parameters.test.ts +++ /dev/null @@ -1,235 +0,0 @@ -/** - * @file Tests for functional-parameters. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/functional-parameters"; - -import { es3, es6, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const es3Valid: ReadonlyArray = [ - { - code: dedent` - var foo = { - arguments: 2 - }; - foo.arguments = 3`, - optionsSet: [[]], - }, - { - code: dedent` - (function() { - console.log("hello world"); - })();`, - optionsSet: [[]], - }, - { - code: dedent` - function foo(bar) { - console.log(bar); - }`, - optionsSet: [ - [{ enforceParameterCount: "atLeastOne" }], - [{ enforceParameterCount: "exactlyOne" }], - ], - }, - { - code: dedent` - function foo(bar, baz) { - console.log(bar, baz); - }`, - optionsSet: [ - [{ enforceParameterCount: "atLeastOne" }], - [{ ignorePattern: "^foo", enforceParameterCount: "exactlyOne" }], - ], - }, -]; - -// Invalid test cases. -const es3Invalid: ReadonlyArray = [ - { - code: dedent` - function foo() { - console.log("hello world"); - }`, - optionsSet: [[]], - errors: [ - { - messageId: "paramCountAtLeastOne", - type: "FunctionDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - (function() { - console.log("hello world"); - })();`, - optionsSet: [[{ enforceParameterCount: { ignoreIIFE: false } }]], - errors: [ - { - messageId: "paramCountAtLeastOne", - type: "FunctionExpression", - line: 1, - column: 2, - }, - ], - }, - { - code: dedent` - function foo(bar) { - console.log(arguments); - }`, - optionsSet: [[]], - errors: [ - { - messageId: "arguments", - type: "Identifier", - line: 2, - column: 15, - }, - ], - }, - { - code: dedent` - function foo() { - console.log("bar"); - }`, - optionsSet: [[{ enforceParameterCount: "atLeastOne" }]], - errors: [ - { - messageId: "paramCountAtLeastOne", - type: "FunctionDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - function foo() { - console.log("bar"); - }`, - optionsSet: [[{ enforceParameterCount: "exactlyOne" }]], - errors: [ - { - messageId: "paramCountExactlyOne", - type: "FunctionDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - function foo(bar, baz) { - console.log(bar, baz); - }`, - optionsSet: [[{ enforceParameterCount: "exactlyOne" }]], - errors: [ - { - messageId: "paramCountExactlyOne", - type: "FunctionDeclaration", - line: 1, - column: 1, - }, - ], - }, -]; - -// Valid test cases. -const es6Valid: ReadonlyArray = [ - ...es3Valid, - { - code: dedent` - (() => { - console.log("hello world"); - })();`, - optionsSet: [[]], - }, - { - code: dedent` - function foo([bar, ...baz]) { - console.log(bar, baz); - }`, - optionsSet: [[]], - }, - { - code: dedent` - function foo(...bar) { - console.log(bar); - }`, - optionsSet: [[{ ignorePattern: "^foo" }]], - }, -]; - -// Invalid test cases. -const es6Invalid: ReadonlyArray = [ - ...es3Invalid, - { - code: dedent` - (() => { - console.log("hello world"); - })();`, - optionsSet: [[{ enforceParameterCount: { ignoreIIFE: false } }]], - errors: [ - { - messageId: "paramCountAtLeastOne", - type: "ArrowFunctionExpression", - line: 1, - column: 2, - }, - ], - }, - { - code: dedent` - function foo(...bar) { - console.log(bar); - }`, - optionsSet: [[]], - errors: [ - { - messageId: "restParam", - type: "RestElement", - line: 1, - column: 14, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(es6Valid), - invalid: processInvalidTestCase(es6Invalid), - }); -}); - -describe("JavaScript (es6)", () => { - const ruleTester = new RuleTester(es6); - ruleTester.run(name, rule, { - valid: processValidTestCase(es6Valid), - invalid: processInvalidTestCase(es6Invalid), - }); -}); - -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase(es3Valid), - invalid: processInvalidTestCase(es3Invalid), - }); -}); diff --git a/tests/rules/functional-parameters/es3/index.ts b/tests/rules/functional-parameters/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/functional-parameters/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/functional-parameters/es3/invalid.ts b/tests/rules/functional-parameters/es3/invalid.ts new file mode 100644 index 000000000..454a7eda4 --- /dev/null +++ b/tests/rules/functional-parameters/es3/invalid.ts @@ -0,0 +1,98 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + function foo() { + console.log("hello world"); + }`, + optionsSet: [[]], + errors: [ + { + messageId: "paramCountAtLeastOne", + type: "FunctionDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: dedent` + (function() { + console.log("hello world"); + })();`, + optionsSet: [[{ enforceParameterCount: { ignoreIIFE: false } }]], + errors: [ + { + messageId: "paramCountAtLeastOne", + type: "FunctionExpression", + line: 1, + column: 2, + }, + ], + }, + { + code: dedent` + function foo(bar) { + console.log(arguments); + }`, + optionsSet: [[]], + errors: [ + { + messageId: "arguments", + type: "Identifier", + line: 2, + column: 15, + }, + ], + }, + { + code: dedent` + function foo() { + console.log("bar"); + }`, + optionsSet: [[{ enforceParameterCount: "atLeastOne" }]], + errors: [ + { + messageId: "paramCountAtLeastOne", + type: "FunctionDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: dedent` + function foo() { + console.log("bar"); + }`, + optionsSet: [[{ enforceParameterCount: "exactlyOne" }]], + errors: [ + { + messageId: "paramCountExactlyOne", + type: "FunctionDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: dedent` + function foo(bar, baz) { + console.log(bar, baz); + }`, + optionsSet: [[{ enforceParameterCount: "exactlyOne" }]], + errors: [ + { + messageId: "paramCountExactlyOne", + type: "FunctionDeclaration", + line: 1, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/functional-parameters/es3/valid.ts b/tests/rules/functional-parameters/es3/valid.ts new file mode 100644 index 000000000..9054c1e9c --- /dev/null +++ b/tests/rules/functional-parameters/es3/valid.ts @@ -0,0 +1,43 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + var foo = { + arguments: 2 + }; + foo.arguments = 3`, + optionsSet: [[]], + }, + { + code: dedent` + (function() { + console.log("hello world"); + })();`, + optionsSet: [[]], + }, + { + code: dedent` + function foo(bar) { + console.log(bar); + }`, + optionsSet: [ + [{ enforceParameterCount: "atLeastOne" }], + [{ enforceParameterCount: "exactlyOne" }], + ], + }, + { + code: dedent` + function foo(bar, baz) { + console.log(bar, baz); + }`, + optionsSet: [ + [{ enforceParameterCount: "atLeastOne" }], + [{ ignorePattern: "^foo", enforceParameterCount: "exactlyOne" }], + ], + }, +]; + +export default tests; diff --git a/tests/rules/functional-parameters/es6/index.ts b/tests/rules/functional-parameters/es6/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/functional-parameters/es6/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/functional-parameters/es6/invalid.ts b/tests/rules/functional-parameters/es6/invalid.ts new file mode 100644 index 000000000..79905a7c9 --- /dev/null +++ b/tests/rules/functional-parameters/es6/invalid.ts @@ -0,0 +1,38 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + (() => { + console.log("hello world"); + })();`, + optionsSet: [[{ enforceParameterCount: { ignoreIIFE: false } }]], + errors: [ + { + messageId: "paramCountAtLeastOne", + type: "ArrowFunctionExpression", + line: 1, + column: 2, + }, + ], + }, + { + code: dedent` + function foo(...bar) { + console.log(bar); + }`, + optionsSet: [[]], + errors: [ + { + messageId: "restParam", + type: "RestElement", + line: 1, + column: 14, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/functional-parameters/es6/valid.ts b/tests/rules/functional-parameters/es6/valid.ts new file mode 100644 index 000000000..536fc528f --- /dev/null +++ b/tests/rules/functional-parameters/es6/valid.ts @@ -0,0 +1,29 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + (() => { + console.log("hello world"); + })();`, + optionsSet: [[]], + }, + { + code: dedent` + function foo([bar, ...baz]) { + console.log(bar, baz); + }`, + optionsSet: [[]], + }, + { + code: dedent` + function foo(...bar) { + console.log(bar); + }`, + optionsSet: [[{ ignorePattern: "^foo" }]], + }, +]; + +export default tests; diff --git a/tests/rules/functional-parameters/index.test.ts b/tests/rules/functional-parameters/index.test.ts new file mode 100644 index 000000000..3e2c72b0e --- /dev/null +++ b/tests/rules/functional-parameters/index.test.ts @@ -0,0 +1,11 @@ +import { name, rule } from "~/rules/functional-parameters"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; +import es6Tests from "./es6"; + +testUsing.typescript(name, rule, es6Tests); +testUsing.typescript(name, rule, es3Tests); + +testUsing.es6(name, rule, es6Tests); +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/immutable-data.test.ts b/tests/rules/immutable-data.test.ts deleted file mode 100644 index c5f4ce8ad..000000000 --- a/tests/rules/immutable-data.test.ts +++ /dev/null @@ -1,1358 +0,0 @@ -/** - * @file Tests for immutable-data. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/immutable-data"; - -import { es3, es6, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const objectES3Valid: ReadonlyArray = [ - // Allowed non-object mutation patterns. - { - code: dedent` - var y = x.a; - var z = x["a"]; - if (x.a && y.a) {} - var w = ~x.a; - if (!x.a) {}`, - optionsSet: [[]], - }, - // Allow Object.assign() on non identifiers. - { - code: dedent` - var x = { msg1: "hello", obj: { a: 1, b: 2}, func: function() {} }; - var bar = function(a, b, c) { return { a: a, b: b, c: c }; }; - - var a = Object.assign({}, { msg: "hello world" }); - var b = Object.assign(bar(1, 2, 3), { d: 4 }); - var c = Object.assign(x.func(), { d: 4 });`, - optionsSet: [[]], - }, - // IgnorePattern - objects. - { - code: dedent` - var mutableVar = { a: 1 }; - delete mutableVar.a;`, - optionsSet: [[{ ignorePattern: ["^mutable"] }]], - }, - { - code: dedent` - var mutableVar = { a: 1 }; - Object.assign(mutableVar, { b: 2 });`, - optionsSet: [[{ ignorePattern: ["^mutable"] }]], - }, - // IgnoreAccessorPattern - objects. - { - code: dedent` - var mutableVar = { a: 1 }; - mutableVar.a = 0; - mutableVar.a++;`, - optionsSet: [ - [{ ignoreAccessorPattern: ["**.mutable*.a"] }], - [{ ignoreAccessorPattern: ["**.mutable*.*"] }], - [{ ignoreAccessorPattern: ["**.mutable*.*.**"] }], - [{ ignoreAccessorPattern: ["**.mutable*.**"] }], - ], - }, -]; - -// Invalid test cases. -const objectES3Invalid: ReadonlyArray = [ - // Disallowed object mutation patterns. - { - code: dedent` - var x = {a: 1}; - x.foo = "bar"; - x["foo"] = "bar"; - x.a += 1; - x.a -= 1; - x.a *= 1; - x.a /= 1; - x.a %= 1; - x.a <<= 1; - x.a >>= 1; - x.a >>>= 1; - x.a &= 1; - x.a |= 1; - x.a ^= 1; - delete x.a; - delete x["a"]; - x.a++; - x.a--; - ++x.a; - --x.a; - if (x.a = 2) {} - if (x.a++) {}`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 2, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 5, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 6, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 7, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 8, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 9, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 10, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 11, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 12, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 13, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 14, - column: 1, - }, - { - messageId: "generic", - type: "UnaryExpression", - line: 15, - column: 1, - }, - { - messageId: "generic", - type: "UnaryExpression", - line: 16, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 17, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 18, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 19, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 20, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 21, - column: 5, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 22, - column: 5, - }, - ], - }, - // Disallow Object.assign on identifers. - { - code: dedent` - var x = { msg1: "hello", obj: { a: 1, b: 2} }; - - var a = Object.assign(x, { msg2: "world" }); - var b = Object.assign(x.obj, { msg2: "world" });`, - optionsSet: [[]], - errors: [ - { - messageId: "object", - type: "CallExpression", - line: 3, - column: 9, - }, - { - messageId: "object", - type: "CallExpression", - line: 4, - column: 9, - }, - ], - }, - // Disallow other object mutation methods. - { - code: dedent` - var foo = { a: 1 }; - Object.defineProperties(foo, { b: { value: 2, writable: false }}); - Object.defineProperty(foo, "c", { value: 3, writable: false }); - Object.setPrototypeOf(foo, null);`, - optionsSet: [[{ assumeTypes: true }]], - errors: [ - { - messageId: "object", - type: "CallExpression", - line: 2, - column: 1, - }, - { - messageId: "object", - type: "CallExpression", - line: 3, - column: 1, - }, - { - messageId: "object", - type: "CallExpression", - line: 4, - column: 1, - }, - ], - }, -]; - -/** - * Valid tests that only apply to es6 and above. - */ -const objectES6Valid: ReadonlyArray = [ - ...objectES3Valid, - // Allow initialization of class members in constructor - { - code: dedent` - class Klass { - bar = 1; - baz: string; - constructor() { - this.baz = "hello"; - } - }`, - optionsSet: [[]], - }, - // IgnoreAccessorPattern - classes. - { - code: dedent` - class Klass { - mutate() { - this.mutableField = 0; - } - }`, - optionsSet: [ - [{ ignoreAccessorPattern: ["this.*.**"] }], - [{ ignoreAccessorPattern: ["**.mutable*"] }], - [{ ignoreAccessorPattern: ["**.mutable*.**"] }], - ], - }, - // Ignore class - { - code: dedent` - class Klass { - baz: string; - mutate() { - this.baz = "hello"; - } - }`, - optionsSet: [[{ ignoreClass: true }], [{ ignoreClass: "fieldsOnly" }]], - }, -]; - -/** - * Invalid tests that only apply to es6 and above. - */ -const objectES6Invalid: ReadonlyArray = [ - ...objectES3Invalid, - { - code: dedent` - const x = {a: 1}; - x.a **= 1;`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 2, - column: 1, - }, - ], - }, - // No mutation in class methods. - { - code: dedent` - class Klass { - bar = 1; - baz: string; - - constructor() { - this.baz = "hello"; - } - - zoo() { - this.bar = 2; - this.baz = 3; - } - }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 10, - column: 5, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 11, - column: 5, - }, - ], - }, - // Catch non-field mutation in classes. - { - code: dedent` - class Klass { - mutate() { - let data = { prop: 0 }; - data.prop = 1; - } - }`, - optionsSet: [[{ ignoreClass: "fieldsOnly" }]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 5, - }, - ], - }, -]; - -const arrayES3Valid: ReadonlyArray = [ - // Allowed non-array mutation patterns. - { - code: dedent` - var foo = function () {}; - var bar = { - x: 1, - y: foo - }; - var x = 0; - x = 4; - x += 1; - x -= 1; - x++; - x--; - ++x; - --x; - if (x = 2) {} - if (x++) {}`, - optionsSet: [[]], - }, - // Allow array non-mutation methods - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - - x.concat([3, 4]); - x.includes(2); - x.indexOf(1); - x.join(', '); - x.lastIndexOf(0); - x.slice(1, 2); - x.toString(); - x.toLocaleString("en", {timeZone: "UTC"}); - - y[0].z.concat([3, 4]); - y[0].z.includes(2); - y[0].z.indexOf(1); - y[0].z.join(', '); - y[0].z.lastIndexOf(0); - y[0].z.slice(1, 2); - y[0].z.toString(); - y[0].z.toLocaleString("en", {timeZone: "UTC"});`, - optionsSet: [[]], - }, - // Allowed array mutation methods to be chained to the creation of an array. - { - code: dedent` - [0, 1, 2].copyWithin(0, 1, 2); - [0, 1, 2].fill(3); - [0, 1, 2].pop(); - [0, 1, 2].push(3); - [0, 1, 2].reverse(); - [0, 1, 2].shift(); - [0, 1, 2].sort(); - [0, 1, 2].splice(0, 1, 9); - [0, 1, 2].unshift(6); - - new Array(5).copyWithin(0, 1, 2); - new Array(5).fill(3); - new Array(5).pop(); - new Array(5).push(3); - new Array(5).reverse(); - new Array(5).shift(); - new Array(5).sort(); - new Array(5).splice(0, 1, 9); - new Array(5).unshift(6);`, - optionsSet: [[]], - }, - // Allowed array mutation methods to be chained to array constructor functions. - { - code: dedent` - Array.of(0, 1, 2).copyWithin(0, 1, 2); - Array.of(0, 1, 2).fill(3); - Array.of(0, 1, 2).pop(); - Array.of(0, 1, 2).push(3); - Array.of(0, 1, 2).reverse(); - Array.of(0, 1, 2).shift(); - Array.of(0, 1, 2).sort(); - Array.of(0, 1, 2).splice(0, 1, 9); - Array.of(0, 1, 2).unshift(6); - - Array.from({ length: 10 }).copyWithin(0, 1, 2); - Array.from({ length: 10 }).fill(3); - Array.from({ length: 10 }).pop(); - Array.from({ length: 10 }).push(3); - Array.from({ length: 10 }).reverse(); - Array.from({ length: 10 }).shift(); - Array.from({ length: 10 }).sort(); - Array.from({ length: 10 }).splice(0, 1, 9); - Array.from({ length: 10 }).unshift(6);`, - optionsSet: [[]], - }, - // Allowed array mutation methods to be chained to array accessor/iteration methods. - { - code: dedent` - x.slice().copyWithin(0, 1, 2); - x.slice().fill(3); - x.slice().pop(); - x.slice().push(3); - x.slice().reverse(); - x.slice().shift(); - x.slice().sort(); - x.slice().splice(0, 1, 9); - x.slice().unshift(6); - - x.concat([1, 2, 3]).copyWithin(0, 1, 2); - x.concat([1, 2, 3]).fill(3); - x.concat([1, 2, 3]).pop(); - x.concat([1, 2, 3]).push(3); - x.concat([1, 2, 3]).reverse(); - x.concat([1, 2, 3]).shift(); - x.concat([1, 2, 3]).sort(); - x.concat([1, 2, 3]).splice(0, 1, 9); - x.concat([1, 2, 3]).unshift(6); - - x.filter(function (v) { return v > 1; }).copyWithin(0, 1, 2); - x.filter(function (v) { return v > 1; }).fill(3); - x.filter(function (v) { return v > 1; }).pop(); - x.filter(function (v) { return v > 1; }).push(3); - x.filter(function (v) { return v > 1; }).reverse(); - x.filter(function (v) { return v > 1; }).shift(); - x.filter(function (v) { return v > 1; }).sort(); - x.filter(function (v) { return v > 1; }).splice(0, 1, 9); - x.filter(function (v) { return v > 1; }).unshift(6); - - x.map(function (v) { return v * 2; }).copyWithin(0, 1, 2); - x.map(function (v) { return v * 2; }).fill(3); - x.map(function (v) { return v * 2; }).pop(); - x.map(function (v) { return v * 2; }).push(3); - x.map(function (v) { return v * 2; }).reverse(); - x.map(function (v) { return v * 2; }).shift(); - x.map(function (v) { return v * 2; }).sort(); - x.map(function (v) { return v * 2; }).splice(0, 1, 9); - x.map(function (v) { return v * 2; }).unshift(6); - - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).copyWithin(0, 1, 2); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).fill(3); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).pop(); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).push(3); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).reverse(); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).shift(); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).sort(); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).splice(0, 1, 9); - x.reduce(function (r, v) { return r.concat([v + 1]); }, []).unshift(6); - - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).copyWithin(0, 1, 2); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).fill(3); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).pop(); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).push(3); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).reverse(); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).shift(); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).sort(); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).splice(0, 1, 9); - x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).unshift(6);`, - optionsSet: [[]], - }, - // Don't catch calls of array mutation methods on non-array objects. - { - code: dedent` - var z = { - copyWithin: function () {}, - fill: function () {}, - pop: function () {}, - push: function () {}, - reverse: function () {}, - shift: function () {}, - sort: function () {}, - splice: function () {}, - unshift: function () {} - }; - - z.copyWithin(); - z.fill(); - z.pop(); - z.push(); - z.reverse(); - z.shift(); - z.sort(); - z.splice(); - z.unshift();`, - optionsSet: [[{ assumeTypes: false }]], - }, - { - code: dedent` - var mutableX = [0, 1]; - mutableX.copyWithin(0, 1, 2); - mutableX.fill(3); - mutableX.pop(); - mutableX.push(3); - mutableX.reverse(); - mutableX.shift(); - mutableX.sort(); - mutableX.splice(0, 1, 9); - mutableX.unshift(6);`, - optionsSet: [ - [{ ignorePattern: "^mutable" }], - [{ ignoreAccessorPattern: "mutable*" }], - ], - }, -]; - -const arrayES3Invalid: ReadonlyArray = [ - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - x[0] = 4; - y[0].z[0] = 4; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - x[0] += 1; - y[0].z[0] += 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - x[0] -= 1; - y[0].z[0] -= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - delete x[0]; - delete y[0].z[0]; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "UnaryExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "UnaryExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - x[0]++; - y[0].z[0]++; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "UpdateExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - x[0]--; - y[0].z[0]--; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "UpdateExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - ++x[0]; - ++y[0].z[0]; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "UpdateExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - --x[0]; - --y[0].z[0]; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "UpdateExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - if (x[0] = 2) {} - if (y[0].z[0] = 2) {} - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 5, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 5, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - if (x[0]++) {} - if (y[0].z[0]++) {} - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "UpdateExpression", - line: 3, - column: 5, - }, - { - messageId: "generic", - type: "UpdateExpression", - line: 4, - column: 5, - }, - ], - }, - { - code: dedent` - var x = [5, 6]; - var y = [{ z: [3, 7] }]; - x.length = 5; - y[0].z.length = 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - // Disallowed array mutation methods. - { - code: dedent` - var x = [5, 6]; - x.copyWithin(0, 1, 2); - x.fill(3); - x.pop(); - x.push(3); - x.reverse(); - x.shift(); - x.sort(); - x.splice(0, 1, 9); - x.unshift(6); - var y = [{ z: [3, 7] }]; - y[0].z.copyWithin(0, 1, 2); - y[0].z.fill(3); - y[0].z.pop(); - y[0].z.push(3); - y[0].z.reverse(); - y[0].z.shift(); - y[0].z.sort(); - y[0].z.splice(0, 1, 9); - y[0].z.unshift(6);`, - optionsSet: [[{ assumeTypes: true }]], - errors: [ - { - messageId: "array", - type: "CallExpression", - line: 2, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 3, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 4, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 5, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 6, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 7, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 8, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 9, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 10, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 12, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 13, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 14, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 15, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 16, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 17, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 18, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 19, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 20, - column: 1, - }, - ], - }, - // Disallowed array mutation methods to be chained to the creation of an array - // if `ignoreImmediateMutation` is false. - { - code: dedent` - [0, 1, 2].copyWithin(0, 1, 2); - [0, 1, 2].fill(3); - [0, 1, 2].pop(); - [0, 1, 2].push(3); - [0, 1, 2].reverse(); - [0, 1, 2].shift(); - [0, 1, 2].sort(); - [0, 1, 2].splice(0, 1, 9); - [0, 1, 2].unshift(6)`, - optionsSet: [[{ ignoreImmediateMutation: false }]], - errors: [ - { - messageId: "array", - type: "CallExpression", - line: 1, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 2, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 3, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 4, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 5, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 6, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 7, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 8, - column: 1, - }, - { - messageId: "array", - type: "CallExpression", - line: 9, - column: 1, - }, - ], - }, -]; - -// Valid test cases. -const arrayES6Valid: ReadonlyArray = [ - ...arrayES3Valid, // Allowed non-array mutation patterns. - { - code: dedent` - const x = 0; - x *= 1; - x **= 1; - x /= 1; - x %= 1; - x <<= 1; - x >>= 1; - x >>>= 1; - x &= 1; - x |= 1; - x ^= 1;`, - optionsSet: [[]], - }, -]; - -// Invalid test cases. -const arrayES6Invalid: ReadonlyArray = [ - ...arrayES3Invalid, - - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] *= 2; - y[0].z[0] *= 2; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] **= 2; - y[0].z[0] **= 2; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] /= 1; - y[0].z[0] /= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] %= 1; - y[0].z[0] %= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] <<= 1; - y[0].z[0] <<= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] >>= 1; - y[0].z[0] >>= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] >>>= 1; - y[0].z[0] >>>= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] &= 1; - y[0].z[0] &= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] |= 1; - y[0].z[0] |= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, - { - code: dedent` - const x = [5, 6]; - const y = [{ z: [3, 7] }]; - x[0] ^= 1; - y[0].z[0] ^= 1; - `, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "AssignmentExpression", - line: 3, - column: 1, - }, - { - messageId: "generic", - type: "AssignmentExpression", - line: 4, - column: 1, - }, - ], - }, -]; - -const es3Valid: ReadonlyArray = [ - ...objectES3Valid, - ...arrayES3Valid, -]; -const es3Invalid: ReadonlyArray = [ - ...objectES3Invalid, - ...arrayES3Invalid, -]; - -const es6Valid: ReadonlyArray = [ - ...objectES6Valid, - ...arrayES6Valid, -]; -const es6Invalid: ReadonlyArray = [ - ...objectES6Invalid, - ...arrayES6Invalid, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(es6Valid), - invalid: processInvalidTestCase(es6Invalid), - }); -}); - -describe("JavaScript (es6)", () => { - const ruleTester = new RuleTester(es6); - ruleTester.run(name, rule, { - valid: processValidTestCase(es6Valid), - invalid: processInvalidTestCase(es6Invalid), - }); -}); - -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase(es3Valid), - invalid: processInvalidTestCase(es3Invalid), - }); -}); diff --git a/tests/rules/immutable-data/es3/array/index.ts b/tests/rules/immutable-data/es3/array/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/immutable-data/es3/array/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/immutable-data/es3/array/invalid.ts b/tests/rules/immutable-data/es3/array/invalid.ts new file mode 100644 index 000000000..6a04079f7 --- /dev/null +++ b/tests/rules/immutable-data/es3/array/invalid.ts @@ -0,0 +1,467 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + x[0] = 4; + y[0].z[0] = 4; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + x[0] += 1; + y[0].z[0] += 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + x[0] -= 1; + y[0].z[0] -= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + delete x[0]; + delete y[0].z[0]; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "UnaryExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "UnaryExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + x[0]++; + y[0].z[0]++; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "UpdateExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + x[0]--; + y[0].z[0]--; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "UpdateExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + ++x[0]; + ++y[0].z[0]; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "UpdateExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + --x[0]; + --y[0].z[0]; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "UpdateExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + if (x[0] = 2) {} + if (y[0].z[0] = 2) {} + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 5, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 5, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + if (x[0]++) {} + if (y[0].z[0]++) {} + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "UpdateExpression", + line: 3, + column: 5, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 4, + column: 5, + }, + ], + }, + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + x.length = 5; + y[0].z.length = 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + // Disallowed array mutation methods. + { + code: dedent` + var x = [5, 6]; + x.copyWithin(0, 1, 2); + x.fill(3); + x.pop(); + x.push(3); + x.reverse(); + x.shift(); + x.sort(); + x.splice(0, 1, 9); + x.unshift(6); + var y = [{ z: [3, 7] }]; + y[0].z.copyWithin(0, 1, 2); + y[0].z.fill(3); + y[0].z.pop(); + y[0].z.push(3); + y[0].z.reverse(); + y[0].z.shift(); + y[0].z.sort(); + y[0].z.splice(0, 1, 9); + y[0].z.unshift(6);`, + optionsSet: [[{ assumeTypes: true }]], + errors: [ + { + messageId: "array", + type: "CallExpression", + line: 2, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 3, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 4, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 5, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 6, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 7, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 8, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 9, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 10, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 12, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 13, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 14, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 15, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 16, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 17, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 18, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 19, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 20, + column: 1, + }, + ], + }, + // Disallowed array mutation methods to be chained to the creation of an array + // if `ignoreImmediateMutation` is false. + { + code: dedent` + [0, 1, 2].copyWithin(0, 1, 2); + [0, 1, 2].fill(3); + [0, 1, 2].pop(); + [0, 1, 2].push(3); + [0, 1, 2].reverse(); + [0, 1, 2].shift(); + [0, 1, 2].sort(); + [0, 1, 2].splice(0, 1, 9); + [0, 1, 2].unshift(6)`, + optionsSet: [[{ ignoreImmediateMutation: false }]], + errors: [ + { + messageId: "array", + type: "CallExpression", + line: 1, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 2, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 3, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 4, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 5, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 6, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 7, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 8, + column: 1, + }, + { + messageId: "array", + type: "CallExpression", + line: 9, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/es3/array/valid.ts b/tests/rules/immutable-data/es3/array/valid.ts new file mode 100644 index 000000000..cee76982c --- /dev/null +++ b/tests/rules/immutable-data/es3/array/valid.ts @@ -0,0 +1,208 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Allowed non-array mutation patterns. + { + code: dedent` + var foo = function () {}; + var bar = { + x: 1, + y: foo + }; + var x = 0; + x = 4; + x += 1; + x -= 1; + x++; + x--; + ++x; + --x; + if (x = 2) {} + if (x++) {}`, + optionsSet: [[]], + }, + // Allow array non-mutation methods + { + code: dedent` + var x = [5, 6]; + var y = [{ z: [3, 7] }]; + + x.concat([3, 4]); + x.includes(2); + x.indexOf(1); + x.join(', '); + x.lastIndexOf(0); + x.slice(1, 2); + x.toString(); + x.toLocaleString("en", {timeZone: "UTC"}); + + y[0].z.concat([3, 4]); + y[0].z.includes(2); + y[0].z.indexOf(1); + y[0].z.join(', '); + y[0].z.lastIndexOf(0); + y[0].z.slice(1, 2); + y[0].z.toString(); + y[0].z.toLocaleString("en", {timeZone: "UTC"});`, + optionsSet: [[]], + }, + // Allowed array mutation methods to be chained to the creation of an array. + { + code: dedent` + [0, 1, 2].copyWithin(0, 1, 2); + [0, 1, 2].fill(3); + [0, 1, 2].pop(); + [0, 1, 2].push(3); + [0, 1, 2].reverse(); + [0, 1, 2].shift(); + [0, 1, 2].sort(); + [0, 1, 2].splice(0, 1, 9); + [0, 1, 2].unshift(6); + + new Array(5).copyWithin(0, 1, 2); + new Array(5).fill(3); + new Array(5).pop(); + new Array(5).push(3); + new Array(5).reverse(); + new Array(5).shift(); + new Array(5).sort(); + new Array(5).splice(0, 1, 9); + new Array(5).unshift(6);`, + optionsSet: [[]], + }, + // Allowed array mutation methods to be chained to array constructor functions. + { + code: dedent` + Array.of(0, 1, 2).copyWithin(0, 1, 2); + Array.of(0, 1, 2).fill(3); + Array.of(0, 1, 2).pop(); + Array.of(0, 1, 2).push(3); + Array.of(0, 1, 2).reverse(); + Array.of(0, 1, 2).shift(); + Array.of(0, 1, 2).sort(); + Array.of(0, 1, 2).splice(0, 1, 9); + Array.of(0, 1, 2).unshift(6); + + Array.from({ length: 10 }).copyWithin(0, 1, 2); + Array.from({ length: 10 }).fill(3); + Array.from({ length: 10 }).pop(); + Array.from({ length: 10 }).push(3); + Array.from({ length: 10 }).reverse(); + Array.from({ length: 10 }).shift(); + Array.from({ length: 10 }).sort(); + Array.from({ length: 10 }).splice(0, 1, 9); + Array.from({ length: 10 }).unshift(6);`, + optionsSet: [[]], + }, + // Allowed array mutation methods to be chained to array accessor/iteration methods. + { + code: dedent` + x.slice().copyWithin(0, 1, 2); + x.slice().fill(3); + x.slice().pop(); + x.slice().push(3); + x.slice().reverse(); + x.slice().shift(); + x.slice().sort(); + x.slice().splice(0, 1, 9); + x.slice().unshift(6); + + x.concat([1, 2, 3]).copyWithin(0, 1, 2); + x.concat([1, 2, 3]).fill(3); + x.concat([1, 2, 3]).pop(); + x.concat([1, 2, 3]).push(3); + x.concat([1, 2, 3]).reverse(); + x.concat([1, 2, 3]).shift(); + x.concat([1, 2, 3]).sort(); + x.concat([1, 2, 3]).splice(0, 1, 9); + x.concat([1, 2, 3]).unshift(6); + + x.filter(function (v) { return v > 1; }).copyWithin(0, 1, 2); + x.filter(function (v) { return v > 1; }).fill(3); + x.filter(function (v) { return v > 1; }).pop(); + x.filter(function (v) { return v > 1; }).push(3); + x.filter(function (v) { return v > 1; }).reverse(); + x.filter(function (v) { return v > 1; }).shift(); + x.filter(function (v) { return v > 1; }).sort(); + x.filter(function (v) { return v > 1; }).splice(0, 1, 9); + x.filter(function (v) { return v > 1; }).unshift(6); + + x.map(function (v) { return v * 2; }).copyWithin(0, 1, 2); + x.map(function (v) { return v * 2; }).fill(3); + x.map(function (v) { return v * 2; }).pop(); + x.map(function (v) { return v * 2; }).push(3); + x.map(function (v) { return v * 2; }).reverse(); + x.map(function (v) { return v * 2; }).shift(); + x.map(function (v) { return v * 2; }).sort(); + x.map(function (v) { return v * 2; }).splice(0, 1, 9); + x.map(function (v) { return v * 2; }).unshift(6); + + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).copyWithin(0, 1, 2); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).fill(3); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).pop(); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).push(3); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).reverse(); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).shift(); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).sort(); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).splice(0, 1, 9); + x.reduce(function (r, v) { return r.concat([v + 1]); }, []).unshift(6); + + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).copyWithin(0, 1, 2); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).fill(3); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).pop(); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).push(3); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).reverse(); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).shift(); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).sort(); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).splice(0, 1, 9); + x.reduceRight(function (r, v) { return r.concat([v + 1]); }, []).unshift(6);`, + optionsSet: [[]], + }, + // Don't catch calls of array mutation methods on non-array objects. + { + code: dedent` + var z = { + copyWithin: function () {}, + fill: function () {}, + pop: function () {}, + push: function () {}, + reverse: function () {}, + shift: function () {}, + sort: function () {}, + splice: function () {}, + unshift: function () {} + }; + + z.copyWithin(); + z.fill(); + z.pop(); + z.push(); + z.reverse(); + z.shift(); + z.sort(); + z.splice(); + z.unshift();`, + optionsSet: [[{ assumeTypes: false }]], + }, + { + code: dedent` + var mutableX = [0, 1]; + mutableX.copyWithin(0, 1, 2); + mutableX.fill(3); + mutableX.pop(); + mutableX.push(3); + mutableX.reverse(); + mutableX.shift(); + mutableX.sort(); + mutableX.splice(0, 1, 9); + mutableX.unshift(6);`, + optionsSet: [ + [{ ignorePattern: "^mutable" }], + [{ ignoreAccessorPattern: "mutable*" }], + ], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/es3/index.ts b/tests/rules/immutable-data/es3/index.ts new file mode 100644 index 000000000..4cf7f63ee --- /dev/null +++ b/tests/rules/immutable-data/es3/index.ts @@ -0,0 +1,7 @@ +import array from "./array"; +import object from "./object"; + +export default { + valid: [...array.valid, ...object.valid], + invalid: [...array.invalid, ...object.invalid], +}; diff --git a/tests/rules/immutable-data/es3/object/index.ts b/tests/rules/immutable-data/es3/object/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/immutable-data/es3/object/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/immutable-data/es3/object/invalid.ts b/tests/rules/immutable-data/es3/object/invalid.ts new file mode 100644 index 000000000..54e3b877f --- /dev/null +++ b/tests/rules/immutable-data/es3/object/invalid.ts @@ -0,0 +1,215 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Disallowed object mutation patterns. + { + code: dedent` + var x = {a: 1}; + x.foo = "bar"; + x["foo"] = "bar"; + x.a += 1; + x.a -= 1; + x.a *= 1; + x.a /= 1; + x.a %= 1; + x.a <<= 1; + x.a >>= 1; + x.a >>>= 1; + x.a &= 1; + x.a |= 1; + x.a ^= 1; + delete x.a; + delete x["a"]; + x.a++; + x.a--; + ++x.a; + --x.a; + if (x.a = 2) {} + if (x.a++) {}`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 2, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 5, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 6, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 7, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 8, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 9, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 10, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 11, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 12, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 13, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 14, + column: 1, + }, + { + messageId: "generic", + type: "UnaryExpression", + line: 15, + column: 1, + }, + { + messageId: "generic", + type: "UnaryExpression", + line: 16, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 17, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 18, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 19, + column: 1, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 20, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 21, + column: 5, + }, + { + messageId: "generic", + type: "UpdateExpression", + line: 22, + column: 5, + }, + ], + }, + // Disallow Object.assign on identifers. + { + code: dedent` + var x = { msg1: "hello", obj: { a: 1, b: 2} }; + + var a = Object.assign(x, { msg2: "world" }); + var b = Object.assign(x.obj, { msg2: "world" });`, + optionsSet: [[]], + errors: [ + { + messageId: "object", + type: "CallExpression", + line: 3, + column: 9, + }, + { + messageId: "object", + type: "CallExpression", + line: 4, + column: 9, + }, + ], + }, + // Disallow other object mutation methods. + { + code: dedent` + var foo = { a: 1 }; + Object.defineProperties(foo, { b: { value: 2, writable: false }}); + Object.defineProperty(foo, "c", { value: 3, writable: false }); + Object.setPrototypeOf(foo, null);`, + optionsSet: [[{ assumeTypes: true }]], + errors: [ + { + messageId: "object", + type: "CallExpression", + line: 2, + column: 1, + }, + { + messageId: "object", + type: "CallExpression", + line: 3, + column: 1, + }, + { + messageId: "object", + type: "CallExpression", + line: 4, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/es3/object/valid.ts b/tests/rules/immutable-data/es3/object/valid.ts new file mode 100644 index 000000000..11cacac9d --- /dev/null +++ b/tests/rules/immutable-data/es3/object/valid.ts @@ -0,0 +1,55 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Allowed non-object mutation patterns. + { + code: dedent` + var y = x.a; + var z = x["a"]; + if (x.a && y.a) {} + var w = ~x.a; + if (!x.a) {}`, + optionsSet: [[]], + }, + // Allow Object.assign() on non identifiers. + { + code: dedent` + var x = { msg1: "hello", obj: { a: 1, b: 2}, func: function() {} }; + var bar = function(a, b, c) { return { a: a, b: b, c: c }; }; + + var a = Object.assign({}, { msg: "hello world" }); + var b = Object.assign(bar(1, 2, 3), { d: 4 }); + var c = Object.assign(x.func(), { d: 4 });`, + optionsSet: [[]], + }, + // IgnorePattern - objects. + { + code: dedent` + var mutableVar = { a: 1 }; + delete mutableVar.a;`, + optionsSet: [[{ ignorePattern: ["^mutable"] }]], + }, + { + code: dedent` + var mutableVar = { a: 1 }; + Object.assign(mutableVar, { b: 2 });`, + optionsSet: [[{ ignorePattern: ["^mutable"] }]], + }, + // IgnoreAccessorPattern - objects. + { + code: dedent` + var mutableVar = { a: 1 }; + mutableVar.a = 0; + mutableVar.a++;`, + optionsSet: [ + [{ ignoreAccessorPattern: ["**.mutable*.a"] }], + [{ ignoreAccessorPattern: ["**.mutable*.*"] }], + [{ ignoreAccessorPattern: ["**.mutable*.*.**"] }], + [{ ignoreAccessorPattern: ["**.mutable*.**"] }], + ], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/es6/array/index.ts b/tests/rules/immutable-data/es6/array/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/immutable-data/es6/array/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/immutable-data/es6/array/invalid.ts b/tests/rules/immutable-data/es6/array/invalid.ts new file mode 100644 index 000000000..f3589247b --- /dev/null +++ b/tests/rules/immutable-data/es6/array/invalid.ts @@ -0,0 +1,238 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] *= 2; + y[0].z[0] *= 2; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] **= 2; + y[0].z[0] **= 2; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] /= 1; + y[0].z[0] /= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] %= 1; + y[0].z[0] %= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] <<= 1; + y[0].z[0] <<= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] >>= 1; + y[0].z[0] >>= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] >>>= 1; + y[0].z[0] >>>= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] &= 1; + y[0].z[0] &= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] |= 1; + y[0].z[0] |= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, + { + code: dedent` + const x = [5, 6]; + const y = [{ z: [3, 7] }]; + x[0] ^= 1; + y[0].z[0] ^= 1; + `, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 3, + column: 1, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/es6/array/valid.ts b/tests/rules/immutable-data/es6/array/valid.ts new file mode 100644 index 000000000..70da95a95 --- /dev/null +++ b/tests/rules/immutable-data/es6/array/valid.ts @@ -0,0 +1,23 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + const x = 0; + x *= 1; + x **= 1; + x /= 1; + x %= 1; + x <<= 1; + x >>= 1; + x >>>= 1; + x &= 1; + x |= 1; + x ^= 1;`, + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/es6/index.ts b/tests/rules/immutable-data/es6/index.ts new file mode 100644 index 000000000..4cf7f63ee --- /dev/null +++ b/tests/rules/immutable-data/es6/index.ts @@ -0,0 +1,7 @@ +import array from "./array"; +import object from "./object"; + +export default { + valid: [...array.valid, ...object.valid], + invalid: [...array.invalid, ...object.invalid], +}; diff --git a/tests/rules/immutable-data/es6/object/index.ts b/tests/rules/immutable-data/es6/object/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/immutable-data/es6/object/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/immutable-data/es6/object/invalid.ts b/tests/rules/immutable-data/es6/object/invalid.ts new file mode 100644 index 000000000..de1ca3cc5 --- /dev/null +++ b/tests/rules/immutable-data/es6/object/invalid.ts @@ -0,0 +1,73 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + const x = {a: 1}; + x.a **= 1;`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 2, + column: 1, + }, + ], + }, + // No mutation in class methods. + { + code: dedent` + class Klass { + bar = 1; + baz: string; + + constructor() { + this.baz = "hello"; + } + + zoo() { + this.bar = 2; + this.baz = 3; + } + }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 10, + column: 5, + }, + { + messageId: "generic", + type: "AssignmentExpression", + line: 11, + column: 5, + }, + ], + }, + // Catch non-field mutation in classes. + { + code: dedent` + class Klass { + mutate() { + let data = { prop: 0 }; + data.prop = 1; + } + }`, + optionsSet: [[{ ignoreClass: "fieldsOnly" }]], + errors: [ + { + messageId: "generic", + type: "AssignmentExpression", + line: 4, + column: 5, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/es6/object/valid.ts b/tests/rules/immutable-data/es6/object/valid.ts new file mode 100644 index 000000000..ad776ffec --- /dev/null +++ b/tests/rules/immutable-data/es6/object/valid.ts @@ -0,0 +1,45 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Allow initialization of class members in constructor + { + code: dedent` + class Klass { + bar = 1; + baz: string; + constructor() { + this.baz = "hello"; + } + }`, + optionsSet: [[]], + }, + // IgnoreAccessorPattern - classes. + { + code: dedent` + class Klass { + mutate() { + this.mutableField = 0; + } + }`, + optionsSet: [ + [{ ignoreAccessorPattern: ["this.*.**"] }], + [{ ignoreAccessorPattern: ["**.mutable*"] }], + [{ ignoreAccessorPattern: ["**.mutable*.**"] }], + ], + }, + // Ignore class + { + code: dedent` + class Klass { + baz: string; + mutate() { + this.baz = "hello"; + } + }`, + optionsSet: [[{ ignoreClass: true }], [{ ignoreClass: "fieldsOnly" }]], + }, +]; + +export default tests; diff --git a/tests/rules/immutable-data/index.test.ts b/tests/rules/immutable-data/index.test.ts new file mode 100644 index 000000000..833c88e6c --- /dev/null +++ b/tests/rules/immutable-data/index.test.ts @@ -0,0 +1,11 @@ +import { name, rule } from "~/rules/immutable-data"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; +import es6Tests from "./es6"; + +testUsing.typescript(name, rule, es6Tests); +testUsing.typescript(name, rule, es3Tests); + +testUsing.es6(name, rule, es6Tests); +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/index.test.ts b/tests/rules/index.test.ts index 406b79793..a2d4f1c72 100644 --- a/tests/rules/index.test.ts +++ b/tests/rules/index.test.ts @@ -1,15 +1,13 @@ +import test from "ava"; import * as fs from "fs"; -import { rules } from "../../src/rules"; +import { rules } from "~/rules"; -describe("./src/rules/index.ts", () => { - const rulesNames: ReadonlyArray = Object.keys(rules); - const files: ReadonlyArray = fs - .readdirSync("./src/rules") - .filter((file) => file !== "index.ts" && file.endsWith(".ts")); +const rulesNames: ReadonlyArray = Object.keys(rules); +const files: ReadonlyArray = fs + .readdirSync("./src/rules") + .filter((file) => file !== "index.ts" && file.endsWith(".ts")); - it("imports all available rule modules", () => { - expect.assertions(1); - expect(rulesNames).toHaveLength(files.length); - }); +test("all rule files are imported", (t) => { + t.is(rulesNames.length, files.length); }); diff --git a/tests/rules/no-class.test.ts b/tests/rules/no-class.test.ts deleted file mode 100644 index 466fb6a97..000000000 --- a/tests/rules/no-class.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @file Tests for no-class. - */ - -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-class"; - -import { es6, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = []; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: "class Foo {}", - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ClassDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: "const klass = class {}", - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ClassExpression", - line: 1, - column: 15, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es6)", () => { - const ruleTester = new RuleTester(es6); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-class.test/es6/index.ts b/tests/rules/no-class.test/es6/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-class.test/es6/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-class.test/es6/invalid.ts b/tests/rules/no-class.test/es6/invalid.ts new file mode 100644 index 000000000..e4fc42c81 --- /dev/null +++ b/tests/rules/no-class.test/es6/invalid.ts @@ -0,0 +1,30 @@ +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: "class Foo {}", + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ClassDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: "const klass = class {}", + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ClassExpression", + line: 1, + column: 15, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-class.test/es6/valid.ts b/tests/rules/no-class.test/es6/valid.ts new file mode 100644 index 000000000..63d495610 --- /dev/null +++ b/tests/rules/no-class.test/es6/valid.ts @@ -0,0 +1,5 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = []; + +export default tests; diff --git a/tests/rules/no-class.test/index.test.ts b/tests/rules/no-class.test/index.test.ts new file mode 100644 index 000000000..c4caef99a --- /dev/null +++ b/tests/rules/no-class.test/index.test.ts @@ -0,0 +1,8 @@ +import { name, rule } from "~/rules/no-class"; +import { testUsing } from "~/tests/helpers/testers"; + +import es6Tests from "./es6"; + +testUsing.typescript(name, rule, es6Tests); + +testUsing.es6(name, rule, es6Tests); diff --git a/tests/rules/no-conditional-statement.test.ts b/tests/rules/no-conditional-statement.test.ts deleted file mode 100644 index 260a5e09b..000000000 --- a/tests/rules/no-conditional-statement.test.ts +++ /dev/null @@ -1,453 +0,0 @@ -/** - * @file Tests for no-conditional-statement. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-conditional-statement"; - -import { es3, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const es3Valid: ReadonlyArray = [ - { - code: dedent` - function foo(i) { - if (i === 1) { - return 1; - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - }, - { - code: dedent` - function foo(i) { - if (i === 1) { - return 1; - } else { - return 0; - } - }`, - optionsSet: [ - [{ allowReturningBranches: true }], - [{ allowReturningBranches: "ifExhaustive" }], - ], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - return 1; - case "b": - case "c": - return 2; - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - return 1; - case "b": - return 2; - default: - return 3; - } - }`, - optionsSet: [ - [{ allowReturningBranches: true }], - [{ allowReturningBranches: "ifExhaustive" }], - ], - }, - // Check throws - { - code: dedent` - function foo(i) { - if (i === 1) { - throw 1; - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - }, - { - code: dedent` - function foo(i) { - if (i === 1) { - throw 1; - } else { - throw 2; - } - }`, - optionsSet: [ - [{ allowReturningBranches: true }], - [{ allowReturningBranches: "ifExhaustive" }], - ], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - throw 1; - case "b": - case "c": - throw 2; - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - throw 1; - case "b": - throw 2; - default: - throw 3; - } - }`, - optionsSet: [ - [{ allowReturningBranches: true }], - [{ allowReturningBranches: "ifExhaustive" }], - ], - }, -]; - -// Invalid test cases. -const es3Invalid: ReadonlyArray = [ - { - code: dedent` - if (i === 1) { - x = 2; - }`, - optionsSet: [[]], - errors: [ - { - messageId: "unexpectedIf", - type: "IfStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - var x = "c"; - var y = ""; - switch(x) { - case "a": - y = 1; - break; - case "b": - y = 2; - break; - default: - y = 3; - break; - }`, - optionsSet: [[]], - errors: [ - { - messageId: "unexpectedSwitch", - type: "SwitchStatement", - line: 3, - column: 1, - }, - ], - }, - { - code: dedent` - function foo(i) { - if (i === 1) { - return 1; - } - return 0; - }`, - optionsSet: [[]], - errors: [ - { - messageId: "unexpectedIf", - type: "IfStatement", - line: 2, - column: 3, - }, - ], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - return 1; - case "b": - return 2; - default: - return 3; - } - }`, - optionsSet: [[]], - errors: [ - { - messageId: "unexpectedSwitch", - type: "SwitchStatement", - line: 2, - column: 3, - }, - ], - }, - { - code: dedent` - function foo(i) { - if (i === 1) { - console.log("bar"); - } - if (i === 2) console.log("baz"); - else return 3; - return 0; - }`, - optionsSet: [[{ allowReturningBranches: true }]], - errors: [ - { - messageId: "incompleteBranch", - type: "BlockStatement", - line: 2, - column: 16, - }, - { - messageId: "incompleteBranch", - type: "ExpressionStatement", - line: 5, - column: 16, - }, - ], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - return 1; - case "b": - return 2; - default: - break; - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - errors: [ - { - messageId: "incompleteBranch", - type: "SwitchCase", - line: 7, - column: 5, - }, - ], - }, - { - code: dedent` - function foo(x, y) { - if (x > 0) { - if (y < 100) { - return 1; - } else { - console.log("bar"); - } - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - errors: [ - { - messageId: "incompleteBranch", - type: "BlockStatement", - line: 5, - column: 12, - }, - ], - }, - { - code: dedent` - function foo(i) { - if (i === 1) { - return 1; - } - }`, - optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], - errors: [ - { - messageId: "incompleteIf", - type: "IfStatement", - line: 2, - column: 3, - }, - ], - }, - { - code: dedent` - function foo(i) { - if (i === 1) { - return 1; - } else { - console.log(1); - } - }`, - optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], - errors: [ - { - messageId: "incompleteBranch", - type: "BlockStatement", - line: 4, - column: 10, - }, - ], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - return 1; - case "b": - return 2; - } - }`, - optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], - errors: [ - { - messageId: "incompleteSwitch", - type: "SwitchStatement", - line: 2, - column: 3, - }, - ], - }, - { - code: dedent` - function foo(i) { - switch(i) { - case "a": - return 1; - case "b": - return 2; - default: - break; - } - }`, - optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], - errors: [ - { - messageId: "incompleteBranch", - type: "SwitchCase", - line: 7, - column: 5, - }, - ], - }, -]; - -const tsValid: ReadonlyArray = [ - ...es3Valid, - // Check never - { - code: dedent` - declare function neverReturn(): never; - function foo(i) { - if (i === 1) { - neverReturn(); - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - }, - { - code: dedent` - declare function neverReturn(): never; - function foo(i) { - if (i === 1) { - neverReturn(); - } else { - neverReturn(); - } - }`, - optionsSet: [ - [{ allowReturningBranches: true }], - [{ allowReturningBranches: "ifExhaustive" }], - ], - }, - { - code: dedent` - declare function neverReturn(): never; - function foo(i) { - switch(i) { - case "a": - neverReturn(); - case "b": - case "c": - neverReturn(); - } - }`, - optionsSet: [[{ allowReturningBranches: true }]], - }, - { - code: dedent` - declare function neverReturn(): never; - function foo(i) { - switch(i) { - case "a": - neverReturn(); - case "b": - neverReturn(); - default: - neverReturn(); - } - }`, - optionsSet: [ - [{ allowReturningBranches: true }], - [{ allowReturningBranches: "ifExhaustive" }], - ], - }, - // Exhaustive type test. - { - code: dedent` - type T = "a" | "b"; - function foo(i: T) { - switch(i) { - case "a": - return 1; - case "b": - return 2; - } - }`, - optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], - }, -]; - -const tsInvalid: ReadonlyArray = [...es3Invalid]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(tsValid), - invalid: processInvalidTestCase(tsInvalid), - }); -}); - -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase(es3Valid), - invalid: processInvalidTestCase(es3Invalid), - }); -}); diff --git a/tests/rules/no-conditional-statement/es3/index.ts b/tests/rules/no-conditional-statement/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-conditional-statement/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-conditional-statement/es3/invalid.ts b/tests/rules/no-conditional-statement/es3/invalid.ts new file mode 100644 index 000000000..0fda99bef --- /dev/null +++ b/tests/rules/no-conditional-statement/es3/invalid.ts @@ -0,0 +1,235 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + if (i === 1) { + x = 2; + }`, + optionsSet: [[]], + errors: [ + { + messageId: "unexpectedIf", + type: "IfStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: dedent` + var x = "c"; + var y = ""; + switch(x) { + case "a": + y = 1; + break; + case "b": + y = 2; + break; + default: + y = 3; + break; + }`, + optionsSet: [[]], + errors: [ + { + messageId: "unexpectedSwitch", + type: "SwitchStatement", + line: 3, + column: 1, + }, + ], + }, + { + code: dedent` + function foo(i) { + if (i === 1) { + return 1; + } + return 0; + }`, + optionsSet: [[]], + errors: [ + { + messageId: "unexpectedIf", + type: "IfStatement", + line: 2, + column: 3, + }, + ], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + return 1; + case "b": + return 2; + default: + return 3; + } + }`, + optionsSet: [[]], + errors: [ + { + messageId: "unexpectedSwitch", + type: "SwitchStatement", + line: 2, + column: 3, + }, + ], + }, + { + code: dedent` + function foo(i) { + if (i === 1) { + console.log("bar"); + } + if (i === 2) console.log("baz"); + else return 3; + return 0; + }`, + optionsSet: [[{ allowReturningBranches: true }]], + errors: [ + { + messageId: "incompleteBranch", + type: "BlockStatement", + line: 2, + column: 16, + }, + { + messageId: "incompleteBranch", + type: "ExpressionStatement", + line: 5, + column: 16, + }, + ], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + return 1; + case "b": + return 2; + default: + break; + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + errors: [ + { + messageId: "incompleteBranch", + type: "SwitchCase", + line: 7, + column: 5, + }, + ], + }, + { + code: dedent` + function foo(x, y) { + if (x > 0) { + if (y < 100) { + return 1; + } else { + console.log("bar"); + } + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + errors: [ + { + messageId: "incompleteBranch", + type: "BlockStatement", + line: 5, + column: 12, + }, + ], + }, + { + code: dedent` + function foo(i) { + if (i === 1) { + return 1; + } + }`, + optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], + errors: [ + { + messageId: "incompleteIf", + type: "IfStatement", + line: 2, + column: 3, + }, + ], + }, + { + code: dedent` + function foo(i) { + if (i === 1) { + return 1; + } else { + console.log(1); + } + }`, + optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], + errors: [ + { + messageId: "incompleteBranch", + type: "BlockStatement", + line: 4, + column: 10, + }, + ], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + return 1; + case "b": + return 2; + } + }`, + optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], + errors: [ + { + messageId: "incompleteSwitch", + type: "SwitchStatement", + line: 2, + column: 3, + }, + ], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + return 1; + case "b": + return 2; + default: + break; + } + }`, + optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], + errors: [ + { + messageId: "incompleteBranch", + type: "SwitchCase", + line: 7, + column: 5, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-conditional-statement/es3/valid.ts b/tests/rules/no-conditional-statement/es3/valid.ts new file mode 100644 index 000000000..3d58498d0 --- /dev/null +++ b/tests/rules/no-conditional-statement/es3/valid.ts @@ -0,0 +1,61 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + function foo(i) { + if (i === 1) { + return 1; + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + }, + { + code: dedent` + function foo(i) { + if (i === 1) { + return 1; + } else { + return 0; + } + }`, + optionsSet: [ + [{ allowReturningBranches: true }], + [{ allowReturningBranches: "ifExhaustive" }], + ], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + return 1; + case "b": + case "c": + return 2; + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + return 1; + case "b": + return 2; + default: + return 3; + } + }`, + optionsSet: [ + [{ allowReturningBranches: true }], + [{ allowReturningBranches: "ifExhaustive" }], + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-conditional-statement/index.test.ts b/tests/rules/no-conditional-statement/index.test.ts new file mode 100644 index 000000000..aa4be22f2 --- /dev/null +++ b/tests/rules/no-conditional-statement/index.test.ts @@ -0,0 +1,10 @@ +import { name, rule } from "~/rules/no-conditional-statement"; +import { testUsing } from "~/tests/helpers/testers"; + +// import tsTests from "./ts"; +import es3Tests from "./es3"; + +// testUsing.typescript(name, rule, ts); +testUsing.typescript(name, rule, es3Tests); + +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/no-conditional-statement/ts/index.ts b/tests/rules/no-conditional-statement/ts/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-conditional-statement/ts/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-conditional-statement/ts/invalid.ts b/tests/rules/no-conditional-statement/ts/invalid.ts new file mode 100644 index 000000000..ee59eaa26 --- /dev/null +++ b/tests/rules/no-conditional-statement/ts/invalid.ts @@ -0,0 +1,5 @@ +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = []; + +export default tests; diff --git a/tests/rules/no-conditional-statement/ts/valid.ts b/tests/rules/no-conditional-statement/ts/valid.ts new file mode 100644 index 000000000..de8237953 --- /dev/null +++ b/tests/rules/no-conditional-statement/ts/valid.ts @@ -0,0 +1,151 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Exhaustive type test. + { + code: dedent` + type T = "a" | "b"; + function foo(i: T) { + switch(i) { + case "a": + return 1; + case "b": + return 2; + } + }`, + optionsSet: [[{ allowReturningBranches: "ifExhaustive" }]], + }, + // Check throws + { + code: dedent` + function foo(i) { + if (i === 1) { + throw 1; + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + }, + { + code: dedent` + function foo(i) { + if (i === 1) { + throw 1; + } else { + throw 2; + } + }`, + optionsSet: [ + [{ allowReturningBranches: true }], + [{ allowReturningBranches: "ifExhaustive" }], + ], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + throw 1; + case "b": + case "c": + throw 2; + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + }, + { + code: dedent` + function foo(i) { + switch(i) { + case "a": + throw 1; + case "b": + throw 2; + default: + throw 3; + } + }`, + optionsSet: [ + [{ allowReturningBranches: true }], + [{ allowReturningBranches: "ifExhaustive" }], + ], + }, + // Check never + { + code: dedent` + declare function neverReturn(): never; + function foo(i) { + if (i === 1) { + neverReturn(); + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + }, + { + code: dedent` + declare function neverReturn(): never; + function foo(i) { + if (i === 1) { + neverReturn(); + } else { + neverReturn(); + } + }`, + optionsSet: [ + [{ allowReturningBranches: true }], + [{ allowReturningBranches: "ifExhaustive" }], + ], + }, + { + code: dedent` + declare function neverReturn(): never; + function foo(i) { + switch(i) { + case "a": + neverReturn(); + case "b": + case "c": + neverReturn(); + } + }`, + optionsSet: [[{ allowReturningBranches: true }]], + }, + { + code: dedent` + declare function neverReturn(): never; + function foo(i) { + switch(i) { + case "a": + neverReturn(); + case "b": + neverReturn(); + default: + neverReturn(); + } + }`, + optionsSet: [ + [{ allowReturningBranches: true }], + [{ allowReturningBranches: "ifExhaustive" }], + ], + }, + // Exhaustive type test. + { + code: dedent` + type T = "a" | "b"; + function foo(i: T) { + switch(i) { + case "a": + return 1; + case "b": + return 2; + } + }`, + optionsSet: [ + [{ allowReturningBranches: true }], + [{ allowReturningBranches: "ifExhaustive" }], + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-expression-statement.test.ts b/tests/rules/no-expression-statement.test.ts deleted file mode 100644 index b223a18df..000000000 --- a/tests/rules/no-expression-statement.test.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @file Tests for no-expression-statement. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-expression-statement"; - -import { es3, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - // Defining variable should still be allowed. - { - code: `var x = [];`, - optionsSet: [[]], - }, - // Allowed expressions should not cause failures. - { - code: dedent` - console.log("yo"); - console.error("yo");`, - optionsSet: [[{ ignorePattern: "^console\\." }]], - }, - // Allow specifying directive prologues. - { - code: `"use strict"`, - optionsSet: [[]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: dedent` - var x = []; - x.push(1);`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ExpressionStatement", - line: 2, - column: 1, - }, - ], - }, - // Non-allowed expressions should cause failures. - { - code: `console.trace();`, - optionsSet: [[{ ignorePattern: "^console\\.log" }]], - errors: [ - { - messageId: "generic", - type: "ExpressionStatement", - line: 1, - column: 1, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-expression-statement/es3/index.ts b/tests/rules/no-expression-statement/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-expression-statement/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-expression-statement/es3/invalid.ts b/tests/rules/no-expression-statement/es3/invalid.ts new file mode 100644 index 000000000..ea47da83d --- /dev/null +++ b/tests/rules/no-expression-statement/es3/invalid.ts @@ -0,0 +1,35 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + var x = []; + x.push(1);`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ExpressionStatement", + line: 2, + column: 1, + }, + ], + }, + // Non-allowed expressions should cause failures. + { + code: `console.trace();`, + optionsSet: [[{ ignorePattern: "^console\\.log" }]], + errors: [ + { + messageId: "generic", + type: "ExpressionStatement", + line: 1, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-expression-statement/es3/valid.ts b/tests/rules/no-expression-statement/es3/valid.ts new file mode 100644 index 000000000..249157a09 --- /dev/null +++ b/tests/rules/no-expression-statement/es3/valid.ts @@ -0,0 +1,25 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Defining variable should still be allowed. + { + code: `var x = [];`, + optionsSet: [[]], + }, + // Allowed expressions should not cause failures. + { + code: dedent` + console.log("yo"); + console.error("yo");`, + optionsSet: [[{ ignorePattern: "^console\\." }]], + }, + // Allow specifying directive prologues. + { + code: `"use strict"`, + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/no-expression-statement/index.test.ts b/tests/rules/no-expression-statement/index.test.ts new file mode 100644 index 000000000..6657c73cb --- /dev/null +++ b/tests/rules/no-expression-statement/index.test.ts @@ -0,0 +1,8 @@ +import { name, rule } from "~/rules/no-expression-statement"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; + +testUsing.typescript(name, rule, es3Tests); + +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/no-let.test.ts b/tests/rules/no-let.test.ts deleted file mode 100644 index 56f415a4b..000000000 --- a/tests/rules/no-let.test.ts +++ /dev/null @@ -1,331 +0,0 @@ -/** - * @file Tests for no-let. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-let"; - -import { es6, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - { - code: dedent` - function foo() { - let x; - let y = 0; - }`, - optionsSet: [[{ allowLocalMutation: true }]], - }, - { - code: dedent` - const foo = () => { - let x; - let y = 0; - }`, - optionsSet: [[{ allowLocalMutation: true }]], - }, - { - code: dedent` - class Foo { - foo() { - let x; - let y = 0; - } - }`, - optionsSet: [[{ allowLocalMutation: true }]], - }, - { - code: dedent` - let mutable; - let mutableX`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: dedent` - let mutable = 0; - let mutableX = 0`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: `for (let mutableX = 0; x < 1; x++);`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: `for (let mutableX in {});`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: `for (let mutableX of []);`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: dedent` - function foo() { - let mutableX; - let mutableY = 0; - }`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: dedent` - const foo = () => { - let mutableX; - let mutableY = 0; - }`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: dedent` - class Foo { - foo() { - let mutableX; - let mutableY = 0; - } - }`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: dedent` - let Mutable; - let xMutable`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: dedent` - let Mutable = 0; - let xMutable = 0`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: `for (let xMutable = 0; x < 1; x++);`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: `for (let xMutable in {});`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: `for (let xMutable of []);`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: dedent` - function foo() { - let xMutable; - let yMutable = 0; - }`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: dedent` - const foo = () => { - let xMutable; - let yMutable = 0; - }`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: dedent` - class Foo { - foo() { - let xMutable; - let yMutable = 0; - } - }`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: `let x;`, - optionsSet: [ - [], - [{ allowLocalMutation: true }], - [{ ignorePattern: "^mutable" }], - ], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: `let x = 0;`, - optionsSet: [ - [], - [{ allowLocalMutation: true }], - [{ ignorePattern: "^mutable" }], - ], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: `for (let x = 0; x < 1; x++);`, - optionsSet: [ - [], - [{ allowLocalMutation: true }], - [{ ignorePattern: "^mutable" }], - ], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 1, - column: 6, - }, - ], - }, - { - code: `for (let x = 0, y = 0; x < 1; x++);`, - optionsSet: [ - [], - [{ allowLocalMutation: true }], - [{ ignorePattern: "^mutable" }], - ], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 1, - column: 6, - }, - ], - }, - { - code: `for (let x in {});`, - optionsSet: [ - [], - [{ allowLocalMutation: true }], - [{ ignorePattern: "^mutable" }], - ], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 1, - column: 6, - }, - ], - }, - { - code: `for (let x of []);`, - optionsSet: [ - [], - [{ allowLocalMutation: true }], - [{ ignorePattern: "^mutable" }], - ], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 1, - column: 6, - }, - ], - }, - { - code: dedent` - function foo() { - let x; - let y = 0; - }`, - optionsSet: [[], [{ ignorePattern: "^mutable" }]], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 2, - column: 3, - }, - { - messageId: "generic", - type: "VariableDeclaration", - line: 3, - column: 3, - }, - ], - }, - { - code: dedent` - const foo = () => { - let x; - let y = 0; - }`, - optionsSet: [[], [{ ignorePattern: "^mutable" }]], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 2, - column: 3, - }, - { - messageId: "generic", - type: "VariableDeclaration", - line: 3, - column: 3, - }, - ], - }, - { - code: dedent` - class Foo { - foo() { - let x; - let y = 0; - } - }`, - optionsSet: [[], [{ ignorePattern: "^mutable" }]], - errors: [ - { - messageId: "generic", - type: "VariableDeclaration", - line: 3, - column: 5, - }, - { - messageId: "generic", - type: "VariableDeclaration", - line: 4, - column: 5, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es6)", () => { - const ruleTester = new RuleTester(es6); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-let/es6/index.ts b/tests/rules/no-let/es6/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-let/es6/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-let/es6/invalid.ts b/tests/rules/no-let/es6/invalid.ts new file mode 100644 index 000000000..e15c04fba --- /dev/null +++ b/tests/rules/no-let/es6/invalid.ts @@ -0,0 +1,172 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `let x;`, + optionsSet: [ + [], + [{ allowLocalMutation: true }], + [{ ignorePattern: "^mutable" }], + ], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: `let x = 0;`, + optionsSet: [ + [], + [{ allowLocalMutation: true }], + [{ ignorePattern: "^mutable" }], + ], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: `for (let x = 0; x < 1; x++);`, + optionsSet: [ + [], + [{ allowLocalMutation: true }], + [{ ignorePattern: "^mutable" }], + ], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 1, + column: 6, + }, + ], + }, + { + code: `for (let x = 0, y = 0; x < 1; x++);`, + optionsSet: [ + [], + [{ allowLocalMutation: true }], + [{ ignorePattern: "^mutable" }], + ], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 1, + column: 6, + }, + ], + }, + { + code: `for (let x in {});`, + optionsSet: [ + [], + [{ allowLocalMutation: true }], + [{ ignorePattern: "^mutable" }], + ], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 1, + column: 6, + }, + ], + }, + { + code: `for (let x of []);`, + optionsSet: [ + [], + [{ allowLocalMutation: true }], + [{ ignorePattern: "^mutable" }], + ], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 1, + column: 6, + }, + ], + }, + { + code: dedent` + function foo() { + let x; + let y = 0; + }`, + optionsSet: [[], [{ ignorePattern: "^mutable" }]], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 2, + column: 3, + }, + { + messageId: "generic", + type: "VariableDeclaration", + line: 3, + column: 3, + }, + ], + }, + { + code: dedent` + const foo = () => { + let x; + let y = 0; + }`, + optionsSet: [[], [{ ignorePattern: "^mutable" }]], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 2, + column: 3, + }, + { + messageId: "generic", + type: "VariableDeclaration", + line: 3, + column: 3, + }, + ], + }, + { + code: dedent` + class Foo { + foo() { + let x; + let y = 0; + } + }`, + optionsSet: [[], [{ ignorePattern: "^mutable" }]], + errors: [ + { + messageId: "generic", + type: "VariableDeclaration", + line: 3, + column: 5, + }, + { + messageId: "generic", + type: "VariableDeclaration", + line: 4, + column: 5, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-let/es6/valid.ts b/tests/rules/no-let/es6/valid.ts new file mode 100644 index 000000000..5ab51c39c --- /dev/null +++ b/tests/rules/no-let/es6/valid.ts @@ -0,0 +1,134 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + function foo() { + let x; + let y = 0; + }`, + optionsSet: [[{ allowLocalMutation: true }]], + }, + { + code: dedent` + const foo = () => { + let x; + let y = 0; + }`, + optionsSet: [[{ allowLocalMutation: true }]], + }, + { + code: dedent` + class Foo { + foo() { + let x; + let y = 0; + } + }`, + optionsSet: [[{ allowLocalMutation: true }]], + }, + { + code: dedent` + let mutable; + let mutableX`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: dedent` + let mutable = 0; + let mutableX = 0`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: `for (let mutableX = 0; x < 1; x++);`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: `for (let mutableX in {});`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: `for (let mutableX of []);`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: dedent` + function foo() { + let mutableX; + let mutableY = 0; + }`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: dedent` + const foo = () => { + let mutableX; + let mutableY = 0; + }`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: dedent` + class Foo { + foo() { + let mutableX; + let mutableY = 0; + } + }`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: dedent` + let Mutable; + let xMutable`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: dedent` + let Mutable = 0; + let xMutable = 0`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: `for (let xMutable = 0; x < 1; x++);`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: `for (let xMutable in {});`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: `for (let xMutable of []);`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: dedent` + function foo() { + let xMutable; + let yMutable = 0; + }`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: dedent` + const foo = () => { + let xMutable; + let yMutable = 0; + }`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: dedent` + class Foo { + foo() { + let xMutable; + let yMutable = 0; + } + }`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, +]; + +export default tests; diff --git a/tests/rules/no-let/index.test.ts b/tests/rules/no-let/index.test.ts new file mode 100644 index 000000000..7e42cec37 --- /dev/null +++ b/tests/rules/no-let/index.test.ts @@ -0,0 +1,8 @@ +import { name, rule } from "~/rules/no-let"; +import { testUsing } from "~/tests/helpers/testers"; + +import es6Tests from "./es6"; + +testUsing.typescript(name, rule, es6Tests); + +testUsing.es6(name, rule, es6Tests); diff --git a/tests/rules/no-loop-statement.test.ts b/tests/rules/no-loop-statement.test.ts deleted file mode 100644 index 3b03d75c2..000000000 --- a/tests/rules/no-loop-statement.test.ts +++ /dev/null @@ -1,155 +0,0 @@ -/** - * @file Tests for no-loop. - */ - -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-loop-statement"; - -import { es3, es6, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = []; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: `for (const x = 0; x < 10; x++) { console.log(x); }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ForStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `for (const x in y) { console.log(x); }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ForInStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `for (const x of y) { console.log(x); }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ForOfStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `while (true) { console.log("a"); }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "WhileStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `do { console.log("a"); } while (true)`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "DoWhileStatement", - line: 1, - column: 1, - }, - ], - }, -]; -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es6)", () => { - const ruleTester = new RuleTester(es6); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase([]), - invalid: processInvalidTestCase([ - { - code: `for (var x = 0; x < 10; x++) { console.log(x); }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ForStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `for (var x in y) { console.log(x); }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ForInStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `while (true) { console.log("a"); }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "WhileStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `do { console.log("a"); } while (true)`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "DoWhileStatement", - line: 1, - column: 1, - }, - ], - }, - ]), - }); -}); diff --git a/tests/rules/no-loop-statement/es3/index.ts b/tests/rules/no-loop-statement/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-loop-statement/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-loop-statement/es3/invalid.ts b/tests/rules/no-loop-statement/es3/invalid.ts new file mode 100644 index 000000000..ae337412c --- /dev/null +++ b/tests/rules/no-loop-statement/es3/invalid.ts @@ -0,0 +1,54 @@ +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `for (var x = 0; x < 10; x++) { console.log(x); }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ForStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `for (var x in y) { console.log(x); }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ForInStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `while (true) { console.log("a"); }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "WhileStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `do { console.log("a"); } while (true)`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "DoWhileStatement", + line: 1, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-loop-statement/es3/valid.ts b/tests/rules/no-loop-statement/es3/valid.ts new file mode 100644 index 000000000..63d495610 --- /dev/null +++ b/tests/rules/no-loop-statement/es3/valid.ts @@ -0,0 +1,5 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = []; + +export default tests; diff --git a/tests/rules/no-loop-statement/es6/index.ts b/tests/rules/no-loop-statement/es6/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-loop-statement/es6/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-loop-statement/es6/invalid.ts b/tests/rules/no-loop-statement/es6/invalid.ts new file mode 100644 index 000000000..29b9e0fb5 --- /dev/null +++ b/tests/rules/no-loop-statement/es6/invalid.ts @@ -0,0 +1,66 @@ +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `for (const x = 0; x < 10; x++) { console.log(x); }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ForStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `for (const x in y) { console.log(x); }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ForInStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `for (const x of y) { console.log(x); }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ForOfStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `while (true) { console.log("a"); }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "WhileStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `do { console.log("a"); } while (true)`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "DoWhileStatement", + line: 1, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-loop-statement/es6/valid.ts b/tests/rules/no-loop-statement/es6/valid.ts new file mode 100644 index 000000000..63d495610 --- /dev/null +++ b/tests/rules/no-loop-statement/es6/valid.ts @@ -0,0 +1,5 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = []; + +export default tests; diff --git a/tests/rules/no-loop-statement/index.test.ts b/tests/rules/no-loop-statement/index.test.ts new file mode 100644 index 000000000..1572ed562 --- /dev/null +++ b/tests/rules/no-loop-statement/index.test.ts @@ -0,0 +1,11 @@ +import { name, rule } from "~/rules/no-loop-statement"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; +import es6Tests from "./es6"; + +testUsing.typescript(name, rule, es6Tests); +testUsing.typescript(name, rule, es3Tests); + +testUsing.es6(name, rule, es6Tests); +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/no-method-signature.test.ts b/tests/rules/no-method-signature.test.ts deleted file mode 100644 index 3cee22dcb..000000000 --- a/tests/rules/no-method-signature.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @file Tests for no-method-signature. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-method-signature"; - -import { typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - { - code: dedent` - interface Foo { - bar: (a: number, b: string) => number; - }`, - optionsSet: [[]], - }, - { - code: dedent` - type Foo2 = { - bar: (a: number, b: string) => number - }`, - optionsSet: [[]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: dedent` - interface Foo { - bar(a: number, b: string): number; - }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "TSMethodSignature", - line: 2, - column: 3, - }, - ], - }, - { - code: dedent` - type Foo2 = { - bar(a: number, b: string): number - }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "TSMethodSignature", - line: 2, - column: 3, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-method-signature/index.test.ts b/tests/rules/no-method-signature/index.test.ts new file mode 100644 index 000000000..419e8b61e --- /dev/null +++ b/tests/rules/no-method-signature/index.test.ts @@ -0,0 +1,6 @@ +import { name, rule } from "~/rules/no-method-signature"; +import { testUsing } from "~/tests/helpers/testers"; + +import tsTests from "./ts"; + +testUsing.typescript(name, rule, tsTests); diff --git a/tests/rules/no-method-signature/ts/index.ts b/tests/rules/no-method-signature/ts/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-method-signature/ts/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-method-signature/ts/invalid.ts b/tests/rules/no-method-signature/ts/invalid.ts new file mode 100644 index 000000000..81f536d89 --- /dev/null +++ b/tests/rules/no-method-signature/ts/invalid.ts @@ -0,0 +1,38 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + interface Foo { + bar(a: number, b: string): number; + }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "TSMethodSignature", + line: 2, + column: 3, + }, + ], + }, + { + code: dedent` + type Foo2 = { + bar(a: number, b: string): number + }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "TSMethodSignature", + line: 2, + column: 3, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-method-signature/ts/valid.ts b/tests/rules/no-method-signature/ts/valid.ts new file mode 100644 index 000000000..70c58af60 --- /dev/null +++ b/tests/rules/no-method-signature/ts/valid.ts @@ -0,0 +1,22 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + interface Foo { + bar: (a: number, b: string) => number; + }`, + optionsSet: [[]], + }, + { + code: dedent` + type Foo2 = { + bar: (a: number, b: string) => number + }`, + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/no-mixed-type.test.ts b/tests/rules/no-mixed-type.test.ts deleted file mode 100644 index 3f2c5dfec..000000000 --- a/tests/rules/no-mixed-type.test.ts +++ /dev/null @@ -1,182 +0,0 @@ -/** - * @file Tests for no-mixed-type. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-mixed-type"; - -import { typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - // Only properties should not produce failures. - { - code: dedent` - type Foo = { - bar: string; - zoo: number; - };`, - optionsSet: [[], [{ checkInterfaces: false }]], - }, - { - code: dedent` - interface Foo { - bar: string; - zoo: number; - }`, - optionsSet: [[], [{ checkTypeLiterals: false }]], - }, - // Only functions should not produce failures - { - code: dedent` - type Foo = { - bar: string; - zoo: number; - };`, - optionsSet: [[], [{ checkInterfaces: false }]], - }, - { - code: dedent` - interface Foo { - bar: string; - zoo: number; - }`, - optionsSet: [[], [{ checkTypeLiterals: false }]], - }, - // Only indexer should not produce failures - { - code: dedent` - type Foo = { - [key: string]: string; - };`, - optionsSet: [[], [{ checkInterfaces: false }]], - }, - { - code: dedent` - interface Foo { - [key: string]: string; - }`, - optionsSet: [[], [{ checkTypeLiterals: false }]], - }, - // Check Off. - { - code: dedent` - type Foo = { - bar: string; - zoo(): number; - };`, - optionsSet: [[{ checkTypeLiterals: false }]], - }, - { - code: dedent` - interface Foo { - bar: string; - zoo(): number; - }`, - optionsSet: [[{ checkInterfaces: false }]], - }, - // Mixing properties and functions (PropertySignature) should produce failures. - { - code: dedent` - type Foo = { - bar: string; - zoo: () => number; - };`, - optionsSet: [[{ checkTypeLiterals: false }]], - }, - { - code: dedent` - interface Foo { - bar: string; - zoo: () => number; - }`, - optionsSet: [[{ checkInterfaces: false }]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - // Mixing properties and methods (MethodSignature) should produce failures. - { - code: dedent` - type Foo = { - bar: string; - zoo(): number; - };`, - optionsSet: [[], [{ checkInterfaces: false }]], - errors: [ - { - messageId: "generic", - type: "TSTypeAliasDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - interface Foo { - bar: string; - zoo(): number; - }`, - optionsSet: [[], [{ checkTypeLiterals: false }]], - errors: [ - { - messageId: "generic", - type: "TSInterfaceDeclaration", - line: 1, - column: 1, - }, - ], - }, - // Mixing properties and functions (PropertySignature) should produce failures. - { - code: dedent` - type Foo = { - bar: string; - zoo: () => number; - };`, - optionsSet: [[], [{ checkInterfaces: false }]], - errors: [ - { - messageId: "generic", - type: "TSTypeAliasDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - interface Foo { - bar: string; - zoo: () => number; - }`, - optionsSet: [[], [{ checkTypeLiterals: false }]], - errors: [ - { - messageId: "generic", - type: "TSInterfaceDeclaration", - line: 1, - column: 1, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-mixed-type/index.test.ts b/tests/rules/no-mixed-type/index.test.ts new file mode 100644 index 000000000..007df2bf0 --- /dev/null +++ b/tests/rules/no-mixed-type/index.test.ts @@ -0,0 +1,6 @@ +import { name, rule } from "~/rules/no-mixed-type"; +import { testUsing } from "~/tests/helpers/testers"; + +import tsTests from "./ts"; + +testUsing.typescript(name, rule, tsTests); diff --git a/tests/rules/no-mixed-type/ts/index.ts b/tests/rules/no-mixed-type/ts/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-mixed-type/ts/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-mixed-type/ts/invalid.ts b/tests/rules/no-mixed-type/ts/invalid.ts new file mode 100644 index 000000000..c1b10f274 --- /dev/null +++ b/tests/rules/no-mixed-type/ts/invalid.ts @@ -0,0 +1,74 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Mixing properties and methods (MethodSignature) should produce failures. + { + code: dedent` + type Foo = { + bar: string; + zoo(): number; + };`, + optionsSet: [[], [{ checkInterfaces: false }]], + errors: [ + { + messageId: "generic", + type: "TSTypeAliasDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: dedent` + interface Foo { + bar: string; + zoo(): number; + }`, + optionsSet: [[], [{ checkTypeLiterals: false }]], + errors: [ + { + messageId: "generic", + type: "TSInterfaceDeclaration", + line: 1, + column: 1, + }, + ], + }, + // Mixing properties and functions (PropertySignature) should produce failures. + { + code: dedent` + type Foo = { + bar: string; + zoo: () => number; + };`, + optionsSet: [[], [{ checkInterfaces: false }]], + errors: [ + { + messageId: "generic", + type: "TSTypeAliasDeclaration", + line: 1, + column: 1, + }, + ], + }, + { + code: dedent` + interface Foo { + bar: string; + zoo: () => number; + }`, + optionsSet: [[], [{ checkTypeLiterals: false }]], + errors: [ + { + messageId: "generic", + type: "TSInterfaceDeclaration", + line: 1, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-mixed-type/ts/valid.ts b/tests/rules/no-mixed-type/ts/valid.ts new file mode 100644 index 000000000..8c716a141 --- /dev/null +++ b/tests/rules/no-mixed-type/ts/valid.ts @@ -0,0 +1,91 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Only properties should not produce failures. + { + code: dedent` + type Foo = { + bar: string; + zoo: number; + };`, + optionsSet: [[], [{ checkInterfaces: false }]], + }, + { + code: dedent` + interface Foo { + bar: string; + zoo: number; + }`, + optionsSet: [[], [{ checkTypeLiterals: false }]], + }, + // Only functions should not produce failures + { + code: dedent` + type Foo = { + bar: string; + zoo: number; + };`, + optionsSet: [[], [{ checkInterfaces: false }]], + }, + { + code: dedent` + interface Foo { + bar: string; + zoo: number; + }`, + optionsSet: [[], [{ checkTypeLiterals: false }]], + }, + // Only indexer should not produce failures + { + code: dedent` + type Foo = { + [key: string]: string; + };`, + optionsSet: [[], [{ checkInterfaces: false }]], + }, + { + code: dedent` + interface Foo { + [key: string]: string; + }`, + optionsSet: [[], [{ checkTypeLiterals: false }]], + }, + // Check Off. + { + code: dedent` + type Foo = { + bar: string; + zoo(): number; + };`, + optionsSet: [[{ checkTypeLiterals: false }]], + }, + { + code: dedent` + interface Foo { + bar: string; + zoo(): number; + }`, + optionsSet: [[{ checkInterfaces: false }]], + }, + // Mixing properties and functions (PropertySignature) should produce failures. + { + code: dedent` + type Foo = { + bar: string; + zoo: () => number; + };`, + optionsSet: [[{ checkTypeLiterals: false }]], + }, + { + code: dedent` + interface Foo { + bar: string; + zoo: () => number; + }`, + optionsSet: [[{ checkInterfaces: false }]], + }, +]; + +export default tests; diff --git a/tests/rules/no-promise-reject.test.ts b/tests/rules/no-promise-reject.test.ts deleted file mode 100644 index 95ff82a8c..000000000 --- a/tests/rules/no-promise-reject.test.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** - * @file Tests for no-promise-reject. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-promise-reject"; - -import { es6, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - { - code: dedent` - function bar() { - if (Math.random() > 0.5) { - return Promise.resolve(new Error("foo")) - } - return Promise.resolve(10) - }`, - optionsSet: [[]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: dedent` - function foo() { - if (Math.random() > 0.5) { - return Promise.reject(new Error("bar")) - } - return Promise.resolve(10) - }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "CallExpression", - line: 3, - column: 14, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es6)", () => { - const ruleTester = new RuleTester(es6); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-promise-reject/es6/index.ts b/tests/rules/no-promise-reject/es6/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-promise-reject/es6/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-promise-reject/es6/invalid.ts b/tests/rules/no-promise-reject/es6/invalid.ts new file mode 100644 index 000000000..a1f2522e9 --- /dev/null +++ b/tests/rules/no-promise-reject/es6/invalid.ts @@ -0,0 +1,26 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + function foo() { + if (Math.random() > 0.5) { + return Promise.reject(new Error("bar")) + } + return Promise.resolve(10) + }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "CallExpression", + line: 3, + column: 14, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-promise-reject/es6/valid.ts b/tests/rules/no-promise-reject/es6/valid.ts new file mode 100644 index 000000000..a3439cf89 --- /dev/null +++ b/tests/rules/no-promise-reject/es6/valid.ts @@ -0,0 +1,18 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + function bar() { + if (Math.random() > 0.5) { + return Promise.resolve(new Error("foo")) + } + return Promise.resolve(10) + }`, + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/no-promise-reject/index.test.ts b/tests/rules/no-promise-reject/index.test.ts new file mode 100644 index 000000000..fdb76e9a1 --- /dev/null +++ b/tests/rules/no-promise-reject/index.test.ts @@ -0,0 +1,8 @@ +import { name, rule } from "~/rules/no-promise-reject"; +import { testUsing } from "~/tests/helpers/testers"; + +import es6Tests from "./es6"; + +testUsing.typescript(name, rule, es6Tests); + +testUsing.es6(name, rule, es6Tests); diff --git a/tests/rules/no-return-void.test.ts b/tests/rules/no-return-void.test.ts deleted file mode 100644 index a68358127..000000000 --- a/tests/rules/no-return-void.test.ts +++ /dev/null @@ -1,137 +0,0 @@ -/** - * @file Tests for no-return-void. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-return-void"; - -import { typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - { - code: dedent` - function foo(bar) { - return bar + 1; - }`, - optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: false }]], - }, - { - code: dedent` - function foo(bar: number): number { - return bar + 1; - }`, - optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: false }]], - }, - // Not testing implicit return types, therefore this is valid. - { - code: dedent` - function foo(bar) { - console.log(bar); - }`, - optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: false }]], - }, - // Allow null. - { - code: dedent` - function foo(): null { - return null; - }`, - optionsSet: [[], [{ allowNull: true }], [{ allowUndefined: false }]], - }, - // Allow undefined. - { - code: dedent` - function foo(): undefined { - return undefined; - }`, - optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: true }]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - // Disallow void. - { - code: dedent` - function foo(bar: number): void { - console.log(bar); - }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "TSTypeAnnotation", - line: 1, - column: 26, - }, - ], - }, - // Disallow undefined. - { - code: dedent` - function foo(bar: number): undefined { - console.log(bar); - return undefined; - }`, - optionsSet: [[{ allowUndefined: false }]], - errors: [ - { - messageId: "generic", - type: "TSTypeAnnotation", - line: 1, - column: 26, - }, - ], - }, - // Disallow null. - { - code: dedent` - function foo(bar: number): null { - console.log(bar); - return null; - }`, - optionsSet: [[{ allowNull: false }]], - errors: [ - { - messageId: "generic", - type: "TSTypeAnnotation", - line: 1, - column: 26, - }, - ], - }, - // Disallow higher-order function void. - { - code: dedent` - function foo(bar: number): (baz: number) => void { - return baz => { console.log(bar, baz); } - }`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "TSTypeAnnotation", - line: 1, - column: 42, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-return-void/index.test.ts b/tests/rules/no-return-void/index.test.ts new file mode 100644 index 000000000..93243b4d8 --- /dev/null +++ b/tests/rules/no-return-void/index.test.ts @@ -0,0 +1,6 @@ +import { name, rule } from "~/rules/no-return-void"; +import { testUsing } from "~/tests/helpers/testers"; + +import tsTests from "./ts"; + +testUsing.typescript(name, rule, tsTests); diff --git a/tests/rules/no-return-void/ts/index.ts b/tests/rules/no-return-void/ts/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-return-void/ts/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-return-void/ts/invalid.ts b/tests/rules/no-return-void/ts/invalid.ts new file mode 100644 index 000000000..f1b378d73 --- /dev/null +++ b/tests/rules/no-return-void/ts/invalid.ts @@ -0,0 +1,74 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Disallow void. + { + code: dedent` + function foo(bar: number): void { + console.log(bar); + }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "TSTypeAnnotation", + line: 1, + column: 26, + }, + ], + }, + // Disallow undefined. + { + code: dedent` + function foo(bar: number): undefined { + console.log(bar); + return undefined; + }`, + optionsSet: [[{ allowUndefined: false }]], + errors: [ + { + messageId: "generic", + type: "TSTypeAnnotation", + line: 1, + column: 26, + }, + ], + }, + // Disallow null. + { + code: dedent` + function foo(bar: number): null { + console.log(bar); + return null; + }`, + optionsSet: [[{ allowNull: false }]], + errors: [ + { + messageId: "generic", + type: "TSTypeAnnotation", + line: 1, + column: 26, + }, + ], + }, + // Disallow higher-order function void. + { + code: dedent` + function foo(bar: number): (baz: number) => void { + return baz => { console.log(bar, baz); } + }`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "TSTypeAnnotation", + line: 1, + column: 42, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-return-void/ts/valid.ts b/tests/rules/no-return-void/ts/valid.ts new file mode 100644 index 000000000..1f354633d --- /dev/null +++ b/tests/rules/no-return-void/ts/valid.ts @@ -0,0 +1,46 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: dedent` + function foo(bar) { + return bar + 1; + }`, + optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: false }]], + }, + { + code: dedent` + function foo(bar: number): number { + return bar + 1; + }`, + optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: false }]], + }, + // Not testing implicit return types, therefore this is valid. + { + code: dedent` + function foo(bar) { + console.log(bar); + }`, + optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: false }]], + }, + // Allow null. + { + code: dedent` + function foo(): null { + return null; + }`, + optionsSet: [[], [{ allowNull: true }], [{ allowUndefined: false }]], + }, + // Allow undefined. + { + code: dedent` + function foo(): undefined { + return undefined; + }`, + optionsSet: [[], [{ allowNull: false }], [{ allowUndefined: true }]], + }, +]; + +export default tests; diff --git a/tests/rules/no-this-expression.test.ts b/tests/rules/no-this-expression.test.ts deleted file mode 100644 index 990973b3c..000000000 --- a/tests/rules/no-this-expression.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -/** - * @file Tests for no-this-expression. - */ - -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-this-expression"; - -import { es3, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - { - code: `var x = 0;`, - optionsSet: [[]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: `this.x = 0;`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ThisExpression", - line: 1, - column: 1, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-this-expression/es3/index.ts b/tests/rules/no-this-expression/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-this-expression/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-this-expression/es3/invalid.ts b/tests/rules/no-this-expression/es3/invalid.ts new file mode 100644 index 000000000..a4e8b1c50 --- /dev/null +++ b/tests/rules/no-this-expression/es3/invalid.ts @@ -0,0 +1,18 @@ +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `this.x = 0;`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ThisExpression", + line: 1, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-this-expression/es3/valid.ts b/tests/rules/no-this-expression/es3/valid.ts new file mode 100644 index 000000000..97c941fa7 --- /dev/null +++ b/tests/rules/no-this-expression/es3/valid.ts @@ -0,0 +1,10 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `var x = 0;`, + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/no-this-expression/index.test.ts b/tests/rules/no-this-expression/index.test.ts new file mode 100644 index 000000000..6589a9b72 --- /dev/null +++ b/tests/rules/no-this-expression/index.test.ts @@ -0,0 +1,8 @@ +import { name, rule } from "~/rules/no-this-expression"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; + +testUsing.typescript(name, rule, es3Tests); + +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/no-throw-statement.test.ts b/tests/rules/no-throw-statement.test.ts deleted file mode 100644 index 5bd888b12..000000000 --- a/tests/rules/no-throw-statement.test.ts +++ /dev/null @@ -1,75 +0,0 @@ -/** - * @file Tests for no-throw-statement. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-throw-statement"; - -import { es3, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = []; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: `throw 'error';`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - type: "ThrowStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `throw new Error();`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - var error = new Error(); - throw error;`, - optionsSet: [[]], - errors: [ - { - messageId: "generic", - line: 2, - column: 1, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-throw-statement/es3/index.ts b/tests/rules/no-throw-statement/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-throw-statement/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-throw-statement/es3/invalid.ts b/tests/rules/no-throw-statement/es3/invalid.ts new file mode 100644 index 000000000..270a8c02c --- /dev/null +++ b/tests/rules/no-throw-statement/es3/invalid.ts @@ -0,0 +1,44 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `throw 'error';`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + type: "ThrowStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `throw new Error();`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + line: 1, + column: 1, + }, + ], + }, + { + code: dedent` + var error = new Error(); + throw error;`, + optionsSet: [[]], + errors: [ + { + messageId: "generic", + line: 2, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-throw-statement/es3/valid.ts b/tests/rules/no-throw-statement/es3/valid.ts new file mode 100644 index 000000000..63d495610 --- /dev/null +++ b/tests/rules/no-throw-statement/es3/valid.ts @@ -0,0 +1,5 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = []; + +export default tests; diff --git a/tests/rules/no-throw-statement/index.test.ts b/tests/rules/no-throw-statement/index.test.ts new file mode 100644 index 000000000..99b83756e --- /dev/null +++ b/tests/rules/no-throw-statement/index.test.ts @@ -0,0 +1,8 @@ +import { name, rule } from "~/rules/no-throw-statement"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; + +testUsing.typescript(name, rule, es3Tests); + +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/no-try-statement.test.ts b/tests/rules/no-try-statement.test.ts deleted file mode 100644 index d0db4fc8a..000000000 --- a/tests/rules/no-try-statement.test.ts +++ /dev/null @@ -1,112 +0,0 @@ -/** - * @file Tests for no-try-statement. - */ - -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/no-try-statement"; - -import { es3, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = [ - { - code: `var x = 0;`, - optionsSet: [[]], - }, - { - code: `try {} catch (e) {}`, - optionsSet: [[{ allowCatch: true }]], - }, - { - code: `try {} finally {}`, - optionsSet: [[{ allowFinally: true }]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: `try {} catch (e) {}`, - optionsSet: [[]], - errors: [ - { - messageId: "catch", - type: "TryStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `try {} catch (e) {} finally {}`, - optionsSet: [[]], - errors: [ - { - messageId: "catch", - type: "TryStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `try {} catch (e) {} finally {}`, - optionsSet: [[{ allowCatch: true }]], - errors: [ - { - messageId: "finally", - type: "TryStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `try {} catch (e) {} finally {}`, - optionsSet: [[{ allowFinally: true }]], - errors: [ - { - messageId: "catch", - type: "TryStatement", - line: 1, - column: 1, - }, - ], - }, - { - code: `try {} finally {}`, - optionsSet: [[]], - errors: [ - { - messageId: "finally", - type: "TryStatement", - line: 1, - column: 1, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); - -describe("JavaScript (es3)", () => { - const ruleTester = new RuleTester(es3); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/no-try-statement/es3/index.ts b/tests/rules/no-try-statement/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/no-try-statement/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/no-try-statement/es3/invalid.ts b/tests/rules/no-try-statement/es3/invalid.ts new file mode 100644 index 000000000..3cb9a81ba --- /dev/null +++ b/tests/rules/no-try-statement/es3/invalid.ts @@ -0,0 +1,66 @@ +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `try {} catch (e) {}`, + optionsSet: [[]], + errors: [ + { + messageId: "catch", + type: "TryStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `try {} catch (e) {} finally {}`, + optionsSet: [[]], + errors: [ + { + messageId: "catch", + type: "TryStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `try {} catch (e) {} finally {}`, + optionsSet: [[{ allowCatch: true }]], + errors: [ + { + messageId: "finally", + type: "TryStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `try {} catch (e) {} finally {}`, + optionsSet: [[{ allowFinally: true }]], + errors: [ + { + messageId: "catch", + type: "TryStatement", + line: 1, + column: 1, + }, + ], + }, + { + code: `try {} finally {}`, + optionsSet: [[]], + errors: [ + { + messageId: "finally", + type: "TryStatement", + line: 1, + column: 1, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/no-try-statement/es3/valid.ts b/tests/rules/no-try-statement/es3/valid.ts new file mode 100644 index 000000000..528f4d2fb --- /dev/null +++ b/tests/rules/no-try-statement/es3/valid.ts @@ -0,0 +1,18 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + code: `var x = 0;`, + optionsSet: [[]], + }, + { + code: `try {} catch (e) {}`, + optionsSet: [[{ allowCatch: true }]], + }, + { + code: `try {} finally {}`, + optionsSet: [[{ allowFinally: true }]], + }, +]; + +export default tests; diff --git a/tests/rules/no-try-statement/index.test.ts b/tests/rules/no-try-statement/index.test.ts new file mode 100644 index 000000000..5e78de444 --- /dev/null +++ b/tests/rules/no-try-statement/index.test.ts @@ -0,0 +1,8 @@ +import { name, rule } from "~/rules/no-try-statement"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; + +testUsing.typescript(name, rule, es3Tests); + +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/prefer-readonly-type/index.test.ts b/tests/rules/prefer-readonly-type/index.test.ts new file mode 100644 index 000000000..57fd248d0 --- /dev/null +++ b/tests/rules/prefer-readonly-type/index.test.ts @@ -0,0 +1,6 @@ +import { name, rule } from "~/rules/prefer-readonly-type"; +import { testUsing } from "~/tests/helpers/testers"; + +import tsTests from "./ts"; + +testUsing.typescript(name, rule, tsTests); diff --git a/tests/rules/prefer-readonly-type/ts/index.ts b/tests/rules/prefer-readonly-type/ts/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/prefer-readonly-type/ts/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/prefer-readonly-type.test.ts b/tests/rules/prefer-readonly-type/ts/invalid.ts similarity index 60% rename from tests/rules/prefer-readonly-type.test.ts rename to tests/rules/prefer-readonly-type/ts/invalid.ts index 392b90e27..e770fa6bd 100644 --- a/tests/rules/prefer-readonly-type.test.ts +++ b/tests/rules/prefer-readonly-type/ts/invalid.ts @@ -1,423 +1,8 @@ -/** - * @file Tests for prefer-readonly-type. - */ - import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/prefer-readonly-type"; -import { typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; +import type { InvalidTestCase } from "~/tests/helpers/util"; -// Valid test cases. -const valid: ReadonlyArray = [ - // Should not fail on explicit ReadonlyArray parameter. - { - code: dedent` - function foo(...numbers: ReadonlyArray) { - }`, - optionsSet: [[]], - }, - { - code: dedent` - function foo(...numbers: readonly number[]) { - }`, - optionsSet: [[]], - }, - // Should not fail on explicit ReadonlyArray return type. - { - code: dedent` - function foo(): ReadonlyArray { - return [1, 2, 3]; - }`, - optionsSet: [[]], - }, - { - code: dedent` - const foo = (): ReadonlyArray => { - return [1, 2, 3]; - }`, - optionsSet: [[]], - }, - // ReadonlyArray Tuple. - { - code: dedent` - function foo(tuple: readonly [number, string, readonly [number, string]]) { - }`, - optionsSet: [[]], - }, - // Should not fail on ReadonlyArray type alias. - { - code: `type Foo = ReadonlyArray;`, - optionsSet: [[]], - }, - // Should not fail on ReadonlyArray type alias in local type. - { - code: dedent` - function foo() { - type Foo = ReadonlyArray; - }`, - optionsSet: [[]], - }, - // Should not fail on ReadonlyArray in variable declaration. - { - code: `const foo: ReadonlyArray = [];`, - optionsSet: [[]], - }, - // Allow return type. - { - code: dedent` - function foo(...numbers: ReadonlyArray): Array {} - function bar(...numbers: readonly number[]): number[] {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type. - { - code: dedent` - const foo = function(...numbers: ReadonlyArray): Array {} - const bar = function(...numbers: readonly number[]): number[] {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type. - { - code: dedent` - const foo = (...numbers: ReadonlyArray): Array => {} - const bar = (...numbers: readonly number[]): number[] => {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type. - { - code: dedent` - class Foo { - foo(...numbers: ReadonlyArray): Array { - } - } - class Bar { - foo(...numbers: readonly number[]): number[] { - } - }`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type with Type Arguments. - { - code: dedent` - function foo(...numbers: ReadonlyArray): Promise> {} - function foo(...numbers: ReadonlyArray): Promise {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type with deep Type Arguments. - { - code: dedent` - type Foo = { readonly x: T; }; - function foo(...numbers: ReadonlyArray): Promise>> {} - function foo(...numbers: ReadonlyArray): Promise> {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type with Type Arguments in a tuple. - { - code: dedent` - function foo(...numbers: ReadonlyArray): readonly [number, Array, number] {} - function foo(...numbers: ReadonlyArray): readonly [number, number[], number] {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type with Type Arguments Union. - { - code: dedent` - function foo(...numbers: ReadonlyArray): { readonly a: Array } | { readonly b: string[] } {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type with Type Arguments Intersection. - { - code: dedent` - function foo(...numbers: ReadonlyArray): { readonly a: Array } & { readonly b: string[] } {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow return type with Type Arguments Conditional. - { - code: dedent` - function foo(x: T): T extends Array ? string : number[] {}`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Allow inline mutable return type. - { - code: dedent` - function foo(bar: string): { baz: number } { - return 1 as any; - }`, - optionsSet: [[{ allowMutableReturnType: true }]], - }, - // Should not fail on implicit ReadonlyArray type in variable declaration. - { - code: dedent` - const foo = [1, 2, 3] as const`, - optionsSet: [[{ checkImplicit: true }]], - }, - // Should not fail on implicit Array. - { - code: dedent` - const foo = [1, 2, 3] - function bar(param = [1, 2, 3]) {}`, - optionsSet: [[]], - }, - // Interface with readonly modifiers should not produce failures. - { - code: dedent` - interface Foo { - readonly a: number, - readonly b: ReadonlyArray, - readonly c: () => string, - readonly d: { readonly [key: string]: string }, - readonly [key: string]: string, - }`, - optionsSet: [[]], - }, - // PropertySignature and IndexSignature members without readonly modifier - // should produce failures. Also verify that nested members are checked. - { - code: dedent` - interface Foo { - readonly a: number, - readonly b: ReadonlyArray, - readonly c: () => string, - readonly d: { readonly [key: string]: string }, - readonly [key: string]: string, - readonly e: { - readonly a: number, - readonly b: ReadonlyArray, - readonly c: () => string, - readonly d: { readonly [key: string]: string }, - readonly [key: string]: string, - } - }`, - optionsSet: [[]], - }, - // Class with parameter properties. - { - code: dedent` - class Klass { - constructor ( - nonParameterProp: string, - readonly readonlyProp: string, - public readonly publicReadonlyProp: string, - protected readonly protectedReadonlyProp: string, - private readonly privateReadonlyProp: string, - ) { } - }`, - optionsSet: [[]], - }, - // CallSignature and MethodSignature cannot have readonly modifiers and should - // not produce failures. - { - code: dedent` - interface Foo { - (): void - foo(): void - }`, - optionsSet: [[]], - }, - // The literal with indexer with readonly modifier should not produce failures. - { - code: `let foo: { readonly [key: string]: number };`, - optionsSet: [[]], - }, - // Type literal in array template parameter with readonly should not produce failures. - { - code: `type foo = ReadonlyArray<{ readonly type: string, readonly code: string }>;`, - optionsSet: [[]], - }, - // Type literal with readonly on members should not produce failures. - { - code: dedent` - let foo: { - readonly a: number, - readonly b: ReadonlyArray, - readonly c: () => string, - readonly d: { readonly [key: string]: string } - readonly [key: string]: string - };`, - optionsSet: [[]], - }, - // Mapped types with readonly on members should not produce failures. - { - code: dedent` - const func = (x: { readonly [key in string]: number }) => {}`, - optionsSet: [[]], - }, - // Ignore Class Fields. - { - code: dedent` - class Klass { - foo: number; - private bar: number; - static baz: number; - private static qux: number; - }`, - optionsSet: [[{ ignoreClass: true }], [{ ignoreClass: "fieldsOnly" }]], - }, - // Ignore Classes. - { - code: dedent` - class Klass { - foo() { - let bar: { - foo: number; - }; - } - }`, - optionsSet: [[{ ignoreClass: true }]], - }, - // Ignore Interfaces. - { - code: dedent` - interface Foo { - foo: number, - bar: ReadonlyArray, - baz: () => string, - qux: { [key: string]: string } - }`, - optionsSet: [[{ ignoreInterface: true }]], - }, - // Allow Local. - { - code: dedent` - function foo() { - let foo: { - a: number, - b: ReadonlyArray, - c: () => string, - d: { [key: string]: string }, - [key: string]: string, - readonly d: { - a: number, - b: ReadonlyArray, - c: () => string, - d: { [key: string]: string }, - [key: string]: string, - } - } - };`, - optionsSet: [[{ allowLocalMutation: true }]], - }, - // Ignore Prefix. - { - code: dedent` - let mutableFoo: string[] = [];`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: dedent` - let foo: { - mutableA: number, - mutableB: ReadonlyArray, - mutableC: () => string, - mutableD: { readonly [key: string]: string }, - mutableE: { - mutableA: number, - mutableB: ReadonlyArray, - mutableC: () => string, - mutableD: { readonly [key: string]: string }, - } - };`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - { - code: dedent` - class Klass { - mutableA: string; - private mutableB: string; - }`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - // Ignore Suffix. - { - code: dedent` - let fooMutable: string[] = [];`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: dedent` - let foo: { - aMutable: number, - bMutable: ReadonlyArray, - cMutable: () => string, - dMutable: { readonly [key: string]: string }, - eMutable: { - aMutable: number, - bMutable: ReadonlyArray, - cMutable: () => string, - dMutable: { readonly [key: string]: string }, - } - };`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - { - code: dedent` - class Klass { - AMutable: string; - private BMutable: string; - }`, - optionsSet: [[{ ignorePattern: "Mutable$" }]], - }, - // Allow mutable TSIndexSignature. - { - code: dedent` - const mutableResult: { - [key: string]: string - } = {};`, - optionsSet: [[{ ignorePattern: "^mutable" }]], - }, - // Ignore Mutable Collections (Array, Tuple, Set, Map) - { - code: dedent`type Foo = Array;`, - optionsSet: [[{ ignoreCollections: true }]], - }, - { - code: dedent`const Foo: number[] = [];`, - optionsSet: [[{ ignoreCollections: true }]], - }, - { - code: dedent`const Foo = []`, - optionsSet: [[{ ignoreCollections: true, checkImplicit: true }]], - }, - { - code: dedent`type Foo = [string, string];`, - optionsSet: [[{ ignoreCollections: true }]], - }, - { - code: dedent`const Foo: [string, string] = ['foo', 'bar'];`, - optionsSet: [[{ ignoreCollections: true }]], - }, - { - code: dedent`const Foo = ['foo', 'bar'];`, - optionsSet: [[{ ignoreCollections: true, checkImplicit: true }]], - }, - { - code: dedent`type Foo = Set;`, - optionsSet: [[{ ignoreCollections: true }]], - }, - { - code: dedent`const Foo: Set = new Set();`, - optionsSet: [[{ ignoreCollections: true }]], - }, - { - code: dedent`type Foo = Map;`, - optionsSet: [[{ ignoreCollections: true }]], - }, - { - code: dedent`const Foo: Map = new Map();`, - optionsSet: [[{ ignoreCollections: true }]], - }, -]; - -// Invalid test cases. -const invalid: ReadonlyArray = [ +const tests: ReadonlyArray = [ { code: dedent` function foo(...numbers: number[]) { @@ -540,18 +125,12 @@ const invalid: ReadonlyArray = [ }`, optionsSet: [[]], output: dedent` - function foo(): ReadonlyArray { + function foo(): Array { interface Foo { readonly bar: ReadonlyArray } }`, errors: [ - { - messageId: "type", - type: "TSTypeReference", - line: 1, - column: 17, - }, { messageId: "type", type: "TSTypeReference", @@ -570,18 +149,12 @@ const invalid: ReadonlyArray = [ }`, optionsSet: [[]], output: dedent` - const foo = (): ReadonlyArray => { + const foo = (): Array => { interface Foo { readonly bar: ReadonlyArray } }`, errors: [ - { - messageId: "type", - type: "TSTypeReference", - line: 1, - column: 17, - }, { messageId: "type", type: "TSTypeReference", @@ -590,38 +163,6 @@ const invalid: ReadonlyArray = [ }, ], }, - // Should fail on shorthand syntax Array type as return type. - { - code: dedent` - function foo(): number[] { - }`, - optionsSet: [[]], - output: dedent` - function foo(): readonly number[] { - }`, - errors: [ - { - messageId: "array", - type: "TSArrayType", - line: 1, - column: 17, - }, - ], - }, - // Should fail on shorthand syntax Array type as return type. - { - code: `const foo = (): number[] => {}`, - optionsSet: [[]], - output: `const foo = (): readonly number[] => {}`, - errors: [ - { - messageId: "array", - type: "TSArrayType", - line: 1, - column: 17, - }, - ], - }, // Should fail inside function. { code: dedent` @@ -746,7 +287,7 @@ const invalid: ReadonlyArray = [ readonly baz: ReadonlyArray } ): { - readonly bar: ReadonlyArray, + readonly bar: Array, readonly baz: ReadonlyArray } { let foo: { @@ -765,12 +306,6 @@ const invalid: ReadonlyArray = [ line: 3, column: 19, }, - { - messageId: "type", - type: "TSTypeReference", - line: 7, - column: 17, - }, { messageId: "type", type: "TSTypeReference", @@ -779,88 +314,6 @@ const invalid: ReadonlyArray = [ }, ], }, - // Should fail on Array type alias. - { - code: `type Foo = Array;`, - optionsSet: [[]], - output: `type Foo = ReadonlyArray;`, - errors: [ - { - messageId: "type", - type: "TSTypeReference", - line: 1, - column: 12, - }, - ], - }, - // Should fail on Array as type member. - { - code: dedent` - function foo() { - type Foo = { - readonly bar: Array - } - }`, - optionsSet: [[]], - output: dedent` - function foo() { - type Foo = { - readonly bar: ReadonlyArray - } - }`, - errors: [ - { - messageId: "type", - type: "TSTypeReference", - line: 3, - column: 19, - }, - ], - }, - // Should fail on Array type alias in local type. - { - code: dedent` - function foo() { - type Foo = Array; - }`, - optionsSet: [[]], - output: dedent` - function foo() { - type Foo = ReadonlyArray; - }`, - errors: [ - { - messageId: "type", - type: "TSTypeReference", - line: 2, - column: 14, - }, - ], - }, - // Should fail on Array as type member in local type. - { - code: dedent` - function foo() { - type Foo = { - readonly bar: Array - } - }`, - optionsSet: [[]], - output: dedent` - function foo() { - type Foo = { - readonly bar: ReadonlyArray - } - }`, - errors: [ - { - messageId: "type", - type: "TSTypeReference", - line: 3, - column: 19, - }, - ], - }, // Should fail on Array type in variable declaration. { code: `const foo: Array = [];`, @@ -1066,17 +519,11 @@ const invalid: ReadonlyArray = [ // Function Index Signatures. { code: dedent` - function foo(): { [source: string]: string } { - return undefined; - } function bar(param: { [source: string]: string }): void { return undefined; }`, optionsSet: [[]], output: dedent` - function foo(): { readonly [source: string]: string } { - return undefined; - } function bar(param: { readonly [source: string]: string }): void { return undefined; }`, @@ -1085,12 +532,6 @@ const invalid: ReadonlyArray = [ messageId: "property", type: "TSIndexSignature", line: 1, - column: 19, - }, - { - messageId: "property", - type: "TSIndexSignature", - line: 4, column: 23, }, ], @@ -1103,37 +544,9 @@ const invalid: ReadonlyArray = [ errors: [ { messageId: "property", - type: "TSIndexSignature", - line: 1, - column: 12, - }, - ], - }, - // Type literal in property template parameter without readonly should produce failures. - { - code: dedent` - type foo = ReadonlyArray<{ - type: string, - code: string, - }>;`, - optionsSet: [[]], - output: dedent` - type foo = ReadonlyArray<{ - readonly type: string, - readonly code: string, - }>;`, - errors: [ - { - messageId: "property", - type: "TSPropertySignature", - line: 2, - column: 3, - }, - { - messageId: "property", - type: "TSPropertySignature", - line: 3, - column: 3, + type: "TSIndexSignature", + line: 1, + column: 12, }, ], }, @@ -1317,12 +730,332 @@ const invalid: ReadonlyArray = [ }, ], }, + // Don't allow mutable return type. + { + code: dedent` + function foo(...numbers: ReadonlyArray): Array {} + function bar(...numbers: readonly number[]): number[] {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + function foo(...numbers: ReadonlyArray): ReadonlyArray {} + function bar(...numbers: readonly number[]): readonly number[] {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 50, + }, + { + messageId: "array", + type: "TSArrayType", + line: 2, + column: 46, + }, + ], + }, + // Don't allow mutable return type. + { + code: dedent` + const foo = function(...numbers: ReadonlyArray): Array {} + const bar = function(...numbers: readonly number[]): number[] {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + const foo = function(...numbers: ReadonlyArray): ReadonlyArray {} + const bar = function(...numbers: readonly number[]): readonly number[] {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 58, + }, + { + messageId: "array", + type: "TSArrayType", + line: 2, + column: 54, + }, + ], + }, + // Don't allow mutable return type. + { + code: dedent` + const foo = (...numbers: ReadonlyArray): Array => {} + const bar = (...numbers: readonly number[]): number[] => {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + const foo = (...numbers: ReadonlyArray): ReadonlyArray => {} + const bar = (...numbers: readonly number[]): readonly number[] => {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 50, + }, + { + messageId: "array", + type: "TSArrayType", + line: 2, + column: 46, + }, + ], + }, + // Don't allow mutable return type. + { + code: dedent` + class Foo { + foo(...numbers: ReadonlyArray): Array { + } + } + class Bar { + foo(...numbers: readonly number[]): number[] { + } + }`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + class Foo { + foo(...numbers: ReadonlyArray): ReadonlyArray { + } + } + class Bar { + foo(...numbers: readonly number[]): readonly number[] { + } + }`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 2, + column: 43, + }, + { + messageId: "array", + type: "TSArrayType", + line: 6, + column: 39, + }, + ], + }, + // Don't allow mutable return type with Type Arguments. + { + code: dedent` + function foo(...numbers: ReadonlyArray): Promise> {} + function foo(...numbers: ReadonlyArray): Promise {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + function foo(...numbers: ReadonlyArray): Promise> {} + function foo(...numbers: ReadonlyArray): Promise {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 58, + }, + { + messageId: "array", + type: "TSArrayType", + line: 2, + column: 58, + }, + ], + }, + // Don't allow mutable return type with deep Type Arguments. + { + code: dedent` + type Foo = { readonly x: T; }; + function foo(...numbers: ReadonlyArray): Promise>> {} + function foo(...numbers: ReadonlyArray): Promise> {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + type Foo = { readonly x: T; }; + function foo(...numbers: ReadonlyArray): Promise>> {} + function foo(...numbers: ReadonlyArray): Promise> {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 2, + column: 62, + }, + { + messageId: "array", + type: "TSArrayType", + line: 3, + column: 62, + }, + ], + }, + // Don't allow mutable return type with Type Arguments in a tuple. + { + code: dedent` + function foo(...numbers: ReadonlyArray): readonly [number, Array, number] {} + function foo(...numbers: ReadonlyArray): readonly [number, number[], number] {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + function foo(...numbers: ReadonlyArray): readonly [number, ReadonlyArray, number] {} + function foo(...numbers: ReadonlyArray): readonly [number, readonly number[], number] {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 68, + }, + { + messageId: "array", + type: "TSArrayType", + line: 2, + column: 68, + }, + ], + }, + // Don't allow mutable return type with Type Arguments Union. + { + code: dedent` + function foo(...numbers: ReadonlyArray): { readonly a: Array } | { readonly b: string[] } {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + function foo(...numbers: ReadonlyArray): { readonly a: ReadonlyArray } | { readonly b: readonly string[] } {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 64, + }, + { + messageId: "array", + type: "TSArrayType", + line: 1, + column: 96, + }, + ], + }, + // Don't allow mutable return type with Type Arguments Intersection. + { + code: dedent` + function foo(...numbers: ReadonlyArray): { readonly a: Array } & { readonly b: string[] } {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + function foo(...numbers: ReadonlyArray): { readonly a: ReadonlyArray } & { readonly b: readonly string[] } {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 64, + }, + { + messageId: "array", + type: "TSArrayType", + line: 1, + column: 96, + }, + ], + }, + // Don't allow mutable return type with Type Arguments Conditional. + { + code: dedent` + function foo(x: T): T extends Array ? string : number[] {}`, + optionsSet: [[{ allowMutableReturnType: false }]], + output: dedent` + function foo(x: T): T extends ReadonlyArray ? string : readonly number[] {}`, + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 1, + column: 34, + }, + { + messageId: "array", + type: "TSArrayType", + line: 1, + column: 59, + }, + ], + }, + // Should fail when using an mutable type alias in variable declaration. + { + code: dedent` + type Foo = Array; + let foo: Foo;`, + optionsSet: [[]], + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 2, + column: 20, + }, + ], + }, + // Should fail when using an mutable type alias in function param. + { + code: dedent` + type Foo = Array; + function foo(param: Foo) {}`, + optionsSet: [[]], + errors: [ + { + messageId: "type", + type: "TSTypeReference", + line: 2, + column: 20, + }, + ], + }, + // Should fail when using an mutable type alias of type literal without readonly modifer in variable declaration. + { + code: dedent` + type Foo = ReadonlyArray<{ + type: string, + code: string, + }>; + let foo: Foo;`, + optionsSet: [[]], + errors: [ + { + messageId: "property", + type: "TSPropertySignature", + line: 2, + column: 3, + }, + { + messageId: "property", + type: "TSPropertySignature", + line: 3, + column: 3, + }, + ], + }, + // Should fail when using an mutable type alias of type literal without readonly modifer in function param. + { + code: dedent` + type Foo = ReadonlyArray<{ + type: string, + code: string, + }>; + function foo(param: Foo) {}`, + optionsSet: [[]], + errors: [ + { + messageId: "property", + type: "TSPropertySignature", + line: 2, + column: 3, + }, + { + messageId: "property", + type: "TSPropertySignature", + line: 3, + column: 3, + }, + ], + }, ]; -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); +export default tests; diff --git a/tests/rules/prefer-readonly-type/ts/valid.ts b/tests/rules/prefer-readonly-type/ts/valid.ts new file mode 100644 index 000000000..f6c8723fe --- /dev/null +++ b/tests/rules/prefer-readonly-type/ts/valid.ts @@ -0,0 +1,392 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // Should not fail on explicit ReadonlyArray parameter. + { + code: dedent` + function foo(...numbers: ReadonlyArray) { + }`, + optionsSet: [[]], + }, + { + code: dedent` + function foo(...numbers: readonly number[]) { + }`, + optionsSet: [[]], + }, + // Should not fail on explicit ReadonlyArray return type. + { + code: dedent` + function foo(): ReadonlyArray { + return [1, 2, 3]; + }`, + optionsSet: [[]], + }, + { + code: dedent` + const foo = (): ReadonlyArray => { + return [1, 2, 3]; + }`, + optionsSet: [[]], + }, + // ReadonlyArray Tuple. + { + code: dedent` + function foo(tuple: readonly [number, string, readonly [number, string]]) { + }`, + optionsSet: [[]], + }, + // Should not fail on type alias. + { + code: `type Foo = Array;`, + optionsSet: [[]], + }, + // Should not fail on type alias in local type. + { + code: dedent` + function foo() { + type Foo = Array; + }`, + optionsSet: [[]], + }, + // Should not fail on ReadonlyArray in variable declaration. + { + code: `const foo: ReadonlyArray = [];`, + optionsSet: [[]], + }, + // Allow mutable return type. + { + code: dedent` + function foo(...numbers: ReadonlyArray): Array {} + function bar(...numbers: readonly number[]): number[] {}`, + optionsSet: [], + }, + // Allow mutable return type. + { + code: dedent` + const foo = function(...numbers: ReadonlyArray): Array {} + const bar = function(...numbers: readonly number[]): number[] {}`, + optionsSet: [], + }, + // Allow mutable return type. + { + code: dedent` + const foo = (...numbers: ReadonlyArray): Array => {} + const bar = (...numbers: readonly number[]): number[] => {}`, + optionsSet: [], + }, + // Allow mutable return type. + { + code: dedent` + class Foo { + foo(...numbers: ReadonlyArray): Array { + } + } + class Bar { + foo(...numbers: readonly number[]): number[] { + } + }`, + optionsSet: [], + }, + // Allow mutable return type with Type Arguments. + { + code: dedent` + function foo(...numbers: ReadonlyArray): Promise> {} + function foo(...numbers: ReadonlyArray): Promise {}`, + optionsSet: [], + }, + // Allow mutable return type with deep Type Arguments. + { + code: dedent` + type Foo = { readonly x: T; }; + function foo(...numbers: ReadonlyArray): Promise>> {} + function foo(...numbers: ReadonlyArray): Promise> {}`, + optionsSet: [], + }, + // Allow mutable return type with Type Arguments in a tuple. + { + code: dedent` + function foo(...numbers: ReadonlyArray): readonly [number, Array, number] {} + function foo(...numbers: ReadonlyArray): readonly [number, number[], number] {}`, + optionsSet: [], + }, + // Allow mutable return type with Type Arguments Union. + { + code: dedent` + function foo(...numbers: ReadonlyArray): { readonly a: Array } | { readonly b: string[] } {}`, + optionsSet: [], + }, + // Allow mutable return type with Type Arguments Intersection. + { + code: dedent` + function foo(...numbers: ReadonlyArray): { readonly a: Array } & { readonly b: string[] } {}`, + optionsSet: [], + }, + // Allow mutable return type with Type Arguments Conditional. + { + code: dedent` + function foo(x: T): T extends Array ? string : number[] {}`, + optionsSet: [], + }, + // Allow inline mutable return type. + { + code: dedent` + function foo(bar: string): { baz: number } { + return 1 as any; + }`, + optionsSet: [[{ allowMutableReturnType: true }]], + }, + // Should not fail on implicit ReadonlyArray type in variable declaration. + { + code: dedent` + const foo = [1, 2, 3] as const`, + optionsSet: [[{ checkImplicit: true }]], + }, + // Should not fail on implicit Array. + { + code: dedent` + const foo = [1, 2, 3] + function bar(param = [1, 2, 3]) {}`, + optionsSet: [[]], + }, + // Interface with readonly modifiers should not produce failures. + { + code: dedent` + interface Foo { + readonly a: number, + readonly b: ReadonlyArray, + readonly c: () => string, + readonly d: { readonly [key: string]: string }, + readonly [key: string]: string, + }`, + optionsSet: [[]], + }, + // PropertySignature and IndexSignature members without readonly modifier + // should produce failures. Also verify that nested members are checked. + { + code: dedent` + interface Foo { + readonly a: number, + readonly b: ReadonlyArray, + readonly c: () => string, + readonly d: { readonly [key: string]: string }, + readonly [key: string]: string, + readonly e: { + readonly a: number, + readonly b: ReadonlyArray, + readonly c: () => string, + readonly d: { readonly [key: string]: string }, + readonly [key: string]: string, + } + }`, + optionsSet: [[]], + }, + // Class with parameter properties. + { + code: dedent` + class Klass { + constructor ( + nonParameterProp: string, + readonly readonlyProp: string, + public readonly publicReadonlyProp: string, + protected readonly protectedReadonlyProp: string, + private readonly privateReadonlyProp: string, + ) { } + }`, + optionsSet: [[]], + }, + // CallSignature and MethodSignature cannot have readonly modifiers and should + // not produce failures. + { + code: dedent` + interface Foo { + (): void + foo(): void + }`, + optionsSet: [[]], + }, + // The literal with indexer with readonly modifier should not produce failures. + { + code: `let foo: { readonly [key: string]: number };`, + optionsSet: [[]], + }, + // Type literal in array template parameter with readonly should not produce failures. + { + code: `let foo: ReadonlyArray<{ readonly type: string, readonly code: string }>;`, + optionsSet: [[]], + }, + // Type literal with readonly on members should not produce failures. + { + code: dedent` + let foo: { + readonly a: number, + readonly b: ReadonlyArray, + readonly c: () => string, + readonly d: { readonly [key: string]: string } + readonly [key: string]: string + };`, + optionsSet: [[]], + }, + // Mapped types with readonly on members should not produce failures. + { + code: dedent` + const func = (x: { readonly [key in string]: number }) => {}`, + optionsSet: [[]], + }, + // Ignore Classes. + { + code: dedent` + class Klass { + foo: number; + private bar: number; + static baz: number; + private static qux: number; + }`, + optionsSet: [[{ ignoreClass: true }]], + }, + // Ignore Interfaces. + { + code: dedent` + interface Foo { + foo: number, + bar: ReadonlyArray, + baz: () => string, + qux: { [key: string]: string } + }`, + optionsSet: [[{ ignoreInterface: true }]], + }, + // Allow Local. + { + code: dedent` + function foo() { + let foo: { + a: number, + b: ReadonlyArray, + c: () => string, + d: { [key: string]: string }, + [key: string]: string, + readonly d: { + a: number, + b: ReadonlyArray, + c: () => string, + d: { [key: string]: string }, + [key: string]: string, + } + } + };`, + optionsSet: [[{ allowLocalMutation: true }]], + }, + // Ignore Prefix. + { + code: dedent` + let mutableFoo: string[] = [];`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: dedent` + let foo: { + mutableA: number, + mutableB: ReadonlyArray, + mutableC: () => string, + mutableD: { readonly [key: string]: string }, + mutableE: { + mutableA: number, + mutableB: ReadonlyArray, + mutableC: () => string, + mutableD: { readonly [key: string]: string }, + } + };`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + { + code: dedent` + class Klass { + mutableA: string; + private mutableB: string; + }`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + // Ignore Suffix. + { + code: dedent` + let fooMutable: string[] = [];`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: dedent` + let foo: { + aMutable: number, + bMutable: ReadonlyArray, + cMutable: () => string, + dMutable: { readonly [key: string]: string }, + eMutable: { + aMutable: number, + bMutable: ReadonlyArray, + cMutable: () => string, + dMutable: { readonly [key: string]: string }, + } + };`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + { + code: dedent` + class Klass { + AMutable: string; + private BMutable: string; + }`, + optionsSet: [[{ ignorePattern: "Mutable$" }]], + }, + // Allow mutable TSIndexSignature. + { + code: dedent` + const mutableResult: { + [key: string]: string + } = {};`, + optionsSet: [[{ ignorePattern: "^mutable" }]], + }, + // Ignore Mutable Collections (Array, Tuple, Set, Map) + { + code: dedent`let Foo: Array;`, + optionsSet: [[{ ignoreCollections: true }]], + }, + { + code: dedent`const Foo: number[] = [];`, + optionsSet: [[{ ignoreCollections: true }]], + }, + { + code: dedent`const Foo = []`, + optionsSet: [[{ ignoreCollections: true, checkImplicit: true }]], + }, + { + code: dedent`let Foo: [string, string];`, + optionsSet: [[{ ignoreCollections: true }]], + }, + { + code: dedent`const Foo: [string, string] = ['foo', 'bar'];`, + optionsSet: [[{ ignoreCollections: true }]], + }, + { + code: dedent`const Foo = ['foo', 'bar'];`, + optionsSet: [[{ ignoreCollections: true, checkImplicit: true }]], + }, + { + code: dedent`let Foo: Set;`, + optionsSet: [[{ ignoreCollections: true }]], + }, + { + code: dedent`const Foo: Set = new Set();`, + optionsSet: [[{ ignoreCollections: true }]], + }, + { + code: dedent`let Foo: Map;`, + optionsSet: [[{ ignoreCollections: true }]], + }, + { + code: dedent`const Foo: Map = new Map();`, + optionsSet: [[{ ignoreCollections: true }]], + }, +]; + +export default tests; diff --git a/tests/rules/prefer-tacit.test.ts b/tests/rules/prefer-tacit.test.ts deleted file mode 100644 index ce31180fa..000000000 --- a/tests/rules/prefer-tacit.test.ts +++ /dev/null @@ -1,225 +0,0 @@ -/** - * @file Tests for prefer-tacit. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/prefer-tacit"; - -import { es6, typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const es6Valid: ReadonlyArray = [ - { - // No typedef for `f` therefore no error (when not assuming types). - code: `const foo = x => f(x);`, - optionsSet: [[]], - }, -]; - -// Valid test cases. -const tsValid: ReadonlyArray = [ - ...es6Valid, - // FunctionDeclaration. - { - code: dedent` - function f(x, y) {} - const foo = x => f(x);`, - optionsSet: [[]], - }, - // FunctionExpression. - { - code: dedent` - const f = function(x, y) {} - const foo = x => f(x);`, - optionsSet: [[]], - }, - // ArrowFunction. - { - code: dedent` - const f = (x, y) => {} - const foo = x => f(x);`, - optionsSet: [[]], - }, - // TypeAlias. - { - code: dedent` - type F = (x, y) => {}; - const f = undefined as unknown as F; - const foo = x => f(x);`, - optionsSet: [[]], - }, -]; - -// Valid test cases. -const es6Invalid: ReadonlyArray = [ - { - // No typedef but assuming types. - // No fixer. - code: `const foo = x => f(x);`, - optionsSet: [[{ assumeTypes: { allowFixer: false } }]], - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 1, - column: 13, - }, - ], - }, - { - // No typedef but assuming types. - // With fixer. - code: `const foo = x => f(x);`, - optionsSet: [[{ assumeTypes: { allowFixer: true } }]], - output: dedent` - const foo = f;`, - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 1, - column: 13, - }, - ], - }, - // Default parameters. - { - code: dedent` - function f(x, y = 10) {} - const foo = x => f(x);`, - optionsSet: [[{ assumeTypes: { allowFixer: true } }]], - output: dedent` - function f(x, y = 10) {} - const foo = f;`, - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 2, - column: 13, - }, - ], - }, -]; - -// Invalid test cases. -const tsInvalid: ReadonlyArray = [ - ...es6Invalid, - // FunctionDeclaration. - { - code: dedent` - function f(x) {} - const foo = x => f(x);`, - optionsSet: [[]], - output: dedent` - function f(x) {} - const foo = f;`, - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 2, - column: 13, - }, - ], - }, - // FunctionExpression. - { - code: dedent` - const f = function(x) {} - const foo = x => f(x);`, - optionsSet: [[]], - output: dedent` - const f = function(x) {} - const foo = f;`, - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 2, - column: 13, - }, - ], - }, - // ArrowFunction. - { - code: dedent` - const f = x => {} - const foo = x => f(x);`, - optionsSet: [[]], - output: dedent` - const f = x => {} - const foo = f;`, - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 2, - column: 13, - }, - ], - }, - // TypeAlias. - { - code: dedent` - type F = (x) => {}; - const f = undefined as unknown as F; - const foo = x => f(x);`, - optionsSet: [[]], - output: dedent` - type F = (x) => {}; - const f = undefined as unknown as F; - const foo = f;`, - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 3, - column: 13, - }, - ], - }, - // Optional parameters. - { - code: dedent` - function f(x: number, y?: number) {} - const foo = x => f(x);`, - optionsSet: [[]], - output: dedent` - function f(x: number, y?: number) {} - const foo = f;`, - errors: [ - { - messageId: "generic", - type: "ArrowFunctionExpression", - line: 2, - column: 13, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(tsValid), - invalid: processInvalidTestCase(tsInvalid), - }); -}); - -describe("JavaScript (es6)", () => { - const ruleTester = new RuleTester(es6); - ruleTester.run(name, rule, { - valid: processValidTestCase(es6Valid), - invalid: processInvalidTestCase(es6Invalid), - }); -}); diff --git a/tests/rules/prefer-tacit/es3/index.ts b/tests/rules/prefer-tacit/es3/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/prefer-tacit/es3/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/prefer-tacit/es3/invalid.ts b/tests/rules/prefer-tacit/es3/invalid.ts new file mode 100644 index 000000000..9f16fda38 --- /dev/null +++ b/tests/rules/prefer-tacit/es3/invalid.ts @@ -0,0 +1,36 @@ +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // { + // // No typedef but assuming types. + // // No fixer. + // code: "var foo = function(x) { f(x); }", + // optionsSet: [[{ assumeTypes: { allowFixer: false } }]], + // errors: [ + // { + // messageId: "generic", + // type: "ArrowFunctionExpression", + // line: 1, + // column: 13, + // }, + // ], + // }, + // { + // // No typedef but assuming types. + // // With fixer. + // code: "var foo = function(x) { f(x); }", + // optionsSet: [[{ assumeTypes: { allowFixer: true } }]], + // output: dedent` + // var foo = f;`, + // errors: [ + // { + // messageId: "generic", + // type: "ArrowFunctionExpression", + // line: 1, + // column: 13, + // }, + // ], + // }, +]; + +export default tests; diff --git a/tests/rules/prefer-tacit/es3/valid.ts b/tests/rules/prefer-tacit/es3/valid.ts new file mode 100644 index 000000000..d33f71468 --- /dev/null +++ b/tests/rules/prefer-tacit/es3/valid.ts @@ -0,0 +1,16 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + // No typedef for `f` therefore no error (when not assuming types). + code: "function foo(x) { f(x); }", + optionsSet: [[]], + }, + { + // No typedef for `f` therefore no error (when not assuming types). + code: "var foo = function(x) { f(x); }", + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/prefer-tacit/es6/index.ts b/tests/rules/prefer-tacit/es6/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/prefer-tacit/es6/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/prefer-tacit/es6/invalid.ts b/tests/rules/prefer-tacit/es6/invalid.ts new file mode 100644 index 000000000..b39d623ef --- /dev/null +++ b/tests/rules/prefer-tacit/es6/invalid.ts @@ -0,0 +1,56 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + // No typedef but assuming types. + // No fixer. + code: `const foo = x => f(x);`, + optionsSet: [[{ assumeTypes: { allowFixer: false } }]], + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 1, + column: 13, + }, + ], + }, + { + // No typedef but assuming types. + // With fixer. + code: `const foo = x => f(x);`, + optionsSet: [[{ assumeTypes: { allowFixer: true } }]], + output: dedent` + const foo = f;`, + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 1, + column: 13, + }, + ], + }, + // Default parameters. + { + code: dedent` + function f(x, y = 10) {} + const foo = x => f(x);`, + optionsSet: [[{ assumeTypes: { allowFixer: true } }]], + output: dedent` + function f(x, y = 10) {} + const foo = f;`, + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 2, + column: 13, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/prefer-tacit/es6/valid.ts b/tests/rules/prefer-tacit/es6/valid.ts new file mode 100644 index 000000000..81bbdb06b --- /dev/null +++ b/tests/rules/prefer-tacit/es6/valid.ts @@ -0,0 +1,11 @@ +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + { + // No typedef for `f` therefore no error (when not assuming types). + code: `const foo = x => f(x);`, + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/prefer-tacit/index.test.ts b/tests/rules/prefer-tacit/index.test.ts new file mode 100644 index 000000000..81454a90b --- /dev/null +++ b/tests/rules/prefer-tacit/index.test.ts @@ -0,0 +1,11 @@ +import { name, rule } from "~/rules/prefer-tacit"; +import { testUsing } from "~/tests/helpers/testers"; + +import es3Tests from "./es3"; +import es6Tests from "./es6"; +import tsTests from "./ts"; + +testUsing.typescript(name, rule, tsTests); + +testUsing.es6(name, rule, es6Tests); +testUsing.es3(name, rule, es3Tests); diff --git a/tests/rules/prefer-tacit/ts/index.ts b/tests/rules/prefer-tacit/ts/index.ts new file mode 100644 index 000000000..40a005f71 --- /dev/null +++ b/tests/rules/prefer-tacit/ts/index.ts @@ -0,0 +1,7 @@ +import invalid from "./invalid"; +import valid from "./valid"; + +export default { + valid, + invalid, +}; diff --git a/tests/rules/prefer-tacit/ts/invalid.ts b/tests/rules/prefer-tacit/ts/invalid.ts new file mode 100644 index 000000000..3f1989ccb --- /dev/null +++ b/tests/rules/prefer-tacit/ts/invalid.ts @@ -0,0 +1,100 @@ +import dedent from "dedent"; + +import type { InvalidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // FunctionDeclaration. + { + code: dedent` + function f(x) {} + const foo = x => f(x);`, + optionsSet: [[]], + output: dedent` + function f(x) {} + const foo = f;`, + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 2, + column: 13, + }, + ], + }, + // FunctionExpression. + { + code: dedent` + const f = function(x) {} + const foo = x => f(x);`, + optionsSet: [[]], + output: dedent` + const f = function(x) {} + const foo = f;`, + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 2, + column: 13, + }, + ], + }, + // ArrowFunction. + { + code: dedent` + const f = x => {} + const foo = x => f(x);`, + optionsSet: [[]], + output: dedent` + const f = x => {} + const foo = f;`, + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 2, + column: 13, + }, + ], + }, + // TypeAlias. + { + code: dedent` + type F = (x) => {}; + const f = undefined as unknown as F; + const foo = x => f(x);`, + optionsSet: [[]], + output: dedent` + type F = (x) => {}; + const f = undefined as unknown as F; + const foo = f;`, + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 3, + column: 13, + }, + ], + }, + // Optional parameters. + { + code: dedent` + function f(x: number, y?: number) {} + const foo = x => f(x);`, + optionsSet: [[]], + output: dedent` + function f(x: number, y?: number) {} + const foo = f;`, + errors: [ + { + messageId: "generic", + type: "ArrowFunctionExpression", + line: 2, + column: 13, + }, + ], + }, +]; + +export default tests; diff --git a/tests/rules/prefer-tacit/ts/valid.ts b/tests/rules/prefer-tacit/ts/valid.ts new file mode 100644 index 000000000..0938daf37 --- /dev/null +++ b/tests/rules/prefer-tacit/ts/valid.ts @@ -0,0 +1,37 @@ +import dedent from "dedent"; + +import type { ValidTestCase } from "~/tests/helpers/util"; + +const tests: ReadonlyArray = [ + // FunctionDeclaration. + { + code: dedent` + function f(x, y) {} + const foo = x => f(x);`, + optionsSet: [[]], + }, + // FunctionExpression. + { + code: dedent` + const f = function(x, y) {} + const foo = x => f(x);`, + optionsSet: [[]], + }, + // ArrowFunction. + { + code: dedent` + const f = (x, y) => {} + const foo = x => f(x);`, + optionsSet: [[]], + }, + // TypeAlias. + { + code: dedent` + type F = (x, y) => {}; + const f = undefined as unknown as F; + const foo = x => f(x);`, + optionsSet: [[]], + }, +]; + +export default tests; diff --git a/tests/rules/prefer-type-literal.test.ts b/tests/rules/prefer-type-literal.test.ts deleted file mode 100644 index 8e6378003..000000000 --- a/tests/rules/prefer-type-literal.test.ts +++ /dev/null @@ -1,104 +0,0 @@ -/** - * @file Tests for prefer-type-literal. - */ - -import dedent from "dedent"; -import { RuleTester } from "eslint"; - -import { name, rule } from "../../src/rules/prefer-type-literal"; - -import { typescript } from "../helpers/configs"; -import { - describeTsOnly, - InvalidTestCase, - processInvalidTestCase, - processValidTestCase, - ValidTestCase, -} from "../helpers/util"; - -// Valid test cases. -const valid: ReadonlyArray = []; - -// Invalid test cases. -const invalid: ReadonlyArray = [ - { - code: dedent` - interface Foo {}`, - optionsSet: [[]], - output: dedent` - type Foo = {};`, - errors: [ - { - messageId: "generic", - type: "TSInterfaceDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - interface Foo { - prop: string; - }`, - optionsSet: [[]], - output: dedent` - type Foo = { - prop: string; - };`, - errors: [ - { - messageId: "generic", - type: "TSInterfaceDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - interface Foo extends Bar { - prop: string; - }`, - optionsSet: [[]], - output: dedent` - type Foo = Bar & { - prop: string; - };`, - errors: [ - { - messageId: "generic", - type: "TSInterfaceDeclaration", - line: 1, - column: 1, - }, - ], - }, - { - code: dedent` - interface Foo extends Bar, Baz { - prop: string; - }`, - optionsSet: [[]], - output: dedent` - type Foo = Bar & Baz & { - prop: string; - };`, - errors: [ - { - messageId: "generic", - type: "TSInterfaceDeclaration", - line: 1, - column: 1, - }, - ], - }, -]; - -describeTsOnly("TypeScript", () => { - const ruleTester = new RuleTester(typescript); - ruleTester.run(name, rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), - }); -}); diff --git a/tests/rules/_work.test.ts b/tests/rules/work.test.ts similarity index 68% rename from tests/rules/_work.test.ts rename to tests/rules/work.test.ts index 4d502631e..f17b5f40c 100644 --- a/tests/rules/_work.test.ts +++ b/tests/rules/work.test.ts @@ -4,20 +4,14 @@ */ import dedent from "dedent"; -import { - ValidTestCase, - InvalidTestCase, - processValidTestCase, - processInvalidTestCase, -} from "../helpers/util"; -import { typescript } from "../helpers/configs"; -import { RuleTester } from "eslint"; +import type { ValidTestCase, InvalidTestCase } from "../helpers/util"; +import { testUsing } from "~/tests/helpers/testers"; /* * Step 1. * Import the rule to test. */ -import { rule } from "../../src/rules/prefer-readonly-type"; +import { name, rule } from "~/rules/prefer-readonly-type"; /* * Step 2a. @@ -61,8 +55,7 @@ const invalid: ReadonlyArray = [ * Run test with `yarn test-work` or to debug in vscode, press F5 (with this * file open and focused). */ -const ruleTester = new RuleTester(typescript); -ruleTester.run("Work", rule, { - valid: processValidTestCase(valid), - invalid: processInvalidTestCase(invalid), +testUsing.typescript(name, rule, { + valid: valid, + invalid: invalid, }); diff --git a/tsconfig.base.json b/tsconfig.base.json index ba55de16b..66ce3cccc 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -7,12 +7,24 @@ "lib": [ "ESNext" ], + "baseUrl": ".", + "paths": { + "~/*": ["./*"], + "~/index": ["./src"], + "~/common/*": ["src/common/*"], + "~/configs/*": ["src/configs/*"], + "~/rules": ["src/rules"], + "~/rules/*": ["src/rules/*"], + "~/util/*": ["src/util/*"], + "~/conditional-imports/*": ["src/util/conditional-imports/*"], + "~/tests/*": ["tests/*"] + }, "module": "ESNext", "moduleResolution": "node", "newLine": "LF", "noEmitOnError": true, "resolveJsonModule": true, "strict": true, - "target": "ES2018", + "target": "ES2018" } } diff --git a/tsconfig.json b/tsconfig.json index 098c0735d..3f9f47e68 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "./tsconfig.base.json", "compilerOptions": { - "rootDir": "./src", + "rootDir": ".", "removeComments": true }, "exclude": [ diff --git a/yarn.lock b/yarn.lock index a53ba9a12..a9efabffc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,14 +4,47 @@ "@babel/code-frame@7.12.11", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== dependencies: "@babel/highlight" "^7.10.4" -"@babel/core@^7.1.0", "@babel/core@^7.7.5": +"@babel/code-frame@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + +"@babel/compat-data@^7.14.5": + version "7.14.7" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz" + integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== + +"@babel/core@^7.12.16": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.8.tgz" + integrity sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.8" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.8" + "@babel/helpers" "^7.14.8" + "@babel/parser" "^7.14.8" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/core@^7.7.5": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz" integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== dependencies: "@babel/code-frame" "^7.10.4" @@ -30,48 +63,113 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/eslint-parser@^7.12.16": + version "7.14.7" + resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.14.7.tgz" + integrity sha512-6WPwZqO5priAGIwV6msJcdc9TsEPzYeYdS/Xuoap+/ihkgN6dzHp2bcAAwyWZ5bLzk0vvjDmKvRwkqNaiJ8BiQ== + dependencies: + eslint-scope "^5.1.1" + eslint-visitor-keys "^2.1.0" + semver "^6.3.0" + "@babel/generator@^7.12.10": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.12.10.tgz" integrity sha512-6mCdfhWgmqLdtTkhXjnIz0LcdVCd26wS2JXRtj2XY0u5klDsXBREA/pG5NVOuVnF2LUrBGNFtQkIqqTbblg0ww== dependencies: "@babel/types" "^7.12.10" jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.8.tgz" + integrity sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg== + dependencies: + "@babel/types" "^7.14.8" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-compilation-targets@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== + dependencies: + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-function-name@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz" integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== dependencies: "@babel/helper-get-function-arity" "^7.10.4" "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-get-function-arity@^7.10.4": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz" integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== dependencies: "@babel/types" "^7.12.10" +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-member-expression-to-functions@^7.12.1": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz" integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== dependencies: "@babel/types" "^7.12.7" +"@babel/helper-member-expression-to-functions@^7.14.5": + version "7.14.7" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-module-imports@^7.12.1": version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz" integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== dependencies: "@babel/types" "^7.12.5" +"@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-module-transforms@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz" integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== dependencies: "@babel/helper-module-imports" "^7.12.1" @@ -84,21 +182,37 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.8.tgz" + integrity sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-simple-access" "^7.14.8" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.8" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz" integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== dependencies: "@babel/types" "^7.12.10" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" "@babel/helper-replace-supers@^7.12.1": version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz" integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== dependencies: "@babel/helper-member-expression-to-functions" "^7.12.1" @@ -106,144 +220,126 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" +"@babel/helper-replace-supers@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz" + integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-simple-access@^7.12.1": version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz" integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== dependencies: "@babel/types" "^7.12.1" +"@babel/helper-simple-access@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz" + integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== + dependencies: + "@babel/types" "^7.14.8" + "@babel/helper-split-export-declaration@^7.11.0": version "7.11.0" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz" integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== dependencies: "@babel/types" "^7.11.0" +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-validator-identifier@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.8.tgz" + integrity sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow== + +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + "@babel/helpers@^7.12.5": version "7.12.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz" integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== dependencies: "@babel/template" "^7.10.4" "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" +"@babel/helpers@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz" + integrity sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw== + dependencies: + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.8" + "@babel/types" "^7.14.8" + "@babel/highlight@^7.10.4": version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz" integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== dependencies: "@babel/helper-validator-identifier" "^7.10.4" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": - version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.10.tgz#824600d59e96aea26a5a2af5a9d812af05c3ae81" - integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" - integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" +"@babel/parser@^7.12.10", "@babel/parser@^7.12.7", "@babel/parser@^7.7.0": + version "7.12.10" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.12.10.tgz" + integrity sha512-PJdRPwyoOqFAWfLytxrWwGrAxghCgh/yTNCYciOz8QgjflA7aZhECPZAa2VUedKg2+QMWkI0L9lynh2SNmNEgA== -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.12.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" - integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" +"@babel/parser@^7.14.5", "@babel/parser@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.8.tgz" + integrity sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA== -"@babel/template@^7.10.4", "@babel/template@^7.12.7", "@babel/template@^7.3.3": +"@babel/template@^7.10.4", "@babel/template@^7.12.7": version "7.12.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz" integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== dependencies: "@babel/code-frame" "^7.10.4" "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0": +"@babel/template@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5", "@babel/traverse@^7.7.0": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.10.tgz#2d1f4041e8bf42ea099e5b2dc48d6a594c00017a" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.10.tgz" integrity sha512-6aEtf0IeRgbYWzta29lePeYSk+YAFIC3kyqESeft8o5CkFlYIMX+EQDDWEiAQ9LHOA3d0oHdgrSsID/CKqXJlg== dependencies: "@babel/code-frame" "^7.10.4" @@ -256,32 +352,58 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0": +"@babel/traverse@^7.14.5", "@babel/traverse@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.8.tgz" + integrity sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.8" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.14.8" + "@babel/types" "^7.14.8" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.7.0": version "7.12.10" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.10.tgz#7965e4a7260b26f09c56bcfcb0498af1f6d9b260" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.12.10.tgz" integrity sha512-sf6wboJV5mGyip2hIpDSKsr80RszPinEFjsHTalMxZAZkoQ2/2yQzxlcFN52SJqsyPfLtPmenL4g2KB3KJXPDw== dependencies: "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.19" to-fast-properties "^2.0.0" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@babel/types@^7.14.5", "@babel/types@^7.14.8": + version "7.14.8" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.8.tgz" + integrity sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q== + dependencies: + "@babel/helper-validator-identifier" "^7.14.8" + to-fast-properties "^2.0.0" + +"@concordance/react@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@concordance/react/-/react-2.0.0.tgz#aef913f27474c53731f4fd79cc2f54897de90fde" + integrity sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA== + dependencies: + arrify "^1.0.1" -"@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== +"@es-joy/jsdoccomment@0.9.0-alpha.1": + version "0.9.0-alpha.1" + resolved "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.9.0-alpha.1.tgz" + integrity sha512-Clxxc0PwpISoYYBibA+1L2qFJ7gvFVhI2Hos87S06K+Q0cXdOhZQJNKWuaQGPAeHjZEuUB/YoWOfwjuF2wirqA== dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + comment-parser "1.1.6-beta.0" + esquery "^1.4.0" + jsdoc-type-pratt-parser "1.0.4" -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: ajv "^6.12.4" debug "^4.1.1" @@ -293,9 +415,23 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== dependencies: camelcase "^5.3.1" @@ -304,185 +440,21 @@ js-yaml "^3.13.1" resolve-from "^5.0.0" +"@istanbuljs/nyc-config-typescript@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.1.tgz#55172f5663b3635586add21b14d42ca94a163d58" + integrity sha512-/gz6LgVpky205LuoOfwEZmnUtaSmdk0QIMcNFj9OvxhiMhPpKftMgZmGN7jNj7jR+lr8IB1Yks3QSSSNSxfoaQ== + dependencies: + "@istanbuljs/schema" "^0.1.2" + "@istanbuljs/schema@^0.1.2": version "0.1.2" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.6.2.tgz#4e04bc464014358b03ab4937805ee36a0aeb98f2" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" - -"@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.6.3.tgz#7639fcb3833d748a4656ada54bde193051e45fad" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/reporters" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.6.2.tgz#ba364cc72e221e79cc8f0a99555bf5d7577cf92c" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== - dependencies: - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - -"@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.6.2.tgz#459c329bcf70cee4af4d7e3f3e67848123535aad" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== - dependencies: - "@jest/types" "^26.6.2" - "@sinonjs/fake-timers" "^6.0.1" - "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -"@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.6.2.tgz#5b613b78a1aa2655ae908eba638cc96a20df720a" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/types" "^26.6.2" - expect "^26.6.2" - -"@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.6.2.tgz#1f518b99637a5f18307bd3ecf9275f6882a667f6" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" - optionalDependencies: - node-notifier "^8.0.0" - -"@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.6.2.tgz#29af5e1e2e324cafccc936f218309f54ab69d535" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.6.2.tgz#55da58b62df134576cc95476efa5f7949e3f5f18" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz#98e8a45100863886d074205e8ffdc5a7eb582b17" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== - dependencies: - "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - -"@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.6.2.tgz#5ac57c5fa1ad17b2aae83e73e45813894dcf2e4b" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - "@nodelib/fs.scandir@2.1.3": version "2.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz" integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== dependencies: "@nodelib/fs.stat" "2.0.3" @@ -490,20 +462,27 @@ "@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": version "2.0.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz" integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== "@nodelib/fs.walk@^1.2.3": version "1.2.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz" integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== dependencies: "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" +"@rebeccastevens/eslint-config@^1.0.12": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@rebeccastevens/eslint-config/-/eslint-config-1.0.12.tgz#d3f2ebfc6f03c63eddb450c26ef30f43edd4f715" + integrity sha512-uUBUBbYMLlilC5kSdo8eJLdO/Sk5wvODBM14iemm8VM5KXvELXqagtqxigA4xmlrZFSXXGpFz7c85WifwsstEg== + dependencies: + deepmerge "^4.0.0" + "@rollup/plugin-commonjs@^17.0.0": version "17.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz#757ec88737dffa8aa913eb392fade2e45aef2a2d" + resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz" integrity sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -516,14 +495,14 @@ "@rollup/plugin-json@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz" integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== dependencies: "@rollup/pluginutils" "^3.0.8" "@rollup/plugin-node-resolve@^11.0.0": version "11.2.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz#a5ab88c35bb7622d115f44984dee305112b6f714" + resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz" integrity sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -535,7 +514,7 @@ "@rollup/plugin-typescript@^8.0.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.1.0.tgz#b7bbbbb4fd1324834f37844efd48b3844d912742" + resolved "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.1.0.tgz" integrity sha512-pyQlcGQYRsONUDwXK3ckGPHjPzmjlq4sinzr7emW8ZMb2oZjg9WLcdcP8wyHSvBjvHrLzMayyPy079RROqb4vw== dependencies: "@rollup/pluginutils" "^3.1.0" @@ -543,73 +522,58 @@ "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz" integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== dependencies: "@types/estree" "0.0.39" estree-walker "^1.0.1" picomatch "^2.2.2" -"@sinonjs/commons@^1.7.0": - version "1.8.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217" - integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw== - dependencies: - type-detect "4.0.8" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== dependencies: - "@sinonjs/commons" "^1.7.0" + defer-to-connect "^1.0.1" "@tootallnate/once@1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.12" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" - integrity sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== -"@types/babel__generator@*": - version "7.6.2" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.2.tgz#f3d71178e187858f7c45e30380f8f1b7415a12d8" - integrity sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ== - dependencies: - "@babel/types" "^7.0.0" +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== -"@types/babel__template@*": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.0.tgz#0c888dd70b3ee9eebb6e4f200e809da0076262be" - integrity sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.11.0" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.11.0.tgz#b9a1efa635201ba9bc850323a8793ee2d36c04a0" - integrity sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg== - dependencies: - "@babel/types" "^7.3.0" +"@tsconfig/node16@^1.0.1": + version "1.0.2" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz" + integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== "@types/dedent@^0.7.0": version "0.7.0" - resolved "https://registry.yarnpkg.com/@types/dedent/-/dedent-0.7.0.tgz#155f339ca404e6dd90b9ce46a3f78fd69ca9b050" + resolved "https://registry.npmjs.org/@types/dedent/-/dedent-0.7.0.tgz" integrity sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A== "@types/eslint@^7.2.6": version "7.2.10" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.2.10.tgz#4b7a9368d46c0f8cd5408c23288a59aa2394d917" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz" integrity sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ== dependencies: "@types/estree" "*" @@ -617,144 +581,106 @@ "@types/estree@*", "@types/estree@^0.0.46": version "0.0.46" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz" integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== "@types/estree@0.0.39": version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/glob@^7.1.1": version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz" integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== dependencies: "@types/minimatch" "*" "@types/node" "*" -"@types/graceful-fs@^4.1.2": - version "4.1.4" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.4.tgz#4ff9f641a7c6d1a3508ff88bc3141b152772e753" - integrity sha512-mWA/4zFQhfvOA8zWkXobwJvBD7vzcxgrOQ0J5CH1votGqdq9m7+FwtGaqyCZqC3NyyBkc9z4m+iry4LlqcMWJg== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821" - integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@26.x", "@types/jest@^26.0.19": - version "26.0.23" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.23.tgz#a1b7eab3c503b80451d019efb588ec63522ee4e7" - integrity sha512-ZHLmWMJ9jJ9PTiT58juykZpL7KjwJywFN3Rr2pTSkyQfydf/rk22yS7W8p5DaVUMQ2BQC7oYiU3FjbTM/mYrOA== - dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.7": +"@types/json-schema@*", "@types/json-schema@^7.0.7": version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== "@types/json5@^0.0.29": version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/mdast@^3.0.0": + version "3.0.7" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.7.tgz" + integrity sha512-YwR7OK8aPmaBvMMUi+pZXBNoW2unbVbfok4YRqGMJBe1dpDlzpRkJrYEYmvjxgs5JhuQmKfDexrN98u941Zasg== + dependencies: + "@types/unist" "*" + "@types/minimatch@*": version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== "@types/node@*", "@types/node@15.0.1": version "15.0.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-15.0.1.tgz#ef34dea0881028d11398be5bf4e856743e3dc35a" + resolved "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz" integrity sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA== "@types/normalize-package-data@^2.4.0": version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/prettier@^2.0.0": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.5.tgz#b6ab3bba29e16b821d84e09ecfaded462b816b00" - integrity sha512-UEyp8LwZ4Dg30kVU2Q3amHHyTn1jEdhCIE59ANed76GaT1Vp76DD3ZWSAxgCrw6wJ0TqeoBpqmfUHiUDPs//HQ== - "@types/resolve@1.17.1": version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz" integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== dependencies: "@types/node" "*" -"@types/stack-utils@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" - integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== +"@types/rollup-plugin-auto-external@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@types/rollup-plugin-auto-external/-/rollup-plugin-auto-external-2.0.2.tgz" + integrity sha512-1Xtl9S4yQapD+A4mX1sqYVXm3UmVA9oIEf2YKEhRTCUNxlAM3DoKK1HPxrGMemDJNfhe6Yl3w0JsAGvIN5j/ow== + dependencies: + rollup ">=2.0.0" -"@types/yargs-parser@*": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" - integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== +"@types/unist@*", "@types/unist@^2.0.2": + version "2.0.6" + resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/yargs@^15.0.0": - version "15.0.11" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.11.tgz#361d7579ecdac1527687bcebf9946621c12ab78c" - integrity sha512-jfcNBxHFYJ4nPIacsi3woz1+kvUO6s1CyeEhtnDHBjHUMNj5UlW2GynmnSgiJJEdNg9yW5C8lfoNRZrHGv5EqA== +"@typescript-eslint/eslint-plugin@^4.28.4": + version "4.28.4" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz" + integrity sha512-s1oY4RmYDlWMlcV0kKPBaADn46JirZzvvH7c2CtAqxCY96S538JRBAzt83RrfkDheV/+G/vWNK0zek+8TB3Gmw== dependencies: - "@types/yargs-parser" "*" + "@typescript-eslint/experimental-utils" "4.28.4" + "@typescript-eslint/scope-manager" "4.28.4" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" -"@typescript-eslint/eslint-plugin@^4.9.1": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.20.0.tgz#9d8794bd99aad9153092ad13c96164e3082e9a92" - integrity sha512-sw+3HO5aehYqn5w177z2D82ZQlqHCwcKSMboueo7oE4KU9QiC0SAgfS/D4z9xXvpTc8Bt41Raa9fBR8T2tIhoQ== +"@typescript-eslint/experimental-utils@4.28.4": + version "4.28.4" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.4.tgz" + integrity sha512-OglKWOQRWTCoqMSy6pm/kpinEIgdcXYceIcH3EKWUl4S8xhFtN34GQRaAvTIZB9DD94rW7d/U7tUg3SYeDFNHA== dependencies: - "@typescript-eslint/experimental-utils" "4.20.0" - "@typescript-eslint/scope-manager" "4.20.0" - debug "^4.1.1" - functional-red-black-tree "^1.0.1" - lodash "^4.17.15" - regexpp "^3.0.0" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.20.0.tgz#a8ab2d7b61924f99042b7d77372996d5f41dc44b" - integrity sha512-sQNlf6rjLq2yB5lELl3gOE7OuoA/6IVXJUJ+Vs7emrQMva14CkOwyQwD7CW+TkmOJ4Q/YGmoDLmbfFrpGmbKng== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/scope-manager" "4.20.0" - "@typescript-eslint/types" "4.20.0" - "@typescript-eslint/typescript-estree" "4.20.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.28.4" + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/typescript-estree" "4.28.4" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" -"@typescript-eslint/experimental-utils@^4.0.1", "@typescript-eslint/experimental-utils@^4.9.1": +"@typescript-eslint/experimental-utils@^4.9.1": version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz#3869489dcca3c18523c46018b8996e15948dbadc" + resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.28.1.tgz" integrity sha512-n8/ggadrZ+uyrfrSEchx3jgODdmcx7MzVM2sI3cTpI/YlfSm0+9HEUaWw3aQn2urL2KYlWYMDgn45iLfjDYB+Q== dependencies: "@types/json-schema" "^7.0.7" @@ -764,85 +690,45 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/parser@^4.9.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.11.1.tgz#981e18de2e019d6ca312596615f92e8f6f6598ed" - integrity sha512-BJ3jwPQu1jeynJ5BrjLuGfK/UJu6uwHxJ/di7sanqmUmxzmyIcd3vz58PMR7wpi8k3iWq2Q11KMYgZbUpRoIPw== - dependencies: - "@typescript-eslint/scope-manager" "4.11.1" - "@typescript-eslint/types" "4.11.1" - "@typescript-eslint/typescript-estree" "4.11.1" - debug "^4.1.1" - -"@typescript-eslint/scope-manager@4.11.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.11.1.tgz#72dc2b60b0029ab0888479b12bf83034920b4b69" - integrity sha512-Al2P394dx+kXCl61fhrrZ1FTI7qsRDIUiVSuN6rTwss6lUn8uVO2+nnF4AvO0ug8vMsy3ShkbxLu/uWZdTtJMQ== - dependencies: - "@typescript-eslint/types" "4.11.1" - "@typescript-eslint/visitor-keys" "4.11.1" - -"@typescript-eslint/scope-manager@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.20.0.tgz#953ecbf3b00845ece7be66246608be9d126d05ca" - integrity sha512-/zm6WR6iclD5HhGpcwl/GOYDTzrTHmvf8LLLkwKqqPKG6+KZt/CfSgPCiybshmck66M2L5fWSF/MKNuCwtKQSQ== +"@typescript-eslint/parser@^4.28.4": + version "4.28.4" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.28.4.tgz" + integrity sha512-4i0jq3C6n+og7/uCHiE6q5ssw87zVdpUj1k6VlVYMonE3ILdFApEzTWgppSRG4kVNB/5jxnH+gTeKLMNfUelQA== dependencies: - "@typescript-eslint/types" "4.20.0" - "@typescript-eslint/visitor-keys" "4.20.0" + "@typescript-eslint/scope-manager" "4.28.4" + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/typescript-estree" "4.28.4" + debug "^4.3.1" "@typescript-eslint/scope-manager@4.28.1": version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz#fd3c20627cdc12933f6d98b386940d8d0ce8a991" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.1.tgz" integrity sha512-o95bvGKfss6705x7jFGDyS7trAORTy57lwJ+VsYwil/lOUxKQ9tA7Suuq+ciMhJc/1qPwB3XE2DKh9wubW8YYA== dependencies: "@typescript-eslint/types" "4.28.1" "@typescript-eslint/visitor-keys" "4.28.1" -"@typescript-eslint/types@4.11.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.11.1.tgz#3ba30c965963ef9f8ced5a29938dd0c465bd3e05" - integrity sha512-5kvd38wZpqGY4yP/6W3qhYX6Hz0NwUbijVsX2rxczpY6OXaMxh0+5E5uLJKVFwaBM7PJe1wnMym85NfKYIh6CA== - -"@typescript-eslint/types@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.20.0.tgz#c6cf5ef3c9b1c8f699a9bbdafb7a1da1ca781225" - integrity sha512-cYY+1PIjei1nk49JAPnH1VEnu7OYdWRdJhYI5wiKOUMhLTG1qsx5cQxCUTuwWCmQoyriadz3Ni8HZmGSofeC+w== +"@typescript-eslint/scope-manager@4.28.4": + version "4.28.4" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.28.4.tgz" + integrity sha512-ZJBNs4usViOmlyFMt9X9l+X0WAFcDH7EdSArGqpldXu7aeZxDAuAzHiMAeI+JpSefY2INHrXeqnha39FVqXb8w== + dependencies: + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/visitor-keys" "4.28.4" "@typescript-eslint/types@4.28.1": version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.1.tgz#d0f2ecbef3684634db357b9bbfc97b94b828f83f" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.1.tgz" integrity sha512-4z+knEihcyX7blAGi7O3Fm3O6YRCP+r56NJFMNGsmtdw+NCdpG5SgNz427LS9nQkRVTswZLhz484hakQwB8RRg== -"@typescript-eslint/typescript-estree@4.11.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.11.1.tgz#a4416b4a65872a48773b9e47afabdf7519eb10bc" - integrity sha512-tC7MKZIMRTYxQhrVAFoJq/DlRwv1bnqA4/S2r3+HuHibqvbrPcyf858lNzU7bFmy4mLeIHFYr34ar/1KumwyRw== - dependencies: - "@typescript-eslint/types" "4.11.1" - "@typescript-eslint/visitor-keys" "4.11.1" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@typescript-eslint/typescript-estree@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.20.0.tgz#8b3b08f85f18a8da5d88f65cb400f013e88ab7be" - integrity sha512-Knpp0reOd4ZsyoEJdW8i/sK3mtZ47Ls7ZHvD8WVABNx5Xnn7KhenMTRGegoyMTx6TiXlOVgMz9r0pDgXTEEIHA== - dependencies: - "@typescript-eslint/types" "4.20.0" - "@typescript-eslint/visitor-keys" "4.20.0" - debug "^4.1.1" - globby "^11.0.1" - is-glob "^4.0.1" - semver "^7.3.2" - tsutils "^3.17.1" +"@typescript-eslint/types@4.28.4": + version "4.28.4" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.28.4.tgz" + integrity sha512-3eap4QWxGqkYuEmVebUGULMskR6Cuoc/Wii0oSOddleP4EGx1tjLnZQ0ZP33YRoMDCs5O3j56RBV4g14T4jvww== "@typescript-eslint/typescript-estree@4.28.1": version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz#af882ae41740d1f268e38b4d0fad21e7e8d86a81" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.1.tgz" integrity sha512-GhKxmC4sHXxHGJv8e8egAZeTZ6HI4mLU6S7FUzvFOtsk7ZIDN1ksA9r9DyOgNqowA9yAtZXV0Uiap61bIO81FQ== dependencies: "@typescript-eslint/types" "4.28.1" @@ -853,81 +739,78 @@ semver "^7.3.5" tsutils "^3.21.0" -"@typescript-eslint/visitor-keys@4.11.1": - version "4.11.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.11.1.tgz#4c050a4c1f7239786e2dd4e69691436143024e05" - integrity sha512-IrlBhD9bm4bdYcS8xpWarazkKXlE7iYb1HzRuyBP114mIaj5DJPo11Us1HgH60dTt41TCZXMaTCAW+OILIYPOg== - dependencies: - "@typescript-eslint/types" "4.11.1" - eslint-visitor-keys "^2.0.0" - -"@typescript-eslint/visitor-keys@4.20.0": - version "4.20.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.20.0.tgz#1e84db034da13f208325e6bfc995c3b75f7dbd62" - integrity sha512-NXKRM3oOVQL8yNFDNCZuieRIwZ5UtjNLYtmMx2PacEAGmbaEYtGgVHUHVyZvU/0rYZcizdrWjDo+WBtRPSgq+A== +"@typescript-eslint/typescript-estree@4.28.4": + version "4.28.4" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.4.tgz" + integrity sha512-z7d8HK8XvCRyN2SNp+OXC2iZaF+O2BTquGhEYLKLx5k6p0r05ureUtgEfo5f6anLkhCxdHtCf6rPM1p4efHYDQ== dependencies: - "@typescript-eslint/types" "4.20.0" - eslint-visitor-keys "^2.0.0" + "@typescript-eslint/types" "4.28.4" + "@typescript-eslint/visitor-keys" "4.28.4" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" "@typescript-eslint/visitor-keys@4.28.1": version "4.28.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz#162a515ee255f18a6068edc26df793cdc1ec9157" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.1.tgz" integrity sha512-K4HMrdFqr9PFquPu178SaSb92CaWe2yErXyPumc8cYWxFmhgJsNY9eSePmO05j0JhBvf2Cdhptd6E6Yv9HVHcg== dependencies: "@typescript-eslint/types" "4.28.1" eslint-visitor-keys "^2.0.0" -abab@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== +"@typescript-eslint/visitor-keys@4.28.4": + version "4.28.4" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.4.tgz" + integrity sha512-NIAXAdbz1XdOuzqkJHjNKXKj8QQ4cv5cxR/g0uQhCYf/6//XrmfpaYsM7PnBcNbfvTDLUkqQ5TPNm1sozDdTWg== dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" + "@typescript-eslint/types" "4.28.4" + eslint-visitor-keys "^2.0.0" acorn-jsx@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== +acorn-walk@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.1.1.tgz#3ddab7f84e4a7e2313f6c414c5b7dac85f4e3ebc" + integrity sha512-FbJdceMlPHEAWJOILDk1fXD8lnTlEIWFkqtfk+MvmL5q/qlHfN7GEHcsFZWt/Tea9jRNPWUZG4G976nqAAmU9w== -acorn@^7.1.1, acorn@^7.4.0: +acorn@^7.4.0: version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.4, acorn@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" + integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== + agent-base@5: version "5.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== agent-base@6: version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: debug "4" aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -937,7 +820,7 @@ ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: ajv@^8.0.1: version "8.6.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz" integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== dependencies: fast-deep-equal "^3.1.1" @@ -945,180 +828,144 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + ansi-colors@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== -ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: +ansi-escapes@^4.3.0: version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + ansi-regex@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" + normalize-path "^3.0.0" + picomatch "^2.0.4" -anymatch@^2.0.0: +append-transform@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" + default-require-extensions "^3.0.0" -anymatch@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" argv@0.0.2: version "0.0.2" - resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab" + resolved "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz" integrity sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas= -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-includes@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-includes@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8" - integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - get-intrinsic "^1.0.1" - is-string "^1.0.5" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.3: +array.prototype.flat@^1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz" integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg== dependencies: call-bind "^1.0.0" define-properties "^1.1.3" es-abstract "^1.18.0-next.1" -array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" +arrgv@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arrgv/-/arrgv-1.0.2.tgz#025ed55a6a433cad9b604f8112fc4292715a6ec0" + integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-each@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - auto-changelog@^2.2.1: version "2.3.0" - resolved "https://registry.yarnpkg.com/auto-changelog/-/auto-changelog-2.3.0.tgz#08ab8b1840a5d804410f1d1a5d2c4b2df0d835e1" + resolved "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.3.0.tgz" integrity sha512-S2B+RtTgytsa7l5iFGBoWT9W9ylITT5JJ8OaMJ7nrwvnlRm1dSS2tghaYueDeInZZafOE+1llH3tUQjMDRVS1g== dependencies: commander "^5.0.0" @@ -1127,19 +974,71 @@ auto-changelog@^2.2.1: parse-github-url "^1.0.2" semver "^6.3.0" -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" - integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +ava@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/ava/-/ava-3.15.0.tgz#a239658ab1de8a29a243cc902e6b42e4574de2f0" + integrity sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA== + dependencies: + "@concordance/react" "^2.0.0" + acorn "^8.0.4" + acorn-walk "^8.0.0" + ansi-styles "^5.0.0" + arrgv "^1.0.2" + arrify "^2.0.1" + callsites "^3.1.0" + chalk "^4.1.0" + chokidar "^3.4.3" + chunkd "^2.0.1" + ci-info "^2.0.0" + ci-parallel-vars "^1.0.1" + clean-yaml-object "^0.1.0" + cli-cursor "^3.1.0" + cli-truncate "^2.1.0" + code-excerpt "^3.0.0" + common-path-prefix "^3.0.0" + concordance "^5.0.1" + convert-source-map "^1.7.0" + currently-unhandled "^0.4.1" + debug "^4.3.1" + del "^6.0.0" + emittery "^0.8.0" + equal-length "^1.0.0" + figures "^3.2.0" + globby "^11.0.1" + ignore-by-default "^2.0.0" + import-local "^3.0.2" + indent-string "^4.0.0" + is-error "^2.2.2" + is-plain-object "^5.0.0" + is-promise "^4.0.0" + lodash "^4.17.20" + matcher "^3.0.0" + md5-hex "^3.0.1" + mem "^8.0.0" + ms "^2.1.3" + ora "^5.2.0" + p-event "^4.2.0" + p-map "^4.0.0" + picomatch "^2.2.2" + pkg-conf "^3.1.0" + plur "^4.0.0" + pretty-ms "^7.0.1" + read-pkg "^5.2.0" + resolve-cwd "^3.0.0" + slash "^3.0.0" + source-map-support "^0.5.19" + stack-utils "^2.0.3" + strip-ansi "^6.0.0" + supertap "^2.0.0" + temp-dir "^2.0.0" + trim-off-newlines "^1.0.1" + update-notifier "^5.0.1" + write-file-atomic "^3.0.3" + yargs "^16.2.0" babel-eslint@^10.0.2: version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz" integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== dependencies: "@babel/code-frame" "^7.0.0" @@ -1149,241 +1048,164 @@ babel-eslint@^10.0.2: eslint-visitor-keys "^1.0.0" resolve "^1.12.0" -babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.6.3.tgz#d87d25cb0037577a0c89f82e5755c5d293c01056" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== - dependencies: - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz#8185bd030348d254c6d7dd974355e6a28b21e62d" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.0.tgz#cf5feef29551253471cfa82fc8e0f5063df07a77" - integrity sha512-mGkvkpocWJes1CmMKtgGUwCeeq0pOhALyymozzDWYomHTbDLwueDYG6p4TK1YOeYHCzBzYPsWkgTto10JubI1Q== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz#747872b1171df032252426586881d62d31798fee" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -babel-runtime@^6.9.2: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - balanced-match@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: - tweetnacl "^0.14.3" + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +blueimp-md5@^2.10.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.18.0.tgz#1152be1335f0c6b3911ed9e36db54f3e6ac52935" + integrity sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q== -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== +boxen@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b" + integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA== dependencies: - file-uri-to-path "1.0.0" + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.0" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== +browserslist@^4.16.6: + version "4.16.6" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== dependencies: - fast-json-stable-stringify "2.x" + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" +buf-compare@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buf-compare/-/buf-compare-1.0.1.tgz#fef28da8b8113a0a0db4430b0b6467b69730b34a" + integrity sha1-/vKNqLgROgoNtEMLC2Rntpcws0o= -buffer-from@1.x, buffer-from@^1.0.0: +buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +builtin-modules@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + builtin-modules@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz" integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== builtins@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-2.0.1.tgz#42a4d6fe38973a7c185b435970d13e5e70f70f3c" + resolved "https://registry.npmjs.org/builtins/-/builtins-2.0.1.tgz" integrity sha512-XkkVe5QAb6guWPXTzpSrYpSlN3nqEmrrE2TkAr/tp7idSF6+MONh9WvKrAuR3HiKLvoSgmbs8l1U9IPmMrIoLw== dependencies: semver "^6.0.0" -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" get-intrinsic "^1.0.2" -callsites@^3.0.0: +callsites@^3.0.0, callsites@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +caniuse-lite@^1.0.30001219: + version "1.0.30001246" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001246.tgz" + integrity sha512-Tc+ff0Co/nFNbLOrziBXmMVtpt9S2c2Y+Z9Nk9Khj09J+0zR9ejvIW5qkZAErCbOrVODCx/MN+GpB5FNBs5GFA== chalk@^2.0.0: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1392,68 +1214,99 @@ chalk@^2.0.0: chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== -chokidar@^1.6.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +chokidar@^3.4.3: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "^1.0.0" + fsevents "~2.3.2" + +chunkd@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/chunkd/-/chunkd-2.0.1.tgz#49cd1d7b06992dc4f7fccd962fe2a101ee7da920" + integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz#4186fcca0eae175970aee870b9fe2d6cf8d5655f" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== +ci-info@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz" + integrity sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A== + +ci-parallel-vars@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz#e87ff0625ccf9d286985b29b4ada8485ca9ffbc2" + integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== +clean-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz" + integrity sha1-jffHquUf02h06PjQW5GAvBGj/tc= dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + escape-string-regexp "^1.0.5" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +clean-yaml-object@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" + integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" @@ -1461,21 +1314,44 @@ cli-truncate@^2.1.0: cliui@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +code-excerpt@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-3.0.0.tgz#fcfb6748c03dba8431c19f5474747fad3f250f10" + integrity sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw== + dependencies: + convert-to-spaces "^1.0.1" codecov@^3.8.1: version "3.8.1" - resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.8.1.tgz#06fe026b75525ed1ce864d4a34f1010c52c51546" + resolved "https://registry.npmjs.org/codecov/-/codecov-3.8.1.tgz" integrity sha512-Qm7ltx1pzLPsliZY81jyaQ80dcNR4/JpcX0IHCIWrHBXgseySqbdbYfkdiXd7o/xmzQpGRVCKGYeTrHUpn6Dcw== dependencies: argv "0.0.2" @@ -1484,110 +1360,114 @@ codecov@^3.8.1: teeny-request "6.0.1" urlgrey "0.4.4" -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== commander@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== commander@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.0.tgz#b990bfb8ac030aedc6d11bc04d1488ffef56db75" + resolved "https://registry.npmjs.org/commander/-/commander-6.2.0.tgz" integrity sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q== -comment-parser@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.1.2.tgz#e5317d7a2ec22b470dcb54a29b25426c30bf39d8" - integrity sha512-AOdq0i8ghZudnYv8RUnHrhTgafUGs61Rdz9jemU5x2lnZwAWyOq7vySo626K59e1fVKH1xSRorJwPVRLSWOoAQ== +comment-parser@1.1.6-beta.0: + version "1.1.6-beta.0" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.1.6-beta.0.tgz" + integrity sha512-q3cA8TSMyqW7wcPSYWzbO/rMahnXgzs4SLG/UIWXdEsnXTFPZkEkWAdNgPiHig2OzxgpPLOh4WwsmClDxndwHw== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= +concordance@^5.0.1: + version "5.0.4" + resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" + integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== + dependencies: + date-time "^3.1.0" + esutils "^2.0.3" + fast-diff "^1.2.0" + js-string-escape "^1.0.1" + lodash "^4.17.15" + md5-hex "^3.0.1" + semver "^7.3.2" + well-known-symbols "^2.0.0" + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.7.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js@^2.4.0: - version "2.6.12" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" - integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== - -core-util-is@1.0.2, core-util-is@~1.0.0: +convert-to-spaces@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz#7e3e48bbe6d997b1417ddca2868204b4d3d85715" + integrity sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU= + +core-assert@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/core-assert/-/core-assert-0.2.1.tgz#f85e2cf9bfed28f773cc8b3fa5c5b69bdc02fe3f" + integrity sha1-+F4s+b/tKPdzzIs/pcW2m9wC/j8= + dependencies: + buf-compare "^1.0.0" + is-error "^2.2.0" cosmiconfig@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz" integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== dependencies: "@types/parse-json" "^4.0.0" @@ -1596,247 +1476,247 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -cpx@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/cpx/-/cpx-1.5.0.tgz#185be018511d87270dedccc293171e37655ab88f" - integrity sha1-GFvgGFEdhycN7czCkxceN2VauI8= - dependencies: - babel-runtime "^6.9.2" - chokidar "^1.6.0" - duplexer "^0.1.1" - glob "^7.0.5" - glob2base "^0.0.12" - minimatch "^3.0.2" - mkdirp "^0.5.1" - resolve "^1.1.7" - safe-buffer "^5.0.1" - shell-quote "^1.6.1" - subarg "^1.0.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= dependencies: - assert-plus "^1.0.0" + array-find-index "^1.0.1" -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== +date-time@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" + integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" + time-zone "^1.0.0" debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: +debug@^2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.0, debug@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decimal.js@^10.2.0: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" dedent@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= -deep-is@^0.1.3, deep-is@~0.1.3: +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deepmerge@^4.2.2: +deep-strict-equal@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz#4a078147a8ab57f6a0d4f5547243cd22f44eb4e4" + integrity sha1-SgeBR6irV/ag1PVUckPNIvROtOQ= + dependencies: + core-assert "^0.2.0" + +deepmerge@^4.0.0, deepmerge@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== dependencies: - object-keys "^1.0.12" + strip-bom "^4.0.0" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: - is-descriptor "^0.1.0" + clone "^1.0.2" -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + object-keys "^1.0.12" -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +del@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" + integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" - isarray "^1.0.0" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== dependencies: - webidl-conversions "^5.0.0" + is-obj "^2.0.0" -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" +electron-to-chromium@^1.3.723: + version "1.3.784" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.784.tgz" + integrity sha512-JTPxdUibkefeomWNaYs8lI/x/Zb4cOhZWX+d7kpzsNKzUd07pNuo/AcHeNJ/qgEchxM1IAxda9aaGUhKN/poOg== -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.2.tgz#25595908e13af0f5674ab419396e2fb394cdfa82" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== +emittery@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" + integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" +enhance-visitors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/enhance-visitors/-/enhance-visitors-1.0.0.tgz#aa945d05da465672a1ebd38fee2ed3da8518e95a" + integrity sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo= + dependencies: + lodash "^4.13.1" + enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== dependencies: ansi-colors "^4.1.1" -error-ex@^1.2.0, error-ex@^1.3.1: +equal-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/equal-length/-/equal-length-1.0.1.tgz#21ca112d48ab24b4e1e7ffc0e5339d31fdfc274c" + integrity sha1-IcoRLUirJLTh5//A5TOdMf38J0w= + +error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: +es-abstract@^1.18.0-next.1: version "1.18.0-next.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz" integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== dependencies: call-bind "^1.0.2" @@ -1854,153 +1734,300 @@ es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: string.prototype.trimend "^1.0.3" string.prototype.trimstart "^1.0.3" +es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.3" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escape-string-regexp@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^1.14.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" +eslint-ava-rule-tester@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-ava-rule-tester/-/eslint-ava-rule-tester-4.0.0.tgz#f64124bd971b256f77d6dbfdbf57bd770a0ea326" + integrity sha512-bR0ogk+1Orb/+rj17MyuRObhcepqAXnwQJUpPO0pdTLwwdzjOqzqyWl4o/kHQTnwCOwcGvkBPS59KVbbCFCVRg== eslint-config-prettier@^8.3.0: version "8.3.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz" integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== eslint-import-resolver-node@^0.3.4: version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz" integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== dependencies: debug "^2.6.9" resolve "^1.13.1" -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== +eslint-import-resolver-typescript@^2.4.0: + version "2.4.0" + resolved "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz" + integrity sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA== dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-eslint-plugin@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.3.0.tgz#1b6ffd13b74da5656e27106b79567b162984fc41" - integrity sha512-xER9XjfTLrAgoUzPguPKoreDGtXt2vUnwqAqdElNrkcSbl5K1rGtSOmhgbiqCb7UN4spnjNhIZplHMNWY6Kz/w== + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + +eslint-module-utils@^2.6.1: + version "2.6.1" + resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.1.tgz" + integrity sha512-ZXI9B8cxAJIH4nfkhTwcRTEAnrVfobYqwjWy/QMCZ8rHkZHFjf9yO4BzpiF9kCSfNlMG54eKigISHpX0+AaT4A== + dependencies: + debug "^3.2.7" + pkg-dir "^2.0.0" + +eslint-plugin-ava@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-ava/-/eslint-plugin-ava-12.0.0.tgz#451f0fe4a86db3b43e017db83401ea9de4221e52" + integrity sha512-v8/GY1IWQn2nOBdVtD/6e0Y6A9PRFjY86a1m5r5FUel+C7iyoQVt7gKqaAc1iRXcQkZq2DDG0aTiQptgnq51cA== + dependencies: + deep-strict-equal "^0.2.0" + enhance-visitors "^1.0.0" + eslint-utils "^2.1.0" + espree "^7.3.1" + espurify "^2.0.1" + import-modules "^2.1.0" + micro-spelling-correcter "^1.1.1" + pkg-dir "^5.0.0" + resolve-from "^5.0.0" -eslint-plugin-import@^2.22.1: - version "2.22.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" - integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== +eslint-plugin-es@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz" + integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" + eslint-utils "^2.0.0" + regexpp "^3.0.0" + +eslint-plugin-eslint-comments@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz" + integrity sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ== + dependencies: + escape-string-regexp "^1.0.5" + ignore "^5.0.5" + +eslint-plugin-eslint-plugin@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-3.4.0.tgz" + integrity sha512-oC+x2CGVUFfYx8WiXjddD1RA6Ng7hsVgPExgxy1mKaRZZFGP2jDaf6h08SOkRpP0LuNQTJ6bjdrLKxcwmB/TXQ== + dependencies: + eslint-utils "^2.1.0" + +eslint-plugin-import@^2.23.4: + version "2.23.4" + resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.23.4.tgz" + integrity sha512-6/wP8zZRsnQFiR3iaPFgh5ImVRM1WN5NUWfTIRqwOdeiGJlBcSk82o1FEVq8yXmy4lkIzTo7YhHCIxlU/2HyEQ== + dependencies: + array-includes "^3.1.3" + array.prototype.flat "^1.2.4" debug "^2.6.9" - doctrine "1.5.0" + doctrine "^2.1.0" eslint-import-resolver-node "^0.3.4" - eslint-module-utils "^2.6.0" + eslint-module-utils "^2.6.1" + find-up "^2.0.0" has "^1.0.3" + is-core-module "^2.4.0" minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" + object.values "^1.1.3" + pkg-up "^2.0.0" + read-pkg-up "^3.0.0" + resolve "^1.20.0" tsconfig-paths "^3.9.0" -eslint-plugin-jest@^24.1.3: - version "24.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-24.1.3.tgz#fa3db864f06c5623ff43485ca6c0e8fc5fe8ba0c" - integrity sha512-dNGGjzuEzCE3d5EPZQ/QGtmlMotqnYWD/QpCZ1UuZlrMAdhG5rldh0N0haCvhGnUkSeuORS5VNROwF9Hrgn3Lg== +eslint-plugin-jsdoc@^35.5.1: + version "35.5.1" + resolved "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-35.5.1.tgz" + integrity sha512-pPYPWtsykwVEue1tYEyoppBj4dgF7XicF67tLLLraY6RQYBq7qMKjUHji19+hfiTtYKKBD0YfeK8hgjPAE5viw== dependencies: - "@typescript-eslint/experimental-utils" "^4.0.1" + "@es-joy/jsdoccomment" "0.9.0-alpha.1" + comment-parser "1.1.6-beta.0" + debug "^4.3.2" + esquery "^1.4.0" + jsdoc-type-pratt-parser "^1.0.4" + lodash "^4.17.21" + regextras "^0.8.0" + semver "^7.3.5" + spdx-expression-parse "^3.0.1" -eslint-plugin-jsdoc@^32.3.0: - version "32.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-32.3.0.tgz#7c9fa5da8c72bd6ad7d97bbf8dee8bc29bec3f9e" - integrity sha512-zyx7kajDK+tqS1bHuY5sapkad8P8KT0vdd/lE55j47VPG2MeenSYuIY/M/Pvmzq5g0+3JB+P3BJGUXmHxtuKPQ== +eslint-plugin-markdown@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-2.2.0.tgz" + integrity sha512-Ctuc7aP1tU92qnFwVO1wDLEzf1jqMxwRkcSTw7gjbvnEqfh5CKUcTXM0sxg8CB2KDXrqpTuMZPgJ1XE9Olr7KA== dependencies: - comment-parser "1.1.2" - debug "^4.3.1" - jsdoctypeparser "^9.0.0" - lodash "^4.17.20" - regextras "^0.7.1" - semver "^7.3.4" - spdx-expression-parse "^3.0.1" + mdast-util-from-markdown "^0.8.5" -eslint-plugin-prettier@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.2.0.tgz#af391b2226fa0e15c96f36c733f6e9035dbd952c" - integrity sha512-kOUSJnFjAUFKwVxuzy6sA5yyMx6+o9ino4gCdShzBNx4eyFRudWRYKCFolKjoM40PEiuU6Cn7wBLfq3WsGg7qg== +eslint-plugin-node@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz" + integrity sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g== + dependencies: + eslint-plugin-es "^3.0.0" + eslint-utils "^2.0.0" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-optimize-regex@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/eslint-plugin-optimize-regex/-/eslint-plugin-optimize-regex-1.2.0.tgz" + integrity sha512-pzpF7bGsdXVPue/ubLqS0UbBGuBajxh2fO8OmBDoN0SHrxEBKf8WOAxkOI80lBb81yiZs7hj6ZxlflbrV3YrsA== + dependencies: + regexp-tree "^0.1.20" + +eslint-plugin-prettier@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz" + integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== dependencies: prettier-linter-helpers "^1.0.0" -eslint-scope@^5.0.0, eslint-scope@^5.1.1: +eslint-plugin-promise@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.1.0.tgz" + integrity sha512-NGmI6BH5L12pl7ScQHbg7tvtk4wPxxj8yPHH47NvSmMtFneC077PSeY3huFj06ZWZvtbfxSPt3RuOQD5XcR4ng== + +eslint-plugin-sonarjs@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.9.1.tgz" + integrity sha512-KKFofk1LPjGHWeAZijYWv32c/C4mz+OAeBNVxhxHu1hknrTOhu415MWC8qKdAdsmOlBPShs9evM4mI1o7MNMhw== + +eslint-plugin-unicorn@^34.0.1: + version "34.0.1" + resolved "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-34.0.1.tgz" + integrity sha512-GUBtRYRhPVOW/GDu6QtOjrneSZxY/MulOT8puJU+47VKCzNmMgS/iHO2gZqoQ7KPMrpNYlebUlvCWy3IR1USVQ== + dependencies: + ci-info "^3.2.0" + clean-regexp "^1.0.0" + eslint-template-visitor "^2.3.2" + eslint-utils "^3.0.0" + is-builtin-module "^3.1.0" + lodash "^4.17.21" + pluralize "^8.0.0" + read-pkg-up "^7.0.1" + regexp-tree "^0.1.23" + reserved-words "^0.1.2" + safe-regex "^2.1.1" + semver "^7.3.5" + +eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" +eslint-template-visitor@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-2.3.2.tgz" + integrity sha512-3ydhqFpuV7x1M9EK52BPNj6V0Kwu0KKkcIAfpUhwHbR8ocRln/oUHgfxQupY8O1h4Qv/POHDumb/BwwNfxbtnA== + dependencies: + "@babel/core" "^7.12.16" + "@babel/eslint-parser" "^7.12.16" + eslint-visitor-keys "^2.0.0" + esquery "^1.3.1" + multimap "^1.1.0" + eslint-utils@^2.0.0, eslint-utils@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" eslint-utils@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: eslint-visitor-keys "^2.0.0" eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== -eslint@^7.15.0: - version "7.29.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" - integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== +eslint-visitor-keys@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz" + integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== + +eslint@^7.31.0: + version "7.31.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz" + integrity sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -2041,78 +2068,74 @@ eslint@^7.15.0: espree@^7.3.0, espree@^7.3.1: version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== dependencies: acorn "^7.4.0" acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1: +espree@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/espree/-/espree-8.0.0.tgz" + integrity sha512-y/+i23dwTjIDJrYCcjcAMr3c3UGbPIjC6THMQKjWmhP97fW0FPiI89kmpKfmgV/5jrkIi6toQP+CMm3qBE1Hig== + dependencies: + acorn "^8.4.1" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^3.0.0" + +esprima@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.0: +espurify@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/espurify/-/espurify-2.1.1.tgz#afb043f22fac908d991dd25f7bf40bcf03935b9c" + integrity sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ== + +esquery@^1.3.1, esquery@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" -estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== estree-walker@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== estree-walker@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -esutils@^2.0.2: +esutils@^2.0.2, esutils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -exec-sh@^0.3.2: - version "0.3.4" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" - integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0, execa@^4.1.0: +execa@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== dependencies: cross-spawn "^7.0.0" @@ -2125,114 +2148,19 @@ execa@^4.0.0, execa@^4.1.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== - dependencies: - "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: +fast-diff@^1.1.2, fast-diff@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.1.1: version "3.2.4" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz" integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -2242,105 +2170,86 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.9.0.tgz" integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== dependencies: reusify "^1.0.4" -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - figures@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" -find-index@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" - integrity sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ= +find-cache-dir@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + resolved "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" @@ -2348,60 +2257,27 @@ flat-cache@^3.0.4: flatted@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.0.tgz#a5d06b4a8b01e3a63771daa5cb7a1903e2e57067" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz" integrity sha512-tW+UkmtNg/jv9CSofAKvgVcO7c2URjhTdW1ZTkcAritblu8tajiYy7YisnIflEwtKssCtOxpnBRoCB7iap0/TA== -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" + cross-spawn "^7.0.0" + signal-exit "^3.0.2" -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^1.0.0: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.2.1.tgz#1fb02ded2036a8ac288d507a65962bd87b97628d" - integrity sha512-bTLYHSeC0UH/EFXS9KqWnXuOl/wHK5Z/d+ghd5AsFMYN7wIGkUCOJyzy88+wJKkZPGON8u4Z9f6U4FdgURE9qA== - fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -2409,36 +2285,27 @@ fsevents@~2.3.2: function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gensync@^1.0.0-beta.1: +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" - integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-intrinsic@^1.0.2: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== dependencies: function-bind "^1.1.1" @@ -2447,72 +2314,38 @@ get-intrinsic@^1.0.2: get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== get-package-type@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-stream@^4.0.0: +get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.0.0: +get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^5.1.0, glob-parent@^5.1.2: +glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob2base@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" - integrity sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY= - dependencies: - find-index "^0.1.1" - -glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.7" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" @@ -2522,33 +2355,28 @@ glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" + integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== + dependencies: + ini "2.0.0" + globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globals@^13.6.0, globals@^13.9.0: version "13.9.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" + resolved "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz" integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== dependencies: type-fest "^0.20.2" -globby@^11.0.1: - version "11.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" - integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^11.0.3: +globby@^11.0.1, globby@^11.0.3: version "11.0.4" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + resolved "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== dependencies: array-union "^2.1.0" @@ -2558,19 +2386,36 @@ globby@^11.0.3: merge2 "^1.3.0" slash "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.2.4: +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.15: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +graceful-fs@^4.1.2, graceful-fs@^4.2.4: version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - handlebars@^4.7.3: version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" + resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz" integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== dependencies: minimist "^1.2.5" @@ -2580,110 +2425,78 @@ handlebars@^4.7.3: optionalDependencies: uglify-js "^3.1.4" -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= +has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + hosted-git-info@^2.1.4: version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + http-proxy-agent@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" agent-base "6" debug "4" -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - https-proxy-agent@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz" integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg== dependencies: agent-base "5" @@ -2691,811 +2504,456 @@ https-proxy-agent@^4.0.0: human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== husky@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" + resolved "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz" integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.0.0.tgz#537092018540640459569fe7c8c7a408af581146" + integrity sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA== ignore-walk@3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" ignore@^4.0.6: version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4: +ignore@^5.0.5, ignore@^5.1.1, ignore@^5.1.4: version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.2.2" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.2.tgz" integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + import-local@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + resolved "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz" integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" +import-modules@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-modules/-/import-modules-2.1.0.tgz#abe7df297cb6c1f19b57246eb8b8bd9664b6d8c2" + integrity sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A== + imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + interpret@^1.0.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +irregular-plurals@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" + integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== dependencies: - kind-of "^6.0.0" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: - binary-extensions "^1.0.0" + binary-extensions "^2.0.0" -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + +is-builtin-module@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz" + integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== + dependencies: + builtin-modules "^3.0.0" is-callable@^1.1.4, is-callable@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== +is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + is-ci@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" is-core-module@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== dependencies: has "^1.0.3" -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-core-module@^2.2.0, is-core-module@^2.4.0: + version "2.5.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz" + integrity sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg== dependencies: - kind-of "^6.0.0" + has "^1.0.3" is-date-object@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= +is-error@^2.2.0, is-error@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" + integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + is-module@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-negative-zero@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== -is-potential-custom-element-name@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397" - integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c= +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== is-reference@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz" integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== dependencies: "@types/estree" "*" is-regex@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz" integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== dependencies: has-symbols "^1.0.1" +is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + is-regexp@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - is-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-string@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + is-symbol@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" -is-typedarray@^1.0.0, is-typedarray@~1.0.0: +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typedarray@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-windows@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^3.0.0: +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + +istanbul-lib-instrument@^4.0.0: version "4.0.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== dependencies: "@babel/core" "^7.7.5" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.6.2.tgz#f6198479e1cc66f22f9ae1e22acaa0b429c042d0" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== - dependencies: - "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" - -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.6.3.tgz#43117cfef24bc4cd691a174a8796a532e135e92a" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== - dependencies: - "@jest/core" "^26.6.3" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.6.3.tgz#64f41444eef9eb03dc51d5c53b75c8c71f645349" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== - dependencies: - "@babel/core" "^7.1.0" - "@jest/test-sequencer" "^26.6.3" - "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.6.2.tgz#02526438a77a67401c8a6382dfe5999952c167cb" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" - -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz#78d09fe9cf019a357009b9b7e1f101d23bd1da3e" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" - -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.6.2.tgz#824e4c7fb4944646356f11ac75b229b0035f2b0c" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== - dependencies: - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== - -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.6.2.tgz#dd7e60fe7dc0e9f911a23d79c5ff7fb5c2cafeaa" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== - dependencies: - "@jest/types" "^26.6.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.1.2" - -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz#adc3cf915deacb5212c93b9f3547cd12958f2edd" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== - dependencies: - "@babel/traverse" "^7.1.0" - "@jest/environment" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz#7717cf118b92238f2eba65054c8a0c9c653a91af" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== - dependencies: - "@babel/code-frame" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== - dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== - -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz#6680859ee5d22ee5dcd961fe4871f59f4c784fb6" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== - dependencies: - "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" - -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.6.2.tgz#a3ab1517217f469b504f1b56603c5bb541fbb507" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== - dependencies: - "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.6.3.tgz#2d1fed3d46e10f233fd1dbd3bfaa3fe8924be159" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.6.3.tgz#4f64efbcfac398331b74b4b3c82d27d401b8fa2b" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== - dependencies: - "@jest/console" "^26.6.2" - "@jest/environment" "^26.6.2" - "@jest/fake-timers" "^26.6.2" - "@jest/globals" "^26.6.2" - "@jest/source-map" "^26.6.2" - "@jest/test-result" "^26.6.2" - "@jest/transform" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.6.2.tgz#d139aafd46957d3a448f3a6cdabe2919ba0742d1" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.6.2.tgz#f3b0af1acb223316850bd14e1beea9837fb39c84" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== - dependencies: - "@babel/types" "^7.0.0" - "@jest/types" "^26.6.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.6.2.tgz#907535dbe4d5a6cb4c47ac9b926f6af29576cbc1" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== +istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== dependencies: - "@jest/types" "^26.6.2" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.6.2.tgz#23d380971587150467342911c3d7b4ac57ab20ec" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.6.2.tgz#a5b683b8f9d68dbcb1d7dae32172d2cca0592975" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: - "@jest/test-result" "^26.6.2" - "@jest/types" "^26.6.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-26.6.3.tgz#40e8fdbe48f00dfa1f0ce8121ca74b88ac9148ef" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== - dependencies: - "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@3.14.0: version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.13.1: +js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -3503,175 +2961,107 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdoctypeparser@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" - integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== - -jsdom@^16.4.0: - version "16.4.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb" - integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w== - dependencies: - abab "^2.0.3" - acorn "^7.1.1" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.2.0" - data-urls "^2.0.0" - decimal.js "^10.2.0" - domexception "^2.0.1" - escodegen "^1.14.1" - html-encoding-sniffer "^2.0.1" - is-potential-custom-element-name "^1.0.0" - nwsapi "^2.2.0" - parse5 "5.1.1" - request "^2.88.2" - request-promise-native "^1.0.8" - saxes "^5.0.0" - symbol-tree "^3.2.4" - tough-cookie "^3.0.1" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - ws "^7.2.3" - xml-name-validator "^3.0.0" +jsdoc-type-pratt-parser@1.0.4, jsdoc-type-pratt-parser@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.0.4.tgz" + integrity sha512-jzmW9gokeq9+bHPDR1nCeidMyFUikdZlbOhKzh9+/nJqB75XhpNKec1/UuxW5c4+O+Pi31Gc/dCboyfSm/pSpQ== jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.3.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - json-schema@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.3.0.tgz#90a9c5054bd065422c00241851ce8d59475b701b" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.3.0.tgz" integrity sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@2.x, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - json5@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + resolved "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz" integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== dependencies: minimist "^1.2.0" -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" + minimist "^1.2.5" -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= +json5@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== dependencies: - is-buffer "^1.1.5" + minimist "^1.2.5" -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= +jsonc-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" + integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: - is-buffer "^1.1.5" + json-buffer "3.0.0" -kind-of@^5.0.0: +latest-version@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - lines-and-columns@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= lint-staged@^10.5.3: version "10.5.4" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665" + resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz" integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== dependencies: chalk "^4.1.0" @@ -3692,7 +3082,7 @@ lint-staged@^10.5.3: listr2@^3.2.2: version "3.2.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.2.3.tgz#ef9e0d790862f038dde8a9837be552b1adfd1c07" + resolved "https://registry.npmjs.org/listr2/-/listr2-3.2.3.tgz" integrity sha512-vUb80S2dSUi8YxXahO8/I/s29GqnOL8ozgHVLjfWQXa03BNEeS1TpBLjh2ruaqq5ufx46BRGvfymdBSuoXET5w== dependencies: chalk "^4.1.0" @@ -3704,19 +3094,9 @@ listr2@^3.2.2: rxjs "^6.6.3" through "^2.3.8" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" @@ -3724,61 +3104,90 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +load-json-file@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-5.3.0.tgz#4d3c1e01fa1c03ea78a60ac7af932c9ce53403f3" + integrity sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw== + dependencies: + graceful-fs "^4.1.15" + parse-json "^4.0.0" + pify "^4.0.1" + strip-bom "^3.0.0" + type-fest "^0.3.0" + locate-path@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - lodash.truncate@^4.4.2: version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: +lodash@^4.13.1, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== log-symbols@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz" integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== dependencies: chalk "^4.0.0" +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + log-update@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" + resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: ansi-escapes "^4.3.0" @@ -3786,238 +3195,195 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" magic-string@^0.25.7: version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" -make-dir@^3.0.0: +make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" -make-error@1.x: +make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== dependencies: - tmpl "1.0.x" + escape-string-regexp "^4.0.0" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +md5-hex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" + integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== + dependencies: + blueimp-md5 "^2.10.0" -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= +mdast-util-from-markdown@^0.8.5: + version "0.8.5" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== dependencies: - object-visit "^1.0.0" + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mem@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/mem/-/mem-8.1.1.tgz#cf118b357c65ab7b7e0817bdf00c8062297c0122" + integrity sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^3.1.0" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== merge2@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^2.1.5: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" +micro-spelling-correcter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/micro-spelling-correcter/-/micro-spelling-correcter-1.1.1.tgz#805a06a26ccfcad8f3e5c6a1ac5ff29d4530166e" + integrity sha512-lkJ3Rj/mtjlRcHk6YyCbvZhyWTOzdBvTHsxMmZSk5jxN1YyVSQ+JETAom55mdzfcyDrY/49Z7UCW760BK30crg== + +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" micromatch@^4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: braces "^3.0.1" picomatch "^2.0.5" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.0.2, minimatch@^3.0.4: +mimic-fn@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimatch@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@1.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -nan@^2.12.1: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multimap@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz" + integrity sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= neo-async@^2.6.0: version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - node-fetch@^2.2.0, node-fetch@^2.6.0: version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620" - integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA== +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" + process-on-spawn "^1.0.0" + +node-releases@^1.1.71: + version "1.1.73" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -4025,71 +3391,74 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== npm-run-path@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= +nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + +object-inspect@^1.10.3: + version "1.11.0" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== object-inspect@^1.9.0: version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz" integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - object.assign@^4.1.2: version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== dependencies: call-bind "^1.0.0" @@ -4097,70 +3466,32 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.fromentries@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== +object.values@^1.1.3: + version "1.1.4" + resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz" + integrity sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731" - integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" + es-abstract "^1.18.2" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^5.1.0: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - optionator@^0.9.1: version "0.9.1" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== dependencies: deep-is "^0.1.3" @@ -4170,93 +3501,170 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.2.0.tgz#105ab0357ce72b202a8a8b94933672657b5e2a9a" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== +ora@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + dependencies: + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-event@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-4.2.0.tgz#af4b049c8acd91ae81083ebd1e6f5cae2044c1b5" + integrity sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ== + dependencies: + p-timeout "^3.1.0" p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-limit@^1.1.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz" integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== dependencies: p-try "^1.0.0" -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz" integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-map@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" +p-timeout@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" + integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + resolved "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz" integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-github-url@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395" + resolved "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz" integrity sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw== -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" @@ -4264,7 +3672,7 @@ parse-json@^4.0.0: parse-json@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz" integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== dependencies: "@babel/code-frame" "^7.0.0" @@ -4272,239 +3680,209 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - path-type@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.2.2: version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - pify@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pirates@^4.0.1: +pify@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pkg-conf@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-3.1.0.tgz#d9f9c75ea1bae0e77938cde045b276dac7cc69ae" + integrity sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ== dependencies: - node-modules-regexp "^1.0.0" + find-up "^3.0.0" + load-json-file "^5.2.0" pkg-dir@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz" integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" -pkg-dir@^4.2.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +pkg-dir@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" + integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== + dependencies: + find-up "^5.0.0" + +pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" + resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== dependencies: - semver-compare "^1.0.0" + semver-compare "^1.0.0" + +plur@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" + integrity sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg== + dependencies: + irregular-plurals "^3.2.0" -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" prettier@^2.2.1: version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz" integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== +pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" + parse-ms "^2.1.0" -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" progress@^2.0.0: version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -prompts@^2.0.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" - integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" + escape-goat "^2.0.0" -react-is@^17.0.1: - version "17.0.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" - integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" - read-pkg "^2.0.0" + read-pkg "^3.0.0" read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read-pkg@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" @@ -4513,7 +3891,7 @@ read-pkg@^3.0.0: read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -4521,195 +3899,148 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^2.0.2: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +readable-stream@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" -readdirp@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" + picomatch "^2.2.1" rechoir@^0.6.2: version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= dependencies: resolve "^1.1.6" -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" +regexp-tree@^0.1.20, regexp-tree@^0.1.23, regexp-tree@~0.1.1: + version "0.1.23" + resolved "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.23.tgz" + integrity sha512-+7HWfb4Bvu8Rs2eQTUIpX9I/PlQkYOuTNbRpKLJlQpSgwSkzFYh+pUj0gtvglnOZLKB6YgnIgRuJ2/IlpL48qw== regexpp@^3.0.0, regexpp@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regextras@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" - integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== +regextras@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz" + integrity sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ== -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: - lodash "^4.17.19" + rc "^1.2.8" -request-promise-native@^1.0.8: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + resolve-cwd@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.19.0: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.19.0: version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz" integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== dependencies: is-core-module "^2.1.0" path-parse "^1.0.6" +resolve@^1.10.1, resolve@^1.20.0: + version "1.20.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rollup-plugin-auto-external@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-auto-external/-/rollup-plugin-auto-external-2.0.0.tgz#98fd137d66c1cbe0f4e245b31560a72dbde896aa" + resolved "https://registry.npmjs.org/rollup-plugin-auto-external/-/rollup-plugin-auto-external-2.0.0.tgz" integrity sha512-HQM3ZkZYfSam1uoZtAB9sK26EiAsfs1phrkf91c/YX+S07wugyRXSigBxrIwiLr5EPPilKYmoMxsrnlGBsXnuQ== dependencies: builtins "^2.0.0" @@ -4717,184 +4048,129 @@ rollup-plugin-auto-external@^2.0.0: safe-resolve "^1.0.0" semver "^5.5.0" -rollup@^2.34.2: +rollup@>=2.0.0, rollup@^2.34.2: version "2.52.7" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.52.7.tgz#e15a8bf734f6e4c204b7cdf33521151310250cb2" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz" integrity sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg== optionalDependencies: fsevents "~2.3.2" -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== - run-parallel@^1.1.9: version "1.1.10" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz" integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== rxjs@^6.6.3: version "6.6.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz" integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.2: +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= +safe-regex@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz" + integrity sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A== dependencies: - ret "~0.1.10" + regexp-tree "~0.1.1" safe-resolve@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-resolve/-/safe-resolve-1.0.0.tgz#fe34f8d29d7a3becfd249d0aa8a799b5c3cf6559" + resolved "https://registry.npmjs.org/safe-resolve/-/safe-resolve-1.0.0.tgz" integrity sha1-/jT40p16O+z9JJ0KqKeZtcPPZVk= -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== - dependencies: - "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saxes@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - semver-compare@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + "semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4: +semver@^6.0.0, semver@^6.1.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1: version "7.3.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz" integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.5: +semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - shelljs@^0.8.3: version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + resolved "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz" integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== dependencies: glob "^7.0.0" interpret "^1.0.0" rechoir "^0.6.2" -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" @@ -4903,55 +4179,14 @@ slice-ansi@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6: +source-map-support@^0.5.17, source-map-support@^0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -4959,34 +4194,36 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - sourcemap-codec@^1.4.4: version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + spdx-correct@^3.0.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== dependencies: spdx-expression-parse "^3.0.0" @@ -4994,12 +4231,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" @@ -5007,191 +4244,164 @@ spdx-expression-parse@^3.0.0, spdx-expression-parse@^3.0.1: spdx-license-ids@^3.0.0: version "3.0.7" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz" integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stack-utils@^2.0.2: +stack-utils@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== dependencies: escape-string-regexp "^2.0.0" -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - stream-events@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" + resolved "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz" integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== dependencies: stubs "^3.0.0" string-argv@0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" + resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -string-length@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1" - integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw== +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== dependencies: - char-regex "^1.0.2" + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.3: +string.prototype.trimend@^1.0.3, string.prototype.trimend@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" -string.prototype.trimstart@^1.0.3: +string.prototype.trimstart@^1.0.3, string.prototype.trimstart@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - safe-buffer "~5.1.0" + safe-buffer "~5.2.0" stringify-object@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== dependencies: get-own-enumerable-property-symbols "^3.0.0" is-obj "^1.0.1" is-regexp "^1.0.0" +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-bom@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + stubs@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" + resolved "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz" integrity sha1-6NK6H6nJBXAwPAMLaQD31fiavls= -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= +supertap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supertap/-/supertap-2.0.0.tgz#8b587d6e14b8e885fa5183a9c45abf429feb9f7f" + integrity sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA== dependencies: - minimist "^1.1.0" + arrify "^2.0.1" + indent-string "^4.0.0" + js-yaml "^3.14.0" + serialize-error "^7.0.1" + strip-ansi "^6.0.0" supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-hyperlinks@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" - integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - table@^6.0.9: version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + resolved "https://registry.npmjs.org/table/-/table-6.7.1.tgz" integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: ajv "^8.0.1" @@ -5203,7 +4413,7 @@ table@^6.0.9: teeny-request@6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-6.0.1.tgz#9b1f512cef152945827ba7e34f62523a4ce2c5b0" + resolved "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz" integrity sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g== dependencies: http-proxy-agent "^4.0.0" @@ -5212,17 +4422,14 @@ teeny-request@6.0.1: stream-events "^1.0.5" uuid "^3.3.2" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== test-exclude@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -5231,105 +4438,74 @@ test-exclude@^6.0.0: text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - through@^2.3.8: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +time-zone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" + integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" +trim-off-newlines@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" +ts-node@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.1.0.tgz" + integrity sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA== + dependencies: + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + +tsc-prog@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tsc-prog/-/tsc-prog-2.2.1.tgz#7ea892e1628f1ef93ae6f4d0a97c8a9518e4b408" + integrity sha512-whYQUQjB+wm9c2FoikigaBVnXesgAjIYXgHrbzlK+Etg9L657a92MSUcbi5hrD/YBaRmjuDcTIQVZmo/f74OZQ== -tough-cookie@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" - integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== +tsconfig-paths@^3.10.1: + version "3.10.1" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz" + integrity sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q== dependencies: - ip-regex "^2.1.0" - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479" - integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg== - dependencies: - punycode "^2.1.1" - -ts-jest@^26.4.4: - version "26.4.4" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.4.tgz#61f13fb21ab400853c532270e52cc0ed7e502c49" - integrity sha512-3lFWKbLxJm34QxyVNNCgXX1u4o/RV0myvA2y2Bxm46iGIjKlaY0own9gIckbjZJPn+WaJEnfPPJ20HHGpoq4yg== - dependencies: - "@types/jest" "26.x" - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" + json5 "^2.2.0" + minimist "^1.2.0" + strip-bom "^3.0.0" tsconfig-paths@^3.9.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz" integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== dependencies: "@types/json5" "^0.0.29" @@ -5339,278 +4515,237 @@ tsconfig-paths@^3.9.0: tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== tslib@^2.0.3: version "2.1.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== -tsutils@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - type-fest@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== -type-fest@^0.8.1: +type-fest@^0.8.0, type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" typescript@^4.1.3: version "4.3.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.2.tgz" integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== uglify-js@^3.1.4: version "3.12.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.12.1.tgz#78307f539f7b9ca5557babb186ea78ad30cc0375" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.1.tgz" integrity sha512-o8lHP20KjIiQe5b/67Rh68xEGRrc2SRsCuuoYclXXoC74AfSRGblU1HKzJWH3HxPZ+Ort85fWHpSX7KwBUC9CQ== -union-value@^1.0.0: +unbox-primitive@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" + crypto-random-string "^2.0.0" -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +update-notifier@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== dependencies: - has-value "^0.3.1" - isobject "^3.0.0" + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" uri-js@^4.2.2: version "4.4.0" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz" integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" urlgrey@0.4.4: version "0.4.4" - resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f" + resolved "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz" integrity sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8= -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@~1.0.1: +util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -uuid@^3.3.2: +uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== -uuid@^8.3.0: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - v8-compile-cache@^2.0.3: version "2.2.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz" integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== -v8-to-istanbul@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-7.0.0.tgz#b4fe00e35649ef7785a9b7fcebcea05f37c332fc" - integrity sha512-fLL2rFuQpMtm9r8hrAV2apXX/WqHJ6+IC4/eQVdMDGBUgH/YMV4Gv3duk3kjmyg6uiQWBAA9nJwue4iJUOkHeA== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: - browser-process-hrtime "^1.0.0" + defaults "^1.0.3" -w3c-xmlserializer@^2.0.0: +well-known-symbols@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" + integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== -whatwg-url@^8.0.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.4.0.tgz#50fb9615b05469591d2b2bd6dfaed2942ed72837" - integrity sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw== +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: - lodash.sortby "^4.7.0" - tr46 "^2.0.2" - webidl-conversions "^6.1.0" + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" which-module@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: +which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -word-wrap@^1.2.3, word-wrap@~1.2.3: +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +word-wrap@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -5620,50 +4755,45 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@^7.2.3: - version "7.4.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.1.tgz#a333be02696bd0e54cea0434e21dcc8a9ac294bb" - integrity sha512-pTsP8UAfhy3sk1lSk/O/s4tjD0CRwvMnzvwr4OKGX7ZvqZtUyx4KIJB5JWbkykPoc55tixMGgTNoh3k4FkNGFQ== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== y18n@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@20.x: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - yargs-parser@^18.1.2: version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^15.4.1: +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^15.0.2: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -5679,3 +4809,26 @@ yargs@^15.4.1: which-module "^2.0.0" y18n "^4.0.0" yargs-parser "^18.1.2" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==