diff --git a/.eslintrc.js b/.eslintrc.js index da7ff36fd3b2..6dfb0c353629 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -257,6 +257,11 @@ module.exports = { './packages/eslint-plugin/src/rules/**/*.ts', ], rules: { + 'eslint-plugin/require-meta-docs-description': [ + 'error', + { pattern: '^(Enforce|Require|Disallow) .+[^. ]$' }, + ], + // specifically for rules - default exports makes the tooling easier 'import/no-default-export': 'off', }, diff --git a/CHANGELOG.md b/CHANGELOG.md index c4db2f119aa4..b400022f2271 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +### Bug Fixes + +- **eslint-plugin:** [no-shadow] handle false positives on generics and parameters ([#5902](https://github.com/typescript-eslint/typescript-eslint/issues/5902)) ([769e8c8](https://github.com/typescript-eslint/typescript-eslint/commit/769e8c8b9a51cd3448e47d13c7b0dab0468ee23c)) +- **eslint-plugin:** [promise-function-async] handle keyword token ([#5907](https://github.com/typescript-eslint/typescript-eslint/issues/5907)) ([f25a94f](https://github.com/typescript-eslint/typescript-eslint/commit/f25a94fa75e497a6b9ec29a008bcc89818eed60d)) + +### Features + +- **eslint-plugin:** [consistent-type-imports] support fixing to inline types ([#5050](https://github.com/typescript-eslint/typescript-eslint/issues/5050)) ([75dcdf1](https://github.com/typescript-eslint/typescript-eslint/commit/75dcdf164d206c5530ba7cc095c4599ec90abe35)) +- **eslint-plugin:** [naming-convention] add support for "override" and "async" modifiers ([#5310](https://github.com/typescript-eslint/typescript-eslint/issues/5310)) ([#5610](https://github.com/typescript-eslint/typescript-eslint/issues/5610)) ([c759da1](https://github.com/typescript-eslint/typescript-eslint/commit/c759da169390ba490eee9ef773cc9edc88a32817)) +- **eslint-plugin:** [prefer-optional-chain] support suggesting `!foo || !foo.bar` as a valid match for the rule ([#5594](https://github.com/typescript-eslint/typescript-eslint/issues/5594)) ([923d486](https://github.com/typescript-eslint/typescript-eslint/commit/923d486c8c9c9096deac425e7a6cb0b6457eacbd)) + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 0b0cd5d3c7d2..e213821c0902 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "version": "5.42.1", + "version": "5.43.0", "npmClient": "yarn", "useWorkspaces": true, "stream": true diff --git a/package.json b/package.json index 77e222ad7a8f..4726e08400fe 100644 --- a/package.json +++ b/package.json @@ -91,7 +91,7 @@ "jest-diff": "^29.0.3", "jest-snapshot": "^29.0.3", "jest-specific-snapshot": "^5.0.0", - "lerna": "6.0.1", + "lerna": "6.0.3", "lint-staged": "^13.0.0", "make-dir": "^3.1.0", "markdownlint-cli": "^0.32.0", diff --git a/packages/ast-spec/CHANGELOG.md b/packages/ast-spec/CHANGELOG.md index 12b5e0818ea7..33f54422348e 100644 --- a/packages/ast-spec/CHANGELOG.md +++ b/packages/ast-spec/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/ast-spec + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) ### Bug Fixes diff --git a/packages/ast-spec/package.json b/packages/ast-spec/package.json index bc441599d3ab..19a595262da8 100644 --- a/packages/ast-spec/package.json +++ b/packages/ast-spec/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/ast-spec", - "version": "5.42.1", + "version": "5.43.0", "description": "TypeScript-ESTree AST spec", "private": true, "keywords": [ diff --git a/packages/eslint-plugin-internal/CHANGELOG.md b/packages/eslint-plugin-internal/CHANGELOG.md index 52726f2a2fa6..3cb70bba497e 100644 --- a/packages/eslint-plugin-internal/CHANGELOG.md +++ b/packages/eslint-plugin-internal/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/eslint-plugin-internal + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/eslint-plugin-internal diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 899b0c144f98..b9047517e16e 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin-internal", - "version": "5.42.1", + "version": "5.43.0", "private": true, "main": "dist/index.js", "scripts": { @@ -14,9 +14,9 @@ }, "dependencies": { "@types/prettier": "*", - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/type-utils": "5.42.1", - "@typescript-eslint/utils": "5.42.1", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "prettier": "*" } } diff --git a/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts b/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts index 6811c935bba7..0c671d8432fe 100644 --- a/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts +++ b/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts @@ -35,7 +35,7 @@ export default createRule({ type: 'problem', docs: { description: - "Enforces rules don't use TS API properties with known bad type definitions", + "Enforce that rules don't use TS API properties with known bad type definitions", recommended: 'error', requiresTypeChecking: true, }, diff --git a/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts b/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts index 34b911451e76..fd7279c38231 100644 --- a/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts +++ b/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts @@ -20,7 +20,7 @@ export default createRule({ type: 'problem', docs: { description: - "Enforces that packages rules don't do `import ts from 'typescript';`", + "Enforce that packages rules don't do `import ts from 'typescript';`", recommended: 'error', }, fixable: 'code', diff --git a/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts b/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts index 022fd98b7caa..28f7439472bf 100644 --- a/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts +++ b/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts @@ -15,7 +15,7 @@ export default createRule({ meta: { type: 'problem', docs: { - description: `Enforces that eslint-plugin rules don't require anything from ${TSESTREE_NAME} or ${TYPES_NAME}`, + description: `Enforce that eslint-plugin rules don't require anything from ${TSESTREE_NAME} or ${TYPES_NAME}`, recommended: 'error', }, fixable: 'code', diff --git a/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts b/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts index 8cd85cce8e94..f86d49468364 100644 --- a/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts +++ b/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts @@ -107,7 +107,7 @@ export default createRule({ meta: { type: 'problem', docs: { - description: `Enforces that eslint-plugin test snippets are correctly formatted`, + description: `Enforce that eslint-plugin test snippets are correctly formatted`, recommended: 'error', requiresTypeChecking: true, }, diff --git a/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts b/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts index 4b74cbe09b99..4099e2f02be5 100755 --- a/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts +++ b/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts @@ -15,7 +15,7 @@ export default createRule({ docs: { recommended: 'error', description: - 'Ensures consistent usage of `AST_NODE_TYPES`, `AST_TOKEN_TYPES` and `DefinitionType` enums.', + 'Enforce consistent usage of `AST_NODE_TYPES`, `AST_TOKEN_TYPES` and `DefinitionType` enums', }, messages: { preferEnum: 'Prefer {{ enumName }}.{{ literal }} over raw literal', diff --git a/packages/eslint-plugin-tslint/CHANGELOG.md b/packages/eslint-plugin-tslint/CHANGELOG.md index 105df78c12f0..77d0a23e05a2 100644 --- a/packages/eslint-plugin-tslint/CHANGELOG.md +++ b/packages/eslint-plugin-tslint/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/eslint-plugin-tslint + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/eslint-plugin-tslint diff --git a/packages/eslint-plugin-tslint/package.json b/packages/eslint-plugin-tslint/package.json index 143cda6b820a..d69678024c80 100644 --- a/packages/eslint-plugin-tslint/package.json +++ b/packages/eslint-plugin-tslint/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin-tslint", - "version": "5.42.1", + "version": "5.43.0", "main": "dist/index.js", "typings": "src/index.ts", "description": "TSLint wrapper plugin for ESLint", @@ -38,7 +38,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/utils": "5.42.1", + "@typescript-eslint/utils": "5.43.0", "lodash": "^4.17.21" }, "peerDependencies": { @@ -48,6 +48,6 @@ }, "devDependencies": { "@types/lodash": "*", - "@typescript-eslint/parser": "5.42.1" + "@typescript-eslint/parser": "5.43.0" } } diff --git a/packages/eslint-plugin-tslint/src/rules/config.ts b/packages/eslint-plugin-tslint/src/rules/config.ts index 5f20bcd44309..9fcfa844da11 100644 --- a/packages/eslint-plugin-tslint/src/rules/config.ts +++ b/packages/eslint-plugin-tslint/src/rules/config.ts @@ -64,7 +64,7 @@ export default createRule({ meta: { docs: { description: - 'Wraps a TSLint configuration and lints the whole source using TSLint', + 'Wraps a TSLint configuration and lints the whole source using TSLint', // eslint-disable-line eslint-plugin/require-meta-docs-description recommended: false, }, fixable: 'code', diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 8c5ef968f8a9..9b989e2c8700 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +### Bug Fixes + +- **eslint-plugin:** [no-shadow] handle false positives on generics and parameters ([#5902](https://github.com/typescript-eslint/typescript-eslint/issues/5902)) ([769e8c8](https://github.com/typescript-eslint/typescript-eslint/commit/769e8c8b9a51cd3448e47d13c7b0dab0468ee23c)) +- **eslint-plugin:** [promise-function-async] handle keyword token ([#5907](https://github.com/typescript-eslint/typescript-eslint/issues/5907)) ([f25a94f](https://github.com/typescript-eslint/typescript-eslint/commit/f25a94fa75e497a6b9ec29a008bcc89818eed60d)) + +### Features + +- **eslint-plugin:** [consistent-type-imports] support fixing to inline types ([#5050](https://github.com/typescript-eslint/typescript-eslint/issues/5050)) ([75dcdf1](https://github.com/typescript-eslint/typescript-eslint/commit/75dcdf164d206c5530ba7cc095c4599ec90abe35)) +- **eslint-plugin:** [naming-convention] add support for "override" and "async" modifiers ([#5310](https://github.com/typescript-eslint/typescript-eslint/issues/5310)) ([#5610](https://github.com/typescript-eslint/typescript-eslint/issues/5610)) ([c759da1](https://github.com/typescript-eslint/typescript-eslint/commit/c759da169390ba490eee9ef773cc9edc88a32817)) +- **eslint-plugin:** [prefer-optional-chain] support suggesting `!foo || !foo.bar` as a valid match for the rule ([#5594](https://github.com/typescript-eslint/typescript-eslint/issues/5594)) ([923d486](https://github.com/typescript-eslint/typescript-eslint/commit/923d486c8c9c9096deac425e7a6cb0b6457eacbd)) + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) ### Bug Fixes diff --git a/packages/eslint-plugin/docs/rules/consistent-type-imports.md b/packages/eslint-plugin/docs/rules/consistent-type-imports.md index 745930d0d54c..4ea1f7559943 100644 --- a/packages/eslint-plugin/docs/rules/consistent-type-imports.md +++ b/packages/eslint-plugin/docs/rules/consistent-type-imports.md @@ -15,7 +15,7 @@ This allows transpilers to drop imports without knowing the types of the depende This option defines the expected import kind for type-only imports. Valid values for `prefer` are: -- `type-imports` will enforce that you always use `import type Foo from '...'` except referenced by metadata of decorators. It is default. +- `type-imports` will enforce that you always use `import type Foo from '...'` except referenced by metadata of decorators. It is the default. - `no-type-imports` will enforce that you always use `import Foo from '...'`. Examples of **correct** code with `{prefer: 'type-imports'}`, and **incorrect** code with `{prefer: 'no-type-imports'}`. @@ -36,6 +36,44 @@ type T = Foo; const x: Bar = 1; ``` +### `fixStyle` + +This option defines the expected type modifier to be added when an import is detected as used only in the type position. Valid values for `fixStyle` are: + +- `separate-type-imports` will add the type keyword after the import keyword `import type { A } from '...'`. It is the default. +- `inline-type-imports` will inline the type keyword `import { type A } from '...'` and is only available in TypeScript 4.5 and onwards. See [documentation here](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-5.html#type-modifiers-on-import-names 'TypeScript 4.5 documentation on type modifiers and import names'). + + + +#### ❌ Incorrect + +```ts +import { Foo } from 'Foo'; +import Bar from 'Bar'; +type T = Foo; +const x: Bar = 1; +``` + +#### ✅ With `separate-type-imports` + +```ts +import type { Foo } from 'Foo'; +import type Bar from 'Bar'; +type T = Foo; +const x: Bar = 1; +``` + +#### ✅ With `inline-type-imports` + +```ts +import { type Foo } from 'Foo'; +import type Bar from 'Bar'; +type T = Foo; +const x: Bar = 1; +``` + + + ### `disallowTypeAnnotations` If `true`, type imports in type annotations (`import()`) are not allowed. diff --git a/packages/eslint-plugin/docs/rules/naming-convention.md b/packages/eslint-plugin/docs/rules/naming-convention.md index 50bd17515183..f5922ba3653c 100644 --- a/packages/eslint-plugin/docs/rules/naming-convention.md +++ b/packages/eslint-plugin/docs/rules/naming-convention.md @@ -149,7 +149,7 @@ The `leadingUnderscore` / `trailingUnderscore` options control whether leading/t The `prefix` / `suffix` options control which prefix/suffix strings must exist for the identifier. Accepts an array of strings. -If these are provided, the identifier must start with one of the provided values. For example, if you provide `{ prefix: ['IFace', 'Class', 'Type'] }`, then the following names are valid: `IFaceFoo`, `ClassBar`, `TypeBaz`, but the name `Bang` is not valid, as it contains none of the prefixes. +If these are provided, the identifier must start with one of the provided values. For example, if you provide `{ prefix: ['Class', 'IFace', 'Type'] }`, then the following names are valid: `ClassBar`, `IFaceFoo`, `TypeBaz`, but the name `Bang` is not valid, as it contains none of the prefixes. **Note:** As [documented above](#format-options), the prefix is trimmed before format is validated, therefore PascalCase must be used to allow variables such as `isEnabled` using the prefix `is`. @@ -157,11 +157,11 @@ If these are provided, the identifier must start with one of the provided values - `selector` allows you to specify what types of identifiers to target. - Accepts one or array of selectors to define an option block that applies to one or multiple selectors. - - For example, if you provide `{ selector: ['variable', 'function'] }`, then it will apply the same option to variable and function nodes. + - For example, if you provide `{ selector: ['function', 'variable'] }`, then it will apply the same option to variable and function nodes. - See [Allowed Selectors, Modifiers and Types](#allowed-selectors-modifiers-and-types) below for the complete list of allowed selectors. -- `modifiers` allows you to specify which modifiers to granularly apply to, such as the accessibility (`private`/`public`/`protected`), or if the thing is `static`, etc. +- `modifiers` allows you to specify which modifiers to granularly apply to, such as the accessibility (`private`/`protected`/`public`), or if the thing is `static`, etc. - The name must match _all_ of the modifiers. - - For example, if you provide `{ modifiers: ['private', 'static', 'readonly'] }`, then it will only match something that is `private static readonly`, and something that is just `private` will not match. + - For example, if you provide `{ modifiers: ['private','readonly','static'] }`, then it will only match something that is `private static readonly`, and something that is just `private` will not match. - The following `modifiers` are allowed: - `const` - matches a variable declared as being `const` (`const x = 1`). - `destructured` - matches a variable declared via an object destructuring pattern (`const {x, z = 2}`). @@ -171,8 +171,9 @@ If these are provided, the identifier must start with one of the provided values - `unused` - matches anything that is not used. - `requiresQuotes` - matches any name that requires quotes as it is not a valid identifier (i.e. has a space, a dash, etc in it). - `public` - matches any member that is either explicitly declared as `public`, or has no visibility modifier (i.e. implicitly public). - - `readonly`, `static`, `abstract`, `protected`, `private` - matches any member explicitly declared with the given modifier. -- `types` allows you to specify which types to match. This option supports simple, primitive types only (`boolean`, `string`, `number`, `array`, `function`). + - `abstract`,`override`,`private`,`protected`,`readonly`,`static` - matches any member explicitly declared with the given modifier. + - `async` - matches any method, function, or function variable which is async via the `async` keyword (e.g. does not match functions that return promises without using `async` keyword) +- `types` allows you to specify which types to match. This option supports simple, primitive types only (`array`,`boolean`,`function`,`number`,`string`). - The name must match _one_ of the types. - **_NOTE - Using this option will require that you lint with type information._** - For example, this lets you do things like enforce that `boolean` variables are prefixed with a verb. @@ -193,39 +194,39 @@ There are two types of selectors, individual selectors, and grouped selectors. Individual Selectors match specific, well-defined sets. There is no overlap between each of the individual selectors. -- `variable` - matches any `var` / `let` / `const` variable name. - - Allowed `modifiers`: `const`, `destructured`, `global`, `exported`, `unused`. - - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. +- `variable` - matches any `let` / `const` / `var` variable name. + - Allowed `modifiers`: `async`, `const`, `destructured`, `exported`, `global`, `unused`. + - Allowed `types`: `array`, `boolean`, `function`, `number`, `string`. - `function` - matches any named function declaration or named function expression. - - Allowed `modifiers`: `global`, `exported`, `unused`. + - Allowed `modifiers`: `async`, `exported`, `global`, `unused`. - Allowed `types`: none. - `parameter` - matches any function parameter. Does not match parameter properties. - Allowed `modifiers`: `destructured`, `unused`. - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. - `classProperty` - matches any class property. Does not match properties that have direct function expression or arrow function expression values. - - Allowed `modifiers`: `abstract`, `private`, `protected`, `public`, `readonly`, `requiresQuotes`, `static`. - - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. + - Allowed `modifiers`: `abstract`, `override`, `private`, `protected`, `public`, `readonly`, `requiresQuotes`, `static`. + - Allowed `types`: `array`, `boolean`, `function`, `number`, `string`. - `objectLiteralProperty` - matches any object literal property. Does not match properties that have direct function expression or arrow function expression values. - Allowed `modifiers`: `public`, `requiresQuotes`. - - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. + - Allowed `types`: `array`, `boolean`, `function`, `number`, `string`. - `typeProperty` - matches any object type property. Does not match properties that have direct function expression or arrow function expression values. - Allowed `modifiers`: `public`, `readonly`, `requiresQuotes`. - - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. + - Allowed `types`: `array`, `boolean`, `function`, `number`, `string`. - `parameterProperty` - matches any parameter property. - Allowed `modifiers`: `private`, `protected`, `public`, `readonly`. - - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. + - Allowed `types`: `array`, `boolean`, `function`, `number`, `string`. - `classMethod` - matches any class method. Also matches properties that have direct function expression or arrow function expression values. Does not match accessors. - - Allowed `modifiers`: `abstract`, `private`, `protected`, `public`, `requiresQuotes`, `static`. + - Allowed `modifiers`: `abstract`, `async`, `override`, `private`, `protected`, `public`, `requiresQuotes`, `static`. - Allowed `types`: none. - `objectLiteralMethod` - matches any object literal method. Also matches properties that have direct function expression or arrow function expression values. Does not match accessors. - - Allowed `modifiers`: `public`, `requiresQuotes`. + - Allowed `modifiers`: `async`, `public`, `requiresQuotes`. - Allowed `types`: none. - `typeMethod` - matches any object type method. Also matches properties that have direct function expression or arrow function expression values. Does not match accessors. - Allowed `modifiers`: `public`, `requiresQuotes`. - Allowed `types`: none. - `accessor` - matches any accessor. - - Allowed `modifiers`: `abstract`, `private`, `protected`, `public`, `requiresQuotes`, `static`. - - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. + - Allowed `modifiers`: `abstract`, `override`, `private`, `protected`, `public`, `requiresQuotes`, `static`. + - Allowed `types`: `array`, `boolean`, `function`, `number`, `string`. - `enumMember` - matches any enum member. - Allowed `modifiers`: `requiresQuotes`. - Allowed `types`: none. @@ -252,20 +253,20 @@ Group Selectors are provided for convenience, and essentially bundle up sets of - `default` - matches everything. - Allowed `modifiers`: all modifiers. - Allowed `types`: none. -- `variableLike` - matches the same as `variable`, `function` and `parameter`. - - Allowed `modifiers`: `unused`. +- `variableLike` - matches the same as `function`, `parameter` and `variable`. + - Allowed `modifiers`: `async`, `unused`. - Allowed `types`: none. -- `memberLike` - matches the same as `property`, `parameterProperty`, `method`, `accessor`, `enumMember`. - - Allowed `modifiers`: `private`, `protected`, `public`, `static`, `readonly`, `abstract`, `requiresQuotes`. +- `memberLike` - matches the same as `accessor`, `enumMember`, `method`, `parameterProperty`, `property`. + - Allowed `modifiers`: `abstract`, `async`, `override`, `private`, `protected`, `public`, `readonly`, `requiresQuotes`, `static`. - Allowed `types`: none. -- `typeLike` - matches the same as `class`, `interface`, `typeAlias`, `enum`, `typeParameter`. +- `typeLike` - matches the same as `class`, `enum`, `interface`, `typeAlias`, `typeParameter`. - Allowed `modifiers`: `abstract`, `unused`. - Allowed `types`: none. - `property` - matches the same as `classProperty`, `objectLiteralProperty`, `typeProperty`. - - Allowed `modifiers`: `private`, `protected`, `public`, `static`, `readonly`, `abstract`, `requiresQuotes`. - - Allowed `types`: `boolean`, `string`, `number`, `function`, `array`. + - Allowed `modifiers`: `abstract`, `async`, `override`, `private`, `protected`, `public`, `readonly`, `requiresQuotes`, `static`. + - Allowed `types`: `array`, `boolean`, `function`, `number`, `string`. - `method` - matches the same as `classMethod`, `objectLiteralMethod`, `typeMethod`. - - Allowed `modifiers`: `private`, `protected`, `public`, `static`, `readonly`, `abstract`, `requiresQuotes`. + - Allowed `modifiers`: `abstract`, `async`, `override`, `private`, `protected`, `public`, `readonly`, `requiresQuotes`, `static`. - Allowed `types`: none. ## FAQ diff --git a/packages/eslint-plugin/docs/rules/prefer-nullish-coalescing.md b/packages/eslint-plugin/docs/rules/prefer-nullish-coalescing.md index 5be277ecc733..d2fc95f4066a 100644 --- a/packages/eslint-plugin/docs/rules/prefer-nullish-coalescing.md +++ b/packages/eslint-plugin/docs/rules/prefer-nullish-coalescing.md @@ -11,6 +11,10 @@ Because the nullish coalescing operator _only_ coalesces when the original value This rule reports when an `||` operator can be safely replaced with a `??`. +:::caution +This rule will not work as expected if [`strictNullChecks`](https://www.typescriptlang.org/tsconfig#strictNullChecks) is not enabled. +::: + ## Options ### `ignoreTernaryTests` diff --git a/packages/eslint-plugin/docs/rules/prefer-optional-chain.md b/packages/eslint-plugin/docs/rules/prefer-optional-chain.md index cff46dfdf49b..4a9ada8b08ff 100644 --- a/packages/eslint-plugin/docs/rules/prefer-optional-chain.md +++ b/packages/eslint-plugin/docs/rules/prefer-optional-chain.md @@ -1,5 +1,5 @@ --- -description: 'Enforce using concise optional chain expressions instead of chained logical ands.' +description: 'Enforce using concise optional chain expressions instead of chained logical ands, negated logical ors, or empty objects.' --- > 🛑 This file is source code, not the primary documentation location! 🛑 @@ -23,9 +23,15 @@ foo && foo.a && foo.a.b && foo.a.b.c; foo && foo['a'] && foo['a'].b && foo['a'].b.c; foo && foo.a && foo.a.b && foo.a.b.method && foo.a.b.method(); +// With empty objects (((foo || {}).a || {}).b || {}).c; (((foo || {})['a'] || {}).b || {}).c; +// With negated `or`s +!foo || !foo.bar; +!foo || !foo[bar]; +!foo || !foo.bar || !foo.bar.baz || !foo.bar.baz(); + // this rule also supports converting chained strict nullish checks: foo && foo.a != null && @@ -43,6 +49,10 @@ foo?.['a']?.b?.c; foo?.a?.b?.method?.(); foo?.a?.b?.c?.d?.e; + +!foo?.bar; +!foo?.[bar]; +!foo?.bar?.baz?.(); ``` diff --git a/packages/eslint-plugin/docs/rules/sort-type-union-intersection-members.md b/packages/eslint-plugin/docs/rules/sort-type-union-intersection-members.md index dbaf1807edff..edaa195df6b3 100644 --- a/packages/eslint-plugin/docs/rules/sort-type-union-intersection-members.md +++ b/packages/eslint-plugin/docs/rules/sort-type-union-intersection-members.md @@ -8,7 +8,7 @@ description: 'Enforce members of a type union/intersection to be sorted alphabet :::danger Deprecated -This rule has been renamed to [`sort-type-union-intersection-members`](./sort-type-union-intersection-members.md). +This rule has been renamed to [`sort-type-constituents`](./sort-type-constituents.md). ::: Sorting union (`|`) and intersection (`&`) types can help: diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index baf09fbe4804..b4778013b7a1 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin", - "version": "5.42.1", + "version": "5.43.0", "description": "TypeScript plugin for ESLint", "keywords": [ "eslint", @@ -44,9 +44,9 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/type-utils": "5.42.1", - "@typescript-eslint/utils": "5.42.1", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/type-utils": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", diff --git a/packages/eslint-plugin/src/rules/consistent-type-imports.ts b/packages/eslint-plugin/src/rules/consistent-type-imports.ts index 1817018fe7bd..a812116f2f8b 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-imports.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-imports.ts @@ -4,11 +4,13 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type Prefer = 'type-imports' | 'no-type-imports'; +type FixStyle = 'separate-type-imports' | 'inline-type-imports'; type Options = [ { prefer?: Prefer; disallowTypeAnnotations?: boolean; + fixStyle?: FixStyle; }, ]; @@ -19,6 +21,8 @@ interface SourceImports { typeOnlyNamedImport: TSESTree.ImportDeclaration | null; // ImportDeclaration for value-only import only with named imports. valueOnlyNamedImport: TSESTree.ImportDeclaration | null; + // ImportDeclaration for value-only import only with default imports and/or named imports. + valueImport: TSESTree.ImportDeclaration | null; } interface ReportValueImport { node: TSESTree.ImportDeclaration; @@ -79,6 +83,9 @@ export default util.createRule({ disallowTypeAnnotations: { type: 'boolean', }, + fixStyle: { + enum: ['separate-type-imports', 'inline-type-imports'], + }, }, additionalProperties: false, }, @@ -90,12 +97,14 @@ export default util.createRule({ { prefer: 'type-imports', disallowTypeAnnotations: true, + fixStyle: 'separate-type-imports', }, ], create(context, [option]) { const prefer = option.prefer ?? 'type-imports'; const disallowTypeAnnotations = option.disallowTypeAnnotations !== false; + const fixStyle = option.fixStyle ?? 'separate-type-imports'; const sourceCode = context.getSourceCode(); const sourceImportsMap: { [key: string]: SourceImports } = {}; @@ -106,13 +115,15 @@ export default util.createRule({ // prefer type imports ImportDeclaration(node): void { const source = node.source.value; + // sourceImports is the object containing all the specifics for a particular import source, type or value const sourceImports = sourceImportsMap[source] ?? (sourceImportsMap[source] = { source, - reportValueImports: [], - typeOnlyNamedImport: null, - valueOnlyNamedImport: null, + reportValueImports: [], // if there is a mismatch where type importKind but value specifiers + typeOnlyNamedImport: null, // if only type imports + valueOnlyNamedImport: null, // if only value imports with named specifiers + valueImport: null, // if only value imports }); if (node.importKind === 'type') { if ( @@ -122,6 +133,7 @@ export default util.createRule({ specifier.type === AST_NODE_TYPES.ImportSpecifier, ) ) { + // definitely import type { TypeX } sourceImports.typeOnlyNamedImport = node; } } else { @@ -133,6 +145,15 @@ export default util.createRule({ ) ) { sourceImports.valueOnlyNamedImport = node; + sourceImports.valueImport = node; + } else if ( + !sourceImports.valueImport && + node.specifiers.some( + specifier => + specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier, + ) + ) { + sourceImports.valueImport = node; } } @@ -243,14 +264,15 @@ export default util.createRule({ 'Program:exit'(): void { for (const sourceImports of Object.values(sourceImportsMap)) { if (sourceImports.reportValueImports.length === 0) { + // nothing to fix. value specifiers and type specifiers are correctly written continue; } for (const report of sourceImports.reportValueImports) { if ( report.valueSpecifiers.length === 0 && - report.unusedSpecifiers.length === 0 + report.unusedSpecifiers.length === 0 && + report.node.importKind !== 'type' ) { - // import is all type-only, convert the entire import to `import type` context.report({ node: report.node, messageId: 'typeOverValue', @@ -265,12 +287,13 @@ export default util.createRule({ } else { const isTypeImport = report.node.importKind === 'type'; - // we have a mixed type/value import, so we need to split them out into multiple exports + // we have a mixed type/value import or just value imports, so we need to split them out into multiple imports if separate-type-imports is configured const importNames = ( isTypeImport - ? report.valueSpecifiers + ? report.valueSpecifiers // import type { A } from 'roo'; // WHERE A is used in value position : report.typeSpecifiers - ).map(specifier => `"${specifier.local.name}"`); + ) // import { A, B } from 'roo'; // WHERE A is used in type position and B is in value position + .map(specifier => `"${specifier.local.name}"`); const message = ((): { messageId: MessageIds; @@ -294,12 +317,12 @@ export default util.createRule({ if (isTypeImport) { return { messageId: 'someImportsInDecoMeta', - data: { typeImports }, + data: { typeImports }, // typeImports are all the value specifiers that are in the type position }; } else { return { messageId: 'someImportsAreOnlyTypes', - data: { typeImports }, + data: { typeImports }, // typeImports are all the type specifiers in the value position }; } } @@ -310,12 +333,14 @@ export default util.createRule({ ...message, *fix(fixer) { if (isTypeImport) { + // take all the valueSpecifiers and put them on a new line yield* fixToValueImportDeclaration( fixer, report, sourceImports, ); } else { + // take all the typeSpecifiers and put them on a new line yield* fixToTypeImportDeclaration( fixer, report, @@ -396,12 +421,12 @@ export default util.createRule({ } /** - * Returns information for fixing named specifiers. + * Returns information for fixing named specifiers, type or value */ function getFixesNamedSpecifiers( fixer: TSESLint.RuleFixer, node: TSESTree.ImportDeclaration, - typeNamedSpecifiers: TSESTree.ImportSpecifier[], + subsetNamedSpecifiers: TSESTree.ImportSpecifier[], allNamedSpecifiers: TSESTree.ImportSpecifier[], ): { typeNamedSpecifiersText: string; @@ -415,12 +440,12 @@ export default util.createRule({ } const typeNamedSpecifiersTexts: string[] = []; const removeTypeNamedSpecifiers: TSESLint.RuleFix[] = []; - if (typeNamedSpecifiers.length === allNamedSpecifiers.length) { + if (subsetNamedSpecifiers.length === allNamedSpecifiers.length) { // import Foo, {Type1, Type2} from 'foo' // import DefType, {Type1, Type2} from 'foo' const openingBraceToken = util.nullThrows( sourceCode.getTokenBefore( - typeNamedSpecifiers[0], + subsetNamedSpecifiers[0], util.isOpeningBraceToken, ), util.NullThrowsReasons.MissingToken('{', node.type), @@ -451,20 +476,20 @@ export default util.createRule({ ), ); } else { - const typeNamedSpecifierGroups: TSESTree.ImportSpecifier[][] = []; + const namedSpecifierGroups: TSESTree.ImportSpecifier[][] = []; let group: TSESTree.ImportSpecifier[] = []; for (const namedSpecifier of allNamedSpecifiers) { - if (typeNamedSpecifiers.includes(namedSpecifier)) { + if (subsetNamedSpecifiers.includes(namedSpecifier)) { group.push(namedSpecifier); } else if (group.length) { - typeNamedSpecifierGroups.push(group); + namedSpecifierGroups.push(group); group = []; } } if (group.length) { - typeNamedSpecifierGroups.push(group); + namedSpecifierGroups.push(group); } - for (const namedSpecifiers of typeNamedSpecifierGroups) { + for (const namedSpecifiers of namedSpecifierGroups) { const { removeRange, textRange } = getNamedSpecifierRanges( namedSpecifiers, allNamedSpecifiers, @@ -541,7 +566,53 @@ export default util.createRule({ if (!util.isCommaToken(before) && !util.isOpeningBraceToken(before)) { insertText = `,${insertText}`; } - return fixer.insertTextBefore(closingBraceToken, `${insertText}`); + return fixer.insertTextBefore(closingBraceToken, insertText); + } + + /** + * insert type keyword to named import node. + * e.g. + * import ADefault, { Already, type Type1, type Type2 } from 'foo' + * ^^^^ insert + */ + function* fixInsertTypeKeywordInNamedSpecifierList( + fixer: TSESLint.RuleFixer, + typeSpecifiers: TSESTree.ImportSpecifier[], + ): IterableIterator { + for (const spec of typeSpecifiers) { + const insertText = sourceCode.text.slice(...spec.range); + yield fixer.replaceTextRange(spec.range, `type ${insertText}`); + } + } + + function* fixInlineTypeImportDeclaration( + fixer: TSESLint.RuleFixer, + report: ReportValueImport, + sourceImports: SourceImports, + ): IterableIterator { + const { node } = report; + // For a value import, will only add an inline type to named specifiers + const { namedSpecifiers } = classifySpecifier(node); + const typeNamedSpecifiers = namedSpecifiers.filter(specifier => + report.typeSpecifiers.includes(specifier), + ); + + if (sourceImports.valueImport) { + // add import named type specifiers to its value import + // import ValueA, { type A } + // ^^^^ insert + const { namedSpecifiers: valueImportNamedSpecifiers } = + classifySpecifier(sourceImports.valueImport); + if ( + sourceImports.valueOnlyNamedImport || + valueImportNamedSpecifiers.length + ) { + yield* fixInsertTypeKeywordInNamedSpecifierList( + fixer, + typeNamedSpecifiers, + ); + } + } } function* fixToTypeImportDeclaration( @@ -567,13 +638,31 @@ export default util.createRule({ // import Type from 'foo' yield* fixInsertTypeSpecifierForImportDeclaration(fixer, node, true); return; + } else if ( + fixStyle === 'inline-type-imports' && + !report.typeSpecifiers.includes(defaultSpecifier) && + namedSpecifiers.length > 0 && + !namespaceSpecifier + ) { + // if there is a default specifier but it isn't a type specifier, then just add the inline type modifier to the named specifiers + // import AValue, {BValue, Type1, Type2} from 'foo' + yield* fixInlineTypeImportDeclaration(fixer, report, sourceImports); + return; } - } else { + } else if (!namespaceSpecifier) { if ( + fixStyle === 'inline-type-imports' && + namedSpecifiers.some(specifier => + report.typeSpecifiers.includes(specifier), + ) + ) { + // import {AValue, Type1, Type2} from 'foo' + yield* fixInlineTypeImportDeclaration(fixer, report, sourceImports); + return; + } else if ( namedSpecifiers.every(specifier => report.typeSpecifiers.includes(specifier), - ) && - !namespaceSpecifier + ) ) { // import {Type1, Type2} from 'foo' yield* fixInsertTypeSpecifierForImportDeclaration(fixer, node, false); @@ -606,12 +695,25 @@ export default util.createRule({ afterFixes.push(insertTypeNamedSpecifiers); } } else { - yield fixer.insertTextBefore( - node, - `import type {${ - fixesNamedSpecifiers.typeNamedSpecifiersText - }} from ${sourceCode.getText(node.source)};\n`, - ); + // The import is both default and named. Insert named on new line because can't mix default type import and named type imports + if (fixStyle === 'inline-type-imports') { + yield fixer.insertTextBefore( + node, + `import {${typeNamedSpecifiers + .map(spec => { + const insertText = sourceCode.text.slice(...spec.range); + return `type ${insertText}`; + }) + .join(', ')}} from ${sourceCode.getText(node.source)};\n`, + ); + } else { + yield fixer.insertTextBefore( + node, + `import type {${ + fixesNamedSpecifiers.typeNamedSpecifiersText + }} from ${sourceCode.getText(node.source)};\n`, + ); + } } } @@ -736,8 +838,6 @@ export default util.createRule({ closingBraceToken.range[1], ); if (node.specifiers.length > 1) { - // import type Foo from 'foo' - // import type {...} from 'foo' // <- insert yield fixer.insertTextAfter( node, `\nimport type${specifiersText} from ${sourceCode.getText( @@ -794,6 +894,9 @@ export default util.createRule({ } } + // we have some valueSpecifiers intermixed in types that need to be put on their own line + // import type { Type1, A } from 'foo' + // import type { A } from 'foo' const valueNamedSpecifiers = namedSpecifiers.filter(specifier => report.valueSpecifiers.includes(specifier), ); @@ -819,6 +922,8 @@ export default util.createRule({ afterFixes.push(insertTypeNamedSpecifiers); } } else { + // some are types. + // Add new value import and later remove those value specifiers from import type yield fixer.insertTextBefore( node, `import {${ @@ -862,6 +967,8 @@ export default util.createRule({ fixer: TSESLint.RuleFixer, node: TSESTree.ImportSpecifier, ): IterableIterator { + // import { type Foo } from 'foo' + // ^^^^ remove const typeToken = util.nullThrows( sourceCode.getFirstToken(node, isTypeToken), util.NullThrowsReasons.MissingToken('type', node.type), diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts index c9460305847a..bc2547ffa3f6 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts @@ -102,6 +102,10 @@ enum Modifiers { unused = 1 << 10, // properties that require quoting requiresQuotes = 1 << 11, + // class members that are overridden + override = 1 << 12, + // class methods, object function properties, or functions that are async via the `async` keyword + async = 1 << 13, // make sure TypeModifiers starts at Modifiers + 1 or else sorting won't work } diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts index fab1d1bc2b65..179b6dd7f43d 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts @@ -170,15 +170,21 @@ const SCHEMA: JSONSchema.JSONSchema4 = { selectorsSchema(), ...selectorSchema('default', false, util.getEnumNames(Modifiers)), - ...selectorSchema('variableLike', false, ['unused']), + ...selectorSchema('variableLike', false, ['unused', 'async']), ...selectorSchema('variable', true, [ 'const', 'destructured', 'exported', 'global', 'unused', + 'async', + ]), + ...selectorSchema('function', false, [ + 'exported', + 'global', + 'unused', + 'async', ]), - ...selectorSchema('function', false, ['exported', 'global', 'unused']), ...selectorSchema('parameter', true, ['destructured', 'unused']), ...selectorSchema('memberLike', false, [ @@ -189,6 +195,8 @@ const SCHEMA: JSONSchema.JSONSchema4 = { 'readonly', 'requiresQuotes', 'static', + 'override', + 'async', ]), ...selectorSchema('classProperty', true, [ 'abstract', @@ -198,6 +206,7 @@ const SCHEMA: JSONSchema.JSONSchema4 = { 'readonly', 'requiresQuotes', 'static', + 'override', ]), ...selectorSchema('objectLiteralProperty', true, [ 'public', @@ -222,6 +231,8 @@ const SCHEMA: JSONSchema.JSONSchema4 = { 'readonly', 'requiresQuotes', 'static', + 'override', + 'async', ]), ...selectorSchema('classMethod', false, [ @@ -231,10 +242,13 @@ const SCHEMA: JSONSchema.JSONSchema4 = { 'public', 'requiresQuotes', 'static', + 'override', + 'async', ]), ...selectorSchema('objectLiteralMethod', false, [ 'public', 'requiresQuotes', + 'async', ]), ...selectorSchema('typeMethod', false, ['public', 'requiresQuotes']), ...selectorSchema('method', false, [ @@ -244,6 +258,8 @@ const SCHEMA: JSONSchema.JSONSchema4 = { 'public', 'requiresQuotes', 'static', + 'override', + 'async', ]), ...selectorSchema('accessor', true, [ 'abstract', @@ -252,6 +268,7 @@ const SCHEMA: JSONSchema.JSONSchema4 = { 'public', 'requiresQuotes', 'static', + 'override', ]), ...selectorSchema('enumMember', false, ['requiresQuotes']), diff --git a/packages/eslint-plugin/src/rules/naming-convention.ts b/packages/eslint-plugin/src/rules/naming-convention.ts index 2984c49f5a29..05f3dd0f2a6b 100644 --- a/packages/eslint-plugin/src/rules/naming-convention.ts +++ b/packages/eslint-plugin/src/rules/naming-convention.ts @@ -138,6 +138,9 @@ export default util.createRule({ if ('readonly' in node && node.readonly) { modifiers.add(Modifiers.readonly); } + if ('override' in node && node.override) { + modifiers.add(Modifiers.override); + } if ( node.type === AST_NODE_TYPES.TSAbstractPropertyDefinition || node.type === AST_NODE_TYPES.TSAbstractMethodDefinition @@ -182,6 +185,34 @@ export default util.createRule({ ); } + function isAsyncMemberOrProperty( + propertyOrMemberNode: + | TSESTree.PropertyNonComputedName + | TSESTree.TSMethodSignatureNonComputedName + | TSESTree.PropertyDefinitionNonComputedName + | TSESTree.TSAbstractPropertyDefinitionNonComputedName + | TSESTree.MethodDefinitionNonComputedName + | TSESTree.TSAbstractMethodDefinitionNonComputedName, + ): boolean { + return Boolean( + 'value' in propertyOrMemberNode && + propertyOrMemberNode.value && + 'async' in propertyOrMemberNode.value && + propertyOrMemberNode.value.async, + ); + } + + function isAsyncVariableIdentifier(id: TSESTree.Identifier): boolean { + return Boolean( + id.parent && + (('async' in id.parent && id.parent.async) || + ('init' in id.parent && + id.parent.init && + 'async' in id.parent.init && + id.parent.init.async)), + ); + } + return { // #region variable @@ -219,6 +250,10 @@ export default util.createRule({ modifiers.add(Modifiers.unused); } + if (isAsyncVariableIdentifier(id)) { + modifiers.add(Modifiers.async); + } + validator(id, modifiers); }); }, @@ -254,6 +289,10 @@ export default util.createRule({ modifiers.add(Modifiers.unused); } + if (node.async) { + modifiers.add(Modifiers.async); + } + validator(node.id, modifiers); }, @@ -360,6 +399,11 @@ export default util.createRule({ | TSESTree.TSMethodSignatureNonComputedName, ): void { const modifiers = new Set([Modifiers.public]); + + if (isAsyncMemberOrProperty(node)) { + modifiers.add(Modifiers.async); + } + handleMember(validators.objectLiteralMethod, node, modifiers); }, @@ -376,6 +420,11 @@ export default util.createRule({ | TSESTree.TSAbstractMethodDefinitionNonComputedName, ): void { const modifiers = getMemberModifiers(node); + + if (isAsyncMemberOrProperty(node)) { + modifiers.add(Modifiers.async); + } + handleMember(validators.classMethod, node, modifiers); }, diff --git a/packages/eslint-plugin/src/rules/no-shadow.ts b/packages/eslint-plugin/src/rules/no-shadow.ts index 1f746a3201c6..7d8eff0b9e22 100644 --- a/packages/eslint-plugin/src/rules/no-shadow.ts +++ b/packages/eslint-plugin/src/rules/no-shadow.ts @@ -147,8 +147,9 @@ export default util.createRule({ return false; } - const id = variable.identifiers[0]; - return util.isFunctionType(id.parent); + return variable.defs.every( + def => def.node.type === AST_NODE_TYPES.TSFunctionType, + ); } function isGenericOfStaticMethod( diff --git a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts index dc9b514e3531..89eb72094b6e 100644 --- a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts +++ b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts @@ -35,7 +35,7 @@ export default util.createRule({ type: 'suggestion', docs: { description: - 'Enforce using concise optional chain expressions instead of chained logical ands', + 'Enforce using concise optional chain expressions instead of chained logical ands, negated logical ors, or empty objects', recommended: 'strict', }, hasSuggestions: true, @@ -111,6 +111,81 @@ export default util.createRule({ ], }); }, + [[ + 'LogicalExpression[operator="||"] > UnaryExpression[operator="!"] > Identifier', + 'LogicalExpression[operator="||"] > UnaryExpression[operator="!"] > MemberExpression', + 'LogicalExpression[operator="||"] > UnaryExpression[operator="!"] > ChainExpression > MemberExpression', + ].join(',')]( + initialIdentifierOrNotEqualsExpr: + | TSESTree.Identifier + | TSESTree.MemberExpression, + ): void { + // selector guarantees this cast + const initialExpression = ( + initialIdentifierOrNotEqualsExpr.parent!.type === + AST_NODE_TYPES.ChainExpression + ? initialIdentifierOrNotEqualsExpr.parent.parent + : initialIdentifierOrNotEqualsExpr.parent + )!.parent as TSESTree.LogicalExpression; + + if ( + initialExpression.left.type !== AST_NODE_TYPES.UnaryExpression || + initialExpression.left.argument !== initialIdentifierOrNotEqualsExpr + ) { + // the node(identifier or member expression) is not the deepest left node + return; + } + + // walk up the tree to figure out how many logical expressions we can include + let previous: TSESTree.LogicalExpression = initialExpression; + let current: TSESTree.Node = initialExpression; + let previousLeftText = getText(initialIdentifierOrNotEqualsExpr); + let optionallyChainedCode = previousLeftText; + let expressionCount = 1; + while (current.type === AST_NODE_TYPES.LogicalExpression) { + if ( + current.right.type !== AST_NODE_TYPES.UnaryExpression || + !isValidChainTarget( + current.right.argument, + // only allow unary '!' with identifiers for the first chain - !foo || !foo() + expressionCount === 1, + ) + ) { + break; + } + const { rightText, shouldBreak } = breakIfInvalid({ + rightNode: current.right.argument, + previousLeftText, + }); + if (shouldBreak) { + break; + } + + ({ + expressionCount, + previousLeftText, + optionallyChainedCode, + previous, + current, + } = normalizeRepeatingPatterns( + rightText, + expressionCount, + previousLeftText, + optionallyChainedCode, + previous, + current, + )); + } + + reportIfMoreThanOne({ + expressionCount, + previous, + optionallyChainedCode, + sourceCode, + context, + shouldHandleChainedAnds: false, + }); + }, [[ 'LogicalExpression[operator="&&"] > Identifier', 'LogicalExpression[operator="&&"] > MemberExpression', @@ -155,94 +230,76 @@ export default util.createRule({ ) { break; } - - const leftText = previousLeftText; - const rightText = getText(current.right); - // can't just use startsWith because of cases like foo && fooBar.baz; - const matchRegex = new RegExp( - `^${ - // escape regex characters - leftText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') - }[^a-zA-Z0-9_$]`, - ); - if ( - !matchRegex.test(rightText) && - // handle redundant cases like foo.bar && foo.bar - leftText !== rightText - ) { + const { rightText, shouldBreak } = breakIfInvalid({ + rightNode: current.right, + previousLeftText, + }); + if (shouldBreak) { break; } - // omit weird doubled up expression that make no sense like foo.bar && foo.bar - if (rightText !== leftText) { - expressionCount += 1; - previousLeftText = rightText; - - /* - Diff the left and right text to construct the fix string - There are the following cases: - 1) - rightText === 'foo.bar.baz.buzz' - leftText === 'foo.bar.baz' - diff === '.buzz' - 2) - rightText === 'foo.bar.baz.buzz()' - leftText === 'foo.bar.baz' - diff === '.buzz()' - 3) - rightText === 'foo.bar.baz.buzz()' - leftText === 'foo.bar.baz.buzz' - diff === '()' - 4) - rightText === 'foo.bar.baz[buzz]' - leftText === 'foo.bar.baz' - diff === '[buzz]' - 5) - rightText === 'foo.bar.baz?.buzz' - leftText === 'foo.bar.baz' - diff === '?.buzz' - */ - const diff = rightText.replace(leftText, ''); - if (diff.startsWith('?')) { - // item was "pre optional chained" - optionallyChainedCode += diff; - } else { - const needsDot = diff.startsWith('(') || diff.startsWith('['); - optionallyChainedCode += `?${needsDot ? '.' : ''}${diff}`; - } - } - - previous = current; - current = util.nullThrows( - current.parent, - util.NullThrowsReasons.MissingParent, - ); + ({ + expressionCount, + previousLeftText, + optionallyChainedCode, + previous, + current, + } = normalizeRepeatingPatterns( + rightText, + expressionCount, + previousLeftText, + optionallyChainedCode, + previous, + current, + )); } - if (expressionCount > 1) { - if (previous.right.type === AST_NODE_TYPES.BinaryExpression) { - // case like foo && foo.bar !== someValue - optionallyChainedCode += ` ${ - previous.right.operator - } ${sourceCode.getText(previous.right.right)}`; - } - - context.report({ - node: previous, - messageId: 'preferOptionalChain', - suggest: [ - { - messageId: 'optionalChainSuggest', - fix: (fixer): TSESLint.RuleFix[] => [ - fixer.replaceText(previous, optionallyChainedCode), - ], - }, - ], - }); - } + reportIfMoreThanOne({ + expressionCount, + previous, + optionallyChainedCode, + sourceCode, + context, + shouldHandleChainedAnds: true, + }); }, }; + interface BreakIfInvalidResult { + leftText: string; + rightText: string; + shouldBreak: boolean; + } + + interface BreakIfInvalidOptions { + previousLeftText: string; + rightNode: ValidChainTarget; + } + + function breakIfInvalid({ + previousLeftText, + rightNode, + }: BreakIfInvalidOptions): BreakIfInvalidResult { + let shouldBreak = false; + + const rightText = getText(rightNode); + // can't just use startsWith because of cases like foo && fooBar.baz; + const matchRegex = new RegExp( + `^${ + // escape regex characters + previousLeftText.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + }[^a-zA-Z0-9_$]`, + ); + if ( + !matchRegex.test(rightText) && + // handle redundant cases like foo.bar && foo.bar + previousLeftText !== rightText + ) { + shouldBreak = true; + } + return { shouldBreak, leftText: previousLeftText, rightText }; + } + function getText(node: ValidChainTarget): string { if (node.type === AST_NODE_TYPES.BinaryExpression) { return getText( @@ -299,6 +356,11 @@ export default util.createRule({ return getText(node.expression); } + if (node.object.type === AST_NODE_TYPES.TSNonNullExpression) { + // Not supported mixing with TSNonNullExpression + return ''; + } + return getMemberExpressionText(node); } @@ -389,6 +451,132 @@ const ALLOWED_NON_COMPUTED_PROP_TYPES: ReadonlySet = new Set([ AST_NODE_TYPES.Identifier, ]); +interface ReportIfMoreThanOneOptions { + expressionCount: number; + previous: TSESTree.LogicalExpression; + optionallyChainedCode: string; + sourceCode: Readonly; + context: Readonly< + TSESLint.RuleContext< + 'preferOptionalChain' | 'optionalChainSuggest', + never[] + > + >; + shouldHandleChainedAnds: boolean; +} + +function reportIfMoreThanOne({ + expressionCount, + previous, + optionallyChainedCode, + sourceCode, + context, + shouldHandleChainedAnds, +}: ReportIfMoreThanOneOptions): void { + if (expressionCount > 1) { + if ( + shouldHandleChainedAnds && + previous.right.type === AST_NODE_TYPES.BinaryExpression + ) { + // case like foo && foo.bar !== someValue + optionallyChainedCode += ` ${ + previous.right.operator + } ${sourceCode.getText(previous.right.right)}`; + } + + context.report({ + node: previous, + messageId: 'preferOptionalChain', + suggest: [ + { + messageId: 'optionalChainSuggest', + fix: (fixer): TSESLint.RuleFix[] => [ + fixer.replaceText( + previous, + `${shouldHandleChainedAnds ? '' : '!'}${optionallyChainedCode}`, + ), + ], + }, + ], + }); + } +} + +interface NormalizedPattern { + expressionCount: number; + previousLeftText: string; + optionallyChainedCode: string; + previous: TSESTree.LogicalExpression; + current: TSESTree.Node; +} + +function normalizeRepeatingPatterns( + rightText: string, + expressionCount: number, + previousLeftText: string, + optionallyChainedCode: string, + previous: TSESTree.Node, + current: TSESTree.Node, +): NormalizedPattern { + const leftText = previousLeftText; + // omit weird doubled up expression that make no sense like foo.bar && foo.bar + if (rightText !== previousLeftText) { + expressionCount += 1; + previousLeftText = rightText; + + /* + Diff the left and right text to construct the fix string + There are the following cases: + + 1) + rightText === 'foo.bar.baz.buzz' + leftText === 'foo.bar.baz' + diff === '.buzz' + + 2) + rightText === 'foo.bar.baz.buzz()' + leftText === 'foo.bar.baz' + diff === '.buzz()' + + 3) + rightText === 'foo.bar.baz.buzz()' + leftText === 'foo.bar.baz.buzz' + diff === '()' + + 4) + rightText === 'foo.bar.baz[buzz]' + leftText === 'foo.bar.baz' + diff === '[buzz]' + + 5) + rightText === 'foo.bar.baz?.buzz' + leftText === 'foo.bar.baz' + diff === '?.buzz' + */ + const diff = rightText.replace(leftText, ''); + if (diff.startsWith('?')) { + // item was "pre optional chained" + optionallyChainedCode += diff; + } else { + const needsDot = diff.startsWith('(') || diff.startsWith('['); + optionallyChainedCode += `?${needsDot ? '.' : ''}${diff}`; + } + } + + previous = current as TSESTree.LogicalExpression; + current = util.nullThrows( + current.parent, + util.NullThrowsReasons.MissingParent, + ); + return { + expressionCount, + previousLeftText, + optionallyChainedCode, + previous, + current, + }; +} + function isValidChainTarget( node: TSESTree.Node, allowIdentifier: boolean, diff --git a/packages/eslint-plugin/src/rules/promise-function-async.ts b/packages/eslint-plugin/src/rules/promise-function-async.ts index ba3c3d9478f5..4387bc52c9b2 100644 --- a/packages/eslint-plugin/src/rules/promise-function-async.ts +++ b/packages/eslint-plugin/src/rules/promise-function-async.ts @@ -175,7 +175,10 @@ export default util.createRule({ } // if current token is a keyword like `static` or `public` then skip it - while (keyToken.type === AST_TOKEN_TYPES.Keyword) { + while ( + keyToken.type === AST_TOKEN_TYPES.Keyword && + keyToken.range[0] < method.key.range[0] + ) { keyToken = sourceCode.getTokenAfter(keyToken)!; } diff --git a/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts b/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts index b1389b26e6ba..ee01b29c1b0f 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-imports.test.ts @@ -118,11 +118,80 @@ ruleTester.run('consistent-type-imports', rule, { `, options: [{ prefer: 'no-type-imports' }], }, + ` + import { type A } from 'foo'; + type T = A; + `, ` import { type A, B } from 'foo'; type T = A; const b = B; `, + ` + import { type A, type B } from 'foo'; + type T = A; + type Z = B; + `, + ` + import { B } from 'foo'; + import { type A } from 'foo'; + type T = A; + const b = B; + `, + { + code: ` + import { B, type A } from 'foo'; + type T = A; + const b = B; + `, + options: [{ fixStyle: 'inline-type-imports' }], + }, + { + code: ` + import { B } from 'foo'; + import type A from 'baz'; + type T = A; + const b = B; + `, + options: [{ fixStyle: 'inline-type-imports' }], + }, + { + code: ` + import { type B } from 'foo'; + import type { A } from 'foo'; + type T = A; + const b = B; + `, + options: [{ fixStyle: 'inline-type-imports' }], + }, + { + code: ` + import { B, type C } from 'foo'; + import type A from 'baz'; + type T = A; + type Z = C; + const b = B; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + }, + { + code: ` + import { B } from 'foo'; + import type { A } from 'foo'; + type T = A; + const b = B; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + }, + { + code: ` + import { B } from 'foo'; + import { A } from 'foo'; + type T = A; + const b = B; + `, + options: [{ prefer: 'no-type-imports', fixStyle: 'inline-type-imports' }], + }, // exports ` import Type from 'foo'; @@ -512,6 +581,24 @@ export type Y = { }, ], }, + { + code: ` + import Foo from 'foo'; + let foo: Foo; + `, + output: ` + import type Foo from 'foo'; + let foo: Foo; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'typeOverValue', + line: 2, + column: 9, + }, + ], + }, { code: ` import { A, B } from 'foo'; @@ -1833,5 +1920,277 @@ const b = B; }, ], }, + + // inline-type-imports + { + code: ` + import { A, B } from 'foo'; + let foo: A; + let bar: B; + `, + output: ` + import { type A, type B } from 'foo'; + let foo: A; + let bar: B; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'typeOverValue', + line: 2, + column: 9, + }, + ], + }, + { + code: ` + import { A, B } from 'foo'; + + let foo: A; + B(); + `, + output: ` + import { type A, B } from 'foo'; + + let foo: A; + B(); + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'aImportIsOnlyTypes', + line: 2, + column: 9, + }, + ], + }, + { + code: ` + import { A, B } from 'foo'; + type T = A; + B(); + `, + output: ` + import { type A, B } from 'foo'; + type T = A; + B(); + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'aImportIsOnlyTypes', + line: 2, + column: 9, + }, + ], + }, + { + code: ` + import { A } from 'foo'; + import { B } from 'foo'; + type T = A; + type U = B; + `, + output: ` + import { type A } from 'foo'; + import { type B } from 'foo'; + type T = A; + type U = B; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'typeOverValue', + line: 2, + column: 9, + }, + { + messageId: 'typeOverValue', + line: 3, + column: 9, + }, + ], + }, + { + code: ` + import { A } from 'foo'; + import B from 'foo'; + type T = A; + type U = B; + `, + output: ` + import { type A } from 'foo'; + import type B from 'foo'; + type T = A; + type U = B; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'typeOverValue', + line: 2, + column: 9, + }, + { + messageId: 'typeOverValue', + line: 3, + column: 9, + }, + ], + }, + { + code: ` +import A, { B, C } from 'foo'; +type T = B; +type U = C; +A(); + `, + output: ` +import A, { type B, type C } from 'foo'; +type T = B; +type U = C; +A(); + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'someImportsAreOnlyTypes', + line: 2, + column: 1, + }, + ], + }, + { + code: ` +import A, { B, C } from 'foo'; +type T = B; +type U = C; +type V = A; + `, + output: ` +import {type B, type C} from 'foo'; +import type A from 'foo'; +type T = B; +type U = C; +type V = A; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'typeOverValue', + line: 2, + column: 1, + }, + ], + }, + { + code: ` +import A, { B, C as D } from 'foo'; +type T = B; +type U = D; +type V = A; + `, + output: ` +import {type B, type C as D} from 'foo'; +import type A from 'foo'; +type T = B; +type U = D; +type V = A; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'typeOverValue', + line: 2, + column: 1, + }, + ], + }, + { + code: ` + import { /* comment */ A, B } from 'foo'; + type T = A; + `, + output: ` + import { /* comment */ type A, B } from 'foo'; + type T = A; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'aImportIsOnlyTypes', + line: 2, + column: 9, + }, + ], + }, + { + code: ` + import { B, /* comment */ A } from 'foo'; + type T = A; + `, + output: ` + import { B, /* comment */ type A } from 'foo'; + type T = A; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'aImportIsOnlyTypes', + line: 2, + column: 9, + }, + ], + }, + { + code: ` +import { A, B, C } from 'foo'; +import type { D } from 'deez'; + +const foo: A = B(); +let bar: C; +let baz: D; + `, + output: ` +import { type A, B, type C } from 'foo'; +import type { D } from 'deez'; + +const foo: A = B(); +let bar: C; +let baz: D; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'someImportsAreOnlyTypes', + line: 2, + column: 1, + }, + ], + }, + { + code: ` +import { A, B, type C } from 'foo'; +import type { D } from 'deez'; +const foo: A = B(); +let bar: C; +let baz: D; + `, + output: ` +import { type A, B, type C } from 'foo'; +import type { D } from 'deez'; +const foo: A = B(); +let bar: C; +let baz: D; + `, + options: [{ prefer: 'type-imports', fixStyle: 'inline-type-imports' }], + errors: [ + { + messageId: 'aImportIsOnlyTypes', + line: 2, + column: 1, + }, + ], + }, ], }); diff --git a/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts b/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts index 4c496b6c127b..9917aec3cb7a 100644 --- a/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts +++ b/packages/eslint-plugin/tests/rules/naming-convention/naming-convention.test.ts @@ -768,6 +768,105 @@ ruleTester.run('naming-convention', rule, { }, ], }, + { + code: ` + const obj = { + Bar() { + return 42; + }, + async async_bar() { + return 42; + }, + }; + class foo { + public Bar() { + return 42; + } + public async async_bar() { + return 42; + } + } + abstract class foo { + public abstract Bar() { + return 42; + } + public abstract async async_bar() { + return 42; + } + } + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: ['method', 'objectLiteralMethod'], + format: ['snake_case'], + modifiers: ['async'], + }, + { + selector: 'method', + format: ['PascalCase'], + }, + ], + }, + { + code: ` + const async_bar1 = async () => {}; + async function async_bar2() {} + const async_bar3 = async function async_bar4() {}; + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: 'method', + format: ['PascalCase'], + }, + { + selector: ['variable'], + format: ['snake_case'], + modifiers: ['async'], + }, + ], + }, + { + code: ` + class foo extends bar { + public someAttribute = 1; + public override some_attribute_override = 1; + public someMethod() { + return 42; + } + public override some_method_override2() { + return 42; + } + } + abstract class foo extends bar { + public abstract someAttribute: string; + public abstract override some_attribute_override: string; + public abstract someMethod(): string; + public abstract override some_method_override2(): string; + } + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: ['memberLike'], + modifiers: ['override'], + format: ['snake_case'], + }, + ], + }, ], invalid: [ { @@ -1526,5 +1625,352 @@ ruleTester.run('naming-convention', rule, { // 6, not 7 because 'foo' is valid errors: Array(6).fill({ messageId: 'doesNotMatchFormat' }), }, + { + code: ` + class foo { + public Bar() { + return 42; + } + public async async_bar() { + return 42; + } + // ❌ error + public async asyncBar() { + return 42; + } + // ❌ error + public AsyncBar2 = async () => { + return 42; + }; + // ❌ error + public AsyncBar3 = async function () { + return 42; + }; + } + abstract class foo { + public abstract Bar(): number; + public abstract async async_bar(): number; + // ❌ error + public abstract async ASYNC_BAR(): number; + } + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: 'method', + format: ['PascalCase'], + }, + { + selector: ['method', 'objectLiteralMethod'], + format: ['snake_case'], + modifiers: ['async'], + }, + ], + errors: [ + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Class Method', + name: 'asyncBar', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Class Method', + name: 'AsyncBar2', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Class Method', + name: 'AsyncBar3', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Class Method', + name: 'ASYNC_BAR', + formats: 'snake_case', + }, + }, + ], + }, + { + code: ` + const obj = { + Bar() { + return 42; + }, + async async_bar() { + return 42; + }, + // ❌ error + async AsyncBar() { + return 42; + }, + // ❌ error + AsyncBar2: async () => { + return 42; + }, + // ❌ error + AsyncBar3: async function () { + return 42; + }, + }; + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: 'method', + format: ['PascalCase'], + }, + { + selector: ['method', 'objectLiteralMethod'], + format: ['snake_case'], + modifiers: ['async'], + }, + ], + errors: [ + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Object Literal Method', + name: 'AsyncBar', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Object Literal Method', + name: 'AsyncBar2', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Object Literal Method', + name: 'AsyncBar3', + formats: 'snake_case', + }, + }, + ], + }, + { + code: ` + const syncbar1 = () => {}; + function syncBar2() {} + const syncBar3 = function syncBar4() {}; + + // ❌ error + const AsyncBar1 = async () => {}; + const async_bar1 = async () => {}; + const async_bar3 = async function async_bar4() {}; + async function async_bar2() {} + // ❌ error + const asyncBar5 = async function async_bar6() {}; + `, + parserOptions, + options: [ + { + selector: 'variableLike', + format: ['camelCase'], + }, + { + selector: ['variableLike'], + modifiers: ['async'], + format: ['snake_case'], + }, + ], + errors: [ + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Variable', + name: 'AsyncBar1', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Variable', + name: 'asyncBar5', + formats: 'snake_case', + }, + }, + ], + }, + { + code: ` + const syncbar1 = () => {}; + function syncBar2() {} + const syncBar3 = function syncBar4() {}; + + const async_bar1 = async () => {}; + // ❌ error + async function asyncBar2() {} + const async_bar3 = async function async_bar4() {}; + async function async_bar2() {} + // ❌ error + const async_bar3 = async function ASYNC_BAR4() {}; + `, + parserOptions, + options: [ + { + selector: 'variableLike', + format: ['camelCase'], + }, + { + selector: ['variableLike'], + modifiers: ['async'], + format: ['snake_case'], + }, + ], + errors: [ + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Function', + name: 'asyncBar2', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Function', + name: 'ASYNC_BAR4', + formats: 'snake_case', + }, + }, + ], + }, + { + code: ` + class foo extends bar { + public someAttribute = 1; + public override some_attribute_override = 1; + // ❌ error + public override someAttributeOverride = 1; + } + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: ['memberLike'], + modifiers: ['override'], + format: ['snake_case'], + }, + ], + errors: [ + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Class Property', + name: 'someAttributeOverride', + formats: 'snake_case', + }, + }, + ], + }, + { + code: ` + class foo extends bar { + public override some_method_override() { + return 42; + } + // ❌ error + public override someMethodOverride() { + return 42; + } + } + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: ['memberLike'], + modifiers: ['override'], + format: ['snake_case'], + }, + ], + errors: [ + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Class Method', + name: 'someMethodOverride', + formats: 'snake_case', + }, + }, + ], + }, + { + code: ` + class foo extends bar { + public get someGetter(): string; + public override get some_getter_override(): string; + // ❌ error + public override get someGetterOverride(): string; + public set someSetter(val: string); + public override set some_setter_override(val: string); + // ❌ error + public override set someSetterOverride(val: string); + } + `, + parserOptions, + options: [ + { + selector: 'memberLike', + format: ['camelCase'], + }, + { + selector: ['memberLike'], + modifiers: ['override'], + format: ['snake_case'], + }, + ], + errors: [ + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Accessor', + name: 'someGetterOverride', + formats: 'snake_case', + }, + }, + { + messageId: 'doesNotMatchFormat', + data: { + type: 'Accessor', + name: 'someSetterOverride', + formats: 'snake_case', + }, + }, + ], + }, ], }); diff --git a/packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts b/packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts index 1097f466a18c..1616051f0e3c 100644 --- a/packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts +++ b/packages/eslint-plugin/tests/rules/no-shadow/no-shadow.test.ts @@ -12,6 +12,25 @@ const ruleTester = new RuleTester({ ruleTester.run('no-shadow TS tests', rule, { valid: [ + 'function foo any>(arg: T) {}', + 'function foo any>(arg: T) {}', + 'function foo any>(arg: T) {}', + 'function foo any>(fn: T, args: any[]) {}', + 'function foo any>(fn: T, args: any[]) {}', + 'function foo any>(fn: T, ...args: any[]) {}', + 'function foo any>(fn: T, args: any[]) {}', + 'function foo any>(fn: T, args: any[]) {}', + 'function foo any>(fn: T, args: any) {}', + ` +function foo any>( + fn: T, + ...args: any[] +) {} + `, + ` +type Args = 1; +function foo void>(arg: T) {} + `, // nested conditional types ` export type ArrayInput = Func extends (arg0: Array) => any @@ -375,6 +394,22 @@ type T = 1; }, { code: ` +type T = 1; +function foo(arg: T) {} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'T', + shadowedLine: 2, + shadowedColumn: 6, + }, + }, + ], + }, + { + code: ` function foo() { return function () {}; } @@ -392,6 +427,22 @@ function foo() { }, { code: ` +type T = string; +function foo void>(arg: T) {} + `, + errors: [ + { + messageId: 'noShadow', + data: { + name: 'T', + shadowedLine: 2, + shadowedColumn: 6, + }, + }, + ], + }, + { + code: ` const x = 1; { type x = string; @@ -703,5 +754,29 @@ let y; }, ], }, + { + code: ` +function foo any>(fn: T, args: any[]) {} + `, + options: [ + { + ignoreTypeValueShadow: false, + builtinGlobals: true, + }, + ], + globals: { + args: 'writable', + }, + errors: [ + { + messageId: 'noShadowGlobal', + data: { + name: 'args', + shadowedLine: 2, + shadowedColumn: 5, + }, + }, + ], + }, ], }); diff --git a/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts b/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts index 0358c065870e..58b309edcc8a 100644 --- a/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts @@ -65,6 +65,16 @@ const baseCases = [ code: 'foo && foo[bar].baz && foo[bar].baz.buzz', output: 'foo?.[bar].baz?.buzz', }, + // case with a property access in computed property + { + code: 'foo && foo[bar.baz] && foo[bar.baz].buzz', + output: 'foo?.[bar.baz]?.buzz', + }, + // case with this keyword + { + code: 'foo[this.bar] && foo[this.bar].baz', + output: 'foo[this.bar]?.baz', + }, // chained calls { code: 'foo && foo.bar && foo.bar.baz && foo.bar.baz.buzz()', @@ -147,6 +157,14 @@ const baseCases = [ ruleTester.run('prefer-optional-chain', rule, { valid: [ + '!a || !b;', + '!a || a.b;', + '!a && a.b;', + '!a && !a.b;', + '!a.b || a.b?.();', + '!a.b || a.b();', + '!foo() || !foo().bar;', + 'foo || {};', 'foo || ({} as any);', '(foo || {})?.bar;', @@ -180,6 +198,17 @@ ruleTester.run('prefer-optional-chain', rule, { 'foo && foo[bar as string] && foo[bar as string].baz;', 'foo && foo[1 + 2] && foo[1 + 2].baz;', 'foo && foo[typeof bar] && foo[typeof bar].baz;', + '!foo || !foo[bar as string] || !foo[bar as string].baz;', + '!foo || !foo[1 + 2] || !foo[1 + 2].baz;', + '!foo || !foo[typeof bar] || !foo[typeof bar].baz;', + // currently do not handle 'this' as the first part of a chain + 'this && this.foo;', + '!this || !this.foo;', + // intentionally do not handle mixed TSNonNullExpression in properties + '!entity.__helper!.__initialized || options.refresh;', + '!foo!.bar || !foo!.bar.baz;', + '!foo!.bar!.baz || !foo!.bar!.baz!.paz;', + '!foo.bar!.baz || !foo.bar!.baz!.paz;', ], invalid: [ ...baseCases, @@ -447,6 +476,22 @@ foo?.bar(/* comment */a, }, ], }, + // case with this keyword at the start of expression + { + code: 'this.bar && this.bar.baz;', + output: null, + errors: [ + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: 'this.bar?.baz;', + }, + ], + }, + ], + }, // other weird cases { code: 'foo && foo?.();', @@ -1144,5 +1189,135 @@ foo?.bar(/* comment */a, }, ], }, + { + code: '(this || {}).foo;', + errors: [ + { + messageId: 'optionalChainSuggest', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: 'this?.foo;', + }, + ], + }, + ], + }, + ...baseCases.map(c => ({ + ...c, + code: c.code.replace(/foo/g, '!foo').replace(/&&/g, '||'), + errors: [ + { + ...c.errors[0], + suggestions: [ + { + ...c.errors[0].suggestions![0], + output: `!${c.errors[0].suggestions![0].output}`, + }, + ], + }, + ], + })), + // case with this keyword at the start of expression + { + code: '!this.bar || !this.bar.baz;', + output: null, + errors: [ + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: '!this.bar?.baz;', + }, + ], + }, + ], + }, + { + code: '!a.b || !a.b();', + output: null, + errors: [ + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: '!a.b?.();', + }, + ], + }, + ], + }, + { + code: '!foo.bar || !foo.bar.baz;', + output: null, + errors: [ + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: '!foo.bar?.baz;', + }, + ], + }, + ], + }, + { + code: '!foo[bar] || !foo[bar]?.[baz];', + output: null, + errors: [ + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: '!foo[bar]?.[baz];', + }, + ], + }, + ], + }, + { + code: '!foo || !foo?.bar.baz;', + output: null, + errors: [ + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: '!foo?.bar.baz;', + }, + ], + }, + ], + }, + // two errors + { + code: noFormat`(!foo || !foo.bar || !foo.bar.baz) && (!baz || !baz.bar || !baz.bar.foo);`, + output: null, + errors: [ + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: noFormat`(!foo?.bar?.baz) && (!baz || !baz.bar || !baz.bar.foo);`, + }, + ], + }, + { + messageId: 'preferOptionalChain', + suggestions: [ + { + messageId: 'optionalChainSuggest', + output: noFormat`(!foo || !foo.bar || !foo.bar.baz) && (!baz?.bar?.foo);`, + }, + ], + }, + ], + }, ], }); diff --git a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts index 69b604c811cb..ccf99b6afcbb 100644 --- a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts +++ b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts @@ -102,6 +102,13 @@ const invalidAsyncModifiers = { constructor() {} } `, + ` +class Foo { + async catch(arg: Promise) { + return arg; + } +} + `, { code: ` function returnsAny(): any { @@ -670,5 +677,80 @@ class Test { } `, }, + // https://github.com/typescript-eslint/typescript-eslint/issues/5729 + { + code: ` +class Foo { + catch() { + return Promise.resolve(1); + } + + public default() { + return Promise.resolve(2); + } + + @decorator + private case() { + return Promise.resolve(3); + } +} + `, + output: ` +class Foo { + async catch() { + return Promise.resolve(1); + } + + public async default() { + return Promise.resolve(2); + } + + @decorator + private async case() { + return Promise.resolve(3); + } +} + `, + errors: [ + { + line: 3, + column: 3, + messageId, + }, + { + line: 7, + column: 3, + messageId, + }, + { + line: 12, + column: 3, + messageId, + }, + ], + }, + { + code: ` +const foo = { + catch() { + return Promise.resolve(1); + }, +}; + `, + output: ` +const foo = { + async catch() { + return Promise.resolve(1); + }, +}; + `, + errors: [ + { + line: 3, + column: 3, + messageId, + }, + ], + }, ], }); diff --git a/packages/experimental-utils/CHANGELOG.md b/packages/experimental-utils/CHANGELOG.md index 90849052a8b8..dbf41b971915 100644 --- a/packages/experimental-utils/CHANGELOG.md +++ b/packages/experimental-utils/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/experimental-utils + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/experimental-utils diff --git a/packages/experimental-utils/package.json b/packages/experimental-utils/package.json index a8beecad680e..901b63d2f303 100644 --- a/packages/experimental-utils/package.json +++ b/packages/experimental-utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/experimental-utils", - "version": "5.42.1", + "version": "5.43.0", "description": "(Experimental) Utilities for working with TypeScript + ESLint together", "keywords": [ "eslint", @@ -38,7 +38,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/utils": "5.42.1" + "@typescript-eslint/utils": "5.43.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index f289c94422c0..c6013137c08b 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/parser + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/parser diff --git a/packages/parser/package.json b/packages/parser/package.json index 3cab6296e241..23ac485be0fd 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/parser", - "version": "5.42.1", + "version": "5.43.0", "description": "An ESLint custom parser which leverages TypeScript ESTree", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -45,9 +45,9 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "dependencies": { - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "debug": "^4.3.4" }, "devDependencies": { diff --git a/packages/scope-manager/CHANGELOG.md b/packages/scope-manager/CHANGELOG.md index a05c850fb595..4707e539d1be 100644 --- a/packages/scope-manager/CHANGELOG.md +++ b/packages/scope-manager/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/scope-manager + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/scope-manager diff --git a/packages/scope-manager/package.json b/packages/scope-manager/package.json index 805f52630891..bc611e14e689 100644 --- a/packages/scope-manager/package.json +++ b/packages/scope-manager/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/scope-manager", - "version": "5.42.1", + "version": "5.43.0", "description": "TypeScript scope analyser for ESLint", "keywords": [ "eslint", @@ -38,12 +38,12 @@ "typecheck": "cd ../../ && nx typecheck @typescript-eslint/scope-manager" }, "dependencies": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1" + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0" }, "devDependencies": { "@types/glob": "*", - "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/typescript-estree": "5.43.0", "glob": "*", "jest-specific-snapshot": "*", "make-dir": "*", diff --git a/packages/shared-fixtures/CHANGELOG.md b/packages/shared-fixtures/CHANGELOG.md index ab596d7e657f..a96e2e632786 100644 --- a/packages/shared-fixtures/CHANGELOG.md +++ b/packages/shared-fixtures/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/shared-fixtures + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/shared-fixtures diff --git a/packages/shared-fixtures/package.json b/packages/shared-fixtures/package.json index ca455a0baa7c..cec6cebc6483 100644 --- a/packages/shared-fixtures/package.json +++ b/packages/shared-fixtures/package.json @@ -1,5 +1,5 @@ { "name": "@typescript-eslint/shared-fixtures", - "version": "5.42.1", + "version": "5.43.0", "private": true } diff --git a/packages/type-utils/CHANGELOG.md b/packages/type-utils/CHANGELOG.md index 05d63922d7b0..86867d3cdde5 100644 --- a/packages/type-utils/CHANGELOG.md +++ b/packages/type-utils/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/type-utils + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) ### Bug Fixes diff --git a/packages/type-utils/package.json b/packages/type-utils/package.json index d7c59969f23b..f72272dd3496 100644 --- a/packages/type-utils/package.json +++ b/packages/type-utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/type-utils", - "version": "5.42.1", + "version": "5.43.0", "description": "Type utilities for working with TypeScript + ESLint together", "keywords": [ "eslint", @@ -39,13 +39,13 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/typescript-estree": "5.42.1", - "@typescript-eslint/utils": "5.42.1", + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/utils": "5.43.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, "devDependencies": { - "@typescript-eslint/parser": "5.42.1", + "@typescript-eslint/parser": "5.43.0", "typescript": "*" }, "peerDependencies": { diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index e40007997a18..cede80aabc06 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/types + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/types diff --git a/packages/types/package.json b/packages/types/package.json index 8d07f4e7f4c9..8b591cd2e0f5 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/types", - "version": "5.42.1", + "version": "5.43.0", "description": "Types for the TypeScript-ESTree AST spec", "keywords": [ "eslint", diff --git a/packages/typescript-estree/CHANGELOG.md b/packages/typescript-estree/CHANGELOG.md index 157724f1c61f..c7f8b17bab41 100644 --- a/packages/typescript-estree/CHANGELOG.md +++ b/packages/typescript-estree/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/typescript-estree + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/typescript-estree diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json index ded0c0f77d6e..f28d6d17f76b 100644 --- a/packages/typescript-estree/package.json +++ b/packages/typescript-estree/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/typescript-estree", - "version": "5.42.1", + "version": "5.43.0", "description": "A parser that converts TypeScript source code into an ESTree compatible form", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -42,8 +42,8 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -59,7 +59,7 @@ "@types/is-glob": "*", "@types/semver": "*", "@types/tmp": "*", - "@typescript-eslint/shared-fixtures": "5.42.1", + "@typescript-eslint/shared-fixtures": "5.43.0", "glob": "*", "jest-specific-snapshot": "*", "make-dir": "*", diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index 0f90a7ba84d9..3a925cebcb93 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/utils + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/utils diff --git a/packages/utils/package.json b/packages/utils/package.json index 6fce05158430..ad353bce00e8 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/utils", - "version": "5.42.1", + "version": "5.43.0", "description": "Utilities for working with TypeScript + ESLint together", "keywords": [ "eslint", @@ -41,9 +41,9 @@ "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -52,7 +52,7 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "devDependencies": { - "@typescript-eslint/parser": "5.42.1", + "@typescript-eslint/parser": "5.43.0", "typescript": "*" }, "funding": { diff --git a/packages/visitor-keys/CHANGELOG.md b/packages/visitor-keys/CHANGELOG.md index c3f21858ae05..9ebb6b77f0b9 100644 --- a/packages/visitor-keys/CHANGELOG.md +++ b/packages/visitor-keys/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/visitor-keys + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/visitor-keys diff --git a/packages/visitor-keys/package.json b/packages/visitor-keys/package.json index 285fb30b312e..62a831366875 100644 --- a/packages/visitor-keys/package.json +++ b/packages/visitor-keys/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/visitor-keys", - "version": "5.42.1", + "version": "5.43.0", "description": "Visitor keys used to help traverse the TypeScript-ESTree AST", "keywords": [ "eslint", @@ -39,7 +39,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/types": "5.42.1", + "@typescript-eslint/types": "5.43.0", "eslint-visitor-keys": "^3.3.0" }, "devDependencies": { diff --git a/packages/website-eslint/CHANGELOG.md b/packages/website-eslint/CHANGELOG.md index 08eac0b54512..5ea048243ae6 100644 --- a/packages/website-eslint/CHANGELOG.md +++ b/packages/website-eslint/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package @typescript-eslint/website-eslint + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package @typescript-eslint/website-eslint diff --git a/packages/website-eslint/package.json b/packages/website-eslint/package.json index 7f0d3551d711..0baf89601da0 100644 --- a/packages/website-eslint/package.json +++ b/packages/website-eslint/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/website-eslint", - "version": "5.42.1", + "version": "5.43.0", "private": true, "description": "ESLint which works in browsers.", "engines": { @@ -16,19 +16,19 @@ "format": "prettier --write \"./**/*.{ts,mts,cts,tsx,js,mjs,cjs,jsx,json,md,css}\" --ignore-path ../../.prettierignore" }, "dependencies": { - "@typescript-eslint/types": "5.42.1", - "@typescript-eslint/utils": "5.42.1" + "@typescript-eslint/types": "5.43.0", + "@typescript-eslint/utils": "5.43.0" }, "devDependencies": { "@rollup/plugin-commonjs": "^23.0.0", "@rollup/plugin-json": "^5.0.0", "@rollup/plugin-node-resolve": "^15.0.0", "@rollup/pluginutils": "^5.0.0", - "@typescript-eslint/eslint-plugin": "5.42.1", - "@typescript-eslint/parser": "5.42.1", - "@typescript-eslint/scope-manager": "5.42.1", - "@typescript-eslint/typescript-estree": "5.42.1", - "@typescript-eslint/visitor-keys": "5.42.1", + "@typescript-eslint/eslint-plugin": "5.43.0", + "@typescript-eslint/parser": "5.43.0", + "@typescript-eslint/scope-manager": "5.43.0", + "@typescript-eslint/typescript-estree": "5.43.0", + "@typescript-eslint/visitor-keys": "5.43.0", "eslint": "*", "rollup": "^2.75.4", "rollup-plugin-terser": "^7.0.2", diff --git a/packages/website/CHANGELOG.md b/packages/website/CHANGELOG.md index 45dc82b46b24..6e050be87af4 100644 --- a/packages/website/CHANGELOG.md +++ b/packages/website/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [5.43.0](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.1...v5.43.0) (2022-11-14) + +**Note:** Version bump only for package website + ## [5.42.1](https://github.com/typescript-eslint/typescript-eslint/compare/v5.42.0...v5.42.1) (2022-11-07) **Note:** Version bump only for package website diff --git a/packages/website/package.json b/packages/website/package.json index b59791a71e9a..5232068f58ab 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "5.42.1", + "version": "5.43.0", "private": true, "scripts": { "build": "docusaurus build", @@ -21,8 +21,8 @@ "@docusaurus/remark-plugin-npm2yarn": "~2.2.0", "@docusaurus/theme-common": "~2.2.0", "@mdx-js/react": "1.6.22", - "@typescript-eslint/parser": "5.42.1", - "@typescript-eslint/website-eslint": "5.42.1", + "@typescript-eslint/parser": "5.43.0", + "@typescript-eslint/website-eslint": "5.43.0", "clsx": "^1.1.1", "eslint": "*", "json-schema": "^0.4.0", @@ -48,7 +48,7 @@ "@types/react": "^18.0.9", "@types/react-helmet": "^6.1.5", "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "5.42.1", + "@typescript-eslint/eslint-plugin": "5.43.0", "copy-webpack-plugin": "^11.0.0", "eslint-plugin-jsx-a11y": "^6.5.1", "eslint-plugin-react": "^7.29.4", diff --git a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx index c7632e25a9f8..e0351d743c7b 100644 --- a/packages/website/src/theme/MDXComponents/RuleAttributes.tsx +++ b/packages/website/src/theme/MDXComponents/RuleAttributes.tsx @@ -62,7 +62,7 @@ export function RuleAttributes({ name }: { name: string }): React.ReactNode { . ), - emoji: '🛠', + emoji: '🔧', }); } diff --git a/yarn.lock b/yarn.lock index 543fa9bbc68d..d77fd4dcba54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2288,39 +2288,39 @@ resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== -"@lerna/add@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/add/-/add-6.0.1.tgz#6d71084fe7918c96c909bebdc5c27ed6006e09d6" - integrity sha512-cCQIlMODhi3KYyTDOp2WWL4Kj2dKK+MmCiaSf+USrbSWPVVXQGn5Eb11XOMUfYYq3Ula75sWL2urtYwuu8IbmA== - dependencies: - "@lerna/bootstrap" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/filter-options" "6.0.1" - "@lerna/npm-conf" "6.0.1" - "@lerna/validation-error" "6.0.1" +"@lerna/add@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-6.0.3.tgz#341927d00b79ad2a2c0e9aec239b203e5a04fa12" + integrity sha512-EM9hJExG6bV4Hg+XpHTg5nGCuZl3pUEdbYLtyXfMUj/7fpCrUkxB0oESIVhFINVbxHm2pdnUfOxPDHwFSyWBig== + dependencies: + "@lerna/bootstrap" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/filter-options" "6.0.3" + "@lerna/npm-conf" "6.0.3" + "@lerna/validation-error" "6.0.3" dedent "^0.7.0" npm-package-arg "8.1.1" p-map "^4.0.0" pacote "^13.6.1" semver "^7.3.4" -"@lerna/bootstrap@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-6.0.1.tgz#2af0b790b9ce426b78f12543159c8506d77afc28" - integrity sha512-a3DWchHFOiRmDN24VTdmTxKvAqw6Msp8pDCWXq4rgOQSFxqyYECd8BYvmy8dTW6LcC4EG0HqTGRguuEaKCasOw== - dependencies: - "@lerna/command" "6.0.1" - "@lerna/filter-options" "6.0.1" - "@lerna/has-npm-version" "6.0.1" - "@lerna/npm-install" "6.0.1" - "@lerna/package-graph" "6.0.1" - "@lerna/pulse-till-done" "6.0.1" - "@lerna/rimraf-dir" "6.0.1" - "@lerna/run-lifecycle" "6.0.1" - "@lerna/run-topologically" "6.0.1" - "@lerna/symlink-binary" "6.0.1" - "@lerna/symlink-dependencies" "6.0.1" - "@lerna/validation-error" "6.0.1" +"@lerna/bootstrap@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-6.0.3.tgz#806fae9955f25ef5468dd7752c5d5469e3253fa7" + integrity sha512-51eT07tAiH1oca9dNrrLXXH6PJZFY4zKEYDqLkx+zMCG/LsIUnzEfy4JBe1GXbFasXfM24pG8wLKoj1sj1CR3A== + dependencies: + "@lerna/command" "6.0.3" + "@lerna/filter-options" "6.0.3" + "@lerna/has-npm-version" "6.0.3" + "@lerna/npm-install" "6.0.3" + "@lerna/package-graph" "6.0.3" + "@lerna/pulse-till-done" "6.0.3" + "@lerna/rimraf-dir" "6.0.3" + "@lerna/run-lifecycle" "6.0.3" + "@lerna/run-topologically" "6.0.3" + "@lerna/symlink-binary" "6.0.3" + "@lerna/symlink-dependencies" "6.0.3" + "@lerna/validation-error" "6.0.3" "@npmcli/arborist" "5.3.0" dedent "^0.7.0" get-port "^5.1.1" @@ -2332,100 +2332,100 @@ p-waterfall "^2.1.1" semver "^7.3.4" -"@lerna/changed@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-6.0.1.tgz#58614a0c65bfab77fefd142d5edc8282e057ea83" - integrity sha512-b0KzqpNv25ZxH9M/7jtDQaXWUBhVzBVJ8DQ4PjjeoulOCQ+mA9tNQr8UVmeU1UZiaNtNz6Hcy55vyvVvNe07VA== +"@lerna/changed@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-6.0.3.tgz#9dfd7ff944b2409c7762a5e376607ea6e5533585" + integrity sha512-VhKl/vVnrY12z2q1it2FkPkRwC3kyZh++kWMNDbMuUqH1kDHuw7KWJjPw6H4LDpoFWj4Q0hPcNRXxJpNiRWD1g== dependencies: - "@lerna/collect-updates" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/listable" "6.0.1" - "@lerna/output" "6.0.1" + "@lerna/collect-updates" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/listable" "6.0.3" + "@lerna/output" "6.0.3" -"@lerna/check-working-tree@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-6.0.1.tgz#ad71d53941b5c85523499b283e5f44b52eca6276" - integrity sha512-9Ti1EuE3IiJUvvAtFk+Xr9Uw6KehT78ghnI4f/hi4uew5q0Mf2+DMaBNexbhOTpRFBeIq4ucDFhiN091pNkUNw== +"@lerna/check-working-tree@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/check-working-tree/-/check-working-tree-6.0.3.tgz#32fb77c5832926f7a66fd1a77bb81a5f46f4fbc5" + integrity sha512-ulAilI5AHvSVluH4QdcRPBbGH6lKU6OARfJFIgFYm8KoPyMESygYIBKBKuTUuyzfp5DOsASq2NiumBW4rpC7hg== dependencies: - "@lerna/collect-uncommitted" "6.0.1" - "@lerna/describe-ref" "6.0.1" - "@lerna/validation-error" "6.0.1" + "@lerna/collect-uncommitted" "6.0.3" + "@lerna/describe-ref" "6.0.3" + "@lerna/validation-error" "6.0.3" -"@lerna/child-process@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-6.0.1.tgz#2141f643a4ed7d38fa9270a80403467a353a3b39" - integrity sha512-5smM8Or/RQkHysNFrUYdrCYlhpr3buNpCYU7T2DPYzOWRPm+X5rCvt/dDOcS3UgYT2jEyS86S5Y7pK2X7eXtmg== +"@lerna/child-process@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-6.0.3.tgz#691040e5e3f64dfe7ef4f4b4d5e6d560e1bef8fc" + integrity sha512-WfFwWdtGA0wvbyq7FB78Gvkd5mVjCGhRoLQY0FIGPQrmZBv3uy7kz5KbRKJlEmoIhVUnFbbV1xURxdqLzNrxoA== dependencies: chalk "^4.1.0" execa "^5.0.0" strong-log-transformer "^2.1.0" -"@lerna/clean@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-6.0.1.tgz#e59f94140e577cbb66f76f78794b97778f78a246" - integrity sha512-ZaWPzzYNkJM7Ib2GWPLSELVBf5nRCGOGBtR9DSLKAore0Me876JLgi4h2R+Y2PVyCvT1kmoQKAclnjxdZbCONA== - dependencies: - "@lerna/command" "6.0.1" - "@lerna/filter-options" "6.0.1" - "@lerna/prompt" "6.0.1" - "@lerna/pulse-till-done" "6.0.1" - "@lerna/rimraf-dir" "6.0.1" +"@lerna/clean@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-6.0.3.tgz#f3519ef27a59b04b0f0f3553b53990d3fbe3ea48" + integrity sha512-4H+leVVVhwnc/GBOkFBIrLBia+MRm2ETZyXdCNckCJZ/e5tm6XHJLprGMSP2QwhJ0H20r+ciiQGzo3TGjQAEwQ== + dependencies: + "@lerna/command" "6.0.3" + "@lerna/filter-options" "6.0.3" + "@lerna/prompt" "6.0.3" + "@lerna/pulse-till-done" "6.0.3" + "@lerna/rimraf-dir" "6.0.3" p-map "^4.0.0" p-map-series "^2.1.0" p-waterfall "^2.1.1" -"@lerna/cli@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-6.0.1.tgz#8a92386702cff815f36104792ad5dc14f11a61a8" - integrity sha512-AuAnUXkBGdts/rmHltrkZucYy11OwYPb/4HM3zxLeq4O30w2ocZIytkOtSkuVKOMPWBZR8b37fNuZBzvxe5OmA== +"@lerna/cli@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-6.0.3.tgz#a5115e1af70817a8afc08a646d3a7ae80a179801" + integrity sha512-4J3dOmDGxl32FJJryE65wXR//FOMFRM0osURnr+sylzStpaEwYO24GN1oVl0YIlnGVBuPIBDpr7n0uyjvfn+2A== dependencies: - "@lerna/global-options" "6.0.1" + "@lerna/global-options" "6.0.3" dedent "^0.7.0" npmlog "^6.0.2" yargs "^16.2.0" -"@lerna/collect-uncommitted@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-6.0.1.tgz#b93f5acfa9c63fffe41bfaaac02a0efad9180b00" - integrity sha512-qPqwmIlSlf8XBJnqMc+6pz6qXQ0Pfjil70FB2IPvoWbfrLvMI6K3I/AXeub9X5fj5HYqNs1XtwhWHJcMFpJddw== +"@lerna/collect-uncommitted@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/collect-uncommitted/-/collect-uncommitted-6.0.3.tgz#645d24f60d2a47edebef7645cf65c6064cecc025" + integrity sha512-kMKL+U6fIMIHMENez6HrZEYZum+YObhmPzRr/5kkuaYqKPw2up/z1dHYQ/+w+tvzavGP15VKAWy/tZ0WsMuTWw== dependencies: - "@lerna/child-process" "6.0.1" + "@lerna/child-process" "6.0.3" chalk "^4.1.0" npmlog "^6.0.2" -"@lerna/collect-updates@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-6.0.1.tgz#7b4be193ee51a72ccedc20acf845fe32fdee9ee2" - integrity sha512-OwRcLqD1N5znlZM/Ctf031RDkodHVO62byiD35AbHGoGM2EI2TSYyIbqnJ8QsQJMB05/KhIBndL8Mpcdle7/rg== +"@lerna/collect-updates@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-6.0.3.tgz#fbfde0ec93b59c7868f49dc985a06d472e4f6dd1" + integrity sha512-qLuCHaHlVHu/tkdnncG6bQZHz9IFfZ6i7lexWfFnQnZ/aLEY7dVnFUde1jbsTFNMhJesKEbXJshXRcTcplDH6Q== dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/describe-ref" "6.0.1" + "@lerna/child-process" "6.0.3" + "@lerna/describe-ref" "6.0.3" minimatch "^3.0.4" npmlog "^6.0.2" slash "^3.0.0" -"@lerna/command@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/command/-/command-6.0.1.tgz#a429e724237bc3c4a735e8eaef9816f2203cb7dc" - integrity sha512-V9w8M7pMU7KztxaL0+fetTSQYTa12bhTl86ll9VjlgYZ5qUAXk9E42Y8hbVThyYtHEhkRnIMinkWsmH/9YKU/A== - dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/package-graph" "6.0.1" - "@lerna/project" "6.0.1" - "@lerna/validation-error" "6.0.1" - "@lerna/write-log-file" "6.0.1" +"@lerna/command@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-6.0.3.tgz#5c82c388cb2e2a401f1b00bf7454a15458a6c91e" + integrity sha512-iFkIQKLy+Ef2Kf20wOKBdkCA5J64Wjgr3XC62ZdrlDkx6wydfcfJMiXx2bhRqNKMe1cHxlBKGoRKzy8J+tBrHw== + dependencies: + "@lerna/child-process" "6.0.3" + "@lerna/package-graph" "6.0.3" + "@lerna/project" "6.0.3" + "@lerna/validation-error" "6.0.3" + "@lerna/write-log-file" "6.0.3" clone-deep "^4.0.1" dedent "^0.7.0" execa "^5.0.0" is-ci "^2.0.0" npmlog "^6.0.2" -"@lerna/conventional-commits@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-6.0.1.tgz#72dd55aadc7c20eca5af3d03cdcfb613964dafc4" - integrity sha512-6oIGEZKy1GpooW28C0aEDkZ/rVkqpX44knP8Jyb5//1054QogqPhGC5q6J0lZxyhun8dQkpF6XTHlIintI8xow== +"@lerna/conventional-commits@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-6.0.3.tgz#34ecf027b41b1d5182886b6b4c7b674d22897dd7" + integrity sha512-TZof9i0u9TK/Q7LEErjMQAMLf++MjO9NYG81sAuUaNKHMchUOmlFKtJmbT4/JjmgnBX5W0pCUF6DBxr/Bdjj9g== dependencies: - "@lerna/validation-error" "6.0.1" + "@lerna/validation-error" "6.0.3" conventional-changelog-angular "^5.0.12" conventional-changelog-core "^4.2.4" conventional-recommended-bump "^6.1.0" @@ -2436,24 +2436,24 @@ pify "^5.0.0" semver "^7.3.4" -"@lerna/create-symlink@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-6.0.1.tgz#5a9f75f8e5c0d83c39d70240f51284cc5d6770ad" - integrity sha512-ZmLx9SP5De6u1xkD7Z6gMMFuyLKCb+2bodreFe7ryOVP3cOLbmNOmgMgj+gtUgIwIv7BDwX3qFWlPY6B3VW3hQ== +"@lerna/create-symlink@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-6.0.3.tgz#e651eb4c304e921bb7f83cbeae7a1af6329f284d" + integrity sha512-myCpuQZ4yYJ5sD+xZiyQHfONBIWlQnM3crIlAvObRYs1U+HwniO9YWk0HcW9dyzplwaYo+Vn55mdi67pTdsdDg== dependencies: cmd-shim "^5.0.0" fs-extra "^9.1.0" npmlog "^6.0.2" -"@lerna/create@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/create/-/create-6.0.1.tgz#7905cef9196cb6a1caff5d7cd78a46fc7ea635a9" - integrity sha512-VuTdvBJDzvAaMBYoKTRMBQC+nfwnihxdA/ekUqBD+W8MMsqPLCGCneyl7JK9RaSSib/10LyRDEmfo79UAndcgQ== +"@lerna/create@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-6.0.3.tgz#525b2e5702a61cee7f44928fdf889474dfa6a615" + integrity sha512-mq3D5laUMe6DWhCoWS0mYJw9PZez/8up81860lk5m7Zojk1Ataa08ZWtGhBgP+p77piNRvmjN89hhjkWiXG6ng== dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/npm-conf" "6.0.1" - "@lerna/validation-error" "6.0.1" + "@lerna/child-process" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/npm-conf" "6.0.3" + "@lerna/validation-error" "6.0.3" dedent "^0.7.0" fs-extra "^9.1.0" init-package-json "^3.0.2" @@ -2467,218 +2467,218 @@ validate-npm-package-name "^4.0.0" yargs-parser "20.2.4" -"@lerna/describe-ref@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-6.0.1.tgz#e9277bcc3c1c839fc7305b808f9dd02a5404aaf8" - integrity sha512-PcTVt4qgAXUPBtWHyqixtwE/eXe56+DFRnfTcJlb4x5F7LJ+7VNpdR/81qfP89Xj10U5IjELXbXmriz1KMwhfw== +"@lerna/describe-ref@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/describe-ref/-/describe-ref-6.0.3.tgz#f7e5603d686b8f58d836ddc0fb8612fceae9fe39" + integrity sha512-3gj6r9PK+c5SfHQr2j8MQ3qb6xQTrX8KvvGhe3YDW8h3jxx9SAGao8zuvzjI3tVpLx7ZSbxmHqMpyUmnLh5kuw== dependencies: - "@lerna/child-process" "6.0.1" + "@lerna/child-process" "6.0.3" npmlog "^6.0.2" -"@lerna/diff@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-6.0.1.tgz#e8c5d541d74a9aa13a4ac6745f2f0d9531207fd1" - integrity sha512-/pGXH9txA8wX1YJ/KOBXzx0Z2opADBW4HKPCxxHAu+6dTGMbKABDljVT5Np3UpfIrAGDE5fTuf0aGL4vkKUWrg== +"@lerna/diff@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-6.0.3.tgz#6d9bbde092a605e7aa2b9ab69ce6104eec5a0935" + integrity sha512-9syquyKF2oxg0fF736RWT2cf3Oyk4eRXRUNzT0hF0DL/8frQ98H+gF3ftIFVzz1bfPbXtubzBbLDi29bGEG3bQ== dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/validation-error" "6.0.1" + "@lerna/child-process" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/validation-error" "6.0.3" npmlog "^6.0.2" -"@lerna/exec@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-6.0.1.tgz#d2d0785c46b7ceb3758fe75bb6d95d177a0a0ec3" - integrity sha512-x9puoI3091Alp45w7XOGRxThOw45p+tWGPR5TBCEQiiH7f8eF9Dc4WX5HXf31ooK6NmD40eKPYhBgy8oQnJY9w== - dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/filter-options" "6.0.1" - "@lerna/profiler" "6.0.1" - "@lerna/run-topologically" "6.0.1" - "@lerna/validation-error" "6.0.1" +"@lerna/exec@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-6.0.3.tgz#01de1eed611879c73b3ec2b2385256a709ef7bd0" + integrity sha512-4xKTXPQe3/0hrwCao7evcQfaacfROhVkR2zfnQEA+rkKRiV6ILWdvu9jCxI7DMkzoh4DgABVuGAv84CeraunMg== + dependencies: + "@lerna/child-process" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/filter-options" "6.0.3" + "@lerna/profiler" "6.0.3" + "@lerna/run-topologically" "6.0.3" + "@lerna/validation-error" "6.0.3" p-map "^4.0.0" -"@lerna/filter-options@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-6.0.1.tgz#4dbd29a31fb2ac228f72c51b223f17623d1f2c71" - integrity sha512-6KxbBI/2skRl/yQdjugQ1PWrSLq19650z8mltF0HT7B686fj7LlDNtESFOtY6iZ8IPqKBkIavOP0DPmJZd7Szw== +"@lerna/filter-options@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-6.0.3.tgz#9362a2b517be5bc9851678bc7a972e3697d02aaf" + integrity sha512-6WjtXo1nNfOIYxjysGgjnCUqAbIqvoIIyQznLQYPsKN/6NN4U7sXr0P3nbaEgBZ2NHeV+seLWA/wraJ1zDaD4Q== dependencies: - "@lerna/collect-updates" "6.0.1" - "@lerna/filter-packages" "6.0.1" + "@lerna/collect-updates" "6.0.3" + "@lerna/filter-packages" "6.0.3" dedent "^0.7.0" npmlog "^6.0.2" -"@lerna/filter-packages@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-6.0.1.tgz#07f10dc78e852bbba44843b785ebc16f386cedaa" - integrity sha512-2bKhexeF07Urs2b0xYX2OgYUN0EzmS2FSgvw0KT6He48PGOkqgJjU7PIiWdPyOvZdukwm07qXTmJZulAHftceA== +"@lerna/filter-packages@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-6.0.3.tgz#db19b3d5f430ca2ae5bacb5b7e140798a905c3c9" + integrity sha512-UlLgondhCpy7mzZWpOoUy8OlLux8YIqw07Obba0TvVLzrVIGIPIeXhqleRchUGVRV1vfQJ2d3vCTx31s1e/V4g== dependencies: - "@lerna/validation-error" "6.0.1" + "@lerna/validation-error" "6.0.3" multimatch "^5.0.0" npmlog "^6.0.2" -"@lerna/get-npm-exec-opts@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-6.0.1.tgz#c766588d030c0ec7170650808957998e8ad70831" - integrity sha512-y2T+ODP8HNzHQn1ldrrPW+n823fGsN2sY0r78yURFxYZnxA9ZINyQ6IAejo5LqHrYN8Qhr++0RHo2tUisIHdKg== +"@lerna/get-npm-exec-opts@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-6.0.3.tgz#d92a6461a626b79167fd2bc11bae38ee6154b965" + integrity sha512-zmKmHkXzmFQIBh2k9rCwzSkearKD+Pz1GypdJ0hAehemnabtW5QQKoGFsGh+7i5mOP0JBUl5kXTYTnwRGOWmYQ== dependencies: npmlog "^6.0.2" -"@lerna/get-packed@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-6.0.1.tgz#d31c10ec10658eeee4306886c100cd9600d6dd78" - integrity sha512-Z/5J5vbjdeGqZcPvUSiszvyizHdsTRiFlpPORWK3YfIsHllUB7QZnVHLg92UnSJrpPE0O1gH+k6ByhhR+3qEdA== +"@lerna/get-packed@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/get-packed/-/get-packed-6.0.3.tgz#c5b016a5cbd9a9472b76a3d879b229982248dacf" + integrity sha512-NX/Ifi/A7iTXasfBioyv/nQ8+IC4gE1SEAuE39/ExGviOM3Jkk5EmeCqwAbhZyhYkxoDBQDJJvagQ5DobpfS7g== dependencies: fs-extra "^9.1.0" ssri "^9.0.1" tar "^6.1.0" -"@lerna/github-client@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-6.0.1.tgz#081d13c2debf312d0e5a2bb2fad6e0c69e1501d6" - integrity sha512-UA7V3XUunJnrfCL2eyW9QsCjBWShv4dCRGUITXmpQJrNIMZIqVbBJzqN9LVHDNc/hEVZGt0EjtHWdpFCgD4ypg== +"@lerna/github-client@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/github-client/-/github-client-6.0.3.tgz#3b6f0016a962d5790396a5b9b80f8b73aae46709" + integrity sha512-wMOKH3FIDdE5T8UF88gvhUEBEFD9IUseFHqYt19hgzQyZxAx/hQQE2lqAEosYThPXqtKntIPKQGAfl0gquAMFQ== dependencies: - "@lerna/child-process" "6.0.1" + "@lerna/child-process" "6.0.3" "@octokit/plugin-enterprise-rest" "^6.0.1" "@octokit/rest" "^19.0.3" git-url-parse "^13.1.0" npmlog "^6.0.2" -"@lerna/gitlab-client@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-6.0.1.tgz#1863b621a1530bc482113cac8791247664dedb2a" - integrity sha512-yyaBKf/OqBAau6xDk1tnMjfkxRpC/j3OwUyXFFGfJFSulWRHpbHoFSfvIgOn/hkjAr9FfHC7TXItRg8qdm38Wg== +"@lerna/gitlab-client@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/gitlab-client/-/gitlab-client-6.0.3.tgz#59b592572dc640f1aa4d89a1393e29478e45ddc8" + integrity sha512-dBZiTsiHJ1j3tkW9JKSqCCZCk6aBiYaU9R/dSnpoPb6ZRthgoMGxtnfdk/1CKZlDargAu12XLJmcXLi7+UbyPg== dependencies: node-fetch "^2.6.1" npmlog "^6.0.2" -"@lerna/global-options@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-6.0.1.tgz#83061d85759c105120ff55716959642ba6eb0eea" - integrity sha512-vzjDI3Bg2NR+cSgfjHWax2bF1HmQYjJF2tmZlT/hJbwhaVMIEnhzHnJ9Yycmm98cdV77xEMlbmk5YD7xgFdG2w== +"@lerna/global-options@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-6.0.3.tgz#e878d45b3ed4b14efecd37306f5e876779d8e2c8" + integrity sha512-XE22Mogzjh8w1rr07hALq40kmPuCr25cQ+K0OwYEiPsyH1dpOM7PSkP4qdT1l2UlWNM64LjgJtnjZ9hsx282VQ== -"@lerna/has-npm-version@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-6.0.1.tgz#ed27a27cad2090069feb3108b105ceec765bec5e" - integrity sha512-ol1onJaauMXK0cQsfRX2rvbhNRyNBY9Ne5trrRjfMROa7Tnr8c3I4+aKQs7m4z1JdWaGBV4xBH+NSZ/esPuaWA== +"@lerna/has-npm-version@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/has-npm-version/-/has-npm-version-6.0.3.tgz#db16127ead4819d6cec97cf0597e392def886ee3" + integrity sha512-azZJkKPUWmfZf4AR40t9L6+utZaaCcZcXHOw/vHhmpn9GpZuc8Ck5cM5+8w9bgMglz0YwvTTWvutY2/mCnN5jA== dependencies: - "@lerna/child-process" "6.0.1" + "@lerna/child-process" "6.0.3" semver "^7.3.4" -"@lerna/import@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/import/-/import-6.0.1.tgz#9e869d6bbe82446ee3620c4310ca6232881b7952" - integrity sha512-GrTtIWUCnDf+FqRjenV2OKWU+khoZj0h/etgfXus45PBO2+V/SkkzIY4xof23XphiydUYrSrYtwx2i1aEmk3Wg== - dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/prompt" "6.0.1" - "@lerna/pulse-till-done" "6.0.1" - "@lerna/validation-error" "6.0.1" +"@lerna/import@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-6.0.3.tgz#d881cd2c4420cb91a701fc4fb43da3e70cb9335f" + integrity sha512-AWSwoS9e5udSrJ7E15rR+8V7Hnhli4+3IHh658bpvcGvsIntL7hBZucqWiKRMOmrsafncaBpLkfFgdiyGwy1Pw== + dependencies: + "@lerna/child-process" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/prompt" "6.0.3" + "@lerna/pulse-till-done" "6.0.3" + "@lerna/validation-error" "6.0.3" dedent "^0.7.0" fs-extra "^9.1.0" p-map-series "^2.1.0" -"@lerna/info@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/info/-/info-6.0.1.tgz#68395061ffbd81c7716d60b99b5220c90ade2862" - integrity sha512-QEW7JtJjoR1etUrcft7BnrwPZFHE2JPmt2DoSvSmLISLyy+HlmdXHK+p6Ej3g1ql8gS0GWCacgwmlRZ27CDp5A== +"@lerna/info@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/info/-/info-6.0.3.tgz#b22af49db401580d8e46bf99be07de5c71fab000" + integrity sha512-fqFGejIjjHN9obKUiWgmkknDJliyyRDbv/g6TMvQptxwiGfFBjR55TSPdKyUi9XslIQL5HWMYU7NWzZPiilk/A== dependencies: - "@lerna/command" "6.0.1" - "@lerna/output" "6.0.1" + "@lerna/command" "6.0.3" + "@lerna/output" "6.0.3" envinfo "^7.7.4" -"@lerna/init@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/init/-/init-6.0.1.tgz#babee56707bd19b3c1b82967e3360d1083c04cf9" - integrity sha512-zOMrSij09LSAVUUujpD3y32wkHp8dQ+/dVCp4USlfcGfI+kIPc5prkYCGDO8dEcqkze0pMfDMF23pVNvAf9g7w== +"@lerna/init@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-6.0.3.tgz#48e259c90712792bd5cdc21fa5602ae7083b143d" + integrity sha512-PmEmIJNNpXkGtEINBO5wfFrOlipAwY/4k674mbBWAfVJX+Affyx8yMcnMM28oDnFwe8gi12w5oRI0JcxcjpCFg== dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/project" "6.0.1" + "@lerna/child-process" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/project" "6.0.3" fs-extra "^9.1.0" p-map "^4.0.0" write-json-file "^4.3.0" -"@lerna/link@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/link/-/link-6.0.1.tgz#a94cf3aead92538835d955c6de281c65097f3471" - integrity sha512-VXZ77AWsJCycTu219ZLUHyRzMd5hgivLk5ZyBD1s/emArFvdEmGLscj2RXn3P3w/951b+DNG2Zbi6nek0iJ6DA== +"@lerna/link@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-6.0.3.tgz#364387ba44a347e3dde41d4925d04e42aeb583d9" + integrity sha512-jVTk8QWoVb+gPSkLm6XLtEKdOyqH4WwpOatSZ5zMgiRfjGDiwxCc3dB994JFPJ5FEnr9qCwqXFKjIqef7POIyQ== dependencies: - "@lerna/command" "6.0.1" - "@lerna/package-graph" "6.0.1" - "@lerna/symlink-dependencies" "6.0.1" - "@lerna/validation-error" "6.0.1" + "@lerna/command" "6.0.3" + "@lerna/package-graph" "6.0.3" + "@lerna/symlink-dependencies" "6.0.3" + "@lerna/validation-error" "6.0.3" p-map "^4.0.0" slash "^3.0.0" -"@lerna/list@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/list/-/list-6.0.1.tgz#ab6d056c5d7b99ca0ed6a17d48bf907afd9d970a" - integrity sha512-M9Vneh866E1nlpU88rcUMLR+XTVi3VY0fLPr1OqXdYF+eTe6RkEHUQj8HIk94Rnt02HsWc4+FO31T4i5sf+PaA== +"@lerna/list@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-6.0.3.tgz#83c3fd2b6e4a31e804737a472df15e414819ed66" + integrity sha512-5cQHJ2GAeN2/GV6uMJ4CVIQa3YOcmuNGqzr0DWwatR+5tire6dxFu5uY9Kjn2PYjmFUlwFwVgZzqRrSKPPPiVw== dependencies: - "@lerna/command" "6.0.1" - "@lerna/filter-options" "6.0.1" - "@lerna/listable" "6.0.1" - "@lerna/output" "6.0.1" + "@lerna/command" "6.0.3" + "@lerna/filter-options" "6.0.3" + "@lerna/listable" "6.0.3" + "@lerna/output" "6.0.3" -"@lerna/listable@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-6.0.1.tgz#444e81f6642c198d116e9e6b86d96d10ddf2e147" - integrity sha512-+xEByVX0sbnBW3EBu3XCg71Bz9/dahncmCjNK0kVnZLnQZzfULCndaQeSt+f9KO0VCs8h1tnXdo2uLPm4lThnw== +"@lerna/listable@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-6.0.3.tgz#9460d5efce0850985a9ade03b277184c22d744be" + integrity sha512-7EDzDMc22A/U4O1tCfLzb7MoFQVwwfv6E4F8JSilRupd7mp+2tMi7kvrwS5Dk5imNlHia4e5T0fVWXDUnIO2Sg== dependencies: - "@lerna/query-graph" "6.0.1" + "@lerna/query-graph" "6.0.3" chalk "^4.1.0" columnify "^1.6.0" -"@lerna/log-packed@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-6.0.1.tgz#20fe38b5f18e65392b42bf84cfdda0afc0b62330" - integrity sha512-HTJdZzfBbb5jyk/QU2O6o+yaWRwLoaPruhK+Q3ESTzQ2mlNCr0CI4UKWDcWURWx0EsVsYqsoUHuPZInpIHqCnA== +"@lerna/log-packed@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-6.0.3.tgz#2bcd152613de9abb938e5acde0d62d9a7f1645da" + integrity sha512-MCGAaaywfs8Z0eeG4mhP1u1ma+ORO8c9gGgtpX0LkjJ9HlE23BkCznC8VrJSVTqChtU4tkVp/38hhwEzZmcPFA== dependencies: byte-size "^7.0.0" columnify "^1.6.0" has-unicode "^2.0.1" npmlog "^6.0.2" -"@lerna/npm-conf@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-6.0.1.tgz#fa242a36ef687c7b5207a9d9a85b9e7a4f38bdc5" - integrity sha512-VjxODCnl6QJGoQ8z8AWEID1GO9CtCr2yRyn6NoRdBOTYmzI5KhBBM+nWmyMSOUe0EZI+K5j04/GRzKHg2KXTAQ== +"@lerna/npm-conf@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-6.0.3.tgz#94f7c23fe19e5406913e08f160e244a89e309204" + integrity sha512-lX4nAJgScfDmmdPVM9rOO6AzwCY9UPjuNpY6ZpMYkg/FIr1dch5+MFjexpan4VL2KRBNMWUYpDk3U/e2V+7k/A== dependencies: config-chain "^1.1.12" pify "^5.0.0" -"@lerna/npm-dist-tag@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-6.0.1.tgz#4718bdedd82f375ba619319070b694f1113e627b" - integrity sha512-jJKDgnhj6xGqSWGcbwdcbPtoo2m4mHRwqu8iln9e3TMOEyUO9aA4uvd0/18tEAsboOMiLUhhcQ8709iKv21ZEA== +"@lerna/npm-dist-tag@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-6.0.3.tgz#7dda3da557c1c9a729c2942de5eda26e83497dfa" + integrity sha512-wjbVPZQq1bdfikldEJ6TICikKhVh8gOWPsqR0iTj5iCDRUAiQM5HscrCApTIrB/hASyKV2xG60ruCpMG2Qo6AQ== dependencies: - "@lerna/otplease" "6.0.1" + "@lerna/otplease" "6.0.3" npm-package-arg "8.1.1" npm-registry-fetch "^13.3.0" npmlog "^6.0.2" -"@lerna/npm-install@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-6.0.1.tgz#5d6f0c62b34f2bfeb8f20b81b08f01ca0d3ed60b" - integrity sha512-saDJSyhhl/wxgZSzRx2/pr0wsMR+hZpdhLGd1lZgo5XzLq3ogK+BxPFz3AK3xhRnNaMq96gDQ3xmeetoV53lwQ== +"@lerna/npm-install@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-6.0.3.tgz#6ea619ddbbe2c995477209ebf8d21fd46dd87ff5" + integrity sha512-mBypvdtt1feL7L6f8++/tChn/5bM+KbYX06WXjW3yUT81o9geg6p7aaZoxfP6A8ff5XVsTFFL7j86MwPxTsTQQ== dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/get-npm-exec-opts" "6.0.1" + "@lerna/child-process" "6.0.3" + "@lerna/get-npm-exec-opts" "6.0.3" fs-extra "^9.1.0" npm-package-arg "8.1.1" npmlog "^6.0.2" signal-exit "^3.0.3" write-pkg "^4.0.0" -"@lerna/npm-publish@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-6.0.1.tgz#ffbca4be5b971df978a60917460ee8f28b1c62b7" - integrity sha512-hgzF9fOfp010z7PJtqNLxNXiHr6u4UDVwiX8g22rhJKBh9Ekrq7N9NS3mF0l+RcleRU/jJKYtZ0Ci3fICaaRUg== +"@lerna/npm-publish@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-6.0.3.tgz#6c34b566c65fb6131a2bf91e518b58be65ffda41" + integrity sha512-RpjnUy7wWIWu7DJB2NQJ8rNgKz+yPoIXpzYOktIjb7gUrL+Ks4KjfbrgGuYk2nWFUEAzJlsOSJ8ggAQUoNIL9Q== dependencies: - "@lerna/otplease" "6.0.1" - "@lerna/run-lifecycle" "6.0.1" + "@lerna/otplease" "6.0.3" + "@lerna/run-lifecycle" "6.0.3" fs-extra "^9.1.0" libnpmpublish "^6.0.4" npm-package-arg "8.1.1" @@ -2686,85 +2686,85 @@ pify "^5.0.0" read-package-json "^5.0.1" -"@lerna/npm-run-script@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-6.0.1.tgz#3a255aa6f37a5e2369a37a8ddcb2709f84019ed1" - integrity sha512-K+D4LEoVRuBoKRImprkVRHIORu0xouX+c6yI1B93KWHKJ60H8qCeB0gQkA30pFALx3qG07bXVnFmfK9SGQXD3Q== +"@lerna/npm-run-script@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-6.0.3.tgz#5a2054d8c9317d5cfe7f2437ad835ae3e9efae03" + integrity sha512-+IEo8BYBdyEzgdqHCw3sr4ZxAM9g7SoSdo+oskXyrwD8zScH+OadAZz+DukCad8kXlaSPWSNEc42biP2o611Ew== dependencies: - "@lerna/child-process" "6.0.1" - "@lerna/get-npm-exec-opts" "6.0.1" + "@lerna/child-process" "6.0.3" + "@lerna/get-npm-exec-opts" "6.0.3" npmlog "^6.0.2" -"@lerna/otplease@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-6.0.1.tgz#da5467c603565940c1f91e65d077abf25d96df7f" - integrity sha512-RrP8GtfE9yz37GuuCFqddR3mVIQc1ulUpAaaDNK4AOTb7gM0aCsTN7V2gCGBk1zdIsBuvNvNqt5jpWm4U6/EAA== +"@lerna/otplease@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/otplease/-/otplease-6.0.3.tgz#0523f396c83b4f2c3141824569b5827903489808" + integrity sha512-bNQn6IRrMJ8D6yF9v52KHiWD/XDB7ZkN2ziQjPwwOBcbzoVrDRCar91HQK7ygudPgmyjQNQZOrZqGlSTrh/wqA== dependencies: - "@lerna/prompt" "6.0.1" + "@lerna/prompt" "6.0.3" -"@lerna/output@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/output/-/output-6.0.1.tgz#5e301ad0bed607ee139cf207fd75ed1e5fac7908" - integrity sha512-4jZ3fgaCbnsTZ353/lXE/3w20Cge6G3iUoESVip+JE2yhZ8rWgPISG8RFR0YGEtSgq2yC9AgGnGlvmOnAc4SAQ== +"@lerna/output@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-6.0.3.tgz#582f6785193f2bb3d4e059f5276bcc7bfd8e01b5" + integrity sha512-/x7Bv4MVRwBJM6UVbfUYE1wjTGNUEnpFCHNc15MCUU3VY9O/Y1ZYq7iZHkYGMT9BmNeMS64fHBkDEwoqoJn/vA== dependencies: npmlog "^6.0.2" -"@lerna/pack-directory@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-6.0.1.tgz#4a0bf61b7cb1b1b3f1fb95afec987a7c63ff9f95" - integrity sha512-vNgS5Rs7s6khOYuHE5nTds0VDfHBH8YNGvV1s0yGAg/Zkivi7bOTs8jDQFiYhQX3HOTC1/85BLhGQ3zcDHlrew== +"@lerna/pack-directory@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/pack-directory/-/pack-directory-6.0.3.tgz#90b7e89420ffad96807b001455bee38ae04e449e" + integrity sha512-LVs/q6Dn1kXIxHA80e/Jo9AmAsesPs7TbBAxZ40lHXhJFvvFgx0r2bY+r3eV+77sziGmyKVBorgcbkEfFehfZw== dependencies: - "@lerna/get-packed" "6.0.1" - "@lerna/package" "6.0.1" - "@lerna/run-lifecycle" "6.0.1" - "@lerna/temp-write" "6.0.1" + "@lerna/get-packed" "6.0.3" + "@lerna/package" "6.0.3" + "@lerna/run-lifecycle" "6.0.3" + "@lerna/temp-write" "6.0.3" npm-packlist "^5.1.1" npmlog "^6.0.2" tar "^6.1.0" -"@lerna/package-graph@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-6.0.1.tgz#db72ab9ed45933d1518de7f7389a6c79e6059336" - integrity sha512-OMppRWpfSaI6HO/Tc5FVpNefgOsCc3/DzaMLme6QTTpbEwD3EhvQ3Xx0MgsGMPdmZhWp/WOoAJsVRnLa+l03gg== +"@lerna/package-graph@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-6.0.3.tgz#cc6452c9935569104ccf1ae600d48f325ca523b3" + integrity sha512-Xf4FxCpCFB2vSI+D/LR3k+ueSmam5Tx7LRbGiZnzdfXPvPqukZfcAXHLZbSzuJiv5NKVyG/VJjZk4SCogjrFTQ== dependencies: - "@lerna/prerelease-id-from-version" "6.0.1" - "@lerna/validation-error" "6.0.1" + "@lerna/prerelease-id-from-version" "6.0.3" + "@lerna/validation-error" "6.0.3" npm-package-arg "8.1.1" npmlog "^6.0.2" semver "^7.3.4" -"@lerna/package@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/package/-/package-6.0.1.tgz#cb950e574b1ea3ef5cd8cf62b3c4308f6c869122" - integrity sha512-vCwyiLVJ4K3SR6KZleglq1dUXIiYGmk3b+NrFWP/Z3dhVE0C+RqgxSsAS4aaUNMSO2KSI0dBdce7BT/D+FdpIQ== +"@lerna/package@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-6.0.3.tgz#7211f7e3d1e1b4a22c666b9abd2ebb4edebc9cfa" + integrity sha512-UbaZSRT3lTmncmPCws0V6XcZhc0GLRm8LtspxyLeDjhyP0EabKAbaB3HVCelPn69CM81UtP8CLkTh+NpUNH2Aw== dependencies: load-json-file "^6.2.0" npm-package-arg "8.1.1" write-pkg "^4.0.0" -"@lerna/prerelease-id-from-version@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-6.0.1.tgz#a47980aa6c78deaa36430d03b6300bc889960b50" - integrity sha512-aZBs/FinztKjNXlk0cW99FpABynZzZwlmJuW4h9nMrQPgWoaDAERfImbefIH/lcpxdRuuGtClyZUFBOSq8ppfg== +"@lerna/prerelease-id-from-version@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-6.0.3.tgz#17f50960fb7df1b3f8eb4e36b86c5917f1e0fab4" + integrity sha512-mgDo6L93mlcg7GDgWZfRGxHmR5xFPQSMQJZeyU/5VY6sCbTnwTDSpYOoce6m71E4v15iJ/G5EKIchq8yVUIBBw== dependencies: semver "^7.3.4" -"@lerna/profiler@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-6.0.1.tgz#2b7a043e6999823ad97a7ddaea0ed7f338032f92" - integrity sha512-vZrgF5pDhYWY/Gx7MjtyOgTVMA6swDV2+xPZwkvRD1Z0XpWEIn5d79zRN/1SBpdMNozC7Lj++1oEbCGNWhy/ow== +"@lerna/profiler@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/profiler/-/profiler-6.0.3.tgz#cc9ba5ce9bd78fcc47ad105380877341cba17b3b" + integrity sha512-tkFZEAALPtPOzcEZlH554SHH4rMORmpWH45mF3Py3mpy+HpQXLZmYlxot+wr3jPXkXQzwaIgDe0DMYJhhC8T9A== dependencies: fs-extra "^9.1.0" npmlog "^6.0.2" upath "^2.0.1" -"@lerna/project@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/project/-/project-6.0.1.tgz#0d4a6dbca1943478d554d4a3a610968caf9b303a" - integrity sha512-/n2QuAEgImbwUqrJND15FxYu29p/mLTUpL/8cSg6IUlOQRFyXteESRyl8A2Ex7Wj00FMbtB13vgbmTdkTgKL0A== +"@lerna/project@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-6.0.3.tgz#40f59c9c0063b1098c3af85d2b8a7aa9e321a4ff" + integrity sha512-YBSWZRnRlwAwDuLKx7M7f1HyiqDY/dH+eMadHgasWgFJ5yHhtkwMCZTNgHvMAXTdN6iGb/A6mkPAN5zWhcDYBw== dependencies: - "@lerna/package" "6.0.1" - "@lerna/validation-error" "6.0.1" + "@lerna/package" "6.0.3" + "@lerna/validation-error" "6.0.3" cosmiconfig "^7.0.0" dedent "^0.7.0" dot-prop "^6.0.1" @@ -2777,38 +2777,38 @@ resolve-from "^5.0.0" write-json-file "^4.3.0" -"@lerna/prompt@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-6.0.1.tgz#2a744b168ce4a29b7c66d500258a3f65b3f028e2" - integrity sha512-faR7oVdHBO3QTJ6o9kUEDPpyjCftd/CCa1rAC6q8f3vlLfCPrTym0qT+DcOBFGpDQh4m2dmGfJZgpXIVi6bMbg== +"@lerna/prompt@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-6.0.3.tgz#251ad1c80a15dbdfca0153cf02044ec455e471a4" + integrity sha512-M/3poJp9Nqr2xJ2nB9gE6qsCwxJqvVyEnM5mMPUzRpfCvAtVa6Rhx/x60I20GSogb8/J9Zapav3MNoX2rdv2UQ== dependencies: inquirer "^8.2.4" npmlog "^6.0.2" -"@lerna/publish@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-6.0.1.tgz#9448a35a87e2c986c8919114698f3a314a9a2574" - integrity sha512-xIleRwCuPHtShNSPc6RDH33Z+EO1E4O0LOhPq5qTwanNPYh5eL6bDHBsox44BbMD9dhhI4PUrqIGTu3AoKdDxg== - dependencies: - "@lerna/check-working-tree" "6.0.1" - "@lerna/child-process" "6.0.1" - "@lerna/collect-updates" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/describe-ref" "6.0.1" - "@lerna/log-packed" "6.0.1" - "@lerna/npm-conf" "6.0.1" - "@lerna/npm-dist-tag" "6.0.1" - "@lerna/npm-publish" "6.0.1" - "@lerna/otplease" "6.0.1" - "@lerna/output" "6.0.1" - "@lerna/pack-directory" "6.0.1" - "@lerna/prerelease-id-from-version" "6.0.1" - "@lerna/prompt" "6.0.1" - "@lerna/pulse-till-done" "6.0.1" - "@lerna/run-lifecycle" "6.0.1" - "@lerna/run-topologically" "6.0.1" - "@lerna/validation-error" "6.0.1" - "@lerna/version" "6.0.1" +"@lerna/publish@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-6.0.3.tgz#029b30d6bb877102beca153d81e305939bfcf859" + integrity sha512-Vv9aDQEQv+5NRfaIpZpBqXcgfXkb18kpIUqBI4bAnqC/t168Gn/UzOxxjVkl5wuAKJ2sj8tDoZTEIb/DVoV53Q== + dependencies: + "@lerna/check-working-tree" "6.0.3" + "@lerna/child-process" "6.0.3" + "@lerna/collect-updates" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/describe-ref" "6.0.3" + "@lerna/log-packed" "6.0.3" + "@lerna/npm-conf" "6.0.3" + "@lerna/npm-dist-tag" "6.0.3" + "@lerna/npm-publish" "6.0.3" + "@lerna/otplease" "6.0.3" + "@lerna/output" "6.0.3" + "@lerna/pack-directory" "6.0.3" + "@lerna/prerelease-id-from-version" "6.0.3" + "@lerna/prompt" "6.0.3" + "@lerna/pulse-till-done" "6.0.3" + "@lerna/run-lifecycle" "6.0.3" + "@lerna/run-topologically" "6.0.3" + "@lerna/validation-error" "6.0.3" + "@lerna/version" "6.0.3" fs-extra "^9.1.0" libnpmaccess "^6.0.3" npm-package-arg "8.1.1" @@ -2819,99 +2819,99 @@ pacote "^13.6.1" semver "^7.3.4" -"@lerna/pulse-till-done@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-6.0.1.tgz#d23985aea1ba25bb33cf74b39f36f2b7a5d21791" - integrity sha512-DK5Ylh/O7Vzn9ObEggvoHdLxc1hiXsDZ4fUvSmi50kc5QrMrk+xo6OyPgIaDBhYxj6lm3TQ1KkvWnRgiEynKAg== +"@lerna/pulse-till-done@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/pulse-till-done/-/pulse-till-done-6.0.3.tgz#d3ec687799023b8baccc6af003cce738a114ea9c" + integrity sha512-/HjvHtaDCr0qJuhJT6PuwoHFvPsZMB7f/GnEYGIzS0+ovwOTrbULD6ESo2lWcsFnxJ3tWv2OPIKEiHkJ0y1PCg== dependencies: npmlog "^6.0.2" -"@lerna/query-graph@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-6.0.1.tgz#f72b55f0ee4662d06167e639e975019e5c004c59" - integrity sha512-X8Z63Ax5a9nXgNBG+IAXEdCL4MG88akr7L4mBvKiTPrK5VgP46YzuZSaSoPI8bU67MlWBkSYQWAJJ5t0HEtKTw== +"@lerna/query-graph@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/query-graph/-/query-graph-6.0.3.tgz#302498ac354cb7a58f5447822d8524582fd0143f" + integrity sha512-Se3G4ZIckjleki/BWUEInITfLTuNIYkqeStq50KEz74xhQ9jQs7ZLAOWc/Qxn3EPngCTLe8WqhLVeHFOfxgjvw== dependencies: - "@lerna/package-graph" "6.0.1" + "@lerna/package-graph" "6.0.3" -"@lerna/resolve-symlink@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-6.0.1.tgz#30c3ccf4c730451754ce7aa002772f26dd757c20" - integrity sha512-btosycLN+2lpqou6pz0Oeq4XIKHDIn0NvdnuCBLxtuBOBNIkdlx5QWKCtZ31GYKbCUt55w1DSGL64kfVuejVQQ== +"@lerna/resolve-symlink@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-6.0.3.tgz#9dd4b2903e4a0bb11b000fb220efd11ce5909f28" + integrity sha512-9HkEl7kMQ4sZ3/+FEOhBt2rYoQP2cXQlhV7TNIej6SGaR0VtKe98ciM9bQAdkc/rOZtyZLc2cFBoUd10NEjzoA== dependencies: fs-extra "^9.1.0" npmlog "^6.0.2" read-cmd-shim "^3.0.0" -"@lerna/rimraf-dir@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-6.0.1.tgz#e52ba283a4c39ade75792c23d0c6dcec65dcbbf4" - integrity sha512-rBFkwrxEQWFfZV5IMiPfGVubOquvOTNsPJPUf5tZoPAqKHXVQi5iYZGB65VG8JA7eFenZxh5mVErX2gtWFh1Ew== +"@lerna/rimraf-dir@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-6.0.3.tgz#be12f791a7cf1d455d25ae0cdc70d45767ee343f" + integrity sha512-jyC/PVL3rqC83l5Wphog8pSOmDbe5CIAHn9TeHvV8f/zdJnNE3zKXWTNjvyLgB1aPneQ4i2V+3BgdfpeDVAtHQ== dependencies: - "@lerna/child-process" "6.0.1" + "@lerna/child-process" "6.0.3" npmlog "^6.0.2" path-exists "^4.0.0" rimraf "^3.0.2" -"@lerna/run-lifecycle@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-6.0.1.tgz#ab94838cf7daa1edd6228be0a161b38ec1a42a0b" - integrity sha512-gC7rnV3mrgFFIM8GlHc3d22ovYHoExu9CuIAxN26CVrMq7iEYxWoxYvweqVANsCHR7CVbs+dsDx8/TP1pQG8wg== +"@lerna/run-lifecycle@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-6.0.3.tgz#84dad555d56c3aa668e1cbdf2a5b98f8baabcc64" + integrity sha512-qnFOyp9de81FA2HSBuXtW7LSklF+T6WtFkYH9q3kOJY/EghZlgzFmQYFHgJ/xVYxNu75QDuv6fsfJu4EtrR7ag== dependencies: - "@lerna/npm-conf" "6.0.1" + "@lerna/npm-conf" "6.0.3" "@npmcli/run-script" "^4.1.7" npmlog "^6.0.2" p-queue "^6.6.2" -"@lerna/run-topologically@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-6.0.1.tgz#dcf26259e57b224d4aad2e3b259555ecd2f226ea" - integrity sha512-p4J9RvOUyDUjQ21tDh7Durci9YnuBu3T8WXD8xu5ZwcxVnawK1h5B8kP4V1R5L/jwNqkXsAnlLwikPVGQ5Iptw== +"@lerna/run-topologically@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/run-topologically/-/run-topologically-6.0.3.tgz#37d7ec11bafeb9be3f93a56a012444fec5982efc" + integrity sha512-nN0kcOO1TzWlxg5byM1V12tm4+lvchbawc1mNje1KsujdzE4gSwD84ub4SFRNkUUBmsPvTGysorhtXckQfqQWw== dependencies: - "@lerna/query-graph" "6.0.1" + "@lerna/query-graph" "6.0.3" p-queue "^6.6.2" -"@lerna/run@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/run/-/run-6.0.1.tgz#20d3c77fa8faad01b915214b95477ae5390c8b45" - integrity sha512-F1vvpaevsWCjaQs3NlBegH54izm3cO3Qbg/cRRzPZMK4Jo7gE1ddL7+zCIq0zGt6aeVqRGBOtUMk4SvNGkzI4w== - dependencies: - "@lerna/command" "6.0.1" - "@lerna/filter-options" "6.0.1" - "@lerna/npm-run-script" "6.0.1" - "@lerna/output" "6.0.1" - "@lerna/profiler" "6.0.1" - "@lerna/run-topologically" "6.0.1" - "@lerna/timer" "6.0.1" - "@lerna/validation-error" "6.0.1" +"@lerna/run@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-6.0.3.tgz#604c49708a348c72683c6cf1575d2e9b7ff9e07b" + integrity sha512-eiMF/Pfld/ngH+Emkwyxqf40WWEK6bQE2KhRtu0xyuSIFycFlZJursd72ylTnvZAX3Qx4P4drdHaFnfWyuglcw== + dependencies: + "@lerna/command" "6.0.3" + "@lerna/filter-options" "6.0.3" + "@lerna/npm-run-script" "6.0.3" + "@lerna/output" "6.0.3" + "@lerna/profiler" "6.0.3" + "@lerna/run-topologically" "6.0.3" + "@lerna/timer" "6.0.3" + "@lerna/validation-error" "6.0.3" fs-extra "^9.1.0" p-map "^4.0.0" -"@lerna/symlink-binary@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-6.0.1.tgz#b9278650c3360cc518e0d313d9999cd740a2c054" - integrity sha512-TcwxDMgU9w+hGl0EeYihPytVRKV0KTeZZW4Bq6NEtjTCIIuKWxZjcY5ocxW22i6BClBvfFAJqkf+e+i3Nixlhg== +"@lerna/symlink-binary@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-6.0.3.tgz#5f40b6e8e9f2230adefd87165c3e81420d25be25" + integrity sha512-bRrPPuZoYvEDc8eTGwhTLQwRmtjYfD/hBVElqhfAlUTPcuA36VrQwBkmhGAUKcIDmEHTVk6IHNiFb/JwuiOSYA== dependencies: - "@lerna/create-symlink" "6.0.1" - "@lerna/package" "6.0.1" + "@lerna/create-symlink" "6.0.3" + "@lerna/package" "6.0.3" fs-extra "^9.1.0" p-map "^4.0.0" -"@lerna/symlink-dependencies@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-6.0.1.tgz#28c01b3f910c1d13b1d447d27c47f5c76efd0096" - integrity sha512-ImyqjLjMBu0ORGO9gYHr9oDgN/5QeeGuELtYNweLS5vMNSH1dokQW9fqZSrgfCJPbxeCizBcDTi/Knqg17ebkA== +"@lerna/symlink-dependencies@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-6.0.3.tgz#552cd9a4dc81ad925d583c392022ae9321c065d0" + integrity sha512-4DmKLZkJ9oyQ8DXdXCMT6fns6w6G/7h9D2pXGNOYa/IFtjb4mKDMBfJ61XhmvTlxrEzjEc9CnqMeO7BQBXWt8A== dependencies: - "@lerna/create-symlink" "6.0.1" - "@lerna/resolve-symlink" "6.0.1" - "@lerna/symlink-binary" "6.0.1" + "@lerna/create-symlink" "6.0.3" + "@lerna/resolve-symlink" "6.0.3" + "@lerna/symlink-binary" "6.0.3" fs-extra "^9.1.0" p-map "^4.0.0" p-map-series "^2.1.0" -"@lerna/temp-write@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-6.0.1.tgz#84f8aa3f74b6150706a70430c68815517f5301cf" - integrity sha512-9eklYncDnwTnGF9o14GOrZU05ZK5n6/x5XYRQHbuLfK5T9pmOiUyl6sO1613cZygUMaWHHi7BLtBPiw2CklqXQ== +"@lerna/temp-write@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/temp-write/-/temp-write-6.0.3.tgz#b08e329ca122a24f4f9687f1f928b2022724baf5" + integrity sha512-ws+EHk7Bp4hR6liusGk8K+ybnh9iOSkCnHD6d+avwa2lMYtX28v93kle/Y5JbTghjumgDUF9/C+EQg51zIVQmw== dependencies: graceful-fs "^4.1.15" is-stream "^2.0.0" @@ -2919,37 +2919,37 @@ temp-dir "^1.0.0" uuid "^8.3.2" -"@lerna/timer@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-6.0.1.tgz#eb10242c48a1246e1bf216af305974fbd6332d39" - integrity sha512-FLoga8iprKmRkh9jO+LP4Bm7MZLO4wNHM4LML4Dlh9CPwcIOWTteI8wSgRXvEJpt33IRIoPOUnfL3iHh8WwaYA== +"@lerna/timer@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/timer/-/timer-6.0.3.tgz#73bb3e301c76c8fabcb35831b1d398f272287f5a" + integrity sha512-Ywfu3cGi0pV9vN4ki8oTu+qdJArMwrW3MiXL3/2fospKRdGL7sGCuXlS9Byd+aduMvmMwKbnX0EW+6R7Np+qSg== -"@lerna/validation-error@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-6.0.1.tgz#afcf6b193eae86d64df9561afb7698696257304f" - integrity sha512-kjAxfFY1pDltwoCTvMQCbnpBwMXBFuvE4hdi8qePhBQ1Lf0PlTOI4ZqMFIkaTud+oujzysDXraTJbYTjc+C+zw== +"@lerna/validation-error@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-6.0.3.tgz#9e0cc7fdb2117f82db9a73eaf287f6b46521f2c9" + integrity sha512-cWYKMFne/euWnW4w7ry+RvDkj8iVNYMrbRF86Px/609GXFOoOwEROJyvTlRp1BgCmC2/3KzidyBletN/R3JHEA== dependencies: npmlog "^6.0.2" -"@lerna/version@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/version/-/version-6.0.1.tgz#988675be8ea29f1548cb4554c257c2cc94b78084" - integrity sha512-d/addeHVsRFWx3fb/XZIh6f23KuEC9Fn3ytpaMzA8rlLF3Nob1opIR98ZfUz7Nf+skpIV1QiIbXdJTZzIKvd9g== - dependencies: - "@lerna/check-working-tree" "6.0.1" - "@lerna/child-process" "6.0.1" - "@lerna/collect-updates" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/conventional-commits" "6.0.1" - "@lerna/github-client" "6.0.1" - "@lerna/gitlab-client" "6.0.1" - "@lerna/output" "6.0.1" - "@lerna/prerelease-id-from-version" "6.0.1" - "@lerna/prompt" "6.0.1" - "@lerna/run-lifecycle" "6.0.1" - "@lerna/run-topologically" "6.0.1" - "@lerna/temp-write" "6.0.1" - "@lerna/validation-error" "6.0.1" +"@lerna/version@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-6.0.3.tgz#de44ecf9598e77e22b5088bd3a62b76a87bcf683" + integrity sha512-ssQhsK51IBMabB+RpQPIRn93iozwMRpvfh2vVIVdTs76j8r/1ljIs3gLXPDzLo9RbyLcou+VKi3c/7coCAwsdw== + dependencies: + "@lerna/check-working-tree" "6.0.3" + "@lerna/child-process" "6.0.3" + "@lerna/collect-updates" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/conventional-commits" "6.0.3" + "@lerna/github-client" "6.0.3" + "@lerna/gitlab-client" "6.0.3" + "@lerna/output" "6.0.3" + "@lerna/prerelease-id-from-version" "6.0.3" + "@lerna/prompt" "6.0.3" + "@lerna/run-lifecycle" "6.0.3" + "@lerna/run-topologically" "6.0.3" + "@lerna/temp-write" "6.0.3" + "@lerna/validation-error" "6.0.3" "@nrwl/devkit" ">=14.8.6 < 16" chalk "^4.1.0" dedent "^0.7.0" @@ -2964,10 +2964,10 @@ slash "^3.0.0" write-json-file "^4.3.0" -"@lerna/write-log-file@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-6.0.1.tgz#4335d5e08686f8250ebae9d7f56b64452bd90cd3" - integrity sha512-fJGDE8rlE35DwKSqV8M1VV2xw/vQlgwTwURjNOMvd1Ar23Aa9CkJC4XAwc9uUgIku34IsWUM8MNbw9ClSsJaqw== +"@lerna/write-log-file@6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-6.0.3.tgz#21f4c2fcf6a41a3420c46a571dd52fb5c8a64242" + integrity sha512-xZFC9IgGkvuv1MUIC7EKD5ltlljgLlz7isbfQ2QHAqOmGJG6jPqa0Yo38pGe8wEDtGSVgtlUGkx7iHK22MawEA== dependencies: npmlog "^6.0.2" write-file-atomic "^4.0.1" @@ -9529,28 +9529,28 @@ latest-version@^5.1.0: dependencies: package-json "^6.3.0" -lerna@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-6.0.1.tgz#7b14f05d1e17dc628478d33f225a579a6088d317" - integrity sha512-aNodtj1jyuEqzYmkYh+vTfRuzLkG3RZkvYxFCuLeXXzIYD5pjMHtf+1q4m03SPsZt+cElhhwkgjdg6GjihraBw== - dependencies: - "@lerna/add" "6.0.1" - "@lerna/bootstrap" "6.0.1" - "@lerna/changed" "6.0.1" - "@lerna/clean" "6.0.1" - "@lerna/cli" "6.0.1" - "@lerna/command" "6.0.1" - "@lerna/create" "6.0.1" - "@lerna/diff" "6.0.1" - "@lerna/exec" "6.0.1" - "@lerna/import" "6.0.1" - "@lerna/info" "6.0.1" - "@lerna/init" "6.0.1" - "@lerna/link" "6.0.1" - "@lerna/list" "6.0.1" - "@lerna/publish" "6.0.1" - "@lerna/run" "6.0.1" - "@lerna/version" "6.0.1" +lerna@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-6.0.3.tgz#0364eadeedbdf5ade375d8a6f0a87bb9003f6019" + integrity sha512-DzRCTZGoDI502daViNK1Ha+HPAVvTp72xshDOQ6o6SWCDTvnxFI3hGF6CBqGWnOoPwEOlQowHEIcPw5PjoMz8A== + dependencies: + "@lerna/add" "6.0.3" + "@lerna/bootstrap" "6.0.3" + "@lerna/changed" "6.0.3" + "@lerna/clean" "6.0.3" + "@lerna/cli" "6.0.3" + "@lerna/command" "6.0.3" + "@lerna/create" "6.0.3" + "@lerna/diff" "6.0.3" + "@lerna/exec" "6.0.3" + "@lerna/import" "6.0.3" + "@lerna/info" "6.0.3" + "@lerna/init" "6.0.3" + "@lerna/link" "6.0.3" + "@lerna/list" "6.0.3" + "@lerna/publish" "6.0.3" + "@lerna/run" "6.0.3" + "@lerna/version" "6.0.3" "@nrwl/devkit" ">=14.8.6 < 16" import-local "^3.0.2" inquirer "^8.2.4"