diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff5e27ad47e..ab0d9ab1111 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,9 +11,6 @@ jobs: strategy: matrix: include: - - NodeVersion: 16.20.x - NodeVersionDisplayName: 16 - OS: ubuntu-latest - NodeVersion: 18.18.x NodeVersionDisplayName: 18 OS: ubuntu-latest diff --git a/README.md b/README.md index 942474aba62..ad8e3edaaf6 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,7 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/build-tests/eslint-7-test](./build-tests/eslint-7-test/) | This project contains a build test to validate ESLint 7 compatibility with the latest version of @rushstack/eslint-config (and by extension, the ESLint plugin) | | [/build-tests/eslint-8-test](./build-tests/eslint-8-test/) | This project contains a build test to validate ESLint 8 compatibility with the latest version of @rushstack/eslint-config (and by extension, the ESLint plugin) | | [/build-tests/eslint-bulk-suppressions-test](./build-tests/eslint-bulk-suppressions-test/) | Sample code to test eslint bulk suppressions | +| [/build-tests/eslint-bulk-suppressions-test-legacy](./build-tests/eslint-bulk-suppressions-test-legacy/) | Sample code to test eslint bulk suppressions for versions of eslint < 8.57.0 | | [/build-tests/hashed-folder-copy-plugin-webpack5-test](./build-tests/hashed-folder-copy-plugin-webpack5-test/) | Building this project exercises @rushstack/hashed-folder-copy-plugin with Webpack 5. NOTE - THIS TEST IS CURRENTLY EXPECTED TO BE BROKEN | | [/build-tests/heft-copy-files-test](./build-tests/heft-copy-files-test/) | Building this project tests copying files with Heft | | [/build-tests/heft-example-plugin-01](./build-tests/heft-example-plugin-01/) | This is an example heft plugin that exposes hooks for other plugins | diff --git a/build-tests/eslint-7-11-test/.eslintrc.js b/build-tests/eslint-7-11-test/.eslintrc.js index d8925148517..0807c020928 100644 --- a/build-tests/eslint-7-11-test/.eslintrc.js +++ b/build-tests/eslint-7-11-test/.eslintrc.js @@ -8,8 +8,8 @@ require('local-node-rig/profiles/default/includes/eslint/patch/custom-config-pac module.exports = { extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' ], parserOptions: { tsconfigRootDir: __dirname }, diff --git a/build-tests/eslint-7-11-test/package.json b/build-tests/eslint-7-11-test/package.json index 671fac54042..09e7c4611b3 100644 --- a/build-tests/eslint-7-11-test/package.json +++ b/build-tests/eslint-7-11-test/package.json @@ -10,11 +10,12 @@ "_phase:build": "heft run --only build -- --clean" }, "devDependencies": { + "@rushstack/eslint-config": "3.7.0", "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", "@types/node": "18.17.15", "@typescript-eslint/parser": "~6.19.0", "eslint": "7.11.0", + "local-node-rig": "workspace:*", "typescript": "~5.4.2" } } diff --git a/build-tests/eslint-7-7-test/.eslintrc.js b/build-tests/eslint-7-7-test/.eslintrc.js index d8925148517..0807c020928 100644 --- a/build-tests/eslint-7-7-test/.eslintrc.js +++ b/build-tests/eslint-7-7-test/.eslintrc.js @@ -8,8 +8,8 @@ require('local-node-rig/profiles/default/includes/eslint/patch/custom-config-pac module.exports = { extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' ], parserOptions: { tsconfigRootDir: __dirname }, diff --git a/build-tests/eslint-7-7-test/package.json b/build-tests/eslint-7-7-test/package.json index bc11e8846ab..5d957aacbc4 100644 --- a/build-tests/eslint-7-7-test/package.json +++ b/build-tests/eslint-7-7-test/package.json @@ -10,11 +10,12 @@ "_phase:build": "heft run --only build -- --clean" }, "devDependencies": { + "@rushstack/eslint-config": "3.7.0", "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", "@types/node": "18.17.15", "@typescript-eslint/parser": "~6.19.0", "eslint": "7.7.0", + "local-node-rig": "workspace:*", "typescript": "~5.4.2" } } diff --git a/build-tests/eslint-7-test/.eslintrc.js b/build-tests/eslint-7-test/.eslintrc.js index d8925148517..0807c020928 100644 --- a/build-tests/eslint-7-test/.eslintrc.js +++ b/build-tests/eslint-7-test/.eslintrc.js @@ -8,8 +8,8 @@ require('local-node-rig/profiles/default/includes/eslint/patch/custom-config-pac module.exports = { extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' ], parserOptions: { tsconfigRootDir: __dirname }, diff --git a/build-tests/eslint-7-test/package.json b/build-tests/eslint-7-test/package.json index 76ff0deda20..81d750e8a10 100644 --- a/build-tests/eslint-7-test/package.json +++ b/build-tests/eslint-7-test/package.json @@ -10,11 +10,12 @@ "_phase:build": "heft run --only build -- --clean" }, "devDependencies": { + "@rushstack/eslint-config": "3.7.0", "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", "@types/node": "18.17.15", "@typescript-eslint/parser": "~6.19.0", "eslint": "~7.30.0", + "local-node-rig": "workspace:*", "typescript": "~5.4.2" } } diff --git a/build-tests/eslint-8-test/package.json b/build-tests/eslint-8-test/package.json index f672b38d9d0..1dffe442ce6 100644 --- a/build-tests/eslint-8-test/package.json +++ b/build-tests/eslint-8-test/package.json @@ -13,7 +13,7 @@ "@rushstack/heft": "workspace:*", "local-node-rig": "workspace:*", "@types/node": "18.17.15", - "@typescript-eslint/parser": "~6.19.0", + "@typescript-eslint/parser": "~8.1.0", "eslint": "~8.57.0", "typescript": "~5.4.2" } diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/build.js b/build-tests/eslint-bulk-suppressions-test-legacy/build.js new file mode 100644 index 00000000000..2e32ac207b2 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/build.js @@ -0,0 +1,108 @@ +// This project is a duplicate of "eslint-bulk-suppressions-test" intended to test eslint +// against the older version of the TypeScript parser. Any modifications made to this project +// should be reflected in "eslint-bulk-suppressions-test" as well. + +const { FileSystem, Executable, Text, Import } = require('@rushstack/node-core-library'); +const path = require('path'); +const { + ESLINT_PACKAGE_NAME_ENV_VAR_NAME +} = require('@rushstack/eslint-patch/lib/eslint-bulk-suppressions/constants'); + +const eslintBulkStartPath = Import.resolveModule({ + modulePath: '@rushstack/eslint-bulk/lib/start', + baseFolderPath: __dirname +}); + +function tryLoadSuppressions(suppressionsJsonPath) { + try { + return Text.convertToLf(FileSystem.readFile(suppressionsJsonPath)).trim(); + } catch (e) { + if (FileSystem.isNotExistError(e)) { + return ''; + } else { + throw e; + } + } +} + +const RUN_FOLDER_PATHS = ['client', 'server']; +const ESLINT_PACKAGE_NAMES = ['eslint', 'eslint-8.23', 'eslint-oldest']; + +const updateFilePaths = new Set(); + +for (const runFolderPath of RUN_FOLDER_PATHS) { + const folderPath = `${__dirname}/${runFolderPath}`; + const suppressionsJsonPath = `${folderPath}/.eslint-bulk-suppressions.json`; + + const folderItems = FileSystem.readFolderItems(folderPath); + for (const folderItem of folderItems) { + if (folderItem.isFile() && folderItem.name.match(/^\.eslint\-bulk\-suppressions\-[\d.]+\.json$/)) { + const fullPath = `${folderPath}/${folderItem.name}`; + updateFilePaths.add(fullPath); + } + } + + for (const eslintPackageName of ESLINT_PACKAGE_NAMES) { + const { version: eslintVersion } = require(`${eslintPackageName}/package.json`); + + const startLoggingMessage = `-- Running eslint-bulk-suppressions for eslint@${eslintVersion} in ${runFolderPath} --`; + console.log(startLoggingMessage); + const referenceSuppressionsJsonPath = `${folderPath}/.eslint-bulk-suppressions-${eslintVersion}.json`; + const existingSuppressions = tryLoadSuppressions(referenceSuppressionsJsonPath); + + // The eslint-bulk-suppressions patch expects to find "eslint" in the shell PATH. To ensure deterministic + // test behavior, we need to designate an explicit "node_modules/.bin" folder. + // + // Use the ".bin" folder from @rushstack/eslint-patch as a workaround for this PNPM bug: + // https://github.com/pnpm/pnpm/issues/7833 + const dependencyBinFolder = path.join( + __dirname, + 'node_modules', + '@rushstack', + 'eslint-patch', + 'node_modules', + '.bin' + ); + const shellPathWithEslint = `${dependencyBinFolder}${path.delimiter}${process.env['PATH']}`; + + const executableResult = Executable.spawnSync( + process.argv0, + [eslintBulkStartPath, 'suppress', '--all', 'src'], + { + currentWorkingDirectory: folderPath, + environment: { + ...process.env, + PATH: shellPathWithEslint, + [ESLINT_PACKAGE_NAME_ENV_VAR_NAME]: eslintPackageName + } + } + ); + + if (executableResult.status !== 0) { + console.error('The eslint-bulk-suppressions command failed.'); + console.error('STDOUT:'); + console.error(executableResult.stdout.toString()); + console.error('STDERR:'); + console.error(executableResult.stderr.toString()); + process.exit(1); + } + + const newSuppressions = tryLoadSuppressions(suppressionsJsonPath); + if (newSuppressions === existingSuppressions) { + updateFilePaths.delete(referenceSuppressionsJsonPath); + } else { + updateFilePaths.add(referenceSuppressionsJsonPath); + FileSystem.writeFile(referenceSuppressionsJsonPath, newSuppressions); + } + + FileSystem.deleteFile(suppressionsJsonPath); + } +} + +if (updateFilePaths.size > 0) { + for (const updateFilePath of updateFilePaths) { + console.log(`The suppressions file "${updateFilePath}" was updated and must be committed to git.`); + } + + process.exit(1); +} diff --git a/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.23.1.json b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslint-bulk-suppressions-8.23.1.json similarity index 100% rename from build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.23.1.json rename to build-tests/eslint-bulk-suppressions-test-legacy/client/.eslint-bulk-suppressions-8.23.1.json diff --git a/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.6.0.json b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslint-bulk-suppressions-8.57.0.json similarity index 100% rename from build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.6.0.json rename to build-tests/eslint-bulk-suppressions-test-legacy/client/.eslint-bulk-suppressions-8.57.0.json diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslint-bulk-suppressions-8.6.0.json b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslint-bulk-suppressions-8.6.0.json new file mode 100644 index 00000000000..40059c12365 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslint-bulk-suppressions-8.6.0.json @@ -0,0 +1,139 @@ +{ + "suppressions": [ + { + "file": "src/index.ts", + "scopeId": ".", + "rule": "prefer-const" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass", + "rule": "@typescript-eslint/ban-types" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass.exampleMethod", + "rule": "@typescript-eslint/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass.exampleMethod", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass.exampleMethod", + "rule": "@typescript-eslint/typedef" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass.exampleMethod", + "rule": "no-var" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass", + "rule": "@typescript-eslint/typedef" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass", + "rule": "no-useless-concat" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.constructor", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "@typescript-eslint/ban-types" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "@typescript-eslint/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleArrowFunction", + "rule": "@typescript-eslint/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleArrowFunction", + "rule": "@typescript-eslint/typedef" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleArrowFunction", + "rule": "dot-notation" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleArrowFunction", + "rule": "no-empty" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleArrowFunction", + "rule": "no-unused-expressions" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleFunction", + "rule": "@typescript-eslint/ban-types" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleFunction", + "rule": "@typescript-eslint/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleFunction", + "rule": "no-empty-pattern" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleFunction", + "rule": "no-extra-boolean-cast" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleObject", + "rule": "@typescript-eslint/typedef" + }, + { + "file": "src/index.ts", + "scopeId": ".x", + "rule": "@typescript-eslint/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".y", + "rule": "@typescript-eslint/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".z", + "rule": "@typescript-eslint/explicit-function-return-type" + } + ] +} diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslintrc.js b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslintrc.js new file mode 100644 index 00000000000..e357b45439f --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslintrc.js @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This is a workaround for https://github.com/eslint/eslint/issues/3458 +require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 +require('local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); +require('local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions'); + +module.exports = { + extends: [ + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' + ], + ignorePatterns: ['.eslintrc.js'], + + overrides: [ + /** + * Override the parser from @rushstack/eslint-config. Since the config is coming + * from the workspace instead of the external NPM package, the versions of ESLint + * and TypeScript that the config consumes will be resolved from the devDependencies + * of the config instead of from the eslint-8-test package. Overriding the parser + * ensures that the these dependencies come from the eslint-8-test package. See: + * https://github.com/microsoft/rushstack/issues/3021 + */ + { + files: ['**/*.ts', '**/*.tsx'], + parser: '@typescript-eslint/parser', + parserOptions: { project: '../tsconfig.json', tsconfigRootDir: __dirname } + } + ] +}; diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/client/src/index.ts b/build-tests/eslint-bulk-suppressions-test-legacy/client/src/index.ts new file mode 100644 index 00000000000..570229800d8 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/client/src/index.ts @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +/* Top-level scope code samples */ +// scopeId: '.' +let exampleString: string = 5 + ''; + +const exampleObject = { + exampleString: exampleString +}; + +/* Function scope code samples */ +export function exampleFunction() { + const {}: Object = exampleObject; + + // scopeId: '.exampleFunction' + !!!exampleString as Boolean; +} + +// scope: '.ArrowFunctionExpression', +export const x = () => {}, + // scopeId: '.y' + y = () => {}, + // scopeId: '.z' + z = () => {}; + +/* Class scope code samples */ +export class ExampleClass { + // scopeId: '.ExampleClass' + exampleClassProperty: String = exampleString + '4'; + + exampleMethod() { + // scopeId: '.exampleClass.exampleMethod' + var exampleVar; + return exampleVar; + } +} + +/* Variable and anonymous constructs code samples */ +export const exampleArrowFunction = () => { + const exampleBoolean = true; + if (exampleBoolean) { + } + + exampleObject['exampleString']; +}; + +export const exampleAnonymousClass = class { + exampleClassProperty = 'x' + 'y'; + + // scopeId: '.exampleAnonymousClass.constructor' + constructor() {} + + set exampleSetGet(val: string) { + // scopeId: '.exampleAnonymousClass.exampleSetGet' + let exampleVariable: Number = 1; + this.exampleClassProperty = val + exampleVariable; + } + + get exampleSetGet() { + // scopeId: '.exampleAnonymousClass.exampleSetGet' + return this.exampleClassProperty as String as string; + } +}; diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/config/rig.json b/build-tests/eslint-bulk-suppressions-test-legacy/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/config/rig.json @@ -0,0 +1,7 @@ +{ + // The "rig.json" file directs tools to look for their config files in an external package. + // Documentation for this system: https://www.npmjs.com/package/@rushstack/rig-package + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + + "rigPackageName": "local-node-rig" +} diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/package.json b/build-tests/eslint-bulk-suppressions-test-legacy/package.json new file mode 100644 index 00000000000..b6eefa931b3 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/package.json @@ -0,0 +1,22 @@ +{ + "name": "eslint-bulk-suppressions-test-legacy", + "description": "Sample code to test eslint bulk suppressions for versions of eslint < 8.57.0", + "version": "1.0.0", + "private": true, + "scripts": { + "_phase:build": "node build.js" + }, + "devDependencies": { + "@rushstack/eslint-bulk": "workspace:*", + "@rushstack/eslint-config": "3.7.0", + "@rushstack/eslint-patch": "workspace:*", + "@rushstack/heft": "workspace:*", + "@rushstack/node-core-library": "workspace:*", + "@typescript-eslint/parser": "~6.19.0", + "eslint": "~8.57.0", + "eslint-8.23": "npm:eslint@8.23.1", + "eslint-oldest": "npm:eslint@8.6.0", + "local-node-rig": "workspace:*", + "typescript": "~5.4.2" + } +} diff --git a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.23.1.json b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslint-bulk-suppressions-8.23.1.json similarity index 100% rename from build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.23.1.json rename to build-tests/eslint-bulk-suppressions-test-legacy/server/.eslint-bulk-suppressions-8.23.1.json diff --git a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.6.0.json b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslint-bulk-suppressions-8.57.0.json similarity index 100% rename from build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.6.0.json rename to build-tests/eslint-bulk-suppressions-test-legacy/server/.eslint-bulk-suppressions-8.57.0.json diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslint-bulk-suppressions-8.6.0.json b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslint-bulk-suppressions-8.6.0.json new file mode 100644 index 00000000000..ab3846d907a --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslint-bulk-suppressions-8.6.0.json @@ -0,0 +1,69 @@ +{ + "suppressions": [ + { + "file": "src/index.ts", + "scopeId": ".", + "rule": "@typescript-eslint/no-namespace" + }, + { + "file": "src/index.ts", + "scopeId": ".AbsurdClass.absurdClassMethod", + "rule": "@typescript-eslint/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".AbsurdClass.absurdClassMethod", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".AbsurdClass.absurdClassMethod.AbsurdClass2", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".AbsurdClass.absurdClassMethod.AbsurdClass2", + "rule": "@typescript-eslint/typedef" + }, + { + "file": "src/index.ts", + "scopeId": ".AbsurdClass.absurdClassMethod.AbsurdClass2.constructor", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".AbsurdClass.absurdClassMethod.AbsurdClass2.constructor.absurdObject", + "rule": "@typescript-eslint/typedef" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleEnum", + "rule": "dot-notation" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleInterface", + "rule": "@typescript-eslint/naming-convention" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleInterface2", + "rule": "@typescript-eslint/naming-convention" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleObjectType", + "rule": "@typescript-eslint/ban-types" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleObjectType", + "rule": "@typescript-eslint/consistent-type-definitions" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleObject2", + "rule": "@typescript-eslint/typedef" + } + ] +} diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslintrc.js b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslintrc.js new file mode 100644 index 00000000000..e357b45439f --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslintrc.js @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This is a workaround for https://github.com/eslint/eslint/issues/3458 +require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 +require('local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); +require('local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions'); + +module.exports = { + extends: [ + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' + ], + ignorePatterns: ['.eslintrc.js'], + + overrides: [ + /** + * Override the parser from @rushstack/eslint-config. Since the config is coming + * from the workspace instead of the external NPM package, the versions of ESLint + * and TypeScript that the config consumes will be resolved from the devDependencies + * of the config instead of from the eslint-8-test package. Overriding the parser + * ensures that the these dependencies come from the eslint-8-test package. See: + * https://github.com/microsoft/rushstack/issues/3021 + */ + { + files: ['**/*.ts', '**/*.tsx'], + parser: '@typescript-eslint/parser', + parserOptions: { project: '../tsconfig.json', tsconfigRootDir: __dirname } + } + ] +}; diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/server/src/index.ts b/build-tests/eslint-bulk-suppressions-test-legacy/server/src/index.ts new file mode 100644 index 00000000000..34328698008 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/server/src/index.ts @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// /* Object property and method code samples */ +export const exampleObject2 = { + // scopeId: '.exampleObject2.exampleObjectProperty + exampleObjectProperty: () => {}, + + exampleObjectMethod() { + // scopeId: '.exampleObject2.exampleObjectMethod' + const exampleUndefined: undefined = undefined; + return exampleUndefined; + } +}; + +/* Absurd examples */ +export class AbsurdClass { + absurdClassMethod() { + return class AbsurdClass2 { + absurdClassProperty; + constructor() { + const absurdObject = { + // scopeId: '.AbsurdClass.absurdClassMethod.AbsurdClass2.constructor.absurdObject.absurdObjectMethod' + absurdObjectMethod() {} + }; + this.absurdClassProperty = absurdObject; + } + }; + } +} + +/* Type, interface, enum code samples */ +export type ExampleObjectType = { + // scopeId: '.ExampleObjectType' + examplePropertyType: String; +}; + +// scopeId: '.ExampleInterface' +export interface ExampleInterface {} + +export enum ExampleEnum { + A = 0, + + B = 1, + + C = 'exampleStringValue'['length'], + + D = 1 +} + +/* Namespace, declare, module code samples */ +// scopeId: '.ExampleModule' +export namespace ExampleModule { + // scopeId: '.ExampleModule.ExampleInterface2' + export interface ExampleInterface2 {} +} diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/tsconfig.json b/build-tests/eslint-bulk-suppressions-test-legacy/tsconfig.json new file mode 100644 index 00000000000..174bda15d5c --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-legacy/tsconfig.json @@ -0,0 +1,23 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + "forceConsistentCasingInFileNames": true, + "declaration": true, + "sourceMap": true, + "declarationMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictNullChecks": true, + "noUnusedLocals": true, + + "module": "esnext", + "moduleResolution": "node", + "target": "es5", + "lib": ["es5"] + }, + "include": ["client/**/*.ts", "client/**/*.tsx", "server/**/*.ts", "server/**/*.tsx"], + "exclude": ["node_modules", "lib"] +} diff --git a/build-tests/eslint-bulk-suppressions-test/build.js b/build-tests/eslint-bulk-suppressions-test/build.js index f946f9c0593..b51b460c3aa 100644 --- a/build-tests/eslint-bulk-suppressions-test/build.js +++ b/build-tests/eslint-bulk-suppressions-test/build.js @@ -1,3 +1,7 @@ +// This project has a duplicate "eslint-bulk-suppressions-test-legacy" intended to test eslint +// against the older version of the TypeScript parser. Any modifications made to this project +// should be reflected in "eslint-bulk-suppressions-test-legacy" as well. + const { FileSystem, Executable, Text, Import } = require('@rushstack/node-core-library'); const path = require('path'); const { @@ -22,7 +26,7 @@ function tryLoadSuppressions(suppressionsJsonPath) { } const RUN_FOLDER_PATHS = ['client', 'server']; -const ESLINT_PACKAGE_NAMES = ['eslint', 'eslint-8.23', 'eslint-oldest']; +const ESLINT_PACKAGE_NAMES = ['eslint']; const updateFilePaths = new Set(); diff --git a/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json b/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json index 40059c12365..9b2a80a0210 100644 --- a/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json +++ b/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json @@ -8,12 +8,12 @@ { "file": "src/index.ts", "scopeId": ".ExampleClass", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/explicit-member-accessibility" }, { "file": "src/index.ts", "scopeId": ".ExampleClass", - "rule": "@typescript-eslint/explicit-member-accessibility" + "rule": "@typescript-eslint/no-wrapper-object-types" }, { "file": "src/index.ts", @@ -58,17 +58,17 @@ { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/explicit-function-return-type" }, { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/explicit-function-return-type" + "rule": "@typescript-eslint/explicit-member-accessibility" }, { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/explicit-member-accessibility" + "rule": "@typescript-eslint/no-wrapper-object-types" }, { "file": "src/index.ts", @@ -98,12 +98,12 @@ { "file": "src/index.ts", "scopeId": ".exampleFunction", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/explicit-function-return-type" }, { "file": "src/index.ts", "scopeId": ".exampleFunction", - "rule": "@typescript-eslint/explicit-function-return-type" + "rule": "@typescript-eslint/no-wrapper-object-types" }, { "file": "src/index.ts", diff --git a/build-tests/eslint-bulk-suppressions-test/package.json b/build-tests/eslint-bulk-suppressions-test/package.json index a548680ce45..3c9cbfdcfc0 100644 --- a/build-tests/eslint-bulk-suppressions-test/package.json +++ b/build-tests/eslint-bulk-suppressions-test/package.json @@ -11,10 +11,8 @@ "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", - "@typescript-eslint/parser": "~6.19.0", + "@typescript-eslint/parser": "~8.1.0", "eslint": "~8.57.0", - "eslint-8.23": "npm:eslint@~8.23.1", - "eslint-oldest": "npm:eslint@8.6.0", "local-node-rig": "workspace:*", "typescript": "~5.4.2" } diff --git a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json b/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json index ab3846d907a..5d0e82b5147 100644 --- a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json +++ b/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json @@ -53,12 +53,12 @@ { "file": "src/index.ts", "scopeId": ".ExampleObjectType", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/consistent-type-definitions" }, { "file": "src/index.ts", "scopeId": ".ExampleObjectType", - "rule": "@typescript-eslint/consistent-type-definitions" + "rule": "@typescript-eslint/no-wrapper-object-types" }, { "file": "src/index.ts", diff --git a/common/changes/@rushstack/eslint-config/user-danade-BumpEslintUtils_2024-08-13-00-25.json b/common/changes/@rushstack/eslint-config/user-danade-BumpEslintUtils_2024-08-13-00-25.json new file mode 100644 index 00000000000..024fd5231de --- /dev/null +++ b/common/changes/@rushstack/eslint-config/user-danade-BumpEslintUtils_2024-08-13-00-25.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-config", + "comment": "[BREAKING CHANGE] Bump \"@typescript-eslint/eslint-plugin\" to \"~8.1.0\" and \"@typescript-eslint/eslint-parser\" to \"~8.1.0\". Due to these changes, node@>=17.0.0 and eslint@^8.57.0 are now required due to breaking changes in the newer rules set.", + "type": "major" + } + ], + "packageName": "@rushstack/eslint-config" +} diff --git a/common/changes/@rushstack/eslint-plugin-packlets/user-danade-BumpEslintUtils_2024-08-13-00-25.json b/common/changes/@rushstack/eslint-plugin-packlets/user-danade-BumpEslintUtils_2024-08-13-00-25.json new file mode 100644 index 00000000000..ff918c1ad1d --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-packlets/user-danade-BumpEslintUtils_2024-08-13-00-25.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-plugin-packlets", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/eslint-plugin-packlets" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin-security/user-danade-BumpEslintUtils_2024-08-13-00-25.json b/common/changes/@rushstack/eslint-plugin-security/user-danade-BumpEslintUtils_2024-08-13-00-25.json new file mode 100644 index 00000000000..a4477ef1a61 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-security/user-danade-BumpEslintUtils_2024-08-13-00-25.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-plugin-security", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/eslint-plugin-security" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin/user-danade-BumpEslintUtils_2024-08-13-00-26.json b/common/changes/@rushstack/eslint-plugin/user-danade-BumpEslintUtils_2024-08-13-00-26.json new file mode 100644 index 00000000000..dcf93469653 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin/user-danade-BumpEslintUtils_2024-08-13-00-26.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/eslint-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-lint-plugin/user-danade-BumpEslintUtils_2024-08-13-00-25.json b/common/changes/@rushstack/heft-lint-plugin/user-danade-BumpEslintUtils_2024-08-13-00-25.json new file mode 100644 index 00000000000..26a7888730b --- /dev/null +++ b/common/changes/@rushstack/heft-lint-plugin/user-danade-BumpEslintUtils_2024-08-13-00-25.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-lint-plugin", + "comment": "Supported linters (ESLint, TSLint) are now loaded asynchronously", + "type": "patch" + } + ], + "packageName": "@rushstack/heft-lint-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/tree-pattern/user-danade-BumpEslintUtils_2024-08-13-00-25.json b/common/changes/@rushstack/tree-pattern/user-danade-BumpEslintUtils_2024-08-13-00-25.json new file mode 100644 index 00000000000..120c33a1f7e --- /dev/null +++ b/common/changes/@rushstack/tree-pattern/user-danade-BumpEslintUtils_2024-08-13-00-25.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/tree-pattern", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/tree-pattern" +} \ No newline at end of file diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json index 0e39d85c27e..289f3740acb 100644 --- a/common/config/rush/nonbrowser-approved-packages.json +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -202,6 +202,10 @@ "name": "@rushstack/lockfile-explorer-web", "allowedCategories": [ "libraries" ] }, + { + "name": "@rushstack/lookup-by-path", + "allowedCategories": [ "libraries" ] + }, { "name": "@rushstack/module-minifier", "allowedCategories": [ "libraries", "tests" ] @@ -222,10 +226,6 @@ "name": "@rushstack/package-extractor", "allowedCategories": [ "libraries", "vscode-extensions" ] }, - { - "name": "@rushstack/lookup-by-path", - "allowedCategories": [ "libraries" ] - }, { "name": "@rushstack/rig-package", "allowedCategories": [ "libraries" ] @@ -352,7 +352,7 @@ }, { "name": "@typescript-eslint/eslint-plugin", - "allowedCategories": [ "libraries", "vscode-extensions" ] + "allowedCategories": [ "libraries", "tests", "vscode-extensions" ] }, { "name": "@typescript-eslint/parser", diff --git a/common/config/subspaces/build-tests-subspace/.pnpmfile-subspace.cjs b/common/config/subspaces/build-tests-subspace/.pnpmfile.cjs similarity index 73% rename from common/config/subspaces/build-tests-subspace/.pnpmfile-subspace.cjs rename to common/config/subspaces/build-tests-subspace/.pnpmfile.cjs index 8befce55902..b7821599ca7 100644 --- a/common/config/subspaces/build-tests-subspace/.pnpmfile-subspace.cjs +++ b/common/config/subspaces/build-tests-subspace/.pnpmfile.cjs @@ -18,6 +18,13 @@ module.exports = { } }; +function fixUndeclaredDependency(packageJson, dependencyName) { + packageJson.dependencies[dependencyName] = + packageJson.dependencies[dependencyName] || + packageJson.devDependencies?.[dependencyName] || + packageJson.version; +} + /** * This hook is invoked during installation before a package's dependencies * are selected. @@ -38,8 +45,8 @@ function readPackage(packageJson, context) { case '@jest/test-result': { // The `@jest/test-result` package takes undeclared dependencies on `jest-haste-map` // and `jest-resolve` - packageJson.dependencies['jest-haste-map'] = packageJson.version; - packageJson.dependencies['jest-resolve'] = packageJson.version; + fixUndeclaredDependency(packageJson, 'jest-haste-map'); + fixUndeclaredDependency(packageJson, 'jest-resolve'); } case '@serverless-stack/core': { @@ -48,6 +55,13 @@ function readPackage(packageJson, context) { delete packageJson.dependencies['lerna']; break; } + + case '@typescript-eslint/rule-tester': { + // The `@typescript-eslint/rule-tester` package takes an undeclared dependency + // on `@typescript-eslint/parser` + fixUndeclaredDependency(packageJson, '@typescript-eslint/parser'); + break; + } } return packageJson; diff --git a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 2378b9f3c31..d6c26f8e701 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -1126,78 +1126,74 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0)(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 6.19.1(typescript@4.9.5) - '@typescript-eslint/type-utils': 6.19.1(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@4.9.5) - debug: 4.3.4 + '@typescript-eslint/parser': 8.1.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.1.0(typescript@4.9.5) + '@typescript-eslint/type-utils': 8.1.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@4.9.5) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.2 ts-api-utils: 1.3.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.5) - '@typescript-eslint/type-utils': 6.19.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.5) - debug: 4.3.4 + '@typescript-eslint/parser': 8.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.1.0(typescript@5.4.5) + '@typescript-eslint/type-utils': 8.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.5) eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/parser@8.1.0(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.19.1(typescript@4.9.5) - '@typescript-eslint/types': 6.19.1(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.1.0(typescript@4.9.5) + '@typescript-eslint/types': 8.1.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@4.9.5) debug: 4.3.4 eslint: 8.57.0 typescript: 4.9.5 @@ -1205,20 +1201,20 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/parser@8.1.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.5) - '@typescript-eslint/types': 6.19.1(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.1.0(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 typescript: 5.4.5 @@ -1226,105 +1222,103 @@ packages: - supports-color dev: true - /@typescript-eslint/scope-manager@6.19.1(typescript@4.9.5): - resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} + /@typescript-eslint/scope-manager@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.1(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@4.9.5) + '@typescript-eslint/types': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0(typescript@5.4.5) transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/scope-manager@6.19.1(typescript@5.4.5): - resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/scope-manager@8.1.0(typescript@4.9.5): + resolution: {integrity: sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 6.19.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@4.9.5) transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/scope-manager@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/scope-manager@8.1.0(typescript@5.4.5): + resolution: {integrity: sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.5) transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/type-utils@6.19.1(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/type-utils@8.1.0(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.19.1(typescript@4.9.5) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@4.9.5) debug: 4.3.4 - eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: + - eslint - supports-color dev: true - /@typescript-eslint/type-utils@6.19.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/type-utils@8.1.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.4.5) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 - eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: + - eslint - supports-color dev: true - /@typescript-eslint/types@6.19.1(typescript@4.9.5): - resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} + /@typescript-eslint/types@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' dependencies: - typescript: 4.9.5 + typescript: 5.4.5 dev: true - /@typescript-eslint/types@6.19.1(typescript@5.4.5): - resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/types@8.1.0(typescript@4.9.5): + resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' dependencies: - typescript: 5.4.5 + typescript: 4.9.5 dev: true - /@typescript-eslint/types@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/types@8.1.0(typescript@5.4.5): + resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' dependencies: typescript: 5.4.5 dev: true - /@typescript-eslint/typescript-estree@6.19.1(typescript@4.9.5): - resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1332,56 +1326,56 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.19.1(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@4.9.5) + '@typescript-eslint/types': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0(typescript@5.4.5) debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@4.9.5) - typescript: 4.9.5 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.19.1(typescript@5.4.5): - resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/typescript-estree@8.1.0(typescript@4.9.5): + resolution: {integrity: sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.19.1(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@4.9.5) debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.5 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/typescript-estree@8.1.0(typescript@5.4.5): + resolution: {integrity: sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.21.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 6.21.0(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.5) debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.3 + minimatch: 9.0.5 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) typescript: 5.4.5 @@ -1389,8 +1383,8 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.19.1(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1398,9 +1392,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.19.1(typescript@4.9.5) - '@typescript-eslint/types': 6.19.1(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@4.9.5) + '@typescript-eslint/scope-manager': 6.21.0(typescript@5.4.5) + '@typescript-eslint/types': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.2 transitivePeerDependencies: @@ -1408,69 +1402,63 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.19.1(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@8.1.0(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.5) - '@typescript-eslint/types': 6.19.1(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.1.0(typescript@4.9.5) + '@typescript-eslint/types': 8.1.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@4.9.5) eslint: 8.57.0 - semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@8.1.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0(typescript@5.4.5) - '@typescript-eslint/types': 6.21.0(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.1.0(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.5) eslint: 8.57.0 - semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.19.1(typescript@4.9.5): - resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} + /@typescript-eslint/visitor-keys@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.19.1(typescript@4.9.5) + '@typescript-eslint/types': 6.21.0(typescript@5.4.5) eslint-visitor-keys: 3.4.3 transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/visitor-keys@6.19.1(typescript@5.4.5): - resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/visitor-keys@8.1.0(typescript@4.9.5): + resolution: {integrity: sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 6.19.1(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@4.9.5) eslint-visitor-keys: 3.4.3 transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/visitor-keys@6.21.0(typescript@5.4.5): - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/visitor-keys@8.1.0(typescript@5.4.5): + resolution: {integrity: sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 6.21.0(typescript@5.4.5) + '@typescript-eslint/types': 8.1.0(typescript@5.4.5) eslint-visitor-keys: 3.4.3 transitivePeerDependencies: - typescript @@ -4403,6 +4391,13 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -6070,17 +6065,17 @@ packages: id: file:../../../eslint/eslint-config name: '@rushstack/eslint-config' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 typescript: '>=4.7.0' dependencies: '@rushstack/eslint-patch': file:../../../eslint/eslint-patch '@rushstack/eslint-plugin': file:../../../eslint/eslint-plugin(eslint@8.57.0)(typescript@4.9.5) '@rushstack/eslint-plugin-packlets': file:../../../eslint/eslint-plugin-packlets(eslint@8.57.0)(typescript@4.9.5) '@rushstack/eslint-plugin-security': file:../../../eslint/eslint-plugin-security(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@4.9.5) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0)(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/parser': 8.1.0(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 eslint-plugin-promise: 6.1.1(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) @@ -6095,17 +6090,17 @@ packages: id: file:../../../eslint/eslint-config name: '@rushstack/eslint-config' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.57.0 typescript: '>=4.7.0' dependencies: '@rushstack/eslint-patch': file:../../../eslint/eslint-patch '@rushstack/eslint-plugin': file:../../../eslint/eslint-plugin(eslint@8.57.0)(typescript@5.4.5) '@rushstack/eslint-plugin-packlets': file:../../../eslint/eslint-plugin-packlets(eslint@8.57.0)(typescript@5.4.5) '@rushstack/eslint-plugin-security': file:../../../eslint/eslint-plugin-security(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.4.5) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-plugin-promise: 6.1.1(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) @@ -6128,7 +6123,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6143,7 +6138,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6158,7 +6153,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6173,7 +6168,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6188,7 +6183,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@4.9.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6203,7 +6198,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6217,7 +6212,7 @@ packages: dependencies: '@rushstack/eslint-config': file:../../../eslint/eslint-config(eslint@8.57.0)(typescript@5.4.5) '@rushstack/eslint-patch': file:../../../eslint/eslint-patch - '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 8.1.0(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-deprecation: 2.0.0(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-header: 3.1.1(eslint@8.57.0) eslint-plugin-import: 2.25.4(eslint@8.57.0) diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 10827f04b73..ce7ace18d6e 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -1,6 +1,6 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "f94d51b110226486a9836ddc17b3e95022520ef6", + "pnpmShrinkwrapHash": "d6b1ce506a173cc0f198bbab8f6bb322eb8b6889", "preferredVersionsHash": "ce857ea0536b894ec8f346aaea08cfd85a5af648", - "packageJsonInjectedDependenciesHash": "c24ee2dc8281e8a5ac88833da2d53980baf2e71c" + "packageJsonInjectedDependenciesHash": "e120d817d8c972401ab79549dd270a1ff8beed7f" } diff --git a/common/config/subspaces/default/.pnpmfile-subspace.cjs b/common/config/subspaces/default/.pnpmfile.cjs similarity index 73% rename from common/config/subspaces/default/.pnpmfile-subspace.cjs rename to common/config/subspaces/default/.pnpmfile.cjs index 8befce55902..b7821599ca7 100644 --- a/common/config/subspaces/default/.pnpmfile-subspace.cjs +++ b/common/config/subspaces/default/.pnpmfile.cjs @@ -18,6 +18,13 @@ module.exports = { } }; +function fixUndeclaredDependency(packageJson, dependencyName) { + packageJson.dependencies[dependencyName] = + packageJson.dependencies[dependencyName] || + packageJson.devDependencies?.[dependencyName] || + packageJson.version; +} + /** * This hook is invoked during installation before a package's dependencies * are selected. @@ -38,8 +45,8 @@ function readPackage(packageJson, context) { case '@jest/test-result': { // The `@jest/test-result` package takes undeclared dependencies on `jest-haste-map` // and `jest-resolve` - packageJson.dependencies['jest-haste-map'] = packageJson.version; - packageJson.dependencies['jest-resolve'] = packageJson.version; + fixUndeclaredDependency(packageJson, 'jest-haste-map'); + fixUndeclaredDependency(packageJson, 'jest-resolve'); } case '@serverless-stack/core': { @@ -48,6 +55,13 @@ function readPackage(packageJson, context) { delete packageJson.dependencies['lerna']; break; } + + case '@typescript-eslint/rule-tester': { + // The `@typescript-eslint/rule-tester` package takes an undeclared dependency + // on `@typescript-eslint/parser` + fixUndeclaredDependency(packageJson, '@typescript-eslint/parser'); + break; + } } return packageJson; diff --git a/common/config/subspaces/default/common-versions.json b/common/config/subspaces/default/common-versions.json index 4c20aea7322..af90a9ede8c 100644 --- a/common/config/subspaces/default/common-versions.json +++ b/common/config/subspaces/default/common-versions.json @@ -75,12 +75,15 @@ * This design avoids unnecessary churn in this file. */ "allowedAlternativeVersions": { + "@typescript-eslint/parser": [ + "~6.19.0" // Used by build-tests/eslint-7(-*)-test / build-tests/eslint-bulk-suppressions-test-legacy + ], "eslint": [ "7.7.0", // Used by build-tests/eslint-7-7-test "7.11.0", // Used by build-tests/eslint-7-11-test "~7.30.0", // Used by build-tests/eslint-7-test - "8.6.0", // Used by build-tests/eslint-bulk-suppressions-test - "~8.23.1" // Used by build-tests/eslint-bulk-suppressions-test + "8.6.0", // Used by build-tests/eslint-bulk-suppressions-test-legacy + "8.23.1" // Used by build-tests/eslint-bulk-suppressions-test-legacy ], /** * For example, allow some projects to use an older TypeScript compiler diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 69462532f4e..a1b5b625b35 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1142,6 +1142,9 @@ importers: ../../../build-tests/eslint-7-11-test: devDependencies: + '@rushstack/eslint-config': + specifier: 3.7.0 + version: 3.7.0(eslint@7.11.0)(typescript@5.4.2) '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft @@ -1163,6 +1166,9 @@ importers: ../../../build-tests/eslint-7-7-test: devDependencies: + '@rushstack/eslint-config': + specifier: 3.7.0 + version: 3.7.0(eslint@7.7.0)(typescript@5.4.2) '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft @@ -1184,6 +1190,9 @@ importers: ../../../build-tests/eslint-7-test: devDependencies: + '@rushstack/eslint-config': + specifier: 3.7.0 + version: 3.7.0(eslint@7.30.0)(typescript@5.4.2) '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft @@ -1212,8 +1221,8 @@ importers: specifier: 18.17.15 version: 18.17.15 '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) eslint: specifier: ~8.57.0 version: 8.57.0(supports-color@8.1.1) @@ -1238,6 +1247,36 @@ importers: '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library + '@typescript-eslint/parser': + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) + eslint: + specifier: ~8.57.0 + version: 8.57.0(supports-color@8.1.1) + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + typescript: + specifier: ~5.4.2 + version: 5.4.2 + + ../../../build-tests/eslint-bulk-suppressions-test-legacy: + devDependencies: + '@rushstack/eslint-bulk': + specifier: workspace:* + version: link:../../eslint/eslint-bulk + '@rushstack/eslint-config': + specifier: 3.7.0 + version: 3.7.0(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + '@rushstack/eslint-patch': + specifier: workspace:* + version: link:../../eslint/eslint-patch + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@rushstack/node-core-library': + specifier: workspace:* + version: link:../../libraries/node-core-library '@typescript-eslint/parser': specifier: ~6.19.0 version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) @@ -1245,7 +1284,7 @@ importers: specifier: ~8.57.0 version: 8.57.0(supports-color@8.1.1) eslint-8.23: - specifier: npm:eslint@~8.23.1 + specifier: npm:eslint@8.23.1 version: /eslint@8.23.1 eslint-oldest: specifier: npm:eslint@8.6.0 @@ -2333,17 +2372,17 @@ importers: specifier: workspace:* version: link:../eslint-plugin-security '@typescript-eslint/eslint-plugin': - specifier: ~6.19.0 - version: 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(@typescript-eslint/parser@8.1.0)(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/typescript-estree': - specifier: ~6.19.0 - version: 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(typescript@5.4.2) '@typescript-eslint/utils': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) eslint-plugin-promise: specifier: ~6.1.1 version: 6.1.1(eslint@8.57.0) @@ -2394,8 +2433,8 @@ importers: specifier: workspace:* version: link:../../libraries/tree-pattern '@typescript-eslint/utils': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) devDependencies: '@eslint/eslintrc': specifier: ~3.0.0 @@ -2419,14 +2458,14 @@ importers: specifier: 18.17.15 version: 18.17.15 '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/rule-tester': - specifier: ~6.19.0 - version: 6.19.1(@eslint/eslintrc@3.0.2)(eslint@8.57.0)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(@eslint/eslintrc@3.0.2)(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/typescript-estree': - specifier: ~6.19.0 - version: 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(typescript@5.4.2) eslint: specifier: ~8.57.0 version: 8.57.0(supports-color@8.1.1) @@ -2443,8 +2482,8 @@ importers: specifier: workspace:* version: link:../../libraries/tree-pattern '@typescript-eslint/utils': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) devDependencies: '@rushstack/heft': specifier: 0.66.17 @@ -2465,11 +2504,11 @@ importers: specifier: 18.17.15 version: 18.17.15 '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/typescript-estree': - specifier: ~6.19.0 - version: 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(typescript@5.4.2) eslint: specifier: ~8.57.0 version: 8.57.0(supports-color@8.1.1) @@ -2486,8 +2525,8 @@ importers: specifier: workspace:* version: link:../../libraries/tree-pattern '@typescript-eslint/utils': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) devDependencies: '@eslint/eslintrc': specifier: ~3.0.0 @@ -2511,14 +2550,14 @@ importers: specifier: 18.17.15 version: 18.17.15 '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/rule-tester': - specifier: ~6.19.0 - version: 6.19.1(@eslint/eslintrc@3.0.2)(eslint@8.57.0)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(@eslint/eslintrc@3.0.2)(eslint@8.57.0)(typescript@5.4.2) '@typescript-eslint/typescript-estree': - specifier: ~6.19.0 - version: 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(typescript@5.4.2) eslint: specifier: ~8.57.0 version: 8.57.0(supports-color@8.1.1) @@ -2538,8 +2577,8 @@ importers: specifier: workspace:* version: link:../eslint-patch '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + specifier: ~8.1.0 + version: 8.1.0(eslint@8.57.0)(typescript@5.4.2) eslint-plugin-deprecation: specifier: 2.0.0 version: 2.0.0(eslint@8.57.0)(typescript@5.4.2) @@ -3508,7 +3547,7 @@ importers: version: 1.0.4(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-icons': specifier: ~1.1.1 - version: 1.1.1(react@17.0.2) + version: 1.1.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@radix-ui/react-scroll-area': specifier: ~1.0.2 version: 1.0.5(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) @@ -7247,6 +7286,36 @@ packages: dev: true optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@7.11.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 7.11.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@7.30.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 7.30.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@7.7.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 7.7.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8806,6 +8875,7 @@ packages: /@humanwhocodes/config-array@0.10.7: resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4(supports-color@8.1.1) @@ -8817,6 +8887,7 @@ packages: /@humanwhocodes/config-array@0.11.14(supports-color@8.1.1): resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4(supports-color@8.1.1) @@ -8838,6 +8909,7 @@ packages: /@humanwhocodes/config-array@0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.3.4(supports-color@8.1.1) @@ -8856,10 +8928,12 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead dev: true /@humanwhocodes/object-schema@2.0.2: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + deprecated: Use @eslint/object-schema instead /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -9676,13 +9750,13 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-context': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-use-previous': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-use-size': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-previous': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-size': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 '@types/react-dom': 17.0.25 react: 17.0.2 @@ -9703,20 +9777,21 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-context': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-slot': 1.0.2(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 '@types/react-dom': 17.0.25 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) dev: true - /@radix-ui/react-compose-refs@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-compose-refs@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -9724,13 +9799,15 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-context@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-context@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -9738,13 +9815,15 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-direction@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-direction@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -9752,29 +9831,36 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-icons@1.1.1(react@17.0.2): + /@radix-ui/react-icons@1.1.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-xc3wQC59rsFylVbSusQCrrM+6695ppF730Q6yqzhRdqDcRNWIm2R6ngpzBoSOQMcwnq4p805F+Gr7xo4fmtN1A==} peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' react: ^16.x || ^17.x || ^18.x dependencies: + '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-id@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-id@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true @@ -9792,8 +9878,8 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 '@types/react-dom': 17.0.25 react: 17.0.2 @@ -9814,7 +9900,7 @@ packages: optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-slot': 1.0.2(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-slot': 1.0.2(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 '@types/react-dom': 17.0.25 react: 17.0.2 @@ -9837,13 +9923,13 @@ packages: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-context': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-direction': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-id': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 '@types/react-dom': 17.0.25 react: 17.0.2 @@ -9866,31 +9952,33 @@ packages: '@babel/runtime': 7.24.0 '@radix-ui/number': 1.0.1 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-context': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-direction': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 '@types/react-dom': 17.0.25 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) dev: true - /@radix-ui/react-slot@1.0.2(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-slot@1.0.2(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-compose-refs': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-compose-refs': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true @@ -9909,23 +9997,24 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@radix-ui/primitive': 1.0.1 - '@radix-ui/react-context': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-direction': 1.0.1(@types/react@17.0.74)(react@17.0.2) - '@radix-ui/react-id': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-context': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-direction': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-id': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@radix-ui/react-presence': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@17.0.25)(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-controllable-state': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 '@types/react-dom': 17.0.25 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) dev: true - /@radix-ui/react-use-callback-ref@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-use-callback-ref@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -9933,28 +10022,32 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-use-controllable-state@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-use-controllable-state@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-callback-ref': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-use-layout-effect@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-use-layout-effect@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -9962,13 +10055,15 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-use-previous@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-use-previous@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': @@ -9976,21 +10071,24 @@ packages: dependencies: '@babel/runtime': 7.24.0 '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true - /@radix-ui/react-use-size@1.0.1(@types/react@17.0.74)(react@17.0.2): + /@radix-ui/react-use-size@1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2): resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==} peerDependencies: '@types/react': '*' + '@types/react-dom': '*' react: ^16.8 || ^17.0 || ^18.0 peerDependenciesMeta: '@types/react': optional: true dependencies: '@babel/runtime': 7.24.0 - '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@17.0.74)(react@17.0.2) + '@radix-ui/react-use-layout-effect': 1.0.1(@types/react-dom@17.0.25)(@types/react@17.0.74)(react@17.0.2) '@types/react': 17.0.74 + '@types/react-dom': 17.0.25 react: 17.0.2 dev: true @@ -10027,6 +10125,75 @@ packages: engines: {node: '>=14.0.0'} dev: true + /@rushstack/eslint-config@3.7.0(eslint@7.11.0)(typescript@5.4.2): + resolution: {integrity: sha512-9AWc0eIElbrTm9VTfdjaXeqrS7gGoZJ7oMmUdUX0dtPzYrWBHLCuR4eOgLo3pQIC+HyLFt/AzX1ontQTJlWjtQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '>=4.7.0' + dependencies: + '@rushstack/eslint-patch': 1.10.3 + '@rushstack/eslint-plugin': 0.15.1(eslint@7.11.0)(typescript@5.4.2) + '@rushstack/eslint-plugin-packlets': 0.9.1(eslint@7.11.0)(typescript@5.4.2) + '@rushstack/eslint-plugin-security': 0.8.1(eslint@7.11.0)(typescript@5.4.2) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.11.0)(typescript@5.4.2) + '@typescript-eslint/parser': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + eslint: 7.11.0 + eslint-plugin-promise: 6.1.1(eslint@7.11.0) + eslint-plugin-react: 7.33.2(eslint@7.11.0) + eslint-plugin-tsdoc: 0.3.0 + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@rushstack/eslint-config@3.7.0(eslint@7.30.0)(typescript@5.4.2): + resolution: {integrity: sha512-9AWc0eIElbrTm9VTfdjaXeqrS7gGoZJ7oMmUdUX0dtPzYrWBHLCuR4eOgLo3pQIC+HyLFt/AzX1ontQTJlWjtQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '>=4.7.0' + dependencies: + '@rushstack/eslint-patch': 1.10.3 + '@rushstack/eslint-plugin': 0.15.1(eslint@7.30.0)(typescript@5.4.2) + '@rushstack/eslint-plugin-packlets': 0.9.1(eslint@7.30.0)(typescript@5.4.2) + '@rushstack/eslint-plugin-security': 0.8.1(eslint@7.30.0)(typescript@5.4.2) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.30.0)(typescript@5.4.2) + '@typescript-eslint/parser': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + eslint: 7.30.0 + eslint-plugin-promise: 6.1.1(eslint@7.30.0) + eslint-plugin-react: 7.33.2(eslint@7.30.0) + eslint-plugin-tsdoc: 0.3.0 + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@rushstack/eslint-config@3.7.0(eslint@7.7.0)(typescript@5.4.2): + resolution: {integrity: sha512-9AWc0eIElbrTm9VTfdjaXeqrS7gGoZJ7oMmUdUX0dtPzYrWBHLCuR4eOgLo3pQIC+HyLFt/AzX1ontQTJlWjtQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '>=4.7.0' + dependencies: + '@rushstack/eslint-patch': 1.10.3 + '@rushstack/eslint-plugin': 0.15.1(eslint@7.7.0)(typescript@5.4.2) + '@rushstack/eslint-plugin-packlets': 0.9.1(eslint@7.7.0)(typescript@5.4.2) + '@rushstack/eslint-plugin-security': 0.8.1(eslint@7.7.0)(typescript@5.4.2) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.7.0)(typescript@5.4.2) + '@typescript-eslint/parser': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + eslint: 7.7.0 + eslint-plugin-promise: 6.1.1(eslint@7.7.0) + eslint-plugin-react: 7.33.2(eslint@7.7.0) + eslint-plugin-tsdoc: 0.3.0 + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + /@rushstack/eslint-config@3.7.0(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): resolution: {integrity: sha512-9AWc0eIElbrTm9VTfdjaXeqrS7gGoZJ7oMmUdUX0dtPzYrWBHLCuR4eOgLo3pQIC+HyLFt/AzX1ontQTJlWjtQ==} peerDependencies: @@ -10077,6 +10244,45 @@ packages: resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} dev: true + /@rushstack/eslint-plugin-packlets@0.9.1(eslint@7.11.0)(typescript@5.4.2): + resolution: {integrity: sha512-CN7RKrrpBj+UXzOYUxArzV7lUKX8UlZBJWPzdAI8HFYg0g1EVASjGRlcq3Q+e1KRZ1MeliVigRsoodfmJCHv+A==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + eslint: 7.11.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin-packlets@0.9.1(eslint@7.30.0)(typescript@5.4.2): + resolution: {integrity: sha512-CN7RKrrpBj+UXzOYUxArzV7lUKX8UlZBJWPzdAI8HFYg0g1EVASjGRlcq3Q+e1KRZ1MeliVigRsoodfmJCHv+A==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + eslint: 7.30.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin-packlets@0.9.1(eslint@7.7.0)(typescript@5.4.2): + resolution: {integrity: sha512-CN7RKrrpBj+UXzOYUxArzV7lUKX8UlZBJWPzdAI8HFYg0g1EVASjGRlcq3Q+e1KRZ1MeliVigRsoodfmJCHv+A==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + eslint: 7.7.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@rushstack/eslint-plugin-packlets@0.9.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): resolution: {integrity: sha512-CN7RKrrpBj+UXzOYUxArzV7lUKX8UlZBJWPzdAI8HFYg0g1EVASjGRlcq3Q+e1KRZ1MeliVigRsoodfmJCHv+A==} peerDependencies: @@ -10103,6 +10309,45 @@ packages: - typescript dev: true + /@rushstack/eslint-plugin-security@0.8.1(eslint@7.11.0)(typescript@5.4.2): + resolution: {integrity: sha512-XEMt9dvifXO6mmIfVggUNd4PP8pZlewn1D7OGXdMtLasRUiOkZGOYu24Kj5fgLnPDH1xqAdG9okhPZwT4yar7w==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + eslint: 7.11.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin-security@0.8.1(eslint@7.30.0)(typescript@5.4.2): + resolution: {integrity: sha512-XEMt9dvifXO6mmIfVggUNd4PP8pZlewn1D7OGXdMtLasRUiOkZGOYu24Kj5fgLnPDH1xqAdG9okhPZwT4yar7w==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + eslint: 7.30.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin-security@0.8.1(eslint@7.7.0)(typescript@5.4.2): + resolution: {integrity: sha512-XEMt9dvifXO6mmIfVggUNd4PP8pZlewn1D7OGXdMtLasRUiOkZGOYu24Kj5fgLnPDH1xqAdG9okhPZwT4yar7w==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + eslint: 7.7.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@rushstack/eslint-plugin-security@0.8.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): resolution: {integrity: sha512-XEMt9dvifXO6mmIfVggUNd4PP8pZlewn1D7OGXdMtLasRUiOkZGOYu24Kj5fgLnPDH1xqAdG9okhPZwT4yar7w==} peerDependencies: @@ -10129,6 +10374,45 @@ packages: - typescript dev: true + /@rushstack/eslint-plugin@0.15.1(eslint@7.11.0)(typescript@5.4.2): + resolution: {integrity: sha512-xgu6jwMscLCX0SWCDAUEpIFou3ApyTkJC76zgrWs6oOH1oeF8PLfzkdwhaSF8QptXG6oxXV7aqGMkDwH5ToBwQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + eslint: 7.11.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin@0.15.1(eslint@7.30.0)(typescript@5.4.2): + resolution: {integrity: sha512-xgu6jwMscLCX0SWCDAUEpIFou3ApyTkJC76zgrWs6oOH1oeF8PLfzkdwhaSF8QptXG6oxXV7aqGMkDwH5ToBwQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + eslint: 7.30.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin@0.15.1(eslint@7.7.0)(typescript@5.4.2): + resolution: {integrity: sha512-xgu6jwMscLCX0SWCDAUEpIFou3ApyTkJC76zgrWs6oOH1oeF8PLfzkdwhaSF8QptXG6oxXV7aqGMkDwH5ToBwQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.3 + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + eslint: 7.7.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@rushstack/eslint-plugin@0.15.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): resolution: {integrity: sha512-xgu6jwMscLCX0SWCDAUEpIFou3ApyTkJC76zgrWs6oOH1oeF8PLfzkdwhaSF8QptXG6oxXV7aqGMkDwH5ToBwQ==} peerDependencies: @@ -12959,7 +13243,7 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.11.0)(typescript@5.4.2): resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -12971,10 +13255,97 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/parser': 6.19.1(eslint@7.11.0)(typescript@5.4.2) '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.2) - '@typescript-eslint/type-utils': 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/type-utils': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 7.11.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.30.0)(typescript@5.4.2): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.2) + '@typescript-eslint/type-utils': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 7.30.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.7.0)(typescript@5.4.2): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.2) + '@typescript-eslint/type-utils': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 7.7.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.2) + '@typescript-eslint/type-utils': 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.4.2) debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0(supports-color@8.1.1) @@ -12986,6 +13357,7 @@ packages: typescript: 5.4.2 transitivePeerDependencies: - supports-color + dev: true /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} @@ -13016,6 +13388,33 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin@8.1.0(@typescript-eslint/parser@8.1.0)(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-LlNBaHFCEBPHyD4pZXb35mzjGkuGKXU5eeCA1SxvHfiRES0E82dOounfVpL4DCqYvJEKab0bZIA0gCRpdLKkCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 8.1.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/scope-manager': 8.1.0(typescript@5.4.2) + '@typescript-eslint/type-utils': 8.1.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.2) + eslint: 8.57.0(supports-color@8.1.1) + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: false + /@typescript-eslint/parser@6.19.1(eslint@7.11.0)(typescript@5.4.2): resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13098,6 +13497,7 @@ packages: typescript: 5.4.2 transitivePeerDependencies: - supports-color + dev: true /@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} @@ -13120,21 +13520,43 @@ packages: - supports-color dev: true - /@typescript-eslint/rule-tester@6.19.1(@eslint/eslintrc@3.0.2)(eslint@8.57.0)(typescript@5.4.2): - resolution: {integrity: sha512-1qvOSO9kjtjP66UimQ06tnZC/XVhb2s5hVi2Cn33efnzM3m+j8rwcGJJ9xwKacUWe7U50iHrY9xrakmF7SPWbg==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/parser@8.1.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-U7iTAtGgJk6DPX9wIWPPOlt1gO57097G06gIcl0N0EEnNw8RGD62c+2/DiP/zL7KrkqnnqF7gtFGR7YgzPllTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 8.1.0(typescript@5.4.2) + '@typescript-eslint/types': 8.1.0(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 8.57.0(supports-color@8.1.1) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/rule-tester@8.1.0(@eslint/eslintrc@3.0.2)(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-shzRkkwKoCUCV1lttzqMFsKnbsOWQ0vjfxe1q3kDjrqdhKkQ/t3t3GwHk0QqjYQd7NUjKk2EB+nNaNI//0IL7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@eslint/eslintrc': '>=2' - eslint: '>=8' + eslint: ^8.57.0 || ^9.0.0 dependencies: '@eslint/eslintrc': 3.0.2 '@types/semver': 7.5.0 - '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/parser': 8.1.0(eslint@8.57.0)(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.2) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.2) ajv: 6.12.6 eslint: 8.57.0(supports-color@8.1.1) + json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 - semver: 7.5.4 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -13159,6 +13581,75 @@ packages: transitivePeerDependencies: - typescript + /@typescript-eslint/scope-manager@8.1.0(typescript@5.4.2): + resolution: {integrity: sha512-DsuOZQji687sQUjm4N6c9xABJa7fjvfIdjqpSIIVOgaENf2jFXiM9hIBZOL3hb6DHK9Nvd2d7zZnoMLf9e0OtQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.1.0(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.2) + transitivePeerDependencies: + - typescript + + /@typescript-eslint/type-utils@6.19.1(eslint@7.11.0)(typescript@5.4.2): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 7.11.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@6.19.1(eslint@7.30.0)(typescript@5.4.2): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 7.30.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@6.19.1(eslint@7.7.0)(typescript@5.4.2): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + eslint: 7.7.0 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/type-utils@6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13177,6 +13668,7 @@ packages: typescript: 5.4.2 transitivePeerDependencies: - supports-color + dev: true /@typescript-eslint/type-utils@6.19.1(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} @@ -13198,6 +13690,25 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils@8.1.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-oLYvTxljVvsMnldfl6jIKxTaU7ok7km0KDrwOt1RHYu6nxlhN3TIx8k5Q52L6wR33nOwDgM7VwW1fT1qMNfFIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.2) + '@typescript-eslint/utils': 8.1.0(eslint@8.57.0)(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - eslint + - supports-color + dev: false + /@typescript-eslint/types@5.59.11(typescript@5.4.2): resolution: {integrity: sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -13224,6 +13735,14 @@ packages: dependencies: typescript: 5.4.2 + /@typescript-eslint/types@8.1.0(typescript@5.4.2): + resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + dependencies: + typescript: 5.4.2 + /@typescript-eslint/typescript-estree@6.19.1(supports-color@8.1.1)(typescript@5.4.2): resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13267,6 +13786,84 @@ packages: - supports-color dev: true + /@typescript-eslint/typescript-estree@8.1.0(typescript@5.4.2): + resolution: {integrity: sha512-NTHhmufocEkMiAord/g++gWKb0Fr34e9AExBRdqgWdVBaKoei2dIyYKD9Q0jBnvfbEA5zaf8plUFMUH6kQ0vGg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 8.1.0(typescript@5.4.2) + '@typescript-eslint/visitor-keys': 8.1.0(typescript@5.4.2) + debug: 4.3.4(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.4.2) + typescript: 5.4.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/utils@6.19.1(eslint@7.11.0)(typescript@5.4.2): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@7.11.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.2) + '@typescript-eslint/types': 6.19.1(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + eslint: 7.11.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.19.1(eslint@7.30.0)(typescript@5.4.2): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@7.30.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.2) + '@typescript-eslint/types': 6.19.1(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + eslint: 7.30.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.19.1(eslint@7.7.0)(typescript@5.4.2): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@7.7.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.4.2) + '@typescript-eslint/types': 6.19.1(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 6.19.1(supports-color@8.1.1)(typescript@5.4.2) + eslint: 7.7.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/utils@6.19.1(eslint@8.57.0)(supports-color@8.1.1)(typescript@5.4.2): resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13304,6 +13901,21 @@ packages: - typescript dev: true + /@typescript-eslint/utils@8.1.0(eslint@8.57.0)(typescript@5.4.2): + resolution: {integrity: sha512-ypRueFNKTIFwqPeJBfeIpxZ895PQhNyH4YID6js0UoBImWYoSjBsahUn9KMiJXh94uOjVBgHD9AmkyPsPnFwJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 8.1.0(typescript@5.4.2) + '@typescript-eslint/types': 8.1.0(typescript@5.4.2) + '@typescript-eslint/typescript-estree': 8.1.0(typescript@5.4.2) + eslint: 8.57.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + - typescript + /@typescript-eslint/visitor-keys@6.19.1(typescript@4.9.5): resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13323,6 +13935,15 @@ packages: transitivePeerDependencies: - typescript + /@typescript-eslint/visitor-keys@8.1.0(typescript@5.4.2): + resolution: {integrity: sha512-ba0lNI19awqZ5ZNKh6wCModMwoZs457StTebQ0q1NP58zSi2F6MOZRXwfKZy+jB78JNJ/WH8GSh2IQNzXX8Nag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.1.0(typescript@5.4.2) + eslint-visitor-keys: 3.4.3 + transitivePeerDependencies: + - typescript + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -17232,6 +17853,33 @@ packages: - supports-color dev: false + /eslint-plugin-promise@6.1.1(eslint@7.11.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 7.11.0 + dev: true + + /eslint-plugin-promise@6.1.1(eslint@7.30.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 7.30.0 + dev: true + + /eslint-plugin-promise@6.1.1(eslint@7.7.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 7.7.0 + dev: true + /eslint-plugin-promise@6.1.1(eslint@8.57.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -17249,6 +17897,81 @@ packages: eslint: 8.57.0(supports-color@8.1.1) dev: false + /eslint-plugin-react@7.33.2(eslint@7.11.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.18 + eslint: 7.11.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + + /eslint-plugin-react@7.33.2(eslint@7.30.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.18 + eslint: 7.30.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + + /eslint-plugin-react@7.33.2(eslint@7.7.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.18 + eslint: 7.7.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + /eslint-plugin-react@7.33.2(eslint@8.57.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} @@ -21663,6 +22386,12 @@ packages: dependencies: brace-expansion: 2.0.1 + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -24320,6 +25049,7 @@ packages: /rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -24327,12 +25057,14 @@ packages: /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true dependencies: glob: 7.2.3 @@ -24813,6 +25545,11 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + /send@0.17.2: resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} engines: {node: '>= 0.8.0'} diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 470d4a9a7e4..12b0f860f99 100644 --- a/common/config/subspaces/default/repo-state.json +++ b/common/config/subspaces/default/repo-state.json @@ -1,5 +1,5 @@ // DO NOT MODIFY THIS FILE MANUALLY BUT DO COMMIT IT. It is generated and used by Rush. { - "pnpmShrinkwrapHash": "b57605a120edc7c8740eb54e092f24d026f7819f", + "pnpmShrinkwrapHash": "83760b8fe17c408a8955574ba43dca50ca14099f", "preferredVersionsHash": "ce857ea0536b894ec8f346aaea08cfd85a5af648" } diff --git a/eslint/eslint-config/package.json b/eslint/eslint-config/package.json index 77aa4b0372c..ad6f5657a5b 100644 --- a/eslint/eslint-config/package.json +++ b/eslint/eslint-config/package.json @@ -23,7 +23,7 @@ "typescript" ], "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint": "^8.57.0", "typescript": ">=4.7.0" }, "dependencies": { @@ -31,10 +31,10 @@ "@rushstack/eslint-plugin": "workspace:*", "@rushstack/eslint-plugin-packlets": "workspace:*", "@rushstack/eslint-plugin-security": "workspace:*", - "@typescript-eslint/eslint-plugin": "~6.19.0", - "@typescript-eslint/utils": "~6.19.0", - "@typescript-eslint/parser": "~6.19.0", - "@typescript-eslint/typescript-estree": "~6.19.0", + "@typescript-eslint/eslint-plugin": "~8.1.0", + "@typescript-eslint/utils": "~8.1.0", + "@typescript-eslint/parser": "~8.1.0", + "@typescript-eslint/typescript-estree": "~8.1.0", "eslint-plugin-promise": "~6.1.1", "eslint-plugin-react": "~7.33.2", "eslint-plugin-tsdoc": "~0.3.0" diff --git a/eslint/eslint-config/profile/_common.js b/eslint/eslint-config/profile/_common.js index b9da60f38c7..4f64259436c 100644 --- a/eslint/eslint-config/profile/_common.js +++ b/eslint/eslint-config/profile/_common.js @@ -260,54 +260,10 @@ function buildRules(profile) { '@typescript-eslint/adjacent-overload-signatures': 'warn', // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json - // - // CONFIGURATION: By default, these are banned: String, Boolean, Number, Object, Symbol - '@typescript-eslint/ban-types': [ - 'warn', - { - extendDefaults: false, // (the complete list is in this file) - types: { - String: { - message: 'Use "string" instead', - fixWith: 'string' - }, - Boolean: { - message: 'Use "boolean" instead', - fixWith: 'boolean' - }, - Number: { - message: 'Use "number" instead', - fixWith: 'number' - }, - Object: { - message: 'Use "object" instead, or else define a proper TypeScript type:' - }, - Symbol: { - message: 'Use "symbol" instead', - fixWith: 'symbol' - }, - Function: { - message: [ - 'The "Function" type accepts any function-like value.', - 'It provides no type safety when calling the function, which can be a common source of bugs.', - 'It also accepts things like class declarations, which will throw at runtime as they will not be called with "new".', - 'If you are expecting the function to accept certain arguments, you should explicitly define the function shape.' - ].join('\n') - } - - // This is a good idea, but before enabling it we need to put some thought into the recommended - // coding practices; the default suggestions are too vague. - // - // '{}': { - // message: [ - // '"{}" actually means "any non-nullish value".', - // '- If you want a type meaning "any object", you probably want "Record" instead.', - // '- If you want a type meaning "any value", you probably want "unknown" instead.' - // ].join('\n') - // } - } - } - ], + '@typescript-eslint/no-unsafe-function-type': 'warn', + + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-wrapper-object-types': 'warn', // RATIONALE: We require "x as number" instead of "x" to avoid conflicts with JSX. '@typescript-eslint/consistent-type-assertions': 'warn', @@ -433,7 +389,9 @@ function buildRules(profile) { // Unused function arguments often indicate a mistake in JavaScript code. However in TypeScript code, // the compiler catches most of those mistakes, and unused arguments are fairly common for type signatures // that are overriding a base class method or implementing an interface. - args: 'none' + args: 'none', + // Unused error arguments are common and useful for inspection when a debugger is attached. + caughtErrors: 'none' } ], diff --git a/eslint/eslint-plugin-packlets/package.json b/eslint/eslint-plugin-packlets/package.json index 8b7fb213bb2..89f67c00555 100644 --- a/eslint/eslint-plugin-packlets/package.json +++ b/eslint/eslint-plugin-packlets/package.json @@ -24,7 +24,7 @@ }, "dependencies": { "@rushstack/tree-pattern": "workspace:*", - "@typescript-eslint/utils": "~6.19.0" + "@typescript-eslint/utils": "~8.1.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -36,8 +36,8 @@ "@types/estree": "1.0.5", "@types/heft-jest": "1.0.1", "@types/node": "18.17.15", - "@typescript-eslint/parser": "~6.19.0", - "@typescript-eslint/typescript-estree": "~6.19.0", + "@typescript-eslint/parser": "~8.1.0", + "@typescript-eslint/typescript-estree": "~8.1.0", "eslint": "~8.57.0", "eslint-plugin-header": "~3.1.1", "typescript": "~5.4.2" diff --git a/eslint/eslint-plugin-security/package.json b/eslint/eslint-plugin-security/package.json index 78c918342c3..078e7e97900 100644 --- a/eslint/eslint-plugin-security/package.json +++ b/eslint/eslint-plugin-security/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@rushstack/tree-pattern": "workspace:*", - "@typescript-eslint/utils": "~6.19.0" + "@typescript-eslint/utils": "~8.1.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -36,9 +36,9 @@ "@types/estree": "1.0.5", "@types/heft-jest": "1.0.1", "@types/node": "18.17.15", - "@typescript-eslint/parser": "~6.19.0", - "@typescript-eslint/rule-tester": "~6.19.0", - "@typescript-eslint/typescript-estree": "~6.19.0", + "@typescript-eslint/parser": "~8.1.0", + "@typescript-eslint/rule-tester": "~8.1.0", + "@typescript-eslint/typescript-estree": "~8.1.0", "eslint": "~8.57.0", "eslint-plugin-header": "~3.1.1", "typescript": "~5.4.2" diff --git a/eslint/eslint-plugin-security/src/no-unsafe-regexp.test.ts b/eslint/eslint-plugin-security/src/no-unsafe-regexp.test.ts index 0f99d046011..719bb9d9395 100644 --- a/eslint/eslint-plugin-security/src/no-unsafe-regexp.test.ts +++ b/eslint/eslint-plugin-security/src/no-unsafe-regexp.test.ts @@ -1,13 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import * as parser from '@typescript-eslint/parser'; import { RuleTester } from '@typescript-eslint/rule-tester'; import { noUnsafeRegExp } from './no-unsafe-regexp'; -const ruleTester = new RuleTester({ - parser: require.resolve('@typescript-eslint/parser') -}); - +const ruleTester = new RuleTester({ languageOptions: { parser } }); ruleTester.run('no-unsafe-regexp', noUnsafeRegExp, { invalid: [ { diff --git a/eslint/eslint-plugin/package.json b/eslint/eslint-plugin/package.json index 5e6fe3fd397..ecfdf95dac1 100644 --- a/eslint/eslint-plugin/package.json +++ b/eslint/eslint-plugin/package.json @@ -27,7 +27,7 @@ }, "dependencies": { "@rushstack/tree-pattern": "workspace:*", - "@typescript-eslint/utils": "~6.19.0" + "@typescript-eslint/utils": "~8.1.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -40,9 +40,9 @@ "@types/estree": "1.0.5", "@types/heft-jest": "1.0.1", "@types/node": "18.17.15", - "@typescript-eslint/parser": "~6.19.0", - "@typescript-eslint/rule-tester": "~6.19.0", - "@typescript-eslint/typescript-estree": "~6.19.0", + "@typescript-eslint/parser": "~8.1.0", + "@typescript-eslint/rule-tester": "~8.1.0", + "@typescript-eslint/typescript-estree": "~8.1.0", "eslint": "~8.57.0", "eslint-plugin-header": "~3.1.1", "typescript": "~5.4.2" diff --git a/eslint/eslint-plugin/src/test/hoist-jest-mock.test.ts b/eslint/eslint-plugin/src/test/hoist-jest-mock.test.ts index c6a28571df3..28c5dab4857 100644 --- a/eslint/eslint-plugin/src/test/hoist-jest-mock.test.ts +++ b/eslint/eslint-plugin/src/test/hoist-jest-mock.test.ts @@ -1,16 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import * as parser from '@typescript-eslint/parser'; import { RuleTester } from '@typescript-eslint/rule-tester'; import { hoistJestMock } from '../hoist-jest-mock'; const ruleTester = new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { - sourceType: 'module', - // Do not run under 'lib" folder - tsconfigRootDir: __dirname + '/../../src/test/fixtures', - project: './tsconfig.json' + languageOptions: { + parser, + parserOptions: { + sourceType: 'module', + // Do not run under 'lib" folder + tsconfigRootDir: __dirname + '/../../src/test/fixtures', + project: './tsconfig.json' + } } }); diff --git a/eslint/eslint-plugin/src/test/no-new-null.test.ts b/eslint/eslint-plugin/src/test/no-new-null.test.ts index f1227a8eecb..d1dcf8d5c1d 100644 --- a/eslint/eslint-plugin/src/test/no-new-null.test.ts +++ b/eslint/eslint-plugin/src/test/no-new-null.test.ts @@ -1,16 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import * as parser from '@typescript-eslint/parser'; import { RuleTester } from '@typescript-eslint/rule-tester'; import { noNewNullRule } from '../no-new-null'; const ruleTester = new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { - sourceType: 'module', - // Do not run under 'lib" folder - tsconfigRootDir: __dirname + '/../../src/test/fixtures', - project: './tsconfig.json' + languageOptions: { + parser, + parserOptions: { + sourceType: 'module', + // Do not run under 'lib" folder + tsconfigRootDir: __dirname + '/../../src/test/fixtures', + project: './tsconfig.json' + } } }); diff --git a/eslint/eslint-plugin/src/test/no-untyped-underscore.test.ts b/eslint/eslint-plugin/src/test/no-untyped-underscore.test.ts index c81d218a0f2..43d1e667851 100644 --- a/eslint/eslint-plugin/src/test/no-untyped-underscore.test.ts +++ b/eslint/eslint-plugin/src/test/no-untyped-underscore.test.ts @@ -1,16 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import * as parser from '@typescript-eslint/parser'; import { RuleTester } from '@typescript-eslint/rule-tester'; import { noUntypedUnderscoreRule } from '../no-untyped-underscore'; const ruleTester = new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { - sourceType: 'module', - // Do not run under 'lib" folder - tsconfigRootDir: __dirname + '/../../src/test/fixtures', - project: './tsconfig.json' + languageOptions: { + parser, + parserOptions: { + sourceType: 'module', + // Do not run under 'lib" folder + tsconfigRootDir: __dirname + '/../../src/test/fixtures', + project: './tsconfig.json' + } } }); diff --git a/eslint/eslint-plugin/src/test/typedef-var.test.ts b/eslint/eslint-plugin/src/test/typedef-var.test.ts index a873952faae..5874317f952 100644 --- a/eslint/eslint-plugin/src/test/typedef-var.test.ts +++ b/eslint/eslint-plugin/src/test/typedef-var.test.ts @@ -1,16 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import * as parser from '@typescript-eslint/parser'; import { RuleTester } from '@typescript-eslint/rule-tester'; import { typedefVar } from '../typedef-var'; const ruleTester = new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { - sourceType: 'module', - // Do not run under 'lib" folder - tsconfigRootDir: __dirname + '/../../src/test/fixtures', - project: './tsconfig.json' + languageOptions: { + parser, + parserOptions: { + sourceType: 'module', + // Do not run under 'lib" folder + tsconfigRootDir: __dirname + '/../../src/test/fixtures', + project: './tsconfig.json' + } } }); diff --git a/eslint/local-eslint-config/package.json b/eslint/local-eslint-config/package.json index a8463562af0..a79910f468e 100644 --- a/eslint/local-eslint-config/package.json +++ b/eslint/local-eslint-config/package.json @@ -14,7 +14,7 @@ "dependencies": { "@rushstack/eslint-config": "workspace:*", "@rushstack/eslint-patch": "workspace:*", - "@typescript-eslint/parser": "~6.19.0", + "@typescript-eslint/parser": "~8.1.0", "eslint-plugin-deprecation": "2.0.0", "eslint-plugin-header": "~3.1.1", "eslint-plugin-import": "2.25.4", diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index 46b5935ac6d..2f79618d611 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -12,7 +12,8 @@ import { FileError } from '@rushstack/node-core-library'; import { LinterBase, type ILinterBaseOptions } from './LinterBase'; interface IEslintOptions extends ILinterBaseOptions { - eslintPackagePath: string; + eslintPackage: typeof TEslint; + eslintTimings: Map; } interface IEslintTiming { @@ -25,44 +26,84 @@ enum EslintMessageSeverity { error = 2 } +async function patchTimerAsync(eslintPackagePath: string, timingsMap: Map): Promise { + const timingModulePath: string = path.join(eslintPackagePath, 'lib', 'linter', 'timing'); + const timing: IEslintTiming = (await import(timingModulePath)).default; + timing.enabled = true; + const patchedTime: (key: string, fn: (...args: unknown[]) => unknown) => (...args: unknown[]) => unknown = ( + key: string, + fn: (...args: unknown[]) => unknown + ) => { + return (...args: unknown[]) => { + const startTime: number = performance.now(); + const result: unknown = fn(...args); + const endTime: number = performance.now(); + const existingTiming: number = timingsMap.get(key) || 0; + timingsMap.set(key, existingTiming + endTime - startTime); + return result; + }; + }; + timing.time = patchedTime; +} + export class Eslint extends LinterBase { - private readonly _eslintPackagePath: string; + private readonly _eslintPackage: typeof TEslint; + private readonly _linter: TEslint.ESLint; private readonly _eslintTimings: Map = new Map(); - private _eslintPackage: typeof TEslint; - private _eslint!: TEslint.ESLint; - - public constructor(options: IEslintOptions) { + protected constructor(options: IEslintOptions) { super('eslint', options); - this._eslintPackagePath = options.eslintPackagePath; + const { buildFolderPath, eslintPackage, linterConfigFilePath, tsProgram, eslintTimings } = options; + this._eslintPackage = eslintPackage; + this._linter = new eslintPackage.ESLint({ + cwd: buildFolderPath, + overrideConfigFile: linterConfigFilePath, + // Override config takes precedence over overrideConfigFile, which allows us to provide + // the source TypeScript program to ESLint + overrideConfig: { + parserOptions: { + programs: [tsProgram] + } + } + }); + this._eslintTimings = eslintTimings; + } + + public static async initializeAsync(options: ILinterBaseOptions): Promise { + const { linterToolPath } = options; + const eslintTimings: Map = new Map(); // This must happen before the rest of the linter package is loaded - this._patchTimer(options.eslintPackagePath); - this._eslintPackage = require(options.eslintPackagePath); + await patchTimerAsync(linterToolPath, eslintTimings); + + const eslintPackage: typeof TEslint = await import(linterToolPath); + return new Eslint({ + ...options, + eslintPackage, + eslintTimings + }); } public printVersionHeader(): void { - this._terminal.writeLine(`Using ESLint version ${this._eslintPackage.Linter.version}`); + const linterVersion: string = this._eslintPackage.Linter.version; + this._terminal.writeLine(`Using ESLint version ${linterVersion}`); - const majorVersion: number = semver.major(this._eslintPackage.Linter.version); + const majorVersion: number = semver.major(linterVersion); if (majorVersion < 7) { - throw new Error( - 'Heft requires ESLint 7 or newer. Your ESLint version is too old:\n' + this._eslintPackagePath - ); + throw new Error('Heft requires ESLint 7 or newer. Your ESLint version is too old'); } if (majorVersion > 8) { // We don't use writeWarningLine() here because, if the person wants to take their chances with // a newer ESLint release, their build should be allowed to succeed. this._terminal.writeLine( - 'The ESLint version is newer than the latest version that was tested with Heft; it may not work correctly:' + 'The ESLint version is newer than the latest version that was tested with Heft, so it may not work correctly.' ); - this._terminal.writeLine(this._eslintPackagePath); } } protected async getCacheVersionAsync(): Promise { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const eslintBaseConfiguration: any = await this._eslint.calculateConfigForFile( + const eslintBaseConfiguration: any = await this._linter.calculateConfigForFile( this._linterConfigFilePath ); const eslintConfigHash: crypto.Hash = crypto @@ -75,22 +116,8 @@ export class Eslint extends LinterBase { return eslintConfigVersion; } - protected async initializeAsync(tsProgram: TTypescript.Program): Promise { - // Override config takes precedence over overrideConfigFile, which allows us to provide - // the source TypeScript program. - this._eslint = new this._eslintPackage.ESLint({ - cwd: this._buildFolderPath, - overrideConfigFile: this._linterConfigFilePath, - overrideConfig: { - parserOptions: { - programs: [tsProgram] - } - } - }); - } - protected async lintFileAsync(sourceFile: TTypescript.SourceFile): Promise { - const lintResults: TEslint.ESLint.LintResult[] = await this._eslint.lintText(sourceFile.text, { + const lintResults: TEslint.ESLint.LintResult[] = await this._linter.lintText(sourceFile.text, { filePath: sourceFile.fileName }); @@ -162,25 +189,6 @@ export class Eslint extends LinterBase { } protected async isFileExcludedAsync(filePath: string): Promise { - return await this._eslint.isPathIgnored(filePath); - } - - private _patchTimer(eslintPackagePath: string): void { - const timing: IEslintTiming = require(path.join(eslintPackagePath, 'lib', 'linter', 'timing')); - timing.enabled = true; - const patchedTime: ( - key: string, - fn: (...args: unknown[]) => unknown - ) => (...args: unknown[]) => unknown = (key: string, fn: (...args: unknown[]) => unknown) => { - return (...args: unknown[]) => { - const startTime: number = performance.now(); - const result: unknown = fn(...args); - const endTime: number = performance.now(); - const existingTiming: number = this._eslintTimings.get(key) || 0; - this._eslintTimings.set(key, existingTiming + endTime - startTime); - return result; - }; - }; - timing.time = patchedTime; + return await this._linter.isPathIgnored(filePath); } } diff --git a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts index 71c3ced79ff..6d46febf00a 100644 --- a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts +++ b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts @@ -15,6 +15,7 @@ import type { ITypeScriptPluginAccessor } from '@rushstack/heft-typescript-plugin'; +import type { LinterBase } from './LinterBase'; import { Eslint } from './Eslint'; import { Tslint } from './Tslint'; import type { IExtendedProgram, IExtendedSourceFile } from './internalTypings/TypeScriptInternals'; @@ -123,82 +124,44 @@ export default class LintPlugin implements IHeftTaskPlugin { // multiple times will only init once. await this._ensureInitializedAsync(taskSession, heftConfiguration); - // Now that we know we have initialized properly, run the linter(s) - const lintingPromises: Promise[] = []; - if (this._eslintToolPath) { - lintingPromises.push( - this._runEslintAsync( - taskSession, - heftConfiguration, - this._eslintToolPath, - this._eslintConfigFilePath!, - tsProgram, - changedFiles - ) - ); - } - if (this._tslintToolPath) { - lintingPromises.push( - this._runTslintAsync( - taskSession, - heftConfiguration, - this._tslintToolPath, - this._tslintConfigFilePath!, - tsProgram, - changedFiles - ) - ); + const linters: LinterBase[] = []; + if (this._eslintConfigFilePath && this._eslintToolPath) { + const eslintLinter: Eslint = await Eslint.initializeAsync({ + tsProgram, + scopedLogger: taskSession.logger, + linterToolPath: this._eslintToolPath, + linterConfigFilePath: this._eslintConfigFilePath, + buildFolderPath: heftConfiguration.buildFolderPath, + buildMetadataFolderPath: taskSession.tempFolderPath + }); + linters.push(eslintLinter); } - await Promise.all(lintingPromises); - } - - private async _runEslintAsync( - taskSession: IHeftTaskSession, - heftConfiguration: HeftConfiguration, - eslintToolPath: string, - eslintConfigFilePath: string, - tsProgram: IExtendedProgram, - changedFiles?: ReadonlySet | undefined - ): Promise { - const eslint: Eslint = new Eslint({ - scopedLogger: taskSession.logger, - eslintPackagePath: eslintToolPath, - linterConfigFilePath: eslintConfigFilePath, - buildFolderPath: heftConfiguration.buildFolderPath, - buildMetadataFolderPath: taskSession.tempFolderPath - }); - - eslint.printVersionHeader(); + if (this._tslintConfigFilePath && this._tslintToolPath) { + const tslintLinter: Tslint = await Tslint.initializeAsync({ + tsProgram, + scopedLogger: taskSession.logger, + linterToolPath: this._tslintToolPath, + linterConfigFilePath: this._tslintConfigFilePath, + buildFolderPath: heftConfiguration.buildFolderPath, + buildMetadataFolderPath: taskSession.tempFolderPath + }); + linters.push(tslintLinter); + } - const typeScriptFilenames: Set = new Set(tsProgram.getRootFileNames()); - await eslint.performLintingAsync({ - tsProgram, - typeScriptFilenames, - changedFiles: changedFiles || new Set(tsProgram.getSourceFiles()) - }); + // Now that we know we have initialized properly, run the linter(s) + await Promise.all(linters.map((linter) => this._runLinterAsync(linter, tsProgram, changedFiles))); } - private async _runTslintAsync( - taskSession: IHeftTaskSession, - heftConfiguration: HeftConfiguration, - tslintToolPath: string, - tslintConfigFilePath: string, + private async _runLinterAsync( + linter: LinterBase, tsProgram: IExtendedProgram, changedFiles?: ReadonlySet | undefined ): Promise { - const tslint: Tslint = new Tslint({ - scopedLogger: taskSession.logger, - tslintPackagePath: tslintToolPath, - linterConfigFilePath: tslintConfigFilePath, - buildFolderPath: heftConfiguration.buildFolderPath, - buildMetadataFolderPath: taskSession.tempFolderPath - }); - - tslint.printVersionHeader(); + linter.printVersionHeader(); const typeScriptFilenames: Set = new Set(tsProgram.getRootFileNames()); - await tslint.performLintingAsync({ + await linter.performLintingAsync({ tsProgram, typeScriptFilenames, changedFiles: changedFiles || new Set(tsProgram.getSourceFiles()) diff --git a/heft-plugins/heft-lint-plugin/src/LinterBase.ts b/heft-plugins/heft-lint-plugin/src/LinterBase.ts index 89c3eb84e16..4a6f7fa6086 100644 --- a/heft-plugins/heft-lint-plugin/src/LinterBase.ts +++ b/heft-plugins/heft-lint-plugin/src/LinterBase.ts @@ -17,7 +17,9 @@ export interface ILinterBaseOptions { * The path where the linter state will be written to. */ buildMetadataFolderPath: string; + linterToolPath: string; linterConfigFilePath: string; + tsProgram: IExtendedProgram; } export interface IRunLinterOptions { @@ -72,8 +74,6 @@ export abstract class LinterBase { const startTime: number = performance.now(); let fileCount: number = 0; - await this.initializeAsync(options.tsProgram); - const commonDirectory: string = options.tsProgram.getCommonSourceDirectory(); const relativePaths: Map = new Map(); @@ -171,8 +171,6 @@ export abstract class LinterBase { protected abstract getCacheVersionAsync(): Promise; - protected abstract initializeAsync(tsProgram: IExtendedProgram): Promise; - protected abstract lintFileAsync(sourceFile: IExtendedSourceFile): Promise; protected abstract lintingFinished(lintFailures: TLintResult[]): void; diff --git a/heft-plugins/heft-lint-plugin/src/Tslint.ts b/heft-plugins/heft-lint-plugin/src/Tslint.ts index 76250f8d08a..2a95013a7f7 100644 --- a/heft-plugins/heft-lint-plugin/src/Tslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Tslint.ts @@ -12,19 +12,57 @@ import { LinterBase, type ILinterBaseOptions } from './LinterBase'; import type { IExtendedLinter } from './internalTypings/TslintInternals'; interface ITslintOptions extends ILinterBaseOptions { - tslintPackagePath: string; + tslintPackage: typeof TTslint; + tslintConfiguration: TTslint.Configuration.IConfigurationFile; +} + +function getFormattedErrorMessage(tslintFailure: TTslint.RuleFailure): string { + return `(${tslintFailure.getRuleName()}) ${tslintFailure.getFailure()}`; } export class Tslint extends LinterBase { - private _tslint: typeof TTslint; - private _tslintConfiguration!: TTslint.Configuration.IConfigurationFile; - private _linter!: IExtendedLinter; - private _enabledRules!: TTslint.IRule[]; - private _ruleSeverityMap!: Map; + private readonly _tslintPackage: typeof TTslint; + private readonly _tslintConfiguration: TTslint.Configuration.IConfigurationFile; + private readonly _linter: IExtendedLinter; + private readonly _enabledRules: TTslint.IRule[]; + private readonly _ruleSeverityMap: Map; public constructor(options: ITslintOptions) { super('tslint', options); - this._tslint = require(options.tslintPackagePath); + + const { tslintPackage, tsProgram } = options; + this._tslintPackage = tslintPackage; + this._tslintConfiguration = options.tslintConfiguration; + this._linter = new tslintPackage.Linter( + { + // This is not handled by the linter in the way that we use it, so we will manually apply + // fixes later + fix: false, + rulesDirectory: this._tslintConfiguration.rulesDirectory + }, + tsProgram + ) as unknown as IExtendedLinter; + + this._enabledRules = this._linter.getEnabledRules(this._tslintConfiguration, false); + + this._ruleSeverityMap = new Map( + this._enabledRules.map((rule): [string, TTslint.RuleSeverity] => [ + rule.getOptions().ruleName, + rule.getOptions().ruleSeverity + ]) + ); + } + + public static async initializeAsync(options: ILinterBaseOptions): Promise { + const { linterToolPath, linterConfigFilePath } = options; + const tslintPackage: typeof TTslint = await import(linterToolPath); + const tslintConfiguration: TTslint.Configuration.IConfigurationFile = + tslintPackage.Configuration.loadConfigurationFromPath(linterConfigFilePath); + return new Tslint({ + ...options, + tslintPackage, + tslintConfiguration + }); } /** @@ -80,7 +118,7 @@ export class Tslint extends LinterBase { } public printVersionHeader(): void { - this._terminal.writeLine(`Using TSLint version ${this._tslint.Linter.VERSION}`); + this._terminal.writeLine(`Using TSLint version ${this._tslintPackage.Linter.VERSION}`); } protected async getCacheVersionAsync(): Promise { @@ -88,33 +126,13 @@ export class Tslint extends LinterBase { this._linterConfigFilePath, this._terminal ); - const tslintConfigVersion: string = `${this._tslint.Linter.VERSION}_${tslintConfigHash.digest('hex')}`; + const tslintConfigVersion: string = `${this._tslintPackage.Linter.VERSION}_${tslintConfigHash.digest( + 'hex' + )}`; return tslintConfigVersion; } - protected async initializeAsync(tsProgram: TTypescript.Program): Promise { - this._tslintConfiguration = this._tslint.Configuration.loadConfigurationFromPath( - this._linterConfigFilePath - ); - this._linter = new this._tslint.Linter( - { - fix: false, - rulesDirectory: this._tslintConfiguration.rulesDirectory - }, - tsProgram - ) as unknown as IExtendedLinter; - - this._enabledRules = this._linter.getEnabledRules(this._tslintConfiguration, false); - - this._ruleSeverityMap = new Map( - this._enabledRules.map((rule): [string, TTslint.RuleSeverity] => [ - rule.getOptions().ruleName, - rule.getOptions().ruleSeverity - ]) - ); - } - protected async lintFileAsync(sourceFile: TTypescript.SourceFile): Promise { // Some of this code comes from here: // https://github.com/palantir/tslint/blob/24d29e421828348f616bf761adb3892bcdf51662/src/linter.ts#L161-L179 @@ -140,14 +158,7 @@ export class Tslint extends LinterBase { // Report linter errors and warnings to the logger if (lintResult.failures.length) { for (const tslintFailure of lintResult.failures) { - const { line, character } = tslintFailure.getStartPosition().getLineAndCharacter(); - const formattedFailure: string = `(${tslintFailure.getRuleName()}) ${tslintFailure.getFailure()}`; - const errorObject: FileError = new FileError(formattedFailure, { - absolutePath: tslintFailure.getFileName(), - projectFolder: this._buildFolderPath, - line: line + 1, - column: character + 1 - }); + const errorObject: FileError = this._getLintFileError(tslintFailure); switch (tslintFailure.getRuleSeverity()) { case 'error': { this._scopedLogger.emitError(errorObject); @@ -164,6 +175,20 @@ export class Tslint extends LinterBase { } protected async isFileExcludedAsync(filePath: string): Promise { - return this._tslint.Configuration.isFileExcluded(filePath, this._tslintConfiguration); + return this._tslintPackage.Configuration.isFileExcluded(filePath, this._tslintConfiguration); + } + + private _getLintFileError(tslintFailure: TTslint.RuleFailure, message?: string): FileError { + if (!message) { + message = getFormattedErrorMessage(tslintFailure); + } + + const { line, character } = tslintFailure.getStartPosition().getLineAndCharacter(); + return new FileError(message, { + absolutePath: tslintFailure.getFileName(), + projectFolder: this._buildFolderPath, + line: line + 1, + column: character + 1 + }); } } diff --git a/rush.json b/rush.json index 5728d6e9eb8..ccbc7b7f2fc 100644 --- a/rush.json +++ b/rush.json @@ -42,7 +42,7 @@ * LTS schedule: https://nodejs.org/en/about/releases/ * LTS versions: https://nodejs.org/en/download/releases/ */ - "nodeSupportedVersionRange": ">=16.13.0 <17.0.0 || >=18.15.0 <19.0.0 || >=20.9.0 <21.0.0", + "nodeSupportedVersionRange": ">=18.15.0 <19.0.0 || >=20.9.0 <21.0.0", /** * If the version check above fails, Rush will display a message showing the current @@ -543,19 +543,22 @@ "packageName": "eslint-7-7-test", "projectFolder": "build-tests/eslint-7-7-test", "reviewCategory": "tests", - "shouldPublish": false + "shouldPublish": false, + "cyclicDependencyProjects": ["@rushstack/eslint-config"] }, { "packageName": "eslint-7-11-test", "projectFolder": "build-tests/eslint-7-11-test", "reviewCategory": "tests", - "shouldPublish": false + "shouldPublish": false, + "cyclicDependencyProjects": ["@rushstack/eslint-config"] }, { "packageName": "eslint-7-test", "projectFolder": "build-tests/eslint-7-test", "reviewCategory": "tests", - "shouldPublish": false + "shouldPublish": false, + "cyclicDependencyProjects": ["@rushstack/eslint-config"] }, { "packageName": "eslint-8-test", @@ -569,6 +572,13 @@ "reviewCategory": "tests", "shouldPublish": false }, + { + "packageName": "eslint-bulk-suppressions-test-legacy", + "projectFolder": "build-tests/eslint-bulk-suppressions-test-legacy", + "reviewCategory": "tests", + "shouldPublish": false, + "cyclicDependencyProjects": ["@rushstack/eslint-config"] + }, { "packageName": "package-extractor-test-01", "projectFolder": "build-tests/package-extractor-test-01", diff --git a/webpack/webpack-deep-imports-plugin/src/DeepImportsPlugin.ts b/webpack/webpack-deep-imports-plugin/src/DeepImportsPlugin.ts index 29dc4b4e049..241f5f8129a 100644 --- a/webpack/webpack-deep-imports-plugin/src/DeepImportsPlugin.ts +++ b/webpack/webpack-deep-imports-plugin/src/DeepImportsPlugin.ts @@ -7,8 +7,7 @@ import { Async, FileSystem, LegacyAdapters, Path } from '@rushstack/node-core-li const PLUGIN_NAME: 'DeepImportsPlugin' = 'DeepImportsPlugin'; -declare const dummyDllPlugin: DllPlugin; -type DllPluginOptions = typeof dummyDllPlugin.options; +type DllPluginOptions = DllPlugin['options']; /** * @public