diff --git a/README.md b/README.md index b2bd0738ef4..00c9bcaaa0d 100644 --- a/README.md +++ b/README.md @@ -163,7 +163,9 @@ These GitHub repositories provide supplementary resources for Rush Stack: | [/build-tests/eslint-7-7-test](./build-tests/eslint-7-7-test/) | This project contains a build test to validate ESLint 7.7.0 compatibility with the latest version of @rushstack/eslint-config (and by extension, the ESLint plugin) | | [/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-9-test](./build-tests/eslint-9-test/) | This project contains a build test to validate ESLint 9 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-flat](./build-tests/eslint-bulk-suppressions-test-flat/) | Sample code to test eslint bulk suppressions with flat configs | | [/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 | diff --git a/apps/api-documenter/.eslintrc.js b/apps/api-documenter/.eslintrc.js deleted file mode 100644 index a1235bc5ed3..00000000000 --- a/apps/api-documenter/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-console': 'off' - } - } - ] -}; diff --git a/apps/api-documenter/eslint.config.js b/apps/api-documenter/eslint.config.js new file mode 100644 index 00000000000..ceb5a1bee40 --- /dev/null +++ b/apps/api-documenter/eslint.config.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + 'no-console': 'off' + } + } +]; diff --git a/apps/api-documenter/package.json b/apps/api-documenter/package.json index 91fadb1a20e..4edff5b4394 100644 --- a/apps/api-documenter/package.json +++ b/apps/api-documenter/package.json @@ -32,6 +32,7 @@ "@rushstack/heft": "workspace:*", "@types/js-yaml": "3.12.1", "@types/resolve": "1.20.2", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/apps/api-documenter/src/markdown/test/CustomMarkdownEmitter.test.ts b/apps/api-documenter/src/markdown/test/CustomMarkdownEmitter.test.ts index 7e6b7712209..5e545c8d39b 100644 --- a/apps/api-documenter/src/markdown/test/CustomMarkdownEmitter.test.ts +++ b/apps/api-documenter/src/markdown/test/CustomMarkdownEmitter.test.ts @@ -174,7 +174,7 @@ test('render Markdown from TSDoc', () => { output.appendNodes([ new DocHeading({ configuration, title: 'After a table' }), new DocParagraph({ configuration }, [ - new DocPlainText({ configuration, text: 'just checking lines after a table' }), + new DocPlainText({ configuration, text: 'just checking lines after a table' }) ]) ]); diff --git a/apps/cpu-profile-summarizer/.eslintrc.js b/apps/cpu-profile-summarizer/.eslintrc.js deleted file mode 100644 index a1235bc5ed3..00000000000 --- a/apps/cpu-profile-summarizer/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-console': 'off' - } - } - ] -}; diff --git a/apps/cpu-profile-summarizer/eslint.config.js b/apps/cpu-profile-summarizer/eslint.config.js new file mode 100644 index 00000000000..ceb5a1bee40 --- /dev/null +++ b/apps/cpu-profile-summarizer/eslint.config.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + 'no-console': 'off' + } + } +]; diff --git a/apps/cpu-profile-summarizer/package.json b/apps/cpu-profile-summarizer/package.json index 968e1f71363..51c0e11a2aa 100644 --- a/apps/cpu-profile-summarizer/package.json +++ b/apps/cpu-profile-summarizer/package.json @@ -23,6 +23,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/apps/heft/.eslintrc.js b/apps/heft/.eslintrc.js index 066bf07ecc8..bc633c3e1b9 100644 --- a/apps/heft/.eslintrc.js +++ b/apps/heft/.eslintrc.js @@ -1,9 +1,12 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool', 'local-eslint-config/mixins/friendly-locals'], + extends: [ + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' + ], parserOptions: { tsconfigRootDir: __dirname } }; diff --git a/apps/heft/package.json b/apps/heft/package.json index 11e720aba75..7942c705ac0 100644 --- a/apps/heft/package.json +++ b/apps/heft/package.json @@ -51,7 +51,6 @@ "@microsoft/api-extractor": "workspace:*", "@rushstack/heft": "0.73.2", "@types/watchpack": "2.4.0", - "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*" + "decoupled-local-node-rig": "workspace:*" } } diff --git a/apps/lockfile-explorer-web/.eslintrc.js b/apps/lockfile-explorer-web/.eslintrc.js deleted file mode 100644 index cf9ccc5e37e..00000000000 --- a/apps/lockfile-explorer-web/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names'); - -module.exports = { - extends: [ - 'local-web-rig/profiles/app/includes/eslint/profile/web-app', - 'local-web-rig/profiles/app/includes/eslint/mixins/react' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/apps/lockfile-explorer-web/eslint.config.js b/apps/lockfile-explorer-web/eslint.config.js new file mode 100644 index 00000000000..4664e2044d7 --- /dev/null +++ b/apps/lockfile-explorer-web/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-web-rig/profiles/app/includes/eslint/flat/profile/web-app'); +const reactMixin = require('local-web-rig/profiles/app/includes/eslint/flat/mixins/react'); + +module.exports = [ + ...webAppProfile, + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/apps/lockfile-explorer-web/package.json b/apps/lockfile-explorer-web/package.json index 58198d94123..d9c76c4bca2 100644 --- a/apps/lockfile-explorer-web/package.json +++ b/apps/lockfile-explorer-web/package.json @@ -22,8 +22,9 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", - "@types/react-dom": "17.0.25", "@types/react": "17.0.74", + "@types/react-dom": "17.0.25", + "eslint": "~9.25.1", "local-web-rig": "workspace:*" } } diff --git a/apps/lockfile-explorer-web/src/start.tsx b/apps/lockfile-explorer-web/src/start.tsx index 127e5f765d4..02a1aa1ebae 100644 --- a/apps/lockfile-explorer-web/src/start.tsx +++ b/apps/lockfile-explorer-web/src/start.tsx @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -// eslint-disable-next-line @typescript-eslint/no-unused-vars import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { App } from './App'; diff --git a/apps/lockfile-explorer/.eslintrc.js b/apps/lockfile-explorer/.eslintrc.js deleted file mode 100644 index 0249c62b67a..00000000000 --- a/apps/lockfile-explorer/.eslintrc.js +++ /dev/null @@ -1,18 +0,0 @@ -// 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'); - -module.exports = { - extends: ['local-node-rig/profiles/default/includes/eslint/profile/node'], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-console': 'off' - } - } - ] -}; diff --git a/apps/lockfile-explorer/eslint.config.js b/apps/lockfile-explorer/eslint.config.js new file mode 100644 index 00000000000..0c26ce1ce48 --- /dev/null +++ b/apps/lockfile-explorer/eslint.config.js @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + 'no-console': 'off' + } + } +]; diff --git a/apps/lockfile-explorer/package.json b/apps/lockfile-explorer/package.json index 55595036494..5a27f3faebf 100644 --- a/apps/lockfile-explorer/package.json +++ b/apps/lockfile-explorer/package.json @@ -53,6 +53,7 @@ "@types/express": "4.17.21", "@types/js-yaml": "3.12.1", "@types/update-notifier": "~6.0.1", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "@pnpm/lockfile-types": "^5.1.5", "@types/semver": "7.5.0" diff --git a/apps/rundown/.eslintrc.js b/apps/rundown/.eslintrc.js deleted file mode 100644 index a1235bc5ed3..00000000000 --- a/apps/rundown/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-console': 'off' - } - } - ] -}; diff --git a/apps/rundown/eslint.config.js b/apps/rundown/eslint.config.js new file mode 100644 index 00000000000..ceb5a1bee40 --- /dev/null +++ b/apps/rundown/eslint.config.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + 'no-console': 'off' + } + } +]; diff --git a/apps/rundown/package.json b/apps/rundown/package.json index 92d7bfed772..df6f6e6029a 100644 --- a/apps/rundown/package.json +++ b/apps/rundown/package.json @@ -27,6 +27,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/apps/rush-mcp-server/.eslintrc.js b/apps/rush-mcp-server/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/apps/rush-mcp-server/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/apps/rush-mcp-server/eslint.config.js b/apps/rush-mcp-server/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/apps/rush-mcp-server/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/apps/rush-mcp-server/package.json b/apps/rush-mcp-server/package.json index ee29bec67ee..46d60451973 100644 --- a/apps/rush-mcp-server/package.json +++ b/apps/rush-mcp-server/package.json @@ -39,6 +39,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "typescript": "~5.8.2", "@types/node": "20.17.19" diff --git a/apps/rush-mcp-server/src/pluginFramework/IRushMcpPlugin.ts b/apps/rush-mcp-server/src/pluginFramework/IRushMcpPlugin.ts index fa74680ccab..0f52c3272c1 100644 --- a/apps/rush-mcp-server/src/pluginFramework/IRushMcpPlugin.ts +++ b/apps/rush-mcp-server/src/pluginFramework/IRushMcpPlugin.ts @@ -15,7 +15,6 @@ export interface IRushMcpPlugin { * The plugin's entry point should return this function as its default export. * @public */ -// eslint-disable-next-line @typescript-eslint/consistent-type-definitions export type RushMcpPluginFactory = ( session: RushMcpPluginSession, configFile: TConfigFile | undefined diff --git a/apps/rush/.eslintrc.js b/apps/rush/.eslintrc.js deleted file mode 100644 index a1235bc5ed3..00000000000 --- a/apps/rush/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-console': 'off' - } - } - ] -}; diff --git a/apps/rush/eslint.config.js b/apps/rush/eslint.config.js new file mode 100644 index 00000000000..ceb5a1bee40 --- /dev/null +++ b/apps/rush/eslint.config.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + 'no-console': 'off' + } + } +]; diff --git a/apps/rush/package.json b/apps/rush/package.json index 4bbfd0ad8a8..af45820a58b 100644 --- a/apps/rush/package.json +++ b/apps/rush/package.json @@ -43,6 +43,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "@rushstack/rush-amazon-s3-build-cache-plugin": "workspace:*", "@rushstack/rush-azure-storage-build-cache-plugin": "workspace:*", diff --git a/apps/trace-import/.eslintrc.js b/apps/trace-import/.eslintrc.js deleted file mode 100644 index a1235bc5ed3..00000000000 --- a/apps/trace-import/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-console': 'off' - } - } - ] -}; diff --git a/apps/trace-import/eslint.config.js b/apps/trace-import/eslint.config.js new file mode 100644 index 00000000000..ceb5a1bee40 --- /dev/null +++ b/apps/trace-import/eslint.config.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + 'no-console': 'off' + } + } +]; diff --git a/apps/trace-import/package.json b/apps/trace-import/package.json index 6f269d3adf4..eaa7a599a22 100644 --- a/apps/trace-import/package.json +++ b/apps/trace-import/package.json @@ -29,6 +29,7 @@ "@rushstack/heft": "workspace:*", "@types/resolve": "1.20.2", "@types/semver": "7.5.0", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/build-tests-samples/heft-node-basic-tutorial/.eslintrc.js b/build-tests-samples/heft-node-basic-tutorial/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests-samples/heft-node-basic-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-node-basic-tutorial/eslint.config.js b/build-tests-samples/heft-node-basic-tutorial/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests-samples/heft-node-basic-tutorial/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-node-basic-tutorial/package.json b/build-tests-samples/heft-node-basic-tutorial/package.json index 7724fd1d5d3..e442a7003aa 100644 --- a/build-tests-samples/heft-node-basic-tutorial/package.json +++ b/build-tests-samples/heft-node-basic-tutorial/package.json @@ -11,14 +11,14 @@ "_phase:test": "heft run --only test -- --clean" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests-samples/heft-node-jest-tutorial/.eslintrc.js b/build-tests-samples/heft-node-jest-tutorial/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests-samples/heft-node-jest-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-node-jest-tutorial/eslint.config.js b/build-tests-samples/heft-node-jest-tutorial/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests-samples/heft-node-jest-tutorial/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-node-jest-tutorial/package.json b/build-tests-samples/heft-node-jest-tutorial/package.json index fa568c579ad..82547f76ea7 100644 --- a/build-tests-samples/heft-node-jest-tutorial/package.json +++ b/build-tests-samples/heft-node-jest-tutorial/package.json @@ -10,14 +10,14 @@ "_phase:test": "heft run --only test -- --clean" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests-samples/heft-node-rig-tutorial/.eslintrc.js b/build-tests-samples/heft-node-rig-tutorial/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests-samples/heft-node-rig-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-node-rig-tutorial/eslint.config.js b/build-tests-samples/heft-node-rig-tutorial/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests-samples/heft-node-rig-tutorial/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-node-rig-tutorial/package.json b/build-tests-samples/heft-node-rig-tutorial/package.json index cd18bda4837..cb23439fb63 100644 --- a/build-tests-samples/heft-node-rig-tutorial/package.json +++ b/build-tests-samples/heft-node-rig-tutorial/package.json @@ -15,6 +15,7 @@ "@rushstack/heft": "workspace:*", "@rushstack/heft-node-rig": "workspace:*", "@types/heft-jest": "1.0.1", - "@types/node": "20.17.19" + "@types/node": "20.17.19", + "eslint": "~9.25.1" } } diff --git a/build-tests-samples/heft-serverless-stack-tutorial/.eslintrc.js b/build-tests-samples/heft-serverless-stack-tutorial/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests-samples/heft-serverless-stack-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js b/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-serverless-stack-tutorial/package.json b/build-tests-samples/heft-serverless-stack-tutorial/package.json index 0d912a28c0f..3f60fc2d8a7 100644 --- a/build-tests-samples/heft-serverless-stack-tutorial/package.json +++ b/build-tests-samples/heft-serverless-stack-tutorial/package.json @@ -28,7 +28,7 @@ "@types/node": "20.17.19", "aws-cdk-lib": "2.189.1", "constructs": "~10.0.98", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } diff --git a/build-tests-samples/heft-storybook-react-tutorial/.eslintrc.js b/build-tests-samples/heft-storybook-react-tutorial/.eslintrc.js deleted file mode 100644 index 48218299439..00000000000 --- a/build-tests-samples/heft-storybook-react-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app', 'local-eslint-config/mixins/react'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-storybook-react-tutorial/eslint.config.js b/build-tests-samples/heft-storybook-react-tutorial/eslint.config.js new file mode 100644 index 00000000000..e5eaf3c624a --- /dev/null +++ b/build-tests-samples/heft-storybook-react-tutorial/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [ + ...webAppProfile, + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-storybook-react-tutorial/package.json b/build-tests-samples/heft-storybook-react-tutorial/package.json index 1df19236ef5..b6c6f330ae7 100644 --- a/build-tests-samples/heft-storybook-react-tutorial/package.json +++ b/build-tests-samples/heft-storybook-react-tutorial/package.json @@ -18,24 +18,24 @@ }, "devDependencies": { "@babel/core": "~7.20.0", - "local-eslint-config": "workspace:*", + "@rushstack/heft": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-storybook-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@rushstack/heft-webpack4-plugin": "workspace:*", - "@rushstack/heft": "workspace:*", "@rushstack/webpack4-module-minifier-plugin": "workspace:*", "@storybook/react": "~6.4.18", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "@types/react-dom": "17.0.25", "@types/react": "17.0.74", + "@types/react-dom": "17.0.25", "@types/webpack-env": "1.18.8", "css-loader": "~5.2.7", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "heft-storybook-react-tutorial-storykit": "workspace:*", "html-webpack-plugin": "~4.5.2", + "local-eslint-config": "workspace:*", "source-map-loader": "~1.1.3", "style-loader": "~2.0.0", "typescript": "~5.8.2", diff --git a/build-tests-samples/heft-web-rig-app-tutorial/.eslintrc.js b/build-tests-samples/heft-web-rig-app-tutorial/.eslintrc.js deleted file mode 100644 index 48218299439..00000000000 --- a/build-tests-samples/heft-web-rig-app-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app', 'local-eslint-config/mixins/react'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-web-rig-app-tutorial/eslint.config.js b/build-tests-samples/heft-web-rig-app-tutorial/eslint.config.js new file mode 100644 index 00000000000..e5eaf3c624a --- /dev/null +++ b/build-tests-samples/heft-web-rig-app-tutorial/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [ + ...webAppProfile, + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-web-rig-app-tutorial/package.json b/build-tests-samples/heft-web-rig-app-tutorial/package.json index 25d4f7c051e..9f89a388039 100644 --- a/build-tests-samples/heft-web-rig-app-tutorial/package.json +++ b/build-tests-samples/heft-web-rig-app-tutorial/package.json @@ -16,11 +16,12 @@ "tslib": "~2.3.1" }, "devDependencies": { - "local-eslint-config": "workspace:*", - "@rushstack/heft-web-rig": "workspace:*", "@rushstack/heft": "workspace:*", - "@types/react-dom": "17.0.25", + "@rushstack/heft-web-rig": "workspace:*", "@types/react": "17.0.74", - "@types/webpack-env": "1.18.8" + "@types/react-dom": "17.0.25", + "@types/webpack-env": "1.18.8", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*" } } diff --git a/build-tests-samples/heft-web-rig-library-tutorial/.eslintrc.js b/build-tests-samples/heft-web-rig-library-tutorial/.eslintrc.js deleted file mode 100644 index 48218299439..00000000000 --- a/build-tests-samples/heft-web-rig-library-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app', 'local-eslint-config/mixins/react'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-web-rig-library-tutorial/eslint.config.js b/build-tests-samples/heft-web-rig-library-tutorial/eslint.config.js new file mode 100644 index 00000000000..e5eaf3c624a --- /dev/null +++ b/build-tests-samples/heft-web-rig-library-tutorial/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [ + ...webAppProfile, + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-web-rig-library-tutorial/package.json b/build-tests-samples/heft-web-rig-library-tutorial/package.json index a45f6ed4f58..1dffed1a3a9 100644 --- a/build-tests-samples/heft-web-rig-library-tutorial/package.json +++ b/build-tests-samples/heft-web-rig-library-tutorial/package.json @@ -18,11 +18,12 @@ "tslib": "~2.3.1" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft-web-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@types/react-dom": "17.0.25", "@types/react": "17.0.74", - "@types/webpack-env": "1.18.8" + "@types/webpack-env": "1.18.8", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*" } } diff --git a/build-tests-samples/heft-webpack-basic-tutorial/.eslintrc.js b/build-tests-samples/heft-webpack-basic-tutorial/.eslintrc.js deleted file mode 100644 index 48218299439..00000000000 --- a/build-tests-samples/heft-webpack-basic-tutorial/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app', 'local-eslint-config/mixins/react'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js b/build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js new file mode 100644 index 00000000000..e5eaf3c624a --- /dev/null +++ b/build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [ + ...webAppProfile, + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-samples/heft-webpack-basic-tutorial/package.json b/build-tests-samples/heft-webpack-basic-tutorial/package.json index 089e3f9b574..4594196400a 100644 --- a/build-tests-samples/heft-webpack-basic-tutorial/package.json +++ b/build-tests-samples/heft-webpack-basic-tutorial/package.json @@ -15,19 +15,19 @@ "tslib": "~2.3.1" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@rushstack/heft-webpack5-plugin": "workspace:*", "@rushstack/heft": "workspace:*", "@types/heft-jest": "1.0.1", - "@types/react-dom": "17.0.25", "@types/react": "17.0.74", + "@types/react-dom": "17.0.25", "@types/webpack-env": "1.18.8", "css-loader": "~6.6.0", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "html-webpack-plugin": "~5.5.0", + "local-eslint-config": "workspace:*", "source-map-loader": "~3.0.1", "style-loader": "~3.3.1", "typescript": "~5.8.2", diff --git a/build-tests-subspace/rush-lib-test/.eslintrc.js b/build-tests-subspace/rush-lib-test/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests-subspace/rush-lib-test/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-subspace/rush-lib-test/eslint.config.js b/build-tests-subspace/rush-lib-test/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests-subspace/rush-lib-test/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-subspace/rush-lib-test/package.json b/build-tests-subspace/rush-lib-test/package.json index f61769898f5..b622838bef8 100644 --- a/build-tests-subspace/rush-lib-test/package.json +++ b/build-tests-subspace/rush-lib-test/package.json @@ -16,16 +16,13 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "dependenciesMeta": { "@microsoft/rush-lib": { "injected": true }, - "@rushstack/eslint-config": { - "injected": true - }, "@rushstack/terminal": { "injected": true }, diff --git a/build-tests-subspace/rush-sdk-test/.eslintrc.js b/build-tests-subspace/rush-sdk-test/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests-subspace/rush-sdk-test/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-subspace/rush-sdk-test/eslint.config.js b/build-tests-subspace/rush-sdk-test/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests-subspace/rush-sdk-test/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-subspace/rush-sdk-test/package.json b/build-tests-subspace/rush-sdk-test/package.json index 4883f695ebf..cbddd0f8b80 100644 --- a/build-tests-subspace/rush-sdk-test/package.json +++ b/build-tests-subspace/rush-sdk-test/package.json @@ -16,16 +16,13 @@ "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "dependenciesMeta": { "@microsoft/rush-lib": { "injected": true }, - "@rushstack/eslint-config": { - "injected": true - }, "@rushstack/rush-sdk": { "injected": true }, diff --git a/build-tests-subspace/typescript-newest-test/.eslintrc.js b/build-tests-subspace/typescript-newest-test/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests-subspace/typescript-newest-test/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-subspace/typescript-newest-test/eslint.config.js b/build-tests-subspace/typescript-newest-test/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests-subspace/typescript-newest-test/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-subspace/typescript-newest-test/package.json b/build-tests-subspace/typescript-newest-test/package.json index 5d6837e52b9..bf9ef7a48f3 100644 --- a/build-tests-subspace/typescript-newest-test/package.json +++ b/build-tests-subspace/typescript-newest-test/package.json @@ -10,16 +10,12 @@ "_phase:build": "heft run --only build -- --clean" }, "devDependencies": { - "@rushstack/eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "typescript": "~5.8.2" }, "dependenciesMeta": { - "@rushstack/eslint-config": { - "injected": true - }, "@rushstack/heft": { "injected": true }, diff --git a/build-tests-subspace/typescript-v4-test/.eslintrc.js b/build-tests-subspace/typescript-v4-test/.eslintrc.js deleted file mode 100644 index 60160b354c4..00000000000 --- a/build-tests-subspace/typescript-v4-test/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('@rushstack/eslint-config/patch/modern-module-resolution'); - -module.exports = { - extends: ['@rushstack/eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests-subspace/typescript-v4-test/eslint.config.js b/build-tests-subspace/typescript-v4-test/eslint.config.js new file mode 100644 index 00000000000..20dead69438 --- /dev/null +++ b/build-tests-subspace/typescript-v4-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests-subspace/typescript-v4-test/package.json b/build-tests-subspace/typescript-v4-test/package.json index 05a3f00e905..f4b21f5caf8 100644 --- a/build-tests-subspace/typescript-v4-test/package.json +++ b/build-tests-subspace/typescript-v4-test/package.json @@ -16,7 +16,7 @@ "@rushstack/heft-typescript-plugin": "workspace:*", "typescript": "~4.9.5", "tslint": "~5.20.1", - "eslint": "~8.57.0" + "eslint": "~9.25.1" }, "dependenciesMeta": { "@rushstack/eslint-config": { diff --git a/build-tests/api-documenter-scenarios/.eslintrc.js b/build-tests/api-documenter-scenarios/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests/api-documenter-scenarios/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/api-documenter-scenarios/eslint.config.js b/build-tests/api-documenter-scenarios/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests/api-documenter-scenarios/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/api-documenter-scenarios/package.json b/build-tests/api-documenter-scenarios/package.json index 2b51b1983cd..20e6b1af0e5 100644 --- a/build-tests/api-documenter-scenarios/package.json +++ b/build-tests/api-documenter-scenarios/package.json @@ -13,6 +13,7 @@ "@microsoft/api-extractor": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "run-scenarios-helpers": "workspace:*" } diff --git a/build-tests/api-documenter-test/.eslintrc.js b/build-tests/api-documenter-test/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests/api-documenter-test/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/api-documenter-test/eslint.config.js b/build-tests/api-documenter-test/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests/api-documenter-test/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/api-documenter-test/package.json b/build-tests/api-documenter-test/package.json index 8a5b774f4ba..d388605334e 100644 --- a/build-tests/api-documenter-test/package.json +++ b/build-tests/api-documenter-test/package.json @@ -16,6 +16,7 @@ "@microsoft/api-extractor": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/build-tests/eslint-7-11-test/.eslintrc.js b/build-tests/eslint-7-11-test/.eslintrc.js index fd14b3536fe..00f91351897 100644 --- a/build-tests/eslint-7-11-test/.eslintrc.js +++ b/build-tests/eslint-7-11-test/.eslintrc.js @@ -1,7 +1,7 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +require('@rushstack/eslint-config/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('@rushstack/eslint-config/patch/custom-config-package-names'); module.exports = { extends: [ diff --git a/build-tests/eslint-7-7-test/.eslintrc.js b/build-tests/eslint-7-7-test/.eslintrc.js index fd14b3536fe..00f91351897 100644 --- a/build-tests/eslint-7-7-test/.eslintrc.js +++ b/build-tests/eslint-7-7-test/.eslintrc.js @@ -1,7 +1,7 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +require('@rushstack/eslint-config/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('@rushstack/eslint-config/patch/custom-config-package-names'); module.exports = { extends: [ diff --git a/build-tests/eslint-7-test/.eslintrc.js b/build-tests/eslint-7-test/.eslintrc.js index fd14b3536fe..00f91351897 100644 --- a/build-tests/eslint-7-test/.eslintrc.js +++ b/build-tests/eslint-7-test/.eslintrc.js @@ -1,7 +1,7 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +require('@rushstack/eslint-config/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('@rushstack/eslint-config/patch/custom-config-package-names'); module.exports = { extends: [ diff --git a/build-tests/eslint-8-test/.eslintrc.js b/build-tests/eslint-8-test/.eslintrc.js index f9f01a3a727..177da749b07 100644 --- a/build-tests/eslint-8-test/.eslintrc.js +++ b/build-tests/eslint-8-test/.eslintrc.js @@ -1,12 +1,12 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +require('@rushstack/eslint-config/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('@rushstack/eslint-config/patch/custom-config-package-names'); 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-8-test/package.json b/build-tests/eslint-8-test/package.json index a6ea853e71c..c82be77fdce 100644 --- a/build-tests/eslint-8-test/package.json +++ b/build-tests/eslint-8-test/package.json @@ -10,11 +10,12 @@ "_phase:build": "heft run --only build -- --clean" }, "devDependencies": { + "@rushstack/eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", "@types/node": "20.17.19", - "@typescript-eslint/parser": "~8.26.1", + "@typescript-eslint/parser": "~8.31.0", "eslint": "~8.57.0", + "local-node-rig": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests/eslint-9-test/README.md b/build-tests/eslint-9-test/README.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/build-tests/eslint-9-test/config/rig.json b/build-tests/eslint-9-test/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/build-tests/eslint-9-test/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-9-test/eslint.config.js b/build-tests/eslint-9-test/eslint.config.js new file mode 100644 index 00000000000..d86d5e04d6c --- /dev/null +++ b/build-tests/eslint-9-test/eslint.config.js @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const typescriptEslintParser = require('@typescript-eslint/parser'); +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + /** + * 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 + */ + parser: typescriptEslintParser, + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/eslint-9-test/package.json b/build-tests/eslint-9-test/package.json new file mode 100644 index 00000000000..16e74f8f338 --- /dev/null +++ b/build-tests/eslint-9-test/package.json @@ -0,0 +1,20 @@ +{ + "name": "eslint-9-test", + "description": "This project contains a build test to validate ESLint 9 compatibility with the latest version of @rushstack/eslint-config (and by extension, the ESLint plugin)", + "version": "1.0.0", + "private": true, + "main": "lib/index.js", + "license": "MIT", + "scripts": { + "build": "heft build --clean", + "_phase:build": "heft run --only build -- --clean" + }, + "devDependencies": { + "@rushstack/heft": "workspace:*", + "local-node-rig": "workspace:*", + "@types/node": "20.17.19", + "@typescript-eslint/parser": "~8.31.0", + "eslint": "~9.25.1", + "typescript": "~5.8.2" + } +} diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js b/build-tests/eslint-9-test/src/index.ts similarity index 63% rename from rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js rename to build-tests/eslint-9-test/src/index.ts index 48a832eef64..428f8caba4f 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js +++ b/build-tests/eslint-9-test/src/index.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/tsdoc'] -}; +export class Foo { + private _bar: string = 'bar'; + public baz: string = this._bar; +} diff --git a/build-tests/eslint-9-test/tsconfig.json b/build-tests/eslint-9-test/tsconfig.json new file mode 100644 index 00000000000..8a46ac2445e --- /dev/null +++ b/build-tests/eslint-9-test/tsconfig.json @@ -0,0 +1,24 @@ +{ + "$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": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["node_modules", "lib"] +} diff --git a/build-tests/eslint-bulk-suppressions-test-flat/build.js b/build-tests/eslint-bulk-suppressions-test-flat/build.js new file mode 100644 index 00000000000..b51b460c3aa --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/build.js @@ -0,0 +1,108 @@ +// 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 { + 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']; + +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-flat/client/.eslint-bulk-suppressions-9.25.1.json b/build-tests/eslint-bulk-suppressions-test-flat/client/.eslint-bulk-suppressions-9.25.1.json new file mode 100644 index 00000000000..070dbc8562a --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/client/.eslint-bulk-suppressions-9.25.1.json @@ -0,0 +1,149 @@ +{ + "suppressions": [ + { + "file": "src/index.ts", + "scopeId": ".", + "rule": "prefer-const" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleClass", + "rule": "@typescript-eslint/no-wrapper-object-types" + }, + { + "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/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "@typescript-eslint/explicit-member-accessibility" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "@typescript-eslint/no-wrapper-object-types" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "prefer-const" + }, + { + "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/explicit-function-return-type" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleFunction", + "rule": "@typescript-eslint/no-wrapper-object-types" + }, + { + "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": ".exampleFunction", + "rule": "no-unused-expressions" + }, + { + "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-flat/client/eslint.config.js b/build-tests/eslint-bulk-suppressions-test-flat/client/eslint.config.js new file mode 100644 index 00000000000..6753205e3c4 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/client/eslint.config.js @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +require('local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions'); + +const typescriptEslintParser = require('@typescript-eslint/parser'); +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + { + ignores: ['.eslintrc.js'] + }, + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parser: typescriptEslintParser, + parserOptions: { + project: '../tsconfig.json', + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/eslint-bulk-suppressions-test-flat/client/src/index.ts b/build-tests/eslint-bulk-suppressions-test-flat/client/src/index.ts new file mode 100644 index 00000000000..570229800d8 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/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-flat/config/rig.json b/build-tests/eslint-bulk-suppressions-test-flat/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/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-flat/package.json b/build-tests/eslint-bulk-suppressions-test-flat/package.json new file mode 100644 index 00000000000..3772008549d --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/package.json @@ -0,0 +1,19 @@ +{ + "name": "eslint-bulk-suppressions-test-flat", + "description": "Sample code to test eslint bulk suppressions with flat configs", + "version": "1.0.0", + "private": true, + "scripts": { + "_phase:build": "node build.js" + }, + "devDependencies": { + "@rushstack/eslint-bulk": "workspace:*", + "@rushstack/eslint-patch": "workspace:*", + "@rushstack/heft": "workspace:*", + "@rushstack/node-core-library": "workspace:*", + "@typescript-eslint/parser": "~8.31.0", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*", + "typescript": "~5.8.2" + } +} diff --git a/build-tests/eslint-bulk-suppressions-test-flat/server/.eslint-bulk-suppressions-9.25.1.json b/build-tests/eslint-bulk-suppressions-test-flat/server/.eslint-bulk-suppressions-9.25.1.json new file mode 100644 index 00000000000..5d0e82b5147 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/server/.eslint-bulk-suppressions-9.25.1.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/consistent-type-definitions" + }, + { + "file": "src/index.ts", + "scopeId": ".ExampleObjectType", + "rule": "@typescript-eslint/no-wrapper-object-types" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleObject2", + "rule": "@typescript-eslint/typedef" + } + ] +} diff --git a/build-tests/eslint-bulk-suppressions-test-flat/server/eslint.config.js b/build-tests/eslint-bulk-suppressions-test-flat/server/eslint.config.js new file mode 100644 index 00000000000..6753205e3c4 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/server/eslint.config.js @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +require('local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions'); + +const typescriptEslintParser = require('@typescript-eslint/parser'); +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + { + ignores: ['.eslintrc.js'] + }, + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parser: typescriptEslintParser, + parserOptions: { + project: '../tsconfig.json', + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/eslint-bulk-suppressions-test-flat/server/src/index.ts b/build-tests/eslint-bulk-suppressions-test-flat/server/src/index.ts new file mode 100644 index 00000000000..34328698008 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/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-flat/tsconfig.json b/build-tests/eslint-bulk-suppressions-test-flat/tsconfig.json new file mode 100644 index 00000000000..174bda15d5c --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/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-legacy/client/.eslintrc.js b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslintrc.js index 31613944071..4cc74b0570a 100644 --- a/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslintrc.js +++ b/build-tests/eslint-bulk-suppressions-test-legacy/client/.eslintrc.js @@ -1,8 +1,7 @@ // 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'); +require('@rushstack/eslint-config/patch/modern-module-resolution'); +require('@rushstack/eslint-config/patch/custom-config-package-names'); +require('@rushstack/eslint-config/patch/eslint-bulk-suppressions'); module.exports = { extends: [ diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/package.json b/build-tests/eslint-bulk-suppressions-test-legacy/package.json index 6ef483f640f..18db59dd534 100644 --- a/build-tests/eslint-bulk-suppressions-test-legacy/package.json +++ b/build-tests/eslint-bulk-suppressions-test-legacy/package.json @@ -12,7 +12,7 @@ "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", - "@typescript-eslint/parser": "~8.26.1", + "@typescript-eslint/parser": "~8.31.0", "eslint": "~8.57.0", "eslint-8.23": "npm:eslint@8.23.1", "eslint-oldest": "npm:eslint@8.6.0", diff --git a/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslintrc.js b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslintrc.js index 31613944071..4cc74b0570a 100644 --- a/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslintrc.js +++ b/build-tests/eslint-bulk-suppressions-test-legacy/server/.eslintrc.js @@ -1,8 +1,7 @@ // 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'); +require('@rushstack/eslint-config/patch/modern-module-resolution'); +require('@rushstack/eslint-config/patch/custom-config-package-names'); +require('@rushstack/eslint-config/patch/eslint-bulk-suppressions'); module.exports = { extends: [ 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 9b2a80a0210..8852d8bc68f 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 @@ -70,6 +70,11 @@ "scopeId": ".exampleAnonymousClass.exampleSetGet", "rule": "@typescript-eslint/no-wrapper-object-types" }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "prefer-const" + }, { "file": "src/index.ts", "scopeId": ".exampleArrowFunction", diff --git a/build-tests/eslint-bulk-suppressions-test/client/.eslintrc.js b/build-tests/eslint-bulk-suppressions-test/client/.eslintrc.js index 4236cb45dc2..3d3ed2f7929 100644 --- a/build-tests/eslint-bulk-suppressions-test/client/.eslintrc.js +++ b/build-tests/eslint-bulk-suppressions-test/client/.eslintrc.js @@ -1,13 +1,13 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +require('@rushstack/eslint-config/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'); +require('@rushstack/eslint-config/patch/custom-config-package-names'); +require('@rushstack/eslint-config/patch/eslint-bulk-suppressions'); 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' ], ignorePatterns: ['.eslintrc.js'], diff --git a/build-tests/eslint-bulk-suppressions-test/package.json b/build-tests/eslint-bulk-suppressions-test/package.json index 118de1ce011..95c02ffe209 100644 --- a/build-tests/eslint-bulk-suppressions-test/package.json +++ b/build-tests/eslint-bulk-suppressions-test/package.json @@ -8,10 +8,11 @@ }, "devDependencies": { "@rushstack/eslint-bulk": "workspace:*", + "@rushstack/eslint-config": "workspace:*", "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", - "@typescript-eslint/parser": "~8.26.1", + "@typescript-eslint/parser": "~8.31.0", "eslint": "~8.57.0", "local-node-rig": "workspace:*", "typescript": "~5.8.2" diff --git a/build-tests/eslint-bulk-suppressions-test/server/.eslintrc.js b/build-tests/eslint-bulk-suppressions-test/server/.eslintrc.js index 4236cb45dc2..3d3ed2f7929 100644 --- a/build-tests/eslint-bulk-suppressions-test/server/.eslintrc.js +++ b/build-tests/eslint-bulk-suppressions-test/server/.eslintrc.js @@ -1,13 +1,13 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution'); +require('@rushstack/eslint-config/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'); +require('@rushstack/eslint-config/patch/custom-config-package-names'); +require('@rushstack/eslint-config/patch/eslint-bulk-suppressions'); 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' ], ignorePatterns: ['.eslintrc.js'], diff --git a/build-tests/heft-example-lifecycle-plugin/.eslintrc.js b/build-tests/heft-example-lifecycle-plugin/.eslintrc.js deleted file mode 100644 index 066bf07ecc8..00000000000 --- a/build-tests/heft-example-lifecycle-plugin/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool', 'local-eslint-config/mixins/friendly-locals'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-example-lifecycle-plugin/eslint.config.js b/build-tests/heft-example-lifecycle-plugin/eslint.config.js new file mode 100644 index 00000000000..a05a76dc048 --- /dev/null +++ b/build-tests/heft-example-lifecycle-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-example-lifecycle-plugin/package.json b/build-tests/heft-example-lifecycle-plugin/package.json index a144ef552af..d5893a0c04a 100644 --- a/build-tests/heft-example-lifecycle-plugin/package.json +++ b/build-tests/heft-example-lifecycle-plugin/package.json @@ -12,12 +12,12 @@ }, "dependencies": {}, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests/heft-example-plugin-01/.eslintrc.js b/build-tests/heft-example-plugin-01/.eslintrc.js deleted file mode 100644 index 066bf07ecc8..00000000000 --- a/build-tests/heft-example-plugin-01/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool', 'local-eslint-config/mixins/friendly-locals'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-example-plugin-01/eslint.config.js b/build-tests/heft-example-plugin-01/eslint.config.js new file mode 100644 index 00000000000..a05a76dc048 --- /dev/null +++ b/build-tests/heft-example-plugin-01/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-example-plugin-01/package.json b/build-tests/heft-example-plugin-01/package.json index 42492430078..45eb9eeab7d 100644 --- a/build-tests/heft-example-plugin-01/package.json +++ b/build-tests/heft-example-plugin-01/package.json @@ -14,13 +14,13 @@ "tapable": "1.1.3" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/node": "20.17.19", "@types/tapable": "1.0.6", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests/heft-example-plugin-02/.eslintrc.js b/build-tests/heft-example-plugin-02/.eslintrc.js deleted file mode 100644 index 066bf07ecc8..00000000000 --- a/build-tests/heft-example-plugin-02/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool', 'local-eslint-config/mixins/friendly-locals'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-example-plugin-02/eslint.config.js b/build-tests/heft-example-plugin-02/eslint.config.js new file mode 100644 index 00000000000..a05a76dc048 --- /dev/null +++ b/build-tests/heft-example-plugin-02/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-example-plugin-02/package.json b/build-tests/heft-example-plugin-02/package.json index 2000761bd24..7312ca19e21 100644 --- a/build-tests/heft-example-plugin-02/package.json +++ b/build-tests/heft-example-plugin-02/package.json @@ -19,13 +19,13 @@ } }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "heft-example-plugin-01": "workspace:*", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests/heft-fastify-test/.eslintrc.js b/build-tests/heft-fastify-test/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests/heft-fastify-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-fastify-test/eslint.config.js b/build-tests/heft-fastify-test/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests/heft-fastify-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-fastify-test/package.json b/build-tests/heft-fastify-test/package.json index b7b3334ef36..d2a74f90a48 100644 --- a/build-tests/heft-fastify-test/package.json +++ b/build-tests/heft-fastify-test/package.json @@ -12,13 +12,13 @@ "_phase:build": "heft run --only build -- --clean" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" }, "dependencies": { diff --git a/build-tests/heft-jest-preset-test/.eslintrc.js b/build-tests/heft-jest-preset-test/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests/heft-jest-preset-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-jest-preset-test/eslint.config.js b/build-tests/heft-jest-preset-test/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests/heft-jest-preset-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-jest-preset-test/package.json b/build-tests/heft-jest-preset-test/package.json index 198b9e21ac1..ef716c3a6ba 100644 --- a/build-tests/heft-jest-preset-test/package.json +++ b/build-tests/heft-jest-preset-test/package.json @@ -11,13 +11,13 @@ }, "devDependencies": { "@jest/types": "29.5.0", - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests/heft-jest-reporters-test/.eslintrc.js b/build-tests/heft-jest-reporters-test/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests/heft-jest-reporters-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-jest-reporters-test/eslint.config.js b/build-tests/heft-jest-reporters-test/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests/heft-jest-reporters-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-jest-reporters-test/package.json b/build-tests/heft-jest-reporters-test/package.json index ac7115272f1..3aedcf74354 100644 --- a/build-tests/heft-jest-reporters-test/package.json +++ b/build-tests/heft-jest-reporters-test/package.json @@ -12,14 +12,14 @@ "devDependencies": { "@jest/reporters": "~29.5.0", "@jest/types": "29.5.0", - "@types/node": "20.17.19", - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", - "eslint": "~8.57.0", + "@types/node": "20.17.19", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests/heft-node-everything-esm-module-test/.eslintrc.cjs b/build-tests/heft-node-everything-esm-module-test/.eslintrc.cjs deleted file mode 100644 index fbc19224b3f..00000000000 --- a/build-tests/heft-node-everything-esm-module-test/.eslintrc.cjs +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-node-everything-esm-module-test/eslint.config.cjs b/build-tests/heft-node-everything-esm-module-test/eslint.config.cjs new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests/heft-node-everything-esm-module-test/eslint.config.cjs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-node-everything-esm-module-test/package.json b/build-tests/heft-node-everything-esm-module-test/package.json index a40220ceb07..899208ac63e 100644 --- a/build-tests/heft-node-everything-esm-module-test/package.json +++ b/build-tests/heft-node-everything-esm-module-test/package.json @@ -13,7 +13,6 @@ }, "devDependencies": { "@microsoft/api-extractor": "workspace:*", - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-api-extractor-plugin": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", @@ -21,9 +20,10 @@ "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "heft-example-plugin-01": "workspace:*", "heft-example-plugin-02": "workspace:*", + "local-eslint-config": "workspace:*", "tslint": "~5.20.1", "typescript": "~5.8.2" } diff --git a/build-tests/heft-node-everything-test/.eslintrc.js b/build-tests/heft-node-everything-test/.eslintrc.js deleted file mode 100644 index 8eedbcbabf4..00000000000 --- a/build-tests/heft-node-everything-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-node-everything-test/eslint.config.js b/build-tests/heft-node-everything-test/eslint.config.js new file mode 100644 index 00000000000..3d80b5cc649 --- /dev/null +++ b/build-tests/heft-node-everything-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-node-everything-test/package.json b/build-tests/heft-node-everything-test/package.json index 90e7090f6f0..7e2345aef46 100644 --- a/build-tests/heft-node-everything-test/package.json +++ b/build-tests/heft-node-everything-test/package.json @@ -14,7 +14,6 @@ }, "devDependencies": { "@microsoft/api-extractor": "workspace:*", - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-api-extractor-plugin": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", @@ -22,10 +21,11 @@ "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "heft-example-lifecycle-plugin": "workspace:*", "heft-example-plugin-01": "workspace:*", "heft-example-plugin-02": "workspace:*", + "local-eslint-config": "workspace:*", "tslint": "~5.20.1", "typescript": "~5.8.2" } diff --git a/build-tests/heft-parameter-plugin/.eslintrc.js b/build-tests/heft-parameter-plugin/.eslintrc.js deleted file mode 100644 index 066bf07ecc8..00000000000 --- a/build-tests/heft-parameter-plugin/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool', 'local-eslint-config/mixins/friendly-locals'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-parameter-plugin/eslint.config.js b/build-tests/heft-parameter-plugin/eslint.config.js new file mode 100644 index 00000000000..a05a76dc048 --- /dev/null +++ b/build-tests/heft-parameter-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-parameter-plugin/package.json b/build-tests/heft-parameter-plugin/package.json index f54f56b38a2..7ddda71f5f7 100644 --- a/build-tests/heft-parameter-plugin/package.json +++ b/build-tests/heft-parameter-plugin/package.json @@ -10,12 +10,12 @@ "_phase:build": "heft run --only build -- --clean" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" }, "dependencies": { diff --git a/build-tests/heft-sass-test/.eslintrc.js b/build-tests/heft-sass-test/.eslintrc.js deleted file mode 100644 index 48218299439..00000000000 --- a/build-tests/heft-sass-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app', 'local-eslint-config/mixins/react'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-sass-test/eslint.config.js b/build-tests/heft-sass-test/eslint.config.js new file mode 100644 index 00000000000..e5eaf3c624a --- /dev/null +++ b/build-tests/heft-sass-test/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [ + ...webAppProfile, + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-sass-test/package.json b/build-tests/heft-sass-test/package.json index 2c95af01226..e315c590c8d 100644 --- a/build-tests/heft-sass-test/package.json +++ b/build-tests/heft-sass-test/package.json @@ -26,7 +26,7 @@ "@types/webpack-env": "1.18.8", "autoprefixer": "~10.4.2", "css-loader": "~5.2.7", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "html-webpack-plugin": "~4.5.2", "postcss-loader": "~4.1.0", "postcss": "~8.4.6", diff --git a/build-tests/heft-sass-test/src/index.tsx b/build-tests/heft-sass-test/src/index.tsx index a9e29e0b029..cfd1b429ec2 100644 --- a/build-tests/heft-sass-test/src/index.tsx +++ b/build-tests/heft-sass-test/src/index.tsx @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -// eslint-disable-next-line @typescript-eslint/no-unused-vars import * as React from 'react'; import * as ReactDOM from 'react-dom'; import { ExampleApp } from './ExampleApp'; diff --git a/build-tests/heft-swc-test/.eslintrc.js b/build-tests/heft-swc-test/.eslintrc.js deleted file mode 100644 index 51cf9a4cb28..00000000000 --- a/build-tests/heft-swc-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-swc-test/eslint.config.js b/build-tests/heft-swc-test/eslint.config.js new file mode 100644 index 00000000000..5a9df48909b --- /dev/null +++ b/build-tests/heft-swc-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = [ + ...webAppProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-swc-test/package.json b/build-tests/heft-swc-test/package.json index 221e0d7cedb..2bc2d1d338a 100644 --- a/build-tests/heft-swc-test/package.json +++ b/build-tests/heft-swc-test/package.json @@ -11,7 +11,6 @@ "_phase:test": "heft run --only test -- --clean" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-isolated-typescript-transpile-plugin": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", @@ -19,7 +18,8 @@ "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", "@types/webpack-env": "1.18.8", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "typescript": "~5.8.2" } } diff --git a/build-tests/heft-typescript-composite-test/.eslintrc.js b/build-tests/heft-typescript-composite-test/.eslintrc.js deleted file mode 100644 index 5465bfac917..00000000000 --- a/build-tests/heft-typescript-composite-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app'], - parserOptions: { tsconfigRootDir: __dirname, project: './tsconfig-eslint.json' } -}; diff --git a/build-tests/heft-typescript-composite-test/eslint.config.js b/build-tests/heft-typescript-composite-test/eslint.config.js new file mode 100644 index 00000000000..0b09ea9f25b --- /dev/null +++ b/build-tests/heft-typescript-composite-test/eslint.config.js @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = [ + ...webAppProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname, + project: './tsconfig-eslint.json' + } + } + } +]; diff --git a/build-tests/heft-typescript-composite-test/package.json b/build-tests/heft-typescript-composite-test/package.json index 8576ab51137..38d40494be9 100644 --- a/build-tests/heft-typescript-composite-test/package.json +++ b/build-tests/heft-typescript-composite-test/package.json @@ -10,7 +10,6 @@ "_phase:test": "heft run --only test -- --clean" }, "devDependencies": { - "local-eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/heft-jest-plugin": "workspace:*", "@rushstack/heft-lint-plugin": "workspace:*", @@ -18,7 +17,8 @@ "@types/heft-jest": "1.0.1", "@types/jest": "29.2.5", "@types/webpack-env": "1.18.8", - "eslint": "~8.57.0", + "eslint": "~9.25.1", + "local-eslint-config": "workspace:*", "tslint": "~5.20.1", "typescript": "~5.8.2" } diff --git a/build-tests/heft-web-rig-library-test/eslint.config.js b/build-tests/heft-web-rig-library-test/eslint.config.js new file mode 100644 index 00000000000..2c2f8d27066 --- /dev/null +++ b/build-tests/heft-web-rig-library-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('@rushstack/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app'); + +module.exports = [ + ...webAppProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-web-rig-library-test/package.json b/build-tests/heft-web-rig-library-test/package.json index 7b5f3a08559..a8afe3704d5 100644 --- a/build-tests/heft-web-rig-library-test/package.json +++ b/build-tests/heft-web-rig-library-test/package.json @@ -12,6 +12,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", - "@rushstack/heft-web-rig": "workspace:*" + "@rushstack/heft-web-rig": "workspace:*", + "eslint": "~9.25.1" } } diff --git a/build-tests/heft-webpack4-everything-test/.eslintrc.js b/build-tests/heft-webpack4-everything-test/.eslintrc.js deleted file mode 100644 index 51cf9a4cb28..00000000000 --- a/build-tests/heft-webpack4-everything-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-webpack4-everything-test/eslint.config.js b/build-tests/heft-webpack4-everything-test/eslint.config.js new file mode 100644 index 00000000000..5a9df48909b --- /dev/null +++ b/build-tests/heft-webpack4-everything-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = [ + ...webAppProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-webpack4-everything-test/package.json b/build-tests/heft-webpack4-everything-test/package.json index ae80c8506e4..aa3bcea81aa 100644 --- a/build-tests/heft-webpack4-everything-test/package.json +++ b/build-tests/heft-webpack4-everything-test/package.json @@ -22,7 +22,7 @@ "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", "@types/webpack-env": "1.18.8", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "file-loader": "~6.0.0", "local-eslint-config": "workspace:*", "source-map-loader": "~1.1.3", diff --git a/build-tests/heft-webpack5-everything-test/.eslintrc.js b/build-tests/heft-webpack5-everything-test/.eslintrc.js deleted file mode 100644 index 51cf9a4cb28..00000000000 --- a/build-tests/heft-webpack5-everything-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: ['local-eslint-config/profile/web-app'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/heft-webpack5-everything-test/eslint.config.js b/build-tests/heft-webpack5-everything-test/eslint.config.js new file mode 100644 index 00000000000..5a9df48909b --- /dev/null +++ b/build-tests/heft-webpack5-everything-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = [ + ...webAppProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/heft-webpack5-everything-test/package.json b/build-tests/heft-webpack5-everything-test/package.json index 6b6ca0a583e..8e8b5cc7c0d 100644 --- a/build-tests/heft-webpack5-everything-test/package.json +++ b/build-tests/heft-webpack5-everything-test/package.json @@ -25,7 +25,7 @@ "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", "@types/webpack-env": "1.18.8", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "html-webpack-plugin": "~5.5.0", "local-eslint-config": "workspace:*", "source-map-loader": "~3.0.1", diff --git a/build-tests/localization-plugin-test-01/.eslintrc.js b/build-tests/localization-plugin-test-01/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests/localization-plugin-test-01/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/localization-plugin-test-01/eslint.config.js b/build-tests/localization-plugin-test-01/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests/localization-plugin-test-01/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/localization-plugin-test-01/package.json b/build-tests/localization-plugin-test-01/package.json index b2cbf46fce0..b9c48240b94 100644 --- a/build-tests/localization-plugin-test-01/package.json +++ b/build-tests/localization-plugin-test-01/package.json @@ -9,16 +9,17 @@ "_phase:build": "heft run --only build -- --clean" }, "dependencies": { + "@rushstack/heft": "workspace:*", + "@rushstack/heft-webpack4-plugin": "workspace:*", + "@rushstack/set-webpack-public-path-plugin": "^4.1.16", "@rushstack/webpack4-localization-plugin": "workspace:*", "@rushstack/webpack4-module-minifier-plugin": "workspace:*", - "@rushstack/set-webpack-public-path-plugin": "^4.1.16", "@types/webpack-env": "1.18.8", + "eslint": "~9.25.1", "html-webpack-plugin": "~4.5.2", + "local-node-rig": "workspace:*", "webpack": "~4.47.0", "webpack-bundle-analyzer": "~4.5.0", - "webpack-dev-server": "~4.9.3", - "@rushstack/heft": "workspace:*", - "@rushstack/heft-webpack4-plugin": "workspace:*", - "local-node-rig": "workspace:*" + "webpack-dev-server": "~4.9.3" } } diff --git a/build-tests/localization-plugin-test-02/.eslintrc.js b/build-tests/localization-plugin-test-02/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests/localization-plugin-test-02/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/localization-plugin-test-02/eslint.config.js b/build-tests/localization-plugin-test-02/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests/localization-plugin-test-02/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/localization-plugin-test-02/package.json b/build-tests/localization-plugin-test-02/package.json index 1ec5ffdba3b..93cc403bb99 100644 --- a/build-tests/localization-plugin-test-02/package.json +++ b/build-tests/localization-plugin-test-02/package.json @@ -9,19 +9,20 @@ "_phase:build": "heft run --only build -- --clean" }, "dependencies": { + "@rushstack/heft": "workspace:*", "@rushstack/heft-localization-typings-plugin": "workspace:*", "@rushstack/heft-webpack4-plugin": "workspace:*", - "@rushstack/heft": "workspace:*", "@rushstack/set-webpack-public-path-plugin": "^4.1.16", "@rushstack/webpack4-localization-plugin": "workspace:*", "@rushstack/webpack4-module-minifier-plugin": "workspace:*", "@types/lodash": "4.14.116", "@types/webpack-env": "1.18.8", + "eslint": "~9.25.1", "html-webpack-plugin": "~4.5.2", "lodash": "~4.17.15", - "webpack-bundle-analyzer": "~4.5.0", - "webpack-dev-server": "~4.9.3", + "local-node-rig": "workspace:*", "webpack": "~4.47.0", - "local-node-rig": "workspace:*" + "webpack-bundle-analyzer": "~4.5.0", + "webpack-dev-server": "~4.9.3" } } diff --git a/build-tests/localization-plugin-test-03/.eslintrc.js b/build-tests/localization-plugin-test-03/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests/localization-plugin-test-03/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/localization-plugin-test-03/eslint.config.js b/build-tests/localization-plugin-test-03/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests/localization-plugin-test-03/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/localization-plugin-test-03/package.json b/build-tests/localization-plugin-test-03/package.json index eb9d386d2a4..84b5d7165c7 100644 --- a/build-tests/localization-plugin-test-03/package.json +++ b/build-tests/localization-plugin-test-03/package.json @@ -9,19 +9,20 @@ "_phase:build": "heft run --only build -- --clean" }, "dependencies": { - "@rushstack/heft-webpack4-plugin": "workspace:*", "@rushstack/heft": "workspace:*", + "@rushstack/heft-webpack4-plugin": "workspace:*", "@rushstack/node-core-library": "workspace:*", "@rushstack/set-webpack-public-path-plugin": "^4.1.16", "@rushstack/webpack4-localization-plugin": "workspace:*", "@rushstack/webpack4-module-minifier-plugin": "workspace:*", "@types/webpack-env": "1.18.8", + "eslint": "~9.25.1", "html-webpack-plugin": "~4.5.2", "local-node-rig": "workspace:*", "ts-loader": "6.0.0", "typescript": "~5.8.2", + "webpack": "~4.47.0", "webpack-bundle-analyzer": "~4.5.0", - "webpack-dev-server": "~4.9.3", - "webpack": "~4.47.0" + "webpack-dev-server": "~4.9.3" } } diff --git a/build-tests/run-scenarios-helpers/.eslintrc.js b/build-tests/run-scenarios-helpers/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests/run-scenarios-helpers/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/run-scenarios-helpers/eslint.config.js b/build-tests/run-scenarios-helpers/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests/run-scenarios-helpers/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/run-scenarios-helpers/package.json b/build-tests/run-scenarios-helpers/package.json index 165c1267408..386d4814231 100644 --- a/build-tests/run-scenarios-helpers/package.json +++ b/build-tests/run-scenarios-helpers/package.json @@ -11,6 +11,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "dependencies": { diff --git a/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/.eslintrc.js b/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/.eslintrc.js deleted file mode 100644 index ed50995642d..00000000000 --- a/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// 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'); - -module.exports = { - extends: ['local-node-rig/profiles/default/includes/eslint/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/eslint.config.js b/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/eslint.config.js new file mode 100644 index 00000000000..95db6d06e12 --- /dev/null +++ b/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/package.json b/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/package.json index 916d667e104..6f66a0a97e8 100644 --- a/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/package.json +++ b/build-tests/rush-amazon-s3-build-cache-plugin-integration-test/package.json @@ -13,11 +13,12 @@ "devDependencies": { "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", - "@rushstack/rush-amazon-s3-build-cache-plugin": "workspace:*", "@rushstack/node-core-library": "workspace:*", + "@rushstack/rush-amazon-s3-build-cache-plugin": "workspace:*", "@rushstack/terminal": "workspace:*", "@types/http-proxy": "~1.17.8", "@types/node": "20.17.19", + "eslint": "~9.25.1", "http-proxy": "~1.18.1", "local-node-rig": "workspace:*" } diff --git a/build-tests/rush-lib-declaration-paths-test/.eslintrc.js b/build-tests/rush-lib-declaration-paths-test/.eslintrc.js deleted file mode 100644 index 81f3653248a..00000000000 --- a/build-tests/rush-lib-declaration-paths-test/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - // This project contains only unshipped generated TS code which doesn't contain the copyright header. - 'header/header': 'off' - } - } - ] -}; diff --git a/build-tests/rush-lib-declaration-paths-test/eslint.config.js b/build-tests/rush-lib-declaration-paths-test/eslint.config.js new file mode 100644 index 00000000000..096c66fb598 --- /dev/null +++ b/build-tests/rush-lib-declaration-paths-test/eslint.config.js @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + // This project contains only unshipped generated TS code which doesn't contain the copyright header. + 'header/header': 'off' + } + } +]; diff --git a/build-tests/rush-lib-declaration-paths-test/package.json b/build-tests/rush-lib-declaration-paths-test/package.json index fa03351e74b..6bd4f18640b 100644 --- a/build-tests/rush-lib-declaration-paths-test/package.json +++ b/build-tests/rush-lib-declaration-paths-test/package.json @@ -11,9 +11,10 @@ "@microsoft/rush-lib": "workspace:*" }, "devDependencies": { - "local-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", - "@types/node": "20.17.19" + "@types/node": "20.17.19", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" } } diff --git a/build-tests/rush-lib-declaration-paths-test/scripts/createSrc.js b/build-tests/rush-lib-declaration-paths-test/scripts/createSrc.js index 01bcec568b9..85005b72b2b 100644 --- a/build-tests/rush-lib-declaration-paths-test/scripts/createSrc.js +++ b/build-tests/rush-lib-declaration-paths-test/scripts/createSrc.js @@ -26,7 +26,11 @@ module.exports = { } } - const indexFileLines = []; + const indexFileLines = [ + '// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.', + '// See LICENSE in the project root for license information.', + '' + ]; for await (const dtsPath of collectDtsPaths(`${rushLibPath}/lib`, '@microsoft/rush-lib/lib')) { indexFileLines.push(`import '${dtsPath}';`); } diff --git a/build-tests/rush-project-change-analyzer-test/.eslintrc.js b/build-tests/rush-project-change-analyzer-test/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/build-tests/rush-project-change-analyzer-test/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/rush-project-change-analyzer-test/eslint.config.js b/build-tests/rush-project-change-analyzer-test/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/build-tests/rush-project-change-analyzer-test/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/rush-project-change-analyzer-test/package.json b/build-tests/rush-project-change-analyzer-test/package.json index 0837c197bc4..a82b04b7b62 100644 --- a/build-tests/rush-project-change-analyzer-test/package.json +++ b/build-tests/rush-project-change-analyzer-test/package.json @@ -16,6 +16,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/.eslintrc.js b/build-tests/rush-redis-cobuild-plugin-integration-test/.eslintrc.js deleted file mode 100644 index ed50995642d..00000000000 --- a/build-tests/rush-redis-cobuild-plugin-integration-test/.eslintrc.js +++ /dev/null @@ -1,9 +0,0 @@ -// 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'); - -module.exports = { - extends: ['local-node-rig/profiles/default/includes/eslint/profile/node'], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/eslint.config.js b/build-tests/rush-redis-cobuild-plugin-integration-test/eslint.config.js new file mode 100644 index 00000000000..95db6d06e12 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/eslint.config.js @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); + +module.exports = [ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/build-tests/rush-redis-cobuild-plugin-integration-test/package.json b/build-tests/rush-redis-cobuild-plugin-integration-test/package.json index bff1f9d370d..b4e92eadd5c 100644 --- a/build-tests/rush-redis-cobuild-plugin-integration-test/package.json +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/package.json @@ -12,12 +12,13 @@ "devDependencies": { "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", "@rushstack/node-core-library": "workspace:*", "@rushstack/rush-redis-cobuild-plugin": "workspace:*", "@rushstack/terminal": "workspace:*", "@types/http-proxy": "~1.17.8", "@types/node": "20.17.19", - "http-proxy": "~1.18.1" + "eslint": "~9.25.1", + "http-proxy": "~1.18.1", + "local-node-rig": "workspace:*" } } diff --git a/common/changes/@microsoft/api-documenter/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@microsoft/api-documenter/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..0be303649c0 --- /dev/null +++ b/common/changes/@microsoft/api-documenter/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/api-documenter", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/api-documenter" +} \ No newline at end of file diff --git a/common/changes/@microsoft/api-extractor-model/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@microsoft/api-extractor-model/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..52e967a8e74 --- /dev/null +++ b/common/changes/@microsoft/api-extractor-model/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/api-extractor-model", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/api-extractor-model" +} \ No newline at end of file diff --git a/common/changes/@microsoft/load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@microsoft/load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..3456eae9593 --- /dev/null +++ b/common/changes/@microsoft/load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/load-themed-styles", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/load-themed-styles" +} \ No newline at end of file diff --git a/common/changes/@microsoft/loader-load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@microsoft/loader-load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..23bb9c24d0b --- /dev/null +++ b/common/changes/@microsoft/loader-load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/loader-load-themed-styles", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/loader-load-themed-styles" +} \ No newline at end of file diff --git a/common/changes/@microsoft/rush/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@microsoft/rush/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..bd7ff97cb34 --- /dev/null +++ b/common/changes/@microsoft/rush/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/rush", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/rush" +} \ No newline at end of file diff --git a/common/changes/@microsoft/webpack5-load-themed-styles-loader/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@microsoft/webpack5-load-themed-styles-loader/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..bbed8f9189c --- /dev/null +++ b/common/changes/@microsoft/webpack5-load-themed-styles-loader/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@microsoft/webpack5-load-themed-styles-loader", + "comment": "", + "type": "none" + } + ], + "packageName": "@microsoft/webpack5-load-themed-styles-loader" +} \ No newline at end of file diff --git a/common/changes/@rushstack/cpu-profile-summarizer/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/cpu-profile-summarizer/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..1b90c04c1b4 --- /dev/null +++ b/common/changes/@rushstack/cpu-profile-summarizer/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/cpu-profile-summarizer", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/cpu-profile-summarizer" +} \ No newline at end of file diff --git a/common/changes/@rushstack/debug-certificate-manager/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/debug-certificate-manager/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..bdf32c7b09d --- /dev/null +++ b/common/changes/@rushstack/debug-certificate-manager/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/debug-certificate-manager", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/debug-certificate-manager" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-bulk/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/eslint-bulk/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..145a9198b8d --- /dev/null +++ b/common/changes/@rushstack/eslint-bulk/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-bulk", + "comment": "Update for compatibility with ESLint flat configuration files", + "type": "minor" + } + ], + "packageName": "@rushstack/eslint-bulk" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-config/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/eslint-config/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..dc5110e0994 --- /dev/null +++ b/common/changes/@rushstack/eslint-config/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-config", + "comment": "Add flat config compatible versions of profiles and mixins. These are located under the `/flat/*` path.", + "type": "minor" + } + ], + "packageName": "@rushstack/eslint-config" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..ceefa44d69e --- /dev/null +++ b/common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-patch", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/eslint-patch" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..dedfa84a790 --- /dev/null +++ b/common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-patch", + "comment": "Update for compatibility with ESLint 9", + "type": "minor" + } + ], + "packageName": "@rushstack/eslint-patch" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin-packlets/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/eslint-plugin-packlets/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..ff918c1ad1d --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-packlets/user-danade-UpdateEslint2_2025-05-03-00-43.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-packlets/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/eslint-plugin-packlets/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..78f9b93aa93 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-packlets/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-plugin-packlets", + "comment": "Update for compatibility with ESLint 9", + "type": "minor" + } + ], + "packageName": "@rushstack/eslint-plugin-packlets" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin-security/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/eslint-plugin-security/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..a4477ef1a61 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-security/user-danade-UpdateEslint2_2025-05-03-00-43.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-security/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/eslint-plugin-security/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..9fa38315a53 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin-security/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-plugin-security", + "comment": "Update for compatibility with ESLint 9", + "type": "minor" + } + ], + "packageName": "@rushstack/eslint-plugin-security" +} \ No newline at end of file diff --git a/common/changes/@rushstack/eslint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/eslint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..dcf93469653 --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.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/eslint-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/eslint-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..e1ae4383f0d --- /dev/null +++ b/common/changes/@rushstack/eslint-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/eslint-plugin", + "comment": "Update for compatibility with ESLint 9", + "type": "minor" + } + ], + "packageName": "@rushstack/eslint-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/hashed-folder-copy-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/hashed-folder-copy-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..e8c42a34e96 --- /dev/null +++ b/common/changes/@rushstack/hashed-folder-copy-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/hashed-folder-copy-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/hashed-folder-copy-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-config-file/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/heft-config-file/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..9b24a4fdcca --- /dev/null +++ b/common/changes/@rushstack/heft-config-file/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-config-file", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-config-file" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-dev-cert-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-dev-cert-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..f7935d46bb6 --- /dev/null +++ b/common/changes/@rushstack/heft-dev-cert-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-dev-cert-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-dev-cert-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-isolated-typescript-transpile-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-isolated-typescript-transpile-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..fbd4c12b6b9 --- /dev/null +++ b/common/changes/@rushstack/heft-isolated-typescript-transpile-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-isolated-typescript-transpile-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-isolated-typescript-transpile-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-lint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/heft-lint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..b3c688d8cb9 --- /dev/null +++ b/common/changes/@rushstack/heft-lint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-lint-plugin", + "comment": "Add support for ESLint 9. When using ESLint 9, the configuration will be loaded from `eslint.config.js`, and flat configs will be required by the Heft plugin", + "type": "minor" + } + ], + "packageName": "@rushstack/heft-lint-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-localization-typings-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-localization-typings-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..e3dd3971b44 --- /dev/null +++ b/common/changes/@rushstack/heft-localization-typings-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-localization-typings-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-localization-typings-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-node-rig/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/heft-node-rig/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..3c05be5874b --- /dev/null +++ b/common/changes/@rushstack/heft-node-rig/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-node-rig", + "comment": "Add flat config compatible versions of profiles and mixins for ESLint. These are located under the `profiles/default/includes/eslint/flat/*` path. If you need to remain on ESLint 8, ensure your rig or project consumes ESLint 8, and that you use the legacy configuration files.", + "type": "minor" + } + ], + "packageName": "@rushstack/heft-node-rig" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-sass-load-themed-styles-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-sass-load-themed-styles-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..d07b9f31fb1 --- /dev/null +++ b/common/changes/@rushstack/heft-sass-load-themed-styles-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-sass-load-themed-styles-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-sass-load-themed-styles-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-sass-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-sass-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..501a07dfec7 --- /dev/null +++ b/common/changes/@rushstack/heft-sass-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-sass-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-sass-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-serverless-stack-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-serverless-stack-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..c5594c67a8a --- /dev/null +++ b/common/changes/@rushstack/heft-serverless-stack-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-serverless-stack-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-serverless-stack-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-storybook-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-storybook-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..a46619d0a73 --- /dev/null +++ b/common/changes/@rushstack/heft-storybook-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-storybook-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-storybook-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-web-rig/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-web-rig/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..9e7eb6f9426 --- /dev/null +++ b/common/changes/@rushstack/heft-web-rig/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-web-rig", + "comment": "Add flat config compatible versions of profiles and mixins for ESLint. These are located under the `profiles/default/includes/eslint/flat/*` path. If you need to remain on ESLint 8, ensure your rig or project consumes ESLint 8, and that you use the legacy configuration files.", + "type": "none" + } + ], + "packageName": "@rushstack/heft-web-rig" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-webpack4-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-webpack4-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..e6a91323381 --- /dev/null +++ b/common/changes/@rushstack/heft-webpack4-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-webpack4-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-webpack4-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft-webpack5-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/heft-webpack5-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..e62ded6bf1b --- /dev/null +++ b/common/changes/@rushstack/heft-webpack5-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft-webpack5-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft-webpack5-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/heft/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/heft/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..4da3f257a2d --- /dev/null +++ b/common/changes/@rushstack/heft/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/heft", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/heft" +} \ No newline at end of file diff --git a/common/changes/@rushstack/loader-raw-script/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/loader-raw-script/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..fa3b1d6ee40 --- /dev/null +++ b/common/changes/@rushstack/loader-raw-script/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/loader-raw-script", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/loader-raw-script" +} \ No newline at end of file diff --git a/common/changes/@rushstack/localization-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/localization-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..3830d7f42e0 --- /dev/null +++ b/common/changes/@rushstack/localization-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/localization-utilities", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/localization-utilities" +} \ No newline at end of file diff --git a/common/changes/@rushstack/lockfile-explorer/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/lockfile-explorer/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..22d17643a68 --- /dev/null +++ b/common/changes/@rushstack/lockfile-explorer/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/lockfile-explorer", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/lockfile-explorer" +} \ No newline at end of file diff --git a/common/changes/@rushstack/lookup-by-path/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/lookup-by-path/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..2c66824cd90 --- /dev/null +++ b/common/changes/@rushstack/lookup-by-path/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/lookup-by-path", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/lookup-by-path" +} \ No newline at end of file diff --git a/common/changes/@rushstack/mcp-server/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/mcp-server/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..827fb92cfee --- /dev/null +++ b/common/changes/@rushstack/mcp-server/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/mcp-server", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/mcp-server" +} \ No newline at end of file diff --git a/common/changes/@rushstack/module-minifier/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/module-minifier/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..f0a60db970f --- /dev/null +++ b/common/changes/@rushstack/module-minifier/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/module-minifier", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/module-minifier" +} \ No newline at end of file diff --git a/common/changes/@rushstack/node-core-library/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/node-core-library/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..d702845598d --- /dev/null +++ b/common/changes/@rushstack/node-core-library/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/node-core-library", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/node-core-library" +} \ No newline at end of file diff --git a/common/changes/@rushstack/operation-graph/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/operation-graph/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..eabefe94ed8 --- /dev/null +++ b/common/changes/@rushstack/operation-graph/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/operation-graph", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/operation-graph" +} \ No newline at end of file diff --git a/common/changes/@rushstack/package-deps-hash/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/package-deps-hash/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..11a344e6c99 --- /dev/null +++ b/common/changes/@rushstack/package-deps-hash/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/package-deps-hash", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/package-deps-hash" +} \ No newline at end of file diff --git a/common/changes/@rushstack/package-extractor/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/package-extractor/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..672fa0fcb35 --- /dev/null +++ b/common/changes/@rushstack/package-extractor/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/package-extractor", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/package-extractor" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rig-package/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/rig-package/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..1c1df562afb --- /dev/null +++ b/common/changes/@rushstack/rig-package/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/rig-package", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/rig-package" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rundown/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/rundown/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..d9288bd4be0 --- /dev/null +++ b/common/changes/@rushstack/rundown/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/rundown", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/rundown" +} \ No newline at end of file diff --git a/common/changes/@rushstack/rush-mcp-docs-plugin/user-danade-UpdateEslint2_2025-06-24-23-29.json b/common/changes/@rushstack/rush-mcp-docs-plugin/user-danade-UpdateEslint2_2025-06-24-23-29.json new file mode 100644 index 00000000000..a6cef2ff676 --- /dev/null +++ b/common/changes/@rushstack/rush-mcp-docs-plugin/user-danade-UpdateEslint2_2025-06-24-23-29.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/rush-mcp-docs-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/rush-mcp-docs-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/set-webpack-public-path-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/set-webpack-public-path-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..c20361cc891 --- /dev/null +++ b/common/changes/@rushstack/set-webpack-public-path-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/set-webpack-public-path-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/set-webpack-public-path-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/stream-collator/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/stream-collator/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..28cdccee576 --- /dev/null +++ b/common/changes/@rushstack/stream-collator/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/stream-collator", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/stream-collator" +} \ No newline at end of file diff --git a/common/changes/@rushstack/terminal/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/terminal/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..72b4a6eb492 --- /dev/null +++ b/common/changes/@rushstack/terminal/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/terminal", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/terminal" +} \ No newline at end of file diff --git a/common/changes/@rushstack/trace-import/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/trace-import/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..2309cf5a036 --- /dev/null +++ b/common/changes/@rushstack/trace-import/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/trace-import", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/trace-import" +} \ No newline at end of file diff --git a/common/changes/@rushstack/ts-command-line/user-danade-UpdateEslint2_2025-05-03-00-43.json b/common/changes/@rushstack/ts-command-line/user-danade-UpdateEslint2_2025-05-03-00-43.json new file mode 100644 index 00000000000..a03064b455f --- /dev/null +++ b/common/changes/@rushstack/ts-command-line/user-danade-UpdateEslint2_2025-05-03-00-43.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/ts-command-line", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/ts-command-line" +} \ No newline at end of file diff --git a/common/changes/@rushstack/typings-generator/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/typings-generator/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..8f04a7afc26 --- /dev/null +++ b/common/changes/@rushstack/typings-generator/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/typings-generator", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/typings-generator" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-embedded-dependencies-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack-embedded-dependencies-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..0faabd97885 --- /dev/null +++ b/common/changes/@rushstack/webpack-embedded-dependencies-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack-embedded-dependencies-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack-embedded-dependencies-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-plugin-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack-plugin-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..d21d57bcf4b --- /dev/null +++ b/common/changes/@rushstack/webpack-plugin-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack-plugin-utilities", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack-plugin-utilities" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-preserve-dynamic-require-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack-preserve-dynamic-require-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..c5e4ec7c3bd --- /dev/null +++ b/common/changes/@rushstack/webpack-preserve-dynamic-require-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack-preserve-dynamic-require-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack-preserve-dynamic-require-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack-workspace-resolve-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack-workspace-resolve-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..a7f61b90429 --- /dev/null +++ b/common/changes/@rushstack/webpack-workspace-resolve-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack-workspace-resolve-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack-workspace-resolve-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack4-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack4-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..c14ade57098 --- /dev/null +++ b/common/changes/@rushstack/webpack4-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack4-localization-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack4-localization-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack4-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack4-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..27770560564 --- /dev/null +++ b/common/changes/@rushstack/webpack4-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack4-module-minifier-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack4-module-minifier-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack5-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack5-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..4d848c3d7d8 --- /dev/null +++ b/common/changes/@rushstack/webpack5-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack5-localization-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack5-localization-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/webpack5-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/webpack5-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..6b6bb2f7f49 --- /dev/null +++ b/common/changes/@rushstack/webpack5-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/webpack5-module-minifier-plugin", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/webpack5-module-minifier-plugin" +} \ No newline at end of file diff --git a/common/changes/@rushstack/worker-pool/user-danade-UpdateEslint2_2025-06-03-23-17.json b/common/changes/@rushstack/worker-pool/user-danade-UpdateEslint2_2025-06-03-23-17.json new file mode 100644 index 00000000000..fa7e5515dd6 --- /dev/null +++ b/common/changes/@rushstack/worker-pool/user-danade-UpdateEslint2_2025-06-03-23-17.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@rushstack/worker-pool", + "comment": "", + "type": "none" + } + ], + "packageName": "@rushstack/worker-pool" +} \ No newline at end of file diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index 7846e753ae4..90ddbb0784e 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -489,6 +489,13 @@ "description": "Perform a production build, including minification and localization steps", "associatedPhases": ["_phase:build", "_phase:test"], "associatedCommands": ["build", "rebuild", "test", "retest"] + }, + { + "longName": "--fix", + "parameterKind": "flag", + "description": "Automatically fix problems encountered while linting", + "associatedPhases": ["_phase:build"], + "associatedCommands": ["build", "rebuild", "test", "retest"] } ] } diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json index 5ecc485db43..4c93eec71d3 100644 --- a/common/config/rush/nonbrowser-approved-packages.json +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -542,6 +542,10 @@ "name": "eslint", "allowedCategories": [ "libraries", "tests", "vscode-extensions" ] }, + { + "name": "eslint-import-resolver-node", + "allowedCategories": [ "libraries" ] + }, { "name": "eslint-plugin-deprecation", "allowedCategories": [ "libraries" ] @@ -550,6 +554,10 @@ "name": "eslint-plugin-header", "allowedCategories": [ "libraries" ] }, + { + "name": "eslint-plugin-headers", + "allowedCategories": [ "libraries" ] + }, { "name": "eslint-plugin-import", "allowedCategories": [ "libraries" ] @@ -718,6 +726,10 @@ "name": "js-yaml", "allowedCategories": [ "libraries" ] }, + { + "name": "json-stable-stringify-without-jsonify", + "allowedCategories": [ "libraries" ] + }, { "name": "jsonpath-plus", "allowedCategories": [ "libraries" ] diff --git a/common/config/subspaces/build-tests-subspace/common-versions.json b/common/config/subspaces/build-tests-subspace/common-versions.json index ccdd6f16e6b..0d5cf26de52 100644 --- a/common/config/subspaces/build-tests-subspace/common-versions.json +++ b/common/config/subspaces/build-tests-subspace/common-versions.json @@ -32,7 +32,7 @@ "typescript": "~5.8.2", // Workaround for https://github.com/microsoft/rushstack/issues/1466 - "eslint": "~8.57.0" + "eslint": "~9.25.1" }, /** @@ -75,13 +75,6 @@ * This design avoids unnecessary churn in this file. */ "allowedAlternativeVersions": { - "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 - ], /** * For example, allow some projects to use an older TypeScript compiler * (in addition to whatever "usual" version is being used by other projects in the repo): diff --git a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 5f2928206eb..56bccea6214 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -29,16 +29,14 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.1 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: file:../../rigs/local-node-rig version: file:../../../rigs/local-node-rig dependenciesMeta: '@microsoft/rush-lib': injected: true - '@rushstack/eslint-config': - injected: true '@rushstack/heft': injected: true '@rushstack/terminal': @@ -62,16 +60,14 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.1 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: file:../../rigs/local-node-rig version: file:../../../rigs/local-node-rig dependenciesMeta: '@microsoft/rush-lib': injected: true - '@rushstack/eslint-config': - injected: true '@rushstack/heft': injected: true '@rushstack/rush-sdk': @@ -81,15 +77,12 @@ importers: ../../../build-tests-subspace/typescript-newest-test: devDependencies: - '@rushstack/eslint-config': - specifier: file:../../eslint/eslint-config - version: file:../../../eslint/eslint-config(eslint@8.57.1)(typescript@5.8.2) '@rushstack/heft': specifier: file:../../apps/heft version: file:../../../apps/heft(@types/node@20.17.19) eslint: - specifier: ~8.57.0 - version: 8.57.1 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: file:../../rigs/local-node-rig version: file:../../../rigs/local-node-rig @@ -97,8 +90,6 @@ importers: specifier: ~5.8.2 version: 5.8.2 dependenciesMeta: - '@rushstack/eslint-config': - injected: true '@rushstack/heft': injected: true local-node-rig: @@ -108,19 +99,19 @@ importers: devDependencies: '@rushstack/eslint-config': specifier: file:../../eslint/eslint-config - version: file:../../../eslint/eslint-config(eslint@8.57.1)(typescript@4.9.5) + version: file:../../../eslint/eslint-config(eslint@9.25.1)(typescript@4.9.5) '@rushstack/heft': specifier: file:../../apps/heft version: file:../../../apps/heft(@types/node@20.17.19) '@rushstack/heft-lint-plugin': specifier: file:../../heft-plugins/heft-lint-plugin - version: file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19) '@rushstack/heft-typescript-plugin': specifier: file:../../heft-plugins/heft-typescript-plugin - version: file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19) eslint: - specifier: ~8.57.0 - version: 8.57.1 + specifier: ~9.25.1 + version: 9.25.1 tslint: specifier: ~5.20.1 version: 5.20.1(typescript@4.9.5) @@ -458,22 +449,22 @@ packages: dependencies: stackframe: 1.3.4 - /@es-joy/jsdoccomment@0.17.0: - resolution: {integrity: sha512-B8DIIWE194KyQFPojUs+THa2XX+1vulwTBjirw6GqcxjtNE60Rreex26svBnV9SNLTuz92ctZx5XQE1H7yOxgA==} - engines: {node: ^12 || ^14 || ^16 || ^17} + /@es-joy/jsdoccomment@0.49.0: + resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} + engines: {node: '>=16'} dependencies: - comment-parser: 1.3.0 + comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 2.2.5 + jsdoc-type-pratt-parser: 4.1.0 dev: true - /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): + /@eslint-community/eslint-utils@4.4.1(eslint@9.25.1): resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.57.1 + eslint: 9.25.1 eslint-visitor-keys: 3.4.3 dev: true @@ -482,14 +473,37 @@ packages: engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/config-array@0.20.0: + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/config-helpers@0.2.1: + resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@eslint/core@0.13.0: + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@types/json-schema': 7.0.15 + dev: true + + /@eslint/eslintrc@3.3.1: + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 9.6.1 - globals: 13.24.0 + espree: 10.3.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -499,21 +513,35 @@ packages: - supports-color dev: true - /@eslint/js@8.57.1: - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/js@9.25.1: + resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /@humanwhocodes/config-array@0.13.0: - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + /@eslint/object-schema@2.1.6: + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + + /@eslint/plugin-kit@0.2.8: + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@eslint/core': 0.13.0 + levn: 0.4.1 + dev: true + + /@humanfs/core@0.19.1: + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + dev: true + + /@humanfs/node@0.16.6: + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 dev: true /@humanwhocodes/module-importer@1.0.1: @@ -521,9 +549,14 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + /@humanwhocodes/retry@0.3.1: + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + dev: true + + /@humanwhocodes/retry@0.4.2: + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} dev: true /@istanbuljs/load-nyc-config@1.1.0: @@ -1029,6 +1062,10 @@ packages: write-file-atomic: 3.0.3 write-yaml-file: 4.2.0 + /@rtsao/scc@1.1.0: + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + dev: true + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -1095,6 +1132,10 @@ packages: '@types/node': 20.17.19 '@types/responselike': 1.0.3 + /@types/estree@1.0.7: + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + dev: true + /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: @@ -1179,10 +1220,6 @@ packages: dependencies: '@types/node': 20.17.19 - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true - /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true @@ -1201,8 +1238,8 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1)(eslint@8.57.1)(typescript@4.9.5): - resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} + /@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@4.9.5): + resolution: {integrity: sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -1210,12 +1247,12 @@ packages: typescript: '>=4.8.4 <5.9.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 8.26.1(typescript@4.9.5) - '@typescript-eslint/type-utils': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@4.9.5) - eslint: 8.57.1 + '@typescript-eslint/parser': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.31.0(typescript@4.9.5) + '@typescript-eslint/type-utils': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@4.9.5) + eslint: 9.25.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -1225,8 +1262,8 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1)(eslint@8.57.1)(typescript@5.8.2): - resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} + /@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -1234,12 +1271,12 @@ packages: typescript: '>=4.8.4 <5.9.0' dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/scope-manager': 8.26.1(typescript@5.8.2) - '@typescript-eslint/type-utils': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) - eslint: 8.57.1 + '@typescript-eslint/parser': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/type-utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) + eslint: 9.25.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -1249,117 +1286,98 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@8.26.1(eslint@8.57.1)(typescript@4.9.5): - resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} + /@typescript-eslint/parser@8.31.0(eslint@9.25.1)(typescript@4.9.5): + resolution: {integrity: sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@typescript-eslint/scope-manager': 8.26.1(typescript@4.9.5) - '@typescript-eslint/types': 8.26.1(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.31.0(typescript@4.9.5) + '@typescript-eslint/types': 8.31.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@4.9.5) debug: 4.3.7 - eslint: 8.57.1 + eslint: 9.25.1 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@8.26.1(eslint@8.57.1)(typescript@5.8.2): - resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} + /@typescript-eslint/parser@8.31.0(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@typescript-eslint/scope-manager': 8.26.1(typescript@5.8.2) - '@typescript-eslint/types': 8.26.1(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) debug: 4.3.7 - eslint: 8.57.1 + eslint: 9.25.1 typescript: 5.8.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.21.0(typescript@5.8.2): - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 6.21.0(typescript@5.8.2) - transitivePeerDependencies: - - typescript - dev: true - - /@typescript-eslint/scope-manager@8.26.1(typescript@4.9.5): - resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} + /@typescript-eslint/scope-manager@8.31.0(typescript@4.9.5): + resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.26.1(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@4.9.5) + '@typescript-eslint/types': 8.31.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@4.9.5) transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/scope-manager@8.26.1(typescript@5.8.2): - resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} + /@typescript-eslint/scope-manager@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.26.1(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/type-utils@8.26.1(eslint@8.57.1)(typescript@4.9.5): - resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} + /@typescript-eslint/type-utils@8.31.0(eslint@9.25.1)(typescript@4.9.5): + resolution: {integrity: sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@typescript-eslint/typescript-estree': 8.26.1(typescript@4.9.5) - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@4.9.5) debug: 4.3.7 - eslint: 8.57.1 + eslint: 9.25.1 ts-api-utils: 2.0.1(typescript@4.9.5) typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@8.26.1(eslint@8.57.1)(typescript@5.8.2): - resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} + /@typescript-eslint/type-utils@8.31.0(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) debug: 4.3.7 - eslint: 8.57.1 + eslint: 9.25.1 ts-api-utils: 2.0.1(typescript@5.8.2) typescript: 5.8.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.21.0(typescript@5.8.2): - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - dependencies: - typescript: 5.8.2 - dev: true - - /@typescript-eslint/types@8.26.1(typescript@4.9.5): - resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} + /@typescript-eslint/types@8.31.0(typescript@4.9.5): + resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1367,8 +1385,8 @@ packages: typescript: 4.9.5 dev: true - /@typescript-eslint/types@8.26.1(typescript@5.8.2): - resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} + /@typescript-eslint/types@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1376,36 +1394,14 @@ packages: typescript: 5.8.2 dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.8.2): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.21.0(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 6.21.0(typescript@5.8.2) - debug: 4.3.7 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.4.3(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/typescript-estree@8.26.1(typescript@4.9.5): - resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} + /@typescript-eslint/typescript-estree@8.31.0(typescript@4.9.5): + resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' dependencies: - '@typescript-eslint/types': 8.26.1(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@4.9.5) + '@typescript-eslint/types': 8.31.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@4.9.5) debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -1417,14 +1413,14 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree@8.26.1(typescript@5.8.2): - resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} + /@typescript-eslint/typescript-estree@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' dependencies: - '@typescript-eslint/types': 8.26.1(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -1436,93 +1432,60 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.8.2): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0(typescript@5.8.2) - '@typescript-eslint/types': 6.21.0(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.8.2) - eslint: 8.57.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@8.26.1(eslint@8.57.1)(typescript@4.9.5): - resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} + /@typescript-eslint/utils@8.31.0(eslint@9.25.1)(typescript@4.9.5): + resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.26.1(typescript@4.9.5) - '@typescript-eslint/types': 8.26.1(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@4.9.5) - eslint: 8.57.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1) + '@typescript-eslint/scope-manager': 8.31.0(typescript@4.9.5) + '@typescript-eslint/types': 8.31.0(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@4.9.5) + eslint: 9.25.1 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@8.26.1(eslint@8.57.1)(typescript@5.8.2): - resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} + /@typescript-eslint/utils@8.31.0(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.26.1(typescript@5.8.2) - '@typescript-eslint/types': 8.26.1(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - eslint: 8.57.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1) + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + eslint: 9.25.1 typescript: 5.8.2 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/visitor-keys@6.21.0(typescript@5.8.2): - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.21.0(typescript@5.8.2) - eslint-visitor-keys: 3.4.3 - transitivePeerDependencies: - - typescript - dev: true - - /@typescript-eslint/visitor-keys@8.26.1(typescript@4.9.5): - resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} + /@typescript-eslint/visitor-keys@8.31.0(typescript@4.9.5): + resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.26.1(typescript@4.9.5) + '@typescript-eslint/types': 8.31.0(typescript@4.9.5) eslint-visitor-keys: 4.2.0 transitivePeerDependencies: - typescript dev: true - /@typescript-eslint/visitor-keys@8.26.1(typescript@5.8.2): - resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} + /@typescript-eslint/visitor-keys@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.26.1(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) eslint-visitor-keys: 4.2.0 transitivePeerDependencies: - typescript dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - /@ungap/structured-clone@1.3.0: resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -1685,6 +1648,11 @@ packages: picomatch: 2.3.1 dev: true + /are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + dev: true + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -1697,10 +1665,18 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-array-buffer: 3.0.4 dev: true + /array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + dev: true + /array-differ@3.0.0: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} @@ -1721,6 +1697,31 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + dev: true + + /array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + dev: true + /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} @@ -1741,15 +1742,25 @@ packages: es-shim-unscopables: 1.0.2 dev: true + /array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + dev: true + /array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 + es-shim-unscopables: 1.1.0 dev: true /arraybuffer.prototype.slice@1.0.3: @@ -1757,7 +1768,7 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 es-errors: 1.3.0 @@ -1766,6 +1777,19 @@ packages: is-shared-array-buffer: 1.0.3 dev: true + /arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + dev: true + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -1963,6 +1987,14 @@ packages: normalize-url: 6.1.0 responselike: 2.0.1 + /call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + dev: true + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -1974,6 +2006,24 @@ packages: set-function-length: 1.2.2 dev: true + /call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true + + /call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + dev: true + /callsite-record@4.1.5: resolution: {integrity: sha512-OqeheDucGKifjQRx524URgV4z4NaKjocGhygTptDea+DLROre4ZEecA4KXDq+P7qlGCohYVNOh3qr+y5XH5Ftg==} dependencies: @@ -2132,8 +2182,8 @@ packages: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} dev: true - /comment-parser@1.3.0: - resolution: {integrity: sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==} + /comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} dev: true @@ -2184,33 +2234,54 @@ packages: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 dev: true + /data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dev: true + /data-view-byte-length@1.0.1: resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 dev: true + /data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dev: true + /data-view-byte-offset@1.0.0: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 dev: true - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + /data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} dependencies: - ms: 2.0.0 + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 dev: true /debug@3.2.7: @@ -2326,7 +2397,7 @@ packages: require-package-name: 2.0.1 resolve: 1.22.8 resolve-from: 5.0.0 - semver: 7.6.3 + semver: 7.7.2 yargs: 16.2.0 transitivePeerDependencies: - supports-color @@ -2385,19 +2456,21 @@ packages: esutils: 2.0.3 dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - /dot-prop@5.3.0: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} dependencies: is-obj: 2.0.0 + /dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + dev: true + /electron-to-chromium@1.5.68: resolution: {integrity: sha512-FgMdJlma0OzUYlbrtZ4AeXjKxKPk6KT8WOP8BjcqxWtlg8qyJQjRzPJzUtUn5GBg1oQ26hFs7HOOHJMYiJRnvQ==} dev: true @@ -2482,6 +2555,63 @@ packages: which-typed-array: 1.1.16 dev: true + /es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.3 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + dev: true + /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -2489,30 +2619,36 @@ packages: get-intrinsic: 1.2.4 dev: true + /es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + dev: true + /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} dev: true - /es-iterator-helpers@1.2.0: - resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} + /es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 + es-set-tostringtag: 2.1.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 globalthis: 1.0.4 - gopd: 1.1.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.1.0 + has-proto: 1.2.0 has-symbols: 1.1.0 - internal-slot: 1.0.7 - iterator.prototype: 1.1.3 - safe-array-concat: 1.1.2 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 dev: true /es-object-atoms@1.0.0: @@ -2522,11 +2658,28 @@ packages: es-errors: 1.3.0 dev: true + /es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + /es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + + /es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 dev: true @@ -2537,6 +2690,13 @@ packages: hasown: 2.0.2 dev: true + /es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: true + /es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} @@ -2576,7 +2736,7 @@ packages: resolve: 1.22.8 dev: true - /eslint-module-utils@2.12.0(eslint@8.57.1): + /eslint-module-utils@2.12.0(eslint@9.25.1): resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: @@ -2586,114 +2746,119 @@ packages: optional: true dependencies: debug: 3.2.7 - eslint: 8.57.1 + eslint: 9.25.1 dev: true - /eslint-plugin-deprecation@2.0.0(eslint@8.57.1)(typescript@5.8.2): - resolution: {integrity: sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==} + /eslint-plugin-header@3.1.1(eslint@9.25.1): + resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: ^4.2.4 || ^5.0.0 + eslint: '>=7.7.0' dependencies: - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.8.2) - eslint: 8.57.1 - tslib: 2.8.1 - tsutils: 3.21.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color + eslint: 9.25.1 dev: true - /eslint-plugin-header@3.1.1(eslint@8.57.1): - resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} + /eslint-plugin-headers@1.2.1(eslint@9.25.1): + resolution: {integrity: sha512-1L41t3DPrXFP6YLK+sAj0xDMGVHpQwI+uGefDwc1bKP91q65AIZoXzQgI7MjZJxB6sK8/vYhXMD8x0V8xLNxJA==} + engines: {node: ^16.0.0 || >= 18.0.0} peerDependencies: - eslint: '>=7.7.0' + eslint: '>=7' dependencies: - eslint: 8.57.1 + eslint: 9.25.1 dev: true - /eslint-plugin-import@2.25.4(eslint@8.57.1): - resolution: {integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==} + /eslint-plugin-import@2.31.0(eslint@9.25.1): + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.2 - debug: 2.6.9 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 9.25.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(eslint@8.57.1) - has: 1.0.4 + eslint-module-utils: 2.12.0(eslint@9.25.1) + hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 object.values: 1.2.0 - resolve: 1.22.8 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 dev: true - /eslint-plugin-jsdoc@37.6.1(eslint@8.57.1): - resolution: {integrity: sha512-Y9UhH9BQD40A9P1NOxj59KrSLZb9qzsqYkLCZv30bNeJ7C9eaumTWhh9beiGqvK7m821Hj1dTsZ5LOaFIUTeTg==} - engines: {node: ^12 || ^14 || ^16 || ^17} + /eslint-plugin-jsdoc@50.6.11(eslint@9.25.1): + resolution: {integrity: sha512-k4+MnBCGR8cuIB5MZ++FGd4gbXxjob2rX1Nq0q3nWFF4xSGZENTgTLZSjb+u9B8SAnP6lpGV2FJrBjllV3pVSg==} + engines: {node: '>=18'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: - '@es-joy/jsdoccomment': 0.17.0 - comment-parser: 1.3.0 + '@es-joy/jsdoccomment': 0.49.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint: 8.57.1 + eslint: 9.25.1 + espree: 10.3.0 esquery: 1.6.0 - regextras: 0.8.0 + parse-imports-exports: 0.2.4 semver: 7.6.3 - spdx-expression-parse: 3.0.1 + spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-promise@6.1.1(eslint@8.57.1): - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-plugin-promise@7.2.1(eslint@9.25.1): + resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: - eslint: 8.57.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1) + eslint: 9.25.1 dev: true - /eslint-plugin-react-hooks@4.3.0(eslint@8.57.1): - resolution: {integrity: sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==} + /eslint-plugin-react-hooks@5.2.0(eslint@9.25.1): + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} engines: {node: '>=10'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 dependencies: - eslint: 8.57.1 + eslint: 9.25.1 dev: true - /eslint-plugin-react@7.33.2(eslint@8.57.1): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /eslint-plugin-react@7.37.5(eslint@9.25.1): + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} engines: {node: '>=4'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 dependencies: array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.2.0 - eslint: 8.57.1 + es-iterator-helpers: 1.2.1 + eslint: 9.25.1 estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.8 + object.entries: 1.1.9 object.fromentries: 2.0.8 - object.hasown: 1.1.4 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 dev: true /eslint-plugin-tsdoc@0.4.0: @@ -2703,9 +2868,9 @@ packages: '@microsoft/tsdoc-config': 0.17.1 dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -2721,61 +2886,62 @@ packages: engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true - /eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + /eslint@9.25.1: + resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.25.1) '@eslint-community/regexpp': 4.12.1 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.1 + '@eslint/core': 0.13.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.25.1 + '@eslint/plugin-kit': 0.2.8 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.3.7 - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 transitivePeerDependencies: - supports-color dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.2.0 dev: true /esprima@4.0.1: @@ -2892,11 +3058,11 @@ packages: dependencies: escape-string-regexp: 1.0.5 - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 dev: true /fill-range@7.1.1: @@ -2934,13 +3100,12 @@ packages: micromatch: 4.0.8 resolve-dir: 1.0.1 - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} dependencies: flatted: 3.3.2 keyv: 4.5.4 - rimraf: 3.0.2 dev: true /flatted@3.3.2: @@ -2953,6 +3118,13 @@ packages: is-callable: 1.2.7 dev: true + /for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + dev: true + /fs-extra@11.3.0: resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} engines: {node: '>=14.14'} @@ -2985,12 +3157,24 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 functions-have-names: 1.2.3 dev: true + /function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + dev: true + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true @@ -3015,11 +3199,35 @@ packages: hasown: 2.0.2 dev: true + /get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + dev: true + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} dev: true + /get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + dev: true + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -3034,11 +3242,20 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 get-intrinsic: 1.2.4 dev: true + /get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + dev: true + /git-repo-info@2.1.1: resolution: {integrity: sha512-8aCohiDo4jwjOwma4FmYFd3i97urZulL8XL24nIPxuE+GZnfsAyy/g2Shqx6OjUiFKUXZM+Yy+KHnOmmA3FVcg==} engines: {node: '>= 4.0'} @@ -3121,11 +3338,9 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} dev: true /globalthis@1.0.4: @@ -3133,7 +3348,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - gopd: 1.1.0 + gopd: 1.2.0 dev: true /globby@11.1.0: @@ -3154,6 +3369,11 @@ packages: get-intrinsic: 1.2.4 dev: true + /gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + dev: true + /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} @@ -3206,7 +3426,14 @@ packages: resolution: {integrity: sha512-QLdzI9IIO1Jg7f9GT1gXpPpXArAn6cS31R1eEZqz08Gc+uQ8/XiqHWt17Fiw+2p6oTTIq5GXEpQkAlA88YRl/Q==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + dev: true + + /has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 dev: true /has-symbols@1.1.0: @@ -3225,11 +3452,6 @@ packages: resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} engines: {node: '>=8'} - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - dev: true - /hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -3297,7 +3519,7 @@ packages: /ignore-walk@3.0.4: resolution: {integrity: sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==} dependencies: - minimatch: 3.0.8 + minimatch: 3.1.2 /ignore@5.1.9: resolution: {integrity: sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==} @@ -3377,14 +3599,32 @@ packages: side-channel: 1.0.6 dev: true + /internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + dev: true + /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 get-intrinsic: 1.2.4 dev: true + /is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + dev: true + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -3406,7 +3646,15 @@ packages: resolution: {integrity: sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + dev: true + + /is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 has-tostringtag: 1.0.2 dev: true @@ -3434,6 +3682,15 @@ packages: is-typed-array: 1.1.13 dev: true + /is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + dev: true + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -3441,6 +3698,14 @@ packages: has-tostringtag: 1.0.2 dev: true + /is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + dev: true + /is-es2016-keyword@1.0.0: resolution: {integrity: sha512-JtZWPUwjdbQ1LIo9OSZ8MdkWEve198ors27vH+RzUUvZXXZkzXCxFnlUhzWYxy5IexQSRiXVw9j2q/tHMmkVYQ==} @@ -3452,7 +3717,7 @@ packages: resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 dev: true /is-fullwidth-code-point@3.0.0: @@ -3506,7 +3771,15 @@ packages: resolution: {integrity: sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + dev: true + + /is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 has-tostringtag: 1.0.2 dev: true @@ -3534,22 +3807,39 @@ packages: resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 gopd: 1.1.0 has-tostringtag: 1.0.2 hasown: 2.0.2 dev: true + /is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true + /is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} dev: true - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + dev: true + + /is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bound: 1.0.4 dev: true /is-stream@2.0.1: @@ -3564,6 +3854,14 @@ packages: has-tostringtag: 1.0.2 dev: true + /is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + dev: true + /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -3574,9 +3872,18 @@ packages: resolution: {integrity: sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-symbols: 1.1.0 - safe-regex-test: 1.0.3 + safe-regex-test: 1.1.0 + dev: true + + /is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 dev: true /is-typed-array@1.1.13: @@ -3586,6 +3893,13 @@ packages: which-typed-array: 1.1.16 dev: true + /is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.19 + dev: true + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -3601,15 +3915,22 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + dev: true + + /is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 dev: true /is-weakset@2.0.3: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + get-intrinsic: 1.3.0 dev: true /is-windows@1.0.2: @@ -3675,14 +3996,15 @@ packages: istanbul-lib-report: 3.0.1 dev: true - /iterator.prototype@1.1.3: - resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + /iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 has-symbols: 1.1.0 - reflect.getprototypeof: 1.0.7 set-function-name: 2.0.2 dev: true @@ -4156,8 +4478,8 @@ packages: dependencies: argparse: 2.0.1 - /jsdoc-type-pratt-parser@2.2.5: - resolution: {integrity: sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==} + /jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} dev: true @@ -4221,8 +4543,8 @@ packages: dependencies: array-includes: 3.1.8 array.prototype.flat: 1.3.2 - object.assign: 4.1.5 - object.values: 1.2.0 + object.assign: 4.1.7 + object.values: 1.2.1 dev: true /jszip@3.8.0: @@ -4283,7 +4605,7 @@ packages: engines: {node: '>=6'} dependencies: graceful-fs: 4.2.11 - js-yaml: 3.13.1 + js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 @@ -4374,6 +4696,11 @@ packages: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} + /math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + dev: true + /mem@8.1.1: resolution: {integrity: sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==} engines: {node: '>=10'} @@ -4448,13 +4775,6 @@ packages: dependencies: brace-expansion: 2.0.1 - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -4506,10 +4826,6 @@ packages: engines: {node: '>=10'} hasBin: true - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true - /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -4665,19 +4981,32 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 has-symbols: 1.1.0 object-keys: 1.1.1 dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + /object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 dev: true /object.fromentries@2.0.8: @@ -4690,13 +5019,13 @@ packages: es-object-atoms: 1.0.0 dev: true - /object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} dependencies: + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.5 - es-object-atoms: 1.0.0 dev: true /object.values@1.2.0: @@ -4708,6 +5037,16 @@ packages: es-object-atoms: 1.0.0 dev: true + /object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -4760,6 +5099,15 @@ packages: os-homedir: 1.0.2 os-tmpdir: 1.0.2 + /own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + dev: true + /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -4814,7 +5162,7 @@ packages: got: 11.8.6 registry-auth-token: 4.2.2 registry-url: 5.1.0 - semver: 7.6.3 + semver: 7.7.2 /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -4825,6 +5173,12 @@ packages: dependencies: callsites: 3.1.0 + /parse-imports-exports@0.2.4: + resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} + dependencies: + parse-statements: 1.0.11 + dev: true + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -4838,6 +5192,10 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} + /parse-statements@1.0.11: + resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -5099,16 +5457,30 @@ packages: indent-string: 4.0.0 strip-indent: 3.0.0 + /reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + dev: true + /reflect.getprototypeof@1.0.7: resolution: {integrity: sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - gopd: 1.1.0 + get-intrinsic: 1.3.0 + gopd: 1.2.0 which-builtin-type: 1.2.0 dev: true @@ -5116,17 +5488,12 @@ packages: resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 dev: true - /regextras@0.8.0: - resolution: {integrity: sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==} - engines: {node: '>=0.1.14'} - dev: true - /registry-auth-token@4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} @@ -5209,14 +5576,6 @@ packages: /rfc4648@1.5.3: resolution: {integrity: sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==} - /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 - dev: true - /run-async@2.4.1: resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} engines: {node: '>=0.12.0'} @@ -5236,27 +5595,55 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 get-intrinsic: 1.2.4 has-symbols: 1.1.0 isarray: 2.0.5 dev: true + /safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + dev: true + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + dev: true + /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-regex: 1.2.0 dev: true + /safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + dev: true + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -5320,6 +5707,15 @@ packages: resolution: {integrity: sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==} engines: {node: '>=0.10.0'} + /set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5330,16 +5726,56 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + dev: true + + /side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.3 + dev: true + + /side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.3 + side-channel-map: 1.0.1 + dev: true + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 object-inspect: 1.13.3 dev: true + /side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.3 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + dev: true + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -5384,6 +5820,13 @@ packages: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.20 + /spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + dev: true + /spdx-license-ids@3.0.20: resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} @@ -5436,32 +5879,53 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + /string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.1.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-symbols: 1.1.0 - internal-slot: 1.0.7 + internal-slot: 1.1.0 regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 + dev: true + + /string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + dev: true + + /string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 dev: true /string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.5 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 dev: true /string.prototype.trimend@1.0.8: @@ -5472,13 +5936,23 @@ packages: es-object-atoms: 1.0.0 dev: true + /string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + dev: true + /string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 dev: true /string_decoder@1.1.1: @@ -5624,15 +6098,6 @@ packages: /true-case-path@2.2.1: resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} - /ts-api-utils@1.4.3(typescript@5.8.2): - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.8.2 - dev: true - /ts-api-utils@2.0.1(typescript@4.9.5): resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} @@ -5663,10 +6128,6 @@ packages: /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - /tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - dev: true - /tslint@5.20.1(typescript@4.9.5): resolution: {integrity: sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==} engines: {node: '>=4.8.0'} @@ -5699,16 +6160,6 @@ packages: typescript: 4.9.5 dev: true - /tsutils@3.21.0(typescript@5.8.2): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.8.2 - dev: true - /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -5745,28 +6196,48 @@ packages: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-typed-array: 1.1.13 dev: true + /typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + dev: true + /typed-array-byte-length@1.0.1: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 gopd: 1.1.0 has-proto: 1.1.0 is-typed-array: 1.1.13 dev: true + /typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + dev: true + /typed-array-byte-offset@1.0.3: resolution: {integrity: sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==} engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 gopd: 1.1.0 has-proto: 1.1.0 @@ -5774,14 +6245,27 @@ packages: reflect.getprototypeof: 1.0.7 dev: true + /typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + dev: true + /typed-array-length@1.0.7: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.1.0 - is-typed-array: 1.1.13 + gopd: 1.2.0 + is-typed-array: 1.1.15 possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.7 dev: true @@ -5806,12 +6290,22 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-bigints: 1.0.2 has-symbols: 1.1.0 which-boxed-primitive: 1.1.0 dev: true + /unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-bigints: 1.0.2 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + dev: true + /undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} @@ -5851,7 +6345,7 @@ packages: is-yarn-global: 0.3.0 latest-version: 5.1.0 pupa: 2.1.1 - semver: 7.6.3 + semver: 7.7.2 semver-diff: 3.1.1 xdg-basedir: 4.0.0 @@ -5917,23 +6411,53 @@ packages: is-symbol: 1.1.0 dev: true + /which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + dev: true + /which-builtin-type@1.2.0: resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - function.prototype.name: 1.1.6 + call-bind: 1.0.8 + function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.1.0 is-generator-function: 1.0.10 - is-regex: 1.2.0 - is-weakref: 1.0.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 isarray: 2.0.5 which-boxed-primitive: 1.1.0 which-collection: 1.0.2 - which-typed-array: 1.1.16 + which-typed-array: 1.1.19 + dev: true + + /which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.0 + is-generator-function: 1.0.10 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.0 + which-collection: 1.0.2 + which-typed-array: 1.1.19 dev: true /which-collection@1.0.2: @@ -5958,12 +6482,25 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 gopd: 1.1.0 has-tostringtag: 1.0.2 dev: true + /which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + dev: true + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -6120,50 +6657,50 @@ packages: - '@types/node' dev: true - file:../../../eslint/eslint-config(eslint@8.57.1)(typescript@4.9.5): + file:../../../eslint/eslint-config(eslint@9.25.1)(typescript@4.9.5): resolution: {directory: ../../../eslint/eslint-config, type: directory} id: file:../../../eslint/eslint-config name: '@rushstack/eslint-config' peerDependencies: - eslint: ^8.57.0 + eslint: ^8.57.0 || ^9.25.1 typescript: '>=4.7.0' dependencies: '@rushstack/eslint-patch': file:../../../eslint/eslint-patch - '@rushstack/eslint-plugin': file:../../../eslint/eslint-plugin(eslint@8.57.1)(typescript@4.9.5) - '@rushstack/eslint-plugin-packlets': file:../../../eslint/eslint-plugin-packlets(eslint@8.57.1)(typescript@4.9.5) - '@rushstack/eslint-plugin-security': file:../../../eslint/eslint-plugin-security(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1)(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/parser': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@4.9.5) - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - eslint: 8.57.1 - eslint-plugin-promise: 6.1.1(eslint@8.57.1) - eslint-plugin-react: 7.33.2(eslint@8.57.1) + '@rushstack/eslint-plugin': file:../../../eslint/eslint-plugin(eslint@9.25.1)(typescript@4.9.5) + '@rushstack/eslint-plugin-packlets': file:../../../eslint/eslint-plugin-packlets(eslint@9.25.1)(typescript@4.9.5) + '@rushstack/eslint-plugin-security': file:../../../eslint/eslint-plugin-security(eslint@9.25.1)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@4.9.5) + '@typescript-eslint/parser': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + eslint: 9.25.1 + eslint-plugin-promise: 7.2.1(eslint@9.25.1) + eslint-plugin-react: 7.37.5(eslint@9.25.1) eslint-plugin-tsdoc: 0.4.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - file:../../../eslint/eslint-config(eslint@8.57.1)(typescript@5.8.2): + file:../../../eslint/eslint-config(eslint@9.25.1)(typescript@5.8.2): resolution: {directory: ../../../eslint/eslint-config, type: directory} id: file:../../../eslint/eslint-config name: '@rushstack/eslint-config' peerDependencies: - eslint: ^8.57.0 + eslint: ^8.57.0 || ^9.25.1 typescript: '>=4.7.0' dependencies: '@rushstack/eslint-patch': file:../../../eslint/eslint-patch - '@rushstack/eslint-plugin': file:../../../eslint/eslint-plugin(eslint@8.57.1)(typescript@5.8.2) - '@rushstack/eslint-plugin-packlets': file:../../../eslint/eslint-plugin-packlets(eslint@8.57.1)(typescript@5.8.2) - '@rushstack/eslint-plugin-security': file:../../../eslint/eslint-plugin-security(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1)(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/parser': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - eslint: 8.57.1 - eslint-plugin-promise: 6.1.1(eslint@8.57.1) - eslint-plugin-react: 7.33.2(eslint@8.57.1) + '@rushstack/eslint-plugin': file:../../../eslint/eslint-plugin(eslint@9.25.1)(typescript@5.8.2) + '@rushstack/eslint-plugin-packlets': file:../../../eslint/eslint-plugin-packlets(eslint@9.25.1)(typescript@5.8.2) + '@rushstack/eslint-plugin-security': file:../../../eslint/eslint-plugin-security(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/parser': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint: 9.25.1 + eslint-plugin-promise: 7.2.1(eslint@9.25.1) + eslint-plugin-react: 7.37.5(eslint@9.25.1) eslint-plugin-tsdoc: 0.4.0 typescript: 5.8.2 transitivePeerDependencies: @@ -6175,116 +6712,122 @@ packages: name: '@rushstack/eslint-patch' dev: true - file:../../../eslint/eslint-plugin(eslint@8.57.1)(typescript@4.9.5): + file:../../../eslint/eslint-plugin(eslint@9.25.1)(typescript@4.9.5): resolution: {directory: ../../../eslint/eslint-plugin, type: directory} id: file:../../../eslint/eslint-plugin name: '@rushstack/eslint-plugin' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + eslint: 9.25.1 transitivePeerDependencies: - supports-color - typescript dev: true - file:../../../eslint/eslint-plugin(eslint@8.57.1)(typescript@5.8.2): + file:../../../eslint/eslint-plugin(eslint@9.25.1)(typescript@5.8.2): resolution: {directory: ../../../eslint/eslint-plugin, type: directory} id: file:../../../eslint/eslint-plugin name: '@rushstack/eslint-plugin' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint: 9.25.1 transitivePeerDependencies: - supports-color - typescript dev: true - file:../../../eslint/eslint-plugin-packlets(eslint@8.57.1)(typescript@4.9.5): + file:../../../eslint/eslint-plugin-packlets(eslint@9.25.1)(typescript@4.9.5): resolution: {directory: ../../../eslint/eslint-plugin-packlets, type: directory} id: file:../../../eslint/eslint-plugin-packlets name: '@rushstack/eslint-plugin-packlets' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + eslint: 9.25.1 transitivePeerDependencies: - supports-color - typescript dev: true - file:../../../eslint/eslint-plugin-packlets(eslint@8.57.1)(typescript@5.8.2): + file:../../../eslint/eslint-plugin-packlets(eslint@9.25.1)(typescript@5.8.2): resolution: {directory: ../../../eslint/eslint-plugin-packlets, type: directory} id: file:../../../eslint/eslint-plugin-packlets name: '@rushstack/eslint-plugin-packlets' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint: 9.25.1 transitivePeerDependencies: - supports-color - typescript dev: true - file:../../../eslint/eslint-plugin-security(eslint@8.57.1)(typescript@4.9.5): + file:../../../eslint/eslint-plugin-security(eslint@9.25.1)(typescript@4.9.5): resolution: {directory: ../../../eslint/eslint-plugin-security, type: directory} id: file:../../../eslint/eslint-plugin-security name: '@rushstack/eslint-plugin-security' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@4.9.5) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@4.9.5) + eslint: 9.25.1 transitivePeerDependencies: - supports-color - typescript dev: true - file:../../../eslint/eslint-plugin-security(eslint@8.57.1)(typescript@5.8.2): + file:../../../eslint/eslint-plugin-security(eslint@9.25.1)(typescript@5.8.2): resolution: {directory: ../../../eslint/eslint-plugin-security, type: directory} id: file:../../../eslint/eslint-plugin-security name: '@rushstack/eslint-plugin-security' peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: '@rushstack/tree-pattern': file:../../../libraries/tree-pattern - '@typescript-eslint/utils': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - eslint: 8.57.1 + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint: 9.25.1 transitivePeerDependencies: - supports-color - typescript dev: true - file:../../../eslint/local-eslint-config(eslint@8.57.1)(typescript@5.8.2): + file:../../../eslint/local-eslint-config(eslint@9.25.1)(typescript@5.8.2): resolution: {directory: ../../../eslint/local-eslint-config, type: directory} id: file:../../../eslint/local-eslint-config name: local-eslint-config + peerDependencies: + eslint: ^9.25.1 + typescript: '>=4.7.0' dependencies: - '@rushstack/eslint-config': file:../../../eslint/eslint-config(eslint@8.57.1)(typescript@5.8.2) + '@rushstack/eslint-config': file:../../../eslint/eslint-config(eslint@9.25.1)(typescript@5.8.2) '@rushstack/eslint-patch': file:../../../eslint/eslint-patch - '@typescript-eslint/parser': 8.26.1(eslint@8.57.1)(typescript@5.8.2) - eslint-plugin-deprecation: 2.0.0(eslint@8.57.1)(typescript@5.8.2) - eslint-plugin-header: 3.1.1(eslint@8.57.1) - eslint-plugin-import: 2.25.4(eslint@8.57.1) - eslint-plugin-jsdoc: 37.6.1(eslint@8.57.1) - eslint-plugin-react-hooks: 4.3.0(eslint@8.57.1) + '@rushstack/eslint-plugin': file:../../../eslint/eslint-plugin(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/parser': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint: 9.25.1 + eslint-import-resolver-node: 0.3.9 + eslint-plugin-header: 3.1.1(eslint@9.25.1) + eslint-plugin-headers: 1.2.1(eslint@9.25.1) + eslint-plugin-import: 2.31.0(eslint@9.25.1) + eslint-plugin-jsdoc: 50.6.11(eslint@9.25.1) + eslint-plugin-react-hooks: 5.2.0(eslint@9.25.1) + typescript: 5.8.2 transitivePeerDependencies: - - eslint - supports-color - - typescript dev: true - file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19): + file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19): resolution: {directory: ../../../heft-plugins/heft-api-extractor-plugin, type: directory} id: file:../../../heft-plugins/heft-api-extractor-plugin name: '@rushstack/heft-api-extractor-plugin' @@ -6298,7 +6841,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19)(jest-environment-node@29.5.0): + file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19)(jest-environment-node@29.5.0): resolution: {directory: ../../../heft-plugins/heft-jest-plugin, type: directory} id: file:../../../heft-plugins/heft-jest-plugin name: '@rushstack/heft-jest-plugin' @@ -6333,7 +6876,7 @@ packages: - ts-node dev: true - file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19): + file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19): resolution: {directory: ../../../heft-plugins/heft-lint-plugin, type: directory} id: file:../../../heft-plugins/heft-lint-plugin name: '@rushstack/heft-lint-plugin' @@ -6342,13 +6885,13 @@ packages: dependencies: '@rushstack/heft': file:../../../apps/heft(@types/node@20.17.19) '@rushstack/node-core-library': file:../../../libraries/node-core-library(@types/node@20.17.19) + json-stable-stringify-without-jsonify: 1.0.1 semver: 7.5.4 - typescript: 5.8.2 transitivePeerDependencies: - '@types/node' dev: true - file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19): + file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19): resolution: {directory: ../../../heft-plugins/heft-typescript-plugin, type: directory} id: file:../../../heft-plugins/heft-typescript-plugin name: '@rushstack/heft-typescript-plugin' @@ -6574,7 +7117,7 @@ packages: transitivePeerDependencies: - '@types/node' - file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.6)(@types/node@20.17.19): + file:../../../rigs/heft-node-rig(@rushstack/heft@0.74.0)(@types/node@20.17.19): resolution: {directory: ../../../rigs/heft-node-rig, type: directory} id: file:../../../rigs/heft-node-rig name: '@rushstack/heft-node-rig' @@ -6582,20 +7125,21 @@ packages: '@rushstack/heft': '*' dependencies: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) - '@rushstack/eslint-config': file:../../../eslint/eslint-config(eslint@8.57.1)(typescript@5.8.2) + '@rushstack/eslint-config': file:../../../eslint/eslint-config(eslint@9.25.1)(typescript@5.8.2) '@rushstack/heft': file:../../../apps/heft(@types/node@20.17.19) - '@rushstack/heft-api-extractor-plugin': file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19) - '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19)(jest-environment-node@29.5.0) - '@rushstack/heft-lint-plugin': file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19) - '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19) + '@rushstack/heft-api-extractor-plugin': file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19) + '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19)(jest-environment-node@29.5.0) + '@rushstack/heft-lint-plugin': file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19) + '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.74.0)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 - eslint: 8.57.1 + eslint: 9.25.1 jest-environment-node: 29.5.0 typescript: 5.8.2 transitivePeerDependencies: - '@types/node' - babel-plugin-macros - jest-environment-jsdom + - jiti - node-notifier - supports-color - ts-node @@ -6606,17 +7150,19 @@ packages: name: local-node-rig dependencies: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) + '@rushstack/eslint-patch': file:../../../eslint/eslint-patch '@rushstack/heft': file:../../../apps/heft(@types/node@20.17.19) - '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.6)(@types/node@20.17.19) + '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@0.74.0)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 '@types/node': 20.17.19 - eslint: 8.57.1 + eslint: 9.25.1 jest-junit: 12.3.0 - local-eslint-config: file:../../../eslint/local-eslint-config(eslint@8.57.1)(typescript@5.8.2) + local-eslint-config: file:../../../eslint/local-eslint-config(eslint@9.25.1)(typescript@5.8.2) typescript: 5.8.2 transitivePeerDependencies: - babel-plugin-macros - jest-environment-jsdom + - jiti - node-notifier - supports-color - ts-node diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 6bda9170b8e..4439cd83195 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": "40cbf48a53cad8d9f815d7d1d8ec18a48233a1ad", - "preferredVersionsHash": "54149ea3f01558a859c96dee2052b797d4defe68", - "packageJsonInjectedDependenciesHash": "8bc9d0aabfed5614af0cf7950d2ba377e412b716" + "pnpmShrinkwrapHash": "64903f1451783b325e43407996d111839782a01d", + "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", + "packageJsonInjectedDependenciesHash": "f461fae28aeefb1a56608116785c4b0f0a005d53" } diff --git a/common/config/subspaces/default/common-versions.json b/common/config/subspaces/default/common-versions.json index a4798836c9c..9822255f852 100644 --- a/common/config/subspaces/default/common-versions.json +++ b/common/config/subspaces/default/common-versions.json @@ -31,8 +31,8 @@ // engine for API Extractor. "typescript": "~5.8.2", - // Workaround for https://github.com/microsoft/rushstack/issues/1466 - "eslint": "~8.57.0" + // This should be the ESLint version that's used to build most of the projects in the repo. + "eslint": "~9.25.1" }, /** @@ -83,7 +83,8 @@ "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-legacy - "8.23.1" // Used by build-tests/eslint-bulk-suppressions-test-legacy + "8.23.1", // Used by build-tests/eslint-bulk-suppressions-test-legacy + "~8.57.0" // Used by build-tests/eslint-bulk-suppressions-test ], /** * 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 0180e78c6cb..0c3f3585186 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -46,6 +46,9 @@ importers: '@types/resolve': specifier: 1.20.2 version: 1.20.2 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -126,6 +129,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -181,9 +187,6 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../apps/lockfile-explorer: dependencies: @@ -248,6 +251,9 @@ importers: '@types/update-notifier': specifier: ~6.0.1 version: 6.0.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -285,6 +291,9 @@ importers: '@types/react-dom': specifier: 17.0.25 version: 17.0.25 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-web-rig: specifier: workspace:* version: link:../../rigs/local-web-rig @@ -304,6 +313,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -341,6 +353,9 @@ importers: '@types/semver': specifier: 7.5.0 version: 7.5.0 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -372,6 +387,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -409,6 +427,9 @@ importers: '@types/semver': specifier: 7.5.0 version: 7.5.0 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -434,8 +455,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -464,8 +485,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -487,6 +508,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -539,8 +563,8 @@ importers: specifier: ~10.0.98 version: 10.0.130 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -586,7 +610,7 @@ importers: version: link:../../webpack/webpack4-module-minifier-plugin '@storybook/react': specifier: ~6.4.18 - version: 6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + version: 6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@types/heft-jest': specifier: 1.0.1 version: 1.0.1 @@ -606,8 +630,8 @@ importers: specifier: ~5.2.7 version: 5.2.7(webpack@4.47.0) eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 heft-storybook-react-tutorial-storykit: specifier: workspace:* version: link:../heft-storybook-react-tutorial-storykit @@ -671,7 +695,7 @@ importers: version: 6.4.22 '@storybook/react': specifier: ~6.4.18 - version: 6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + version: 6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/theming': specifier: ~6.4.18 version: 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) @@ -748,6 +772,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -779,6 +806,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -826,8 +856,8 @@ importers: specifier: ~6.6.0 version: 6.6.0(webpack@5.98.0) eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~5.5.0 version: 5.5.4(webpack@5.98.0) @@ -885,6 +915,9 @@ importers: '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -906,6 +939,9 @@ importers: '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -1173,6 +1209,9 @@ importers: ../../../build-tests/eslint-8-test: devDependencies: + '@rushstack/eslint-config': + specifier: workspace:* + version: link:../../eslint/eslint-config '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft @@ -1180,8 +1219,8 @@ importers: specifier: 20.17.19 version: 20.17.19 '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) eslint: specifier: ~8.57.0 version: 8.57.0 @@ -1192,11 +1231,35 @@ importers: specifier: ~5.8.2 version: 5.8.2 + ../../../build-tests/eslint-9-test: + devDependencies: + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@types/node': + specifier: 20.17.19 + version: 20.17.19 + '@typescript-eslint/parser': + specifier: ~8.31.0 + version: 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint: + specifier: ~9.25.1 + version: 9.25.1 + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + typescript: + specifier: ~5.8.2 + version: 5.8.2 + ../../../build-tests/eslint-bulk-suppressions-test: devDependencies: '@rushstack/eslint-bulk': specifier: workspace:* version: link:../../eslint/eslint-bulk + '@rushstack/eslint-config': + specifier: workspace:* + version: link:../../eslint/eslint-config '@rushstack/eslint-patch': specifier: workspace:* version: link:../../eslint/eslint-patch @@ -1207,8 +1270,8 @@ importers: specifier: workspace:* version: link:../../libraries/node-core-library '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) eslint: specifier: ~8.57.0 version: 8.57.0 @@ -1219,6 +1282,33 @@ importers: specifier: ~5.8.2 version: 5.8.2 + ../../../build-tests/eslint-bulk-suppressions-test-flat: + devDependencies: + '@rushstack/eslint-bulk': + specifier: workspace:* + version: link:../../eslint/eslint-bulk + '@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: ~8.31.0 + version: 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint: + specifier: ~9.25.1 + version: 9.25.1 + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + typescript: + specifier: ~5.8.2 + version: 5.8.2 + ../../../build-tests/eslint-bulk-suppressions-test-legacy: devDependencies: '@rushstack/eslint-bulk': @@ -1237,8 +1327,8 @@ importers: specifier: workspace:* version: link:../../libraries/node-core-library '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) eslint: specifier: ~8.57.0 version: 8.57.0 @@ -1309,8 +1399,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1340,8 +1430,8 @@ importers: specifier: 1.0.6 version: 1.0.6 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1364,8 +1454,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 heft-example-plugin-01: specifier: workspace:* version: link:../heft-example-plugin-01 @@ -1398,8 +1488,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1428,8 +1518,8 @@ importers: specifier: 1.0.1 version: 1.0.1 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1464,8 +1554,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1539,8 +1629,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 heft-example-plugin-01: specifier: workspace:* version: link:../heft-example-plugin-01 @@ -1584,8 +1674,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 heft-example-lifecycle-plugin: specifier: workspace:* version: link:../heft-example-lifecycle-plugin @@ -1624,8 +1714,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1715,8 +1805,8 @@ importers: specifier: ~5.2.7 version: 5.2.7(webpack@4.47.0) eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~4.5.2 version: 4.5.2(webpack@4.47.0) @@ -1769,8 +1859,8 @@ importers: specifier: 1.18.8 version: 1.18.8 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1802,8 +1892,8 @@ importers: specifier: 1.18.8 version: 1.18.8 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -1930,6 +2020,9 @@ importers: '@rushstack/heft-web-rig': specifier: workspace:* version: link:../../rigs/heft-web-rig + eslint: + specifier: ~9.25.1 + version: 9.25.1 ../../../build-tests/heft-webpack4-everything-test: devDependencies: @@ -1970,8 +2063,8 @@ importers: specifier: 1.18.8 version: 1.18.8 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 file-loader: specifier: ~6.0.0 version: 6.0.0(webpack@4.47.0) @@ -2033,8 +2126,8 @@ importers: specifier: 1.18.8 version: 1.18.8 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~5.5.0 version: 5.5.4(webpack@5.98.0) @@ -2074,6 +2167,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~4.5.2 version: 4.5.2(webpack@4.47.0) @@ -2116,6 +2212,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~4.5.2 version: 4.5.2(webpack@4.47.0) @@ -2158,6 +2257,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~4.5.2 version: 4.5.2(webpack@4.47.0) @@ -2223,6 +2325,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2250,6 +2355,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 http-proxy: specifier: ~1.18.1 version: 1.18.1 @@ -2272,6 +2380,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2306,6 +2417,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2333,6 +2447,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 http-proxy: specifier: ~1.18.1 version: 1.18.1 @@ -2406,30 +2523,30 @@ importers: specifier: workspace:* version: link:../eslint-plugin-security '@typescript-eslint/eslint-plugin': - specifier: ~8.26.1 - version: 8.26.1(@typescript-eslint/parser@8.26.1)(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@5.8.2) '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@9.25.1)(typescript@5.8.2) '@typescript-eslint/typescript-estree': - specifier: ~8.26.1 - version: 8.26.1(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(typescript@5.8.2) '@typescript-eslint/utils': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@9.25.1)(typescript@5.8.2) eslint-plugin-promise: - specifier: ~6.1.1 - version: 6.1.1(eslint@8.57.0) + specifier: ~7.2.1 + version: 7.2.1(eslint@9.25.1) eslint-plugin-react: - specifier: ~7.33.2 - version: 7.33.2(eslint@8.57.0) + specifier: ~7.37.5 + version: 7.37.5(eslint@9.25.1) eslint-plugin-tsdoc: specifier: ~0.4.0 version: 0.4.0 devDependencies: eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 typescript: specifier: ~5.8.2 version: 5.8.2 @@ -2439,18 +2556,24 @@ importers: '@rushstack/heft': specifier: 0.73.2 version: 0.73.2(@types/node@20.17.19) - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 + '@types/eslint-8': + specifier: npm:@types/eslint@8.56.10 + version: /@types/eslint@8.56.10 + '@types/eslint-9': + specifier: npm:@types/eslint@9.6.1 + version: /@types/eslint@9.6.1 '@typescript-eslint/types': - specifier: ~8.26.1 - version: 8.26.1(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(typescript@5.8.2) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - eslint: - specifier: ~8.57.0 - version: 8.57.0 + eslint-8: + specifier: npm:eslint@~8.57.0 + version: /eslint@8.57.0 + eslint-9: + specifier: npm:eslint@~9.25.1 + version: /eslint@9.25.1 typescript: specifier: ~5.8.2 version: 5.8.2 @@ -2461,30 +2584,18 @@ importers: specifier: workspace:* version: link:../../libraries/tree-pattern '@typescript-eslint/utils': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) devDependencies: - '@eslint/eslintrc': - specifier: ~3.0.0 - version: 3.0.2 '@rushstack/heft': specifier: 0.73.2 version: 0.73.2(@types/node@20.17.19) - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 - '@types/estree': - specifier: 1.0.6 - version: 1.0.6 '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/rule-tester': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) - '@typescript-eslint/typescript-estree': - specifier: ~8.26.1 - version: 8.26.1(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -2501,24 +2612,15 @@ importers: specifier: workspace:* version: link:../../libraries/tree-pattern '@typescript-eslint/utils': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) devDependencies: '@rushstack/heft': specifier: 0.73.2 version: 0.73.2(@types/node@20.17.19) - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 - '@types/estree': - specifier: 1.0.6 - version: 1.0.6 '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) - '@typescript-eslint/typescript-estree': - specifier: ~8.26.1 - version: 8.26.1(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -2535,30 +2637,21 @@ importers: specifier: workspace:* version: link:../../libraries/tree-pattern '@typescript-eslint/utils': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) devDependencies: - '@eslint/eslintrc': - specifier: ~3.0.0 - version: 3.0.2 '@rushstack/heft': specifier: 0.73.2 version: 0.73.2(@types/node@20.17.19) - '@types/eslint': - specifier: 8.56.10 - version: 8.56.10 - '@types/estree': - specifier: 1.0.6 - version: 1.0.6 '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/rule-tester': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/typescript-estree': - specifier: ~8.26.1 - version: 8.26.1(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(typescript@5.8.2) decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig @@ -2577,24 +2670,33 @@ importers: '@rushstack/eslint-patch': specifier: workspace:* version: link:../eslint-patch + '@rushstack/eslint-plugin': + specifier: workspace:* + version: link:../eslint-plugin + '@typescript-eslint/eslint-plugin': + specifier: ~8.31.0 + version: 8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@5.8.2) '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) - eslint-plugin-deprecation: - specifier: 2.0.0 - version: 2.0.0(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@9.25.1)(typescript@5.8.2) + eslint-import-resolver-node: + specifier: 0.3.9 + version: 0.3.9 eslint-plugin-header: specifier: ~3.1.1 - version: 3.1.1(eslint@8.57.0) + version: 3.1.1(eslint@9.25.1) + eslint-plugin-headers: + specifier: ~1.2.1 + version: 1.2.1(eslint@9.25.1) eslint-plugin-import: - specifier: 2.25.4 - version: 2.25.4(eslint@8.57.0) + specifier: 2.31.0 + version: 2.31.0(eslint@9.25.1) eslint-plugin-jsdoc: - specifier: 37.6.1 - version: 37.6.1(eslint@8.57.0) + specifier: 50.6.11 + version: 50.6.11(eslint@9.25.1) eslint-plugin-react-hooks: - specifier: 4.3.0 - version: 4.3.0(eslint@8.57.0) + specifier: 5.2.0 + version: 5.2.0(eslint@9.25.1) devDependencies: '@rushstack/heft': specifier: 0.73.2 @@ -2603,8 +2705,8 @@ importers: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 typescript: specifier: ~5.8.2 version: 5.8.2 @@ -2647,8 +2749,8 @@ importers: specifier: workspace:* version: link:../../apps/heft eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2677,6 +2779,9 @@ importers: '@rushstack/heft-typescript-plugin': specifier: workspace:* version: link:../heft-typescript-plugin + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2747,6 +2852,9 @@ importers: '@rushstack/node-core-library': specifier: workspace:* version: link:../../libraries/node-core-library + json-stable-stringify-without-jsonify: + specifier: 1.0.1 + version: 1.0.1 semver: specifier: ~7.5.4 version: 7.5.4 @@ -2763,6 +2871,12 @@ importers: '@types/eslint': specifier: 8.56.10 version: 8.56.10 + '@types/eslint-9': + specifier: npm:@types/eslint@9.6.1 + version: /@types/eslint@9.6.1 + '@types/json-stable-stringify-without-jsonify': + specifier: 1.0.2 + version: 1.0.2 '@types/semver': specifier: 7.5.0 version: 7.5.0 @@ -2772,6 +2886,9 @@ importers: eslint: specifier: ~8.57.0 version: 8.57.0 + eslint-9: + specifier: npm:eslint@~9.25.1 + version: /eslint@9.25.1 tslint: specifier: ~5.20.1 version: 5.20.1(typescript@5.8.2) @@ -2789,8 +2906,8 @@ importers: specifier: workspace:* version: link:../../apps/heft eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2808,8 +2925,8 @@ importers: specifier: workspace:* version: link:../heft-sass-plugin eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2842,8 +2959,8 @@ importers: specifier: workspace:* version: link:../../apps/heft eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2863,6 +2980,9 @@ importers: '@rushstack/heft-webpack5-plugin': specifier: workspace:* version: link:../heft-webpack5-plugin + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2885,6 +3005,9 @@ importers: '@rushstack/heft-webpack5-plugin': specifier: workspace:* version: link:../heft-webpack5-plugin + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2956,6 +3079,9 @@ importers: '@types/webpack': specifier: 4.41.32 version: 4.41.32 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -2993,6 +3119,9 @@ importers: '@types/watchpack': specifier: 2.4.0 version: 2.4.0 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3018,9 +3147,6 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../libraries/debug-certificate-manager: dependencies: @@ -3043,6 +3169,9 @@ importers: '@types/node-forge': specifier: 1.0.4 version: 1.0.4 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3074,15 +3203,15 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../libraries/load-themed-styles: devDependencies: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-web-rig: specifier: workspace:* version: link:../../rigs/local-web-rig @@ -3111,6 +3240,9 @@ importers: '@types/xmldoc': specifier: 1.1.4 version: 1.1.4 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3120,6 +3252,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3148,6 +3283,9 @@ importers: '@types/serialize-javascript': specifier: 5.0.2 version: 5.0.2 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3197,9 +3335,6 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../libraries/operation-graph: dependencies: @@ -3216,9 +3351,6 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../libraries/package-deps-hash: dependencies: @@ -3229,6 +3361,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3285,8 +3420,8 @@ importers: specifier: 7.5.0 version: 7.5.0 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3315,9 +3450,6 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../libraries/rush-lib: dependencies: @@ -3487,6 +3619,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3539,6 +3674,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3579,6 +3717,9 @@ importers: '@types/react-dom': specifier: 17.0.25 version: 17.0.25 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-web-rig: specifier: workspace:* version: link:../../rigs/local-web-rig @@ -3592,6 +3733,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3608,6 +3752,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3630,9 +3777,6 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../libraries/tree-pattern: devDependencies: @@ -3667,9 +3811,6 @@ importers: decoupled-local-node-rig: specifier: workspace:* version: link:../../rigs/decoupled-local-node-rig - local-eslint-config: - specifier: workspace:* - version: link:../../eslint/local-eslint-config ../../../libraries/typings-generator: dependencies: @@ -3689,6 +3830,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3698,6 +3842,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3726,6 +3873,9 @@ importers: '@types/js-yaml': specifier: 3.12.1 version: 3.12.1 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3763,6 +3913,9 @@ importers: '@types/diff': specifier: 5.0.1 version: 5.0.1 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -3791,26 +3944,23 @@ importers: specifier: 20.17.19 version: 20.17.19 '@typescript-eslint/parser': - specifier: ~8.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) + specifier: ~8.31.0 + version: 8.31.0(eslint@8.57.0)(typescript@5.8.2) eslint: specifier: ~8.57.0 version: 8.57.0 - eslint-plugin-deprecation: - specifier: 2.0.0 - version: 2.0.0(eslint@8.57.0)(typescript@5.8.2) eslint-plugin-header: specifier: ~3.1.1 version: 3.1.1(eslint@8.57.0) eslint-plugin-import: - specifier: 2.25.4 - version: 2.25.4(eslint@8.57.0) + specifier: 2.31.0 + version: 2.31.0(eslint@8.57.0) eslint-plugin-jsdoc: - specifier: 37.6.1 - version: 37.6.1(eslint@8.57.0) + specifier: 50.6.11 + version: 50.6.11(eslint@8.57.0) eslint-plugin-react-hooks: - specifier: 4.3.0 - version: 4.3.0(eslint@8.57.0) + specifier: 5.2.0 + version: 5.2.0(eslint@8.57.0) jest-junit: specifier: 12.3.0 version: 12.3.0 @@ -3842,8 +3992,8 @@ importers: specifier: 1.0.1 version: 1.0.1 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 jest-environment-node: specifier: ~29.5.0 version: 29.5.0 @@ -3894,8 +4044,8 @@ importers: specifier: ~3.4.1 version: 3.4.1(webpack@5.98.0) eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~5.5.0 version: 5.5.4(webpack@5.98.0) @@ -3951,6 +4101,9 @@ importers: '@microsoft/api-extractor': specifier: workspace:* version: link:../../apps/api-extractor + '@rushstack/eslint-patch': + specifier: workspace:* + version: link:../../eslint/eslint-patch '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft @@ -3964,8 +4117,8 @@ importers: specifier: 20.17.19 version: 20.17.19 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 jest-junit: specifier: 12.3.0 version: 12.3.0 @@ -3981,6 +4134,9 @@ importers: '@microsoft/api-extractor': specifier: workspace:* version: link:../../apps/api-extractor + '@rushstack/eslint-patch': + specifier: workspace:* + version: link:../../eslint/eslint-patch '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft @@ -3994,8 +4150,8 @@ importers: specifier: 1.18.8 version: 1.18.8 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 jest-junit: specifier: 12.3.0 version: 12.3.0 @@ -4027,6 +4183,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4055,6 +4214,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4077,6 +4239,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4102,6 +4267,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4127,6 +4295,9 @@ importers: '@rushstack/terminal': specifier: workspace:* version: link:../../libraries/terminal + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4146,6 +4317,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4162,6 +4336,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-eslint-config: specifier: workspace:* version: link:../../eslint/local-eslint-config @@ -4190,6 +4367,9 @@ importers: '@rushstack/terminal': specifier: workspace:* version: link:../../libraries/terminal + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4218,6 +4398,9 @@ importers: '@types/webpack-env': specifier: 1.18.8 version: 1.18.8 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4276,6 +4459,9 @@ importers: '@types/ws': specifier: 8.5.5 version: 8.5.5 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4332,8 +4518,8 @@ importers: specifier: ^1.63.0 version: 1.87.0 eslint: - specifier: ~8.57.0 - version: 8.57.0 + specifier: ~9.25.1 + version: 9.25.1 html-webpack-plugin: specifier: ~5.5.0 version: 5.5.4(webpack@5.98.0) @@ -4395,6 +4581,9 @@ importers: '@vscode/test-electron': specifier: ^1.6.2 version: 1.6.2 + eslint: + specifier: ~9.25.1 + version: 9.25.1 glob: specifier: ~7.0.5 version: 7.0.6 @@ -4423,6 +4612,9 @@ importers: '@types/estree': specifier: 1.0.6 version: 1.0.6 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4451,6 +4643,9 @@ importers: '@types/webpack': specifier: 4.41.32 version: 4.41.32 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4464,6 +4659,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4473,6 +4671,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4495,6 +4696,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4514,6 +4718,9 @@ importers: '@rushstack/heft': specifier: workspace:* version: link:../../apps/heft + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4533,6 +4740,9 @@ importers: '@rushstack/webpack-plugin-utilities': specifier: workspace:* version: link:../webpack-plugin-utilities + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4558,6 +4768,9 @@ importers: '@types/tapable': specifier: 1.0.6 version: 1.0.6 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4577,6 +4790,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4626,6 +4842,9 @@ importers: '@types/webpack': specifier: 4.41.32 version: 4.41.32 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4660,6 +4879,9 @@ importers: '@types/webpack-sources': specifier: 1.4.2 version: 1.4.2 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4684,6 +4906,9 @@ importers: css-loader: specifier: ~6.6.0 version: 6.6.0(webpack@5.98.0) + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4712,6 +4937,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -4746,6 +4974,9 @@ importers: '@types/node': specifier: 20.17.19 version: 20.17.19 + eslint: + specifier: ~9.25.1 + version: 9.25.1 local-node-rig: specifier: workspace:* version: link:../../rigs/local-node-rig @@ -7270,13 +7501,13 @@ packages: resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} dev: true - /@es-joy/jsdoccomment@0.17.0: - resolution: {integrity: sha512-B8DIIWE194KyQFPojUs+THa2XX+1vulwTBjirw6GqcxjtNE60Rreex26svBnV9SNLTuz92ctZx5XQE1H7yOxgA==} - engines: {node: ^12 || ^14 || ^16 || ^17} + /@es-joy/jsdoccomment@0.49.0: + resolution: {integrity: sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==} + engines: {node: '>=16'} dependencies: - comment-parser: 1.3.0 - esquery: 1.5.0 - jsdoc-type-pratt-parser: 2.2.5 + comment-parser: 1.4.1 + esquery: 1.6.0 + jsdoc-type-pratt-parser: 4.1.0 dev: false /@esbuild/aix-ppc64@0.20.2: @@ -7534,13 +7765,46 @@ packages: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 + /@eslint-community/eslint-utils@4.4.0(eslint@9.25.1): + 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: 9.25.1 + eslint-visitor-keys: 3.4.3 + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@0.1.3: - resolution: {integrity: sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==} - engines: {node: ^10.12.0 || >=12.0.0} + /@eslint-community/regexpp@4.12.1: + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + /@eslint/config-array@0.20.0: + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@eslint/config-helpers@0.2.1: + resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + /@eslint/core@0.13.0: + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@types/json-schema': 7.0.15 + + /@eslint/eslintrc@0.1.3: + resolution: {integrity: sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: ajv: 6.12.6 debug: 4.4.0 @@ -7606,13 +7870,13 @@ packages: transitivePeerDependencies: - supports-color - /@eslint/eslintrc@3.0.2: - resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + /@eslint/eslintrc@3.3.1: + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) - espree: 10.0.1 + debug: 4.4.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 @@ -7621,12 +7885,26 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true /@eslint/js@8.57.0: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/js@9.25.1: + resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + /@eslint/object-schema@2.1.6: + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + /@eslint/plugin-kit@0.2.8: + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@eslint/core': 0.13.0 + levn: 0.4.1 + /@fastify/ajv-compiler@1.1.0: resolution: {integrity: sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==} dependencies: @@ -9081,6 +9359,17 @@ packages: csstype: 3.1.3 dev: false + /@humanfs/core@0.19.1: + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + /@humanfs/node@0.16.6: + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + /@humanwhocodes/config-array@0.10.7: resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} engines: {node: '>=10.10.0'} @@ -9107,6 +9396,7 @@ packages: /@humanwhocodes/config-array@0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 debug: 4.4.0 @@ -9144,6 +9434,14 @@ packages: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} deprecated: Use @eslint/object-schema instead + /@humanwhocodes/retry@0.3.1: + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + /@humanwhocodes/retry@0.4.2: + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -10463,6 +10761,10 @@ packages: engines: {node: '>=14.0.0'} dev: true + /@rtsao/scc@1.1.0: + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + dev: false + /@rushstack/eslint-config@3.7.1(eslint@7.11.0)(typescript@5.8.2): resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} peerDependencies: @@ -11141,7 +11443,7 @@ packages: ci-info: 3.9.0 conf: 10.2.0 constructs: 10.0.130 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 dendriform-immer-patch-optimiser: 2.1.3(immer@9.0.21) dotenv: 10.0.0 dotenv-expand: 5.1.0 @@ -11668,7 +11970,7 @@ packages: '@storybook/api': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@storybook/client-logger': 6.4.22 '@storybook/components': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.4.22(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/core-common': 6.4.22(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/node-logger': 6.4.22 '@storybook/store': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) @@ -11746,17 +12048,17 @@ packages: '@mdx-js/react': 1.6.22(react@17.0.2) '@storybook/addons': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@storybook/api': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@storybook/builder-webpack4': 6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/builder-webpack4': 6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/client-logger': 6.4.22 '@storybook/components': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core': 6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0) + '@storybook/core': 6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0) '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/postinstall': 6.4.22 '@storybook/preview-web': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@storybook/react': 6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/react': 6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/source-loader': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@storybook/store': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@storybook/theming': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) @@ -12051,7 +12353,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/builder-webpack4@6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): + /@storybook/builder-webpack4@6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): resolution: {integrity: sha512-A+GgGtKGnBneRFSFkDarUIgUTI8pYFdLmUVKEAGdh2hL+vLXAz9A46sEY7C8LQ85XWa8TKy3OTDxqR4+4iWj3A==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -12089,7 +12391,7 @@ packages: '@storybook/client-api': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@storybook/client-logger': 6.4.22 '@storybook/components': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.4.22(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/core-common': 6.4.22(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/core-events': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/preview-web': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) @@ -12181,7 +12483,7 @@ packages: '@babel/core': 7.20.12 '@babel/preset-env': 7.24.0(@babel/core@7.20.12) '@storybook/codemod': 6.4.22(@babel/preset-env@7.24.0) - '@storybook/core-common': 6.4.22(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/core-common': 6.4.22(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/csf-tools': 6.4.22 '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 @@ -12266,7 +12568,7 @@ packages: '@storybook/csf-tools': 6.4.22 '@storybook/node-logger': 6.4.22 core-js: 3.36.0 - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 globby: 11.1.0 jscodeshift: 0.13.1(@babel/preset-env@7.24.0) lodash: 4.17.21 @@ -12353,7 +12655,7 @@ packages: - '@types/react' dev: true - /@storybook/core-common@6.4.22(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): + /@storybook/core-common@6.4.22(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): resolution: {integrity: sha512-PD3N/FJXPNRHeQS2zdgzYFtqPLdi3MLwAicbnw+U3SokcsspfsAuyYHZOYZgwO8IAEKy6iCc7TpBdiSJZ/vAKQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -12396,7 +12698,7 @@ packages: express: 4.20.0 file-system-cache: 1.1.0 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.8.2)(webpack@4.47.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.25.1)(typescript@5.8.2)(webpack@4.47.0) fs-extra: 9.1.0 glob: 7.2.3 handlebars: 4.7.8 @@ -12429,7 +12731,7 @@ packages: core-js: 3.36.0 dev: true - /@storybook/core-server@6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): + /@storybook/core-server@6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): resolution: {integrity: sha512-wFh3e2fa0un1d4+BJP+nd3FVWUO7uHTqv3OGBfOmzQMKp4NU1zaBNdSQG7Hz6mw0fYPBPZgBjPfsJRwIYLLZyw==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -12446,13 +12748,13 @@ packages: optional: true dependencies: '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-webpack4': 6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/builder-webpack4': 6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/core-client': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0) - '@storybook/core-common': 6.4.22(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/core-common': 6.4.22(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/core-events': 6.4.22 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.22 - '@storybook/manager-webpack4': 6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/manager-webpack4': 6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/node-logger': 6.4.22 '@storybook/semver': 7.3.2 '@storybook/store': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) @@ -12502,7 +12804,7 @@ packages: - webpack-command dev: true - /@storybook/core@6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0): + /@storybook/core@6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0): resolution: {integrity: sha512-KZYJt7GM5NgKFXbPRZZZPEONZ5u/tE/cRbMdkn/zWN3He8+VP+65/tz8hbriI/6m91AWVWkBKrODSkeq59NgRA==} peerDependencies: '@storybook/builder-webpack5': 6.4.22 @@ -12517,7 +12819,7 @@ packages: optional: true dependencies: '@storybook/core-client': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0) - '@storybook/core-server': 6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/core-server': 6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) typescript: 5.8.2 @@ -12565,7 +12867,7 @@ packages: lodash: 4.17.21 dev: true - /@storybook/manager-webpack4@6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): + /@storybook/manager-webpack4@6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): resolution: {integrity: sha512-nzhDMJYg0vXdcG0ctwE6YFZBX71+5NYaTGkxg3xT7gbgnP1YFXn9gVODvgq3tPb3gcRapjyOIxUa20rV+r8edA==} peerDependencies: react: ^16.8.0 || ^17.0.0 @@ -12580,7 +12882,7 @@ packages: '@babel/preset-react': 7.23.3(@babel/core@7.20.12) '@storybook/addons': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@storybook/core-client': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0) - '@storybook/core-common': 6.4.22(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/core-common': 6.4.22(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/node-logger': 6.4.22 '@storybook/theming': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) '@storybook/ui': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) @@ -12687,7 +12989,7 @@ packages: - supports-color dev: true - /@storybook/react@6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): + /@storybook/react@6.4.22(@babel/core@7.20.12)(@types/node@20.17.19)(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2): resolution: {integrity: sha512-5BFxtiguOcePS5Ty/UoH7C6odmvBYIZutfiy4R3Ua6FYmtxac5vP9r5KjCz1IzZKT8mCf4X+PuK1YvDrPPROgQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -12709,8 +13011,8 @@ packages: '@babel/preset-react': 7.23.3(@babel/core@7.20.12) '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack@4.47.0) '@storybook/addons': 6.4.22(@types/react@17.0.74)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core': 6.4.22(@types/react@17.0.74)(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0) - '@storybook/core-common': 6.4.22(eslint@8.57.0)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) + '@storybook/core': 6.4.22(@types/react@17.0.74)(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2)(webpack@4.47.0) + '@storybook/core-common': 6.4.22(eslint@9.25.1)(react-dom@17.0.2)(react@17.0.2)(typescript@5.8.2) '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/node-logger': 6.4.22 '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0(typescript@5.8.2)(webpack@4.47.0) @@ -13180,6 +13482,13 @@ packages: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 + /@types/eslint@9.6.1: + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + dependencies: + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + dev: true + /@types/estree@1.0.6: resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -13325,6 +13634,10 @@ packages: /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + /@types/json-stable-stringify-without-jsonify@1.0.2: + resolution: {integrity: sha512-X/Kn5f5fv1KBGqGDaegrj72Dlh+qEKN3ELwMAB6RdVlVzkf6NTeEnJpgR/Hr0AlpgTlYq/Vd0U3f79lavn6aDA==} + dev: true + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: false @@ -13681,7 +13994,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 6.19.1(eslint@7.11.0)(typescript@5.8.2) '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) '@typescript-eslint/type-utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) @@ -13710,7 +14023,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 6.19.1(eslint@7.30.0)(typescript@5.8.2) '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) '@typescript-eslint/type-utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) @@ -13739,7 +14052,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 6.19.1(eslint@7.7.0)(typescript@5.8.2) '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) '@typescript-eslint/type-utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) @@ -13768,7 +14081,7 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 6.19.1(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) '@typescript-eslint/type-utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) @@ -13794,7 +14107,7 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 8.26.1(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 8.26.1(typescript@4.9.5) '@typescript-eslint/type-utils': 8.26.1(eslint@8.57.0)(typescript@4.9.5) @@ -13818,7 +14131,7 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' dependencies: - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/regexpp': 4.12.1 '@typescript-eslint/parser': 8.26.1(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.26.1(typescript@5.8.2) '@typescript-eslint/type-utils': 8.26.1(eslint@8.57.0)(typescript@5.8.2) @@ -13834,6 +14147,30 @@ packages: - supports-color dev: false + /@typescript-eslint/eslint-plugin@8.31.0(@typescript-eslint/parser@8.31.0)(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==} + 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: '>=4.8.4 <5.9.0' + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/type-utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) + eslint: 9.25.1 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: false + /@typescript-eslint/parser@6.19.1(eslint@7.11.0)(typescript@5.8.2): resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13848,7 +14185,7 @@ packages: '@typescript-eslint/types': 6.19.1(typescript@5.8.2) '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 7.11.0 typescript: 5.8.2 transitivePeerDependencies: @@ -13869,7 +14206,7 @@ packages: '@typescript-eslint/types': 6.19.1(typescript@5.8.2) '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 7.30.0 typescript: 5.8.2 transitivePeerDependencies: @@ -13890,7 +14227,7 @@ packages: '@typescript-eslint/types': 6.19.1(typescript@5.8.2) '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 7.7.0 typescript: 5.8.2 transitivePeerDependencies: @@ -13911,7 +14248,7 @@ packages: '@typescript-eslint/types': 6.19.1(typescript@5.8.2) '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 8.57.0 typescript: 5.8.2 transitivePeerDependencies: @@ -13929,7 +14266,7 @@ packages: '@typescript-eslint/types': 8.26.1(typescript@4.9.5) '@typescript-eslint/typescript-estree': 8.26.1(typescript@4.9.5) '@typescript-eslint/visitor-keys': 8.26.1(typescript@4.9.5) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 8.57.0 typescript: 4.9.5 transitivePeerDependencies: @@ -13947,22 +14284,57 @@ packages: '@typescript-eslint/types': 8.26.1(typescript@5.8.2) '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 + eslint: 8.57.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/parser@8.31.0(eslint@8.57.0)(typescript@5.8.2): + resolution: {integrity: sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + dependencies: + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) + debug: 4.4.0 eslint: 8.57.0 typescript: 5.8.2 transitivePeerDependencies: - supports-color - /@typescript-eslint/rule-tester@8.26.1(eslint@8.57.0)(typescript@5.8.2): - resolution: {integrity: sha512-hiCEpOw/ctCBias5sYNShkdtSum5Hix7nyXQs9bqr1no1+oD3mgYSy0iZfkx8MVA+86PLr+Hr3OUbOx3k2YAEg==} + /@typescript-eslint/parser@8.31.0(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + dependencies: + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) + debug: 4.4.0 + eslint: 9.25.1 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/rule-tester@8.31.0(eslint@8.57.0)(typescript@5.8.2): + resolution: {integrity: sha512-17Dn3vpNtHqxyjOieODNKBAyxH8WNvkfZAzkHR2VA0cW/49YcmHF3YyenNI3wfF05iZJ9MWnjU2kBGz0gDavfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 dependencies: '@types/semver': 7.5.0 - '@typescript-eslint/parser': 8.26.1(eslint@8.57.0)(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2) - '@typescript-eslint/utils': 8.26.1(eslint@8.57.0)(typescript@5.8.2) + '@typescript-eslint/parser': 8.31.0(eslint@8.57.0)(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.0(eslint@8.57.0)(typescript@5.8.2) ajv: 6.12.6 eslint: 8.57.0 json-stable-stringify-without-jsonify: 1.0.1 @@ -13981,6 +14353,7 @@ packages: '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) transitivePeerDependencies: - typescript + dev: true /@typescript-eslint/scope-manager@8.26.1(typescript@4.9.5): resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} @@ -14000,6 +14373,16 @@ packages: '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) transitivePeerDependencies: - typescript + dev: false + + /@typescript-eslint/scope-manager@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) + transitivePeerDependencies: + - typescript /@typescript-eslint/type-utils@6.19.1(eslint@7.11.0)(typescript@5.8.2): resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} @@ -14115,6 +14498,23 @@ packages: - supports-color dev: false + /@typescript-eslint/type-utils@8.31.0(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + dependencies: + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.31.0(eslint@9.25.1)(typescript@5.8.2) + debug: 4.4.0 + eslint: 9.25.1 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: false + /@typescript-eslint/types@6.19.1(typescript@5.8.2): resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -14122,6 +14522,7 @@ packages: typescript: '*' dependencies: typescript: 5.8.2 + dev: true /@typescript-eslint/types@8.26.1(typescript@4.9.5): resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} @@ -14139,6 +14540,15 @@ packages: typescript: '*' dependencies: typescript: 5.8.2 + dev: false + + /@typescript-eslint/types@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + dependencies: + typescript: 5.8.2 /@typescript-eslint/typescript-estree@6.19.1(typescript@5.8.2): resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} @@ -14160,6 +14570,7 @@ packages: typescript: 5.8.2 transitivePeerDependencies: - supports-color + dev: true /@typescript-eslint/typescript-estree@8.26.1(typescript@4.9.5): resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} @@ -14169,7 +14580,7 @@ packages: dependencies: '@typescript-eslint/types': 8.26.1(typescript@4.9.5) '@typescript-eslint/visitor-keys': 8.26.1(typescript@4.9.5) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -14188,6 +14599,25 @@ packages: dependencies: '@typescript-eslint/types': 8.26.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) + debug: 4.4.0 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@typescript-eslint/typescript-estree@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + dependencies: + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.31.0(typescript@5.8.2) debug: 4.3.4(supports-color@8.1.1) fast-glob: 3.3.2 is-glob: 4.0.3 @@ -14272,6 +14702,7 @@ packages: transitivePeerDependencies: - supports-color - typescript + dev: true /@typescript-eslint/utils@8.26.1(eslint@8.57.0)(typescript@4.9.5): resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} @@ -14305,6 +14736,40 @@ packages: typescript: 5.8.2 transitivePeerDependencies: - supports-color + dev: false + + /@typescript-eslint/utils@8.31.0(eslint@8.57.0)(typescript@5.8.2): + resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + eslint: 8.57.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + /@typescript-eslint/utils@8.31.0(eslint@9.25.1)(typescript@5.8.2): + resolution: {integrity: sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.25.1) + '@typescript-eslint/scope-manager': 8.31.0(typescript@5.8.2) + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 8.31.0(typescript@5.8.2) + eslint: 9.25.1 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: false /@typescript-eslint/visitor-keys@6.19.1(typescript@5.8.2): resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} @@ -14314,6 +14779,7 @@ packages: eslint-visitor-keys: 3.4.3 transitivePeerDependencies: - typescript + dev: true /@typescript-eslint/visitor-keys@8.26.1(typescript@4.9.5): resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} @@ -14333,6 +14799,16 @@ packages: eslint-visitor-keys: 4.2.0 transitivePeerDependencies: - typescript + dev: false + + /@typescript-eslint/visitor-keys@8.31.0(typescript@5.8.2): + resolution: {integrity: sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + '@typescript-eslint/types': 8.31.0(typescript@5.8.2) + eslint-visitor-keys: 4.2.0 + transitivePeerDependencies: + - typescript /@ungap/structured-clone@1.3.0: resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -14733,20 +15209,20 @@ packages: /airbnb-js-shims@2.2.1: resolution: {integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==} dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 + array.prototype.flatmap: 1.3.3 es5-shim: 4.6.7 es6-shim: 0.35.8 function.prototype.name: 1.1.6 globalthis: 1.0.3 - object.entries: 1.1.8 - object.fromentries: 2.0.7 + object.entries: 1.1.9 + object.fromentries: 2.0.8 object.getownpropertydescriptors: 2.1.7 - object.values: 1.2.0 + object.values: 1.2.1 promise.allsettled: 1.0.7 promise.prototype.finally: 3.1.8 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.12 string.prototype.padend: 3.1.5 string.prototype.padstart: 3.1.6 symbol.prototype.description: 1.0.6 @@ -14977,6 +15453,11 @@ packages: resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} dev: false + /are-docs-informative@0.0.2: + resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} + engines: {node: '>=14'} + dev: false + /are-we-there-yet@1.1.7: resolution: {integrity: sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==} dependencies: @@ -15019,6 +15500,13 @@ packages: call-bind: 1.0.7 is-array-buffer: 3.0.4 + /array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + /array-differ@3.0.0: resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==} engines: {node: '>=8'} @@ -15027,13 +15515,14 @@ packages: /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.2 + es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 @@ -15057,6 +15546,31 @@ packages: resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} engines: {node: '>=0.10.0'} + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: false + + /array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + dev: false + /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} @@ -15074,6 +15588,16 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.2 es-shim-unscopables: 1.0.2 + dev: false + + /array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.0.2 /array.prototype.map@1.0.7: resolution: {integrity: sha512-XpcFfLoBEAhezrrNw1V+yLXkE7M6uR7xJEsxbG6c/V9v043qurwVJB9r9UTnoSioFDoz1i1VOydpWGmJpfVZbg==} @@ -15081,7 +15605,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-array-method-boxes-properly: 1.0.0 es-object-atoms: 1.0.0 is-string: 1.0.7 @@ -15097,12 +15621,13 @@ packages: es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 - /array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + /array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 @@ -15113,12 +15638,24 @@ packages: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + /arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} @@ -16044,7 +16581,6 @@ packages: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - dev: false /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} @@ -16056,13 +16592,21 @@ packages: get-intrinsic: 1.2.4 set-function-length: 1.2.2 + /call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + /call-bound@1.0.4: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} dependencies: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - dev: false /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -16569,8 +17113,8 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - /comment-parser@1.3.0: - resolution: {integrity: sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==} + /comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} engines: {node: '>= 12.0.0'} dev: false @@ -16890,6 +17434,14 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + /crypto-browserify@3.12.0: resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} dependencies: @@ -17143,6 +17695,14 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 + /data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + /data-view-byte-length@1.0.1: resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} engines: {node: '>= 0.4'} @@ -17151,6 +17711,14 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 + /data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + /data-view-byte-offset@1.0.0: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} @@ -17159,6 +17727,14 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 + /data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + /date-format@4.0.14: resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} engines: {node: '>=4.0'} @@ -17300,9 +17876,9 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 /define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -17373,7 +17949,7 @@ packages: deps-regex: 0.2.0 findup-sync: 5.0.0 ignore: 5.3.1 - is-core-module: 2.13.1 + is-core-module: 2.16.1 js-yaml: 3.14.1 json5: 2.2.3 lodash: 4.17.21 @@ -17670,7 +18246,6 @@ packages: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - dev: false /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} @@ -17912,6 +18487,62 @@ packages: unbox-primitive: 1.0.2 which-typed-array: 1.1.15 + /es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + /es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} @@ -17919,12 +18550,11 @@ packages: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 /es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} - dev: false /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} @@ -17934,7 +18564,7 @@ packages: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.3 @@ -17944,24 +18574,26 @@ packages: stop-iteration-iterator: 1.0.0 dev: true - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + /es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - iterator.prototype: 1.1.2 - safe-array-concat: 1.1.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 /es-module-lexer@1.4.1: resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} @@ -17977,13 +18609,21 @@ packages: engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 - dev: false /es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + /es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -17992,6 +18632,13 @@ packages: dependencies: hasown: 2.0.2 + /es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: false + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} @@ -18000,6 +18647,14 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 + /es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + /es5-shim@4.6.7: resolution: {integrity: sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==} engines: {node: '>=0.4.0'} @@ -18302,12 +18957,12 @@ packages: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.16.1 resolve: 1.22.8 dev: false - /eslint-module-utils@2.8.1(eslint@8.57.0): - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + /eslint-module-utils@2.12.0(eslint@8.57.0): + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: eslint: '*' @@ -18319,19 +18974,17 @@ packages: eslint: 8.57.0 dev: false - /eslint-plugin-deprecation@2.0.0(eslint@8.57.0)(typescript@5.8.2): - resolution: {integrity: sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==} + /eslint-module-utils@2.12.0(eslint@9.25.1): + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: ^4.2.4 || ^5.0.0 + eslint: '*' + peerDependenciesMeta: + eslint: + optional: true dependencies: - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) - eslint: 8.57.0 - tslib: 2.3.1 - tsutils: 3.21.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color + debug: 3.2.7 + eslint: 9.25.1 dev: false /eslint-plugin-header@3.1.1(eslint@8.57.0): @@ -18342,43 +18995,117 @@ packages: eslint: 8.57.0 dev: false - /eslint-plugin-import@2.25.4(eslint@8.57.0): - resolution: {integrity: sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==} + /eslint-plugin-header@3.1.1(eslint@9.25.1): + resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} + peerDependencies: + eslint: '>=7.7.0' + dependencies: + eslint: 9.25.1 + dev: false + + /eslint-plugin-headers@1.2.1(eslint@9.25.1): + resolution: {integrity: sha512-1L41t3DPrXFP6YLK+sAj0xDMGVHpQwI+uGefDwc1bKP91q65AIZoXzQgI7MjZJxB6sK8/vYhXMD8x0V8xLNxJA==} + engines: {node: ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: '>=7' + dependencies: + eslint: 9.25.1 + dev: false + + /eslint-plugin-import@2.31.0(eslint@8.57.0): + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 dependencies: - array-includes: 3.1.7 + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.2 - debug: 2.6.9 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(eslint@8.57.0) - has: 1.0.4 - is-core-module: 2.13.1 + eslint-module-utils: 2.12.0(eslint@8.57.0) + hasown: 2.0.2 + is-core-module: 2.16.1 is-glob: 4.0.3 - minimatch: 3.0.8 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 object.values: 1.2.0 - resolve: 1.22.8 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 dev: false - /eslint-plugin-jsdoc@37.6.1(eslint@8.57.0): - resolution: {integrity: sha512-Y9UhH9BQD40A9P1NOxj59KrSLZb9qzsqYkLCZv30bNeJ7C9eaumTWhh9beiGqvK7m821Hj1dTsZ5LOaFIUTeTg==} - engines: {node: ^12 || ^14 || ^16 || ^17} + /eslint-plugin-import@2.31.0(eslint@9.25.1): + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 dependencies: - '@es-joy/jsdoccomment': 0.17.0 - comment-parser: 1.3.0 - debug: 4.3.4(supports-color@8.1.1) + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 9.25.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(eslint@9.25.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 + tsconfig-paths: 3.15.0 + dev: false + + /eslint-plugin-jsdoc@50.6.11(eslint@8.57.0): + resolution: {integrity: sha512-k4+MnBCGR8cuIB5MZ++FGd4gbXxjob2rX1Nq0q3nWFF4xSGZENTgTLZSjb+u9B8SAnP6lpGV2FJrBjllV3pVSg==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + dependencies: + '@es-joy/jsdoccomment': 0.49.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.4.0 escape-string-regexp: 4.0.0 eslint: 8.57.0 - esquery: 1.5.0 - regextras: 0.8.0 - semver: 7.5.4 - spdx-expression-parse: 3.0.1 + espree: 10.3.0 + esquery: 1.6.0 + parse-imports-exports: 0.2.4 + semver: 7.6.3 + spdx-expression-parse: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /eslint-plugin-jsdoc@50.6.11(eslint@9.25.1): + resolution: {integrity: sha512-k4+MnBCGR8cuIB5MZ++FGd4gbXxjob2rX1Nq0q3nWFF4xSGZENTgTLZSjb+u9B8SAnP6lpGV2FJrBjllV3pVSg==} + engines: {node: '>=18'} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + dependencies: + '@es-joy/jsdoccomment': 0.49.0 + are-docs-informative: 0.0.2 + comment-parser: 1.4.1 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint: 9.25.1 + espree: 10.3.0 + esquery: 1.6.0 + parse-imports-exports: 0.2.4 + semver: 7.6.3 + spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color dev: false @@ -18418,38 +19145,57 @@ packages: dependencies: eslint: 8.57.0 - /eslint-plugin-react-hooks@4.3.0(eslint@8.57.0): - resolution: {integrity: sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==} + /eslint-plugin-promise@7.2.1(eslint@9.25.1): + resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.25.1) + eslint: 9.25.1 + dev: false + + /eslint-plugin-react-hooks@5.2.0(eslint@8.57.0): + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} engines: {node: '>=10'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 dependencies: eslint: 8.57.0 dev: false + /eslint-plugin-react-hooks@5.2.0(eslint@9.25.1): + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + dependencies: + eslint: 9.25.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 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.2.1 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.entries: 1.1.9 + object.fromentries: 2.0.8 object.hasown: 1.1.3 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.12 dev: true /eslint-plugin-react@7.33.2(eslint@7.30.0): @@ -18458,23 +19204,23 @@ packages: 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 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.2.1 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.entries: 1.1.9 + object.fromentries: 2.0.8 object.hasown: 1.1.3 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.12 dev: true /eslint-plugin-react@7.33.2(eslint@7.7.0): @@ -18483,23 +19229,23 @@ packages: 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 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.2.1 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.entries: 1.1.9 + object.fromentries: 2.0.8 object.hasown: 1.1.3 - object.values: 1.2.0 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.12 dev: true /eslint-plugin-react@7.33.2(eslint@8.57.0): @@ -18508,23 +19254,50 @@ packages: 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 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 + es-iterator-helpers: 1.2.1 eslint: 8.57.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.entries: 1.1.9 + object.fromentries: 2.0.8 object.hasown: 1.1.3 - object.values: 1.2.0 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + + /eslint-plugin-react@7.37.5(eslint@9.25.1): + resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.25.1 + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + dev: false /eslint-plugin-tsdoc@0.3.0: resolution: {integrity: sha512-0MuFdBrrJVBjT/gyhkP2BqpD0np1NxNLfQ38xXDlSs/KVVpKI2A6vN7jx2Rve/CyUsvOsMGwp9KKrinv7q9g3A==} @@ -18560,6 +19333,13 @@ packages: esrecurse: 4.3.0 estraverse: 5.3.0 + /eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + /eslint-utils@2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} @@ -18598,21 +19378,22 @@ packages: /eslint@7.11.0: resolution: {integrity: sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==} engines: {node: ^10.12.0 || >=12.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: '@babel/code-frame': 7.23.5 '@eslint/eslintrc': 0.1.3 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + cross-spawn: 7.0.6 + debug: 4.4.0 doctrine: 3.0.0 enquirer: 2.4.1 eslint-scope: 5.1.1 eslint-utils: 2.1.0 eslint-visitor-keys: 2.1.0 espree: 7.3.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 file-entry-cache: 5.0.1 functional-red-black-tree: 1.0.1 @@ -18644,6 +19425,7 @@ packages: /eslint@7.30.0: resolution: {integrity: sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==} engines: {node: ^10.12.0 || >=12.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: '@babel/code-frame': 7.12.11 @@ -18651,8 +19433,8 @@ packages: '@humanwhocodes/config-array': 0.5.0 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + cross-spawn: 7.0.6 + debug: 4.4.0 doctrine: 3.0.0 enquirer: 2.4.1 escape-string-regexp: 4.0.0 @@ -18660,7 +19442,7 @@ packages: eslint-utils: 2.1.0 eslint-visitor-keys: 2.1.0 espree: 7.3.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -18683,7 +19465,7 @@ packages: semver: 7.5.4 strip-ansi: 6.0.1 strip-json-comments: 3.1.1 - table: 6.8.1 + table: 6.9.0 text-table: 0.2.0 v8-compile-cache: 2.4.0 transitivePeerDependencies: @@ -18693,20 +19475,21 @@ packages: /eslint@7.7.0: resolution: {integrity: sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==} engines: {node: ^10.12.0 || >=12.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: '@babel/code-frame': 7.23.5 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + cross-spawn: 7.0.6 + debug: 4.4.0 doctrine: 3.0.0 enquirer: 2.4.1 eslint-scope: 5.1.1 eslint-utils: 2.1.0 eslint-visitor-keys: 1.3.0 espree: 7.3.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 file-entry-cache: 5.0.1 functional-red-black-tree: 1.0.1 @@ -18877,14 +19660,61 @@ packages: - supports-color dev: true - /espree@10.0.1: - resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + /eslint@9.25.1: + resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.25.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.1 + '@eslint/core': 0.13.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.25.1 + '@eslint/plugin-kit': 0.2.8 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + transitivePeerDependencies: + - supports-color + + /espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: acorn: 8.14.0 acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 4.2.0 - dev: true /espree@7.3.1: resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} @@ -18914,6 +19744,12 @@ packages: dependencies: estraverse: 5.3.0 + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -19002,7 +19838,7 @@ packages: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -19336,6 +20172,12 @@ packages: dependencies: flat-cache: 3.2.0 + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.1 + /file-loader@6.0.0(webpack@4.47.0): resolution: {integrity: sha512-/aMOAYEFXDdjG0wytpTL5YQLfZnnTmLNjn+AIrJ/6HVnTfDqLsVKUUwkDf4I4kgex36BvjuXEn/TX9B/1ESyqQ==} engines: {node: '>= 10.13.0'} @@ -19496,6 +20338,13 @@ packages: keyv: 4.5.4 rimraf: 3.0.2 + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true @@ -19537,6 +20386,12 @@ packages: dependencies: is-callable: 1.2.7 + /for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + /for-in@1.0.2: resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} engines: {node: '>=0.10.0'} @@ -19545,7 +20400,7 @@ packages: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.6 signal-exit: 3.0.7 dev: true @@ -19562,7 +20417,7 @@ packages: worker-rpc: 0.1.1 dev: true - /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.8.2)(webpack@4.47.0): + /fork-ts-checker-webpack-plugin@6.5.3(eslint@9.25.1)(typescript@5.8.2)(webpack@4.47.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -19582,7 +20437,7 @@ packages: chokidar: 3.6.0 cosmiconfig: 6.0.0 deepmerge: 4.3.1 - eslint: 8.57.0 + eslint: 9.25.1 fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.4.3 @@ -19766,9 +20621,20 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 functions-have-names: 1.2.3 + /function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + /functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true @@ -19852,7 +20718,6 @@ packages: has-symbols: 1.1.0 hasown: 2.0.2 math-intrinsics: 1.1.0 - dev: false /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -19869,7 +20734,6 @@ packages: dependencies: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - dev: false /get-stream@4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} @@ -19894,7 +20758,15 @@ packages: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 + + /get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 /get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} @@ -20058,7 +20930,6 @@ packages: /globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - dev: true /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} @@ -20066,6 +20937,13 @@ packages: dependencies: define-properties: 1.2.1 + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -20094,12 +20972,11 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 /gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - dev: false /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} @@ -20193,6 +21070,12 @@ packages: resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} + /has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} @@ -20200,7 +21083,6 @@ packages: /has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} - dev: false /has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} @@ -20243,11 +21125,6 @@ packages: resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} engines: {node: '>=8'} - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - dev: false - /hash-base@3.0.4: resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} engines: {node: '>=4'} @@ -20821,6 +21698,14 @@ packages: hasown: 2.0.2 side-channel: 1.0.6 + /internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -20893,7 +21778,15 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 + + /is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -20909,6 +21802,12 @@ packages: dependencies: has-bigints: 1.0.2 + /is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + dependencies: + has-bigints: 1.0.2 + /is-binary-path@1.0.1: resolution: {integrity: sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==} engines: {node: '>=0.10.0'} @@ -20930,6 +21829,13 @@ packages: call-bind: 1.0.7 has-tostringtag: 1.0.2 + /is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + /is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} @@ -20953,6 +21859,12 @@ packages: dependencies: hasown: 2.0.2 + /is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + /is-data-descriptor@1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} engines: {node: '>= 0.4'} @@ -20965,12 +21877,27 @@ packages: dependencies: is-typed-array: 1.1.13 + /is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 + /is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + /is-decimal@1.0.4: resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} dev: true @@ -21028,7 +21955,13 @@ packages: /is-finalizationregistry@1.0.2: resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + + /is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 /is-fullwidth-code-point@1.0.0: resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} @@ -21123,6 +22056,13 @@ packages: dependencies: has-tostringtag: 1.0.2 + /is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + /is-number@3.0.0: resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} engines: {node: '>=0.10.0'} @@ -21184,6 +22124,15 @@ packages: call-bind: 1.0.7 has-tostringtag: 1.0.2 + /is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + /is-set@2.0.3: resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} engines: {node: '>= 0.4'} @@ -21194,6 +22143,12 @@ packages: dependencies: call-bind: 1.0.7 + /is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + /is-stream@1.1.0: resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} engines: {node: '>=0.10.0'} @@ -21209,6 +22164,13 @@ packages: dependencies: has-tostringtag: 1.0.2 + /is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} @@ -21222,12 +22184,26 @@ packages: dependencies: has-symbols: 1.0.3 + /is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + /is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.15 + /is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.19 + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} @@ -21244,12 +22220,18 @@ packages: dependencies: call-bind: 1.0.7 + /is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + /is-weakset@2.0.3: resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + get-intrinsic: 1.3.0 /is-whitespace-character@1.0.4: resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} @@ -21376,13 +22358,15 @@ packages: iterate-iterator: 1.0.2 dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + /iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 + define-data-property: 1.1.4 + es-object-atoms: 1.0.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 set-function-name: 2.0.2 /jest-changed-files@29.7.0: @@ -22164,8 +23148,8 @@ packages: - supports-color dev: true - /jsdoc-type-pratt-parser@2.2.5: - resolution: {integrity: sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==} + /jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} dev: false @@ -22305,10 +23289,10 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.5 - object.values: 1.2.0 + object.values: 1.2.1 /jszip@2.7.0: resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==} @@ -22835,7 +23819,6 @@ packages: /math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - dev: false /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -23116,6 +24099,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + dev: true /minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} @@ -23514,7 +24498,7 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.13.1 + is-core-module: 2.16.1 semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: false @@ -23670,7 +24654,6 @@ packages: /object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - dev: false /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -23691,21 +24674,34 @@ packages: has-symbols: 1.0.3 object-keys: 1.1.1 - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + /object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.0.0 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + /object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.2 + es-object-atoms: 1.0.0 /object.getownpropertydescriptors@2.1.7: resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} @@ -23717,11 +24713,20 @@ packages: es-abstract: 1.23.2 safe-array-concat: 1.1.2 + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.2 + dev: false + /object.hasown@1.1.3: resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} dependencies: define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 /object.pick@1.3.0: resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} @@ -23736,6 +24741,16 @@ packages: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 + dev: false + + /object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 /objectorarray@1.0.5: resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} @@ -23854,6 +24869,14 @@ packages: resolution: {integrity: sha512-1nB/B5kaakJuHXaLXLRK0bUIilWhUGT6q5g+l2s5vqYdLle/sd0kscBHkQC1kuuDg9p9WR4MTdySDOPbeL/86g==} dev: true + /own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + /p-all@2.1.0: resolution: {integrity: sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==} engines: {node: '>=6'} @@ -24032,6 +25055,12 @@ packages: is-hexadecimal: 1.0.4 dev: true + /parse-imports-exports@0.2.4: + resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==} + dependencies: + parse-statements: 1.0.11 + dev: false + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -24052,6 +25081,10 @@ packages: semver: 5.7.2 dev: true + /parse-statements@1.0.11: + resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==} + dev: false + /parse5-htmlparser2-tree-adapter@7.0.0: resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} dependencies: @@ -24841,8 +25874,8 @@ packages: array.prototype.map: 1.0.7 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 - get-intrinsic: 1.2.4 + es-abstract: 1.23.9 + get-intrinsic: 1.3.0 iterate-value: 1.0.2 dev: true @@ -24852,7 +25885,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-errors: 1.3.0 set-function-name: 2.0.2 dev: true @@ -25532,16 +26565,29 @@ packages: dependencies: '@babel/runtime': 7.24.0 + /reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + /reflect.getprototypeof@1.0.6: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 which-builtin-type: 1.1.3 /refractor@3.6.0: @@ -25592,6 +26638,17 @@ packages: es-errors: 1.3.0 set-function-name: 2.0.2 + /regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} @@ -25609,11 +26666,6 @@ packages: unicode-match-property-value-ecmascript: 2.1.0 dev: true - /regextras@0.8.0: - resolution: {integrity: sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==} - engines: {node: '>=0.1.14'} - dev: false - /registry-auth-token@4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} @@ -25804,7 +26856,7 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -25939,10 +26991,20 @@ packages: engines: {node: '>=0.4'} dependencies: call-bind: 1.0.7 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 has-symbols: 1.0.3 isarray: 2.0.5 + /safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + /safe-buffer@5.1.1: resolution: {integrity: sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==} dev: true @@ -25953,6 +27015,13 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -25961,6 +27030,14 @@ packages: es-errors: 1.3.0 is-regex: 1.1.4 + /safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + /safe-regex2@2.0.0: resolution: {integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==} dependencies: @@ -26531,8 +27608,8 @@ packages: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 has-property-descriptors: 1.0.2 /set-function-name@2.0.2: @@ -26549,6 +27626,14 @@ packages: engines: {node: '>=0.10.0'} dev: false + /set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + /set-value@2.0.1: resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} engines: {node: '>=0.10.0'} @@ -26627,7 +27712,6 @@ packages: dependencies: es-errors: 1.3.0 object-inspect: 1.13.4 - dev: false /side-channel-map@1.0.1: resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} @@ -26637,7 +27721,6 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.3.0 object-inspect: 1.13.4 - dev: false /side-channel-weakmap@1.0.2: resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} @@ -26648,7 +27731,6 @@ packages: get-intrinsic: 1.3.0 object-inspect: 1.13.4 side-channel-map: 1.0.1 - dev: false /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} @@ -26668,7 +27750,6 @@ packages: side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - dev: false /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -26887,6 +27968,13 @@ packages: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.17 + /spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.17 + dev: false + /spdx-license-ids@3.0.17: resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} @@ -27097,18 +28185,23 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + /string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 - es-abstract: 1.23.2 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 - side-channel: 1.0.6 + side-channel: 1.1.0 /string.prototype.padend@3.1.5: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} @@ -27116,7 +28209,7 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 dev: true /string.prototype.padstart@3.1.6: @@ -27125,17 +28218,36 @@ packages: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 dev: true + /string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.2 + dev: false + + /string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.0.0 + has-property-descriptors: 1.0.2 + /string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 es-object-atoms: 1.0.0 /string.prototype.trimend@1.0.8: @@ -27145,12 +28257,29 @@ packages: define-properties: 1.2.1 es-object-atoms: 1.0.0 + /string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -27358,8 +28487,8 @@ packages: string-width: 3.1.0 dev: true - /table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + /table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} engines: {node: '>=10.0.0'} dependencies: ajv: 8.13.0 @@ -27758,6 +28887,7 @@ packages: typescript: '>=4.2.0' dependencies: typescript: 5.8.2 + dev: true /ts-api-utils@2.0.1(typescript@4.9.5): resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} @@ -27957,16 +29087,6 @@ packages: typescript: 5.8.2 dev: true - /tsutils@3.21.0(typescript@5.8.2): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.8.2 - dev: false - /tty-browserify@0.0.0: resolution: {integrity: sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==} @@ -28041,16 +29161,34 @@ packages: es-errors: 1.3.0 is-typed-array: 1.1.13 + /typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + /typed-array-byte-length@1.0.1: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-proto: 1.0.3 is-typed-array: 1.1.13 + /typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + /typed-array-byte-offset@1.0.2: resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} @@ -28058,21 +29196,44 @@ packages: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-proto: 1.0.3 is-typed-array: 1.1.13 + /typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + /typed-array-length@1.0.5: resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + /typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + for-each: 0.3.3 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.6 + /typed-rest-client@1.8.11: resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} dependencies: @@ -28132,6 +29293,15 @@ packages: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + /unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + has-bigints: 1.0.2 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + /underscore@1.13.6: resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} dev: true @@ -29049,22 +30219,50 @@ packages: is-string: 1.0.7 is-symbol: 1.0.4 + /which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + /which-builtin-type@1.1.3: resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} engines: {node: '>= 0.4'} dependencies: - function.prototype.name: 1.1.6 + function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.19 + + /which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.0.10 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 /which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} @@ -29094,7 +30292,19 @@ packages: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + /which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 /which@1.3.1: diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index d3f09b6dec3..af05d8bd856 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": "d132a98928f381f6aae3c1da00a3939f2d38dafe", - "preferredVersionsHash": "54149ea3f01558a859c96dee2052b797d4defe68" + "pnpmShrinkwrapHash": "5e82786d93854afef5cb18320f50bee9a22a2c93", + "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } diff --git a/eslint/eslint-bulk/.eslintrc.js b/eslint/eslint-bulk/.eslintrc.js deleted file mode 100644 index a1235bc5ed3..00000000000 --- a/eslint/eslint-bulk/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-console': 'off' - } - } - ] -}; diff --git a/eslint/eslint-bulk/eslint.config.js b/eslint/eslint-bulk/eslint.config.js new file mode 100644 index 00000000000..ceb5a1bee40 --- /dev/null +++ b/eslint/eslint-bulk/eslint.config.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + }, + rules: { + 'no-console': 'off' + } + } +]; diff --git a/eslint/eslint-bulk/src/start.ts b/eslint/eslint-bulk/src/start.ts index c591b09c09f..3e650167b08 100644 --- a/eslint/eslint-bulk/src/start.ts +++ b/eslint/eslint-bulk/src/start.ts @@ -10,6 +10,14 @@ import { import * as process from 'process'; import * as fs from 'fs'; +const ESLINT_CONFIG_FILES: string[] = [ + 'eslint.config.js', + 'eslint.config.cjs', + 'eslint.config.mjs', + '.eslintrc.js', + '.eslintrc.cjs' +]; + interface IEslintBulkConfigurationJson { /** * `@rushtack/eslint`-bulk should report an error if its package.json is older than this number @@ -22,18 +30,19 @@ interface IEslintBulkConfigurationJson { } function findPatchPath(): string { - const candidatePaths: string[] = [`${process.cwd()}/.eslintrc.js`, `${process.cwd()}/.eslintrc.cjs`]; - let eslintrcPath: string | undefined; + const candidatePaths: string[] = ESLINT_CONFIG_FILES.map((fileName) => `${process.cwd()}/${fileName}`); + let eslintConfigPath: string | undefined; for (const candidatePath of candidatePaths) { if (fs.existsSync(candidatePath)) { - eslintrcPath = candidatePath; + eslintConfigPath = candidatePath; break; } } - if (!eslintrcPath) { + if (!eslintConfigPath) { console.error( - '@rushstack/eslint-bulk: Please run this command from the directory that contains .eslintrc.js or .eslintrc.cjs' + '@rushstack/eslint-bulk: Please run this command from the directory that contains one of the following ' + + `ESLint configuration files: ${ESLINT_CONFIG_FILES.join(', ')}` ); process.exit(1); } @@ -80,10 +89,10 @@ function findPatchPath(): string { let runEslintFn: () => Buffer; if (eslintBinPath) { runEslintFn = () => - spawnSync(process.argv0, [eslintBinPath, ...eslintArgs, eslintrcPath], spawnOrExecOptions).stdout; + spawnSync(process.argv0, [eslintBinPath, ...eslintArgs, eslintConfigPath], spawnOrExecOptions).stdout; } else { // Try to use a globally-installed eslint if a local package was not found - runEslintFn = () => execSync(`eslint ${eslintArgs.join(' ')} "${eslintrcPath}"`, spawnOrExecOptions); + runEslintFn = () => execSync(`eslint ${eslintArgs.join(' ')} "${eslintConfigPath}"`, spawnOrExecOptions); } let stdout: Buffer; diff --git a/eslint/eslint-config/.npmignore b/eslint/eslint-config/.npmignore index 72bcc79702d..4babcddc16d 100644 --- a/eslint/eslint-config/.npmignore +++ b/eslint/eslint-config/.npmignore @@ -32,6 +32,7 @@ # --------------------------------------------------------------------------- !*.js +!flat/**/*.js !mixins/*.js !patch/*.js !profile/*.js diff --git a/eslint/eslint-config/flat/mixins/friendly-locals.js b/eslint/eslint-config/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..e63e96783ca --- /dev/null +++ b/eslint/eslint-config/flat/mixins/friendly-locals.js @@ -0,0 +1,90 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// For the first 5 years of Rush, our lint rules required explicit types for most declarations +// such as function parameters, function return values, and exported variables. Although more verbose, +// declaring types (instead of relying on type inference) encourages engineers to create interfaces +// that inspire discussions about data structure design. It also makes source files easier +// to understand for code reviewers who may be unfamiliar with a particular project. Once developers get +// used to the extra work of declaring types, it turns out to be a surprisingly popular practice. +// +// However in 2020, to make adoption easier for existing projects, this rule was relaxed. Explicit +// type declarations are now optional for local variables (although still required in other contexts). +// See this GitHub issue for background: +// +// https://github.com/microsoft/rushstack/issues/2206 +// +// If you are onboarding a large existing code base, this new default will make adoption easier. +// +// On the other hand, if your top priority is to make source files more friendly for other +// people to read, enable the "@rushstack/eslint-config/mixins/friendly-locals" mixin. +// It will restore the requirement that local variables should have explicit type declarations. +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); + +module.exports = [ + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + '@typescript-eslint': typescriptEslintPlugin + }, + rules: { + '@rushstack/typedef-var': 'off', // <--- disabled by the mixin + + '@typescript-eslint/typedef': [ + 'warn', + { + arrayDestructuring: false, + arrowParameter: false, + memberVariableDeclaration: true, + objectDestructuring: false, + parameter: true, + propertyDeclaration: true, + + variableDeclaration: true, // <--- reenabled by the mixin + + variableDeclarationIgnoreFunction: true + } + ] + } + }, + { + files: [ + // Test files + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', + + // Facebook convention + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', + + // Microsoft convention + '**/test/**/*.ts', + '**/test/**/*.tsx' + ], + plugins: { + '@typescript-eslint': typescriptEslintPlugin + }, + rules: { + '@typescript-eslint/typedef': [ + 'warn', + { + arrayDestructuring: false, + arrowParameter: false, + memberVariableDeclaration: true, + objectDestructuring: false, + parameter: true, + propertyDeclaration: true, + variableDeclaration: false, // <--- special case for test files + variableDeclarationIgnoreFunction: true + } + ] + } + } +]; diff --git a/eslint/eslint-config/flat/mixins/packlets.js b/eslint/eslint-config/flat/mixins/packlets.js new file mode 100644 index 00000000000..0c1f22487dd --- /dev/null +++ b/eslint/eslint-config/flat/mixins/packlets.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This mixin implements the "packlet" formalism for organizing source files. +// For more information, see the documentation here: +// https://www.npmjs.com/package/@rushstack/eslint-plugin-packlets +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const rushstackPackletsEslintPlugin = require('@rushstack/eslint-plugin-packlets'); + +module.exports = { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + '@rushstack/packlets': rushstackPackletsEslintPlugin + }, + rules: { + '@rushstack/packlets/mechanics': 'warn', + '@rushstack/packlets/circular-deps': 'warn' + } +}; diff --git a/eslint/eslint-config/flat/mixins/react.js b/eslint/eslint-config/flat/mixins/react.js new file mode 100644 index 00000000000..8ee798c1e0b --- /dev/null +++ b/eslint/eslint-config/flat/mixins/react.js @@ -0,0 +1,77 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This mixin applies some additional checks for projects using the React library. For more information, +// please see the README.md for "@rushstack/eslint-config". +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const reactEslintPlugin = require('eslint-plugin-react'); + +module.exports = [ + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + react: reactEslintPlugin + }, + settings: { + react: { + // The default value is "detect". Automatic detection works by loading the entire React library + // into the linter's process, which is inefficient. It is recommended to specify the version + // explicity. For details, see README.md for "@rushstack/eslint-config". + version: 'detect' + } + }, + rules: { + // RATIONALE: When React components are added to an array, they generally need a "key". + 'react/jsx-key': 'warn', + + // RATIONALE: Catches a common coding practice that significantly impacts performance. + 'react/jsx-no-bind': 'warn', + + // RATIONALE: Catches a common coding mistake. + 'react/jsx-no-comment-textnodes': 'warn', + + // RATIONALE: Security risk. + 'react/jsx-no-target-blank': 'warn', + + // RATIONALE: Fixes the no-unused-vars rule to make it compatible with React + 'react/jsx-uses-react': 'warn', + + // RATIONALE: Fixes the no-unused-vars rule to make it compatible with React + 'react/jsx-uses-vars': 'warn', + + // RATIONALE: Catches a common coding mistake. + 'react/no-children-prop': 'warn', + + // RATIONALE: Catches a common coding mistake. + 'react/no-danger-with-children': 'warn', + + // RATIONALE: Avoids usage of deprecated APIs. + // + // Note that the set of deprecated APIs is determined by the "react.version" setting. + 'react/no-deprecated': 'warn', + + // RATIONALE: Catches a common coding mistake. + 'react/no-direct-mutation-state': 'warn', + + // RATIONALE: Catches some common coding mistakes. + 'react/no-unescaped-entities': 'warn', + + // RATIONALE: Avoids a potential performance problem. + 'react/no-find-dom-node': 'warn', + + // RATIONALE: Deprecated API. + 'react/no-is-mounted': 'warn', + + // RATIONALE: Deprecated API. + 'react/no-render-return-value': 'warn', + + // RATIONALE: Deprecated API. + 'react/no-string-refs': 'warn', + + // RATIONALE: Improves syntax for some cases that are not already handled by Prettier. + 'react/self-closing-comp': 'warn' + } + } +]; diff --git a/eslint/eslint-config/flat/mixins/tsdoc.js b/eslint/eslint-config/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..2b1009259bf --- /dev/null +++ b/eslint/eslint-config/flat/mixins/tsdoc.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This mixin validates code comments to ensure that they follow the TSDoc standard. For more +// information please see the README.md for @rushstack/eslint-config. +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const tsdocEslintPlugin = require('eslint-plugin-tsdoc'); + +module.exports = [ + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + tsdoc: tsdocEslintPlugin + }, + rules: { + 'tsdoc/syntax': 'warn' + } + } +]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js b/eslint/eslint-config/flat/patch/eslint-bulk-suppressions.js similarity index 70% rename from rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js rename to eslint/eslint-config/flat/patch/eslint-bulk-suppressions.js index 6cc6d7238fb..12c37b253da 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js +++ b/eslint/eslint-config/flat/patch/eslint-bulk-suppressions.js @@ -1,4 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -require('local-eslint-config/patch/eslint-bulk-suppressions'); +require('@rushstack/eslint-patch/eslint-bulk-suppressions'); diff --git a/eslint/eslint-config/flat/profile/_common.js b/eslint/eslint-config/flat/profile/_common.js new file mode 100644 index 00000000000..cb35456c9db --- /dev/null +++ b/eslint/eslint-config/flat/profile/_common.js @@ -0,0 +1,777 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// Rule severity guidelines +// ------------------------ +// +// Errors are generally printed in red, and may prevent other build tasks from running (e.g. unit tests). +// Developers should never ignore errors. Warnings are generally printed in yellow, and do not block local +// development, although they must be fixed/suppressed before merging. Developers will commonly ignore warnings +// until their feature is working. +// +// Rules that should be a WARNING: +// - An issue that is very common in partially implemented work (e.g. missing type declaration) +// - An issue that "keeps things nice" but otherwise doesn't affect the meaning of the code (e.g. naming convention) +// - Security rules -- developers may need to temporarily introduce "insecure" expressions while debugging; +// if our policy forces them to suppress the lint rule, they may forget to reenable it later. +// +// Rules that should be an ERROR: +// - An issue that is very likely to be a typo (e.g. "x = x;") +// - An issue that catches code that is likely to malfunction (e.g. unterminated promise chain) +// - An obsolete language feature that nobody should be using for any good reason + +const { globalIgnores } = require('eslint/config'); +const promiseEslintPlugin = require('eslint-plugin-promise'); +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); +const typescriptEslintParser = require('@typescript-eslint/parser'); +const rushstackEslintPlugin = require('@rushstack/eslint-plugin'); +const rushstackSecurityEslintPlugin = require('@rushstack/eslint-plugin-security'); +const { expandNamingConventionSelectors } = require('./_macros'); + +const commonNamingConventionSelectors = [ + { + // We should be stricter about 'enumMember', but it often functions legitimately as an ad hoc namespace. + selectors: ['variable', 'enumMember', 'function'], + + format: ['camelCase', 'UPPER_CASE', 'PascalCase'], + leadingUnderscore: 'allow', + + filter: { + regex: [ + // This is a special exception for naming patterns that use an underscore to separate two camel-cased + // parts. Example: "checkBox1_onChanged" or "_checkBox1_onChanged" + '^_?[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*_[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*$' + ] + .map((x) => `(${x})`) + .join('|'), + match: false + } + }, + + { + selectors: ['parameter'], + + format: ['camelCase'], + + filter: { + regex: [ + // Silently accept names with a double-underscore prefix; we would like to be more strict about this, + // pending a fix for https://github.com/typescript-eslint/typescript-eslint/issues/2240 + '^__' + ] + .map((x) => `(${x})`) + .join('|'), + match: false + } + }, + + // Genuine properties + { + selectors: ['parameterProperty', 'accessor'], + enforceLeadingUnderscoreWhenPrivate: true, + + format: ['camelCase', 'UPPER_CASE'], + + filter: { + regex: [ + // Silently accept names with a double-underscore prefix; we would like to be more strict about this, + // pending a fix for https://github.com/typescript-eslint/typescript-eslint/issues/2240 + '^__', + // Ignore quoted identifiers such as { "X+Y": 123 }. Currently @typescript-eslint/naming-convention + // cannot detect whether an identifier is quoted or not, so we simply assume that it is quoted + // if-and-only-if it contains characters that require quoting. + '[^a-zA-Z0-9_]', + // This is a special exception for naming patterns that use an underscore to separate two camel-cased + // parts. Example: "checkBox1_onChanged" or "_checkBox1_onChanged" + '^_?[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*_[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*$' + ] + .map((x) => `(${x})`) + .join('|'), + match: false + } + }, + + // Properties that incorrectly match other contexts + // See issue https://github.com/typescript-eslint/typescript-eslint/issues/2244 + { + selectors: ['property'], + enforceLeadingUnderscoreWhenPrivate: true, + + // The @typescript-eslint/naming-convention "property" selector matches cases like this: + // + // someLegacyApiWeCannotChange.invokeMethod({ SomeProperty: 123 }); + // + // and this: + // + // const { CONSTANT1, CONSTANT2 } = someNamespace.constants; + // + // Thus for now "property" is more like a variable than a class member. + format: ['camelCase', 'UPPER_CASE', 'PascalCase'], + leadingUnderscore: 'allow', + + filter: { + regex: [ + // Silently accept names with a double-underscore prefix; we would like to be more strict about this, + // pending a fix for https://github.com/typescript-eslint/typescript-eslint/issues/2240 + '^__', + // Ignore quoted identifiers such as { "X+Y": 123 }. Currently @typescript-eslint/naming-convention + // cannot detect whether an identifier is quoted or not, so we simply assume that it is quoted + // if-and-only-if it contains characters that require quoting. + '[^a-zA-Z0-9_]', + // This is a special exception for naming patterns that use an underscore to separate two camel-cased + // parts. Example: "checkBox1_onChanged" or "_checkBox1_onChanged" + '^_?[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*_[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*$' + ] + .map((x) => `(${x})`) + .join('|'), + match: false + } + }, + + { + selectors: ['method'], + enforceLeadingUnderscoreWhenPrivate: true, + + // A PascalCase method can arise somewhat legitimately in this way: + // + // class MyClass { + // public static MyReactButton(props: IButtonProps): JSX.Element { + // . . . + // } + // } + format: ['camelCase', 'PascalCase'], + leadingUnderscore: 'allow', + + filter: { + regex: [ + // Silently accept names with a double-underscore prefix; we would like to be more strict about this, + // pending a fix for https://github.com/typescript-eslint/typescript-eslint/issues/2240 + '^__', + // This is a special exception for naming patterns that use an underscore to separate two camel-cased + // parts. Example: "checkBox1_onChanged" or "_checkBox1_onChanged" + '^_?[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*_[a-z][a-z0-9]*([A-Z][a-z]?[a-z0-9]*)*$' + ] + .map((x) => `(${x})`) + .join('|'), + match: false + } + }, + + // Types should use PascalCase + { + // Group selector for: class, interface, typeAlias, enum, typeParameter + selectors: ['class', 'typeAlias', 'enum', 'typeParameter'], + format: ['PascalCase'], + leadingUnderscore: 'allow' + }, + + { + selectors: ['interface'], + + // It is very common for a class to implement an interface of the same name. + // For example, the Widget class may implement the IWidget interface. The "I" prefix + // avoids the need to invent a separate name such as "AbstractWidget" or "WidgetInterface". + // In TypeScript it is also common to declare interfaces that are implemented by primitive + // objects, here the "I" prefix also helps by avoiding spurious conflicts with classes + // by the same name. + format: ['PascalCase'], + + custom: { + regex: '^_?I[A-Z]', + match: true + } + } +]; + +const commonConfig = [ + // Manually authored .d.ts files are generally used to describe external APIs that are not expected + // to follow our coding conventions. Linting those files tends to produce a lot of spurious suppressions, + // so we simply ignore them. + globalIgnores(['**/*.d.ts']), + + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parser: typescriptEslintParser, + parserOptions: { + // The "project" path is resolved relative to parserOptions.tsconfigRootDir. + // Your local .eslintrc.js must specify that parserOptions.tsconfigRootDir=__dirname. + project: './tsconfig.json', + + // Allow parsing of newer ECMAScript constructs used in TypeScript source code. Although tsconfig.json + // may allow only a small subset of ES2018 features, this liberal setting ensures that ESLint will correctly + // parse whatever is encountered. + ecmaVersion: 2018, + + sourceType: 'module' + } + }, + plugins: { + '@rushstack': rushstackEslintPlugin, + '@rushstack/security': rushstackSecurityEslintPlugin, + '@typescript-eslint': typescriptEslintPlugin, + promise: promiseEslintPlugin + }, + rules: { + // ==================================================================== + // CUSTOM RULES + // ==================================================================== + + // RATIONALE: See the @rushstack/eslint-plugin documentation + '@rushstack/no-new-null': 'warn', + + // RATIONALE: See the @rushstack/eslint-plugin documentation + '@rushstack/typedef-var': 'warn', + + // RATIONALE: See the @rushstack/eslint-plugin documentation + // This is enabled and classified as an error because it is required when using Heft. + // It's not required when using ts-jest, but still a good practice. + '@rushstack/hoist-jest-mock': 'error', + + // ==================================================================== + // SECURITY RULES + // ==================================================================== + + // RATIONALE: This rule is used to prevent the use of insecure regular expressions, which can lead to + // security vulnerabilities such as ReDoS (Regular Expression Denial of Service). + '@rushstack/security/no-unsafe-regexp': 'warn', + + // ==================================================================== + // TYPESCRIPT RULES + // ==================================================================== + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/adjacent-overload-signatures': 'warn', + + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@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', + + // RATIONALE: We prefer "interface IBlah { x: number }" over "type Blah = { x: number }" + // because code is more readable when it is built from stereotypical forms + // (interfaces, enums, functions, etc.) instead of freeform type algebra. + '@typescript-eslint/consistent-type-definitions': 'warn', + + // RATIONALE: Code is more readable when the type of every variable is immediately obvious. + // Even if the compiler may be able to infer a type, this inference will be unavailable + // to a person who is reviewing a GitHub diff. This rule makes writing code harder, + // but writing code is a much less important activity than reading it. + // + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/explicit-function-return-type': [ + 'warn', + { + allowExpressions: true, + allowTypedFunctionExpressions: true, + allowHigherOrderFunctions: false + } + ], + + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/explicit-member-accessibility': 'warn', + + // RATIONALE: Object-oriented programming organizes code into "classes" that associate + // data structures (the class's fields) and the operations performed on those + // data structures (the class's members). Studying the fields often reveals the "idea" + // behind a class. The choice of which class a field belongs to may greatly impact + // the code readability and complexity. Thus, we group the fields prominently at the top + // of the class declaration. We do NOT enforce sorting based on public/protected/private + // or static/instance, because these designations tend to change as code evolves, and + // reordering methods produces spurious diffs that make PRs hard to read. For classes + // with lots of methods, alphabetization is probably a more useful secondary ordering. + '@typescript-eslint/member-ordering': [ + 'warn', + { + default: 'never', + classes: ['field', 'constructor', 'method'] + } + ], + + // NOTE: This new rule replaces several deprecated rules from @typescript-eslint/eslint-plugin@2.3.3: + // + // - @typescript-eslint/camelcase + // - @typescript-eslint/class-name-casing + // - @typescript-eslint/interface-name-prefix + // - @typescript-eslint/member-naming + // + // Docs: https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/docs/rules/naming-convention.md + '@typescript-eslint/naming-convention': [ + 'warn', + ...expandNamingConventionSelectors(commonNamingConventionSelectors) + ], + + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-array-constructor': 'warn', + + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + // + // RATIONALE: The "any" keyword disables static type checking, the main benefit of using TypeScript. + // This rule should be suppressed only in very special cases such as JSON.stringify() + // where the type really can be anything. Even if the type is flexible, another type + // may be more appropriate such as "unknown", "{}", or "Record". + '@typescript-eslint/no-explicit-any': 'warn', + + // RATIONALE: The #1 rule of promises is that every promise chain must be terminated by a catch() + // handler. Thus wherever a Promise arises, the code must either append a catch handler, + // or else return the object to a caller (who assumes this responsibility). Unterminated + // promise chains are a serious issue. Besides causing errors to be silently ignored, + // they can also cause a NodeJS process to terminate unexpectedly. + '@typescript-eslint/no-floating-promises': [ + 'error', + { + checkThenables: true + } + ], + + // RATIONALE: Catches a common coding mistake. + '@typescript-eslint/no-for-in-array': 'error', + + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-misused-new': 'error', + + // RATIONALE: The "namespace" keyword is not recommended for organizing code because JavaScript lacks + // a "using" statement to traverse namespaces. Nested namespaces prevent certain bundler + // optimizations. If you are declaring loose functions/variables, it's better to make them + // static members of a class, since classes support property getters and their private + // members are accessible by unit tests. Also, the exercise of choosing a meaningful + // class name tends to produce more discoverable APIs: for example, search+replacing + // the function "reverse()" is likely to return many false matches, whereas if we always + // write "Text.reverse()" is more unique. For large scale organization, it's recommended + // to decompose your code into separate NPM packages, which ensures that component + // dependencies are tracked more conscientiously. + // + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-namespace': [ + 'warn', + { + // Discourage "namespace" in .ts and .tsx files + allowDeclarations: false, + + // Allow it in .d.ts files that describe legacy libraries + allowDefinitionFiles: false + } + ], + + // RATIONALE: Parameter properties provide a shorthand such as "constructor(public title: string)" + // that avoids the effort of declaring "title" as a field. This TypeScript feature makes + // code easier to write, but arguably sacrifices readability: In the notes for + // "@typescript-eslint/member-ordering" we pointed out that fields are central to + // a class's design, so we wouldn't want to bury them in a constructor signature + // just to save some typing. + // + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/parameter-properties': 'warn', + + // RATIONALE: When left in shipping code, unused variables often indicate a mistake. Dead code + // may impact performance. + // + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + vars: 'all', + // 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', + // Unused error arguments are common and useful for inspection when a debugger is attached. + caughtErrors: 'none' + } + ], + + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-use-before-define': [ + 'error', + { + // Base ESLint options + + // We set functions=false so that functions can be ordered based on exported/local visibility + // similar to class methods. Also the base lint rule incorrectly flags a legitimate case like: + // + // function a(n: number): void { + // if (n > 0) { + // b(n-1); // lint error + // } + // } + // function b(n: number): void { + // if (n > 0) { + // a(n-1); + // } + // } + functions: false, + classes: true, + variables: true, + + // TypeScript extensions + + enums: true, + typedefs: true + // ignoreTypeReferences: true + } + ], + + // TODO: This is a good rule for web browser apps, but it is commonly needed API for Node.js tools. + // '@typescript-eslint/no-var-requires': 'error', + + // RATIONALE: The "module" keyword is deprecated except when describing legacy libraries. + // + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/prefer-namespace-keyword': 'warn', + + // RATIONALE: We require explicit type annotations, even when the compiler could infer the type. + // This can be a controversial policy because it makes code more verbose. There are + // a couple downsides to type inference, however. First, it is not always available. + // For example, when reviewing a pull request or examining a Git history, we may see + // code like this: + // + // // What is the type of "y" here? The compiler knows, but the + // // person reading the code may have no clue. + // const x = f.(); + // const y = x.z; + // + // Second, relying on implicit types also discourages design discussions and documentation. + // Consider this example: + // + // // Where's the documentation for "correlation" and "inventory"? + // // Where would you even write the TSDoc comments? + // function g() { + // return { correlation: 123, inventory: 'xyz' }; + // } + // + // Implicit types make sense for small scale scenarios, where everyone is familiar with + // the project, and code should be "easy to write". Explicit types are preferable + // for large scale scenarios, where people regularly work with source files they've never + // seen before, and code should be "easy to read." + // + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/typedef': [ + 'warn', + { + arrayDestructuring: false, + arrowParameter: false, + memberVariableDeclaration: true, + objectDestructuring: false, + parameter: true, + propertyDeclaration: true, + + // This case is handled by our "@rushstack/typedef-var" rule + variableDeclaration: false, + + // Normally we require type declarations for class members. However, that rule is relaxed + // for situations where we need to bind the "this" pointer for a callback. For example, consider + // this event handler for a React component: + // + // class MyComponent { + // public render(): React.ReactNode { + // return ( + // click me + // ); + // } + // + // // The assignment here avoids the need for "this._onClick.bind(this)" + // private _onClick = (event: React.MouseEvent): void => { + // console.log("Clicked! " + this.props.title); + // }; + // } + // + // This coding style has limitations and should be used sparingly. For example, "_onClick" + // will not participate correctly in "virtual"/"override" inheritance. + // + // NOTE: This option affects both "memberVariableDeclaration" and "variableDeclaration" options. + variableDeclarationIgnoreFunction: true + } + ], + + // ==================================================================== + // RECOMMENDED RULES + // ==================================================================== + + // RATIONALE: This rule warns if setters are defined without getters, which is probably a mistake. + 'accessor-pairs': 'error', + + // RATIONALE: In TypeScript, if you write x["y"] instead of x.y, it disables type checking. + 'dot-notation': [ + 'warn', + { + allowPattern: '^_' + } + ], + + // RATIONALE: Catches code that is likely to be incorrect + eqeqeq: 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'for-direction': 'warn', + + // RATIONALE: Catches a common coding mistake. + 'guard-for-in': 'error', + + // RATIONALE: If you have more than 2,000 lines in a single source file, it's probably time + // to split up your code. + 'max-lines': ['warn', { max: 2000 }], + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-async-promise-executor': 'error', + + // RATIONALE: "|" and "&" are relatively rare, and are more likely to appear as a mistake when + // someone meant "||" or "&&". (But nobody types the other operators by mistake.) + 'no-bitwise': [ + 'warn', + { + allow: [ + '^', + // "|", + // "&", + '<<', + '>>', + '>>>', + '^=', + // "|=", + //"&=", + '<<=', + '>>=', + '>>>=', + '~' + ] + } + ], + + // RATIONALE: Deprecated language feature. + 'no-caller': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-compare-neg-zero': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-cond-assign': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-constant-condition': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-control-regex': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-debugger': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-delete-var': 'error', + + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-duplicate-case': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-empty': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-empty-character-class': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-empty-pattern': 'warn', + + // RATIONALE: Eval is a security concern and a performance concern. + 'no-eval': 'warn', + + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-ex-assign': 'error', + + // RATIONALE: System types are global and should not be tampered with in a scalable code base. + // If two different libraries (or two versions of the same library) both try to modify + // a type, only one of them can win. Polyfills are acceptable because they implement + // a standardized interoperable contract, but polyfills are generally coded in plain + // JavaScript. + 'no-extend-native': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-extra-boolean-cast': 'warn', + + 'no-extra-label': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-fallthrough': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-func-assign': 'warn', + + // RATIONALE: Catches a common coding mistake. + 'no-implied-eval': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-invalid-regexp': 'error', + + // RATIONALE: Catches a common coding mistake. + 'no-label-var': 'error', + + // RATIONALE: Eliminates redundant code. + 'no-lone-blocks': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-misleading-character-class': 'error', + + // RATIONALE: Catches a common coding mistake. + 'no-multi-str': 'error', + + // RATIONALE: It's generally a bad practice to call "new Thing()" without assigning the result to + // a variable. Either it's part of an awkward expression like "(new Thing()).doSomething()", + // or else implies that the constructor is doing nontrivial computations, which is often + // a poor class design. + 'no-new': 'warn', + + // RATIONALE: Obsolete language feature that is deprecated. + 'no-new-func': 'error', + + // RATIONALE: Obsolete language feature that is deprecated. + 'no-new-object': 'error', + + // RATIONALE: Obsolete notation. + 'no-new-wrappers': 'warn', + + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-octal': 'error', + + // RATIONALE: Catches code that is likely to be incorrect + 'no-octal-escape': 'error', + + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-regex-spaces': 'error', + + // RATIONALE: Catches a common coding mistake. + 'no-return-assign': 'error', + + // RATIONALE: Security risk. + 'no-script-url': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-self-assign': 'error', + + // RATIONALE: Catches a common coding mistake. + 'no-self-compare': 'error', + + // RATIONALE: This avoids statements such as "while (a = next(), a && a.length);" that use + // commas to create compound expressions. In general code is more readable if each + // step is split onto a separate line. This also makes it easier to set breakpoints + // in the debugger. + 'no-sequences': 'error', + + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-shadow-restricted-names': 'error', + + // RATIONALE: Obsolete language feature that is deprecated. + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-sparse-arrays': 'error', + + // RATIONALE: Although in theory JavaScript allows any possible data type to be thrown as an exception, + // such flexibility adds pointless complexity, by requiring every catch block to test + // the type of the object that it receives. Whereas if catch blocks can always assume + // that their object implements the "Error" contract, then the code is simpler, and + // we generally get useful additional information like a call stack. + 'no-throw-literal': 'error', + + // RATIONALE: Catches a common coding mistake. + 'no-unmodified-loop-condition': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-unsafe-finally': 'error', + + // RATIONALE: Catches a common coding mistake. + 'no-unused-expressions': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-unused-labels': 'warn', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-useless-catch': 'warn', + + // RATIONALE: Avoids a potential performance problem. + 'no-useless-concat': 'warn', + + // RATIONALE: The "var" keyword is deprecated because of its confusing "hoisting" behavior. + // Always use "let" or "const" instead. + // + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + 'no-var': 'error', + + // RATIONALE: Generally not needed in modern code. + 'no-void': 'error', + + // RATIONALE: Obsolete language feature that is deprecated. + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-with': 'error', + + // RATIONALE: Makes logic easier to understand, since constants always have a known value + // @typescript-eslint\eslint-plugin\dist\configs\eslint-recommended.js + 'prefer-const': 'warn', + + // RATIONALE: Catches a common coding mistake where "resolve" and "reject" are confused. + 'promise/param-names': 'error', + + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'require-atomic-updates': 'error', + + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'require-yield': 'warn', + + // "Use strict" is redundant when using the TypeScript compiler. + strict: ['error', 'never'], + + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'use-isnan': 'error' + + // The "no-restricted-syntax" rule is a general purpose pattern matcher that we can use to experiment with + // new rules. If a rule works well, we should convert it to a proper rule so it gets its own name + // for suppressions and documentation. + // How it works: https://eslint.org/docs/rules/no-restricted-syntax + // AST visualizer: https://astexplorer.net/ + // Debugger: http://estools.github.io/esquery/ + // + // "no-restricted-syntax": [ + // ], + } + }, + + // ==================================================================== + // TESTING RULES + // ==================================================================== + { + files: [ + // Test files + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', + + // Facebook convention + '**/__mocks__/*.ts', + '**/__mocks__/*.tsx', + '**/__tests__/*.ts', + '**/__tests__/*.tsx', + + // Microsoft convention + '**/test/*.ts', + '**/test/*.tsx' + ], + rules: { + // Unit tests sometimes use a standalone statement like "new Thing(123);" to test a constructor. + 'no-new': 'off', + + // Jest's mocking API is designed in a way that produces compositional data types that often have + // no concise description. Since test code does not ship, and typically does not introduce new + // concepts or algorithms, the usual arguments for prioritizing readability over writability can be + // relaxed in this case. + '@rushstack/typedef-var': 'off' + } + } +]; + +module.exports = { commonNamingConventionSelectors, commonConfig }; diff --git a/eslint/eslint-config/flat/profile/_macros.js b/eslint/eslint-config/flat/profile/_macros.js new file mode 100644 index 00000000000..4d95857abc1 --- /dev/null +++ b/eslint/eslint-config/flat/profile/_macros.js @@ -0,0 +1,104 @@ +// 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 the @typescript-eslint/naming-convention rule, whose options currently +// support a "selector" field that cannot match multiple selectors. This function receives an input +// array such as: +// +// [ +// { +// selectors: ['class', 'typeAlias', 'enum'], +// format: ['PascalCase'] +// }, +// . . . +// ] +// +// ...and transforms "selectors" -> "selector, returning an array with expanded entries like this: +// +// [ +// { +// selector: 'class', +// format: ['PascalCase'] +// }, +// { +// selector: 'typeAlias', +// format: ['PascalCase'] +// }, +// { +// selector: 'enum', +// format: ['PascalCase'] +// }, +// . . . +// ] +// +// It also supports a "enforceLeadingUnderscoreWhenPrivate" macro that expands this: +// +// [ +// { +// selectors: ['property'], +// enforceLeadingUnderscoreWhenPrivate: true, +// format: ['camelCase'] +// }, +// . . . +// ] +// +// ...to produce this: +// +// [ +// { +// selector: 'property', +// +// leadingUnderscore: 'allow', +// format: ['camelCase'] +// }, +// { +// selector: 'property', +// modifiers: ['private'], +// +// leadingUnderscore: 'require', +// format: ['camelCase'] +// }, +// . . . +// ] +function expandNamingConventionSelectors(inputBlocks) { + const firstPassBlocks = []; + + // Expand "selectors" --> "selector" + for (const block of inputBlocks) { + for (const selector of block.selectors) { + const expandedBlock = { ...block }; + delete expandedBlock.selectors; + expandedBlock.selector = selector; + firstPassBlocks.push(expandedBlock); + } + } + + // Expand "enforceLeadingUnderscoreWhenPrivate" --> "leadingUnderscore" + const secondPassBlocks = []; + for (const block of firstPassBlocks) { + if (block.enforceLeadingUnderscoreWhenPrivate) { + const expandedBlock1 = { + ...block, + leadingUnderscore: 'allow' + }; + delete expandedBlock1.enforceLeadingUnderscoreWhenPrivate; + secondPassBlocks.push(expandedBlock1); + + const expandedBlock2 = { + ...block, + modifiers: [...(block.modifiers ?? []), 'private'], + leadingUnderscore: 'require' + }; + delete expandedBlock2.enforceLeadingUnderscoreWhenPrivate; + secondPassBlocks.push(expandedBlock2); + } else { + secondPassBlocks.push(block); + } + } + + return secondPassBlocks; +} + +module.exports = { + expandNamingConventionSelectors: expandNamingConventionSelectors +}; diff --git a/eslint/eslint-config/flat/profile/node-trusted-tool.js b/eslint/eslint-config/flat/profile/node-trusted-tool.js new file mode 100644 index 00000000000..a6a05c4b061 --- /dev/null +++ b/eslint/eslint-config/flat/profile/node-trusted-tool.js @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This profile enables lint rules intended for a Node.js project whose inputs will always +// come from a developer or other trusted source. Most build system tasks are like this, +// since they operate on exclusively files prepared by a developer. +// +// This profile disables certain security rules that would otherwise prohibit APIs that could +// cause a denial-of-service by consuming too many resources, or which might interact with +// the filesystem in unsafe ways. Such activities are safe and commonplace for a trusted tool. +// +// DO NOT use this profile for a library project that might also be loaded by a Node.js service; +// use "@rushstack/eslint-config/profiles/node" instead. + +const { commonConfig } = require('./_common'); + +module.exports = [ + ...commonConfig, + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + // This is disabled for trusted tools because the tool is known to be safe. + '@rushstack/security/no-unsafe-regexp': 'off' + } + } +]; diff --git a/eslint/eslint-config/flat/profile/node.js b/eslint/eslint-config/flat/profile/node.js new file mode 100644 index 00000000000..e18325a793a --- /dev/null +++ b/eslint/eslint-config/flat/profile/node.js @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This profile enables lint rules intended for a general Node.js project, typically a web service. +// It enables security rules that assume the service could receive malicious inputs from an +// untrusted user. If that is not the case, consider using the "node-trusted-tool" profile instead. + +const { commonConfig } = require('./_common'); + +module.exports = [...commonConfig]; diff --git a/eslint/eslint-config/flat/profile/web-app.js b/eslint/eslint-config/flat/profile/web-app.js new file mode 100644 index 00000000000..8d254fdd8d9 --- /dev/null +++ b/eslint/eslint-config/flat/profile/web-app.js @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This profile enables lint rules intended for a web application. It enables security rules +// that are relevant to web browser APIs such as DOM. +// +// Also use this profile if you are creating a library that can be consumed by both Node.js +// and web applications. + +const { commonConfig } = require('./_common'); + +module.exports = [...commonConfig]; diff --git a/eslint/eslint-config/package.json b/eslint/eslint-config/package.json index 177ee4aff56..5ea61e26ee7 100644 --- a/eslint/eslint-config/package.json +++ b/eslint/eslint-config/package.json @@ -23,7 +23,7 @@ "typescript" ], "peerDependencies": { - "eslint": "^8.57.0", + "eslint": "^8.57.0 || ^9.25.1", "typescript": ">=4.7.0" }, "dependencies": { @@ -31,16 +31,16 @@ "@rushstack/eslint-plugin": "workspace:*", "@rushstack/eslint-plugin-packlets": "workspace:*", "@rushstack/eslint-plugin-security": "workspace:*", - "@typescript-eslint/eslint-plugin": "~8.26.1", - "@typescript-eslint/utils": "~8.26.1", - "@typescript-eslint/parser": "~8.26.1", - "@typescript-eslint/typescript-estree": "~8.26.1", - "eslint-plugin-promise": "~6.1.1", - "eslint-plugin-react": "~7.33.2", + "@typescript-eslint/eslint-plugin": "~8.31.0", + "@typescript-eslint/utils": "~8.31.0", + "@typescript-eslint/parser": "~8.31.0", + "@typescript-eslint/typescript-estree": "~8.31.0", + "eslint-plugin-promise": "~7.2.1", + "eslint-plugin-react": "~7.37.5", "eslint-plugin-tsdoc": "~0.4.0" }, "devDependencies": { - "eslint": "~8.57.0", + "eslint": "~9.25.1", "typescript": "~5.8.2" } } diff --git a/eslint/eslint-config/profile/_common.js b/eslint/eslint-config/profile/_common.js index 4f64259436c..2ceda351b0c 100644 --- a/eslint/eslint-config/profile/_common.js +++ b/eslint/eslint-config/profile/_common.js @@ -337,7 +337,12 @@ function buildRules(profile) { // or else return the object to a caller (who assumes this responsibility). Unterminated // promise chains are a serious issue. Besides causing errors to be silently ignored, // they can also cause a NodeJS process to terminate unexpectedly. - '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-floating-promises': [ + 'error', + { + checkThenables: true + } + ], // RATIONALE: Catches a common coding mistake. '@typescript-eslint/no-for-in-array': 'error', diff --git a/eslint/eslint-patch/package.json b/eslint/eslint-patch/package.json index 7f0c5e9769f..f8e4368670c 100644 --- a/eslint/eslint-patch/package.json +++ b/eslint/eslint-patch/package.json @@ -31,10 +31,12 @@ ], "devDependencies": { "@rushstack/heft": "0.73.2", - "@types/eslint": "8.56.10", - "@typescript-eslint/types": "~8.26.1", + "@types/eslint-8": "npm:@types/eslint@8.56.10", + "@types/eslint-9": "npm:@types/eslint@9.6.1", + "@typescript-eslint/types": "~8.31.0", "decoupled-local-node-rig": "workspace:*", - "eslint": "~8.57.0", + "eslint-9": "npm:eslint@~9.25.1", + "eslint-8": "npm:eslint@~8.57.0", "typescript": "~5.8.2" } } diff --git a/eslint/eslint-patch/src/_patch-base.ts b/eslint/eslint-patch/src/_patch-base.ts index 68651d3cb0a..171f93a134b 100644 --- a/eslint/eslint-patch/src/_patch-base.ts +++ b/eslint/eslint-patch/src/_patch-base.ts @@ -13,6 +13,57 @@ import path from 'path'; const isModuleResolutionError: (ex: unknown) => boolean = (ex) => typeof ex === 'object' && !!ex && 'code' in ex && (ex as { code: unknown }).code === 'MODULE_NOT_FOUND'; +const FLAT_CONFIG_REGEX: RegExp = /eslint\.config\.(cjs|mjs|js)$/i; + +// Ex: +// at async ESLint.lintFiles (C:\\path\\to\\\\eslint\\lib\\eslint\\eslint.js:720:21) +const NODE_STACK_REGEX: RegExp = + /^\s*at (?:((?:\[object object\])?[^\\/]+(?: \[as \S+\])?) )?\(?(.*?)(?::(\d+)| (\d+))(?::(\d+))?\)?\s*$/i; + +interface INodeStackFrame { + file: string; + method?: string; + lineNumber: number; + column?: number; +} + +function parseNodeStack(stack: string): INodeStackFrame | undefined { + const stackTraceMatch: RegExpExecArray | null = NODE_STACK_REGEX.exec(stack); + if (!stackTraceMatch) { + return undefined; + } + + return { + file: stackTraceMatch[2], + method: stackTraceMatch[1], + lineNumber: parseInt(stackTraceMatch[3], 10), + column: stackTraceMatch[4] ? parseInt(stackTraceMatch[4], 10) : undefined + }; +} + +function getStackTrace(): INodeStackFrame[] { + const stackObj: { stack?: string } = {}; + const originalStackTraceLimit: number = Error.stackTraceLimit; + Error.stackTraceLimit = Infinity; + Error.captureStackTrace(stackObj, getStackTrace); + Error.stackTraceLimit = originalStackTraceLimit; + if (!stackObj.stack) { + throw new Error('Unable to capture stack trace'); + } + + const { stack } = stackObj; + const stackLines: string[] = stack.split('\n'); + const frames: INodeStackFrame[] = []; + for (const line of stackLines) { + const frame: INodeStackFrame | undefined = parseNodeStack(line); + if (frame) { + frames.push(frame); + } + } + + return frames; +} + // Module path for eslintrc.cjs // Example: ".../@eslint/eslintrc/dist/eslintrc.cjs" let eslintrcBundlePath: string | undefined = undefined; @@ -33,22 +84,94 @@ let namingPath: string | undefined = undefined; // Example: ".../node_modules/eslint" let eslintFolder: string | undefined = undefined; -// Probe for the ESLint >=8.0.0 layout: +// Probe for the ESLint >=9.0.0 flat config layout: for (let currentModule: NodeModule = module; ; ) { - if (!eslintrcBundlePath) { - if (currentModule.filename.endsWith('eslintrc.cjs')) { - // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path: - // .../@eslint/eslintrc/dist/eslintrc.cjs + if (FLAT_CONFIG_REGEX.test(currentModule.filename)) { + // Obtain the stack trace of the current module, since the + // parent module of a flat config is undefined. From the + // stack trace, we can find the ESLint folder. + const stackTrace: INodeStackFrame[] = getStackTrace(); + const targetFrame: INodeStackFrame | undefined = stackTrace.find( + (frame: INodeStackFrame) => frame.file && frame.file.endsWith('eslint.js') + ); + if (targetFrame) { + // Walk up the path and continuously attempt to resolve the ESLint folder + let currentPath: string | undefined = targetFrame.file; + while (currentPath) { + const potentialPath: string = path.dirname(currentPath); + if (potentialPath === currentPath) { + break; + } + currentPath = potentialPath; + try { + eslintFolder = path.dirname(require.resolve('eslint/package.json', { paths: [currentPath] })); + break; + } catch (ex: unknown) { + if (!isModuleResolutionError(ex)) { + throw ex; + } + } + } + } + + if (eslintFolder) { + const eslintrcFolderPath: string = path.dirname( + require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] }) + ); + eslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); + } + + break; + } + + if (!currentModule.parent) { + break; + } + currentModule = currentModule.parent; +} + +if (!eslintFolder) { + // Probe for the ESLint >=8.0.0 layout: + for (let currentModule: NodeModule = module; ; ) { + if (!eslintrcBundlePath) { + if (currentModule.filename.endsWith('eslintrc.cjs')) { + // For ESLint >=8.0.0, all @eslint/eslintrc code is bundled at this path: + // .../@eslint/eslintrc/dist/eslintrc.cjs + try { + const eslintrcFolderPath: string = path.dirname( + require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] }) + ); + + // Make sure we actually resolved the module in our call path + // and not some other spurious dependency. + const resolvedEslintrcBundlePath: string = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); + if (resolvedEslintrcBundlePath === currentModule.filename) { + eslintrcBundlePath = resolvedEslintrcBundlePath; + } + } catch (ex: unknown) { + // Module resolution failures are expected, as we're walking + // up our require stack to look for eslint. All other errors + // are re-thrown. + if (!isModuleResolutionError(ex)) { + throw ex; + } + } + } + } else { + // Next look for a file in ESLint's folder + // .../eslint/lib/cli-engine/cli-engine.js try { - const eslintrcFolderPath: string = path.dirname( - require.resolve('@eslint/eslintrc/package.json', { paths: [currentModule.path] }) + const eslintCandidateFolder: string = path.dirname( + require.resolve('eslint/package.json', { + paths: [currentModule.path] + }) ); // Make sure we actually resolved the module in our call path // and not some other spurious dependency. - const resolvedEslintrcBundlePath: string = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); - if (resolvedEslintrcBundlePath === currentModule.filename) { - eslintrcBundlePath = resolvedEslintrcBundlePath; + if (currentModule.filename.startsWith(eslintCandidateFolder + path.sep)) { + eslintFolder = eslintCandidateFolder; + break; } } catch (ex: unknown) { // Module resolution failures are expected, as we're walking @@ -59,36 +182,12 @@ for (let currentModule: NodeModule = module; ; ) { } } } - } else { - // Next look for a file in ESLint's folder - // .../eslint/lib/cli-engine/cli-engine.js - try { - const eslintCandidateFolder: string = path.dirname( - require.resolve('eslint/package.json', { - paths: [currentModule.path] - }) - ); - // Make sure we actually resolved the module in our call path - // and not some other spurious dependency. - if (currentModule.filename.startsWith(eslintCandidateFolder + path.sep)) { - eslintFolder = eslintCandidateFolder; - break; - } - } catch (ex: unknown) { - // Module resolution failures are expected, as we're walking - // up our require stack to look for eslint. All other errors - // are re-thrown. - if (!isModuleResolutionError(ex)) { - throw ex; - } + if (!currentModule.parent) { + break; } + currentModule = currentModule.parent; } - - if (!currentModule.parent) { - break; - } - currentModule = currentModule.parent; } if (!eslintFolder) { @@ -215,22 +314,22 @@ if (!(ESLINT_MAJOR_VERSION >= 6 && ESLINT_MAJOR_VERSION <= 9)) { // eslint-disable-next-line @typescript-eslint/no-explicit-any let configArrayFactory: any; -if (ESLINT_MAJOR_VERSION >= 8) { - configArrayFactory = require(eslintrcBundlePath!).Legacy.ConfigArrayFactory; -} else { - configArrayFactory = require(configArrayFactoryPath!).ConfigArrayFactory; +if (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) { + configArrayFactory = require(eslintrcBundlePath).Legacy.ConfigArrayFactory; +} else if (configArrayFactoryPath) { + configArrayFactory = require(configArrayFactoryPath).ConfigArrayFactory; } // eslint-disable-next-line @typescript-eslint/no-explicit-any let ModuleResolver: { resolve: any }; // eslint-disable-next-line @typescript-eslint/no-explicit-any let Naming: { normalizePackageName: any }; -if (ESLINT_MAJOR_VERSION >= 8) { - ModuleResolver = require(eslintrcBundlePath!).Legacy.ModuleResolver; - Naming = require(eslintrcBundlePath!).Legacy.naming; -} else { - ModuleResolver = require(moduleResolverPath!); - Naming = require(namingPath!); +if (ESLINT_MAJOR_VERSION >= 8 && eslintrcBundlePath) { + ModuleResolver = require(eslintrcBundlePath).Legacy.ModuleResolver; + Naming = require(eslintrcBundlePath).Legacy.naming; +} else if (moduleResolverPath && namingPath) { + ModuleResolver = require(moduleResolverPath); + Naming = require(namingPath); } export { diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-file.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-file.ts index 240d4ad541f..fd59c918307 100644 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-file.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-file.ts @@ -37,11 +37,11 @@ interface ICachedBulkSuppressionsConfig { suppressionsConfig: IBulkSuppressionsConfig; } const suppressionsJsonByFolderPath: Map = new Map(); -export function getSuppressionsConfigForEslintrcFolderPath( - eslintrcFolderPath: string +export function getSuppressionsConfigForEslintConfigFolderPath( + eslintConfigFolderPath: string ): IBulkSuppressionsConfig { const cachedSuppressionsConfig: ICachedBulkSuppressionsConfig | undefined = - suppressionsJsonByFolderPath.get(eslintrcFolderPath); + suppressionsJsonByFolderPath.get(eslintConfigFolderPath); let shouldLoad: boolean; let suppressionsConfig: IBulkSuppressionsConfig; @@ -53,7 +53,7 @@ export function getSuppressionsConfigForEslintrcFolderPath( } if (shouldLoad) { - const suppressionsPath: string = `${eslintrcFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`; + const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`; let rawJsonFile: string | undefined; try { rawJsonFile = fs.readFileSync(suppressionsPath).toString(); @@ -85,27 +85,27 @@ export function getSuppressionsConfigForEslintrcFolderPath( }; } - suppressionsJsonByFolderPath.set(eslintrcFolderPath, { readTime: Date.now(), suppressionsConfig }); + suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig }); } return suppressionsConfig!; } -export function getAllBulkSuppressionsConfigsByEslintrcFolderPath(): [string, IBulkSuppressionsConfig][] { +export function getAllBulkSuppressionsConfigsByEslintConfigFolderPath(): [string, IBulkSuppressionsConfig][] { const result: [string, IBulkSuppressionsConfig][] = []; - for (const [eslintrcFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) { - result.push([eslintrcFolderPath, suppressionsConfig]); + for (const [eslintConfigFolderPath, { suppressionsConfig }] of suppressionsJsonByFolderPath) { + result.push([eslintConfigFolderPath, suppressionsConfig]); } return result; } export function writeSuppressionsJsonToFile( - eslintrcFolderPath: string, + eslintConfigFolderPath: string, suppressionsConfig: IBulkSuppressionsConfig ): void { - suppressionsJsonByFolderPath.set(eslintrcFolderPath, { readTime: Date.now(), suppressionsConfig }); - const suppressionsPath: string = `${eslintrcFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`; + suppressionsJsonByFolderPath.set(eslintConfigFolderPath, { readTime: Date.now(), suppressionsConfig }); + const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`; if (suppressionsConfig.jsonObject.suppressions.length === 0) { deleteFile(suppressionsPath); } else { @@ -114,8 +114,8 @@ export function writeSuppressionsJsonToFile( } } -export function deleteBulkSuppressionsFileInEslintrcFolder(eslintrcFolderPath: string): void { - const suppressionsPath: string = `${eslintrcFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`; +export function deleteBulkSuppressionsFileInEslintConfigFolder(eslintConfigFolderPath: string): void { + const suppressionsPath: string = `${eslintConfigFolderPath}/${SUPPRESSIONS_JSON_FILENAME}`; deleteFile(suppressionsPath); } diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-patch.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-patch.ts index 68b897f7a8c..4c2beeca30f 100644 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-patch.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/bulk-suppressions-patch.ts @@ -13,15 +13,18 @@ import { ESLINT_BULK_SUPPRESS_ENV_VAR_NAME } from './constants'; import { - getSuppressionsConfigForEslintrcFolderPath, + getSuppressionsConfigForEslintConfigFolderPath, serializeSuppression, type IBulkSuppressionsConfig, type ISuppression, writeSuppressionsJsonToFile, - getAllBulkSuppressionsConfigsByEslintrcFolderPath + getAllBulkSuppressionsConfigsByEslintConfigFolderPath } from './bulk-suppressions-file'; -const ESLINTRC_FILENAMES: string[] = [ +const ESLINT_CONFIG_FILENAMES: string[] = [ + 'eslint.config.js', + 'eslint.config.cjs', + 'eslint.config.mjs', '.eslintrc.js', '.eslintrc.cjs' // Several other filenames are allowed, but this patch requires that it be loaded via a JS config file, @@ -88,11 +91,11 @@ function calculateScopeId(node: NodeWithParent | undefined): string { } } -const eslintrcPathByFileOrFolderPath: Map = new Map(); +const eslintConfigPathByFileOrFolderPath: Map = new Map(); -function findEslintrcFolderPathForNormalizedFileAbsolutePath(normalizedFilePath: string): string { +function findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFilePath: string): string { const cachedFolderPathForFilePath: string | undefined = - eslintrcPathByFileOrFolderPath.get(normalizedFilePath); + eslintConfigPathByFileOrFolderPath.get(normalizedFilePath); if (cachedFolderPathForFilePath) { return cachedFolderPathForFilePath; } @@ -102,34 +105,35 @@ function findEslintrcFolderPathForNormalizedFileAbsolutePath(normalizedFilePath: ); const pathsToCache: string[] = [normalizedFilePath]; - let eslintrcFolderPath: string | undefined; - findEslintrcFileLoop: for ( + let eslintConfigFolderPath: string | undefined; + findEslintConfigFileLoop: for ( let currentFolder: string = normalizedFileFolderPath; currentFolder; // 'something'.substring(0, -1) is '' currentFolder = currentFolder.substring(0, currentFolder.lastIndexOf('/')) ) { - const cachedEslintrcFolderPath: string | undefined = eslintrcPathByFileOrFolderPath.get(currentFolder); + const cachedEslintrcFolderPath: string | undefined = + eslintConfigPathByFileOrFolderPath.get(currentFolder); if (cachedEslintrcFolderPath) { // Need to cache this result into the intermediate paths - eslintrcFolderPath = cachedEslintrcFolderPath; + eslintConfigFolderPath = cachedEslintrcFolderPath; break; } pathsToCache.push(currentFolder); - for (const eslintrcFilename of ESLINTRC_FILENAMES) { - if (fs.existsSync(`${currentFolder}/${eslintrcFilename}`)) { - eslintrcFolderPath = currentFolder; - break findEslintrcFileLoop; + for (const eslintConfigFilename of ESLINT_CONFIG_FILENAMES) { + if (fs.existsSync(`${currentFolder}/${eslintConfigFilename}`)) { + eslintConfigFolderPath = currentFolder; + break findEslintConfigFileLoop; } } } - if (eslintrcFolderPath) { + if (eslintConfigFolderPath) { for (const checkedFolder of pathsToCache) { - eslintrcPathByFileOrFolderPath.set(checkedFolder, eslintrcFolderPath); + eslintConfigPathByFileOrFolderPath.set(checkedFolder, eslintConfigFolderPath); } - return eslintrcFolderPath; + return eslintConfigFolderPath; } else { throw new Error(`Cannot locate an ESLint configuration file for ${normalizedFilePath}`); } @@ -149,13 +153,14 @@ export function shouldBulkSuppress(params: { const { filename: fileAbsolutePath, currentNode, ruleId: rule, problem } = params; const normalizedFileAbsolutePath: string = fileAbsolutePath.replace(/\\/g, '/'); - const eslintrcDirectory: string = - findEslintrcFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath); - const fileRelativePath: string = normalizedFileAbsolutePath.substring(eslintrcDirectory.length + 1); + const eslintConfigDirectory: string = + findEslintConfigFolderPathForNormalizedFileAbsolutePath(normalizedFileAbsolutePath); + const fileRelativePath: string = normalizedFileAbsolutePath.substring(eslintConfigDirectory.length + 1); const scopeId: string = calculateScopeId(currentNode); const suppression: ISuppression = { file: fileRelativePath, scopeId, rule }; - const config: IBulkSuppressionsConfig = getSuppressionsConfigForEslintrcFolderPath(eslintrcDirectory); + const config: IBulkSuppressionsConfig = + getSuppressionsConfigForEslintConfigFolderPath(eslintConfigDirectory); const serializedSuppression: string = serializeSuppression(suppression); const currentNodeIsSuppressed: boolean = config.serializedSuppressions.has(serializedSuppression); @@ -172,9 +177,9 @@ export function shouldBulkSuppress(params: { export function prune(): void { for (const [ - eslintrcFolderPath, + eslintConfigFolderPath, suppressionsConfig - ] of getAllBulkSuppressionsConfigsByEslintrcFolderPath()) { + ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) { if (suppressionsConfig) { const { newSerializedSuppressions, newJsonObject } = suppressionsConfig; const newSuppressionsConfig: IBulkSuppressionsConfig = { @@ -184,7 +189,7 @@ export function prune(): void { newJsonObject: { suppressions: [] } }; - writeSuppressionsJsonToFile(eslintrcFolderPath, newSuppressionsConfig); + writeSuppressionsJsonToFile(eslintConfigFolderPath, newSuppressionsConfig); } } } @@ -193,7 +198,7 @@ export function write(): void { for (const [ eslintrcFolderPath, suppressionsConfig - ] of getAllBulkSuppressionsConfigsByEslintrcFolderPath()) { + ] of getAllBulkSuppressionsConfigsByEslintConfigFolderPath()) { if (suppressionsConfig) { writeSuppressionsJsonToFile(eslintrcFolderPath, suppressionsConfig); } @@ -201,7 +206,9 @@ export function write(): void { } // utility function for linter-patch.js to make require statements that use relative paths in linter.js work in linter-patch.js -export function requireFromPathToLinterJS(importPath: string): import('eslint').Linter { +export function requireFromPathToLinterJS( + importPath: string +): import('eslint-9').Linter | import('eslint-8').Linter { if (!eslintFolder) { return require(importPath); } diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/prune.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/prune.ts index 9caf0b24835..5b77c3de6f6 100755 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/prune.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/prune.ts @@ -7,8 +7,8 @@ import { printPruneHelp } from './utils/print-help'; import { runEslintAsync } from './runEslint'; import { ESLINT_BULK_PRUNE_ENV_VAR_NAME } from '../constants'; import { - deleteBulkSuppressionsFileInEslintrcFolder, - getSuppressionsConfigForEslintrcFolderPath + deleteBulkSuppressionsFileInEslintConfigFolder, + getSuppressionsConfigForEslintConfigFolderPath } from '../bulk-suppressions-file'; export async function pruneAsync(): Promise { @@ -31,13 +31,13 @@ export async function pruneAsync(): Promise { await runEslintAsync(allFiles, 'prune'); } else { console.log('No files with existing suppressions found.'); - deleteBulkSuppressionsFileInEslintrcFolder(normalizedCwd); + deleteBulkSuppressionsFileInEslintConfigFolder(normalizedCwd); } } async function getAllFilesWithExistingSuppressionsForCwdAsync(normalizedCwd: string): Promise { const { jsonObject: bulkSuppressionsConfigJson } = - getSuppressionsConfigForEslintrcFolderPath(normalizedCwd); + getSuppressionsConfigForEslintConfigFolderPath(normalizedCwd); const allFiles: Set = new Set(); for (const { file: filePath } of bulkSuppressionsConfigJson.suppressions) { allFiles.add(filePath); diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/runEslint.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/runEslint.ts index be0bdf494ef..512b3b3339f 100644 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/runEslint.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/runEslint.ts @@ -1,19 +1,24 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import type { ESLint } from 'eslint'; -import { getEslintPath } from './utils/get-eslint-cli'; +import type { ESLint as TEslintLegacy } from 'eslint-8'; +import type { ESLint as TEslint } from 'eslint-9'; +import { getEslintPathAndVersion } from './utils/get-eslint-cli'; export async function runEslintAsync(files: string[], mode: 'suppress' | 'prune'): Promise { const cwd: string = process.cwd(); - const eslintPath: string = getEslintPath(cwd); - const { ESLint }: typeof import('eslint') = require(eslintPath); - const eslint: ESLint = new ESLint({ - useEslintrc: true, - cwd - }); - - let results: ESLint.LintResult[]; + const [eslintPath, eslintVersion] = getEslintPathAndVersion(cwd); + const { ESLint }: typeof import('eslint-9') | typeof import('eslint-8') = require(eslintPath); + + let eslint: TEslint | TEslintLegacy; + const majorVersion: number = parseInt(eslintVersion, 10); + if (majorVersion < 9) { + eslint = new ESLint({ cwd, useEslintrc: true }); + } else { + eslint = new ESLint({ cwd }); + } + + let results: (TEslint.LintResult | TEslintLegacy.LintResult)[]; try { results = await eslint.lintFiles(files); } catch (e) { @@ -34,8 +39,9 @@ export async function runEslintAsync(files: string[], mode: 'suppress' | 'prune' } if (results.length > 0) { - const stylishFormatter: ESLint.Formatter = await eslint.loadFormatter(); - const formattedResults: string = await Promise.resolve(stylishFormatter.format(results)); + const stylishFormatter: TEslint.Formatter | TEslintLegacy.Formatter = await eslint.loadFormatter(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const formattedResults: string = await Promise.resolve(stylishFormatter.format(results as any)); console.log(formattedResults); } diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts index c073f47cc6b..8325f01d8a4 100755 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/get-eslint-cli.ts @@ -13,10 +13,11 @@ const TESTED_VERSIONS: Set = new Set([ '8.22.0', '8.23.0', '8.23.1', - '8.57.0' + '8.57.0', + '9.25.1' ]); -export function getEslintPath(packagePath: string): string { +export function getEslintPathAndVersion(packagePath: string): [string, string] { // Try to find a local ESLint installation, the one that should be listed as a dev dependency in package.json // and installed in node_modules try { @@ -32,7 +33,7 @@ export function getEslintPath(packagePath: string): string { ); } - return localEslintApiPath; + return [localEslintApiPath, localEslintVersion]; } catch (e1) { try { const { diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts index 0435b799859..a4db8e08d1d 100755 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/utils/is-correct-cwd.ts @@ -4,5 +4,11 @@ import fs from 'fs'; export function isCorrectCwd(cwd: string): boolean { - return fs.existsSync(`${cwd}/.eslintrc.js`) || fs.existsSync(`${cwd}/.eslintrc.cjs`); + return ( + fs.existsSync(`${cwd}/eslint.config.js`) || + fs.existsSync(`${cwd}/eslint.config.cjs`) || + fs.existsSync(`${cwd}/eslint.config.mjs`) || + fs.existsSync(`${cwd}/.eslintrc.js`) || + fs.existsSync(`${cwd}/.eslintrc.cjs`) + ); } diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts index fdb97d28afa..ed7c79bb106 100644 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts @@ -14,7 +14,8 @@ import { */ export function generatePatchedLinterJsFileIfDoesNotExist( inputFilePath: string, - outputFilePath: string + outputFilePath: string, + eslintPackageVersion: string ): void { const generateEnvVarValue: string | undefined = process.env[ESLINT_BULK_FORCE_REGENERATE_PATCH_ENV_VAR_NAME]; @@ -22,6 +23,8 @@ export function generatePatchedLinterJsFileIfDoesNotExist( return; } + const majorVersion: number = parseInt(eslintPackageVersion, 10); + const inputFile: string = fs.readFileSync(inputFilePath).toString(); let inputIndex: number = 0; @@ -70,26 +73,42 @@ export function generatePatchedLinterJsFileIfDoesNotExist( return output; } + const markerForStartOfClassMethodSpaces: string = '\n */\n '; + const markerForStartOfClassMethodTabs: string = '\n\t */\n\t'; + function indexOfStartOfClassMethod(input: string, position?: number): { index: number; marker?: string } { + let startOfClassMethodIndex: number = input.indexOf(markerForStartOfClassMethodSpaces, position); + if (startOfClassMethodIndex === -1) { + startOfClassMethodIndex = input.indexOf(markerForStartOfClassMethodTabs, position); + if (startOfClassMethodIndex === -1) { + return { index: startOfClassMethodIndex }; + } + return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodTabs }; + } + return { index: startOfClassMethodIndex, marker: markerForStartOfClassMethodSpaces }; + } + /** * Returns index of next public method * @param fromIndex - index of inputFile to search if public method still exists * @returns -1 if public method does not exist or index of next public method */ - function getIndexOfNextPublicMethod(fromIndex: number): number { + function getIndexOfNextMethod(fromIndex: number): { index: number; isPublic?: boolean } { const rest: string = inputFile.substring(fromIndex); const endOfClassIndex: number = rest.indexOf('\n}'); - const markerForStartOfClassMethod: string = '\n */\n '; - - const startOfClassMethodIndex: number = rest.indexOf(markerForStartOfClassMethod); + const { index: startOfClassMethodIndex, marker: startOfClassMethodMarker } = + indexOfStartOfClassMethod(rest); - if (startOfClassMethodIndex === -1 || startOfClassMethodIndex > endOfClassIndex) { - return -1; + if ( + startOfClassMethodIndex === -1 || + !startOfClassMethodMarker || + startOfClassMethodIndex > endOfClassIndex + ) { + return { index: -1 }; } - const afterMarkerIndex: number = - rest.indexOf(markerForStartOfClassMethod) + markerForStartOfClassMethod.length; + const afterMarkerIndex: number = startOfClassMethodIndex + startOfClassMethodMarker.length; const isPublicMethod: boolean = rest[afterMarkerIndex] !== '_' && @@ -97,11 +116,7 @@ export function generatePatchedLinterJsFileIfDoesNotExist( !rest.substring(afterMarkerIndex, rest.indexOf('\n', afterMarkerIndex)).includes('static') && !rest.substring(afterMarkerIndex, rest.indexOf('\n', afterMarkerIndex)).includes('constructor'); - if (isPublicMethod) { - return fromIndex + afterMarkerIndex; - } - - return getIndexOfNextPublicMethod(fromIndex + afterMarkerIndex); + return { index: fromIndex + afterMarkerIndex, isPublic: isPublicMethod }; } function scanUntilIndex(indexToScanTo: number): string { @@ -162,6 +177,14 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ outputFile += `--- END MONKEY PATCH --- `; + if (majorVersion >= 9) { + outputFile += scanUntilMarker('const emitter = createEmitter();'); + outputFile += ` + // --- BEGIN MONKEY PATCH --- + let currentNode = undefined; + // --- END MONKEY PATCH ---`; + } + // Match this: // ``` // if (reportTranslator === null) { @@ -193,7 +216,7 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ // } // const problem = reportTranslator(...args); // // --- BEGIN MONKEY PATCH --- - // if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode, ruleId })) return; + // if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return; // // --- END MONKEY PATCH --- // // if (problem.fix && !(rule.meta && rule.meta.fixable)) { @@ -202,14 +225,35 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ // ``` outputFile += scanUntilMarker('const problem = reportTranslator(...args);'); outputFile += ` - // --- BEGIN MONKEY PATCH --- - if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode, ruleId, problem })) return; - // --- END MONKEY PATCH --- -`; + // --- BEGIN MONKEY PATCH --- + if (bulkSuppressionsPatch.shouldBulkSuppress({ filename, currentNode: args[0]?.node ?? currentNode, ruleId, problem })) return; + // --- END MONKEY PATCH ---`; + + // + // Match this: + // ``` + // Object.keys(ruleListeners).forEach(selector => { + // ... + // }); + // ``` + // + // Convert to something like this: + // ``` + // Object.keys(ruleListeners).forEach(selector => { + // // --- BEGIN MONKEY PATCH --- + // emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; }); + // // --- END MONKEY PATCH --- + // ... + // }); + // ``` + if (majorVersion >= 9) { + outputFile += scanUntilMarker('Object.keys(ruleListeners).forEach(selector => {'); + outputFile += ` + // --- BEGIN MONKEY PATCH --- + emitter.on(selector, (...args) => { currentNode = args[args.length - 1]; }); + // --- END MONKEY PATCH ---`; + } - outputFile += scanUntilMarker('nodeQueue.forEach(traversalInfo => {'); - outputFile += scanUntilMarker('});'); - outputFile += scanUntilNewline(); outputFile += scanUntilMarker('class Linter {'); outputFile += scanUntilNewline(); outputFile += ` @@ -238,18 +282,44 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ // --- END MONKEY PATCH --- `; - let indexOfNextPublicMethod: number = getIndexOfNextPublicMethod(inputIndex); - while (indexOfNextPublicMethod !== -1) { - outputFile += scanUntilIndex(indexOfNextPublicMethod); - outputFile += scanUntilNewline(); - outputFile += ` // --- BEGIN MONKEY PATCH --- + const privateMethodNames: string[] = []; + let { index: indexOfNextMethod, isPublic } = getIndexOfNextMethod(inputIndex); + + while (indexOfNextMethod !== -1) { + outputFile += scanUntilIndex(indexOfNextMethod); + if (isPublic) { + // Inject the monkey patch at the start of the public method + outputFile += scanUntilNewline(); + outputFile += ` // --- BEGIN MONKEY PATCH --- this._conditionallyReinitialize(); // --- END MONKEY PATCH --- `; - indexOfNextPublicMethod = getIndexOfNextPublicMethod(inputIndex); + } else if (inputFile[inputIndex] === '#') { + // Replace the '#' private method with a '_' private method, so that our monkey patch + // can still call it. Otherwise, we get the following error during execution: + // TypeError: Receiver must be an instance of class Linter + const privateMethodName: string = scanUntilMarker('('); + // Remove the '(' at the end and stash it, since we need to escape it for the regex later + privateMethodNames.push(privateMethodName.slice(0, -1)); + outputFile += `_${privateMethodName.slice(1)}`; + } + + const indexResult: { index: number; isPublic?: boolean } = getIndexOfNextMethod(inputIndex); + indexOfNextMethod = indexResult.index; + isPublic = indexResult.isPublic; } outputFile += scanUntilEnd(); + // Do a second pass to find and replace all calls to private methods with the patched versions. + if (privateMethodNames.length) { + // eslint-disable-next-line @rushstack/security/no-unsafe-regexp + const privateMethodCallRegex: RegExp = new RegExp(`\.(${privateMethodNames.join('|')})\\(`, 'g'); + outputFile = outputFile.replace(privateMethodCallRegex, (match, privateMethodName) => { + // Replace the leading '#' with a leading '_' + return `._${privateMethodName.slice(1)}(`; + }); + } + fs.writeFileSync(outputFilePath, outputFile); } diff --git a/eslint/eslint-patch/src/eslint-bulk-suppressions/index.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/index.ts index 2297af04063..c11870137a9 100644 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/index.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/index.ts @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import { eslintFolder } from '../_patch-base'; +import { eslintFolder, eslintPackageVersion } from '../_patch-base'; import { findAndConsoleLogPatchPathCli, getPathToLinterJS, ensurePathToGeneratedPatch } from './path-utils'; import { patchClass, extendVerifyFunction } from './bulk-suppressions-patch'; import { generatePatchedLinterJsFileIfDoesNotExist } from './generate-patched-file'; @@ -26,7 +26,7 @@ const pathToLinterJS: string = getPathToLinterJS(); process.env[ESLINT_BULK_PATCH_PATH_ENV_VAR_NAME] = require.resolve('./bulk-suppressions-patch'); const pathToGeneratedPatch: string = ensurePathToGeneratedPatch(); -generatePatchedLinterJsFileIfDoesNotExist(pathToLinterJS, pathToGeneratedPatch); +generatePatchedLinterJsFileIfDoesNotExist(pathToLinterJS, pathToGeneratedPatch, eslintPackageVersion); const { Linter: LinterPatch } = require(pathToGeneratedPatch); LinterPatch.prototype.verify = extendVerifyFunction(LinterPatch.prototype.verify); diff --git a/eslint/eslint-plugin-packlets/package.json b/eslint/eslint-plugin-packlets/package.json index fbd105c5f29..eca94db587e 100644 --- a/eslint/eslint-plugin-packlets/package.json +++ b/eslint/eslint-plugin-packlets/package.json @@ -24,17 +24,14 @@ }, "dependencies": { "@rushstack/tree-pattern": "workspace:*", - "@typescript-eslint/utils": "~8.26.1" + "@typescript-eslint/utils": "~8.31.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" }, "devDependencies": { "@rushstack/heft": "0.73.2", - "@types/eslint": "8.56.10", - "@types/estree": "1.0.6", - "@typescript-eslint/parser": "~8.26.1", - "@typescript-eslint/typescript-estree": "~8.26.1", + "@typescript-eslint/parser": "~8.31.0", "decoupled-local-node-rig": "workspace:*", "eslint": "~8.57.0", "typescript": "~5.8.2" diff --git a/eslint/eslint-plugin-security/package.json b/eslint/eslint-plugin-security/package.json index 596ad319658..8a998780a9e 100644 --- a/eslint/eslint-plugin-security/package.json +++ b/eslint/eslint-plugin-security/package.json @@ -23,19 +23,16 @@ }, "dependencies": { "@rushstack/tree-pattern": "workspace:*", - "@typescript-eslint/utils": "~8.26.1" + "@typescript-eslint/utils": "~8.31.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" }, "devDependencies": { - "@eslint/eslintrc": "~3.0.0", "@rushstack/heft": "0.73.2", - "@types/eslint": "8.56.10", - "@types/estree": "1.0.6", - "@typescript-eslint/parser": "~8.26.1", - "@typescript-eslint/rule-tester": "~8.26.1", - "@typescript-eslint/typescript-estree": "~8.26.1", + "@typescript-eslint/parser": "~8.31.0", + "@typescript-eslint/rule-tester": "~8.31.0", + "@typescript-eslint/typescript-estree": "~8.31.0", "decoupled-local-node-rig": "workspace:*", "eslint": "~8.57.0", "typescript": "~5.8.2" diff --git a/eslint/eslint-plugin/package.json b/eslint/eslint-plugin/package.json index 0142b58eaab..6abdc86df80 100644 --- a/eslint/eslint-plugin/package.json +++ b/eslint/eslint-plugin/package.json @@ -27,19 +27,15 @@ }, "dependencies": { "@rushstack/tree-pattern": "workspace:*", - "@typescript-eslint/utils": "~8.26.1" + "@typescript-eslint/utils": "~8.31.0" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" }, "devDependencies": { - "@eslint/eslintrc": "~3.0.0", "@rushstack/heft": "0.73.2", - "@types/eslint": "8.56.10", - "@types/estree": "1.0.6", - "@typescript-eslint/parser": "~8.26.1", - "@typescript-eslint/rule-tester": "~8.26.1", - "@typescript-eslint/typescript-estree": "~8.26.1", + "@typescript-eslint/parser": "~8.31.0", + "@typescript-eslint/rule-tester": "~8.31.0", "decoupled-local-node-rig": "workspace:*", "eslint": "~8.57.0", "typescript": "~5.8.2" diff --git a/eslint/local-eslint-config/.gitignore b/eslint/local-eslint-config/.gitignore index 654694f5ee1..e266a90461c 100644 --- a/eslint/local-eslint-config/.gitignore +++ b/eslint/local-eslint-config/.gitignore @@ -1,3 +1,4 @@ -/mixins -/patch -/profile \ No newline at end of file +# Uncomment the commented lines once the decoupled-local-node-rig is updated to support ESLint 9 +# /flat/mixins +# /flat/patch +# /flat/profile \ No newline at end of file diff --git a/eslint/local-eslint-config/.npmignore b/eslint/local-eslint-config/.npmignore index 84ca84895cd..25141726512 100644 --- a/eslint/local-eslint-config/.npmignore +++ b/eslint/local-eslint-config/.npmignore @@ -24,6 +24,4 @@ ## Project specific definitions # ----------------------------- -!/mixins/** -!/patch/** -!/profile/** \ No newline at end of file +!/flat/** \ No newline at end of file diff --git a/eslint/local-eslint-config/config/heft.json b/eslint/local-eslint-config/config/heft.json index d4ccbea3f42..f849cc64520 100644 --- a/eslint/local-eslint-config/config/heft.json +++ b/eslint/local-eslint-config/config/heft.json @@ -1,26 +1,27 @@ { "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", + // TODO: Uncomment the commented lines once the decoupled-local-node-rig is updated to support ESLint 9 "phasesByName": { "build": { - "cleanFiles": [{ "includeGlobs": ["mixins", "patch", "profile"] }], + // "cleanFiles": [{ "includeGlobs": ["mixins", "patch", "profile"] }], "tasksByName": { - "copy-contents": { - "taskPlugin": { - "pluginPackage": "@rushstack/heft", - "pluginName": "copy-files-plugin", - "options": { - "copyOperations": [ - { - "sourcePath": "node_modules/decoupled-local-node-rig/profiles/default/includes/eslint", - "destinationFolders": ["."], - "includeGlobs": ["**"] - } - ] - } - } - } + // "copy-contents": { + // "taskPlugin": { + // "pluginPackage": "@rushstack/heft", + // "pluginName": "copy-files-plugin", + // "options": { + // "copyOperations": [ + // { + // "sourcePath": "node_modules/decoupled-local-node-rig/profiles/default/includes/eslint", + // "destinationFolders": ["."], + // "includeGlobs": ["**"] + // } + // ] + // } + // } + // } } } } diff --git a/eslint/local-eslint-config/config/rush-project.json b/eslint/local-eslint-config/config/rush-project.json index 1965f21aa81..340c4fd0356 100644 --- a/eslint/local-eslint-config/config/rush-project.json +++ b/eslint/local-eslint-config/config/rush-project.json @@ -1,10 +1,11 @@ { "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json", + // TODO: Uncomment the commented lines once the decoupled-local-node-rig is updated to support ESLint 9 "operationSettings": [ - { - "operationName": "_phase:build", - "outputFolderNames": ["mixins", "patch", "profile"] - } + // { + // "operationName": "_phase:build", + // "outputFolderNames": ["mixins", "patch", "profile"] + // } ] } diff --git a/eslint/local-eslint-config/flat/mixins/friendly-locals.js b/eslint/local-eslint-config/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..446fe54cad6 --- /dev/null +++ b/eslint/local-eslint-config/flat/mixins/friendly-locals.js @@ -0,0 +1,8 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); + +module.exports = [...friendlyLocalsMixin]; diff --git a/eslint/local-eslint-config/flat/mixins/packlets.js b/eslint/local-eslint-config/flat/mixins/packlets.js new file mode 100644 index 00000000000..c6f6a123ab5 --- /dev/null +++ b/eslint/local-eslint-config/flat/mixins/packlets.js @@ -0,0 +1,8 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); + +module.exports = [...packletsMixin]; diff --git a/eslint/local-eslint-config/flat/mixins/react.js b/eslint/local-eslint-config/flat/mixins/react.js new file mode 100644 index 00000000000..15deb89fa31 --- /dev/null +++ b/eslint/local-eslint-config/flat/mixins/react.js @@ -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. + +// Adds support for a handful of React specific rules. These rules are sourced from two different +// react rulesets: +// - eslint-plugin-react (through @rushstack/eslint-config/flat/mixins/react) +// - eslint-plugin-react-hooks +// +// Additional information on how this mixin should be consumed can be found here: +// https://github.com/microsoft/rushstack/tree/master/eslint/eslint-config#rushstackeslint-configmixinsreact +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const reactHooksEslintPlugin = require('eslint-plugin-react-hooks'); +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); + +module.exports = [ + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + 'react-hooks': reactHooksEslintPlugin + }, + rules: { + // ===================================================================== + // eslint-plugin-react-hooks + // ===================================================================== + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn' + } + }, + { + // For unit tests, we can be a little bit less strict. The settings below revise the + // defaults specified above. + files: [ + // Test files + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', + + // Facebook convention + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', + + // Microsoft convention + '**/test/**/*.ts', + '**/test/**/*.tsx' + ], + + // New rules and changes to existing rules + rules: {} + } +]; diff --git a/eslint/local-eslint-config/flat/mixins/tsdoc.js b/eslint/local-eslint-config/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..342d3612a97 --- /dev/null +++ b/eslint/local-eslint-config/flat/mixins/tsdoc.js @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile + +const jsdocEslintPlugin = require('eslint-plugin-jsdoc'); +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); + +module.exports = [ + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + jsdoc: jsdocEslintPlugin + }, + rules: { + // Rationale: Ensures that parameter names in JSDoc match those in the function + // declaration. Good to keep these in sync. + 'jsdoc/check-param-names': 'warn' + } + }, + { + files: [ + // Test files + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', + + // Facebook convention + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', + + // Microsoft convention + '**/test/**/*.ts', + '**/test/**/*.tsx' + ], + rules: {} + } +]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js b/eslint/local-eslint-config/flat/patch/eslint-bulk-suppressions.js similarity index 70% rename from rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js rename to eslint/local-eslint-config/flat/patch/eslint-bulk-suppressions.js index a262ef96af5..12c37b253da 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js +++ b/eslint/local-eslint-config/flat/patch/eslint-bulk-suppressions.js @@ -1,4 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -require('local-eslint-config/patch/modern-module-resolution'); +require('@rushstack/eslint-patch/eslint-bulk-suppressions'); diff --git a/eslint/local-eslint-config/flat/profile/_common.js b/eslint/local-eslint-config/flat/profile/_common.js new file mode 100644 index 00000000000..c7a8b144da3 --- /dev/null +++ b/eslint/local-eslint-config/flat/profile/_common.js @@ -0,0 +1,163 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { expandNamingConventionSelectors } = require('@rushstack/eslint-config/flat/profile/_macros'); +const { commonNamingConventionSelectors } = require('@rushstack/eslint-config/flat/profile/_common'); +const rushstackEslintPlugin = require('@rushstack/eslint-plugin'); +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); +const importEslintPlugin = require('eslint-plugin-import'); +const headersEslintPlugin = require('eslint-plugin-headers'); + +const nodeImportResolverPath = require.resolve('eslint-import-resolver-node'); + +module.exports = { + localCommonConfig: [ + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + '@rushstack': rushstackEslintPlugin, + '@typescript-eslint': typescriptEslintPlugin, + import: importEslintPlugin, + headers: headersEslintPlugin + }, + settings: { + 'import/resolver': nodeImportResolverPath + }, + rules: { + // Rationale: Backslashes are platform-specific and will cause breaks on non-Windows + // platforms. + '@rushstack/no-backslash-imports': 'error', + + // Rationale: Avoid consuming dependencies which would not otherwise be present when + // the package is published. + '@rushstack/no-external-local-imports': 'error', + + // Rationale: Consumption of transitive dependencies can be problematic when the dependency + // is updated or removed from the parent package. Enforcing consumption of only direct dependencies + // ensures that the package is exactly what we expect it to be. + '@rushstack/no-transitive-dependency-imports': 'warn', + + // Rationale: Using the simplest possible import syntax is preferred and makes it easier to + // understand where the dependency is coming from. + '@rushstack/normalized-imports': 'warn', + + // Rationale: Use of `void` to explicitly indicate that a floating promise is expected + // and allowed. + '@typescript-eslint/no-floating-promises': [ + 'error', + { + ignoreVoid: true, + checkThenables: true + } + ], + + // Rationale: Redeclaring a variable likely indicates a mistake in the code. + 'no-redeclare': 'off', + '@typescript-eslint/no-redeclare': 'error', + + // Rationale: Can easily cause developer confusion. + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': 'warn', + + // Rationale: Catches a common coding mistake where a dependency is taken on a package or + // module that is not available once the package is published. + 'import/no-extraneous-dependencies': ['error', { devDependencies: true, peerDependencies: true }], + + // Rationale: Use of `== null` comparisons is common-place + eqeqeq: ['error', 'always', { null: 'ignore' }], + + // Rationale: Consistent use of function declarations that allow for arrow functions. + 'func-style': ['warn', 'declaration', { allowArrowFunctions: true }], + + // Rationale: Use of `console` logging is generally discouraged. If it's absolutely needed + // or added for debugging purposes, there are more specific log levels to write to than the + // default `console.log`. + 'no-console': ['warn', { allow: ['debug', 'info', 'time', 'timeEnd', 'trace'] }], + + // Rationale: Loosen the rules for unused expressions to allow for ternary operators and + // short circuits, which are widely used + 'no-unused-expressions': ['warn', { allowShortCircuit: true, allowTernary: true }], + + // Rationale: Use of `void` to explicitly indicate that a floating promise is expected + // and allowed. + 'no-void': ['error', { allowAsStatement: true }], + + // Rationale: Different implementations of `parseInt` may have different behavior when the + // radix is not specified. We should always specify the radix. + radix: 'error', + + // Rationale: Including the `type` annotation in the import statement for imports + // only used as types prevents the import from being emitted in the compiled output. + '@typescript-eslint/consistent-type-imports': [ + 'warn', + { prefer: 'type-imports', disallowTypeAnnotations: false, fixStyle: 'inline-type-imports' } + ], + + // Rationale: If all imports in an import statement are only used as types, + // then the import statement should be omitted in the compiled JS output. + '@typescript-eslint/no-import-type-side-effects': 'warn', + + 'headers/header-format': [ + 'warn', + { + source: 'string', + style: 'line', + content: + 'Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n' + + 'See LICENSE in the project root for license information.' + } + ], + + // Docs: https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/docs/rules/naming-convention.md + '@typescript-eslint/naming-convention': [ + 'warn', + ...expandNamingConventionSelectors([ + ...commonNamingConventionSelectors, + { + selectors: ['method'], + modifiers: ['async'], + enforceLeadingUnderscoreWhenPrivate: true, + + format: null, + custom: { + regex: '^_?[a-zA-Z]\\w*Async$', + match: true + }, + leadingUnderscore: 'allow', + + filter: { + regex: [ + // Specifically allow ts-command-line's "onExecute" function. + '^onExecute$' + ] + .map((x) => `(${x})`) + .join('|'), + match: false + } + } + ]) + ] + } + }, + { + files: [ + // Test files + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', + + // Facebook convention + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', + + // Microsoft convention + '**/test/**/*.ts', + '**/test/**/*.tsx' + ], + rules: {} + } + ] +}; diff --git a/eslint/local-eslint-config/flat/profile/node-trusted-tool.js b/eslint/local-eslint-config/flat/profile/node-trusted-tool.js new file mode 100644 index 00000000000..69c3662a206 --- /dev/null +++ b/eslint/local-eslint-config/flat/profile/node-trusted-tool.js @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This profile enables lint rules intended for a Node.js project whose inputs will always +// come from a developer or other trusted source. Most build system tasks are like this, +// since they operate on exclusively files prepared by a developer. +// +// This profile disables certain security rules that would otherwise prohibit APIs that could +// cause a denial-of-service by consuming too many resources, or which might interact with +// the filesystem in unsafe ways. Such activities are safe and commonplace for a trusted tool. +// +// DO NOT use this profile for a library project that might also be loaded by a Node.js service; +// use "local-eslint-config/flat/profiles/node" instead. + +const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node-trusted-tool'); + +const { localCommonConfig } = require('./_common'); + +module.exports = [...nodeTrustedToolProfile, ...localCommonConfig]; diff --git a/eslint/local-eslint-config/flat/profile/node.js b/eslint/local-eslint-config/flat/profile/node.js new file mode 100644 index 00000000000..0b3e77ec0e7 --- /dev/null +++ b/eslint/local-eslint-config/flat/profile/node.js @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This profile enables lint rules intended for a general Node.js project, typically a web service. +// It enables security rules that assume the service could receive malicious inputs from an +// untrusted user. If that is not the case, consider using the "node-trusted-tool" profile instead. + +const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); + +const { localCommonConfig } = require('./_common'); + +module.exports = [...nodeProfile, ...localCommonConfig]; diff --git a/eslint/local-eslint-config/flat/profile/web-app.js b/eslint/local-eslint-config/flat/profile/web-app.js new file mode 100644 index 00000000000..7990844a462 --- /dev/null +++ b/eslint/local-eslint-config/flat/profile/web-app.js @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +// This profile enables lint rules intended for a web application. It enables security rules +// that are relevant to web browser APIs such as DOM. +// +// Also use this profile if you are creating a library that can be consumed by both Node.js +// and web applications. + +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); +const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); + +const { localCommonConfig } = require('./_common'); + +module.exports = [ + ...webAppProfile, + ...localCommonConfig, + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + '@typescript-eslint': typescriptEslintPlugin + }, + rules: { + // Rationale: Importing a module with `require` cannot be optimized by webpack as effectively as + // `import` statements. + '@typescript-eslint/no-require-imports': 'error' + } + } +]; diff --git a/eslint/local-eslint-config/package.json b/eslint/local-eslint-config/package.json index 1a720f6fbed..3e47a58341a 100644 --- a/eslint/local-eslint-config/package.json +++ b/eslint/local-eslint-config/package.json @@ -7,8 +7,12 @@ "build": "heft build --clean", "_phase:build": "heft build --clean" }, + "peerDependencies": { + "eslint": "^9.25.1", + "typescript": ">=4.7.0" + }, "devDependencies": { - "eslint": "~8.57.0", + "eslint": "~9.25.1", "typescript": "~5.8.2", "@rushstack/heft": "0.73.2", "decoupled-local-node-rig": "workspace:*" @@ -16,11 +20,14 @@ "dependencies": { "@rushstack/eslint-config": "workspace:*", "@rushstack/eslint-patch": "workspace:*", - "@typescript-eslint/parser": "~8.26.1", - "eslint-plugin-deprecation": "2.0.0", + "@rushstack/eslint-plugin": "workspace:*", + "@typescript-eslint/eslint-plugin": "~8.31.0", + "@typescript-eslint/parser": "~8.31.0", + "eslint-import-resolver-node": "0.3.9", "eslint-plugin-header": "~3.1.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-jsdoc": "37.6.1", - "eslint-plugin-react-hooks": "4.3.0" + "eslint-plugin-headers": "~1.2.1", + "eslint-plugin-import": "2.31.0", + "eslint-plugin-jsdoc": "50.6.11", + "eslint-plugin-react-hooks": "5.2.0" } } diff --git a/heft-plugins/heft-dev-cert-plugin/.eslintrc.js b/heft-plugins/heft-dev-cert-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-dev-cert-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/heft-plugins/heft-dev-cert-plugin/eslint.config.js b/heft-plugins/heft-dev-cert-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-dev-cert-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-dev-cert-plugin/package.json b/heft-plugins/heft-dev-cert-plugin/package.json index 29c839b2651..bd2584b4897 100644 --- a/heft-plugins/heft-dev-cert-plugin/package.json +++ b/heft-plugins/heft-dev-cert-plugin/package.json @@ -23,8 +23,8 @@ }, "devDependencies": { "@microsoft/api-extractor": "workspace:*", - "local-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", - "eslint": "~8.57.0" + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" } } diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/.eslintrc.js b/heft-plugins/heft-isolated-typescript-transpile-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-isolated-typescript-transpile-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js b/heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json b/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json index ad67d3352b4..f4fb3893691 100644 --- a/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/package.json @@ -23,8 +23,9 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", - "@rushstack/heft-typescript-plugin": "workspace:*" + "@rushstack/heft-typescript-plugin": "workspace:*", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" }, "dependencies": { "@rushstack/lookup-by-path": "workspace:*", diff --git a/heft-plugins/heft-lint-plugin/package.json b/heft-plugins/heft-lint-plugin/package.json index 5985f1c468e..d5a83d14c26 100644 --- a/heft-plugins/heft-lint-plugin/package.json +++ b/heft-plugins/heft-lint-plugin/package.json @@ -10,24 +10,29 @@ "homepage": "https://rushstack.io/pages/heft/overview/", "license": "MIT", "scripts": { - "build": "heft test --clean", + "build": "heft build --clean", "start": "heft build-watch", - "_phase:build": "heft run --only build -- --clean" + "_phase:build": "heft run --only build -- --clean", + "_phase:test": "heft run --only test -- --clean" }, "peerDependencies": { "@rushstack/heft": "0.74.0" }, "dependencies": { "@rushstack/node-core-library": "workspace:*", + "json-stable-stringify-without-jsonify": "1.0.1", "semver": "~7.5.4" }, "devDependencies": { "@rushstack/heft-typescript-plugin": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/terminal": "workspace:*", + "@types/eslint-9": "npm:@types/eslint@9.6.1", "@types/eslint": "8.56.10", + "@types/json-stable-stringify-without-jsonify": "1.0.2", "@types/semver": "7.5.0", "decoupled-local-node-rig": "workspace:*", + "eslint-9": "npm:eslint@~9.25.1", "eslint": "~8.57.0", "typescript": "~5.8.2", "tslint": "~5.20.1" diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index 7c0f53c966f..d368b96ba9f 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -1,17 +1,22 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import * as crypto from 'crypto'; -import * as semver from 'semver'; +import path from 'node:path'; +import { createHash, type Hash } from 'node:crypto'; +import { performance } from 'node:perf_hooks'; import type * as TTypescript from 'typescript'; -import type * as TEslint from 'eslint'; -import { performance } from 'perf_hooks'; +import type * as TEslint from 'eslint-9'; +import type * as TEslintLegacy from 'eslint'; +import * as semver from 'semver'; +import stableStringify from 'json-stable-stringify-without-jsonify'; import { FileError, FileSystem } from '@rushstack/node-core-library'; +import type { HeftConfiguration } from '@rushstack/heft'; import { LinterBase, type ILinterBaseOptions } from './LinterBase'; +import type { IExtendedSourceFile } from './internalTypings/TypeScriptInternals'; interface IEslintOptions extends ILinterBaseOptions { - eslintPackage: typeof TEslint; + eslintPackage: typeof TEslint | typeof TEslintLegacy; eslintTimings: Map; } @@ -47,18 +52,63 @@ async function patchTimerAsync(eslintPackagePath: string, timingsMap: Map { - private readonly _eslintPackage: typeof TEslint; - private readonly _linter: TEslint.ESLint; +interface IExtendedEslintConfig extends TEslint.Linter.Config { + // https://github.com/eslint/eslint/blob/d6fa4ac031c2fe24fb778e84940393fbda3ddf77/lib/config/config.js#L264 + toJSON: () => object; + __originalToJSON: () => object; +} + +function patchedToJSON(this: IExtendedEslintConfig): object { + // If the input config has a parserOptions.programs property, we need to recreate it + // as a non-enumerable property so that it does not get serialized, as it is not + // serializable. + if ( + this.languageOptions?.parserOptions?.programs && + this.languageOptions.parserOptions.propertyIsEnumerable('programs') + ) { + let { programs } = this.languageOptions.parserOptions; + Object.defineProperty(this.languageOptions.parserOptions, 'programs', { + get: () => programs, + set: (value: TTypescript.Program[]) => { + programs = value; + }, + enumerable: false + }); + } + + const serializableConfig: object = this.__originalToJSON.call(this); + return serializableConfig; +} + +const ESLINT_CONFIG_JS_FILENAME: string = 'eslint.config.js'; +const ESLINT_CONFIG_CJS_FILENAME: string = 'eslint.config.cjs'; +const ESLINT_CONFIG_MJS_FILENAME: string = 'eslint.config.mjs'; +const LEGACY_ESLINTRC_JS_FILENAME: string = '.eslintrc.js'; +const LEGACY_ESLINTRC_CJS_FILENAME: string = '.eslintrc.cjs'; + +const ESLINT_LEGACY_CONFIG_FILENAMES: Set = new Set([ + LEGACY_ESLINTRC_JS_FILENAME, + LEGACY_ESLINTRC_CJS_FILENAME +]); + +export class Eslint extends LinterBase { + private readonly _eslintPackage: typeof TEslint | typeof TEslintLegacy; + private readonly _eslintPackageVersion: semver.SemVer; + private readonly _linter: TEslint.ESLint | TEslintLegacy.ESLint; private readonly _eslintTimings: Map = new Map(); - private readonly _currentFixMessages: TEslint.Linter.LintMessage[] = []; - private readonly _fixMessagesByResult: Map = - new Map(); + private readonly _currentFixMessages: (TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage)[] = + []; + private readonly _fixMessagesByResult: Map< + TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult, + (TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage)[] + > = new Map(); private readonly _sarifLogPath: string | undefined; protected constructor(options: IEslintOptions) { @@ -74,42 +124,101 @@ export class Eslint extends LinterBase { sarifLogPath } = options; this._eslintPackage = eslintPackage; + this._eslintPackageVersion = new semver.SemVer(eslintPackage.ESLint.version); + const linterConfigFileName: string = path.basename(linterConfigFilePath); + if (this._eslintPackageVersion.major < 9 && !ESLINT_LEGACY_CONFIG_FILENAMES.has(linterConfigFileName)) { + throw new Error( + `You must use a ${LEGACY_ESLINTRC_JS_FILENAME} or a ${LEGACY_ESLINTRC_CJS_FILENAME} file with ESLint ` + + `8 or older. The provided config file is "${linterConfigFilePath}".` + ); + } else if ( + this._eslintPackageVersion.major >= 9 && + ESLINT_LEGACY_CONFIG_FILENAMES.has(linterConfigFileName) + ) { + throw new Error( + `You must use an ${ESLINT_CONFIG_JS_FILENAME}, ${ESLINT_CONFIG_CJS_FILENAME}, or an ` + + `${ESLINT_CONFIG_MJS_FILENAME} file with ESLint 9 or newer. The provided config file is ` + + `"${linterConfigFilePath}".` + ); + } + this._sarifLogPath = sarifLogPath; - let overrideConfig: TEslint.Linter.Config | undefined; - let fixFn: Exclude; + let overrideConfig: TEslint.Linter.Config | TEslintLegacy.Linter.Config | undefined; + let fixFn: Exclude; if (fix) { // We do not recieve the messages for the issues that were fixed, so we need to track them ourselves // so that we can log them after the fix is applied. This array will be populated by the fix function, // and subsequently mapped to the results in the ESLint.lintFileAsync method below. After the messages // are mapped, the array will be cleared so that it is ready for the next fix operation. - fixFn = (message: TEslint.Linter.LintMessage) => { + fixFn = (message: TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any this._currentFixMessages.push(message); return true; }; - } else { + } else if (this._eslintPackageVersion.major <= 8) { // The @typescript-eslint/parser package allows providing an existing TypeScript program to avoid needing // to reparse. However, fixers in ESLint run in multiple passes against the underlying code until the // fix fully succeeds. This conflicts with providing an existing program as the code no longer maps to // the provided program, producing garbage fix output. To avoid this, only provide the existing program // if we're not fixing. - overrideConfig = { + const legacyEslintOverrideConfig: TEslintLegacy.Linter.Config = { parserOptions: { programs: [tsProgram] } }; + overrideConfig = legacyEslintOverrideConfig; + } else { + // The @typescript-eslint/parser package allows providing an existing TypeScript program to avoid needing + // to reparse. However, fixers in ESLint run in multiple passes against the underlying code until the + // fix fully succeeds. This conflicts with providing an existing program as the code no longer maps to + // the provided program, producing garbage fix output. To avoid this, only provide the existing program + // if we're not fixing. + const eslintOverrideConfig: TEslint.Linter.Config = { + languageOptions: { + parserOptions: { + programs: [tsProgram] + } + } + }; + overrideConfig = eslintOverrideConfig; } this._linter = new eslintPackage.ESLint({ cwd: buildFolderPath, overrideConfigFile: linterConfigFilePath, // Override config takes precedence over overrideConfigFile - overrideConfig, - fix: fixFn + // eslint-disable-next-line @typescript-eslint/no-explicit-any + overrideConfig: overrideConfig as any, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + fix: fixFn as any }); this._eslintTimings = eslintTimings; } + public static async resolveEslintConfigFilePathAsync( + heftConfiguration: HeftConfiguration + ): Promise { + // When project is configured with "type": "module" in package.json, the config file must have a .cjs extension + // so use it if it exists + const configPathCandidates: string[] = [ + `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_JS_FILENAME}`, + `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_CJS_FILENAME}`, + `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_MJS_FILENAME}`, + `${heftConfiguration.buildFolderPath}/${LEGACY_ESLINTRC_JS_FILENAME}`, + `${heftConfiguration.buildFolderPath}/${LEGACY_ESLINTRC_CJS_FILENAME}` + ]; + const foundConfigs: string[] = ( + await Promise.all(configPathCandidates.map(async (p: string) => (await FileSystem.existsAsync(p)) && p)) + ).filter((p) => p !== false); + + if (foundConfigs.length > 1) { + throw new Error(`Project contains multiple ESLint configuration files: "${foundConfigs.join('", "')}"`); + } + + return foundConfigs[0]; + } + public static async initializeAsync(options: ILinterBaseOptions): Promise { const { linterToolPath } = options; const eslintTimings: Map = new Map(); @@ -124,15 +233,13 @@ export class Eslint extends LinterBase { }); } - public printVersionHeader(): void { - const linterVersion: string = this._eslintPackage.Linter.version; - this._terminal.writeLine(`Using ESLint version ${linterVersion}`); + public override printVersionHeader(): void { + const { version, major } = this._eslintPackageVersion; + this._terminal.writeLine(`Using ESLint version ${version}`); - const majorVersion: number = semver.major(linterVersion); - if (majorVersion < 7) { + if (major < 7) { throw new Error('Heft requires ESLint 7 or newer. Your ESLint version is too old'); - } - if (majorVersion > 8) { + } else if (major > 9) { // 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( @@ -141,42 +248,57 @@ export class Eslint extends LinterBase { } } - protected async getCacheVersionAsync(): Promise { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const eslintBaseConfiguration: any = await this._linter.calculateConfigForFile( - this._linterConfigFilePath + protected override async getCacheVersionAsync(): Promise { + return `${this._eslintPackageVersion.version}_${process.version}`; + } + + protected override async getSourceFileHashAsync(sourceFile: IExtendedSourceFile): Promise { + const sourceFileEslintConfiguration: IExtendedEslintConfig = await this._linter.calculateConfigForFile( + sourceFile.fileName ); - const eslintConfigHash: crypto.Hash = crypto - .createHash('sha1') - .update(JSON.stringify(eslintBaseConfiguration)); - const eslintConfigVersion: string = `${this._eslintPackage.Linter.version}_${eslintConfigHash.digest( - 'hex' - )}`; - - return eslintConfigVersion; + + // The eslint configuration object contains a toJSON() method that returns a serializable version of the + // configuration. However, we are manually injecting the TypeScript program into the parserOptions, which + // is not serializable. Patch the function to remove the program before returning the serializable version. + if (sourceFileEslintConfiguration.toJSON && !sourceFileEslintConfiguration.__originalToJSON) { + sourceFileEslintConfiguration.__originalToJSON = sourceFileEslintConfiguration.toJSON; + sourceFileEslintConfiguration.toJSON = patchedToJSON.bind(sourceFileEslintConfiguration); + } + + const hash: Hash = createHash('sha1'); + // Use a stable stringifier to ensure that the hash is always the same, even if the order of the properties + // changes. This is also done in ESLint + // https://github.com/eslint/eslint/blob/8bbabc4691d97733a422180c71eba6c097b35475/lib/cli-engine/lint-result-cache.js#L50 + hash.update(stableStringify(sourceFileEslintConfiguration)); + + // Since the original hash can either come from TypeScript or from manually hashing the file, we can just + // append the config hash to the original hash to avoid reducing the hash space + const originalSourceFileHash: string = await super.getSourceFileHashAsync(sourceFile); + return `${originalSourceFileHash}_${hash.digest('base64')}`; } - protected async lintFileAsync(sourceFile: TTypescript.SourceFile): Promise { - const lintResults: TEslint.ESLint.LintResult[] = await this._linter.lintText(sourceFile.text, { - filePath: sourceFile.fileName - }); + protected override async lintFileAsync( + sourceFile: TTypescript.SourceFile + ): Promise { + const lintResults: TEslint.ESLint.LintResult[] | TEslintLegacy.ESLint.LintResult[] = + await this._linter.lintText(sourceFile.text, { filePath: sourceFile.fileName }); // Map the fix messages to the results. This API should only return one result per file, so we can be sure // that the fix messages belong to the returned result. If we somehow receive multiple results, we will // drop the messages on the floor, but since they are only used for logging, this should not be a problem. - const fixMessages: TEslint.Linter.LintMessage[] = this._currentFixMessages.splice(0); + const fixMessages: (TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage)[] = + this._currentFixMessages.splice(0); if (lintResults.length === 1) { this._fixMessagesByResult.set(lintResults[0], fixMessages); } - this._fixesPossible = - this._fixesPossible || - (!this._fix && - lintResults.some((lintResult: TEslint.ESLint.LintResult) => { - return lintResult.fixableErrorCount + lintResult.fixableWarningCount > 0; - })); + this._fixesPossible ||= + !this._fix && + lintResults.some((lintResult: TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult) => { + return lintResult.fixableErrorCount + lintResult.fixableWarningCount > 0; + }); - const trimmedLintResults: TEslint.ESLint.LintResult[] = []; + const trimmedLintResults: (TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult)[] = []; for (const lintResult of lintResults) { if ( lintResult.messages.length > 0 || @@ -191,7 +313,7 @@ export class Eslint extends LinterBase { return trimmedLintResults; } - protected async lintingFinishedAsync(lintResults: TEslint.ESLint.LintResult[]): Promise { + protected override async lintingFinishedAsync(lintResults: TEslint.ESLint.LintResult[]): Promise { let omittedRuleCount: number = 0; const timings: [string, number][] = Array.from(this._eslintTimings).sort( (x: [string, number], y: [string, number]) => { @@ -216,7 +338,8 @@ export class Eslint extends LinterBase { for (const lintResult of lintResults) { // Report linter fixes to the logger. These will only be returned when the underlying failure was fixed - const fixMessages: TEslint.Linter.LintMessage[] | undefined = this._fixMessagesByResult.get(lintResult); + const fixMessages: TEslint.Linter.LintMessage[] | TEslintLegacy.Linter.LintMessage[] | undefined = + this._fixMessagesByResult.get(lintResult); if (fixMessages) { for (const fixMessage of fixMessages) { const formattedMessage: string = `[FIXED] ${getFormattedErrorMessage(fixMessage)}`; @@ -261,13 +384,13 @@ export class Eslint extends LinterBase { } } - protected async isFileExcludedAsync(filePath: string): Promise { + protected override async isFileExcludedAsync(filePath: string): Promise { return await this._linter.isPathIgnored(filePath); } private _getLintFileError( - lintResult: TEslint.ESLint.LintResult, - lintMessage: TEslint.Linter.LintMessage, + lintResult: TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult, + lintMessage: TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage, message?: string ): FileError { if (!message) { diff --git a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts index 030405d0b95..b0e72afb775 100644 --- a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts +++ b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts @@ -3,7 +3,6 @@ import path from 'node:path'; -import { FileSystem } from '@rushstack/node-core-library'; import type { HeftConfiguration, IHeftTaskSession, @@ -16,6 +15,7 @@ import type { IChangedFilesHookOptions, ITypeScriptPluginAccessor } from '@rushstack/heft-typescript-plugin'; +import { AlreadyReportedError } from '@rushstack/node-core-library'; import type * as TTypescript from 'typescript'; @@ -25,10 +25,10 @@ import { Tslint } from './Tslint'; import type { IExtendedProgram, IExtendedSourceFile } from './internalTypings/TypeScriptInternals'; const PLUGIN_NAME: 'lint-plugin' = 'lint-plugin'; +const TYPESCRIPT_PLUGIN_PACKAGE_NAME: '@rushstack/heft-typescript-plugin' = + '@rushstack/heft-typescript-plugin'; const TYPESCRIPT_PLUGIN_NAME: typeof TypeScriptPluginName = 'typescript-plugin'; const FIX_PARAMETER_NAME: string = '--fix'; -const ESLINTRC_JS_FILENAME: string = '.eslintrc.js'; -const ESLINTRC_CJS_FILENAME: string = '.eslintrc.cjs'; interface ILintPluginOptions { alwaysFix?: boolean; @@ -69,8 +69,6 @@ function getSarifLogPath( } export default class LintPlugin implements IHeftTaskPlugin { - private readonly _lintingPromises: Promise[] = []; - // These are initliazed by _initAsync private _initPromise!: Promise; private _eslintToolPath: string | undefined; @@ -83,85 +81,85 @@ export default class LintPlugin implements IHeftTaskPlugin { heftConfiguration: HeftConfiguration, pluginOptions?: ILintPluginOptions ): void { - // To support standalone linting, track if we have hooked to the typescript plugin - let inTypescriptPhase: boolean = false; - // Disable linting in watch mode. Some lint rules require the context of multiple files, which // may not be available in watch mode. - if (!taskSession.parameters.watch) { - const fix: boolean = checkFix(taskSession, pluginOptions); - const sarifLogPath: string | undefined = getSarifLogPath(heftConfiguration, pluginOptions); - // Use the changed files hook to kick off linting asynchronously - taskSession.requestAccessToPluginByName( - '@rushstack/heft-typescript-plugin', - TYPESCRIPT_PLUGIN_NAME, - (accessor: ITypeScriptPluginAccessor) => { - // Hook into the changed files hook to kick off linting, which will be awaited in the run hook - accessor.onChangedFilesHook.tap( - PLUGIN_NAME, - (changedFilesHookOptions: IChangedFilesHookOptions) => { - const lintingPromise: Promise = this._lintAsync({ - taskSession, - heftConfiguration, - fix, - sarifLogPath, - tsProgram: changedFilesHookOptions.program as IExtendedProgram, - changedFiles: changedFilesHookOptions.changedFiles as ReadonlySet - }); - lintingPromise.catch(() => { - // Suppress unhandled promise rejection error - }); - // Hold on to the original promise, which will throw in the run hook if it unexpectedly fails - this._lintingPromises.push(lintingPromise); - } - ); - // Set the flag to indicate that we are in the typescript phase - inTypescriptPhase = true; - } - ); - } - - let warningPrinted: boolean = false; - - taskSession.hooks.run.tapPromise(PLUGIN_NAME, async (options: IHeftTaskRunHookOptions) => { - // Run the linters to completion. Linters emit errors and warnings to the logger. - if (taskSession.parameters.watch) { + if (taskSession.parameters.watch) { + let warningPrinted: boolean = false; + taskSession.hooks.run.tapPromise(PLUGIN_NAME, async () => { if (warningPrinted) { return; } - warningPrinted = true; // Warn since don't run the linters when in watch mode. taskSession.logger.terminal.writeWarningLine("Linting isn't currently supported in watch mode"); - } else { - if (!inTypescriptPhase) { - const fix: boolean = checkFix(taskSession, pluginOptions); - const sarifLogPath: string | undefined = getSarifLogPath(heftConfiguration, pluginOptions); - // If we are not in the typescript phase, we need to create a typescript program - // from the tsconfig file - const tsProgram: IExtendedProgram = await this._createTypescriptProgramAsync( - heftConfiguration, - taskSession - ); - const rootFiles: readonly string[] = tsProgram.getRootFileNames(); - const changedFiles: Set = new Set(); - rootFiles.forEach((rootFilePath: string) => { - const sourceFile: TTypescript.SourceFile | undefined = tsProgram.getSourceFile(rootFilePath); - changedFiles.add(sourceFile as IExtendedSourceFile); - }); + warningPrinted = true; + }); + return; + } + + const fix: boolean = checkFix(taskSession, pluginOptions); + const sarifLogPath: string | undefined = getSarifLogPath(heftConfiguration, pluginOptions); + + // To support standalone linting, track if we have hooked to the typescript plugin + let inTypescriptPhase: boolean = false; + // Use the changed files hook to collect the files and programs from TypeScript + let typescriptChangedFiles: [IExtendedProgram, ReadonlySet][] = []; + taskSession.requestAccessToPluginByName( + TYPESCRIPT_PLUGIN_PACKAGE_NAME, + TYPESCRIPT_PLUGIN_NAME, + (accessor: ITypeScriptPluginAccessor) => { + // Set the flag to indicate that we are in the typescript phase + inTypescriptPhase = true; + + // Hook into the changed files hook to collect the changed files and their programs + accessor.onChangedFilesHook.tap(PLUGIN_NAME, (changedFilesHookOptions: IChangedFilesHookOptions) => { + typescriptChangedFiles.push([ + changedFilesHookOptions.program as IExtendedProgram, + changedFilesHookOptions.changedFiles as ReadonlySet + ]); + }); + } + ); + + taskSession.hooks.run.tapPromise(PLUGIN_NAME, async (options: IHeftTaskRunHookOptions) => { + // If we are not in the typescript phase, we need to create a typescript program + // from the tsconfig file + if (!inTypescriptPhase) { + const tsProgram: IExtendedProgram = await this._createTypescriptProgramAsync( + heftConfiguration, + taskSession + ); + typescriptChangedFiles.push([tsProgram, new Set(tsProgram.getSourceFiles())]); + } + + // Run the linters to completion. Linters emit errors and warnings to the logger. + for (const [tsProgram, changedFiles] of typescriptChangedFiles) { + try { await this._lintAsync({ taskSession, heftConfiguration, - fix, - sarifLogPath, tsProgram, - changedFiles + changedFiles, + fix, + sarifLogPath }); - } else { - await Promise.all(this._lintingPromises); + } catch (error) { + if (!(error instanceof AlreadyReportedError)) { + taskSession.logger.emitError(error as Error); + } } } + + // Clear the changed files so that we don't lint them again if the task is executed again + typescriptChangedFiles = []; + + // We rely on the linters to emit errors and warnings to the logger. If they do, we throw an + // AlreadyReportedError to indicate that the task failed, but we don't want to throw an error + // if the linter has already reported it. + if (taskSession.logger.hasErrors) { + throw new AlreadyReportedError(); + } }); } @@ -202,7 +200,7 @@ export default class LintPlugin implements IHeftTaskPlugin { private async _initInnerAsync(heftConfiguration: HeftConfiguration, logger: IScopedLogger): Promise { // Locate the tslint linter if enabled - this._tslintConfigFilePath = await this._resolveTslintConfigFilePathAsync(heftConfiguration); + this._tslintConfigFilePath = await Tslint.resolveTslintConfigFilePathAsync(heftConfiguration); if (this._tslintConfigFilePath) { this._tslintToolPath = await heftConfiguration.rigPackageResolver.resolvePackageAsync( 'tslint', @@ -211,7 +209,7 @@ export default class LintPlugin implements IHeftTaskPlugin { } // Locate the eslint linter if enabled - this._eslintConfigFilePath = await this._resolveEslintConfigFilePathAsync(heftConfiguration); + this._eslintConfigFilePath = await Eslint.resolveEslintConfigFilePathAsync(heftConfiguration); if (this._eslintConfigFilePath) { logger.terminal.writeVerboseLine(`ESLint config file path: ${this._eslintConfigFilePath}`); this._eslintToolPath = await heftConfiguration.rigPackageResolver.resolvePackageAsync( @@ -276,38 +274,4 @@ export default class LintPlugin implements IHeftTaskPlugin { changedFiles: changedFiles || new Set(tsProgram.getSourceFiles()) }); } - - private async _resolveTslintConfigFilePathAsync( - heftConfiguration: HeftConfiguration - ): Promise { - const tslintConfigFilePath: string = `${heftConfiguration.buildFolderPath}/tslint.json`; - const tslintConfigFileExists: boolean = await FileSystem.existsAsync(tslintConfigFilePath); - return tslintConfigFileExists ? tslintConfigFilePath : undefined; - } - - private async _resolveEslintConfigFilePathAsync( - heftConfiguration: HeftConfiguration - ): Promise { - // When project is configured with "type": "module" in package.json, the config file must have a .cjs extension - // so use it if it exists - const defaultPath: string = `${heftConfiguration.buildFolderPath}/${ESLINTRC_JS_FILENAME}`; - const alternativePath: string = `${heftConfiguration.buildFolderPath}/${ESLINTRC_CJS_FILENAME}`; - const [alternativePathExists, defaultPathExists] = await Promise.all([ - FileSystem.existsAsync(alternativePath), - FileSystem.existsAsync(defaultPath) - ]); - - if (alternativePathExists && defaultPathExists) { - throw new Error( - `Project contains both "${ESLINTRC_JS_FILENAME}" and "${ESLINTRC_CJS_FILENAME}". Ensure that only ` + - 'one of these files is present in the project.' - ); - } else if (alternativePathExists) { - return alternativePath; - } else if (defaultPathExists) { - return defaultPath; - } else { - return undefined; - } - } } diff --git a/heft-plugins/heft-lint-plugin/src/LinterBase.ts b/heft-plugins/heft-lint-plugin/src/LinterBase.ts index 7571bc1c555..4604f2359c3 100644 --- a/heft-plugins/heft-lint-plugin/src/LinterBase.ts +++ b/heft-plugins/heft-lint-plugin/src/LinterBase.ts @@ -138,15 +138,7 @@ export abstract class LinterBase { continue; } - // TypeScript only computes the version during an incremental build. - let version: string = sourceFile.version; - if (!version) { - // Compute the version from the source file content - const sourceCodeHash: Hash = createHash('sha1'); - sourceCodeHash.update(sourceFile.text); - version = sourceCodeHash.digest('base64'); - } - + const version: string = await this.getSourceFileHashAsync(sourceFile); const cachedVersion: string = cachedNoFailureFileVersions.get(relative) || ''; if ( cachedVersion === '' || @@ -188,6 +180,19 @@ export abstract class LinterBase { this._terminal.writeVerboseLine(`Lint: ${duration}ms (${fileCount} files)`); } + protected async getSourceFileHashAsync(sourceFile: IExtendedSourceFile): Promise { + // TypeScript only computes the version during an incremental build. + let version: string = sourceFile.version; + if (!version) { + // Compute the version from the source file content + const sourceFileHash: Hash = createHash('sha1'); + sourceFileHash.update(sourceFile.text); + version = sourceFileHash.digest('base64'); + } + + return version; + } + protected abstract getCacheVersionAsync(): Promise; protected abstract lintFileAsync(sourceFile: IExtendedSourceFile): Promise; diff --git a/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts b/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts index 80ec1d463b8..070110b93a6 100644 --- a/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts +++ b/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts @@ -1,8 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -import type * as TEslint from 'eslint'; +import type * as TEslint from 'eslint-9'; +import type * as TEslintLegacy from 'eslint'; import path from 'node:path'; -import { Path } from '@rushstack/node-core-library'; +import { Path, Text } from '@rushstack/node-core-library'; export interface ISerifFormatterOptions { ignoreSuppressed: boolean; @@ -118,9 +119,9 @@ export interface ISarifRule { }; } -interface IMessage extends TEslint.Linter.LintMessage { +type IExtendedLintMessage = (TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage) & { suppressions?: ISuppressedAnalysis[]; -} +}; const INTERNAL_ERROR_ID: 'ESL0999' = 'ESL0999'; const SARIF_VERSION: '2.1.0' = '2.1.0'; @@ -150,8 +151,8 @@ const SARIF_INFORMATION_URI: 'http://json.schemastore.org/sarif-2.1.0-rtm.5' = */ export function formatEslintResultsAsSARIF( - results: TEslint.ESLint.LintResult[], - rulesMeta: TEslint.ESLint.LintResultData['rulesMeta'], + results: (TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult)[], + rulesMeta: (TEslint.ESLint.LintResultData | TEslintLegacy.ESLint.LintResultData)['rulesMeta'], options: ISerifFormatterOptions ): ISarifLog { const { ignoreSuppressed, eslintVersion, buildFolderPath } = options; @@ -184,7 +185,7 @@ export function formatEslintResultsAsSARIF( let currentRuleIndex: number = 0; for (const result of results) { - const { filePath } = result; + const { filePath, source } = result; const fileUrl: string = Path.convertToSlashes(path.relative(buildFolderPath, filePath)); let sarifFileIndex: number | undefined = sarifArtifactIndices.get(fileUrl); @@ -205,11 +206,13 @@ export function formatEslintResultsAsSARIF( const containsSuppressedMessages: boolean = result.suppressedMessages && result.suppressedMessages.length > 0; - const messages: IMessage[] = + const messages: IExtendedLintMessage[] = containsSuppressedMessages && !ignoreSuppressed ? [...result.messages, ...result.suppressedMessages] : result.messages; + const sourceLines: string[] | undefined = Text.splitByNewLines(source); + for (const message of messages) { const level: string = message.fatal || message.severity === 2 ? 'error' : 'warning'; const physicalLocation: ISarifPhysicalLocation = { @@ -232,7 +235,7 @@ export function formatEslintResultsAsSARIF( sarifRepresentation.ruleId = message.ruleId; if (rulesMeta && sarifRuleIndices.get(message.ruleId) === undefined) { - const meta: TEslint.Rule.RuleMetaData = rulesMeta[message.ruleId]; + const meta: TEslint.Rule.RuleMetaData | TEslintLegacy.Rule.RuleMetaData = rulesMeta[message.ruleId]; // An unknown ruleId will return null. This check prevents unit test failure. if (meta) { @@ -303,10 +306,31 @@ export function formatEslintResultsAsSARIF( physicalLocation.region = region; } - if (message.source) { + if (sourceLines) { + // Build the snippet from the source lines + const startLine: number = message.line - 1; + const endLine: number = message.endLine !== undefined ? message.endLine - 1 : startLine; + const startLineColumn: number = message.column - 1; + const endLineColumn: number | undefined = + message.endColumn !== undefined ? message.endColumn - 1 : undefined; + const snippetLines: string[] = sourceLines.slice(startLine, endLine + 1); + const snippetText: string = snippetLines + .map((line, index) => { + let startColumn: number = 0; + let endColumn: number | undefined = undefined; + if (index === 0) { + startColumn = startLineColumn; + } + if (index === snippetLines.length - 1 && endLineColumn !== undefined) { + endColumn = endLineColumn; + } + return line.slice(startColumn, endColumn); + }) + .join('\n'); + physicalLocation.region ??= {}; physicalLocation.region.snippet = { - text: message.source + text: snippetText }; } diff --git a/heft-plugins/heft-lint-plugin/src/Tslint.ts b/heft-plugins/heft-lint-plugin/src/Tslint.ts index cfe108c0c79..5e2f68770d7 100644 --- a/heft-plugins/heft-lint-plugin/src/Tslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Tslint.ts @@ -7,6 +7,7 @@ import type * as TTslint from 'tslint'; import type * as TTypescript from 'typescript'; import { Import, JsonFile, FileError, FileSystem } from '@rushstack/node-core-library'; import type { ITerminal } from '@rushstack/terminal'; +import type { HeftConfiguration } from '@rushstack/heft'; import { LinterBase, type ILinterBaseOptions } from './LinterBase'; import type { IExtendedLinter } from './internalTypings/TslintInternals'; @@ -20,6 +21,8 @@ function getFormattedErrorMessage(tslintFailure: TTslint.RuleFailure): string { return `(${tslintFailure.getRuleName()}) ${tslintFailure.getFailure()}`; } +const TSLINT_CONFIG_FILE_NAME: string = 'tslint.json'; + export class Tslint extends LinterBase { private readonly _tslintPackage: typeof TTslint; private readonly _tslintConfiguration: TTslint.Configuration.IConfigurationFile; @@ -65,6 +68,14 @@ export class Tslint extends LinterBase { }); } + public static async resolveTslintConfigFilePathAsync( + heftConfiguration: HeftConfiguration + ): Promise { + const tslintConfigFilePath: string = `${heftConfiguration.buildFolderPath}/${TSLINT_CONFIG_FILE_NAME}`; + const tslintConfigFileExists: boolean = await FileSystem.existsAsync(tslintConfigFilePath); + return tslintConfigFileExists ? tslintConfigFilePath : undefined; + } + /** * Returns the sha1 hash of the contents of the config file at the provided path and the * the configs files that the referenced file extends. diff --git a/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts b/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts index c4f359cf3ad..dbc3944829d 100644 --- a/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts +++ b/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts @@ -2,24 +2,24 @@ // See LICENSE in the project root for license information. import { formatEslintResultsAsSARIF } from '../SarifFormatter'; import type { ISerifFormatterOptions } from '../SarifFormatter'; -import type { ESLint } from 'eslint'; +import type { ESLint } from 'eslint-9'; describe('formatEslintResultsAsSARIF', () => { test('should correctly format ESLint results into SARIF log', () => { const mockLintResults: ESLint.LintResult[] = [ { filePath: '/src/file1.ts', + source: 'const x = 1;', messages: [ { ruleId: 'no-unused-vars', severity: 2, message: "'x' is defined but never used.", - line: 10, - column: 5, + line: 1, + column: 7, nodeType: 'Identifier', - endLine: 10, - endColumn: 6, - source: 'const x = 1;' + endLine: 1, + endColumn: 8 } ], suppressedMessages: [], @@ -94,17 +94,17 @@ describe('formatEslintResultsAsSARIF', () => { const mockLintResults: ESLint.LintResult[] = [ { filePath: '/src/file1.ts', + source: 'const x = 1;', messages: [ { ruleId: 'no-unused-vars', severity: 2, message: "'x' is defined but never used.", - line: 10, - column: 5, + line: 1, + column: 7, nodeType: 'Identifier', - endLine: 10, - endColumn: 6, - source: 'const x = 1;' + endLine: 1, + endColumn: 8 } ], suppressedMessages: [], @@ -163,28 +163,27 @@ describe('formatEslintResultsAsSARIF', () => { const mockLintResults: ESLint.LintResult[] = [ { filePath: '/src/file2.ts', + source: 'let x;\nconsole.log("test");', messages: [ { ruleId: 'no-unused-vars', severity: 2, message: "'x' is defined but never used.", - line: 5, - column: 10, + line: 1, + column: 5, nodeType: 'Identifier', - endLine: 5, - endColumn: 11, - source: 'let x;' + endLine: 1, + endColumn: 6 }, { ruleId: 'no-console', severity: 1, message: 'Unexpected console statement.', - line: 10, - column: 5, + line: 2, + column: 1, nodeType: 'MemberExpression', - endLine: 10, - endColumn: 16, - source: 'console.log("test");' + endLine: 2, + endColumn: 12 } ], suppressedMessages: [], @@ -300,17 +299,17 @@ describe('formatEslintResultsAsSARIF', () => { const mockLintResults: ESLint.LintResult[] = [ { filePath: '/src/file1.ts', + source: 'const x = 1;', messages: [ { ruleId: 'no-unused-vars', severity: 2, message: "'x' is defined but never used.", - line: 10, - column: 5, + line: 1, + column: 7, nodeType: 'Identifier', - endLine: 10, - endColumn: 6, - source: 'const x = 1;' + endLine: 1, + endColumn: 8 } ], suppressedMessages: [], @@ -323,17 +322,17 @@ describe('formatEslintResultsAsSARIF', () => { }, { filePath: '/src/file2.ts', + source: 'let y = z == 2;', messages: [ { ruleId: 'eqeqeq', severity: 2, message: "Expected '===' and instead saw '=='.", - line: 15, - column: 8, + line: 1, + column: 9, nodeType: 'BinaryExpression', - endLine: 15, - endColumn: 10, - source: 'if (a == b) { }' + endLine: 1, + endColumn: 15 } ], suppressedMessages: [], @@ -421,17 +420,17 @@ describe('formatEslintResultsAsSARIF', () => { const mockLintResults: ESLint.LintResult[] = [ { filePath: '/src/file4.ts', + source: 'debugger;\nconsole.log("test");', messages: [ { ruleId: 'no-debugger', severity: 2, message: "Unexpected 'debugger' statement.", - line: 20, + line: 1, column: 1, nodeType: 'DebuggerStatement', - endLine: 20, - endColumn: 9, - source: 'debugger;' + endLine: 1, + endColumn: 10 } ], suppressedMessages: [ @@ -439,12 +438,11 @@ describe('formatEslintResultsAsSARIF', () => { ruleId: 'no-console', severity: 1, message: 'Unexpected console statement.', - line: 10, - column: 5, + line: 2, + column: 1, nodeType: 'MemberExpression', - endLine: 10, - endColumn: 16, - source: 'console.log("test");', + endLine: 2, + endColumn: 12, suppressions: [ { kind: 'inSource', @@ -537,17 +535,17 @@ describe('formatEslintResultsAsSARIF', () => { const mockLintResults: ESLint.LintResult[] = [ { filePath: '/src/file4.ts', + source: 'debugger;\nconsole.log("test");', messages: [ { ruleId: 'no-debugger', severity: 2, message: "Unexpected 'debugger' statement.", - line: 20, + line: 1, column: 1, nodeType: 'DebuggerStatement', - endLine: 20, - endColumn: 9, - source: 'debugger;' + endLine: 1, + endColumn: 10 } ], suppressedMessages: [ @@ -555,12 +553,11 @@ describe('formatEslintResultsAsSARIF', () => { ruleId: 'no-console', severity: 1, message: 'Unexpected console statement.', - line: 10, - column: 5, + line: 2, + column: 1, nodeType: 'MemberExpression', - endLine: 10, - endColumn: 16, - source: 'console.log("test");', + endLine: 2, + endColumn: 12, suppressions: [ { kind: 'inSource', diff --git a/heft-plugins/heft-lint-plugin/src/test/__snapshots__/SarifFormatter.test.ts.snap b/heft-plugins/heft-lint-plugin/src/test/__snapshots__/SarifFormatter.test.ts.snap index 5460eb4c2b0..e702399283f 100644 --- a/heft-plugins/heft-lint-plugin/src/test/__snapshots__/SarifFormatter.test.ts.snap +++ b/heft-plugins/heft-lint-plugin/src/test/__snapshots__/SarifFormatter.test.ts.snap @@ -43,13 +43,13 @@ Object { "uri": "src/file1.ts", }, "region": Object { - "endColumn": 6, - "endLine": 10, + "endColumn": 8, + "endLine": 1, "snippet": Object { - "text": "const x = 1;", + "text": "x", }, - "startColumn": 5, - "startLine": 10, + "startColumn": 7, + "startLine": 1, }, }, }, @@ -109,13 +109,13 @@ Object { "uri": "src/file1.ts", }, "region": Object { - "endColumn": 6, - "endLine": 10, + "endColumn": 8, + "endLine": 1, "snippet": Object { - "text": "const x = 1;", + "text": "x", }, - "startColumn": 5, - "startLine": 10, + "startColumn": 7, + "startLine": 1, }, }, }, @@ -202,13 +202,13 @@ Object { "uri": "src/file4.ts", }, "region": Object { - "endColumn": 9, - "endLine": 20, + "endColumn": 10, + "endLine": 1, "snippet": Object { "text": "debugger;", }, "startColumn": 1, - "startLine": 20, + "startLine": 1, }, }, }, @@ -230,13 +230,13 @@ Object { "uri": "src/file4.ts", }, "region": Object { - "endColumn": 16, - "endLine": 10, + "endColumn": 12, + "endLine": 2, "snippet": Object { - "text": "console.log(\\"test\\");", + "text": "console.log", }, - "startColumn": 5, - "startLine": 10, + "startColumn": 1, + "startLine": 2, }, }, }, @@ -312,13 +312,13 @@ Object { "uri": "src/file4.ts", }, "region": Object { - "endColumn": 9, - "endLine": 20, + "endColumn": 10, + "endLine": 1, "snippet": Object { "text": "debugger;", }, "startColumn": 1, - "startLine": 20, + "startLine": 1, }, }, }, @@ -355,72 +355,6 @@ Object { } `; -exports[`formatEslintResultsAsSARIF should handle messages without file locations 1`] = ` -Object { - "$schema": "http://json.schemastore.org/sarif-2.1.0-rtm.5", - "runs": Array [ - Object { - "artifacts": Array [ - Object { - "location": Object { - "uri": "src/file5.ts", - }, - }, - ], - "results": Array [ - Object { - "level": "warning", - "locations": Array [ - Object { - "physicalLocation": Object { - "artifactLocation": Object { - "index": 0, - "uri": "src/file5.ts", - }, - "region": Object { - "endColumn": undefined, - "endLine": undefined, - "snippet": Object { - "text": "console.log(\\"test\\");", - }, - "startColumn": 5, - "startLine": 10, - }, - }, - }, - ], - "message": Object { - "text": "Unexpected console statement.", - }, - "ruleId": "no-console", - "ruleIndex": 0, - }, - ], - "tool": Object { - "driver": Object { - "informationUri": "https://eslint.org", - "name": "ESLint", - "rules": Array [ - Object { - "helpUri": "https://eslint.org/docs/latest/rules/no-console", - "id": "no-console", - "properties": Object { - "category": undefined, - }, - "shortDescription": Object { - "text": "Disallow the use of \`console\`", - }, - }, - ], - "version": "7.32.0", - }, - }, - }, - ], - "version": "2.1.0", -} -`; - exports[`formatEslintResultsAsSARIF should handle multiple files 1`] = ` Object { "$schema": "http://json.schemastore.org/sarif-2.1.0-rtm.5", @@ -449,13 +383,13 @@ Object { "uri": "src/file1.ts", }, "region": Object { - "endColumn": 6, - "endLine": 10, + "endColumn": 8, + "endLine": 1, "snippet": Object { - "text": "const x = 1;", + "text": "x", }, - "startColumn": 5, - "startLine": 10, + "startColumn": 7, + "startLine": 1, }, }, }, @@ -475,13 +409,13 @@ Object { "uri": "src/file2.ts", }, "region": Object { - "endColumn": 10, - "endLine": 15, + "endColumn": 15, + "endLine": 1, "snippet": Object { - "text": "if (a == b) { }", + "text": "z == 2", }, - "startColumn": 8, - "startLine": 15, + "startColumn": 9, + "startLine": 1, }, }, }, @@ -541,13 +475,13 @@ Object { "uri": "src/file2.ts", }, "region": Object { - "endColumn": 11, - "endLine": 5, + "endColumn": 6, + "endLine": 1, "snippet": Object { - "text": "let x;", + "text": "x", }, - "startColumn": 10, - "startLine": 5, + "startColumn": 5, + "startLine": 1, }, }, }, @@ -568,13 +502,13 @@ Object { "uri": "src/file2.ts", }, "region": Object { - "endColumn": 16, - "endLine": 10, + "endColumn": 12, + "endLine": 2, "snippet": Object { - "text": "console.log(\\"test\\");", + "text": "console.log", }, - "startColumn": 5, - "startLine": 10, + "startColumn": 1, + "startLine": 2, }, }, }, diff --git a/heft-plugins/heft-localization-typings-plugin/.eslintrc.js b/heft-plugins/heft-localization-typings-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-localization-typings-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/heft-plugins/heft-localization-typings-plugin/eslint.config.js b/heft-plugins/heft-localization-typings-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-localization-typings-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-localization-typings-plugin/package.json b/heft-plugins/heft-localization-typings-plugin/package.json index fe6649def5d..860c980f711 100644 --- a/heft-plugins/heft-localization-typings-plugin/package.json +++ b/heft-plugins/heft-localization-typings-plugin/package.json @@ -20,8 +20,8 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", - "eslint": "~8.57.0" + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" }, "dependencies": { "@rushstack/localization-utilities": "workspace:*" diff --git a/heft-plugins/heft-sass-load-themed-styles-plugin/.eslintrc.js b/heft-plugins/heft-sass-load-themed-styles-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-sass-load-themed-styles-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/heft-plugins/heft-sass-load-themed-styles-plugin/eslint.config.js b/heft-plugins/heft-sass-load-themed-styles-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-sass-load-themed-styles-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-sass-load-themed-styles-plugin/package.json b/heft-plugins/heft-sass-load-themed-styles-plugin/package.json index d06ff61b946..5b1ea511376 100644 --- a/heft-plugins/heft-sass-load-themed-styles-plugin/package.json +++ b/heft-plugins/heft-sass-load-themed-styles-plugin/package.json @@ -25,6 +25,6 @@ "@rushstack/heft": "workspace:*", "@rushstack/heft-sass-plugin": "workspace:*", "local-node-rig": "workspace:*", - "eslint": "~8.57.0" + "eslint": "~9.25.1" } } diff --git a/heft-plugins/heft-sass-plugin/.eslintrc.js b/heft-plugins/heft-sass-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-sass-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/heft-plugins/heft-sass-plugin/eslint.config.js b/heft-plugins/heft-sass-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-sass-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-sass-plugin/package.json b/heft-plugins/heft-sass-plugin/package.json index 99b44020fa8..ae59a066594 100644 --- a/heft-plugins/heft-sass-plugin/package.json +++ b/heft-plugins/heft-sass-plugin/package.json @@ -31,7 +31,7 @@ "devDependencies": { "@microsoft/api-extractor": "workspace:*", "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", - "eslint": "~8.57.0" + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" } } diff --git a/heft-plugins/heft-sass-plugin/src/SassProcessor.ts b/heft-plugins/heft-sass-plugin/src/SassProcessor.ts index e202ceb41f6..baa38977a76 100644 --- a/heft-plugins/heft-sass-plugin/src/SassProcessor.ts +++ b/heft-plugins/heft-sass-plugin/src/SassProcessor.ts @@ -331,7 +331,6 @@ export class SassProcessor { // Compile the files. Allow parallelism if (affectedRecords.size) { // Using `>>2` instead of `/4` because it also ensures that the result is an integer - // eslint-disable-next-line no-bitwise const compilerCount: number = Math.min(affectedRecords.size >> 2, concurrency, 8) || 1; const compilers: AsyncCompiler[] = await Promise.all( Array.from({ length: compilerCount }, () => initAsyncCompiler()) @@ -433,7 +432,6 @@ export class SassProcessor { // Exact file didn't exist, was this a partial? if (basename.startsWith('_')) { // Was already a partial, so fail resolution. - // eslint-disable-next-line @rushstack/no-null return null; } @@ -575,7 +573,6 @@ export class SassProcessor { } } - // eslint-disable-next-line @rushstack/no-null return null; } diff --git a/heft-plugins/heft-serverless-stack-plugin/.eslintrc.js b/heft-plugins/heft-serverless-stack-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-serverless-stack-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/heft-plugins/heft-serverless-stack-plugin/eslint.config.js b/heft-plugins/heft-serverless-stack-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-serverless-stack-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-serverless-stack-plugin/package.json b/heft-plugins/heft-serverless-stack-plugin/package.json index 7748864b0e5..a9bb7d73c53 100644 --- a/heft-plugins/heft-serverless-stack-plugin/package.json +++ b/heft-plugins/heft-serverless-stack-plugin/package.json @@ -24,6 +24,7 @@ "@rushstack/heft": "workspace:*", "@rushstack/heft-webpack4-plugin": "workspace:*", "@rushstack/heft-webpack5-plugin": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/heft-plugins/heft-storybook-plugin/.eslintrc.js b/heft-plugins/heft-storybook-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-storybook-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/heft-plugins/heft-storybook-plugin/eslint.config.js b/heft-plugins/heft-storybook-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/heft-plugins/heft-storybook-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/heft-plugins/heft-storybook-plugin/package.json b/heft-plugins/heft-storybook-plugin/package.json index 2cad39c5063..e7c733ca909 100644 --- a/heft-plugins/heft-storybook-plugin/package.json +++ b/heft-plugins/heft-storybook-plugin/package.json @@ -26,6 +26,7 @@ "@rushstack/heft": "workspace:*", "@rushstack/heft-webpack4-plugin": "workspace:*", "@rushstack/heft-webpack5-plugin": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts b/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts index cd7653cb9bb..b393b4da7a5 100644 --- a/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts +++ b/heft-plugins/heft-storybook-plugin/src/StorybookPlugin.ts @@ -569,7 +569,6 @@ export default class StorybookPlugin implements IHeftTaskPlugin { diff --git a/libraries/api-extractor-model/.eslintrc.js b/libraries/api-extractor-model/.eslintrc.js index 92b78cd2bc6..d2d40d04113 100644 --- a/libraries/api-extractor-model/.eslintrc.js +++ b/libraries/api-extractor-model/.eslintrc.js @@ -1,10 +1,13 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { - extends: ['local-eslint-config/profile/node', 'local-eslint-config/mixins/friendly-locals'], + extends: [ + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' + ], parserOptions: { tsconfigRootDir: __dirname }, rules: { diff --git a/libraries/api-extractor-model/package.json b/libraries/api-extractor-model/package.json index 9611991b2af..aa2f05c50af 100644 --- a/libraries/api-extractor-model/package.json +++ b/libraries/api-extractor-model/package.json @@ -23,7 +23,6 @@ }, "devDependencies": { "@rushstack/heft": "0.73.2", - "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*" + "decoupled-local-node-rig": "workspace:*" } } diff --git a/libraries/debug-certificate-manager/.eslintrc.js b/libraries/debug-certificate-manager/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/libraries/debug-certificate-manager/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/debug-certificate-manager/eslint.config.js b/libraries/debug-certificate-manager/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/debug-certificate-manager/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/debug-certificate-manager/package.json b/libraries/debug-certificate-manager/package.json index 85fe7c047d5..61075b84ce5 100644 --- a/libraries/debug-certificate-manager/package.json +++ b/libraries/debug-certificate-manager/package.json @@ -23,6 +23,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/node-forge": "1.0.4", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/libraries/heft-config-file/.eslintrc.js b/libraries/heft-config-file/.eslintrc.js index 066bf07ecc8..bc633c3e1b9 100644 --- a/libraries/heft-config-file/.eslintrc.js +++ b/libraries/heft-config-file/.eslintrc.js @@ -1,9 +1,12 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool', 'local-eslint-config/mixins/friendly-locals'], + extends: [ + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' + ], parserOptions: { tsconfigRootDir: __dirname } }; diff --git a/libraries/heft-config-file/package.json b/libraries/heft-config-file/package.json index 764503404f0..3195ba43f91 100644 --- a/libraries/heft-config-file/package.json +++ b/libraries/heft-config-file/package.json @@ -30,7 +30,6 @@ "devDependencies": { "@rushstack/heft": "0.73.2", "@types/ungap__structured-clone": "~1.2.0", - "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*" + "decoupled-local-node-rig": "workspace:*" } } diff --git a/libraries/load-themed-styles/.eslintrc.js b/libraries/load-themed-styles/.eslintrc.js deleted file mode 100644 index 33e2d54ae5c..00000000000 --- a/libraries/load-themed-styles/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names'); - -module.exports = { - extends: [ - 'local-web-rig/profiles/library/includes/eslint/profile/web-app', - 'local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/load-themed-styles/eslint.config.js b/libraries/load-themed-styles/eslint.config.js new file mode 100644 index 00000000000..8a61a653f26 --- /dev/null +++ b/libraries/load-themed-styles/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-web-rig/profiles/library/includes/eslint/flat/profile/web-app'); +const friendlyLocalsMixin = require('local-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...webAppProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/load-themed-styles/package.json b/libraries/load-themed-styles/package.json index e898f2dedd8..ce4b6625a66 100644 --- a/libraries/load-themed-styles/package.json +++ b/libraries/load-themed-styles/package.json @@ -19,6 +19,7 @@ "keywords": [], "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-web-rig": "workspace:*" }, "exports": { diff --git a/libraries/load-themed-styles/src/index.ts b/libraries/load-themed-styles/src/index.ts index 8b576f1c6d4..ba6296d77b6 100644 --- a/libraries/load-themed-styles/src/index.ts +++ b/libraries/load-themed-styles/src/index.ts @@ -1,19 +1,16 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -/** - * An IThemingInstruction can specify a rawString to be preserved or a theme slot and a default value - * to use if that slot is not specified by the theme. - */ - -/* eslint-disable @typescript-eslint/no-use-before-define */ - // Declaring a global here in case that the execution environment is Node.js (without importing the // entire node.js d.ts for now) /// declare let global: any; // eslint-disable-line @typescript-eslint/no-explicit-any declare const DEBUG: boolean | undefined; +/** + * An IThemingInstruction can specify a rawString to be preserved or a theme slot and a default value + * to use if that slot is not specified by the theme. + */ export interface IThemingInstruction { theme?: string; defaultValue?: string; diff --git a/libraries/localization-utilities/.eslintrc.js b/libraries/localization-utilities/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/libraries/localization-utilities/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/localization-utilities/eslint.config.js b/libraries/localization-utilities/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/localization-utilities/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/localization-utilities/package.json b/libraries/localization-utilities/package.json index f48ea934b15..7b6212ba56f 100644 --- a/libraries/localization-utilities/package.json +++ b/libraries/localization-utilities/package.json @@ -25,6 +25,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/xmldoc": "1.1.4", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/libraries/lookup-by-path/.eslintrc.js b/libraries/lookup-by-path/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/libraries/lookup-by-path/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/lookup-by-path/eslint.config.js b/libraries/lookup-by-path/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/libraries/lookup-by-path/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/lookup-by-path/package.json b/libraries/lookup-by-path/package.json index ca71a9b4b38..be4d3fb0811 100644 --- a/libraries/lookup-by-path/package.json +++ b/libraries/lookup-by-path/package.json @@ -24,6 +24,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "peerDependencies": { diff --git a/libraries/lookup-by-path/src/LookupByPath.ts b/libraries/lookup-by-path/src/LookupByPath.ts index 57ef7370e90..b1ac287960d 100644 --- a/libraries/lookup-by-path/src/LookupByPath.ts +++ b/libraries/lookup-by-path/src/LookupByPath.ts @@ -504,7 +504,6 @@ export class LookupByPath implements IReadonlyLookupByPath][] = [[query ?? '', root]]; while (stack.length > 0) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const [prefix, node] = stack.pop()!; if (node.value !== undefined) { yield [prefix, node.value]; diff --git a/libraries/module-minifier/.eslintrc.js b/libraries/module-minifier/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/libraries/module-minifier/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/module-minifier/eslint.config.js b/libraries/module-minifier/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/libraries/module-minifier/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/module-minifier/package.json b/libraries/module-minifier/package.json index a7853be061e..a4ae54f43da 100644 --- a/libraries/module-minifier/package.json +++ b/libraries/module-minifier/package.json @@ -25,6 +25,7 @@ "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", "@types/serialize-javascript": "5.0.2", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "peerDependencies": { diff --git a/libraries/module-minifier/src/MinifiedIdentifier.ts b/libraries/module-minifier/src/MinifiedIdentifier.ts index f408b7dfc6b..c46488e540d 100644 --- a/libraries/module-minifier/src/MinifiedIdentifier.ts +++ b/libraries/module-minifier/src/MinifiedIdentifier.ts @@ -79,11 +79,13 @@ const RESERVED_KEYWORDS: string[] = [ export function getIdentifierInternal(ordinal: number): string { let ret: string = IDENTIFIER_LEADING_DIGITS[ordinal % 54]; - ordinal = (ordinal / 54) | 0; // eslint-disable-line no-bitwise + // eslint-disable-next-line no-bitwise + ordinal = (ordinal / 54) | 0; while (ordinal > 0) { --ordinal; - ret += IDENTIFIER_TRAILING_DIGITS[ordinal & 0x3f]; // eslint-disable-line no-bitwise - ordinal >>>= 6; // eslint-disable-line no-bitwise + // eslint-disable-next-line no-bitwise + ret += IDENTIFIER_TRAILING_DIGITS[ordinal & 0x3f]; + ordinal >>>= 6; } return ret; @@ -112,7 +114,7 @@ export function getOrdinalFromIdentifierInternal(identifier: string): number { return NaN; } - ordinal <<= 6; // eslint-disable-line no-bitwise + ordinal <<= 6; ordinal += trailingCharIndex.get(identifier.charCodeAt(i))! + 1; } diff --git a/libraries/node-core-library/.eslintrc.js b/libraries/node-core-library/.eslintrc.js index de794c04ae0..dc4a3aab930 100644 --- a/libraries/node-core-library/.eslintrc.js +++ b/libraries/node-core-library/.eslintrc.js @@ -1,13 +1,13 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { extends: [ - 'local-eslint-config/profile/node', - 'local-eslint-config/mixins/friendly-locals', - 'local-eslint-config/mixins/tsdoc' + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' ], parserOptions: { tsconfigRootDir: __dirname } }; diff --git a/libraries/node-core-library/package.json b/libraries/node-core-library/package.json index a75e1626ece..34ea7dbb545 100644 --- a/libraries/node-core-library/package.json +++ b/libraries/node-core-library/package.json @@ -31,8 +31,7 @@ "@types/jju": "1.4.1", "@types/resolve": "1.20.2", "@types/semver": "7.5.0", - "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*" + "decoupled-local-node-rig": "workspace:*" }, "peerDependencies": { "@types/node": "*" diff --git a/libraries/operation-graph/.eslintrc.js b/libraries/operation-graph/.eslintrc.js index de794c04ae0..dc4a3aab930 100644 --- a/libraries/operation-graph/.eslintrc.js +++ b/libraries/operation-graph/.eslintrc.js @@ -1,13 +1,13 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { extends: [ - 'local-eslint-config/profile/node', - 'local-eslint-config/mixins/friendly-locals', - 'local-eslint-config/mixins/tsdoc' + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' ], parserOptions: { tsconfigRootDir: __dirname } }; diff --git a/libraries/operation-graph/package.json b/libraries/operation-graph/package.json index 678483e01b2..3ae6767736a 100644 --- a/libraries/operation-graph/package.json +++ b/libraries/operation-graph/package.json @@ -21,8 +21,7 @@ }, "devDependencies": { "@rushstack/heft": "0.73.2", - "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*" + "decoupled-local-node-rig": "workspace:*" }, "peerDependencies": { "@types/node": "*" diff --git a/libraries/package-deps-hash/.eslintrc.js b/libraries/package-deps-hash/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/libraries/package-deps-hash/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/package-deps-hash/eslint.config.js b/libraries/package-deps-hash/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/package-deps-hash/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/package-deps-hash/package.json b/libraries/package-deps-hash/package.json index a52c68d9b9e..6a202b03533 100644 --- a/libraries/package-deps-hash/package.json +++ b/libraries/package-deps-hash/package.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "dependencies": { diff --git a/libraries/package-extractor/.eslintrc.js b/libraries/package-extractor/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/libraries/package-extractor/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/package-extractor/eslint.config.js b/libraries/package-extractor/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/libraries/package-extractor/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/package-extractor/package.json b/libraries/package-extractor/package.json index d0942fadca6..6b3a3586758 100644 --- a/libraries/package-extractor/package.json +++ b/libraries/package-extractor/package.json @@ -35,7 +35,7 @@ "@types/glob": "7.1.1", "@types/minimatch": "3.0.5", "@types/npm-packlist": "~1.1.1", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "webpack": "~5.98.0", "@types/semver": "7.5.0" } diff --git a/libraries/rig-package/.eslintrc.js b/libraries/rig-package/.eslintrc.js index de794c04ae0..dc4a3aab930 100644 --- a/libraries/rig-package/.eslintrc.js +++ b/libraries/rig-package/.eslintrc.js @@ -1,13 +1,13 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { extends: [ - 'local-eslint-config/profile/node', - 'local-eslint-config/mixins/friendly-locals', - 'local-eslint-config/mixins/tsdoc' + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' ], parserOptions: { tsconfigRootDir: __dirname } }; diff --git a/libraries/rig-package/package.json b/libraries/rig-package/package.json index e9452d40b44..23c1f22cbe9 100644 --- a/libraries/rig-package/package.json +++ b/libraries/rig-package/package.json @@ -24,7 +24,6 @@ "@types/resolve": "1.20.2", "ajv": "~8.13.0", "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*", "resolve": "~1.22.1" } } diff --git a/libraries/rush-lib/.eslintrc.js b/libraries/rush-lib/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/libraries/rush-lib/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/rush-lib/eslint.config.js b/libraries/rush-lib/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/rush-lib/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/rush-lib/package.json b/libraries/rush-lib/package.json index 7b461ac27f6..e154f7a8342 100644 --- a/libraries/rush-lib/package.json +++ b/libraries/rush-lib/package.json @@ -70,6 +70,7 @@ "devDependencies": { "@pnpm/lockfile.types": "~1.0.3", "@pnpm/logger": "4.0.0", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "@rushstack/heft-webpack5-plugin": "workspace:*", "@rushstack/heft": "workspace:*", diff --git a/libraries/rush-lib/src/api/ChangeManager.ts b/libraries/rush-lib/src/api/ChangeManager.ts index 7882c0a7e73..e3e779fd5e1 100644 --- a/libraries/rush-lib/src/api/ChangeManager.ts +++ b/libraries/rush-lib/src/api/ChangeManager.ts @@ -26,7 +26,6 @@ export class ChangeManager { const projectInfo: RushConfigurationProject | undefined = rushConfiguration.getProjectByName(projectName); if (projectInfo && projectInfo.shouldPublish) { const changefile: IChangeFile = { - // eslint-disable-line @typescript-eslint/no-explicit-any changes: [ { comment: '', diff --git a/libraries/rush-lib/src/cli/actions/InitSubspaceAction.ts b/libraries/rush-lib/src/cli/actions/InitSubspaceAction.ts index 445e2f91860..4e3df2dd491 100644 --- a/libraries/rush-lib/src/cli/actions/InitSubspaceAction.ts +++ b/libraries/rush-lib/src/cli/actions/InitSubspaceAction.ts @@ -86,7 +86,6 @@ export class InitSubspaceAction extends BaseRushAction { updateExistingFile: true }); - // eslint-disable-next-line no-console terminal.writeLine( '\nSubspace successfully created. Please review the subspace configuration files before committing.' ); diff --git a/libraries/rush-lib/src/cli/actions/PublishAction.ts b/libraries/rush-lib/src/cli/actions/PublishAction.ts index 1f3cf062a7b..e80874c8858 100644 --- a/libraries/rush-lib/src/cli/actions/PublishAction.ts +++ b/libraries/rush-lib/src/cli/actions/PublishAction.ts @@ -61,7 +61,6 @@ export class PublishAction extends BaseRushAction { summary: 'Reads and processes package publishing change requests generated by "rush change".', documentation: 'Reads and processes package publishing change requests generated by "rush change". This will perform a ' + - // eslint-disable-next-line no-console 'read-only operation by default, printing operations executed to the console. To commit ' + 'changes and publish packages, you must use the --commit flag and/or the --publish flag.', parser diff --git a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts index d3016dca5eb..6c201285c97 100644 --- a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts +++ b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts @@ -819,7 +819,6 @@ export class PhasedScriptAction extends BaseScriptAction { } // Loop until Ctrl+C - // eslint-disable-next-line no-constant-condition while (!abortSignal.aborted) { // On the initial invocation, this promise will return immediately with the full set of projects const { changedProjects, inputsSnapshot: state } = await projectWatcher.waitForChangeAsync( diff --git a/libraries/rush-lib/src/logic/Git.ts b/libraries/rush-lib/src/logic/Git.ts index 1e5a6bf6ec3..94455106b1b 100644 --- a/libraries/rush-lib/src/logic/Git.ts +++ b/libraries/rush-lib/src/logic/Git.ts @@ -391,8 +391,7 @@ export class Git { public async hasUncommittedChangesAsync(): Promise { const gitStatusEntries: Iterable = await this.getGitStatusAsync(); - // eslint-disable-next-line @typescript-eslint/no-unused-vars - for (const gitStatusEntry of gitStatusEntries) { + for (const _ of gitStatusEntries) { // If there are any changes, return true. We only need to evaluate the first iterator entry return true; } diff --git a/libraries/rush-lib/src/logic/base/BaseInstallManager.ts b/libraries/rush-lib/src/logic/base/BaseInstallManager.ts index f6c15e0e3e1..0de25480f03 100644 --- a/libraries/rush-lib/src/logic/base/BaseInstallManager.ts +++ b/libraries/rush-lib/src/logic/base/BaseInstallManager.ts @@ -298,7 +298,11 @@ export abstract class BaseInstallManager { // we have an edge case here // if a package.json has no dependencies, pnpm will still generate the pnpm-lock.yaml but not .pnpm folder // so we need to make sure pnpm-lock.yaml and .pnpm exists before calling the pnpmSync APIs - if ((await FileSystem.existsAsync(pnpmLockfilePath)) && (await FileSystem.existsAsync(dotPnpmFolder)) && (await FileSystem.existsAsync(modulesFilePath))) { + if ( + (await FileSystem.existsAsync(pnpmLockfilePath)) && + (await FileSystem.existsAsync(dotPnpmFolder)) && + (await FileSystem.existsAsync(modulesFilePath)) + ) { await pnpmSyncPrepareAsync({ lockfilePath: pnpmLockfilePath, dotPnpmFolder, diff --git a/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts index e47c454971f..48eecc16abc 100644 --- a/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts @@ -576,7 +576,6 @@ export class CacheableOperationPlugin implements IPhasedCommandPlugin { return; } - // eslint-disable-next-line require-atomic-updates -- This is guaranteed to not be concurrent buildCacheContext.operationBuildCache = OperationBuildCache.forOperation(record, { buildCacheConfiguration, terminal @@ -626,7 +625,6 @@ export class CacheableOperationPlugin implements IPhasedCommandPlugin { phaseName: associatedPhase.name }); - // eslint-disable-next-line require-atomic-updates -- This is guaranteed to not be concurrent buildCacheContext.operationBuildCache = operationBuildCache; return operationBuildCache; diff --git a/libraries/rush-lib/src/logic/test/ChangelogGenerator.test.ts b/libraries/rush-lib/src/logic/test/ChangelogGenerator.test.ts index e12d2531177..6a300b8578c 100644 --- a/libraries/rush-lib/src/logic/test/ChangelogGenerator.test.ts +++ b/libraries/rush-lib/src/logic/test/ChangelogGenerator.test.ts @@ -359,7 +359,6 @@ describe(ChangelogGenerator.updateChangelogs.name, () => { rushConfiguration = RushConfiguration.loadFromConfigurationFile(rushJsonFile); }); - /* eslint-disable dot-notation */ it('skips changes logs if the project version is not changed.', () => { const allChanges: IChangeRequests = { packageChanges: new Map(), versionPolicyChanges: new Map() }; // Package a does not have version change. @@ -446,5 +445,4 @@ describe(ChangelogGenerator.updateChangelogs.name, () => { expect(updatedChangeLogs[0].name).toEqual('a'); expect(updatedChangeLogs[1].name).toEqual('b'); }); - /* eslint-enable dot-notation */ }); diff --git a/libraries/rush-lib/src/logic/test/PublishUtilities.test.ts b/libraries/rush-lib/src/logic/test/PublishUtilities.test.ts index 6724030f14a..a0d127208de 100644 --- a/libraries/rush-lib/src/logic/test/PublishUtilities.test.ts +++ b/libraries/rush-lib/src/logic/test/PublishUtilities.test.ts @@ -7,8 +7,6 @@ import type { RushConfigurationProject } from '../../api/RushConfigurationProjec import { PublishUtilities, type IChangeRequests } from '../PublishUtilities'; import { ChangeFiles } from '../ChangeFiles'; -/* eslint-disable dot-notation */ - function generateChangeSnapshot( allPackages: ReadonlyMap, allChanges: IChangeRequests diff --git a/libraries/rush-lib/src/pluginFramework/PluginLoader/PluginLoaderBase.ts b/libraries/rush-lib/src/pluginFramework/PluginLoader/PluginLoaderBase.ts index 3b9a3d568f6..9c31c38e060 100644 --- a/libraries/rush-lib/src/pluginFramework/PluginLoader/PluginLoaderBase.ts +++ b/libraries/rush-lib/src/pluginFramework/PluginLoader/PluginLoaderBase.ts @@ -123,7 +123,6 @@ export abstract class PluginLoaderBase< type IRushPluginCtor = new (opts: T) => IRushPlugin; let pluginPackage: IRushPluginCtor; try { - // eslint-disable-next-line @typescript-eslint/no-var-requires const loadedPluginPackage: IRushPluginCtor | { default: IRushPluginCtor } = require(resolvedPluginPath); pluginPackage = (loadedPluginPackage as { default: IRushPluginCtor }).default || loadedPluginPackage; } catch (e) { diff --git a/libraries/rush-lib/src/utilities/prompts/SearchListPrompt.ts b/libraries/rush-lib/src/utilities/prompts/SearchListPrompt.ts index 7065ef21a13..0e455b3e13b 100644 --- a/libraries/rush-lib/src/utilities/prompts/SearchListPrompt.ts +++ b/libraries/rush-lib/src/utilities/prompts/SearchListPrompt.ts @@ -60,17 +60,13 @@ export class SearchListPrompt extends BasePrompt { // eslint-disable-next-line @typescript-eslint/typedef const validation = this.handleSubmitEvents(events.line.pipe(map(this._getCurrentValue.bind(this)))); - //eslint-disable-next-line no-void void validation.success.forEach(this._onSubmit.bind(this)); - //eslint-disable-next-line no-void void validation.error.forEach(this._onError.bind(this)); - // eslint-disable-next-line no-void void events.numberKey .pipe(takeUntil(events.line)) .forEach(this._onNumberKey.bind(this) as (evt: unknown) => void); - // eslint-disable-next-line no-void void events.keypress .pipe(takeUntil(validation.success)) .forEach(this._onKeyPress.bind(this) as (evt: unknown) => void); diff --git a/libraries/rush-sdk/.eslintrc.js b/libraries/rush-sdk/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/libraries/rush-sdk/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/rush-sdk/eslint.config.js b/libraries/rush-sdk/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/rush-sdk/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/rush-sdk/package.json b/libraries/rush-sdk/package.json index 644479d8256..cabf14d453d 100644 --- a/libraries/rush-sdk/package.json +++ b/libraries/rush-sdk/package.json @@ -49,13 +49,14 @@ "devDependencies": { "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", "@rushstack/heft-webpack5-plugin": "workspace:*", "@rushstack/stream-collator": "workspace:*", "@rushstack/ts-command-line": "workspace:*", "@rushstack/webpack-preserve-dynamic-require-plugin": "workspace:*", "@types/semver": "7.5.0", "@types/webpack-env": "1.18.8", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*", "webpack": "~5.98.0" } } diff --git a/libraries/rush-themed-ui/.eslintrc.js b/libraries/rush-themed-ui/.eslintrc.js deleted file mode 100644 index 7e09aa1ef2f..00000000000 --- a/libraries/rush-themed-ui/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names'); - -module.exports = { - extends: [ - 'local-web-rig/profiles/library/includes/eslint/profile/web-app', - 'local-web-rig/profiles/library/includes/eslint/mixins/react' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/rush-themed-ui/eslint.config.js b/libraries/rush-themed-ui/eslint.config.js new file mode 100644 index 00000000000..25d563f73a7 --- /dev/null +++ b/libraries/rush-themed-ui/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-web-rig/profiles/library/includes/eslint/flat/profile/web-app'); +const reactMixin = require('local-web-rig/profiles/library/includes/eslint/flat/mixins/react'); + +module.exports = [ + ...webAppProfile, + ...reactMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/rush-themed-ui/package.json b/libraries/rush-themed-ui/package.json index ad23ccc937f..a7ffb850248 100644 --- a/libraries/rush-themed-ui/package.json +++ b/libraries/rush-themed-ui/package.json @@ -17,14 +17,15 @@ "react-dom": "~17.0.2" }, "devDependencies": { - "local-web-rig": "workspace:*", - "@rushstack/heft": "workspace:*", - "@types/react-dom": "17.0.25", - "@types/react": "17.0.74", - "@radix-ui/react-scroll-area": "~1.0.2", "@radix-ui/colors": "~0.1.8", - "@radix-ui/react-tabs": "~1.0.1", "@radix-ui/react-checkbox": "~1.0.1", - "@radix-ui/react-icons": "~1.1.1" + "@radix-ui/react-icons": "~1.1.1", + "@radix-ui/react-scroll-area": "~1.0.2", + "@radix-ui/react-tabs": "~1.0.1", + "@rushstack/heft": "workspace:*", + "@types/react": "17.0.74", + "@types/react-dom": "17.0.25", + "eslint": "~9.25.1", + "local-web-rig": "workspace:*" } } diff --git a/libraries/rushell/.eslintrc.js b/libraries/rushell/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/libraries/rushell/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/rushell/eslint.config.js b/libraries/rushell/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/rushell/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/rushell/package.json b/libraries/rushell/package.json index 20169cf41f8..58196605381 100644 --- a/libraries/rushell/package.json +++ b/libraries/rushell/package.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/libraries/stream-collator/.eslintrc.js b/libraries/stream-collator/.eslintrc.js deleted file mode 100644 index 1189e81aa40..00000000000 --- a/libraries/stream-collator/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/stream-collator/eslint.config.js b/libraries/stream-collator/eslint.config.js new file mode 100644 index 00000000000..f7f52307dac --- /dev/null +++ b/libraries/stream-collator/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/stream-collator/package.json b/libraries/stream-collator/package.json index af3090b7c7c..18e4c56f423 100644 --- a/libraries/stream-collator/package.json +++ b/libraries/stream-collator/package.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/libraries/terminal/.eslintrc.js b/libraries/terminal/.eslintrc.js index de794c04ae0..dc4a3aab930 100644 --- a/libraries/terminal/.eslintrc.js +++ b/libraries/terminal/.eslintrc.js @@ -1,13 +1,13 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { extends: [ - 'local-eslint-config/profile/node', - 'local-eslint-config/mixins/friendly-locals', - 'local-eslint-config/mixins/tsdoc' + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' ], parserOptions: { tsconfigRootDir: __dirname } }; diff --git a/libraries/terminal/package.json b/libraries/terminal/package.json index fd6288fdc6d..184796f5ac8 100644 --- a/libraries/terminal/package.json +++ b/libraries/terminal/package.json @@ -22,8 +22,7 @@ "devDependencies": { "@rushstack/heft": "0.73.2", "@types/supports-color": "8.1.3", - "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*" + "decoupled-local-node-rig": "workspace:*" }, "peerDependencies": { "@types/node": "*" diff --git a/libraries/ts-command-line/.eslintrc.js b/libraries/ts-command-line/.eslintrc.js index 066bf07ecc8..bc633c3e1b9 100644 --- a/libraries/ts-command-line/.eslintrc.js +++ b/libraries/ts-command-line/.eslintrc.js @@ -1,9 +1,12 @@ // This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); +require('decoupled-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-eslint-config/patch/custom-config-package-names'); +require('decoupled-local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names'); module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool', 'local-eslint-config/mixins/friendly-locals'], + extends: [ + 'decoupled-local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', + 'decoupled-local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' + ], parserOptions: { tsconfigRootDir: __dirname } }; diff --git a/libraries/ts-command-line/package.json b/libraries/ts-command-line/package.json index 4af09d50b72..8f4e2f46fa9 100644 --- a/libraries/ts-command-line/package.json +++ b/libraries/ts-command-line/package.json @@ -24,7 +24,6 @@ "devDependencies": { "@rushstack/heft": "0.73.2", "@rushstack/node-core-library": "workspace:*", - "decoupled-local-node-rig": "workspace:*", - "local-eslint-config": "workspace:*" + "decoupled-local-node-rig": "workspace:*" } } diff --git a/libraries/typings-generator/.eslintrc.js b/libraries/typings-generator/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/libraries/typings-generator/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/typings-generator/eslint.config.js b/libraries/typings-generator/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/libraries/typings-generator/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/typings-generator/package.json b/libraries/typings-generator/package.json index 6ca46e2826a..8a6bbf58be5 100644 --- a/libraries/typings-generator/package.json +++ b/libraries/typings-generator/package.json @@ -28,6 +28,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "peerDependencies": { diff --git a/libraries/worker-pool/.eslintrc.js b/libraries/worker-pool/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/libraries/worker-pool/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/libraries/worker-pool/eslint.config.js b/libraries/worker-pool/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/libraries/worker-pool/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/libraries/worker-pool/package.json b/libraries/worker-pool/package.json index d1f2c4062cb..ab92f8e0575 100644 --- a/libraries/worker-pool/package.json +++ b/libraries/worker-pool/package.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "peerDependencies": { diff --git a/repo-scripts/doc-plugin-rush-stack/.eslintrc.js b/repo-scripts/doc-plugin-rush-stack/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/repo-scripts/doc-plugin-rush-stack/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/repo-scripts/doc-plugin-rush-stack/eslint.config.js b/repo-scripts/doc-plugin-rush-stack/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/repo-scripts/doc-plugin-rush-stack/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/repo-scripts/doc-plugin-rush-stack/package.json b/repo-scripts/doc-plugin-rush-stack/package.json index a76bd5f65ab..0ec18c28e86 100644 --- a/repo-scripts/doc-plugin-rush-stack/package.json +++ b/repo-scripts/doc-plugin-rush-stack/package.json @@ -19,7 +19,8 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", - "local-node-rig": "workspace:*", - "@types/js-yaml": "3.12.1" + "@types/js-yaml": "3.12.1", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" } } diff --git a/repo-scripts/repo-toolbox/.eslintrc.js b/repo-scripts/repo-toolbox/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/repo-scripts/repo-toolbox/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/repo-scripts/repo-toolbox/eslint.config.js b/repo-scripts/repo-toolbox/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/repo-scripts/repo-toolbox/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/repo-scripts/repo-toolbox/package.json b/repo-scripts/repo-toolbox/package.json index e138b67cd86..a73c9dd06f5 100644 --- a/repo-scripts/repo-toolbox/package.json +++ b/repo-scripts/repo-toolbox/package.json @@ -17,8 +17,9 @@ "diff": "~5.0.0" }, "devDependencies": { - "local-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", - "@types/diff": "5.0.1" + "@types/diff": "5.0.1", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" } } diff --git a/rigs/decoupled-local-node-rig/package.json b/rigs/decoupled-local-node-rig/package.json index e007a8c0c05..7030d861d6a 100644 --- a/rigs/decoupled-local-node-rig/package.json +++ b/rigs/decoupled-local-node-rig/package.json @@ -16,12 +16,11 @@ "@rushstack/heft": "0.73.2", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "@typescript-eslint/parser": "~8.26.1", - "eslint-plugin-deprecation": "2.0.0", + "@typescript-eslint/parser": "~8.31.0", "eslint-plugin-header": "~3.1.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-jsdoc": "37.6.1", - "eslint-plugin-react-hooks": "4.3.0", + "eslint-plugin-import": "2.31.0", + "eslint-plugin-jsdoc": "50.6.11", + "eslint-plugin-react-hooks": "5.2.0", "eslint": "~8.57.0", "jest-junit": "12.3.0", "typescript": "~5.8.2" diff --git a/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/mixins/react.js b/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/mixins/react.js index 46484666fc9..6f1882ae4da 100644 --- a/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/mixins/react.js +++ b/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/mixins/react.js @@ -12,7 +12,7 @@ // https://github.com/microsoft/rushstack/tree/master/eslint/eslint-config#rushstackeslint-configmixinsreact module.exports = { extends: ['@rushstack/eslint-config/mixins/react'], - plugins: ['eslint-plugin-react-hooks', 'deprecation'], + plugins: ['eslint-plugin-react-hooks'], overrides: [ { diff --git a/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/profile/_common.js b/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/profile/_common.js index ef41902eff8..c2a3d649cd4 100644 --- a/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/profile/_common.js +++ b/rigs/decoupled-local-node-rig/profiles/default/includes/eslint/profile/_common.js @@ -64,7 +64,13 @@ function buildRules(profile) { // Rationale: Use of `void` to explicitly indicate that a floating promise is expected // and allowed. - '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], + '@typescript-eslint/no-floating-promises': [ + 'error', + { + ignoreVoid: true, + checkThenables: true + } + ], // Rationale: Redeclaring a variable likely indicates a mistake in the code. 'no-redeclare': 'off', diff --git a/rigs/heft-node-rig/package.json b/rigs/heft-node-rig/package.json index 12f920e8cf1..bfc896a976a 100644 --- a/rigs/heft-node-rig/package.json +++ b/rigs/heft-node-rig/package.json @@ -23,7 +23,7 @@ "@rushstack/heft-lint-plugin": "workspace:*", "@rushstack/heft-typescript-plugin": "workspace:*", "@types/heft-jest": "1.0.1", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "jest-environment-node": "~29.5.0", "typescript": "~5.8.2" }, diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..860b58395f6 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); + +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js new file mode 100644 index 00000000000..a3f2ea0992a --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); + +module.exports = [...packletsMixin]; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/react.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/react.js new file mode 100644 index 00000000000..5aafda8dcf0 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/react.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); + +module.exports = [...reactMixin]; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..012a5bece42 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); + +module.exports = [...tsdocMixin]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js similarity index 67% rename from rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js rename to rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js index 34121152062..ec6804684d1 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js @@ -1,6 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/packlets'] -}; +require('@rushstack/eslint-config/flat/patch/eslint-bulk-suppressions'); diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js new file mode 100644 index 00000000000..245d236069a --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node-trusted-tool'); + +module.exports = [...nodeTrustedToolProfile]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js similarity index 58% rename from rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js rename to rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js index 8ce8a5a50f1..16b5c3f2f6e 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/friendly-locals'] -}; +const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); + +module.exports = [...nodeProfile]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js similarity index 69% rename from rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js rename to rigs/heft-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js index 831b7c639fb..084519e6ebb 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js @@ -1,4 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -require('local-eslint-config/patch/custom-config-package-names'); +require('@rushstack/eslint-config/patch/eslint-bulk-suppressions'); diff --git a/rigs/heft-web-rig/package.json b/rigs/heft-web-rig/package.json index d5137593136..68d1b228395 100644 --- a/rigs/heft-web-rig/package.json +++ b/rigs/heft-web-rig/package.json @@ -28,7 +28,7 @@ "autoprefixer": "~10.4.2", "css-loader": "~6.6.0", "css-minimizer-webpack-plugin": "~3.4.1", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "html-webpack-plugin": "~5.5.0", "jest-environment-jsdom": "~29.5.0", "mini-css-extract-plugin": "~2.5.3", diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..860b58395f6 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); + +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js new file mode 100644 index 00000000000..a3f2ea0992a --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); + +module.exports = [...packletsMixin]; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/react.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/react.js new file mode 100644 index 00000000000..5aafda8dcf0 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/react.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); + +module.exports = [...reactMixin]; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..012a5bece42 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); + +module.exports = [...tsdocMixin]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js similarity index 67% rename from rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js rename to rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js index 32d2625068b..ec6804684d1 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js @@ -1,6 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/react'] -}; +require('@rushstack/eslint-config/flat/patch/eslint-bulk-suppressions'); diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js new file mode 100644 index 00000000000..d825f616500 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); + +module.exports = [...webAppProfile]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/eslint-bulk-suppressions.js similarity index 69% rename from rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js rename to rigs/heft-web-rig/profiles/app/includes/eslint/patch/eslint-bulk-suppressions.js index 831b7c639fb..084519e6ebb 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/eslint-bulk-suppressions.js @@ -1,4 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -require('local-eslint-config/patch/custom-config-package-names'); +require('@rushstack/eslint-config/patch/eslint-bulk-suppressions'); diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..860b58395f6 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); + +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js new file mode 100644 index 00000000000..a3f2ea0992a --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); + +module.exports = [...packletsMixin]; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/react.js b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/react.js new file mode 100644 index 00000000000..5aafda8dcf0 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/react.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); + +module.exports = [...reactMixin]; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..012a5bece42 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); + +module.exports = [...tsdocMixin]; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..ec6804684d1 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +require('@rushstack/eslint-config/flat/patch/eslint-bulk-suppressions'); diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js new file mode 100644 index 00000000000..d825f616500 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); + +module.exports = [...webAppProfile]; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/patch/eslint-bulk-suppressions.js b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..084519e6ebb --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/eslint-bulk-suppressions.js @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +require('@rushstack/eslint-config/patch/eslint-bulk-suppressions'); diff --git a/rigs/local-node-rig/package.json b/rigs/local-node-rig/package.json index 2fc418e7070..f5bca90d5a2 100644 --- a/rigs/local-node-rig/package.json +++ b/rigs/local-node-rig/package.json @@ -10,12 +10,13 @@ }, "dependencies": { "@microsoft/api-extractor": "workspace:*", + "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", "local-eslint-config": "workspace:*", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "jest-junit": "12.3.0", "typescript": "~5.8.2" } diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js similarity index 53% rename from rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js rename to rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js index 8ce8a5a50f1..fa55581f566 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/friendly-locals'] -}; +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js similarity index 57% rename from rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js rename to rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js index 34121152062..4291377cb4d 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/packlets'] -}; +const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); + +module.exports = [...packletsMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js similarity index 59% rename from rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js rename to rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js index 32d2625068b..e8ce9b16050 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/react'] -}; +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [...reactMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js similarity index 59% rename from rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js rename to rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js index 48a832eef64..e5cb903f6cd 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/tsdoc'] -}; +const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); + +module.exports = [...tsdocMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js similarity index 70% rename from rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js rename to rigs/local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js index a262ef96af5..12c37b253da 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js @@ -1,4 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -require('local-eslint-config/patch/modern-module-resolution'); +require('@rushstack/eslint-patch/eslint-bulk-suppressions'); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js similarity index 52% rename from rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js rename to rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js index ffced0b4377..aa7fc56fae1 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/profile/node-trusted-tool'] -}; +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); + +module.exports = [...nodeTrustedToolProfile]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js similarity index 59% rename from rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js rename to rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js index 58350ac8a62..753ef86ecb6 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/profile/node'] -}; +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = [...nodeProfile]; diff --git a/rigs/local-web-rig/package.json b/rigs/local-web-rig/package.json index 525067bc46e..0a7c8002889 100644 --- a/rigs/local-web-rig/package.json +++ b/rigs/local-web-rig/package.json @@ -10,12 +10,13 @@ }, "dependencies": { "@microsoft/api-extractor": "workspace:*", + "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft-web-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@types/heft-jest": "1.0.1", "@types/webpack-env": "1.18.8", "local-eslint-config": "workspace:*", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "jest-junit": "12.3.0", "typescript": "~5.8.2" } diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js similarity index 53% rename from rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js rename to rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js index 8ce8a5a50f1..fa55581f566 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/friendly-locals'] -}; +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js similarity index 57% rename from rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js rename to rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js index 34121152062..4291377cb4d 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/packlets'] -}; +const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); + +module.exports = [...packletsMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js similarity index 59% rename from rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js rename to rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js index 32d2625068b..e8ce9b16050 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/react'] -}; +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [...reactMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js similarity index 59% rename from rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js rename to rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js index 48a832eef64..e5cb903f6cd 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/mixins/tsdoc'] -}; +const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); + +module.exports = [...tsdocMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js similarity index 70% rename from rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js rename to rigs/local-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js index a262ef96af5..12c37b253da 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js @@ -1,4 +1,4 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -require('local-eslint-config/patch/modern-module-resolution'); +require('@rushstack/eslint-patch/eslint-bulk-suppressions'); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js similarity index 57% rename from rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js rename to rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js index 6753941a378..5d8f876da20 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/profile/web-app'] -}; +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = [...webAppProfile]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..fa55581f566 --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js new file mode 100644 index 00000000000..4291377cb4d --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); + +module.exports = [...packletsMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/react.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/react.js new file mode 100644 index 00000000000..e8ce9b16050 --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/react.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = [...reactMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..e5cb903f6cd --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,6 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); + +module.exports = [...tsdocMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js @@ -0,0 +1,4 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +require('@rushstack/eslint-patch/eslint-bulk-suppressions'); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js similarity index 57% rename from rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js rename to rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js index 6753941a378..5d8f876da20 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -module.exports = { - extends: ['local-eslint-config/profile/web-app'] -}; +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = [...webAppProfile]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js b/rigs/local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 831b7c639fb..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js +++ /dev/null @@ -1,4 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -require('local-eslint-config/patch/custom-config-package-names'); diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/.eslintrc.js b/rush-plugins/rush-amazon-s3-build-cache-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/eslint.config.js b/rush-plugins/rush-amazon-s3-build-cache-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json b/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json index 25ce3b4628d..68ec07ca96e 100644 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/package.json @@ -27,6 +27,7 @@ "devDependencies": { "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/rush-plugins/rush-azure-storage-build-cache-plugin/.eslintrc.js b/rush-plugins/rush-azure-storage-build-cache-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/rush-plugins/rush-azure-storage-build-cache-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-azure-storage-build-cache-plugin/eslint.config.js b/rush-plugins/rush-azure-storage-build-cache-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-azure-storage-build-cache-plugin/package.json b/rush-plugins/rush-azure-storage-build-cache-plugin/package.json index 1c88c5425c7..d0cd07e22c1 100644 --- a/rush-plugins/rush-azure-storage-build-cache-plugin/package.json +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/package.json @@ -27,6 +27,7 @@ "devDependencies": { "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/rush-plugins/rush-bridge-cache-plugin/.eslintrc.js b/rush-plugins/rush-bridge-cache-plugin/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/rush-plugins/rush-bridge-cache-plugin/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-bridge-cache-plugin/eslint.config.js b/rush-plugins/rush-bridge-cache-plugin/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/rush-plugins/rush-bridge-cache-plugin/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-bridge-cache-plugin/package.json b/rush-plugins/rush-bridge-cache-plugin/package.json index 30ee84502d4..c19ded71f53 100644 --- a/rush-plugins/rush-bridge-cache-plugin/package.json +++ b/rush-plugins/rush-bridge-cache-plugin/package.json @@ -24,6 +24,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/rush-plugins/rush-buildxl-graph-plugin/.eslintrc.js b/rush-plugins/rush-buildxl-graph-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/rush-plugins/rush-buildxl-graph-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-buildxl-graph-plugin/eslint.config.js b/rush-plugins/rush-buildxl-graph-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/rush-plugins/rush-buildxl-graph-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-buildxl-graph-plugin/package.json b/rush-plugins/rush-buildxl-graph-plugin/package.json index 910f2b85397..ec845de49ce 100644 --- a/rush-plugins/rush-buildxl-graph-plugin/package.json +++ b/rush-plugins/rush-buildxl-graph-plugin/package.json @@ -26,6 +26,7 @@ "devDependencies": { "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/rush-plugins/rush-buildxl-graph-plugin/src/GraphProcessor.ts b/rush-plugins/rush-buildxl-graph-plugin/src/GraphProcessor.ts index fd4edf05461..9cf99b5e5d9 100644 --- a/rush-plugins/rush-buildxl-graph-plugin/src/GraphProcessor.ts +++ b/rush-plugins/rush-buildxl-graph-plugin/src/GraphProcessor.ts @@ -167,10 +167,8 @@ export class GraphProcessor { nonEmptyDependencies = new Set(); nonEmptyDependenciesByOperation.set(node, nonEmptyDependencies); for (const dependencyID of node.dependencies) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion if (!inputNodeMap.get(dependencyID)!.command) { // If the dependency is empty, recursively inherit its non-empty dependencies - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion for (const deepDependency of getNonEmptyDependencies(inputNodeMap.get(dependencyID)!)) { nonEmptyDependencies.add(deepDependency); } diff --git a/rush-plugins/rush-http-build-cache-plugin/.eslintrc.js b/rush-plugins/rush-http-build-cache-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/rush-plugins/rush-http-build-cache-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-http-build-cache-plugin/eslint.config.js b/rush-plugins/rush-http-build-cache-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/rush-plugins/rush-http-build-cache-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-http-build-cache-plugin/package.json b/rush-plugins/rush-http-build-cache-plugin/package.json index 3b0f8d4b557..da690b46973 100644 --- a/rush-plugins/rush-http-build-cache-plugin/package.json +++ b/rush-plugins/rush-http-build-cache-plugin/package.json @@ -27,6 +27,7 @@ "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/terminal": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/rush-plugins/rush-litewatch-plugin/.eslintrc.js b/rush-plugins/rush-litewatch-plugin/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/rush-plugins/rush-litewatch-plugin/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-litewatch-plugin/eslint.config.js b/rush-plugins/rush-litewatch-plugin/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/rush-plugins/rush-litewatch-plugin/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-litewatch-plugin/package.json b/rush-plugins/rush-litewatch-plugin/package.json index dd77b35abea..419c7143a2a 100644 --- a/rush-plugins/rush-litewatch-plugin/package.json +++ b/rush-plugins/rush-litewatch-plugin/package.json @@ -21,6 +21,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/rush-plugins/rush-mcp-docs-plugin/.eslintrc.js b/rush-plugins/rush-mcp-docs-plugin/.eslintrc.js deleted file mode 100644 index de794c04ae0..00000000000 --- a/rush-plugins/rush-mcp-docs-plugin/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-eslint-config/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-eslint-config/patch/custom-config-package-names'); - -module.exports = { - extends: [ - 'local-eslint-config/profile/node', - 'local-eslint-config/mixins/friendly-locals', - 'local-eslint-config/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-mcp-docs-plugin/eslint.config.js b/rush-plugins/rush-mcp-docs-plugin/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/rush-plugins/rush-mcp-docs-plugin/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-mcp-docs-plugin/package.json b/rush-plugins/rush-mcp-docs-plugin/package.json index 339616b5ba9..a0cf460e009 100644 --- a/rush-plugins/rush-mcp-docs-plugin/package.json +++ b/rush-plugins/rush-mcp-docs-plugin/package.json @@ -22,6 +22,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "local-eslint-config": "workspace:*" } diff --git a/rush-plugins/rush-redis-cobuild-plugin/.eslintrc.js b/rush-plugins/rush-redis-cobuild-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/rush-plugins/rush-redis-cobuild-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-redis-cobuild-plugin/eslint.config.js b/rush-plugins/rush-redis-cobuild-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-redis-cobuild-plugin/package.json b/rush-plugins/rush-redis-cobuild-plugin/package.json index d0942dea146..41cd08d36ae 100644 --- a/rush-plugins/rush-redis-cobuild-plugin/package.json +++ b/rush-plugins/rush-redis-cobuild-plugin/package.json @@ -27,6 +27,7 @@ "@microsoft/rush-lib": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/terminal": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/rush-plugins/rush-resolver-cache-plugin/.eslintrc.js b/rush-plugins/rush-resolver-cache-plugin/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/rush-plugins/rush-resolver-cache-plugin/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-resolver-cache-plugin/eslint.config.js b/rush-plugins/rush-resolver-cache-plugin/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/rush-plugins/rush-resolver-cache-plugin/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-resolver-cache-plugin/package.json b/rush-plugins/rush-resolver-cache-plugin/package.json index 612d61a5312..2e9f410f85f 100644 --- a/rush-plugins/rush-resolver-cache-plugin/package.json +++ b/rush-plugins/rush-resolver-cache-plugin/package.json @@ -25,6 +25,7 @@ "@rushstack/terminal": "workspace:*", "@rushstack/webpack-workspace-resolve-plugin": "workspace:*", "@types/webpack-env": "1.18.8", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "exports": { diff --git a/rush-plugins/rush-resolver-cache-plugin/src/helpers.ts b/rush-plugins/rush-resolver-cache-plugin/src/helpers.ts index cd93fb73b5b..2d30d313e7e 100644 --- a/rush-plugins/rush-resolver-cache-plugin/src/helpers.ts +++ b/rush-plugins/rush-resolver-cache-plugin/src/helpers.ts @@ -91,7 +91,6 @@ export function resolveDependencyKey( * @returns The physical path to the dependency */ export function getDescriptionFileRootFromKey(lockfileFolder: string, key: string, name?: string): string { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion if (!key.startsWith('file:')) { name = key.slice(1, key.indexOf('@', 2)); } diff --git a/rush-plugins/rush-resolver-cache-plugin/src/index.ts b/rush-plugins/rush-resolver-cache-plugin/src/index.ts index 8f032b3e939..e1877b3ab52 100644 --- a/rush-plugins/rush-resolver-cache-plugin/src/index.ts +++ b/rush-plugins/rush-resolver-cache-plugin/src/index.ts @@ -30,10 +30,7 @@ export default class RushResolverCachePlugin implements IRushPlugin { return; } - const pnpmMajorVersion: number = parseInt( - rushConfiguration.packageManagerToolVersion.split('.')[0], - /* radix */ 10 - ); + const pnpmMajorVersion: number = parseInt(rushConfiguration.packageManagerToolVersion, 10); // Lockfile format parsing logic changed in pnpm v8. if (pnpmMajorVersion < 8) { logger.emitError(new Error('The RushResolverCachePlugin currently only supports pnpm version >=8')); diff --git a/rush-plugins/rush-serve-plugin/.eslintrc.js b/rush-plugins/rush-serve-plugin/.eslintrc.js deleted file mode 100644 index 0b04796d1ee..00000000000 --- a/rush-plugins/rush-serve-plugin/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals', - 'local-node-rig/profiles/default/includes/eslint/mixins/tsdoc' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/rush-plugins/rush-serve-plugin/eslint.config.js b/rush-plugins/rush-serve-plugin/eslint.config.js new file mode 100644 index 00000000000..87132f43292 --- /dev/null +++ b/rush-plugins/rush-serve-plugin/eslint.config.js @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); +const tsdocMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc'); + +module.exports = [ + ...nodeProfile, + ...friendlyLocalsMixin, + ...tsdocMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/rush-plugins/rush-serve-plugin/package.json b/rush-plugins/rush-serve-plugin/package.json index 3bcc3237549..6995df6be8b 100644 --- a/rush-plugins/rush-serve-plugin/package.json +++ b/rush-plugins/rush-serve-plugin/package.json @@ -31,6 +31,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@rushstack/terminal": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "@types/compression": "~1.7.2", "@types/cors": "~2.8.12", diff --git a/rush.json b/rush.json index 27ff4e64459..cc0be06d919 100644 --- a/rush.json +++ b/rush.json @@ -597,25 +597,25 @@ "tags": ["api-extractor-tests"] }, { - "packageName": "eslint-7-7-test", - "projectFolder": "build-tests/eslint-7-7-test", + "packageName": "eslint-7-11-test", + "projectFolder": "build-tests/eslint-7-11-test", "reviewCategory": "tests", "shouldPublish": false, - "cyclicDependencyProjects": ["@rushstack/eslint-config"] + "decoupledLocalDependencies": ["@rushstack/eslint-config"] }, { - "packageName": "eslint-7-11-test", - "projectFolder": "build-tests/eslint-7-11-test", + "packageName": "eslint-7-7-test", + "projectFolder": "build-tests/eslint-7-7-test", "reviewCategory": "tests", "shouldPublish": false, - "cyclicDependencyProjects": ["@rushstack/eslint-config"] + "decoupledLocalDependencies": ["@rushstack/eslint-config"] }, { "packageName": "eslint-7-test", "projectFolder": "build-tests/eslint-7-test", "reviewCategory": "tests", "shouldPublish": false, - "cyclicDependencyProjects": ["@rushstack/eslint-config"] + "decoupledLocalDependencies": ["@rushstack/eslint-config"] }, { "packageName": "eslint-8-test", @@ -623,12 +623,24 @@ "reviewCategory": "tests", "shouldPublish": false }, + { + "packageName": "eslint-9-test", + "projectFolder": "build-tests/eslint-9-test", + "reviewCategory": "tests", + "shouldPublish": false + }, { "packageName": "eslint-bulk-suppressions-test", "projectFolder": "build-tests/eslint-bulk-suppressions-test", "reviewCategory": "tests", "shouldPublish": false }, + { + "packageName": "eslint-bulk-suppressions-test-flat", + "projectFolder": "build-tests/eslint-bulk-suppressions-test-flat", + "reviewCategory": "tests", + "shouldPublish": false + }, { "packageName": "eslint-bulk-suppressions-test-legacy", "projectFolder": "build-tests/eslint-bulk-suppressions-test-legacy", diff --git a/vscode-extensions/rush-vscode-command-webview/.eslintrc.js b/vscode-extensions/rush-vscode-command-webview/.eslintrc.js deleted file mode 100644 index b734c6ebe21..00000000000 --- a/vscode-extensions/rush-vscode-command-webview/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// This is a workaround for https://github.com/eslint/eslint/issues/3458 -require('local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution'); -// This is a workaround for https://github.com/microsoft/rushstack/issues/3021 -require('local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names'); - -module.exports = { - extends: [ - 'local-web-rig/profiles/app/includes/eslint/profile/web-app', - 'local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/vscode-extensions/rush-vscode-command-webview/eslint.config.js b/vscode-extensions/rush-vscode-command-webview/eslint.config.js new file mode 100644 index 00000000000..d19f4f2a29b --- /dev/null +++ b/vscode-extensions/rush-vscode-command-webview/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const webAppProfile = require('local-web-rig/profiles/app/includes/eslint/flat/profile/web-app'); +const friendlyLocalsMixin = require('local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...webAppProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/vscode-extensions/rush-vscode-command-webview/package.json b/vscode-extensions/rush-vscode-command-webview/package.json index 55f5f54f804..6a1eaddbfa6 100644 --- a/vscode-extensions/rush-vscode-command-webview/package.json +++ b/vscode-extensions/rush-vscode-command-webview/package.json @@ -30,16 +30,16 @@ "tslib": "~2.3.1" }, "devDependencies": { - "local-web-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/ts-command-line": "workspace:*", + "@types/react": "17.0.74", "@types/react-dom": "17.0.25", "@types/react-redux": "~7.1.22", - "@types/react": "17.0.74", "@types/vscode": "^1.63.0", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "html-webpack-plugin": "~5.5.0", - "webpack-bundle-analyzer": "~4.5.0", - "webpack": "~5.98.0" + "local-web-rig": "workspace:*", + "webpack": "~5.98.0", + "webpack-bundle-analyzer": "~4.5.0" } } diff --git a/vscode-extensions/rush-vscode-extension/.eslintrc.js b/vscode-extensions/rush-vscode-extension/.eslintrc.js deleted file mode 100644 index 9d28e9e2a85..00000000000 --- a/vscode-extensions/rush-vscode-extension/.eslintrc.js +++ /dev/null @@ -1,13 +0,0 @@ -// 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'); - -module.exports = { - ignorePatterns: ['out', 'dist', '**/*.d.ts'], - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/vscode-extensions/rush-vscode-extension/eslint.config.js b/vscode-extensions/rush-vscode-extension/eslint.config.js new file mode 100644 index 00000000000..3470d28356b --- /dev/null +++ b/vscode-extensions/rush-vscode-extension/eslint.config.js @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + ignores: ['out', 'dist', '**/*.d.ts'] + }, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/vscode-extensions/rush-vscode-extension/package.json b/vscode-extensions/rush-vscode-extension/package.json index b8fa544405d..fad55c59819 100644 --- a/vscode-extensions/rush-vscode-extension/package.json +++ b/vscode-extensions/rush-vscode-extension/package.json @@ -264,7 +264,6 @@ }, "devDependencies": { "@microsoft/rush-lib": "workspace:*", - "local-node-rig": "workspace:*", "@rushstack/heft-webpack5-plugin": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/package-extractor": "workspace:*", @@ -274,7 +273,9 @@ "@types/vscode": "^1.63.0", "@types/webpack-env": "1.18.8", "@vscode/test-electron": "^1.6.2", + "eslint": "~9.25.1", "glob": "~7.0.5", + "local-node-rig": "workspace:*", "mocha": "^10.1.0", "vsce": "~2.14.0" }, diff --git a/vscode-extensions/rush-vscode-extension/src/logic/RushWorkspace.ts b/vscode-extensions/rush-vscode-extension/src/logic/RushWorkspace.ts index a4f6c9004b8..bbff82b77f2 100644 --- a/vscode-extensions/rush-vscode-extension/src/logic/RushWorkspace.ts +++ b/vscode-extensions/rush-vscode-extension/src/logic/RushWorkspace.ts @@ -14,7 +14,6 @@ import type * as RushCommandLine from '@rushstack/ts-command-line'; declare let ___DEV___: boolean; declare const global: NodeJS.Global & typeof globalThis & { - // eslint-disable-next-line @typescript-eslint/naming-convention ___rush___rushLibModule?: typeof RushLib; }; diff --git a/vscode-extensions/rush-vscode-extension/src/providers/RushCommandsProvider.ts b/vscode-extensions/rush-vscode-extension/src/providers/RushCommandsProvider.ts index c4c067bd621..faf0080814f 100644 --- a/vscode-extensions/rush-vscode-extension/src/providers/RushCommandsProvider.ts +++ b/vscode-extensions/rush-vscode-extension/src/providers/RushCommandsProvider.ts @@ -71,7 +71,6 @@ export class RushCommandsProvider implements vscode.TreeDataProvider { - // eslint-disable-next-line @typescript-eslint/no-floating-promises // return RushCommandWebViewPanel.getInstance(this._context).reveal(''); } diff --git a/webpack/hashed-folder-copy-plugin/.eslintrc.js b/webpack/hashed-folder-copy-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/hashed-folder-copy-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/hashed-folder-copy-plugin/eslint.config.js b/webpack/hashed-folder-copy-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/hashed-folder-copy-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/hashed-folder-copy-plugin/package.json b/webpack/hashed-folder-copy-plugin/package.json index f78aa03dd9b..f02cdbeca96 100644 --- a/webpack/hashed-folder-copy-plugin/package.json +++ b/webpack/hashed-folder-copy-plugin/package.json @@ -49,6 +49,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/estree": "1.0.6", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "memfs": "4.12.0", "webpack": "~5.98.0" diff --git a/webpack/hashed-folder-copy-plugin/src/test/__snapshots__/HashedFolderCopyPlugin.test.ts.snap b/webpack/hashed-folder-copy-plugin/src/test/__snapshots__/HashedFolderCopyPlugin.test.ts.snap index 29c8a8bc6b6..34940cfbaaf 100644 --- a/webpack/hashed-folder-copy-plugin/src/test/__snapshots__/HashedFolderCopyPlugin.test.ts.snap +++ b/webpack/hashed-folder-copy-plugin/src/test/__snapshots__/HashedFolderCopyPlugin.test.ts.snap @@ -50,7 +50,6 @@ Object { // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -// eslint-disable-next-line no-console const path = __webpack_require__.p + \\"assets_1a20fc5e5390d91fee246bf5dbf1300e/\\"; // eslint-disable-next-line no-console console.log(path); diff --git a/webpack/hashed-folder-copy-plugin/src/test/scenarios/localFolder/entry.ts b/webpack/hashed-folder-copy-plugin/src/test/scenarios/localFolder/entry.ts index 9f446f3c663..35b6d41ebe4 100644 --- a/webpack/hashed-folder-copy-plugin/src/test/scenarios/localFolder/entry.ts +++ b/webpack/hashed-folder-copy-plugin/src/test/scenarios/localFolder/entry.ts @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -// eslint-disable-next-line no-console const path: string = requireFolder({ sources: [ { diff --git a/webpack/loader-load-themed-styles/.eslintrc.js b/webpack/loader-load-themed-styles/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/loader-load-themed-styles/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/loader-load-themed-styles/eslint.config.js b/webpack/loader-load-themed-styles/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/loader-load-themed-styles/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/loader-load-themed-styles/package.json b/webpack/loader-load-themed-styles/package.json index c0171a709a6..91777d34c08 100644 --- a/webpack/loader-load-themed-styles/package.json +++ b/webpack/loader-load-themed-styles/package.json @@ -29,9 +29,10 @@ }, "devDependencies": { "@microsoft/load-themed-styles": "workspace:*", - "local-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@types/loader-utils": "1.1.3", - "@types/webpack": "4.41.32" + "@types/webpack": "4.41.32", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*" } } diff --git a/webpack/loader-raw-script/.eslintrc.js b/webpack/loader-raw-script/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/loader-raw-script/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/loader-raw-script/eslint.config.js b/webpack/loader-raw-script/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/loader-raw-script/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/loader-raw-script/package.json b/webpack/loader-raw-script/package.json index 51e8327c356..84b689c1617 100644 --- a/webpack/loader-raw-script/package.json +++ b/webpack/loader-raw-script/package.json @@ -20,6 +20,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" } } diff --git a/webpack/preserve-dynamic-require-plugin/.eslintrc.js b/webpack/preserve-dynamic-require-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/preserve-dynamic-require-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/preserve-dynamic-require-plugin/eslint.config.js b/webpack/preserve-dynamic-require-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/preserve-dynamic-require-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/preserve-dynamic-require-plugin/package.json b/webpack/preserve-dynamic-require-plugin/package.json index 63870fc22f0..53336c76e05 100644 --- a/webpack/preserve-dynamic-require-plugin/package.json +++ b/webpack/preserve-dynamic-require-plugin/package.json @@ -20,6 +20,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "webpack": "~5.98.0" }, diff --git a/webpack/set-webpack-public-path-plugin/.eslintrc.js b/webpack/set-webpack-public-path-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/set-webpack-public-path-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/set-webpack-public-path-plugin/eslint.config.js b/webpack/set-webpack-public-path-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/set-webpack-public-path-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/set-webpack-public-path-plugin/package.json b/webpack/set-webpack-public-path-plugin/package.json index b7fc729eb49..d2483a6e1b0 100644 --- a/webpack/set-webpack-public-path-plugin/package.json +++ b/webpack/set-webpack-public-path-plugin/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "memfs": "4.12.0", "webpack": "~5.98.0" diff --git a/webpack/webpack-deep-imports-plugin/.eslintrc.js b/webpack/webpack-deep-imports-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack-deep-imports-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack-deep-imports-plugin/eslint.config.js b/webpack/webpack-deep-imports-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack-deep-imports-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack-deep-imports-plugin/package.json b/webpack/webpack-deep-imports-plugin/package.json index fe0766cc6a2..a0ad04355d9 100644 --- a/webpack/webpack-deep-imports-plugin/package.json +++ b/webpack/webpack-deep-imports-plugin/package.json @@ -24,6 +24,7 @@ "devDependencies": { "local-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "webpack": "~5.98.0" }, "sideEffects": false, diff --git a/webpack/webpack-embedded-dependencies-plugin/.eslintrc.js b/webpack/webpack-embedded-dependencies-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack-embedded-dependencies-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack-embedded-dependencies-plugin/eslint.config.js b/webpack/webpack-embedded-dependencies-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack-embedded-dependencies-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack-embedded-dependencies-plugin/package.json b/webpack/webpack-embedded-dependencies-plugin/package.json index 08f7c7140eb..7596ed09c6a 100644 --- a/webpack/webpack-embedded-dependencies-plugin/package.json +++ b/webpack/webpack-embedded-dependencies-plugin/package.json @@ -30,6 +30,7 @@ "devDependencies": { "@rushstack/webpack-plugin-utilities": "workspace:*", "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "webpack": "~5.98.0", "memfs": "4.12.0" diff --git a/webpack/webpack-plugin-utilities/.eslintrc.js b/webpack/webpack-plugin-utilities/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack-plugin-utilities/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack-plugin-utilities/eslint.config.js b/webpack/webpack-plugin-utilities/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack-plugin-utilities/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack-plugin-utilities/package.json b/webpack/webpack-plugin-utilities/package.json index 4ab1ffb573a..d1034c3a688 100644 --- a/webpack/webpack-plugin-utilities/package.json +++ b/webpack/webpack-plugin-utilities/package.json @@ -32,6 +32,7 @@ }, "devDependencies": { "@rushstack/heft": "workspace:*", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "@types/tapable": "1.0.6", "webpack": "~5.98.0" diff --git a/webpack/webpack-workspace-resolve-plugin/.eslintrc.js b/webpack/webpack-workspace-resolve-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack-workspace-resolve-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack-workspace-resolve-plugin/eslint.config.js b/webpack/webpack-workspace-resolve-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack-workspace-resolve-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack-workspace-resolve-plugin/package.json b/webpack/webpack-workspace-resolve-plugin/package.json index b201eba2bf5..d21559f76a1 100644 --- a/webpack/webpack-workspace-resolve-plugin/package.json +++ b/webpack/webpack-workspace-resolve-plugin/package.json @@ -28,6 +28,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "memfs": "4.12.0", "webpack": "~5.98.0" diff --git a/webpack/webpack-workspace-resolve-plugin/src/KnownDescriptionFilePlugin.ts b/webpack/webpack-workspace-resolve-plugin/src/KnownDescriptionFilePlugin.ts index 9fd920cb6a0..ac81157b3c0 100644 --- a/webpack/webpack-workspace-resolve-plugin/src/KnownDescriptionFilePlugin.ts +++ b/webpack/webpack-workspace-resolve-plugin/src/KnownDescriptionFilePlugin.ts @@ -51,7 +51,6 @@ export class KnownDescriptionFilePlugin { if (!data?.length) { return callback(err); } - // eslint-disable-next-line @rushstack/no-new-null callback(null, JSON.parse(data.toString())); }); } @@ -132,10 +131,8 @@ export class KnownDescriptionFilePlugin { // Don't allow other processing if (result === undefined) { - // eslint-disable-next-line @rushstack/no-new-null return callback(null, null); } - // eslint-disable-next-line @rushstack/no-new-null callback(null, result); } ); diff --git a/webpack/webpack-workspace-resolve-plugin/src/KnownPackageDependenciesPlugin.ts b/webpack/webpack-workspace-resolve-plugin/src/KnownPackageDependenciesPlugin.ts index cfbf33abd5c..d3ad1503249 100644 --- a/webpack/webpack-workspace-resolve-plugin/src/KnownPackageDependenciesPlugin.ts +++ b/webpack/webpack-workspace-resolve-plugin/src/KnownPackageDependenciesPlugin.ts @@ -100,7 +100,6 @@ export class KnownPackageDependenciesPlugin { file: request.file, internal: request.internal }; - // eslint-disable-next-line @rushstack/no-new-null resolver.doResolve(target, obj, null, resolveContext, callback); }); } diff --git a/webpack/webpack4-localization-plugin/.eslintrc.js b/webpack/webpack4-localization-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack4-localization-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack4-localization-plugin/eslint.config.js b/webpack/webpack4-localization-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack4-localization-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack4-localization-plugin/package.json b/webpack/webpack4-localization-plugin/package.json index fe0ff13681c..71b0ab6741c 100644 --- a/webpack/webpack4-localization-plugin/package.json +++ b/webpack/webpack4-localization-plugin/package.json @@ -46,6 +46,7 @@ "@types/minimatch": "3.0.5", "@types/node": "20.17.19", "@types/webpack": "4.41.32", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "webpack": "~4.47.0" } diff --git a/webpack/webpack4-localization-plugin/src/AssetProcessor.ts b/webpack/webpack4-localization-plugin/src/AssetProcessor.ts index ad3505df197..fd2780153ed 100644 --- a/webpack/webpack4-localization-plugin/src/AssetProcessor.ts +++ b/webpack/webpack4-localization-plugin/src/AssetProcessor.ts @@ -340,7 +340,6 @@ export class AssetProcessor { let lastIndex: number = 0; let regexResult: RegExpExecArray | null; while ((regexResult = PLACEHOLDER_REGEX.exec(source))) { - // eslint-disable-line no-cond-assign const staticElement: IStaticReconstructionElement = { kind: 'static', staticString: source.substring(lastIndex, regexResult.index) diff --git a/webpack/webpack4-module-minifier-plugin/.eslintrc.js b/webpack/webpack4-module-minifier-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack4-module-minifier-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack4-module-minifier-plugin/eslint.config.js b/webpack/webpack4-module-minifier-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack4-module-minifier-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack4-module-minifier-plugin/package.json b/webpack/webpack4-module-minifier-plugin/package.json index 6317888fc38..8b1db10ecfa 100644 --- a/webpack/webpack4-module-minifier-plugin/package.json +++ b/webpack/webpack4-module-minifier-plugin/package.json @@ -47,6 +47,7 @@ "@types/node": "20.17.19", "@types/webpack-sources": "1.4.2", "@types/webpack": "4.41.32", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "webpack-sources": "~1.4.3", "webpack": "~4.47.0" diff --git a/webpack/webpack4-module-minifier-plugin/src/ParallelCompiler.ts b/webpack/webpack4-module-minifier-plugin/src/ParallelCompiler.ts index 7c99eb87581..5fd0626b8d4 100644 --- a/webpack/webpack4-module-minifier-plugin/src/ParallelCompiler.ts +++ b/webpack/webpack4-module-minifier-plugin/src/ParallelCompiler.ts @@ -56,8 +56,7 @@ function formatTime(timeNs: bigint): string { export async function runParallel(options: IParallelWebpackOptions): Promise { const resolvedPath: string = resolve(options.configFilePath); - - const rawConfig: Configuration | Configuration[] = require(resolvedPath); // eslint-disable-line @typescript-eslint/no-var-requires + const rawConfig: Configuration | Configuration[] = require(resolvedPath); const configArray: Configuration[] = Array.isArray(rawConfig) ? rawConfig : [rawConfig]; const configCount: number = configArray.length; diff --git a/webpack/webpack4-module-minifier-plugin/src/workerPool/WebpackWorker.ts b/webpack/webpack4-module-minifier-plugin/src/workerPool/WebpackWorker.ts index b20c76f2805..e6b8cf8f59b 100644 --- a/webpack/webpack4-module-minifier-plugin/src/workerPool/WebpackWorker.ts +++ b/webpack/webpack4-module-minifier-plugin/src/workerPool/WebpackWorker.ts @@ -12,7 +12,7 @@ process.umask = () => 0; const { configFilePath, sourceMap, usePortableModules } = workerThreads.workerData; -const webpackConfigs: webpack.Configuration[] = require(configFilePath); // eslint-disable-line @typescript-eslint/no-var-requires +const webpackConfigs: webpack.Configuration[] = require(configFilePath); // chalk.enabled = enableColor; diff --git a/webpack/webpack5-load-themed-styles-loader/.eslintrc.js b/webpack/webpack5-load-themed-styles-loader/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack5-load-themed-styles-loader/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack5-load-themed-styles-loader/eslint.config.js b/webpack/webpack5-load-themed-styles-loader/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack5-load-themed-styles-loader/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack5-load-themed-styles-loader/package.json b/webpack/webpack5-load-themed-styles-loader/package.json index 791d99b25c5..749b8357eb9 100644 --- a/webpack/webpack5-load-themed-styles-loader/package.json +++ b/webpack/webpack5-load-themed-styles-loader/package.json @@ -26,11 +26,12 @@ }, "devDependencies": { "@microsoft/load-themed-styles": "workspace:*", - "local-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", - "webpack": "~5.98.0", + "css-loader": "~6.6.0", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*", "memfs": "4.12.0", - "css-loader": "~6.6.0" + "webpack": "~5.98.0" } } diff --git a/webpack/webpack5-localization-plugin/.eslintrc.js b/webpack/webpack5-localization-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack5-localization-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack5-localization-plugin/eslint.config.js b/webpack/webpack5-localization-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack5-localization-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack5-localization-plugin/package.json b/webpack/webpack5-localization-plugin/package.json index ef5f1f2e875..30d3d569187 100644 --- a/webpack/webpack5-localization-plugin/package.json +++ b/webpack/webpack5-localization-plugin/package.json @@ -27,6 +27,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "memfs": "4.12.0", "webpack": "~5.98.0" diff --git a/webpack/webpack5-module-minifier-plugin/.eslintrc.js b/webpack/webpack5-module-minifier-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/webpack/webpack5-module-minifier-plugin/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -// 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'); - -module.exports = { - extends: [ - 'local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool', - 'local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname } -}; diff --git a/webpack/webpack5-module-minifier-plugin/eslint.config.js b/webpack/webpack5-module-minifier-plugin/eslint.config.js new file mode 100644 index 00000000000..c15e6077310 --- /dev/null +++ b/webpack/webpack5-module-minifier-plugin/eslint.config.js @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals'); + +module.exports = [ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]; diff --git a/webpack/webpack5-module-minifier-plugin/package.json b/webpack/webpack5-module-minifier-plugin/package.json index 998673fb3e8..04ae6c73fdc 100644 --- a/webpack/webpack5-module-minifier-plugin/package.json +++ b/webpack/webpack5-module-minifier-plugin/package.json @@ -33,6 +33,7 @@ "@rushstack/heft": "workspace:*", "@rushstack/module-minifier": "workspace:*", "@types/node": "20.17.19", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "memfs": "4.12.0", "webpack": "~5.98.0"