From 85d3a0e4c04f05a312fdeb3aa01f515f5ac00caa Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 25 Apr 2025 14:10:02 -0700 Subject: [PATCH 01/60] Remove old eslint build tests --- build-tests/eslint-7-11-test/.eslintrc.js | 27 -------------------- build-tests/eslint-7-11-test/README.md | 6 ----- build-tests/eslint-7-11-test/config/rig.json | 7 ----- build-tests/eslint-7-11-test/package.json | 21 --------------- build-tests/eslint-7-11-test/src/index.ts | 7 ----- build-tests/eslint-7-11-test/tsconfig.json | 24 ----------------- build-tests/eslint-7-7-test/.eslintrc.js | 27 -------------------- build-tests/eslint-7-7-test/README.md | 6 ----- build-tests/eslint-7-7-test/config/rig.json | 7 ----- build-tests/eslint-7-7-test/package.json | 21 --------------- build-tests/eslint-7-7-test/src/index.ts | 7 ----- build-tests/eslint-7-7-test/tsconfig.json | 24 ----------------- build-tests/eslint-7-test/.eslintrc.js | 27 -------------------- build-tests/eslint-7-test/README.md | 6 ----- build-tests/eslint-7-test/config/rig.json | 7 ----- build-tests/eslint-7-test/package.json | 21 --------------- build-tests/eslint-7-test/src/index.ts | 7 ----- build-tests/eslint-7-test/tsconfig.json | 24 ----------------- build-tests/eslint-8-test/.eslintrc.js | 27 -------------------- build-tests/eslint-8-test/README.md | 6 ----- build-tests/eslint-8-test/config/rig.json | 7 ----- build-tests/eslint-8-test/package.json | 20 --------------- build-tests/eslint-8-test/src/index.ts | 7 ----- build-tests/eslint-8-test/tsconfig.json | 24 ----------------- rush.json | 27 -------------------- 25 files changed, 394 deletions(-) delete mode 100644 build-tests/eslint-7-11-test/.eslintrc.js delete mode 100644 build-tests/eslint-7-11-test/README.md delete mode 100644 build-tests/eslint-7-11-test/config/rig.json delete mode 100644 build-tests/eslint-7-11-test/package.json delete mode 100644 build-tests/eslint-7-11-test/src/index.ts delete mode 100644 build-tests/eslint-7-11-test/tsconfig.json delete mode 100644 build-tests/eslint-7-7-test/.eslintrc.js delete mode 100644 build-tests/eslint-7-7-test/README.md delete mode 100644 build-tests/eslint-7-7-test/config/rig.json delete mode 100644 build-tests/eslint-7-7-test/package.json delete mode 100644 build-tests/eslint-7-7-test/src/index.ts delete mode 100644 build-tests/eslint-7-7-test/tsconfig.json delete mode 100644 build-tests/eslint-7-test/.eslintrc.js delete mode 100644 build-tests/eslint-7-test/README.md delete mode 100644 build-tests/eslint-7-test/config/rig.json delete mode 100644 build-tests/eslint-7-test/package.json delete mode 100644 build-tests/eslint-7-test/src/index.ts delete mode 100644 build-tests/eslint-7-test/tsconfig.json delete mode 100644 build-tests/eslint-8-test/.eslintrc.js delete mode 100644 build-tests/eslint-8-test/README.md delete mode 100644 build-tests/eslint-8-test/config/rig.json delete mode 100644 build-tests/eslint-8-test/package.json delete mode 100644 build-tests/eslint-8-test/src/index.ts delete mode 100644 build-tests/eslint-8-test/tsconfig.json diff --git a/build-tests/eslint-7-11-test/.eslintrc.js b/build-tests/eslint-7-11-test/.eslintrc.js deleted file mode 100644 index fd14b3536fe..00000000000 --- a/build-tests/eslint-7-11-test/.eslintrc.js +++ /dev/null @@ -1,27 +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: [ - '@rushstack/eslint-config/profile/node-trusted-tool', - '@rushstack/eslint-config/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - /** - * Override the parser from local-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-7-test package. Overriding the parser - * ensures that the these dependencies come from the eslint-7-test package. See: - * https://github.com/microsoft/rushstack/issues/3021 - */ - { - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser' - } - ] -}; diff --git a/build-tests/eslint-7-11-test/README.md b/build-tests/eslint-7-11-test/README.md deleted file mode 100644 index 7e236873623..00000000000 --- a/build-tests/eslint-7-11-test/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# eslint-7-11-test - -This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) -package. This project builds using ESLint v7.11.0 and contains a simple index file to ensure that the build runs ESLint successfully against source code. - -Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-7-11-test/config/rig.json b/build-tests/eslint-7-11-test/config/rig.json deleted file mode 100644 index 165ffb001f5..00000000000 --- a/build-tests/eslint-7-11-test/config/rig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // 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-7-11-test/package.json b/build-tests/eslint-7-11-test/package.json deleted file mode 100644 index b1e1cae39cc..00000000000 --- a/build-tests/eslint-7-11-test/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "eslint-7-11-test", - "description": "This project contains a build test to validate ESLint 7.11.0 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/eslint-config": "3.7.1", - "@rushstack/heft": "workspace:*", - "@types/node": "20.17.19", - "@typescript-eslint/parser": "~6.19.0", - "eslint": "7.11.0", - "local-node-rig": "workspace:*", - "typescript": "~5.8.2" - } -} diff --git a/build-tests/eslint-7-11-test/src/index.ts b/build-tests/eslint-7-11-test/src/index.ts deleted file mode 100644 index 428f8caba4f..00000000000 --- a/build-tests/eslint-7-11-test/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -export class Foo { - private _bar: string = 'bar'; - public baz: string = this._bar; -} diff --git a/build-tests/eslint-7-11-test/tsconfig.json b/build-tests/eslint-7-11-test/tsconfig.json deleted file mode 100644 index 8a46ac2445e..00000000000 --- a/build-tests/eslint-7-11-test/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$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-7-7-test/.eslintrc.js b/build-tests/eslint-7-7-test/.eslintrc.js deleted file mode 100644 index fd14b3536fe..00000000000 --- a/build-tests/eslint-7-7-test/.eslintrc.js +++ /dev/null @@ -1,27 +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: [ - '@rushstack/eslint-config/profile/node-trusted-tool', - '@rushstack/eslint-config/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - /** - * Override the parser from local-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-7-test package. Overriding the parser - * ensures that the these dependencies come from the eslint-7-test package. See: - * https://github.com/microsoft/rushstack/issues/3021 - */ - { - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser' - } - ] -}; diff --git a/build-tests/eslint-7-7-test/README.md b/build-tests/eslint-7-7-test/README.md deleted file mode 100644 index 6002dff592a..00000000000 --- a/build-tests/eslint-7-7-test/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# eslint-7-7-test - -This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) -package. This project builds using ESLint v7.7.0 and contains a simple index file to ensure that the build runs ESLint successfully against source code. - -Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-7-7-test/config/rig.json b/build-tests/eslint-7-7-test/config/rig.json deleted file mode 100644 index 165ffb001f5..00000000000 --- a/build-tests/eslint-7-7-test/config/rig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // 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-7-7-test/package.json b/build-tests/eslint-7-7-test/package.json deleted file mode 100644 index 8161d5edf79..00000000000 --- a/build-tests/eslint-7-7-test/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "eslint-7-7-test", - "description": "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)", - "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/eslint-config": "3.7.1", - "@rushstack/heft": "workspace:*", - "@types/node": "20.17.19", - "@typescript-eslint/parser": "~6.19.0", - "eslint": "7.7.0", - "local-node-rig": "workspace:*", - "typescript": "~5.8.2" - } -} diff --git a/build-tests/eslint-7-7-test/src/index.ts b/build-tests/eslint-7-7-test/src/index.ts deleted file mode 100644 index 428f8caba4f..00000000000 --- a/build-tests/eslint-7-7-test/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -export class Foo { - private _bar: string = 'bar'; - public baz: string = this._bar; -} diff --git a/build-tests/eslint-7-7-test/tsconfig.json b/build-tests/eslint-7-7-test/tsconfig.json deleted file mode 100644 index 8a46ac2445e..00000000000 --- a/build-tests/eslint-7-7-test/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$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-7-test/.eslintrc.js b/build-tests/eslint-7-test/.eslintrc.js deleted file mode 100644 index fd14b3536fe..00000000000 --- a/build-tests/eslint-7-test/.eslintrc.js +++ /dev/null @@ -1,27 +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: [ - '@rushstack/eslint-config/profile/node-trusted-tool', - '@rushstack/eslint-config/mixins/friendly-locals' - ], - parserOptions: { tsconfigRootDir: __dirname }, - - overrides: [ - /** - * Override the parser from local-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-7-test package. Overriding the parser - * ensures that the these dependencies come from the eslint-7-test package. See: - * https://github.com/microsoft/rushstack/issues/3021 - */ - { - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser' - } - ] -}; diff --git a/build-tests/eslint-7-test/README.md b/build-tests/eslint-7-test/README.md deleted file mode 100644 index f4d85f1fdb3..00000000000 --- a/build-tests/eslint-7-test/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# eslint-7-test - -This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) -package. This project builds using ESLint v7 and contains a simple index file to ensure that the build runs ESLint successfully against source code. - -Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-7-test/config/rig.json b/build-tests/eslint-7-test/config/rig.json deleted file mode 100644 index 165ffb001f5..00000000000 --- a/build-tests/eslint-7-test/config/rig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // 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-7-test/package.json b/build-tests/eslint-7-test/package.json deleted file mode 100644 index 4c84f0ed5a6..00000000000 --- a/build-tests/eslint-7-test/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "eslint-7-test", - "description": "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)", - "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/eslint-config": "3.7.1", - "@rushstack/heft": "workspace:*", - "@types/node": "20.17.19", - "@typescript-eslint/parser": "~6.19.0", - "eslint": "~7.30.0", - "local-node-rig": "workspace:*", - "typescript": "~5.8.2" - } -} diff --git a/build-tests/eslint-7-test/src/index.ts b/build-tests/eslint-7-test/src/index.ts deleted file mode 100644 index 428f8caba4f..00000000000 --- a/build-tests/eslint-7-test/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -export class Foo { - private _bar: string = 'bar'; - public baz: string = this._bar; -} diff --git a/build-tests/eslint-7-test/tsconfig.json b/build-tests/eslint-7-test/tsconfig.json deleted file mode 100644 index 8a46ac2445e..00000000000 --- a/build-tests/eslint-7-test/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$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-8-test/.eslintrc.js b/build-tests/eslint-8-test/.eslintrc.js deleted file mode 100644 index f9f01a3a727..00000000000 --- a/build-tests/eslint-8-test/.eslintrc.js +++ /dev/null @@ -1,27 +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: [ - /** - * Override the parser from @rushstack/eslint-config. Since the config is coming - * from the workspace instead of the external NPM package, the versions of ESLint - * and TypeScript that the config consumes will be resolved from the devDependencies - * of the config instead of from the eslint-8-test package. Overriding the parser - * ensures that the these dependencies come from the eslint-8-test package. See: - * https://github.com/microsoft/rushstack/issues/3021 - */ - { - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser' - } - ] -}; diff --git a/build-tests/eslint-8-test/README.md b/build-tests/eslint-8-test/README.md deleted file mode 100644 index f4d85f1fdb3..00000000000 --- a/build-tests/eslint-8-test/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# eslint-7-test - -This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) -package. This project builds using ESLint v7 and contains a simple index file to ensure that the build runs ESLint successfully against source code. - -Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-8-test/config/rig.json b/build-tests/eslint-8-test/config/rig.json deleted file mode 100644 index 165ffb001f5..00000000000 --- a/build-tests/eslint-8-test/config/rig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - // 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-8-test/package.json b/build-tests/eslint-8-test/package.json deleted file mode 100644 index a6ea853e71c..00000000000 --- a/build-tests/eslint-8-test/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "eslint-8-test", - "description": "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)", - "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.26.1", - "eslint": "~8.57.0", - "typescript": "~5.8.2" - } -} diff --git a/build-tests/eslint-8-test/src/index.ts b/build-tests/eslint-8-test/src/index.ts deleted file mode 100644 index 428f8caba4f..00000000000 --- a/build-tests/eslint-8-test/src/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -export class Foo { - private _bar: string = 'bar'; - public baz: string = this._bar; -} diff --git a/build-tests/eslint-8-test/tsconfig.json b/build-tests/eslint-8-test/tsconfig.json deleted file mode 100644 index 8a46ac2445e..00000000000 --- a/build-tests/eslint-8-test/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$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/rush.json b/rush.json index e977144bc85..52f23fef2c3 100644 --- a/rush.json +++ b/rush.json @@ -596,33 +596,6 @@ "shouldPublish": false, "tags": ["api-extractor-tests"] }, - { - "packageName": "eslint-7-7-test", - "projectFolder": "build-tests/eslint-7-7-test", - "reviewCategory": "tests", - "shouldPublish": false, - "cyclicDependencyProjects": ["@rushstack/eslint-config"] - }, - { - "packageName": "eslint-7-11-test", - "projectFolder": "build-tests/eslint-7-11-test", - "reviewCategory": "tests", - "shouldPublish": false, - "cyclicDependencyProjects": ["@rushstack/eslint-config"] - }, - { - "packageName": "eslint-7-test", - "projectFolder": "build-tests/eslint-7-test", - "reviewCategory": "tests", - "shouldPublish": false, - "cyclicDependencyProjects": ["@rushstack/eslint-config"] - }, - { - "packageName": "eslint-8-test", - "projectFolder": "build-tests/eslint-8-test", - "reviewCategory": "tests", - "shouldPublish": false - }, { "packageName": "eslint-bulk-suppressions-test", "projectFolder": "build-tests/eslint-bulk-suppressions-test", From 25bf4b6ae50e0a65b8f0253e514520a7e0b954e5 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 25 Apr 2025 16:22:50 -0700 Subject: [PATCH 02/60] Remove unnecessary local-eslint-config dependencies --- apps/heft/.eslintrc.js | 9 ++++++--- apps/heft/package.json | 3 +-- libraries/api-extractor-model/.eslintrc.js | 9 ++++++--- libraries/api-extractor-model/package.json | 3 +-- libraries/heft-config-file/.eslintrc.js | 9 ++++++--- libraries/heft-config-file/package.json | 3 +-- libraries/node-core-library/.eslintrc.js | 10 +++++----- libraries/node-core-library/package.json | 3 +-- libraries/operation-graph/.eslintrc.js | 10 +++++----- libraries/operation-graph/package.json | 3 +-- libraries/rig-package/.eslintrc.js | 10 +++++----- libraries/rig-package/package.json | 1 - libraries/terminal/.eslintrc.js | 10 +++++----- libraries/terminal/package.json | 3 +-- libraries/ts-command-line/.eslintrc.js | 9 ++++++--- libraries/ts-command-line/package.json | 3 +-- 16 files changed, 51 insertions(+), 47 deletions(-) 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 c0032b4aa68..8688fd48e6a 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/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 07e57a87d02..9575985b7b3 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/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 493268affed..7de1217b0e0 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/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 d0a98aefb39..5e2cd5c169d 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 88e069ff2d2..5cf5844dd9c 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/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/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 9f8f121a4db..56c4256f938 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 35e6671cf42..dbfd96d6f97 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:*" } } From d929a0c8ebdd9dcdd5a95233ea1c8a1e0ca66158 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 25 Apr 2025 16:30:40 -0700 Subject: [PATCH 03/60] Fix dependencies in various projects --- .../rush-lib-test/package.json | 2 +- .../rush-sdk-test/package.json | 2 +- .../typescript-newest-test/package.json | 2 +- .../typescript-v4-test/package.json | 2 +- .../package.json | 2 +- .../package.json | 2 +- .../build-tests-subspace/common-versions.json | 9 +- .../build-tests-subspace/pnpm-lock.yaml | 1513 ++++++---- .../build-tests-subspace/repo-state.json | 6 +- .../subspaces/default/common-versions.json | 10 +- .../config/subspaces/default/pnpm-lock.yaml | 2504 +++++++++-------- .../config/subspaces/default/repo-state.json | 4 +- eslint/eslint-config/package.json | 17 +- eslint/eslint-patch/package.json | 2 +- eslint/eslint-plugin-packlets/package.json | 9 +- eslint/eslint-plugin-security/package.json | 13 +- eslint/eslint-plugin/package.json | 12 +- rigs/decoupled-local-node-rig/package.json | 8 +- rigs/heft-node-rig/package.json | 2 +- rigs/local-node-rig/package.json | 2 +- 20 files changed, 2396 insertions(+), 1727 deletions(-) diff --git a/build-tests-subspace/rush-lib-test/package.json b/build-tests-subspace/rush-lib-test/package.json index f61769898f5..44d4315ca0c 100644 --- a/build-tests-subspace/rush-lib-test/package.json +++ b/build-tests-subspace/rush-lib-test/package.json @@ -16,7 +16,7 @@ "devDependencies": { "@rushstack/heft": "workspace:*", "@types/node": "20.17.19", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "local-node-rig": "workspace:*" }, "dependenciesMeta": { diff --git a/build-tests-subspace/rush-sdk-test/package.json b/build-tests-subspace/rush-sdk-test/package.json index 4883f695ebf..9606f90f3f0 100644 --- a/build-tests-subspace/rush-sdk-test/package.json +++ b/build-tests-subspace/rush-sdk-test/package.json @@ -16,7 +16,7 @@ "@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": { diff --git a/build-tests-subspace/typescript-newest-test/package.json b/build-tests-subspace/typescript-newest-test/package.json index 5d6837e52b9..7ef94c5bc2c 100644 --- a/build-tests-subspace/typescript-newest-test/package.json +++ b/build-tests-subspace/typescript-newest-test/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@rushstack/eslint-config": "workspace:*", "@rushstack/heft": "workspace:*", - "eslint": "~8.57.0", + "eslint": "~9.25.1", "local-node-rig": "workspace:*", "typescript": "~5.8.2" }, 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/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/package.json b/build-tests/eslint-bulk-suppressions-test/package.json index 118de1ce011..f46b84a10af 100644 --- a/build-tests/eslint-bulk-suppressions-test/package.json +++ b/build-tests/eslint-bulk-suppressions-test/package.json @@ -11,7 +11,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", "local-node-rig": "workspace:*", "typescript": "~5.8.2" 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 52e24abbcc7..18aa2c7b3f6 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -29,8 +29,8 @@ 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 @@ -62,8 +62,8 @@ 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 @@ -83,13 +83,13 @@ importers: devDependencies: '@rushstack/eslint-config': specifier: file:../../eslint/eslint-config - version: file:../../../eslint/eslint-config(eslint@8.57.1)(typescript@5.8.2) + version: file:../../../eslint/eslint-config(eslint@9.25.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 @@ -108,19 +108,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.2)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.3)(@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.2)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.3)(@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 +458,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 +482,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 +522,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 +558,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: @@ -999,6 +1041,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 @@ -1065,6 +1111,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: @@ -1149,10 +1199,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 @@ -1171,8 +1217,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 @@ -1180,12 +1226,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 @@ -1195,8 +1241,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 @@ -1204,12 +1250,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 @@ -1219,117 +1265,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: '*' @@ -1337,8 +1364,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: '*' @@ -1346,36 +1373,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 @@ -1387,14 +1392,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 @@ -1406,93 +1411,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==} @@ -1655,6 +1627,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: @@ -1671,6 +1648,14 @@ packages: 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'} @@ -1691,6 +1676,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.7 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + 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'} @@ -1711,6 +1721,16 @@ 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.5 + es-shim-unscopables: 1.0.2 + dev: true + /array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -1736,6 +1756,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'} @@ -1933,6 +1966,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'} @@ -1944,6 +1985,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: @@ -2102,8 +2161,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 @@ -2159,6 +2218,15 @@ packages: 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'} @@ -2168,6 +2236,15 @@ packages: 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'} @@ -2177,10 +2254,13 @@ packages: 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: @@ -2355,19 +2435,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 @@ -2452,6 +2534,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'} @@ -2459,30 +2598,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 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: @@ -2492,11 +2637,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 @@ -2507,6 +2669,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'} @@ -2546,7 +2715,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: @@ -2556,114 +2725,110 @@ packages: optional: true dependencies: debug: 3.2.7 - eslint: 8.57.1 - dev: true - - /eslint-plugin-deprecation@2.0.0(eslint@8.57.1)(typescript@5.8.2): - resolution: {integrity: sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: ^4.2.4 || ^5.0.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): + /eslint-plugin-header@3.1.1(eslint@9.25.1): resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} peerDependencies: eslint: '>=7.7.0' 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: @@ -2673,9 +2838,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 @@ -2691,61 +2856,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: @@ -2862,11 +3028,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: @@ -2904,13 +3070,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: @@ -2923,6 +3088,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'} @@ -2961,6 +3133,18 @@ packages: 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 @@ -2985,11 +3169,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.0.0 + dev: true + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -3009,6 +3217,15 @@ packages: 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'} @@ -3091,11 +3308,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: @@ -3103,7 +3318,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: @@ -3124,6 +3339,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'} @@ -3179,6 +3399,13 @@ packages: call-bind: 1.0.7 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: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} @@ -3195,11 +3422,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'} @@ -3267,7 +3489,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==} @@ -3347,6 +3569,15 @@ 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'} @@ -3355,6 +3586,15 @@ packages: 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==} @@ -3380,6 +3620,14 @@ packages: 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 + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -3397,11 +3645,20 @@ packages: dependencies: hasown: 2.0.2 - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + 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: - is-typed-array: 1.1.13 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 dev: true /is-date-object@1.0.5: @@ -3411,6 +3668,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==} @@ -3422,7 +3687,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: @@ -3480,6 +3745,14 @@ packages: 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 + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3510,6 +3783,16 @@ packages: 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'} @@ -3522,6 +3805,13 @@ packages: call-bind: 1.0.7 dev: true + /is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.4 + dev: true + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3534,6 +3824,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'} @@ -3544,9 +3842,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: @@ -3556,6 +3863,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==} @@ -3574,12 +3888,19 @@ packages: call-bind: 1.0.7 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: @@ -3645,14 +3966,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.0.0 + 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 @@ -4126,8 +4448,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 @@ -4192,7 +4514,7 @@ packages: 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 dev: true /jszip@3.8.0: @@ -4253,7 +4575,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 @@ -4344,6 +4666,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'} @@ -4418,13 +4745,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'} @@ -4472,10 +4792,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==} @@ -4637,13 +4953,26 @@ packages: 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 + 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: @@ -4656,13 +4985,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: @@ -4674,6 +5003,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.0.0 + dev: true + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: @@ -4726,6 +5065,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'} @@ -4791,6 +5139,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'} @@ -4804,6 +5158,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'} @@ -5064,16 +5422,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.0.0 + 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 @@ -5081,17 +5453,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'} @@ -5174,14 +5541,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'} @@ -5207,12 +5566,31 @@ packages: 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'} @@ -5222,6 +5600,15 @@ packages: 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==} @@ -5280,6 +5667,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.0.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -5290,6 +5686,35 @@ 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'} @@ -5300,6 +5725,17 @@ packages: 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==} @@ -5344,6 +5780,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==} @@ -5390,22 +5833,43 @@ 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 + 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.5 + 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.0.0 + has-property-descriptors: 1.0.2 dev: true /string.prototype.trim@1.2.9: @@ -5426,11 +5890,21 @@ 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.0.0 + 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 dev: true @@ -5578,15 +6052,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'} @@ -5617,10 +6082,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'} @@ -5653,16 +6114,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'} @@ -5704,6 +6155,15 @@ packages: 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'} @@ -5715,6 +6175,17 @@ packages: 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'} @@ -5728,14 +6199,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 @@ -5766,6 +6250,16 @@ packages: 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==} @@ -5871,23 +6365,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: @@ -5918,6 +6442,19 @@ packages: 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 @@ -6074,50 +6611,48 @@ 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: ^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: ^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: @@ -6129,116 +6664,116 @@ 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 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) + '@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-plugin-header: 3.1.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) transitivePeerDependencies: - eslint - supports-color - typescript dev: true - file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.2)(@types/node@20.17.19): + file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.3)(@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' @@ -6252,7 +6787,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.2)(@types/node@20.17.19)(jest-environment-node@29.5.0): + file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.3)(@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' @@ -6287,7 +6822,7 @@ packages: - ts-node dev: true - file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.2)(@types/node@20.17.19): + file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.3)(@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' @@ -6301,7 +6836,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.2)(@types/node@20.17.19): + file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.3)(@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' @@ -6526,7 +7061,7 @@ packages: transitivePeerDependencies: - '@types/node' - file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.2)(@types/node@20.17.19): + file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.3)(@types/node@20.17.19): resolution: {directory: ../../../rigs/heft-node-rig, type: directory} id: file:../../../rigs/heft-node-rig name: '@rushstack/heft-node-rig' @@ -6534,20 +7069,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.2)(@types/node@20.17.19) - '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.2)(@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.2)(@types/node@20.17.19) - '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.2)(@types/node@20.17.19) + '@rushstack/heft-api-extractor-plugin': file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.3)(@types/node@20.17.19) + '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.3)(@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.3)(@types/node@20.17.19) + '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.3)(@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 @@ -6559,16 +7095,17 @@ packages: dependencies: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) '@rushstack/heft': file:../../../apps/heft(@types/node@20.17.19) - '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.2)(@types/node@20.17.19) + '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.3)(@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 72bbe58dbe0..464ff5e4d84 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": "e47112c7d099f189f37770e10351e406cf1ec451", - "preferredVersionsHash": "54149ea3f01558a859c96dee2052b797d4defe68", - "packageJsonInjectedDependenciesHash": "8aab06634f5544193a51484804f7d7c4fc2ad986" + "pnpmShrinkwrapHash": "eb0bf6f02bf63e06f19cf680358e3e493f9f944f", + "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", + "packageJsonInjectedDependenciesHash": "2268750c50bd2773e9b6402474cb7139e2afad27" } diff --git a/common/config/subspaces/default/common-versions.json b/common/config/subspaces/default/common-versions.json index a4798836c9c..76d923bf7f2 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" }, /** @@ -79,11 +79,9 @@ "~6.19.0" // Used by build-tests/eslint-7(-*)-test / build-tests/eslint-bulk-suppressions-test-legacy ], "eslint": [ - "7.7.0", // Used by build-tests/eslint-7-7-test - "7.11.0", // Used by build-tests/eslint-7-11-test - "~7.30.0", // Used by build-tests/eslint-7-test "8.6.0", // Used by build-tests/eslint-bulk-suppressions-test-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 ae605174941..bae2dd61ef3 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -181,9 +181,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: @@ -1087,99 +1084,6 @@ importers: specifier: workspace:* version: link:../../rigs/local-node-rig - ../../../build-tests/eslint-7-11-test: - devDependencies: - '@rushstack/eslint-config': - specifier: 3.7.1 - version: 3.7.1(eslint@7.11.0)(typescript@5.8.2) - '@rushstack/heft': - specifier: workspace:* - version: link:../../apps/heft - '@types/node': - specifier: 20.17.19 - version: 20.17.19 - '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@7.11.0)(typescript@5.8.2) - eslint: - specifier: 7.11.0 - version: 7.11.0 - local-node-rig: - specifier: workspace:* - version: link:../../rigs/local-node-rig - typescript: - specifier: ~5.8.2 - version: 5.8.2 - - ../../../build-tests/eslint-7-7-test: - devDependencies: - '@rushstack/eslint-config': - specifier: 3.7.1 - version: 3.7.1(eslint@7.7.0)(typescript@5.8.2) - '@rushstack/heft': - specifier: workspace:* - version: link:../../apps/heft - '@types/node': - specifier: 20.17.19 - version: 20.17.19 - '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@7.7.0)(typescript@5.8.2) - eslint: - specifier: 7.7.0 - version: 7.7.0 - local-node-rig: - specifier: workspace:* - version: link:../../rigs/local-node-rig - typescript: - specifier: ~5.8.2 - version: 5.8.2 - - ../../../build-tests/eslint-7-test: - devDependencies: - '@rushstack/eslint-config': - specifier: 3.7.1 - version: 3.7.1(eslint@7.30.0)(typescript@5.8.2) - '@rushstack/heft': - specifier: workspace:* - version: link:../../apps/heft - '@types/node': - specifier: 20.17.19 - version: 20.17.19 - '@typescript-eslint/parser': - specifier: ~6.19.0 - version: 6.19.1(eslint@7.30.0)(typescript@5.8.2) - eslint: - specifier: ~7.30.0 - version: 7.30.0 - local-node-rig: - specifier: workspace:* - version: link:../../rigs/local-node-rig - typescript: - specifier: ~5.8.2 - version: 5.8.2 - - ../../../build-tests/eslint-8-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.26.1 - version: 8.26.1(eslint@8.57.0)(typescript@5.8.2) - eslint: - specifier: ~8.57.0 - version: 8.57.0 - 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': @@ -1195,8 +1099,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 @@ -1225,8 +1129,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 @@ -2306,9 +2210,6 @@ importers: ../../../eslint/eslint-config: dependencies: - '@rushstack/eslint-patch': - specifier: workspace:* - version: link:../eslint-patch '@rushstack/eslint-plugin': specifier: workspace:* version: link:../eslint-plugin @@ -2319,30 +2220,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 @@ -2356,8 +2257,8 @@ importers: specifier: 8.56.10 version: 8.56.10 '@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 @@ -2374,30 +2275,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 @@ -2414,24 +2303,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 @@ -2448,30 +2328,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 @@ -2490,24 +2361,24 @@ importers: '@rushstack/eslint-patch': specifier: workspace:* version: link:../eslint-patch + '@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-plugin-header: specifier: ~3.1.1 - version: 3.1.1(eslint@8.57.0) + version: 3.1.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 @@ -2516,8 +2387,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 @@ -2676,6 +2547,9 @@ 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/semver': specifier: 7.5.0 version: 7.5.0 @@ -2685,6 +2559,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) @@ -2931,9 +2808,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: @@ -2987,9 +2861,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/load-themed-styles: devDependencies: @@ -3110,9 +2981,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: @@ -3129,9 +2997,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: @@ -3228,9 +3093,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: @@ -3540,9 +3402,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: @@ -3577,9 +3436,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: @@ -3701,8 +3557,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 @@ -3713,14 +3569,14 @@ importers: 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 @@ -3752,8 +3608,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 @@ -3874,8 +3730,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 @@ -5411,12 +5267,6 @@ packages: - supports-color dev: false - /@babel/code-frame@7.12.11: - resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} - dependencies: - '@babel/highlight': 7.23.4 - dev: true - /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -7139,13 +6989,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: @@ -7364,83 +7214,51 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@7.11.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 7.11.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@7.30.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 7.30.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/eslint-utils@4.4.0(eslint@7.7.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 7.7.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + /@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: 8.57.0 + 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: - ajv: 6.12.6 + '@eslint/object-schema': 2.1.6 debug: 4.3.4(supports-color@8.1.1) - espree: 7.3.1 - globals: 12.4.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - js-yaml: 3.13.1 - lodash: 4.17.21 - minimatch: 3.0.8 - strip-json-comments: 3.1.1 + minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@eslint/eslintrc@0.4.3: - resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} - engines: {node: ^10.12.0 || >=12.0.0} + /@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: - ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) - espree: 7.3.1 - globals: 13.24.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - js-yaml: 3.13.1 - minimatch: 3.0.8 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true + '@types/json-schema': 7.0.15 /@eslint/eslintrc@1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} @@ -7475,13 +7293,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 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 @@ -7490,12 +7308,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: @@ -8950,6 +8782,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'} @@ -8973,17 +8816,6 @@ packages: transitivePeerDependencies: - supports-color - /@humanwhocodes/config-array@0.5.0: - resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@8.1.1) - minimatch: 3.0.8 - transitivePeerDependencies: - - supports-color - dev: true - /@humanwhocodes/config-array@0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} @@ -9013,6 +8845,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'} @@ -10279,74 +10119,9 @@ packages: engines: {node: '>=14.0.0'} dev: true - /@rushstack/eslint-config@3.7.1(eslint@7.11.0)(typescript@5.8.2): - resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '>=4.7.0' - dependencies: - '@rushstack/eslint-patch': 1.10.4 - '@rushstack/eslint-plugin': 0.15.2(eslint@7.11.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-packlets': 0.9.2(eslint@7.11.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-security': 0.8.2(eslint@7.11.0)(typescript@5.8.2) - '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.11.0)(typescript@5.8.2) - '@typescript-eslint/parser': 6.19.1(eslint@7.11.0)(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) - eslint: 7.11.0 - eslint-plugin-promise: 6.1.1(eslint@7.11.0) - eslint-plugin-react: 7.33.2(eslint@7.11.0) - eslint-plugin-tsdoc: 0.3.0 - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@rushstack/eslint-config@3.7.1(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '>=4.7.0' - dependencies: - '@rushstack/eslint-patch': 1.10.4 - '@rushstack/eslint-plugin': 0.15.2(eslint@7.30.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-packlets': 0.9.2(eslint@7.30.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-security': 0.8.2(eslint@7.30.0)(typescript@5.8.2) - '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.30.0)(typescript@5.8.2) - '@typescript-eslint/parser': 6.19.1(eslint@7.30.0)(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) - eslint: 7.30.0 - eslint-plugin-promise: 6.1.1(eslint@7.30.0) - eslint-plugin-react: 7.33.2(eslint@7.30.0) - eslint-plugin-tsdoc: 0.3.0 - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@rushstack/eslint-config@3.7.1(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '>=4.7.0' - dependencies: - '@rushstack/eslint-patch': 1.10.4 - '@rushstack/eslint-plugin': 0.15.2(eslint@7.7.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-packlets': 0.9.2(eslint@7.7.0)(typescript@5.8.2) - '@rushstack/eslint-plugin-security': 0.8.2(eslint@7.7.0)(typescript@5.8.2) - '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.7.0)(typescript@5.8.2) - '@typescript-eslint/parser': 6.19.1(eslint@7.7.0)(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) - eslint: 7.7.0 - eslint-plugin-promise: 6.1.1(eslint@7.7.0) - eslint-plugin-react: 7.33.2(eslint@7.7.0) - eslint-plugin-tsdoc: 0.3.0 - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true + /@rtsao/scc@1.1.0: + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + dev: false /@rushstack/eslint-config@3.7.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} @@ -10450,53 +10225,14 @@ packages: - typescript dev: false - /@rushstack/eslint-plugin-packlets@0.9.2(eslint@7.11.0)(typescript@5.8.2): + /@rushstack/eslint-plugin-packlets@0.9.2(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) - eslint: 7.11.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@rushstack/eslint-plugin-packlets@0.9.2(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) - eslint: 7.30.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@rushstack/eslint-plugin-packlets@0.9.2(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) - eslint: 7.7.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@rushstack/eslint-plugin-packlets@0.9.2(eslint@8.57.0)(typescript@5.8.2): - resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) - eslint: 8.57.0 + '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) + eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript @@ -10528,45 +10264,6 @@ packages: - typescript dev: false - /@rushstack/eslint-plugin-security@0.8.2(eslint@7.11.0)(typescript@5.8.2): - resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) - eslint: 7.11.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@rushstack/eslint-plugin-security@0.8.2(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) - eslint: 7.30.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@rushstack/eslint-plugin-security@0.8.2(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) - eslint: 7.7.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@rushstack/eslint-plugin-security@0.8.2(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} peerDependencies: @@ -10580,45 +10277,6 @@ packages: - typescript dev: true - /@rushstack/eslint-plugin@0.15.2(eslint@7.11.0)(typescript@5.8.2): - resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) - eslint: 7.11.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@rushstack/eslint-plugin@0.15.2(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) - eslint: 7.30.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@rushstack/eslint-plugin@0.15.2(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) - eslint: 7.7.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@rushstack/eslint-plugin@0.15.2(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} peerDependencies: @@ -10946,7 +10604,7 @@ packages: dependencies: '@serverless-stack/aws-lambda-ric': 2.0.13 '@trpc/server': 9.27.4 - acorn: 8.11.3 + acorn: 8.14.0 acorn-walk: 8.3.2 async-retry: 1.3.3 aws-cdk: 2.50.0 @@ -10957,7 +10615,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 @@ -12082,7 +11740,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 @@ -12996,6 +12654,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==} @@ -13486,93 +13151,6 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.11.0)(typescript@5.8.2): - resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.1(eslint@7.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) - '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 7.11.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.3.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.1(eslint@7.30.0)(typescript@5.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) - '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 7.30.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.3.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.1(eslint@7.7.0)(typescript@5.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) - '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 7.7.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.3.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13584,7 +13162,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) @@ -13610,7 +13188,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) @@ -13634,7 +13212,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) @@ -13650,68 +13228,29 @@ packages: - 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} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) - '@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) - eslint: 7.11.0 - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.19.1(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) - '@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) - eslint: 7.30.0 - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.19.1(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} - engines: {node: ^16.0.0 || >=18.0.0} + /@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: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@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: - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) - '@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) - eslint: 7.7.0 + '@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: true + dev: false /@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} @@ -13768,33 +13307,69 @@ packages: typescript: 5.8.2 transitivePeerDependencies: - supports-color + dev: false - /@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@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: - '@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) - ajv: 6.12.6 + '@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.4(supports-color@8.1.1) eslint: 8.57.0 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - semver: 7.6.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - - typescript - dev: true - /@typescript-eslint/scope-manager@6.19.1(typescript@5.8.2): - resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.19.1(typescript@5.8.2) - '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) + /@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.3.4(supports-color@8.1.1) + eslint: 9.25.1 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@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.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 + lodash.merge: 4.6.2 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/scope-manager@6.19.1(typescript@5.8.2): + resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.19.1(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) transitivePeerDependencies: - typescript @@ -13816,66 +13391,16 @@ packages: '@typescript-eslint/visitor-keys': 8.26.1(typescript@5.8.2) transitivePeerDependencies: - typescript + dev: false - /@typescript-eslint/type-utils@6.19.1(eslint@7.11.0)(typescript@5.8.2): - resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 7.11.0 - ts-api-utils: 1.3.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/type-utils@6.19.1(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 7.30.0 - ts-api-utils: 1.3.0(typescript@5.8.2) - typescript: 5.8.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/type-utils@6.19.1(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + /@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/typescript-estree': 6.19.1(typescript@5.8.2) - '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) - eslint: 7.7.0 - ts-api-utils: 1.3.0(typescript@5.8.2) - 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: - - supports-color - dev: true + - typescript /@typescript-eslint/type-utils@6.19.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} @@ -13931,6 +13456,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.3.4(supports-color@8.1.1) + 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} @@ -13955,6 +13497,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==} @@ -14013,63 +13564,25 @@ packages: typescript: 5.8.2 transitivePeerDependencies: - supports-color + dev: false - /@typescript-eslint/utils@6.19.1(eslint@7.11.0)(typescript@5.8.2): - resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@7.11.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) - '@typescript-eslint/types': 6.19.1(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - eslint: 7.11.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@6.19.1(eslint@7.30.0)(typescript@5.8.2): - resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@7.30.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) - '@typescript-eslint/types': 6.19.1(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - eslint: 7.30.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/utils@6.19.1(eslint@7.7.0)(typescript@5.8.2): - resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} - engines: {node: ^16.0.0 || >=18.0.0} + /@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: - eslint: ^7.0.0 || ^8.0.0 + typescript: '>=4.8.4 <5.9.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@7.7.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) - '@typescript-eslint/types': 6.19.1(typescript@5.8.2) - '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) - eslint: 7.7.0 - semver: 7.5.4 + '@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 + 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 - - typescript - dev: true /@typescript-eslint/utils@6.19.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} @@ -14121,6 +13634,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==} @@ -14149,6 +13696,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.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -14452,7 +14009,7 @@ packages: /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.11.3 + acorn: 8.14.0 acorn-walk: 8.3.2 /acorn-jsx@5.3.2(acorn@7.4.1): @@ -14463,12 +14020,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-jsx@5.3.2(acorn@8.11.3): + /acorn-jsx@5.3.2(acorn@8.14.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.11.3 + acorn: 8.14.0 /acorn-walk@7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} @@ -14673,6 +14230,7 @@ packages: /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} + dev: false /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -14789,6 +14347,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: @@ -14831,6 +14394,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'} @@ -14849,6 +14419,17 @@ packages: get-intrinsic: 1.2.4 is-string: 1.0.7 + /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 + /array-union@1.0.2: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} @@ -14869,6 +14450,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'} @@ -14887,6 +14493,16 @@ packages: es-abstract: 1.23.2 es-shim-unscopables: 1.0.2 + /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 + dev: false + /array.prototype.map@1.0.7: resolution: {integrity: sha512-XpcFfLoBEAhezrrNw1V+yLXkE7M6uR7xJEsxbG6c/V9v043qurwVJB9r9UTnoSioFDoz1i1VOydpWGmJpfVZbg==} engines: {node: '>= 0.4'} @@ -14918,6 +14534,17 @@ packages: es-errors: 1.3.0 es-shim-unscopables: 1.0.2 + /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.9 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: false + /arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} @@ -14931,6 +14558,18 @@ packages: 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'} @@ -14973,16 +14612,6 @@ packages: tslib: 2.3.1 dev: true - /astral-regex@1.0.0: - resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} - engines: {node: '>=4'} - dev: true - - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true - /async-each@1.0.6: resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} requiresBuild: true @@ -15833,6 +15462,13 @@ 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 + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -15843,6 +15479,22 @@ 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.0 + get-intrinsic: 1.2.4 + 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 + /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} dev: true @@ -16348,8 +16000,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 @@ -16652,6 +16304,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: @@ -16905,6 +16565,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'} @@ -16913,6 +16581,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'} @@ -16921,6 +16597,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'} @@ -16955,6 +16639,18 @@ packages: ms: 2.1.2 supports-color: 8.1.1 + /debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: false + /debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -17414,6 +17110,14 @@ packages: tslib: 2.3.1 dev: true + /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 + /duplexer2@0.1.4: resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} dependencies: @@ -17471,10 +17175,6 @@ packages: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} - /emoji-regex@7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - dev: true - /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -17654,6 +17354,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==} @@ -17663,6 +17419,10 @@ packages: dependencies: get-intrinsic: 1.2.4 + /es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -17700,6 +17460,28 @@ packages: iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 + /es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + 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-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.3.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 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + dev: false + /es-module-lexer@1.4.1: resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} @@ -17709,11 +17491,26 @@ packages: dependencies: es-errors: 1.3.0 + /es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + /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 @@ -17722,6 +17519,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'} @@ -17730,6 +17534,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'} @@ -18032,12 +17844,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: '*' @@ -18049,6 +17861,19 @@ packages: eslint: 8.57.0 dev: false + /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: '*' + peerDependenciesMeta: + eslint: + optional: true + dependencies: + debug: 3.2.7 + eslint: 9.25.1 + dev: false + /eslint-plugin-deprecation@2.0.0(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==} peerDependencies: @@ -18072,73 +17897,111 @@ 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-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-promise@6.1.1(eslint@7.11.0): - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - eslint: 7.11.0 - dev: true - - /eslint-plugin-promise@6.1.1(eslint@7.30.0): - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - eslint: 7.30.0 - dev: true - - /eslint-plugin-promise@6.1.1(eslint@7.7.0): - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /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: - eslint: 7.7.0 - dev: true + '@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 /eslint-plugin-promise@6.1.1(eslint@8.57.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} @@ -18148,66 +18011,35 @@ packages: dependencies: eslint: 8.57.0 - /eslint-plugin-react-hooks@4.3.0(eslint@8.57.0): - resolution: {integrity: sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==} - engines: {node: '>=10'} + /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: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 dependencies: - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.25.1) + 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'} + /eslint-plugin-react-hooks@5.2.0(eslint@8.57.0): + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.3 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 - eslint: 7.11.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true + eslint: 8.57.0 + dev: false - /eslint-plugin-react@7.33.2(eslint@7.30.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} + /eslint-plugin-react-hooks@5.2.0(eslint@9.25.1): + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.3 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 - eslint: 7.30.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.8 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true + eslint: 9.25.1 + dev: false - /eslint-plugin-react@7.33.2(eslint@7.7.0): + /eslint-plugin-react@7.33.2(eslint@8.57.0): resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} engines: {node: '>=4'} peerDependencies: @@ -18218,7 +18050,7 @@ packages: array.prototype.tosorted: 1.1.3 doctrine: 2.1.0 es-iterator-helpers: 1.0.18 - eslint: 7.7.0 + eslint: 8.57.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 @@ -18230,31 +18062,33 @@ packages: resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.10 - dev: true - /eslint-plugin-react@7.33.2(eslint@8.57.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + /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.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.3 + 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.0.18 - eslint: 8.57.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.8 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.2.0 + 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==} @@ -18290,12 +18124,12 @@ packages: esrecurse: 4.3.0 estraverse: 5.3.0 - /eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} + /eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - eslint-visitor-keys: 1.3.0 - dev: true + esrecurse: 4.3.0 + estraverse: 5.3.0 /eslint-utils@3.0.0(eslint@8.57.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} @@ -18307,11 +18141,6 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - dev: true - /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -18325,146 +18154,6 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - /eslint@7.11.0: - resolution: {integrity: sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==} - engines: {node: ^10.12.0 || >=12.0.0} - 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) - 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 - esutils: 2.0.3 - file-entry-cache: 5.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 - globals: 12.4.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - js-yaml: 3.13.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash: 4.17.21 - minimatch: 3.0.8 - natural-compare: 1.4.0 - optionator: 0.9.3 - progress: 2.0.3 - regexpp: 3.2.0 - semver: 7.5.4 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - table: 5.4.6 - text-table: 0.2.0 - v8-compile-cache: 2.4.0 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint@7.30.0: - resolution: {integrity: sha512-VLqz80i3as3NdloY44BQSJpFw534L9Oh+6zJOUaViV4JPd+DaHwutqP7tcpkW3YiXbK6s05RZl7yl7cQn+lijg==} - engines: {node: ^10.12.0 || >=12.0.0} - hasBin: true - dependencies: - '@babel/code-frame': 7.12.11 - '@eslint/eslintrc': 0.4.3 - '@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) - doctrine: 3.0.0 - enquirer: 2.4.1 - escape-string-regexp: 4.0.0 - eslint-scope: 5.1.1 - eslint-utils: 2.1.0 - eslint-visitor-keys: 2.1.0 - espree: 7.3.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 - globals: 13.24.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - js-yaml: 3.13.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.0.8 - natural-compare: 1.4.0 - optionator: 0.9.3 - progress: 2.0.3 - regexpp: 3.2.0 - semver: 7.5.4 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - table: 6.8.1 - text-table: 0.2.0 - v8-compile-cache: 2.4.0 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint@7.7.0: - resolution: {integrity: sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==} - engines: {node: ^10.12.0 || >=12.0.0} - 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) - 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 - esutils: 2.0.3 - file-entry-cache: 5.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 5.1.2 - globals: 12.4.0 - ignore: 4.0.6 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - js-yaml: 3.13.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash: 4.17.21 - minimatch: 3.0.8 - natural-compare: 1.4.0 - optionator: 0.9.3 - progress: 2.0.3 - regexpp: 3.2.0 - semver: 7.5.4 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - table: 5.4.6 - text-table: 0.2.0 - v8-compile-cache: 2.4.0 - transitivePeerDependencies: - - supports-color - dev: true - /eslint@8.23.1: resolution: {integrity: sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -18607,30 +18296,68 @@ 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: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + '@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.3.4(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 - dev: true + espree: 10.3.0 + esquery: 1.5.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@7.3.1: - resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} - engines: {node: ^10.12.0 || >=12.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: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - eslint-visitor-keys: 1.3.0 - dev: true + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 /esprima@4.0.1: @@ -18644,6 +18371,13 @@ packages: dependencies: estraverse: 5.3.0 + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: false + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -18720,7 +18454,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 @@ -18997,19 +18731,18 @@ packages: escape-string-regexp: 1.0.5 dev: false - /file-entry-cache@5.0.1: - resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} - engines: {node: '>=4'} - dependencies: - flat-cache: 2.0.1 - dev: true - /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} 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'} @@ -19139,15 +18872,6 @@ packages: resolve-dir: 1.0.1 dev: false - /flat-cache@2.0.1: - resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} - engines: {node: '>=4'} - dependencies: - flatted: 2.0.2 - rimraf: 2.6.3 - write: 1.0.3 - dev: true - /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -19156,6 +18880,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 @@ -19165,10 +18896,6 @@ packages: resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} dev: false - /flatted@2.0.2: - resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} - dev: true - /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -19197,6 +18924,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'} @@ -19205,7 +18938,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 @@ -19424,6 +19157,17 @@ packages: es-abstract: 1.23.2 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 @@ -19493,6 +19237,21 @@ packages: has-symbols: 1.0.3 hasown: 2.0.2 + /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 + /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -19502,6 +19261,13 @@ packages: engines: {node: '>=8'} 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.0.0 + /get-stream@4.1.0: resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} engines: {node: '>=6'} @@ -19527,6 +19293,14 @@ packages: es-errors: 1.3.0 get-intrinsic: 1.2.4 + /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==} engines: {node: '>=0.10.0'} @@ -19673,13 +19447,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - /globals@12.4.0: - resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.8.1 - dev: true - /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -19689,7 +19456,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==} @@ -19697,6 +19463,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'} @@ -19727,6 +19500,10 @@ packages: dependencies: get-intrinsic: 1.2.4 + /gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} @@ -19819,10 +19596,20 @@ 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'} + /has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + /has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} @@ -19864,11 +19651,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'} @@ -20442,6 +20224,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'} @@ -20516,6 +20306,14 @@ packages: call-bind: 1.0.7 get-intrinsic: 1.2.4 + /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==} @@ -20530,6 +20328,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'} @@ -20551,6 +20355,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==} @@ -20574,6 +20385,13 @@ 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 + dev: false + /is-data-descriptor@1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} engines: {node: '>= 0.4'} @@ -20586,12 +20404,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 @@ -20649,7 +20482,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==} @@ -20658,11 +20497,6 @@ packages: number-is-nan: 1.0.1 dev: true - /is-fullwidth-code-point@2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - dev: true - /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -20744,6 +20578,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'} @@ -20801,6 +20642,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'} @@ -20811,6 +20661,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'} @@ -20826,6 +20682,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'} @@ -20839,12 +20702,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==} @@ -20861,12 +20738,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==} @@ -21002,6 +20885,18 @@ packages: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 + /iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + dependencies: + 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 + dev: false + /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -21781,8 +21676,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 @@ -21796,7 +21691,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.14.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -21922,10 +21817,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==} @@ -22269,10 +22164,6 @@ packages: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} dev: false - /lodash.truncate@4.4.2: - resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - dev: true - /lodash.union@4.6.0: resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} dev: true @@ -22449,6 +22340,10 @@ packages: react: 17.0.2 dev: true + /math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: @@ -23247,6 +23142,10 @@ packages: /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + /object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -23266,6 +23165,17 @@ packages: has-symbols: 1.0.3 object-keys: 1.1.1 + /object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + 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 + has-symbols: 1.1.0 + object-keys: 1.1.1 + /object.entries@1.1.8: resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} engines: {node: '>= 0.4'} @@ -23274,6 +23184,16 @@ packages: define-properties: 1.2.1 es-object-atoms: 1.0.0 + /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: false + /object.fromentries@2.0.7: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} @@ -23282,6 +23202,16 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.2 + /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 + dev: false + /object.getownpropertydescriptors@2.1.7: resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} engines: {node: '>= 0.8'} @@ -23292,6 +23222,15 @@ 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: @@ -23312,6 +23251,15 @@ packages: define-properties: 1.2.1 es-object-atoms: 1.0.0 + /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==} dev: true @@ -23429,6 +23377,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'} @@ -23607,6 +23563,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'} @@ -23627,6 +23589,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: @@ -25078,16 +25044,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: @@ -25138,6 +25117,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'} @@ -25155,11 +25145,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'} @@ -25476,6 +25461,16 @@ packages: 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 @@ -25486,6 +25481,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'} @@ -25494,6 +25496,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: @@ -26045,6 +26055,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'} @@ -26117,6 +26135,32 @@ packages: rechoir: 0.6.2 dev: true + /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.4 + + /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.4 + + /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.4 + side-channel-map: 1.0.1 + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -26126,6 +26170,16 @@ packages: get-intrinsic: 1.2.4 object-inspect: 1.13.1 + /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.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -26162,24 +26216,6 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - /slice-ansi@2.1.0: - resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} - engines: {node: '>=6'} - dependencies: - ansi-styles: 3.2.1 - astral-regex: 1.0.0 - is-fullwidth-code-point: 2.0.0 - dev: true - - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -26343,6 +26379,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==} @@ -26520,15 +26563,6 @@ packages: strip-ansi: 3.0.1 dev: true - /string-width@3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - dev: true - /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -26559,6 +26593,25 @@ packages: set-function-name: 2.0.2 side-channel: 1.0.6 + /string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + 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.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.1.0 + dev: false + /string.prototype.padend@3.1.5: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} engines: {node: '>= 0.4'} @@ -26578,6 +26631,25 @@ packages: 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'} @@ -26594,6 +26666,15 @@ 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: @@ -26601,6 +26682,14 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.2 + /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==} dependencies: @@ -26622,6 +26711,7 @@ packages: engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 + dev: false /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -26797,27 +26887,6 @@ packages: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} dev: true - /table@5.4.6: - resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} - engines: {node: '>=6.0.0'} - dependencies: - ajv: 6.12.6 - lodash: 4.17.21 - slice-ansi: 2.1.0 - string-width: 3.1.0 - dev: true - - /table@6.8.1: - resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} - engines: {node: '>=10.0.0'} - dependencies: - ajv: 8.13.0 - lodash.truncate: 4.4.2 - slice-ansi: 4.0.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /tabster@6.1.0: resolution: {integrity: sha512-wTPy2d6WVmU/YjT0ERY9jc+et1P/B8FoSQ4qhr1xi7liwTezRbRV6yA1pKx8kdPWmLdIOBA4fn07x9c0x/wnow==} dependencies: @@ -27481,6 +27550,14 @@ 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'} @@ -27491,6 +27568,16 @@ packages: 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'} @@ -27502,6 +27589,18 @@ packages: 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'} @@ -27513,6 +27612,17 @@ packages: 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: @@ -27572,6 +27682,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 @@ -28489,22 +28608,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==} @@ -28537,6 +28684,18 @@ packages: gopd: 1.0.1 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: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -28651,13 +28810,6 @@ packages: write-file-atomic: 3.0.3 dev: false - /write@1.0.3: - resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} - engines: {node: '>=4'} - dependencies: - mkdirp: 0.5.6 - dev: true - /ws@6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} dependencies: diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 36c19f333d7..a9630514daa 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": "13c465e1adea1d0d99a3d876c393df88da7371e1", - "preferredVersionsHash": "54149ea3f01558a859c96dee2052b797d4defe68" + "pnpmShrinkwrapHash": "780ccecc02dda88d79504bd1fc1f49972586c9dc", + "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } diff --git a/eslint/eslint-config/package.json b/eslint/eslint-config/package.json index 177ee4aff56..93f675c93bb 100644 --- a/eslint/eslint-config/package.json +++ b/eslint/eslint-config/package.json @@ -23,24 +23,23 @@ "typescript" ], "peerDependencies": { - "eslint": "^8.57.0", + "eslint": "^9.25.1", "typescript": ">=4.7.0" }, "dependencies": { - "@rushstack/eslint-patch": "workspace:*", "@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-patch/package.json b/eslint/eslint-patch/package.json index 7f0c5e9769f..079784f7a15 100644 --- a/eslint/eslint-patch/package.json +++ b/eslint/eslint-patch/package.json @@ -32,7 +32,7 @@ "devDependencies": { "@rushstack/heft": "0.73.2", "@types/eslint": "8.56.10", - "@typescript-eslint/types": "~8.26.1", + "@typescript-eslint/types": "~8.31.0", "decoupled-local-node-rig": "workspace:*", "eslint": "~8.57.0", "typescript": "~5.8.2" 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/rigs/decoupled-local-node-rig/package.json b/rigs/decoupled-local-node-rig/package.json index e007a8c0c05..f9e417cdb26 100644 --- a/rigs/decoupled-local-node-rig/package.json +++ b/rigs/decoupled-local-node-rig/package.json @@ -16,12 +16,12 @@ "@rushstack/heft": "0.73.2", "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", - "@typescript-eslint/parser": "~8.26.1", + "@typescript-eslint/parser": "~8.31.0", "eslint-plugin-deprecation": "2.0.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/heft-node-rig/package.json b/rigs/heft-node-rig/package.json index 694a5af5fce..1b72411918f 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/local-node-rig/package.json b/rigs/local-node-rig/package.json index 2fc418e7070..b2c70317c19 100644 --- a/rigs/local-node-rig/package.json +++ b/rigs/local-node-rig/package.json @@ -15,7 +15,7 @@ "@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" } From 4ee992ed9156787bce8167e95c220171f28c46bd Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 25 Apr 2025 16:41:53 -0700 Subject: [PATCH 04/60] remove unused rules package --- rigs/decoupled-local-node-rig/package.json | 1 - .../profiles/default/includes/eslint/mixins/react.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rigs/decoupled-local-node-rig/package.json b/rigs/decoupled-local-node-rig/package.json index f9e417cdb26..7030d861d6a 100644 --- a/rigs/decoupled-local-node-rig/package.json +++ b/rigs/decoupled-local-node-rig/package.json @@ -17,7 +17,6 @@ "@types/heft-jest": "1.0.1", "@types/node": "20.17.19", "@typescript-eslint/parser": "~8.31.0", - "eslint-plugin-deprecation": "2.0.0", "eslint-plugin-header": "~3.1.1", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsdoc": "50.6.11", 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: [ { From 76916ded59b689fc0115349f0f0472d011832acf Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 25 Apr 2025 16:42:09 -0700 Subject: [PATCH 05/60] Update lockfile --- .../build-tests-subspace/repo-state.json | 2 +- .../config/subspaces/default/pnpm-lock.yaml | 35 ++++--------------- .../config/subspaces/default/repo-state.json | 2 +- 3 files changed, 9 insertions(+), 30 deletions(-) diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 464ff5e4d84..fd8000407d2 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -2,5 +2,5 @@ { "pnpmShrinkwrapHash": "eb0bf6f02bf63e06f19cf680358e3e493f9f944f", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "2268750c50bd2773e9b6402474cb7139e2afad27" + "packageJsonInjectedDependenciesHash": "9a0ab8753780ebed510ed2c4c595ec34a69f1dc3" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index bae2dd61ef3..10a3bb3bff0 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -3562,9 +3562,6 @@ importers: 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) @@ -13372,6 +13369,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==} @@ -13480,6 +13478,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==} @@ -13527,6 +13526,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==} @@ -13601,6 +13601,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==} @@ -13677,6 +13678,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==} @@ -17874,21 +17876,6 @@ packages: eslint: 9.25.1 dev: false - /eslint-plugin-deprecation@2.0.0(eslint@8.57.0)(typescript@5.8.2): - resolution: {integrity: sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: ^4.2.4 || ^5.0.0 - 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 - dev: false - /eslint-plugin-header@3.1.1(eslint@8.57.0): resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} peerDependencies: @@ -22601,6 +22588,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==} @@ -27276,6 +27264,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==} @@ -27475,16 +27464,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==} diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index a9630514daa..8f87ed295c8 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": "780ccecc02dda88d79504bd1fc1f49972586c9dc", + "pnpmShrinkwrapHash": "86e98dd34dfe294b42c1304b20de8780262dbc7a", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } From b30b9555d8bb5de8d198604d9e6adb1750212be3 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 08:28:27 -0700 Subject: [PATCH 06/60] Fix eslint configs for eslint 9 --- eslint/eslint-config/index.js | 8 - .../eslint-config/mixins/friendly-locals.js | 120 +- eslint/eslint-config/mixins/packlets.js | 27 +- eslint/eslint-config/mixins/react.js | 95 +- eslint/eslint-config/mixins/tsdoc.js | 26 +- eslint/eslint-config/patch-eslint6.js | 8 - .../patch/custom-config-package-names.js | 4 - .../patch/eslint-bulk-suppressions.js | 4 - .../patch/modern-module-resolution.js | 4 - eslint/eslint-config/profile/_common.js | 1155 ++++++++--------- eslint/eslint-config/profile/_macros.js | 4 +- .../profile/node-trusted-tool.js | 15 +- eslint/eslint-config/profile/node.js | 6 +- eslint/eslint-config/profile/web-app.js | 6 +- eslint/eslint-config/react.js | 8 - eslint/local-eslint-config/.gitignore | 7 +- eslint/local-eslint-config/config/heft.json | 38 +- .../config/rush-project.json | 5 +- .../mixins/friendly-locals.js | 9 + eslint/local-eslint-config/mixins/packlets.js | 9 + eslint/local-eslint-config/mixins/react.js | 57 + eslint/local-eslint-config/mixins/tsdoc.js | 43 + eslint/local-eslint-config/package.json | 16 +- eslint/local-eslint-config/profile/_common.js | 158 +++ .../profile/node-trusted-tool.js | 20 + eslint/local-eslint-config/profile/node.js | 13 + eslint/local-eslint-config/profile/web-app.js | 30 + .../includes/eslint/mixins/friendly-locals.js | 7 +- .../includes/eslint/mixins/packlets.js | 7 +- .../default/includes/eslint/mixins/react.js | 7 +- .../default/includes/eslint/mixins/tsdoc.js | 7 +- .../patch/custom-config-package-names.js | 4 - .../eslint/patch/eslint-bulk-suppressions.js | 4 - .../eslint/patch/modern-module-resolution.js | 4 - .../eslint/profile/node-trusted-tool.js | 7 +- .../default/includes/eslint/profile/node.js | 7 +- .../includes/eslint/mixins/friendly-locals.js | 7 +- .../app/includes/eslint/mixins/packlets.js | 7 +- .../app/includes/eslint/mixins/react.js | 7 +- .../app/includes/eslint/mixins/tsdoc.js | 7 +- .../patch/custom-config-package-names.js | 4 - .../eslint/patch/modern-module-resolution.js | 4 - .../app/includes/eslint/profile/web-app.js | 7 +- .../includes/eslint/mixins/friendly-locals.js | 7 +- .../includes/eslint/mixins/packlets.js | 7 +- .../library/includes/eslint/mixins/react.js | 7 +- .../library/includes/eslint/mixins/tsdoc.js | 7 +- .../patch/custom-config-package-names.js | 4 - .../eslint/patch/modern-module-resolution.js | 4 - .../includes/eslint/profile/web-app.js | 7 +- 50 files changed, 1160 insertions(+), 875 deletions(-) delete mode 100644 eslint/eslint-config/index.js delete mode 100644 eslint/eslint-config/patch-eslint6.js delete mode 100644 eslint/eslint-config/patch/custom-config-package-names.js delete mode 100644 eslint/eslint-config/patch/eslint-bulk-suppressions.js delete mode 100644 eslint/eslint-config/patch/modern-module-resolution.js delete mode 100644 eslint/eslint-config/react.js create mode 100644 eslint/local-eslint-config/mixins/friendly-locals.js create mode 100644 eslint/local-eslint-config/mixins/packlets.js create mode 100644 eslint/local-eslint-config/mixins/react.js create mode 100644 eslint/local-eslint-config/mixins/tsdoc.js create mode 100644 eslint/local-eslint-config/profile/_common.js create mode 100644 eslint/local-eslint-config/profile/node-trusted-tool.js create mode 100644 eslint/local-eslint-config/profile/node.js create mode 100644 eslint/local-eslint-config/profile/web-app.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js diff --git a/eslint/eslint-config/index.js b/eslint/eslint-config/index.js deleted file mode 100644 index b8eedd9c41f..00000000000 --- a/eslint/eslint-config/index.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -throw new Error( - 'The index.js entry point has been removed. Please update your ESLint configuration to import one of the' + - ' profile paths such as "@rushstack/eslint-config/profile/web-app" or "@rushstack/eslint-config/profile/node.' + - '\n\nSee the documentation for details: https://www.npmjs.com/package/@rushstack/eslint-config' -); diff --git a/eslint/eslint-config/mixins/friendly-locals.js b/eslint/eslint-config/mixins/friendly-locals.js index 35b1dcd686f..6999a840f34 100644 --- a/eslint/eslint-config/mixins/friendly-locals.js +++ b/eslint/eslint-config/mixins/friendly-locals.js @@ -20,66 +20,72 @@ // 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: Your .eslintrc.js "extends" field must load mixins AFTER the profile. -module.exports = { - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - '@rushstack/typedef-var': 'off', // <--- disabled by the mixin +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile - '@typescript-eslint/typedef': [ - 'warn', - { - arrayDestructuring: false, - arrowParameter: false, - memberVariableDeclaration: true, - objectDestructuring: false, - parameter: true, - propertyDeclaration: true, +const { defineConfig } = require('eslint/config'); +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); - variableDeclaration: true, // <--- reenabled by the mixin - - variableDeclarationIgnoreFunction: true - } - ] - } +module.exports = defineConfig([ + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + '@typescript-eslint': typescriptEslintPlugin }, - // Note that the above block also applies to *.test.ts, so we need to - // reapply those overrides. - { - files: [ - // Test files - '*.test.ts', - '*.test.tsx', - '*.spec.ts', - '*.spec.tsx', + 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 - // Facebook convention - '**/__mocks__/*.ts', - '**/__mocks__/*.tsx', - '**/__tests__/*.ts', - '**/__tests__/*.tsx', + 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' - ], - 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 - } - ] - } + // 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/mixins/packlets.js b/eslint/eslint-config/mixins/packlets.js index 9c6b791e546..8adcd30600d 100644 --- a/eslint/eslint-config/mixins/packlets.js +++ b/eslint/eslint-config/mixins/packlets.js @@ -4,18 +4,19 @@ // 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 -module.exports = { - plugins: ['@rushstack/eslint-plugin-packlets'], +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile - overrides: [ - { - // Declare an override that applies to TypeScript files only - files: ['*.ts', '*.tsx'], +const { defineConfig } = require('eslint/config'); +const rushstackPackletsEslintPlugin = require('@rushstack/eslint-plugin-packlets'); - rules: { - '@rushstack/packlets/mechanics': 'warn', - '@rushstack/packlets/circular-deps': 'warn' - } - } - ] -}; +module.exports = defineConfig({ + files: ['**/*.ts', '**/*.tsx'], + plugins: { + '@rushstack/packlets': rushstackPackletsEslintPlugin + }, + rules: { + '@rushstack/packlets/mechanics': 'warn', + '@rushstack/packlets/circular-deps': 'warn' + } +}); diff --git a/eslint/eslint-config/mixins/react.js b/eslint/eslint-config/mixins/react.js index 00e06aa0074..6efb085a7b5 100644 --- a/eslint/eslint-config/mixins/react.js +++ b/eslint/eslint-config/mixins/react.js @@ -3,10 +3,17 @@ // This mixin applies some additional checks for projects using the React library. For more information, // please see the README.md for "@rushstack/eslint-config". -module.exports = { - // Plugin documentation: https://www.npmjs.com/package/eslint-plugin-react - plugins: ['eslint-plugin-react'], +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile +const { defineConfig } = require('eslint/config'); +const reactEslintPlugin = require('eslint-plugin-react'); + +module.exports = defineConfig({ + files: ['**/*.ts', '**/*.tsx'], + plugins: { + react: reactEslintPlugin + }, settings: { react: { // The default value is "detect". Automatic detection works by loading the entire React library @@ -15,63 +22,55 @@ module.exports = { version: 'detect' } }, + rules: { + // RATIONALE: When React components are added to an array, they generally need a "key". + 'react/jsx-key': 'warn', - overrides: [ - { - // Declare an override that applies to TypeScript files only - files: ['*.ts', '*.tsx'], - - 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 practice that significantly impacts performance. - 'react/jsx-no-bind': 'warn', + // RATIONALE: Catches a common coding mistake. + 'react/jsx-no-comment-textnodes': 'warn', - // RATIONALE: Catches a common coding mistake. - 'react/jsx-no-comment-textnodes': 'warn', + // RATIONALE: Security risk. + 'react/jsx-no-target-blank': '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-react': 'warn', + // RATIONALE: Fixes the no-unused-vars rule to make it compatible with React + 'react/jsx-uses-vars': '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-children-prop': 'warn', + // RATIONALE: Catches a common coding mistake. + 'react/no-danger-with-children': '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: 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 a common coding mistake. - 'react/no-direct-mutation-state': 'warn', + // RATIONALE: Catches some common coding mistakes. + 'react/no-unescaped-entities': '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: Avoids a potential performance problem. - 'react/no-find-dom-node': 'warn', + // RATIONALE: Deprecated API. + 'react/no-is-mounted': 'warn', - // RATIONALE: Deprecated API. - 'react/no-is-mounted': 'warn', + // RATIONALE: Deprecated API. + 'react/no-render-return-value': 'warn', - // RATIONALE: Deprecated API. - 'react/no-render-return-value': 'warn', + // RATIONALE: Deprecated API. + 'react/no-string-refs': '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' - } - } - ] -}; + // RATIONALE: Improves syntax for some cases that are not already handled by Prettier. + 'react/self-closing-comp': 'warn' + } +}); diff --git a/eslint/eslint-config/mixins/tsdoc.js b/eslint/eslint-config/mixins/tsdoc.js index 5e07fc79e28..5955760f892 100644 --- a/eslint/eslint-config/mixins/tsdoc.js +++ b/eslint/eslint-config/mixins/tsdoc.js @@ -3,18 +3,18 @@ // 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. -module.exports = { - // The plugin documentation is here: https://www.npmjs.com/package/eslint-plugin-tsdoc - plugins: ['eslint-plugin-tsdoc'], +// +// IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile - overrides: [ - { - // Declare an override that applies to TypeScript files only - files: ['*.ts', '*.tsx'], +const { defineConfig } = require('eslint/config'); +const tsdocEslintPlugin = require('eslint-plugin-tsdoc'); - rules: { - 'tsdoc/syntax': 'warn' - } - } - ] -}; +module.exports = defineConfig({ + files: ['**/*.ts', '**/*.tsx'], + plugins: { + tsdoc: tsdocEslintPlugin + }, + rules: { + 'tsdoc/syntax': 'warn' + } +}); diff --git a/eslint/eslint-config/patch-eslint6.js b/eslint/eslint-config/patch-eslint6.js deleted file mode 100644 index 336494cb3b9..00000000000 --- a/eslint/eslint-config/patch-eslint6.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -throw new Error( - 'The patch-eslint6.js script has been rewritten to support both ESLint 6.x and 7.x.' + - ' Please update your ESLint configuration to use this path instead:\n\n' + - ' require("@rushstack/eslint-config/patch/modern-module-resolution");' -); diff --git a/eslint/eslint-config/patch/custom-config-package-names.js b/eslint/eslint-config/patch/custom-config-package-names.js deleted file mode 100644 index 20341195020..00000000000 --- a/eslint/eslint-config/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('@rushstack/eslint-patch/custom-config-package-names'); diff --git a/eslint/eslint-config/patch/eslint-bulk-suppressions.js b/eslint/eslint-config/patch/eslint-bulk-suppressions.js deleted file mode 100644 index 12c37b253da..00000000000 --- a/eslint/eslint-config/patch/eslint-bulk-suppressions.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('@rushstack/eslint-patch/eslint-bulk-suppressions'); diff --git a/eslint/eslint-config/patch/modern-module-resolution.js b/eslint/eslint-config/patch/modern-module-resolution.js deleted file mode 100644 index d4ba8827123..00000000000 --- a/eslint/eslint-config/patch/modern-module-resolution.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('@rushstack/eslint-patch/modern-module-resolution'); diff --git a/eslint/eslint-config/profile/_common.js b/eslint/eslint-config/profile/_common.js index 4f64259436c..f72cd197142 100644 --- a/eslint/eslint-config/profile/_common.js +++ b/eslint/eslint-config/profile/_common.js @@ -1,9 +1,34 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const macros = require('./_macros'); +// 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 namingConventionRuleOptions = [ +const { defineConfig, 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'], @@ -158,642 +183,590 @@ const namingConventionRuleOptions = [ } ]; -// 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 - -function buildRules(profile) { - return { - // After an .eslintrc.js file is loaded, ESLint will normally continue visiting all parent folders - // to look for other .eslintrc.js files, and also consult a personal file ~/.eslintrc.js. If any files - // are found, their options will be merged. This is difficult for humans to understand, and it will cause - // nondeterministic behavior if files are loaded from outside the Git working folder. - // - // Setting root=true causes ESLint to stop looking for other config files after the first .eslintrc.js - // is loaded. - root: true, - - // Disable the parser by default - parser: '', - - plugins: [ - // Plugin documentation: https://www.npmjs.com/package/@rushstack/eslint-plugin - '@rushstack/eslint-plugin', - // Plugin documentation: https://www.npmjs.com/package/@rushstack/eslint-plugin-security - '@rushstack/eslint-plugin-security', - // Plugin documentation: https://www.npmjs.com/package/@typescript-eslint/eslint-plugin - '@typescript-eslint/eslint-plugin', - // Plugin documentation: https://www.npmjs.com/package/eslint-plugin-promise - 'eslint-plugin-promise' - ], +const commonConfig = defineConfig([ + // 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']), - // 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. - ignorePatterns: ['*.d.ts'], - - overrides: [ - { - // Declare an override that applies to TypeScript files only - files: ['*.ts', '*.tsx'], - parser: '@typescript-eslint/parser', - 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' - }, - - rules: { - // ==================================================================== - // CUSTOM RULES - // ==================================================================== - - // The @rushstack rules are documented in the package README: - // https://www.npmjs.com/package/@rushstack/eslint-plugin - - // 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 - // ==================================================================== - - // This is disabled for tools because, for example, it is a common and safe practice for a tool - // to read a RegExp from a config file and use it to filter files paths. - '@rushstack/security/no-unsafe-regexp': profile === 'node-trusted-tool' ? 'off' : 'warn', - - // ==================================================================== - // GENERAL 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', - ...macros.expandNamingConventionSelectors(namingConventionRuleOptions) - ], - - // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json - '@typescript-eslint/no-array-constructor': 'warn', + { + 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', + + // 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 - // - // 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', - - // 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', + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-use-before-define': [ + 'error', + { + // Base ESLint options - // 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. + // 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: // - // 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; + // 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: // - // Second, relying on implicit types also discourages design discussions and documentation. - // Consider this example: + // class MyComponent { + // public render(): React.ReactNode { + // return ( + // click me + // ); + // } // - // // Where's the documentation for "correlation" and "inventory"? - // // Where would you even write the TSDoc comments? - // function g() { - // return { correlation: 123, inventory: 'xyz' }; - // } + // // The assignment here avoids the need for "this._onClick.bind(this)" + // private _onClick = (event: React.MouseEvent): void => { + // console.log("Clicked! " + this.props.title); + // }; + // } // - // 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." + // This coding style has limitations and should be used sparingly. For example, "_onClick" + // will not participate correctly in "virtual"/"override" inheritance. // - // 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 - } - ], - - // 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', + // NOTE: This option affects both "memberVariableDeclaration" and "variableDeclaration" options. + variableDeclarationIgnoreFunction: true + } + ], - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-extra-boolean-cast': 'warn', + // ==================================================================== + // RECOMMENDED RULES + // ==================================================================== - 'no-extra-label': 'warn', + // RATIONALE: This rule warns if setters are defined without getters, which is probably a mistake. + 'accessor-pairs': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-fallthrough': '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: [ + '^', + // "|", + // "&", + '<<', + '>>', + '>>>', + '^=', + // "|=", + //"&=", + '<<=', + '>>=', + '>>>=', + '~' + ] + } + ], - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-func-assign': 'warn', + // RATIONALE: Deprecated language feature. + 'no-caller': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-implied-eval': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-compare-neg-zero': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-invalid-regexp': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-cond-assign': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-label-var': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-constant-condition': 'warn', - // RATIONALE: Eliminates redundant code. - 'no-lone-blocks': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-control-regex': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-misleading-character-class': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-debugger': 'warn', - // RATIONALE: Catches a common coding mistake. - 'no-multi-str': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-delete-var': '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: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-duplicate-case': 'error', - // RATIONALE: Obsolete language feature that is deprecated. - 'no-new-func': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-empty': 'warn', - // RATIONALE: Obsolete language feature that is deprecated. - 'no-new-object': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-empty-character-class': 'error', - // RATIONALE: Obsolete notation. - 'no-new-wrappers': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-empty-pattern': 'warn', - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-octal': 'error', + // RATIONALE: Eval is a security concern and a performance concern. + 'no-eval': 'warn', - // 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-ex-assign': 'error', - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-regex-spaces': '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', - // RATIONALE: Catches a common coding mistake. - 'no-return-assign': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-extra-boolean-cast': 'warn', - // RATIONALE: Security risk. - 'no-script-url': 'warn', + 'no-extra-label': 'warn', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-self-assign': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-fallthrough': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-self-compare': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-func-assign': 'warn', - // 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 a common coding mistake. + 'no-implied-eval': 'error', - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-shadow-restricted-names': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-invalid-regexp': 'error', - // RATIONALE: Obsolete language feature that is deprecated. - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-sparse-arrays': 'error', + // RATIONALE: Catches a common coding mistake. + 'no-label-var': '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: Eliminates redundant code. + 'no-lone-blocks': 'warn', - // RATIONALE: Catches a common coding mistake. - 'no-unmodified-loop-condition': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-misleading-character-class': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-unsafe-finally': 'error', + // RATIONALE: Catches a common coding mistake. + 'no-multi-str': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-unused-expressions': 'warn', + // 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', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-unused-labels': 'warn', + // RATIONALE: Obsolete language feature that is deprecated. + 'no-new-func': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-useless-catch': 'warn', + // RATIONALE: Obsolete language feature that is deprecated. + 'no-new-object': 'error', - // RATIONALE: Avoids a potential performance problem. - 'no-useless-concat': 'warn', + // RATIONALE: Obsolete notation. + 'no-new-wrappers': '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: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-octal': 'error', - // RATIONALE: Generally not needed in modern code. - 'no-void': 'error', + // RATIONALE: Catches code that is likely to be incorrect + 'no-octal-escape': 'error', - // RATIONALE: Obsolete language feature that is deprecated. - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-with': 'error', + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-regex-spaces': '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. + 'no-return-assign': 'error', - // RATIONALE: Catches a common coding mistake where "resolve" and "reject" are confused. - 'promise/param-names': 'error', + // RATIONALE: Security risk. + 'no-script-url': 'warn', - // 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 + 'no-self-assign': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'require-yield': 'warn', + // RATIONALE: Catches a common coding mistake. + 'no-self-compare': 'error', - // "Use strict" is redundant when using the TypeScript compiler. - strict: ['error', 'never'], + // 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 - 'use-isnan': 'error' + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-shadow-restricted-names': '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": [ - // ], - } - }, - { - // 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' - ], - 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', - '@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 - } - ] - } - } - ] - }; -} + // 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' + } + } +]); -exports.buildRules = buildRules; -exports.namingConventionRuleOptions = namingConventionRuleOptions; +module.exports = { commonNamingConventionSelectors, commonConfig }; diff --git a/eslint/eslint-config/profile/_macros.js b/eslint/eslint-config/profile/_macros.js index 87c8487b314..4d95857abc1 100644 --- a/eslint/eslint-config/profile/_macros.js +++ b/eslint/eslint-config/profile/_macros.js @@ -99,4 +99,6 @@ function expandNamingConventionSelectors(inputBlocks) { return secondPassBlocks; } -exports.expandNamingConventionSelectors = expandNamingConventionSelectors; +module.exports = { + expandNamingConventionSelectors: expandNamingConventionSelectors +}; diff --git a/eslint/eslint-config/profile/node-trusted-tool.js b/eslint/eslint-config/profile/node-trusted-tool.js index f185f532b70..0e912db0cb4 100644 --- a/eslint/eslint-config/profile/node-trusted-tool.js +++ b/eslint/eslint-config/profile/node-trusted-tool.js @@ -12,7 +12,16 @@ // 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 { buildRules } = require('./_common'); +const { defineConfig } = require('eslint/config'); +const { commonConfig } = require('./_common'); -const rules = buildRules('node-trusted-tool'); -module.exports = rules; +module.exports = defineConfig([ + ...commonConfig, + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + // This is disabled for trusted tools because the tool is known to be safe. + '@rushstack/security/no-unsafe-regex': 'off' + } + } +]); diff --git a/eslint/eslint-config/profile/node.js b/eslint/eslint-config/profile/node.js index df3b0dc79fa..f0348ae2194 100644 --- a/eslint/eslint-config/profile/node.js +++ b/eslint/eslint-config/profile/node.js @@ -5,7 +5,7 @@ // 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 { buildRules } = require('./_common'); +const { defineConfig } = require('eslint/config'); +const { commonConfig } = require('./_common'); -const rules = buildRules('node'); -module.exports = rules; +module.exports = defineConfig([...commonConfig]); diff --git a/eslint/eslint-config/profile/web-app.js b/eslint/eslint-config/profile/web-app.js index 916b888ec6e..cb4d39d17c5 100644 --- a/eslint/eslint-config/profile/web-app.js +++ b/eslint/eslint-config/profile/web-app.js @@ -7,7 +7,7 @@ // Also use this profile if you are creating a library that can be consumed by both Node.js // and web applications. -const { buildRules } = require('./_common'); +const { defineConfig } = require('eslint/config'); +const { commonConfig } = require('./_common'); -const rules = buildRules('web-app'); -module.exports = rules; +module.exports = defineConfig([...commonConfig]); diff --git a/eslint/eslint-config/react.js b/eslint/eslint-config/react.js deleted file mode 100644 index 14516d2ff32..00000000000 --- a/eslint/eslint-config/react.js +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -throw new Error( - 'The react.js entry point has moved. Please update your ESLint configuration to reference' + - ' "@rushstack/eslint-config/mixins/react" instead.' + - '\n\nSee the documentation for details: https://www.npmjs.com/package/@rushstack/eslint-config' -); diff --git a/eslint/local-eslint-config/.gitignore b/eslint/local-eslint-config/.gitignore index 654694f5ee1..031e775b1d5 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 +# TODO: Remove comment when decoupled-local-node-rig is updated to ESLint 9 +# /mixins +# /patch +# /profile \ 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..01319952eac 100644 --- a/eslint/local-eslint-config/config/heft.json +++ b/eslint/local-eslint-config/config/heft.json @@ -3,25 +3,25 @@ "phasesByName": { "build": { - "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": ["**"] - } - ] - } - } - } - } + // TODO: Remove comment when decoupled-local-node-rig is updated to ESLint 9 + // "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": ["**"] + // } + // ] + // } + // } + // } + // } } } } diff --git a/eslint/local-eslint-config/config/rush-project.json b/eslint/local-eslint-config/config/rush-project.json index 1965f21aa81..bc61a6bc271 100644 --- a/eslint/local-eslint-config/config/rush-project.json +++ b/eslint/local-eslint-config/config/rush-project.json @@ -3,8 +3,9 @@ "operationSettings": [ { - "operationName": "_phase:build", - "outputFolderNames": ["mixins", "patch", "profile"] + "operationName": "_phase:build" + // TODO: Remove comment when decoupled-local-node-rig is updated to ESLint 9 + // "outputFolderNames": ["mixins", "patch", "profile"] } ] } diff --git a/eslint/local-eslint-config/mixins/friendly-locals.js b/eslint/local-eslint-config/mixins/friendly-locals.js new file mode 100644 index 00000000000..cf74f64bb4d --- /dev/null +++ b/eslint/local-eslint-config/mixins/friendly-locals.js @@ -0,0 +1,9 @@ +// 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 { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('@rushstack/eslint-config/mixins/friendly-locals'); + +module.exports = defineConfig([...friendlyLocalsMixin]); diff --git a/eslint/local-eslint-config/mixins/packlets.js b/eslint/local-eslint-config/mixins/packlets.js new file mode 100644 index 00000000000..f1279ee283a --- /dev/null +++ b/eslint/local-eslint-config/mixins/packlets.js @@ -0,0 +1,9 @@ +// 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 { defineConfig } = require('eslint/config'); +const packletsMixin = require('@rushstack/eslint-config/mixins/packlets'); + +module.exports = defineConfig([...packletsMixin]); diff --git a/eslint/local-eslint-config/mixins/react.js b/eslint/local-eslint-config/mixins/react.js new file mode 100644 index 00000000000..7c16bc953f3 --- /dev/null +++ b/eslint/local-eslint-config/mixins/react.js @@ -0,0 +1,57 @@ +// 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/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 { defineConfig } = require('eslint/config'); +const reactHooksEslintPlugin = require('eslint-plugin-react-hooks'); +const reactMixin = require('@rushstack/eslint-config/mixins/react'); + +module.exports = defineConfig([ + ...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/mixins/tsdoc.js b/eslint/local-eslint-config/mixins/tsdoc.js new file mode 100644 index 00000000000..cf100018e0a --- /dev/null +++ b/eslint/local-eslint-config/mixins/tsdoc.js @@ -0,0 +1,43 @@ +// 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 { defineConfig } = require('eslint/config'); +const jsdocEslintPlugin = require('eslint-plugin-jsdoc'); +const tsdocMixin = require('@rushstack/eslint-config/mixins/tsdoc'); + +module.exports = defineConfig([ + ...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/eslint/local-eslint-config/package.json b/eslint/local-eslint-config/package.json index 1a720f6fbed..a163b5f5590 100644 --- a/eslint/local-eslint-config/package.json +++ b/eslint/local-eslint-config/package.json @@ -8,7 +8,7 @@ "_phase:build": "heft build --clean" }, "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 +16,13 @@ "dependencies": { "@rushstack/eslint-config": "workspace:*", "@rushstack/eslint-patch": "workspace:*", - "@typescript-eslint/parser": "~8.26.1", - "eslint-plugin-deprecation": "2.0.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" + "@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-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/eslint/local-eslint-config/profile/_common.js b/eslint/local-eslint-config/profile/_common.js new file mode 100644 index 00000000000..583f3919ed6 --- /dev/null +++ b/eslint/local-eslint-config/profile/_common.js @@ -0,0 +1,158 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const { expandNamingConventionSelectors } = require('@rushstack/eslint-config/profile/_macros'); +const { commonNamingConventionSelectors } = require('@rushstack/eslint-config/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: defineConfig([ + { + 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 }], + + // 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/profile/node-trusted-tool.js b/eslint/local-eslint-config/profile/node-trusted-tool.js new file mode 100644 index 00000000000..08882f3ba78 --- /dev/null +++ b/eslint/local-eslint-config/profile/node-trusted-tool.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. + +// 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/profiles/node" instead. + +const { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('@rushstack/eslint-config/profile/node-trusted-tool'); + +const { localCommonConfig } = require('./_common'); + +module.exports = defineConfig([...nodeTrustedToolProfile, ...localCommonConfig]); diff --git a/eslint/local-eslint-config/profile/node.js b/eslint/local-eslint-config/profile/node.js new file mode 100644 index 00000000000..9610335cae9 --- /dev/null +++ b/eslint/local-eslint-config/profile/node.js @@ -0,0 +1,13 @@ +// 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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('@rushstack/eslint-config/profile/node'); + +const { localCommonConfig } = require('./_common'); + +module.exports = defineConfig([...nodeProfile, ...localCommonConfig]); diff --git a/eslint/local-eslint-config/profile/web-app.js b/eslint/local-eslint-config/profile/web-app.js new file mode 100644 index 00000000000..025f2737bdb --- /dev/null +++ b/eslint/local-eslint-config/profile/web-app.js @@ -0,0 +1,30 @@ +// 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 { defineConfig } = require('eslint/config'); +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); +const webAppProfile = require('@rushstack/eslint-config/profile/web-app'); + +const { localCommonConfig } = require('./_common'); + +module.exports = defineConfig([ + ...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/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js index 8ce8a5a50f1..e565795a703 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js @@ -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/friendly-locals'] -}; +const { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('local-eslint-config/mixins/friendly-locals'); + +module.exports = defineConfig([...friendlyLocalsMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js index 34121152062..d676698a76b 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js @@ -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/packlets'] -}; +const { defineConfig } = require('eslint/config'); +const packletsMixin = require('local-eslint-config/mixins/packlets'); + +module.exports = defineConfig([...packletsMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js index 32d2625068b..30034b95344 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js @@ -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/react'] -}; +const { defineConfig } = require('eslint/config'); +const reactMixin = require('local-eslint-config/mixins/react'); + +module.exports = defineConfig([...reactMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js index 48a832eef64..b073d1857b0 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js @@ -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'] -}; +const { defineConfig } = require('eslint/config'); +const tsdocMixin = require('local-eslint-config/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 831b7c639fb..00000000000 --- a/rigs/local-node-rig/profiles/default/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/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js deleted file mode 100644 index 6cc6d7238fb..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.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/eslint-bulk-suppressions'); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index a262ef96af5..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); 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/profile/node-trusted-tool.js index ffced0b4377..977c6f8276f 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js @@ -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/profile/node-trusted-tool'] -}; +const { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('local-eslint-config/profile/node-trusted-tool'); + +module.exports = defineConfig([...nodeTrustedToolProfile]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js b/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js index 58350ac8a62..2d67bc4eead 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js @@ -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/profile/node'] -}; +const { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/profile/node'); + +module.exports = defineConfig([...nodeProfile]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js index 8ce8a5a50f1..5b6f9c2bf46 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js @@ -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/friendly-locals'] -}; +const { defineConfig } = require('eslint/config'); +const friendlyLocalsConfig = require('local-eslint-config/mixins/friendly-locals'); + +module.exports = defineConfig([...friendlyLocalsConfig]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js index 34121152062..5115cc2be98 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js @@ -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/packlets'] -}; +const { defineConfig } = require('eslint/config'); +const packletsConfig = require('local-eslint-config/mixins/packlets'); + +module.exports = defineConfig([...packletsConfig]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js index 32d2625068b..7bc2eeb2fa4 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js @@ -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/react'] -}; +const { defineConfig } = require('eslint/config'); +const reactConfig = require('local-eslint-config/mixins/react'); + +module.exports = defineConfig([...reactConfig]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js index 48a832eef64..02e61e7b327 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js @@ -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'] -}; +const { defineConfig } = require('eslint/config'); +const tsdocConfig = require('local-eslint-config/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocConfig]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js b/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 831b7c639fb..00000000000 --- a/rigs/local-web-rig/profiles/app/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/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js b/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index a262ef96af5..00000000000 --- a/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js index 6753941a378..20e483483ad 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js @@ -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/profile/web-app'] -}; +const { defineConfig } = require('eslint/config'); +const webAppConfig = require('local-eslint-config/profile/web-app'); + +module.exports = defineConfig([...webAppConfig]); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js index 8ce8a5a50f1..5b6f9c2bf46 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js @@ -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/friendly-locals'] -}; +const { defineConfig } = require('eslint/config'); +const friendlyLocalsConfig = require('local-eslint-config/mixins/friendly-locals'); + +module.exports = defineConfig([...friendlyLocalsConfig]); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js index 34121152062..5115cc2be98 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js @@ -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/packlets'] -}; +const { defineConfig } = require('eslint/config'); +const packletsConfig = require('local-eslint-config/mixins/packlets'); + +module.exports = defineConfig([...packletsConfig]); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js index 32d2625068b..7bc2eeb2fa4 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js @@ -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/react'] -}; +const { defineConfig } = require('eslint/config'); +const reactConfig = require('local-eslint-config/mixins/react'); + +module.exports = defineConfig([...reactConfig]); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js index 48a832eef64..02e61e7b327 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js @@ -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'] -}; +const { defineConfig } = require('eslint/config'); +const tsdocConfig = require('local-eslint-config/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocConfig]); 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/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js b/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index a262ef96af5..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js index 6753941a378..20e483483ad 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js @@ -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/profile/web-app'] -}; +const { defineConfig } = require('eslint/config'); +const webAppConfig = require('local-eslint-config/profile/web-app'); + +module.exports = defineConfig([...webAppConfig]); From 7d2428edb996845f355a41b9e8f05d8f237b2b50 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 08:30:20 -0700 Subject: [PATCH 07/60] Update eslint plugin for eslint 9 --- heft-plugins/heft-lint-plugin/package.json | 2 + heft-plugins/heft-lint-plugin/src/Eslint.ts | 57 ++++++++++-------- .../heft-lint-plugin/src/LintPlugin.ts | 60 ++++++++++++------- .../heft-lint-plugin/src/LinterBase.ts | 23 ++++--- .../heft-lint-plugin/src/SarifFormatter.ts | 14 ++--- .../src/test/SarifFormatter.test.ts | 38 ++++++------ 6 files changed, 112 insertions(+), 82 deletions(-) diff --git a/heft-plugins/heft-lint-plugin/package.json b/heft-plugins/heft-lint-plugin/package.json index 829a0b5fa8c..332e2665571 100644 --- a/heft-plugins/heft-lint-plugin/package.json +++ b/heft-plugins/heft-lint-plugin/package.json @@ -25,9 +25,11 @@ "@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/semver": "7.5.0", "decoupled-local-node-rig": "workspace:*", + "eslint-9": "npm:eslint@~9.25.1", "eslint": "~8.57.0", "tslint": "~5.20.1", "typescript": "~5.8.2" diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index 7c0f53c966f..d5d3401e937 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -1,14 +1,15 @@ // 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 { createHash, type Hash } from 'crypto'; import * as semver from 'semver'; import type * as TTypescript from 'typescript'; -import type * as TEslint from 'eslint'; +import type * as TEslint from 'eslint-9'; import { performance } from 'perf_hooks'; import { FileError, FileSystem } from '@rushstack/node-core-library'; import { LinterBase, type ILinterBaseOptions } from './LinterBase'; +import type { IExtendedSourceFile } from './internalTypings/TypeScriptInternals'; interface IEslintOptions extends ILinterBaseOptions { eslintPackage: typeof TEslint; @@ -94,8 +95,10 @@ export class Eslint extends LinterBase { // the provided program, producing garbage fix output. To avoid this, only provide the existing program // if we're not fixing. overrideConfig = { - parserOptions: { - programs: [tsProgram] + languageOptions: { + parserOptions: { + programs: [tsProgram] + } } }; } @@ -124,15 +127,14 @@ export class Eslint extends LinterBase { }); } - public printVersionHeader(): void { + public override printVersionHeader(): void { const linterVersion: string = this._eslintPackage.Linter.version; this._terminal.writeLine(`Using ESLint version ${linterVersion}`); const majorVersion: number = semver.major(linterVersion); - if (majorVersion < 7) { - throw new Error('Heft requires ESLint 7 or newer. Your ESLint version is too old'); - } - if (majorVersion > 8) { + if (majorVersion < 9) { + throw new Error('Heft requires ESLint 9 or newer. Your ESLint version is too old'); + } else if (majorVersion > 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,22 +143,29 @@ export class Eslint extends LinterBase { } } - protected async getCacheVersionAsync(): Promise { + protected override async getCacheVersionAsync(): Promise { + return `${this._eslintPackage.Linter.version}_${process.version}`; + } + + protected override async getSourceFileHashAsync(sourceFile: IExtendedSourceFile): Promise { + // 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. This is not a perfect + // solution, but it is good enough for our purposes. // eslint-disable-next-line @typescript-eslint/no-explicit-any - const eslintBaseConfiguration: any = await this._linter.calculateConfigForFile( - this._linterConfigFilePath - ); - const eslintConfigHash: crypto.Hash = crypto - .createHash('sha1') - .update(JSON.stringify(eslintBaseConfiguration)); - const eslintConfigVersion: string = `${this._eslintPackage.Linter.version}_${eslintConfigHash.digest( - 'hex' - )}`; - - return eslintConfigVersion; + const sourceFileEslintConfiguration: any = await this._linter.calculateConfigForFile(sourceFile.fileName); + const hash: Hash = createHash('sha1'); + try { + hash.update(JSON.stringify(sourceFileEslintConfiguration)); + } catch (e) { + throw e; + } + const originalSourceFileHash: string = await super.getSourceFileHashAsync(sourceFile); + return `${hash.digest('base64')}_${originalSourceFileHash}`; } - protected async lintFileAsync(sourceFile: TTypescript.SourceFile): Promise { + protected override async lintFileAsync( + sourceFile: TTypescript.SourceFile + ): Promise { const lintResults: TEslint.ESLint.LintResult[] = await this._linter.lintText(sourceFile.text, { filePath: sourceFile.fileName }); @@ -191,7 +200,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]) => { @@ -261,7 +270,7 @@ export class Eslint extends LinterBase { } } - protected async isFileExcludedAsync(filePath: string): Promise { + protected override async isFileExcludedAsync(filePath: string): Promise { return await this._linter.isPathIgnored(filePath); } diff --git a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts index f20dbf30b81..665676cb2bd 100644 --- a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts +++ b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts @@ -25,8 +25,11 @@ import type { IExtendedProgram, IExtendedSourceFile } from './internalTypings/Ty const PLUGIN_NAME: 'lint-plugin' = 'lint-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'; +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'; interface ILintPluginOptions { alwaysFix?: boolean; @@ -92,9 +95,6 @@ export default class LintPlugin implements IHeftTaskPlugin { 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); } @@ -222,24 +222,38 @@ export default class LintPlugin implements IHeftTaskPlugin { ): 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; + const configPathCandidates: string[] = [ + `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_JS_FILENAME}`, + `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_CJS_FILENAME}`, + `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_MJS_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('", "')}"`); + } else if (foundConfigs.length === 0) { + // Check for legacy .eslintrc.js and .eslintrc.cjs files + const legacyConfigPathCandidates: string[] = [ + `${heftConfiguration.buildFolderPath}/${LEGACY_ESLINTRC_JS_FILENAME}`, + `${heftConfiguration.buildFolderPath}/${LEGACY_ESLINTRC_CJS_FILENAME}` + ]; + const foundLegacyConfigs: string[] = ( + await Promise.all( + legacyConfigPathCandidates.map(async (p: string) => (await FileSystem.existsAsync(p)) && p) + ) + ).filter((p) => p !== false); + + if (foundLegacyConfigs.length !== 0) { + throw new Error( + 'Project contains non-flat ESLint configuration files. The ensure that all ESLint configurations are ' + + 'formatted using flat-config. For more information, see: ' + + 'https://eslint.org/blog/2023/10/flat-config-rollout-plans/' + ); + } } + + return foundConfigs[0]; } } 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..e262710c132 100644 --- a/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts +++ b/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts @@ -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. -import type * as TEslint from 'eslint'; +import type * as TEslint from 'eslint-9'; import path from 'node:path'; import { Path } from '@rushstack/node-core-library'; @@ -303,12 +303,12 @@ export function formatEslintResultsAsSARIF( physicalLocation.region = region; } - if (message.source) { - physicalLocation.region ??= {}; - physicalLocation.region.snippet = { - text: message.source - }; - } + // if (message.source) { + // physicalLocation.region ??= {}; + // physicalLocation.region.snippet = { + // text: message.source + // }; + // } if (message.ruleId) { sarifResults.push(sarifRepresentation); 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..104d2228fff 100644 --- a/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts +++ b/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts @@ -2,7 +2,7 @@ // 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', () => { @@ -18,8 +18,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 5, nodeType: 'Identifier', endLine: 10, - endColumn: 6, - source: 'const x = 1;' + endColumn: 6 + // source: 'const x = 1;' } ], suppressedMessages: [], @@ -103,8 +103,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 5, nodeType: 'Identifier', endLine: 10, - endColumn: 6, - source: 'const x = 1;' + endColumn: 6 + // source: 'const x = 1;' } ], suppressedMessages: [], @@ -172,8 +172,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 10, nodeType: 'Identifier', endLine: 5, - endColumn: 11, - source: 'let x;' + endColumn: 11 + // source: 'let x;' }, { ruleId: 'no-console', @@ -183,8 +183,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 5, nodeType: 'MemberExpression', endLine: 10, - endColumn: 16, - source: 'console.log("test");' + endColumn: 16 + // source: 'console.log("test");' } ], suppressedMessages: [], @@ -309,8 +309,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 5, nodeType: 'Identifier', endLine: 10, - endColumn: 6, - source: 'const x = 1;' + endColumn: 6 + // source: 'const x = 1;' } ], suppressedMessages: [], @@ -332,8 +332,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 8, nodeType: 'BinaryExpression', endLine: 15, - endColumn: 10, - source: 'if (a == b) { }' + endColumn: 10 + // source: 'if (a == b) { }' } ], suppressedMessages: [], @@ -430,8 +430,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 1, nodeType: 'DebuggerStatement', endLine: 20, - endColumn: 9, - source: 'debugger;' + endColumn: 9 + // source: 'debugger;' } ], suppressedMessages: [ @@ -444,7 +444,7 @@ describe('formatEslintResultsAsSARIF', () => { nodeType: 'MemberExpression', endLine: 10, endColumn: 16, - source: 'console.log("test");', + // source: 'console.log("test");', suppressions: [ { kind: 'inSource', @@ -546,8 +546,8 @@ describe('formatEslintResultsAsSARIF', () => { column: 1, nodeType: 'DebuggerStatement', endLine: 20, - endColumn: 9, - source: 'debugger;' + endColumn: 9 + // source: 'debugger;' } ], suppressedMessages: [ @@ -560,7 +560,7 @@ describe('formatEslintResultsAsSARIF', () => { nodeType: 'MemberExpression', endLine: 10, endColumn: 16, - source: 'console.log("test");', + // source: 'console.log("test");', suppressions: [ { kind: 'inSource', From 510cdb3212929978ac15295ff2ce928f92d8b6b3 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 08:30:38 -0700 Subject: [PATCH 08/60] Add eslint 9 test project --- build-tests/eslint-9-test/README.md | 0 build-tests/eslint-9-test/config/rig.json | 7 + build-tests/eslint-9-test/eslint.config.js | 29 ++++ build-tests/eslint-9-test/package.json | 20 +++ build-tests/eslint-9-test/src/index.ts | 7 + build-tests/eslint-9-test/tsconfig.json | 24 +++ .../rush/nonbrowser-approved-packages.json | 6 +- .../build-tests-subspace/pnpm-lock.yaml | 12 ++ .../build-tests-subspace/repo-state.json | 4 +- .../config/subspaces/default/pnpm-lock.yaml | 144 ++++++++++-------- .../config/subspaces/default/repo-state.json | 2 +- rush.json | 6 + 12 files changed, 197 insertions(+), 64 deletions(-) create mode 100644 build-tests/eslint-9-test/README.md create mode 100644 build-tests/eslint-9-test/config/rig.json create mode 100644 build-tests/eslint-9-test/eslint.config.js create mode 100644 build-tests/eslint-9-test/package.json create mode 100644 build-tests/eslint-9-test/src/index.ts create mode 100644 build-tests/eslint-9-test/tsconfig.json 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..a6c8d26e2b0 --- /dev/null +++ b/build-tests/eslint-9-test/eslint.config.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. + +const { defineConfig } = require('eslint/config'); +const typescriptEslintParser = require('@typescript-eslint/parser'); +const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals'); + +module.exports = defineConfig([ + ...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/build-tests/eslint-9-test/src/index.ts b/build-tests/eslint-9-test/src/index.ts new file mode 100644 index 00000000000..428f8caba4f --- /dev/null +++ b/build-tests/eslint-9-test/src/index.ts @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +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/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json index 231e28659cf..bec4fb90acf 100644 --- a/common/config/rush/nonbrowser-approved-packages.json +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -522,12 +522,16 @@ "name": "eslint", "allowedCategories": [ "libraries", "tests", "vscode-extensions" ] }, + { + "name": "eslint-import-resolver-node", + "allowedCategories": [ "libraries" ] + }, { "name": "eslint-plugin-deprecation", "allowedCategories": [ "libraries" ] }, { - "name": "eslint-plugin-header", + "name": "eslint-plugin-headers", "allowedCategories": [ "libraries" ] }, { diff --git a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 18aa2c7b3f6..e1cd17a7cf8 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -2736,6 +2736,15 @@ packages: eslint: 9.25.1 dev: true + /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: true + /eslint-plugin-import@2.31.0(eslint@9.25.1): resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} @@ -6761,9 +6770,12 @@ packages: dependencies: '@rushstack/eslint-config': file:../../../eslint/eslint-config(eslint@9.25.1)(typescript@5.8.2) '@rushstack/eslint-patch': file:../../../eslint/eslint-patch + '@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-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) diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index fd8000407d2..e50119daea4 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": "eb0bf6f02bf63e06f19cf680358e3e493f9f944f", + "pnpmShrinkwrapHash": "359c19951d5d8023a9d21606077f451514c3f952", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "9a0ab8753780ebed510ed2c4c595ec34a69f1dc3" + "packageJsonInjectedDependenciesHash": "af269da7f53076b41e262e75a94fc5aeb0487949" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 10a3bb3bff0..9a5e0ca31d5 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1084,6 +1084,27 @@ importers: specifier: workspace:* version: link:../../rigs/local-node-rig + ../../../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': @@ -2361,15 +2382,21 @@ 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.31.0 version: 8.31.0(eslint@9.25.1)(typescript@5.8.2) - eslint-plugin-header: - specifier: ~3.1.1 - version: 3.1.1(eslint@9.25.1) + eslint-import-resolver-node: + specifier: 0.3.9 + version: 0.3.9 + eslint-plugin-headers: + specifier: ~1.2.1 + version: 1.2.1(eslint@9.25.1) eslint-plugin-import: specifier: 2.31.0 version: 2.31.0(eslint@9.25.1) @@ -5288,7 +5315,7 @@ packages: '@babel/traverse': 7.24.0 '@babel/types': 7.24.0 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -5336,7 +5363,7 @@ packages: '@babel/traverse': 7.24.0 '@babel/types': 7.24.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5417,7 +5444,7 @@ packages: '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.24.0 '@babel/traverse': 7.24.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.8 semver: 6.3.1 @@ -5433,7 +5460,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -5448,7 +5475,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.24.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: @@ -6799,7 +6826,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.24.0 '@babel/types': 7.24.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -7242,7 +7269,7 @@ packages: engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -7262,7 +7289,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -7279,7 +7306,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -7295,7 +7322,7 @@ packages: 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) + debug: 4.4.0 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.1 @@ -8796,7 +8823,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 minimatch: 3.0.8 transitivePeerDependencies: - supports-color @@ -8808,7 +8835,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 minimatch: 3.0.8 transitivePeerDependencies: - supports-color @@ -8819,7 +8846,7 @@ packages: deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 minimatch: 3.0.8 transitivePeerDependencies: - supports-color @@ -12145,7 +12172,7 @@ packages: typescript: '>= 3.x' webpack: '>= 4 || ^4 || ^5' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 @@ -13165,7 +13192,7 @@ packages: '@typescript-eslint/type-utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(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 graphemer: 1.4.0 ignore: 5.3.1 @@ -13263,7 +13290,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: @@ -13281,7 +13308,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: @@ -13299,7 +13326,7 @@ 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: @@ -13317,7 +13344,7 @@ packages: '@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.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 8.57.0 typescript: 5.8.2 transitivePeerDependencies: @@ -13334,12 +13361,11 @@ packages: '@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.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 9.25.1 typescript: 5.8.2 transitivePeerDependencies: - supports-color - dev: false /@typescript-eslint/rule-tester@8.31.0(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-17Dn3vpNtHqxyjOieODNKBAyxH8WNvkfZAzkHR2VA0cW/49YcmHF3YyenNI3wfF05iZJ9MWnjU2kBGz0gDavfw==} @@ -13412,7 +13438,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.8.2) typescript: 5.8.2 @@ -13429,7 +13455,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 8.26.1(typescript@4.9.5) '@typescript-eslint/utils': 8.26.1(eslint@8.57.0)(typescript@4.9.5) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 8.57.0 ts-api-utils: 2.0.1(typescript@4.9.5) typescript: 4.9.5 @@ -13446,7 +13472,7 @@ packages: dependencies: '@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) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 8.57.0 ts-api-utils: 2.0.1(typescript@5.8.2) typescript: 5.8.2 @@ -13463,7 +13489,7 @@ packages: 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.3.4(supports-color@8.1.1) + debug: 4.4.0 eslint: 9.25.1 ts-api-utils: 2.0.1(typescript@5.8.2) typescript: 5.8.2 @@ -13517,7 +13543,7 @@ packages: dependencies: '@typescript-eslint/types': 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 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -13536,7 +13562,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 @@ -13555,7 +13581,7 @@ 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.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 @@ -14073,7 +14099,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -14081,7 +14107,7 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color dev: false @@ -14698,7 +14724,7 @@ packages: resolution: {integrity: sha512-AOhBxyLVdpOad3TujtC9kL/9r3HnTkxwQ5ggOsYrvvZP1cCFvzHWJd5XxZDFuTn+IN8vkKSG5SEJrd27vCSbeA==} dependencies: archy: 1.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 fastq: 1.17.1 queue-microtask: 1.2.3 transitivePeerDependencies: @@ -16651,7 +16677,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: false /debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} @@ -16818,11 +16843,11 @@ packages: callsite: 1.0.0 camelcase: 6.3.0 cosmiconfig: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 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 @@ -16919,7 +16944,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color dev: true @@ -17884,10 +17909,11 @@ packages: eslint: 8.57.0 dev: false - /eslint-plugin-header@3.1.1(eslint@9.25.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: 9.25.1 dev: false @@ -18309,12 +18335,12 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.3.4(supports-color@8.1.1) + 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.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 8.0.0 @@ -18363,7 +18389,6 @@ packages: engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 - dev: false /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -19928,7 +19953,7 @@ packages: dependencies: '@tootallnate/once': 1.1.2 agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color dev: true @@ -19939,7 +19964,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -19948,7 +19973,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color dev: false @@ -20004,7 +20029,7 @@ packages: engines: {node: '>= 6.0.0'} dependencies: agent-base: 5.1.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color dev: true @@ -20023,7 +20048,7 @@ packages: engines: {node: '>= 14'} dependencies: agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 transitivePeerDependencies: - supports-color dev: false @@ -20377,7 +20402,6 @@ packages: engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 - dev: false /is-data-descriptor@1.0.1: resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} @@ -20839,7 +20863,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -22173,7 +22197,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 flatted: 3.3.1 rfdc: 1.3.1 streamroller: 3.1.5 @@ -22977,7 +23001,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 @@ -24470,7 +24494,7 @@ packages: engines: {node: '>=8.16.0'} dependencies: '@types/mime-types': 2.1.4 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 extract-zip: 1.7.0 https-proxy-agent: 4.0.0 mime: 2.6.0 @@ -24584,7 +24608,7 @@ packages: /rc-config-loader@4.1.3: resolution: {integrity: sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 js-yaml: 4.1.0 json5: 2.2.3 require-from-string: 2.0.2 @@ -25323,7 +25347,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 @@ -26249,7 +26273,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 socks: 2.8.1 transitivePeerDependencies: - supports-color @@ -26380,7 +26404,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -26394,7 +26418,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -26511,7 +26535,7 @@ packages: engines: {node: '>=8.0'} dependencies: date-format: 4.0.14 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.4.0 fs-extra: 8.1.0 transitivePeerDependencies: - supports-color diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 8f87ed295c8..16202ab80c4 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": "86e98dd34dfe294b42c1304b20de8780262dbc7a", + "pnpmShrinkwrapHash": "6d95b1208bdc93634302bc1abbd1c626ba4f0faa", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } diff --git a/rush.json b/rush.json index 52f23fef2c3..13c7dd2c074 100644 --- a/rush.json +++ b/rush.json @@ -596,6 +596,12 @@ "shouldPublish": false, "tags": ["api-extractor-tests"] }, + { + "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", From bfb324d58e0490b59e2d939a1c3d708f0a6c5b6c Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 15:10:19 -0700 Subject: [PATCH 09/60] Fix hashing for ESLint 9 --- .../rush/nonbrowser-approved-packages.json | 8 +++ .../build-tests-subspace/pnpm-lock.yaml | 1 + .../build-tests-subspace/repo-state.json | 4 +- .../config/subspaces/default/pnpm-lock.yaml | 10 ++++ .../config/subspaces/default/repo-state.json | 2 +- heft-plugins/heft-lint-plugin/package.json | 2 + heft-plugins/heft-lint-plugin/src/Eslint.ts | 52 +++++++++++++++---- 7 files changed, 66 insertions(+), 13 deletions(-) diff --git a/common/config/rush/nonbrowser-approved-packages.json b/common/config/rush/nonbrowser-approved-packages.json index bec4fb90acf..11b80fc7e9c 100644 --- a/common/config/rush/nonbrowser-approved-packages.json +++ b/common/config/rush/nonbrowser-approved-packages.json @@ -530,6 +530,10 @@ "name": "eslint-plugin-deprecation", "allowedCategories": [ "libraries" ] }, + { + "name": "eslint-plugin-header", + "allowedCategories": [ "libraries" ] + }, { "name": "eslint-plugin-headers", "allowedCategories": [ "libraries" ] @@ -702,6 +706,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/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index e1cd17a7cf8..a24f3956e0f 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -6843,6 +6843,7 @@ 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 transitivePeerDependencies: - '@types/node' diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index e50119daea4..8ec56c7cd7e 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": "359c19951d5d8023a9d21606077f451514c3f952", + "pnpmShrinkwrapHash": "8f249b83668ad46209927d6310cf9a012ccfa44b", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "af269da7f53076b41e262e75a94fc5aeb0487949" + "packageJsonInjectedDependenciesHash": "c15094630338f9ddb577ed2a750b7785a657411f" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 9a5e0ca31d5..5f123e59ee4 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -2558,6 +2558,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 @@ -2577,6 +2580,9 @@ importers: '@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 @@ -12830,6 +12836,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 diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 16202ab80c4..5a9c9ab6286 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": "6d95b1208bdc93634302bc1abbd1c626ba4f0faa", + "pnpmShrinkwrapHash": "7412e7d85ea6cfa3a48700a98f8243ce542618ca", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } diff --git a/heft-plugins/heft-lint-plugin/package.json b/heft-plugins/heft-lint-plugin/package.json index 332e2665571..002814b48c2 100644 --- a/heft-plugins/heft-lint-plugin/package.json +++ b/heft-plugins/heft-lint-plugin/package.json @@ -19,6 +19,7 @@ }, "dependencies": { "@rushstack/node-core-library": "workspace:*", + "json-stable-stringify-without-jsonify": "1.0.1", "semver": "~7.5.4" }, "devDependencies": { @@ -27,6 +28,7 @@ "@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", diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index d5d3401e937..09b615a5873 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -2,10 +2,11 @@ // See LICENSE in the project root for license information. import { createHash, type Hash } from 'crypto'; -import * as semver from 'semver'; +import { performance } from 'perf_hooks'; import type * as TTypescript from 'typescript'; import type * as TEslint from 'eslint-9'; -import { performance } from 'perf_hooks'; +import * as semver from 'semver'; +import stableStringify from 'json-stable-stringify-without-jsonify'; import { FileError, FileSystem } from '@rushstack/node-core-library'; import { LinterBase, type ILinterBaseOptions } from './LinterBase'; @@ -53,6 +54,27 @@ function getFormattedErrorMessage(lintMessage: TEslint.Linter.LintMessage): stri return lintMessage.ruleId ? `(${lintMessage.ruleId}) ${lintMessage.message}` : lintMessage.message; } +interface IExtendedEslintConfig extends TEslint.Linter.Config { + // https://github.com/eslint/eslint/blob/d6fa4ac031c2fe24fb778e84940393fbda3ddf77/lib/config/config.js#L264 + toJSON: () => TEslint.Linter.Config; + __originalToJSON: () => TEslint.Linter.Config; +} + +function patchedToJSON(this: IExtendedEslintConfig): TEslint.Linter.Config { + let programs: TTypescript.Program[] | undefined; + if (this.languageOptions?.parserOptions?.programs) { + programs = this.languageOptions.parserOptions.programs; + delete this.languageOptions.parserOptions.programs; + } + + const serializableConfig: TEslint.Linter.Config = this.__originalToJSON.call(this); + if (this.languageOptions?.parserOptions && programs) { + this.languageOptions.parserOptions.programs = programs; + } + + return serializableConfig; +} + export class Eslint extends LinterBase { private readonly _eslintPackage: typeof TEslint; private readonly _linter: TEslint.ESLint; @@ -148,17 +170,27 @@ export class Eslint extends LinterBase { } protected override async getSourceFileHashAsync(sourceFile: IExtendedSourceFile): Promise { + const sourceFileEslintConfiguration: IExtendedEslintConfig = await this._linter.calculateConfigForFile( + sourceFile.fileName + ); + + // 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.__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. This is not a perfect // solution, but it is good enough for our purposes. - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const sourceFileEslintConfiguration: any = await this._linter.calculateConfigForFile(sourceFile.fileName); - const hash: Hash = createHash('sha1'); - try { - hash.update(JSON.stringify(sourceFileEslintConfiguration)); - } catch (e) { - throw e; - } const originalSourceFileHash: string = await super.getSourceFileHashAsync(sourceFile); return `${hash.digest('base64')}_${originalSourceFileHash}`; } From 8533235651860a1344262745d3c7b9b49fe5108e Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 15:22:36 -0700 Subject: [PATCH 10/60] Fix typings and comments --- heft-plugins/heft-lint-plugin/src/Eslint.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index 09b615a5873..3c941fc07bd 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -56,18 +56,18 @@ function getFormattedErrorMessage(lintMessage: TEslint.Linter.LintMessage): stri interface IExtendedEslintConfig extends TEslint.Linter.Config { // https://github.com/eslint/eslint/blob/d6fa4ac031c2fe24fb778e84940393fbda3ddf77/lib/config/config.js#L264 - toJSON: () => TEslint.Linter.Config; - __originalToJSON: () => TEslint.Linter.Config; + toJSON: () => object; + __originalToJSON: () => object; } -function patchedToJSON(this: IExtendedEslintConfig): TEslint.Linter.Config { +function patchedToJSON(this: IExtendedEslintConfig): object { let programs: TTypescript.Program[] | undefined; if (this.languageOptions?.parserOptions?.programs) { programs = this.languageOptions.parserOptions.programs; delete this.languageOptions.parserOptions.programs; } - const serializableConfig: TEslint.Linter.Config = this.__originalToJSON.call(this); + const serializableConfig: object = this.__originalToJSON.call(this); if (this.languageOptions?.parserOptions && programs) { this.languageOptions.parserOptions.programs = programs; } @@ -189,10 +189,9 @@ export class Eslint extends LinterBase { 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. This is not a perfect - // solution, but it is good enough for our purposes. + // append the config hash to the original hash to avoid reducing the hash space const originalSourceFileHash: string = await super.getSourceFileHashAsync(sourceFile); - return `${hash.digest('base64')}_${originalSourceFileHash}`; + return `${originalSourceFileHash}_${hash.digest('base64')}}`; } protected override async lintFileAsync( From 5948b2977fda30267607b174989df137a971f589 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 16:56:09 -0700 Subject: [PATCH 11/60] Re-introduce the previous eslint version tests --- build-tests/eslint-7-11-test/.eslintrc.js | 27 + build-tests/eslint-7-11-test/README.md | 6 + build-tests/eslint-7-11-test/config/rig.json | 7 + build-tests/eslint-7-11-test/package.json | 21 + build-tests/eslint-7-11-test/src/index.ts | 7 + build-tests/eslint-7-11-test/tsconfig.json | 24 + build-tests/eslint-7-7-test/.eslintrc.js | 27 + build-tests/eslint-7-7-test/README.md | 6 + build-tests/eslint-7-7-test/config/rig.json | 7 + build-tests/eslint-7-7-test/package.json | 21 + build-tests/eslint-7-7-test/src/index.ts | 7 + build-tests/eslint-7-7-test/tsconfig.json | 24 + build-tests/eslint-7-test/.eslintrc.js | 27 + build-tests/eslint-7-test/README.md | 6 + build-tests/eslint-7-test/config/rig.json | 7 + build-tests/eslint-7-test/package.json | 21 + build-tests/eslint-7-test/src/index.ts | 7 + build-tests/eslint-7-test/tsconfig.json | 24 + build-tests/eslint-8-test/.eslintrc.js | 27 + build-tests/eslint-8-test/README.md | 6 + build-tests/eslint-8-test/config/rig.json | 7 + build-tests/eslint-8-test/package.json | 20 + build-tests/eslint-8-test/src/index.ts | 7 + build-tests/eslint-8-test/tsconfig.json | 24 + .../build-tests-subspace/pnpm-lock.yaml | 6 +- .../build-tests-subspace/repo-state.json | 4 +- .../subspaces/default/common-versions.json | 3 + .../config/subspaces/default/pnpm-lock.yaml | 1196 +++++++++++++++-- .../config/subspaces/default/repo-state.json | 2 +- .../flat/mixins/friendly-locals.js | 91 ++ eslint/eslint-config/flat/mixins/packlets.js | 22 + eslint/eslint-config/flat/mixins/react.js | 76 ++ eslint/eslint-config/flat/mixins/tsdoc.js | 20 + eslint/eslint-config/flat/profile/_common.js | 772 +++++++++++ eslint/eslint-config/flat/profile/_macros.js | 104 ++ .../flat/profile/node-trusted-tool.js | 27 + eslint/eslint-config/flat/profile/node.js | 11 + eslint/eslint-config/flat/profile/web-app.js | 13 + eslint/eslint-config/index.js | 8 + .../eslint-config/mixins/friendly-locals.js | 120 +- eslint/eslint-config/mixins/packlets.js | 27 +- eslint/eslint-config/mixins/react.js | 95 +- eslint/eslint-config/mixins/tsdoc.js | 26 +- eslint/eslint-config/package.json | 3 +- eslint/eslint-config/patch-eslint6.js | 8 + .../patch/custom-config-package-names.js | 4 + .../patch/eslint-bulk-suppressions.js | 4 + .../patch/modern-module-resolution.js | 4 + eslint/eslint-config/profile/_common.js | 1155 ++++++++-------- eslint/eslint-config/profile/_macros.js | 4 +- .../profile/node-trusted-tool.js | 15 +- eslint/eslint-config/profile/node.js | 6 +- eslint/eslint-config/profile/web-app.js | 6 +- eslint/eslint-config/react.js | 8 + rush.json | 27 + 55 files changed, 3368 insertions(+), 866 deletions(-) create mode 100644 build-tests/eslint-7-11-test/.eslintrc.js create mode 100644 build-tests/eslint-7-11-test/README.md create mode 100644 build-tests/eslint-7-11-test/config/rig.json create mode 100644 build-tests/eslint-7-11-test/package.json create mode 100644 build-tests/eslint-7-11-test/src/index.ts create mode 100644 build-tests/eslint-7-11-test/tsconfig.json create mode 100644 build-tests/eslint-7-7-test/.eslintrc.js create mode 100644 build-tests/eslint-7-7-test/README.md create mode 100644 build-tests/eslint-7-7-test/config/rig.json create mode 100644 build-tests/eslint-7-7-test/package.json create mode 100644 build-tests/eslint-7-7-test/src/index.ts create mode 100644 build-tests/eslint-7-7-test/tsconfig.json create mode 100644 build-tests/eslint-7-test/.eslintrc.js create mode 100644 build-tests/eslint-7-test/README.md create mode 100644 build-tests/eslint-7-test/config/rig.json create mode 100644 build-tests/eslint-7-test/package.json create mode 100644 build-tests/eslint-7-test/src/index.ts create mode 100644 build-tests/eslint-7-test/tsconfig.json create mode 100644 build-tests/eslint-8-test/.eslintrc.js create mode 100644 build-tests/eslint-8-test/README.md create mode 100644 build-tests/eslint-8-test/config/rig.json create mode 100644 build-tests/eslint-8-test/package.json create mode 100644 build-tests/eslint-8-test/src/index.ts create mode 100644 build-tests/eslint-8-test/tsconfig.json create mode 100644 eslint/eslint-config/flat/mixins/friendly-locals.js create mode 100644 eslint/eslint-config/flat/mixins/packlets.js create mode 100644 eslint/eslint-config/flat/mixins/react.js create mode 100644 eslint/eslint-config/flat/mixins/tsdoc.js create mode 100644 eslint/eslint-config/flat/profile/_common.js create mode 100644 eslint/eslint-config/flat/profile/_macros.js create mode 100644 eslint/eslint-config/flat/profile/node-trusted-tool.js create mode 100644 eslint/eslint-config/flat/profile/node.js create mode 100644 eslint/eslint-config/flat/profile/web-app.js create mode 100644 eslint/eslint-config/index.js create mode 100644 eslint/eslint-config/patch-eslint6.js create mode 100644 eslint/eslint-config/patch/custom-config-package-names.js create mode 100644 eslint/eslint-config/patch/eslint-bulk-suppressions.js create mode 100644 eslint/eslint-config/patch/modern-module-resolution.js create mode 100644 eslint/eslint-config/react.js diff --git a/build-tests/eslint-7-11-test/.eslintrc.js b/build-tests/eslint-7-11-test/.eslintrc.js new file mode 100644 index 00000000000..fd14b3536fe --- /dev/null +++ b/build-tests/eslint-7-11-test/.eslintrc.js @@ -0,0 +1,27 @@ +// 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: [ + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' + ], + parserOptions: { tsconfigRootDir: __dirname }, + + overrides: [ + /** + * Override the parser from local-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-7-test package. Overriding the parser + * ensures that the these dependencies come from the eslint-7-test package. See: + * https://github.com/microsoft/rushstack/issues/3021 + */ + { + files: ['*.ts', '*.tsx'], + parser: '@typescript-eslint/parser' + } + ] +}; diff --git a/build-tests/eslint-7-11-test/README.md b/build-tests/eslint-7-11-test/README.md new file mode 100644 index 00000000000..7e236873623 --- /dev/null +++ b/build-tests/eslint-7-11-test/README.md @@ -0,0 +1,6 @@ +# eslint-7-11-test + +This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) +package. This project builds using ESLint v7.11.0 and contains a simple index file to ensure that the build runs ESLint successfully against source code. + +Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-7-11-test/config/rig.json b/build-tests/eslint-7-11-test/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/build-tests/eslint-7-11-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-7-11-test/package.json b/build-tests/eslint-7-11-test/package.json new file mode 100644 index 00000000000..b1e1cae39cc --- /dev/null +++ b/build-tests/eslint-7-11-test/package.json @@ -0,0 +1,21 @@ +{ + "name": "eslint-7-11-test", + "description": "This project contains a build test to validate ESLint 7.11.0 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/eslint-config": "3.7.1", + "@rushstack/heft": "workspace:*", + "@types/node": "20.17.19", + "@typescript-eslint/parser": "~6.19.0", + "eslint": "7.11.0", + "local-node-rig": "workspace:*", + "typescript": "~5.8.2" + } +} diff --git a/build-tests/eslint-7-11-test/src/index.ts b/build-tests/eslint-7-11-test/src/index.ts new file mode 100644 index 00000000000..428f8caba4f --- /dev/null +++ b/build-tests/eslint-7-11-test/src/index.ts @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export class Foo { + private _bar: string = 'bar'; + public baz: string = this._bar; +} diff --git a/build-tests/eslint-7-11-test/tsconfig.json b/build-tests/eslint-7-11-test/tsconfig.json new file mode 100644 index 00000000000..8a46ac2445e --- /dev/null +++ b/build-tests/eslint-7-11-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-7-7-test/.eslintrc.js b/build-tests/eslint-7-7-test/.eslintrc.js new file mode 100644 index 00000000000..fd14b3536fe --- /dev/null +++ b/build-tests/eslint-7-7-test/.eslintrc.js @@ -0,0 +1,27 @@ +// 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: [ + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' + ], + parserOptions: { tsconfigRootDir: __dirname }, + + overrides: [ + /** + * Override the parser from local-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-7-test package. Overriding the parser + * ensures that the these dependencies come from the eslint-7-test package. See: + * https://github.com/microsoft/rushstack/issues/3021 + */ + { + files: ['*.ts', '*.tsx'], + parser: '@typescript-eslint/parser' + } + ] +}; diff --git a/build-tests/eslint-7-7-test/README.md b/build-tests/eslint-7-7-test/README.md new file mode 100644 index 00000000000..6002dff592a --- /dev/null +++ b/build-tests/eslint-7-7-test/README.md @@ -0,0 +1,6 @@ +# eslint-7-7-test + +This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) +package. This project builds using ESLint v7.7.0 and contains a simple index file to ensure that the build runs ESLint successfully against source code. + +Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-7-7-test/config/rig.json b/build-tests/eslint-7-7-test/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/build-tests/eslint-7-7-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-7-7-test/package.json b/build-tests/eslint-7-7-test/package.json new file mode 100644 index 00000000000..8161d5edf79 --- /dev/null +++ b/build-tests/eslint-7-7-test/package.json @@ -0,0 +1,21 @@ +{ + "name": "eslint-7-7-test", + "description": "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)", + "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/eslint-config": "3.7.1", + "@rushstack/heft": "workspace:*", + "@types/node": "20.17.19", + "@typescript-eslint/parser": "~6.19.0", + "eslint": "7.7.0", + "local-node-rig": "workspace:*", + "typescript": "~5.8.2" + } +} diff --git a/build-tests/eslint-7-7-test/src/index.ts b/build-tests/eslint-7-7-test/src/index.ts new file mode 100644 index 00000000000..428f8caba4f --- /dev/null +++ b/build-tests/eslint-7-7-test/src/index.ts @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export class Foo { + private _bar: string = 'bar'; + public baz: string = this._bar; +} diff --git a/build-tests/eslint-7-7-test/tsconfig.json b/build-tests/eslint-7-7-test/tsconfig.json new file mode 100644 index 00000000000..8a46ac2445e --- /dev/null +++ b/build-tests/eslint-7-7-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-7-test/.eslintrc.js b/build-tests/eslint-7-test/.eslintrc.js new file mode 100644 index 00000000000..fd14b3536fe --- /dev/null +++ b/build-tests/eslint-7-test/.eslintrc.js @@ -0,0 +1,27 @@ +// 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: [ + '@rushstack/eslint-config/profile/node-trusted-tool', + '@rushstack/eslint-config/mixins/friendly-locals' + ], + parserOptions: { tsconfigRootDir: __dirname }, + + overrides: [ + /** + * Override the parser from local-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-7-test package. Overriding the parser + * ensures that the these dependencies come from the eslint-7-test package. See: + * https://github.com/microsoft/rushstack/issues/3021 + */ + { + files: ['*.ts', '*.tsx'], + parser: '@typescript-eslint/parser' + } + ] +}; diff --git a/build-tests/eslint-7-test/README.md b/build-tests/eslint-7-test/README.md new file mode 100644 index 00000000000..f4d85f1fdb3 --- /dev/null +++ b/build-tests/eslint-7-test/README.md @@ -0,0 +1,6 @@ +# eslint-7-test + +This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) +package. This project builds using ESLint v7 and contains a simple index file to ensure that the build runs ESLint successfully against source code. + +Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-7-test/config/rig.json b/build-tests/eslint-7-test/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/build-tests/eslint-7-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-7-test/package.json b/build-tests/eslint-7-test/package.json new file mode 100644 index 00000000000..4c84f0ed5a6 --- /dev/null +++ b/build-tests/eslint-7-test/package.json @@ -0,0 +1,21 @@ +{ + "name": "eslint-7-test", + "description": "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)", + "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/eslint-config": "3.7.1", + "@rushstack/heft": "workspace:*", + "@types/node": "20.17.19", + "@typescript-eslint/parser": "~6.19.0", + "eslint": "~7.30.0", + "local-node-rig": "workspace:*", + "typescript": "~5.8.2" + } +} diff --git a/build-tests/eslint-7-test/src/index.ts b/build-tests/eslint-7-test/src/index.ts new file mode 100644 index 00000000000..428f8caba4f --- /dev/null +++ b/build-tests/eslint-7-test/src/index.ts @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export class Foo { + private _bar: string = 'bar'; + public baz: string = this._bar; +} diff --git a/build-tests/eslint-7-test/tsconfig.json b/build-tests/eslint-7-test/tsconfig.json new file mode 100644 index 00000000000..8a46ac2445e --- /dev/null +++ b/build-tests/eslint-7-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-8-test/.eslintrc.js b/build-tests/eslint-8-test/.eslintrc.js new file mode 100644 index 00000000000..f9f01a3a727 --- /dev/null +++ b/build-tests/eslint-8-test/.eslintrc.js @@ -0,0 +1,27 @@ +// 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: [ + /** + * Override the parser from @rushstack/eslint-config. Since the config is coming + * from the workspace instead of the external NPM package, the versions of ESLint + * and TypeScript that the config consumes will be resolved from the devDependencies + * of the config instead of from the eslint-8-test package. Overriding the parser + * ensures that the these dependencies come from the eslint-8-test package. See: + * https://github.com/microsoft/rushstack/issues/3021 + */ + { + files: ['*.ts', '*.tsx'], + parser: '@typescript-eslint/parser' + } + ] +}; diff --git a/build-tests/eslint-8-test/README.md b/build-tests/eslint-8-test/README.md new file mode 100644 index 00000000000..f4d85f1fdb3 --- /dev/null +++ b/build-tests/eslint-8-test/README.md @@ -0,0 +1,6 @@ +# eslint-7-test + +This project folder is one of the **build-tests** for the Rushstack [ESLint configuration](https://www.npmjs.com/package/@rushstack/eslint-config) (and by extension, the [ESLint plugin](https://www.npmjs.com/package/@rushstack/eslint-plugin)) +package. This project builds using ESLint v7 and contains a simple index file to ensure that the build runs ESLint successfully against source code. + +Please see the [ESLint Heft task documentation](https://rushstack.io/pages/heft_tasks/eslint/) for documentation and tutorials. diff --git a/build-tests/eslint-8-test/config/rig.json b/build-tests/eslint-8-test/config/rig.json new file mode 100644 index 00000000000..165ffb001f5 --- /dev/null +++ b/build-tests/eslint-8-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-8-test/package.json b/build-tests/eslint-8-test/package.json new file mode 100644 index 00000000000..fcd538e656e --- /dev/null +++ b/build-tests/eslint-8-test/package.json @@ -0,0 +1,20 @@ +{ + "name": "eslint-8-test", + "description": "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)", + "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": "~8.57.0", + "typescript": "~5.8.2" + } +} diff --git a/build-tests/eslint-8-test/src/index.ts b/build-tests/eslint-8-test/src/index.ts new file mode 100644 index 00000000000..428f8caba4f --- /dev/null +++ b/build-tests/eslint-8-test/src/index.ts @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +export class Foo { + private _bar: string = 'bar'; + public baz: string = this._bar; +} diff --git a/build-tests/eslint-8-test/tsconfig.json b/build-tests/eslint-8-test/tsconfig.json new file mode 100644 index 00000000000..8a46ac2445e --- /dev/null +++ b/build-tests/eslint-8-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/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index a24f3956e0f..4dcb53ef2f1 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -6625,9 +6625,10 @@ packages: id: file:../../../eslint/eslint-config name: '@rushstack/eslint-config' peerDependencies: - eslint: ^9.25.1 + 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@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) @@ -6649,9 +6650,10 @@ packages: id: file:../../../eslint/eslint-config name: '@rushstack/eslint-config' peerDependencies: - eslint: ^9.25.1 + 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@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) diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 8ec56c7cd7e..20f6d1df4c1 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": "8f249b83668ad46209927d6310cf9a012ccfa44b", + "pnpmShrinkwrapHash": "66723d30c5555c15856aece8309d1f7c555f8be5", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "c15094630338f9ddb577ed2a750b7785a657411f" + "packageJsonInjectedDependenciesHash": "5060374392d27d2f96c5443d429f5d350628fc98" } diff --git a/common/config/subspaces/default/common-versions.json b/common/config/subspaces/default/common-versions.json index 76d923bf7f2..9822255f852 100644 --- a/common/config/subspaces/default/common-versions.json +++ b/common/config/subspaces/default/common-versions.json @@ -79,6 +79,9 @@ "~6.19.0" // Used by build-tests/eslint-7(-*)-test / build-tests/eslint-bulk-suppressions-test-legacy ], "eslint": [ + "7.7.0", // Used by build-tests/eslint-7-7-test + "7.11.0", // Used by build-tests/eslint-7-11-test + "~7.30.0", // Used by build-tests/eslint-7-test "8.6.0", // Used by build-tests/eslint-bulk-suppressions-test-legacy "8.23.1", // Used by build-tests/eslint-bulk-suppressions-test-legacy "~8.57.0" // Used by build-tests/eslint-bulk-suppressions-test diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 5f123e59ee4..abc531ca007 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1084,6 +1084,99 @@ importers: specifier: workspace:* version: link:../../rigs/local-node-rig + ../../../build-tests/eslint-7-11-test: + devDependencies: + '@rushstack/eslint-config': + specifier: 3.7.1 + version: 3.7.1(eslint@7.11.0)(typescript@5.8.2) + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@types/node': + specifier: 20.17.19 + version: 20.17.19 + '@typescript-eslint/parser': + specifier: ~6.19.0 + version: 6.19.1(eslint@7.11.0)(typescript@5.8.2) + eslint: + specifier: 7.11.0 + version: 7.11.0 + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + typescript: + specifier: ~5.8.2 + version: 5.8.2 + + ../../../build-tests/eslint-7-7-test: + devDependencies: + '@rushstack/eslint-config': + specifier: 3.7.1 + version: 3.7.1(eslint@7.7.0)(typescript@5.8.2) + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@types/node': + specifier: 20.17.19 + version: 20.17.19 + '@typescript-eslint/parser': + specifier: ~6.19.0 + version: 6.19.1(eslint@7.7.0)(typescript@5.8.2) + eslint: + specifier: 7.7.0 + version: 7.7.0 + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + typescript: + specifier: ~5.8.2 + version: 5.8.2 + + ../../../build-tests/eslint-7-test: + devDependencies: + '@rushstack/eslint-config': + specifier: 3.7.1 + version: 3.7.1(eslint@7.30.0)(typescript@5.8.2) + '@rushstack/heft': + specifier: workspace:* + version: link:../../apps/heft + '@types/node': + specifier: 20.17.19 + version: 20.17.19 + '@typescript-eslint/parser': + specifier: ~6.19.0 + version: 6.19.1(eslint@7.30.0)(typescript@5.8.2) + eslint: + specifier: ~7.30.0 + version: 7.30.0 + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + typescript: + specifier: ~5.8.2 + version: 5.8.2 + + ../../../build-tests/eslint-8-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@8.57.0)(typescript@5.8.2) + eslint: + specifier: ~8.57.0 + version: 8.57.0 + local-node-rig: + specifier: workspace:* + version: link:../../rigs/local-node-rig + typescript: + specifier: ~5.8.2 + version: 5.8.2 + ../../../build-tests/eslint-9-test: devDependencies: '@rushstack/heft': @@ -2231,6 +2324,9 @@ importers: ../../../eslint/eslint-config: dependencies: + '@rushstack/eslint-patch': + specifier: workspace:* + version: link:../eslint-patch '@rushstack/eslint-plugin': specifier: workspace:* version: link:../eslint-plugin @@ -5297,6 +5393,12 @@ packages: - supports-color dev: false + /@babel/code-frame@7.12.11: + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} + dependencies: + '@babel/highlight': 7.23.4 + dev: true + /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} @@ -7244,6 +7346,36 @@ packages: dev: true optional: true + /@eslint-community/eslint-utils@4.4.0(eslint@7.11.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 7.11.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@7.30.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 7.30.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/eslint-utils@4.4.0(eslint@7.7.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 7.7.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7290,6 +7422,41 @@ packages: 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 + espree: 7.3.1 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.13.1 + lodash: 4.17.21 + minimatch: 3.0.8 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/eslintrc@0.4.3: + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 7.3.1 + globals: 13.24.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.13.1 + minimatch: 3.0.8 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/eslintrc@1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8846,6 +9013,18 @@ packages: transitivePeerDependencies: - supports-color + /@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 + minimatch: 3.0.8 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/config-array@0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} @@ -10153,6 +10332,75 @@ packages: 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: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '>=4.7.0' + dependencies: + '@rushstack/eslint-patch': 1.10.4 + '@rushstack/eslint-plugin': 0.15.2(eslint@7.11.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-packlets': 0.9.2(eslint@7.11.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-security': 0.8.2(eslint@7.11.0)(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.11.0)(typescript@5.8.2) + '@typescript-eslint/parser': 6.19.1(eslint@7.11.0)(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) + eslint: 7.11.0 + eslint-plugin-promise: 6.1.1(eslint@7.11.0) + eslint-plugin-react: 7.33.2(eslint@7.11.0) + eslint-plugin-tsdoc: 0.3.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@rushstack/eslint-config@3.7.1(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '>=4.7.0' + dependencies: + '@rushstack/eslint-patch': 1.10.4 + '@rushstack/eslint-plugin': 0.15.2(eslint@7.30.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-packlets': 0.9.2(eslint@7.30.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-security': 0.8.2(eslint@7.30.0)(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.30.0)(typescript@5.8.2) + '@typescript-eslint/parser': 6.19.1(eslint@7.30.0)(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) + eslint: 7.30.0 + eslint-plugin-promise: 6.1.1(eslint@7.30.0) + eslint-plugin-react: 7.33.2(eslint@7.30.0) + eslint-plugin-tsdoc: 0.3.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@rushstack/eslint-config@3.7.1(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '>=4.7.0' + dependencies: + '@rushstack/eslint-patch': 1.10.4 + '@rushstack/eslint-plugin': 0.15.2(eslint@7.7.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-packlets': 0.9.2(eslint@7.7.0)(typescript@5.8.2) + '@rushstack/eslint-plugin-security': 0.8.2(eslint@7.7.0)(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.7.0)(typescript@5.8.2) + '@typescript-eslint/parser': 6.19.1(eslint@7.7.0)(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) + eslint: 7.7.0 + eslint-plugin-promise: 6.1.1(eslint@7.7.0) + eslint-plugin-react: 7.33.2(eslint@7.7.0) + eslint-plugin-tsdoc: 0.3.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + /@rushstack/eslint-config@3.7.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-LFoVMbvHj2WbfPjJixqHztCl6yMRSY2a1V2mqfQAjb49n7B06N+FZH5c0o6VmO+96fR1l0PC0DazLeHhRf+uug==} peerDependencies: @@ -10255,6 +10503,45 @@ packages: - typescript dev: false + /@rushstack/eslint-plugin-packlets@0.9.2(eslint@7.11.0)(typescript@5.8.2): + resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) + eslint: 7.11.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin-packlets@0.9.2(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) + eslint: 7.30.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin-packlets@0.9.2(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) + eslint: 7.7.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@rushstack/eslint-plugin-packlets@0.9.2(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-rZofSLJpwyP7Xo6e4eKYkI7N4JM5PycvPuoX5IEK08PgxPDm/k5pdltH9DkIKnmWvLrxIMU+85VrB5xnjbK0RQ==} peerDependencies: @@ -10294,77 +10581,155 @@ packages: - typescript dev: false - /@rushstack/eslint-plugin-security@0.8.2(eslint@8.57.0)(typescript@5.8.2): + /@rushstack/eslint-plugin-security@0.8.2(eslint@7.11.0)(typescript@5.8.2): resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) - eslint: 8.57.0 + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) + eslint: 7.11.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@rushstack/eslint-plugin@0.15.2(eslint@8.57.0)(typescript@5.8.2): - resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} + /@rushstack/eslint-plugin-security@0.8.2(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) - eslint: 8.57.0 + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) + eslint: 7.30.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@rushstack/eslint-plugin@0.18.0(eslint@8.57.0)(typescript@4.9.5): - resolution: {integrity: sha512-8fHCCGtAPORAurYdPPsarO29wjhNzhH1dKCKsKwKdITKqWJnh1XzyxMNqBWO+eXgvxbLwIMAtgRoqcvZaRGZMg==} + /@rushstack/eslint-plugin-security@0.8.2(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 8.26.1(eslint@8.57.0)(typescript@4.9.5) - eslint: 8.57.0 + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) + eslint: 7.7.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@rushstack/eslint-plugin@0.18.0(eslint@8.57.0)(typescript@5.8.2): - resolution: {integrity: sha512-8fHCCGtAPORAurYdPPsarO29wjhNzhH1dKCKsKwKdITKqWJnh1XzyxMNqBWO+eXgvxbLwIMAtgRoqcvZaRGZMg==} + /@rushstack/eslint-plugin-security@0.8.2(eslint@8.57.0)(typescript@5.8.2): + resolution: {integrity: sha512-AkY8BXanfV+RZLaifBglBpWYbR4vJNzYEj6C2m9TLDsRhZPW0h/rUHw6XDVpORhqJYCOXxoZcIwWnKenPbzDuQ==} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@rushstack/tree-pattern': 0.3.4 - '@typescript-eslint/utils': 8.26.1(eslint@8.57.0)(typescript@5.8.2) + '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) eslint: 8.57.0 transitivePeerDependencies: - supports-color - typescript - dev: false + dev: true - /@rushstack/heft-api-extractor-plugin@0.4.3(@rushstack/heft@0.73.2)(@types/node@20.17.19): - resolution: {integrity: sha512-hYbFn7BsGidUP4FUrCRVcxtfIwk95EgGx1RE5OWVl1yft0ySI0boMzimbyIMLT8RVdXXEXgRaBzC6PXBRKFqAQ==} + /@rushstack/eslint-plugin@0.15.2(eslint@7.11.0)(typescript@5.8.2): + resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} peerDependencies: - '@rushstack/heft': '*' + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@rushstack/heft': 0.73.2(@types/node@20.17.19) - '@rushstack/node-core-library': 5.13.0(@types/node@20.17.19) - semver: 7.5.4 + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) + eslint: 7.11.0 transitivePeerDependencies: - - '@types/node' - dev: false + - supports-color + - typescript + dev: true - /@rushstack/heft-config-file@0.18.0(@types/node@20.17.19): - resolution: {integrity: sha512-46EMMCk+7HQOsDDG65+D0jP8+aps517Bw6PClIVZIYNyP+XL3cRGelI3/aXF7Svp+gHhFIy+CXAtmUoay3t8tg==} - engines: {node: '>=10.13.0'} + /@rushstack/eslint-plugin@0.15.2(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@rushstack/node-core-library': 5.13.0(@types/node@20.17.19) - '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.15.2(@types/node@20.17.19) + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) + eslint: 7.30.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin@0.15.2(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) + eslint: 7.7.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin@0.15.2(eslint@8.57.0)(typescript@5.8.2): + resolution: {integrity: sha512-oS3ENewjwEj+42jek1MQb2IETUd3On4tDgkuda2Mo7fbourygFZodhPDQYsj6aYFvwwn+FNLk4wjcghSQrCLqA==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 6.19.1(eslint@8.57.0)(typescript@5.8.2) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin@0.18.0(eslint@8.57.0)(typescript@4.9.5): + resolution: {integrity: sha512-8fHCCGtAPORAurYdPPsarO29wjhNzhH1dKCKsKwKdITKqWJnh1XzyxMNqBWO+eXgvxbLwIMAtgRoqcvZaRGZMg==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 8.26.1(eslint@8.57.0)(typescript@4.9.5) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@rushstack/eslint-plugin@0.18.0(eslint@8.57.0)(typescript@5.8.2): + resolution: {integrity: sha512-8fHCCGtAPORAurYdPPsarO29wjhNzhH1dKCKsKwKdITKqWJnh1XzyxMNqBWO+eXgvxbLwIMAtgRoqcvZaRGZMg==} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@rushstack/tree-pattern': 0.3.4 + '@typescript-eslint/utils': 8.26.1(eslint@8.57.0)(typescript@5.8.2) + eslint: 8.57.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: false + + /@rushstack/heft-api-extractor-plugin@0.4.3(@rushstack/heft@0.73.2)(@types/node@20.17.19): + resolution: {integrity: sha512-hYbFn7BsGidUP4FUrCRVcxtfIwk95EgGx1RE5OWVl1yft0ySI0boMzimbyIMLT8RVdXXEXgRaBzC6PXBRKFqAQ==} + peerDependencies: + '@rushstack/heft': '*' + dependencies: + '@rushstack/heft': 0.73.2(@types/node@20.17.19) + '@rushstack/node-core-library': 5.13.0(@types/node@20.17.19) + semver: 7.5.4 + transitivePeerDependencies: + - '@types/node' + dev: false + + /@rushstack/heft-config-file@0.18.0(@types/node@20.17.19): + resolution: {integrity: sha512-46EMMCk+7HQOsDDG65+D0jP8+aps517Bw6PClIVZIYNyP+XL3cRGelI3/aXF7Svp+gHhFIy+CXAtmUoay3t8tg==} + engines: {node: '>=10.13.0'} + dependencies: + '@rushstack/node-core-library': 5.13.0(@types/node@20.17.19) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.15.2(@types/node@20.17.19) jsonpath-plus: 10.3.0 transitivePeerDependencies: - '@types/node' @@ -13185,6 +13550,93 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.11.0)(typescript@5.8.2): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.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) + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) + debug: 4.4.0 + eslint: 7.11.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.3.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.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) + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) + debug: 4.4.0 + eslint: 7.30.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.3.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.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) + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 6.19.1(typescript@5.8.2) + debug: 4.4.0 + eslint: 7.7.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.3.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1)(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13286,6 +13738,69 @@ packages: - 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} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) + '@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.4.0 + eslint: 7.11.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.19.1(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) + '@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.4.0 + eslint: 7.30.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@6.19.1(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) + '@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.4.0 + eslint: 7.7.0 + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@6.19.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13436,6 +13951,66 @@ packages: transitivePeerDependencies: - typescript + /@typescript-eslint/type-utils@6.19.1(eslint@7.11.0)(typescript@5.8.2): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.11.0)(typescript@5.8.2) + debug: 4.4.0 + eslint: 7.11.0 + ts-api-utils: 1.3.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@6.19.1(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.30.0)(typescript@5.8.2) + debug: 4.4.0 + eslint: 7.30.0 + ts-api-utils: 1.3.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/type-utils@6.19.1(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + '@typescript-eslint/utils': 6.19.1(eslint@7.7.0)(typescript@5.8.2) + debug: 4.4.0 + eslint: 7.7.0 + ts-api-utils: 1.3.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/type-utils@6.19.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -13620,6 +14195,63 @@ packages: transitivePeerDependencies: - supports-color + /@typescript-eslint/utils@6.19.1(eslint@7.11.0)(typescript@5.8.2): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@7.11.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) + '@typescript-eslint/types': 6.19.1(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + eslint: 7.11.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.19.1(eslint@7.30.0)(typescript@5.8.2): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@7.30.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) + '@typescript-eslint/types': 6.19.1(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + eslint: 7.30.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/utils@6.19.1(eslint@7.7.0)(typescript@5.8.2): + resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@7.7.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 6.19.1(typescript@5.8.2) + '@typescript-eslint/types': 6.19.1(typescript@5.8.2) + '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.8.2) + eslint: 7.7.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/utils@6.19.1(eslint@8.57.0)(typescript@5.8.2): resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} engines: {node: ^16.0.0 || >=18.0.0} @@ -14140,20 +14772,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 @@ -14268,7 +14900,6 @@ packages: /ansi-regex@4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} - dev: false /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -14447,16 +15078,6 @@ packages: /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - /array-includes@3.1.8: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} @@ -14530,6 +15151,7 @@ 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==} @@ -14539,7 +15161,6 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.9 es-shim-unscopables: 1.0.2 - dev: false /array.prototype.map@1.0.7: resolution: {integrity: sha512-XpcFfLoBEAhezrrNw1V+yLXkE7M6uR7xJEsxbG6c/V9v043qurwVJB9r9UTnoSioFDoz1i1VOydpWGmJpfVZbg==} @@ -14547,7 +15168,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 @@ -14563,15 +15184,6 @@ 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==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - /array.prototype.tosorted@1.1.4: resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} engines: {node: '>= 0.4'} @@ -14581,7 +15193,6 @@ packages: es-abstract: 1.23.9 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: false /arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} @@ -14590,7 +15201,7 @@ 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 is-array-buffer: 3.0.4 @@ -14650,6 +15261,16 @@ packages: tslib: 2.3.1 dev: true + /astral-regex@1.0.0: + resolution: {integrity: sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==} + engines: {node: '>=4'} + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + /async-each@1.0.6: resolution: {integrity: sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==} requiresBuild: true @@ -17212,6 +17833,10 @@ packages: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} + /emoji-regex@7.0.3: + resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -17478,25 +18103,6 @@ packages: stop-iteration-iterator: 1.0.0 dev: true - /es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} - 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-set-tostringtag: 2.0.3 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - globalthis: 1.0.3 - 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 - /es-iterator-helpers@1.2.1: resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} @@ -17517,7 +18123,6 @@ packages: internal-slot: 1.1.0 iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - dev: false /es-module-lexer@1.4.1: resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} @@ -18026,6 +18631,33 @@ packages: - supports-color dev: false + /eslint-plugin-promise@6.1.1(eslint@7.11.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 7.11.0 + dev: true + + /eslint-plugin-promise@6.1.1(eslint@7.30.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 7.30.0 + dev: true + + /eslint-plugin-promise@6.1.1(eslint@7.7.0): + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 7.7.0 + dev: true + /eslint-plugin-promise@6.1.1(eslint@8.57.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -18062,29 +18694,104 @@ packages: 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.8 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + 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.9 + object.fromentries: 2.0.8 + object.hasown: 1.1.3 + 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 + dev: true + + /eslint-plugin-react@7.33.2(eslint@7.30.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + 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.9 + object.fromentries: 2.0.8 + object.hasown: 1.1.3 + 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 + dev: true + + /eslint-plugin-react@7.33.2(eslint@7.7.0): + resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + 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.9 + object.fromentries: 2.0.8 + object.hasown: 1.1.3 + 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 + dev: true + /eslint-plugin-react@7.33.2(eslint@8.57.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: 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.10 + string.prototype.matchall: 4.0.12 /eslint-plugin-react@7.37.5(eslint@9.25.1): resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} @@ -18154,6 +18861,13 @@ packages: esrecurse: 4.3.0 estraverse: 5.3.0 + /eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + /eslint-utils@3.0.0(eslint@8.57.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -18164,6 +18878,11 @@ packages: eslint-visitor-keys: 2.1.0 dev: true + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} @@ -18177,6 +18896,149 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + /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.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.6.0 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 3.13.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash: 4.17.21 + minimatch: 3.0.8 + natural-compare: 1.4.0 + optionator: 0.9.3 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.5.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /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 + '@eslint/eslintrc': 0.4.3 + '@humanwhocodes/config-array': 0.5.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + doctrine: 3.0.0 + enquirer: 2.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + espree: 7.3.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 13.24.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 3.13.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.0.8 + natural-compare: 1.4.0 + optionator: 0.9.3 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.5.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + table: 6.9.0 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /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.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.6.0 + esutils: 2.0.3 + file-entry-cache: 5.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 12.4.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 3.13.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash: 4.17.21 + minimatch: 3.0.8 + natural-compare: 1.4.0 + optionator: 0.9.3 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.5.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + table: 5.4.6 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + /eslint@8.23.1: resolution: {integrity: sha512-w7C1IXCc6fNqjpuYd0yPlcTKKmHlHHktRkzmBPZ+7cvNBQuiNjx0xaMTjAJGCafJhQkrFJooREv0CtrVzmHwqg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -18375,6 +19237,15 @@ packages: acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 4.2.0 + /espree@7.3.1: + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + eslint-visitor-keys: 1.3.0 + 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} @@ -18753,6 +19624,13 @@ packages: escape-string-regexp: 1.0.5 dev: false + /file-entry-cache@5.0.1: + resolution: {integrity: sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==} + engines: {node: '>=4'} + dependencies: + flat-cache: 2.0.1 + dev: true + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -18894,6 +19772,15 @@ packages: resolve-dir: 1.0.1 dev: false + /flat-cache@2.0.1: + resolution: {integrity: sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==} + engines: {node: '>=4'} + dependencies: + flatted: 2.0.2 + rimraf: 2.6.3 + write: 1.0.3 + dev: true + /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -18918,6 +19805,10 @@ packages: resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} dev: false + /flatted@2.0.2: + resolution: {integrity: sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==} + dev: true + /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -19176,7 +20067,7 @@ 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: @@ -19469,6 +20360,13 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + /globals@12.4.0: + resolution: {integrity: sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.8.1 + dev: true + /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} @@ -20518,6 +21416,11 @@ packages: number-is-nan: 1.0.1 dev: true + /is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -20897,15 +21800,6 @@ packages: iterate-iterator: 1.0.2 dev: true - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 - set-function-name: 2.0.2 - /iterator.prototype@1.1.5: resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} engines: {node: '>= 0.4'} @@ -20916,7 +21810,6 @@ packages: get-proto: 1.0.1 has-symbols: 1.1.0 set-function-name: 2.0.2 - dev: false /jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} @@ -22185,6 +23078,10 @@ packages: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} dev: false + /lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + /lodash.union@4.6.0: resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} dev: true @@ -23198,14 +24095,6 @@ packages: has-symbols: 1.1.0 object-keys: 1.1.1 - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - /object.entries@1.1.9: resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} engines: {node: '>= 0.4'} @@ -23214,15 +24103,6 @@ packages: call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 - dev: false - - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.2 /object.fromentries@2.0.8: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} @@ -23232,7 +24112,6 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.2 es-object-atoms: 1.0.0 - dev: false /object.getownpropertydescriptors@2.1.7: resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==} @@ -23257,7 +24136,7 @@ packages: 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==} @@ -23272,6 +24151,7 @@ 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==} @@ -24393,7 +25273,7 @@ packages: array.prototype.map: 1.0.7 call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.23.2 + es-abstract: 1.23.9 get-intrinsic: 1.2.4 iterate-value: 1.0.2 dev: true @@ -24404,7 +25284,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 @@ -26238,6 +27118,24 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + /slice-ansi@2.1.0: + resolution: {integrity: sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==} + engines: {node: '>=6'} + dependencies: + ansi-styles: 3.2.1 + astral-regex: 1.0.0 + is-fullwidth-code-point: 2.0.0 + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -26585,6 +27483,15 @@ packages: strip-ansi: 3.0.1 dev: true + /string-width@3.1.0: + resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} + engines: {node: '>=6'} + dependencies: + emoji-regex: 7.0.3 + is-fullwidth-code-point: 2.0.0 + strip-ansi: 5.2.0 + dev: true + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -26602,19 +27509,6 @@ packages: strip-ansi: 7.1.0 dev: true - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - dependencies: - call-bind: 1.0.7 - 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 - set-function-name: 2.0.2 - side-channel: 1.0.6 - /string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -26632,7 +27526,6 @@ packages: regexp.prototype.flags: 1.5.4 set-function-name: 2.0.2 side-channel: 1.1.0 - dev: false /string.prototype.padend@3.1.5: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} @@ -26640,7 +27533,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: @@ -26649,7 +27542,7 @@ 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 @@ -26678,7 +27571,7 @@ 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 /string.prototype.trimend@1.0.8: @@ -26702,7 +27595,7 @@ packages: 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==} @@ -26733,7 +27626,6 @@ packages: engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 - dev: false /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -26909,6 +27801,27 @@ packages: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} dev: true + /table@5.4.6: + resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} + engines: {node: '>=6.0.0'} + dependencies: + ajv: 6.12.6 + lodash: 4.17.21 + slice-ansi: 2.1.0 + string-width: 3.1.0 + dev: true + + /table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.13.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + /tabster@6.1.0: resolution: {integrity: sha512-wTPy2d6WVmU/YjT0ERY9jc+et1P/B8FoSQ4qhr1xi7liwTezRbRV6yA1pKx8kdPWmLdIOBA4fn07x9c0x/wnow==} dependencies: @@ -28823,6 +29736,13 @@ packages: write-file-atomic: 3.0.3 dev: false + /write@1.0.3: + resolution: {integrity: sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==} + engines: {node: '>=4'} + dependencies: + mkdirp: 0.5.6 + dev: true + /ws@6.2.2: resolution: {integrity: sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==} dependencies: diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 5a9c9ab6286..675c1250004 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": "7412e7d85ea6cfa3a48700a98f8243ce542618ca", + "pnpmShrinkwrapHash": "a6a1391f86f1021db2dd6f1881141ca4de060667", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } 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..6999a840f34 --- /dev/null +++ b/eslint/eslint-config/flat/mixins/friendly-locals.js @@ -0,0 +1,91 @@ +// 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 { defineConfig } = require('eslint/config'); +const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); + +module.exports = defineConfig([ + { + 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..8adcd30600d --- /dev/null +++ b/eslint/eslint-config/flat/mixins/packlets.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. + +// 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 { defineConfig } = require('eslint/config'); +const rushstackPackletsEslintPlugin = require('@rushstack/eslint-plugin-packlets'); + +module.exports = defineConfig({ + 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..6efb085a7b5 --- /dev/null +++ b/eslint/eslint-config/flat/mixins/react.js @@ -0,0 +1,76 @@ +// 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 { defineConfig } = require('eslint/config'); +const reactEslintPlugin = require('eslint-plugin-react'); + +module.exports = defineConfig({ + 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..5955760f892 --- /dev/null +++ b/eslint/eslint-config/flat/mixins/tsdoc.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. + +// 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 { defineConfig } = require('eslint/config'); +const tsdocEslintPlugin = require('eslint-plugin-tsdoc'); + +module.exports = defineConfig({ + files: ['**/*.ts', '**/*.tsx'], + plugins: { + tsdoc: tsdocEslintPlugin + }, + rules: { + 'tsdoc/syntax': 'warn' + } +}); diff --git a/eslint/eslint-config/flat/profile/_common.js b/eslint/eslint-config/flat/profile/_common.js new file mode 100644 index 00000000000..f72cd197142 --- /dev/null +++ b/eslint/eslint-config/flat/profile/_common.js @@ -0,0 +1,772 @@ +// 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 { defineConfig, 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 = defineConfig([ + // 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', + + // 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..0e912db0cb4 --- /dev/null +++ b/eslint/eslint-config/flat/profile/node-trusted-tool.js @@ -0,0 +1,27 @@ +// 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 { defineConfig } = require('eslint/config'); +const { commonConfig } = require('./_common'); + +module.exports = defineConfig([ + ...commonConfig, + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + // This is disabled for trusted tools because the tool is known to be safe. + '@rushstack/security/no-unsafe-regex': '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..f0348ae2194 --- /dev/null +++ b/eslint/eslint-config/flat/profile/node.js @@ -0,0 +1,11 @@ +// 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 { defineConfig } = require('eslint/config'); +const { commonConfig } = require('./_common'); + +module.exports = defineConfig([...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..cb4d39d17c5 --- /dev/null +++ b/eslint/eslint-config/flat/profile/web-app.js @@ -0,0 +1,13 @@ +// 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 { defineConfig } = require('eslint/config'); +const { commonConfig } = require('./_common'); + +module.exports = defineConfig([...commonConfig]); diff --git a/eslint/eslint-config/index.js b/eslint/eslint-config/index.js new file mode 100644 index 00000000000..b8eedd9c41f --- /dev/null +++ b/eslint/eslint-config/index.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. + +throw new Error( + 'The index.js entry point has been removed. Please update your ESLint configuration to import one of the' + + ' profile paths such as "@rushstack/eslint-config/profile/web-app" or "@rushstack/eslint-config/profile/node.' + + '\n\nSee the documentation for details: https://www.npmjs.com/package/@rushstack/eslint-config' +); diff --git a/eslint/eslint-config/mixins/friendly-locals.js b/eslint/eslint-config/mixins/friendly-locals.js index 6999a840f34..35b1dcd686f 100644 --- a/eslint/eslint-config/mixins/friendly-locals.js +++ b/eslint/eslint-config/mixins/friendly-locals.js @@ -20,72 +20,66 @@ // 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 +// IMPORTANT: Your .eslintrc.js "extends" field must load mixins AFTER the profile. +module.exports = { + overrides: [ + { + files: ['*.ts', '*.tsx'], + rules: { + '@rushstack/typedef-var': 'off', // <--- disabled by the mixin -const { defineConfig } = require('eslint/config'); -const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); + '@typescript-eslint/typedef': [ + 'warn', + { + arrayDestructuring: false, + arrowParameter: false, + memberVariableDeclaration: true, + objectDestructuring: false, + parameter: true, + propertyDeclaration: true, -module.exports = defineConfig([ - { - 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 + variableDeclaration: true, // <--- reenabled by the mixin - variableDeclarationIgnoreFunction: true - } - ] - } - }, - { - files: [ - // Test files - '*.test.ts', - '*.test.tsx', - '*.spec.ts', - '*.spec.tsx', + variableDeclarationIgnoreFunction: true + } + ] + } + }, + // Note that the above block also applies to *.test.ts, so we need to + // reapply those overrides. + { + files: [ + // Test files + '*.test.ts', + '*.test.tsx', + '*.spec.ts', + '*.spec.tsx', - // Facebook convention - '**/__mocks__/*.ts', - '**/__mocks__/*.tsx', - '**/__tests__/*.ts', - '**/__tests__/*.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 - } - ] + // Microsoft convention + '**/test/*.ts', + '**/test/*.tsx' + ], + 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/mixins/packlets.js b/eslint/eslint-config/mixins/packlets.js index 8adcd30600d..9c6b791e546 100644 --- a/eslint/eslint-config/mixins/packlets.js +++ b/eslint/eslint-config/mixins/packlets.js @@ -4,19 +4,18 @@ // 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 +module.exports = { + plugins: ['@rushstack/eslint-plugin-packlets'], -const { defineConfig } = require('eslint/config'); -const rushstackPackletsEslintPlugin = require('@rushstack/eslint-plugin-packlets'); + overrides: [ + { + // Declare an override that applies to TypeScript files only + files: ['*.ts', '*.tsx'], -module.exports = defineConfig({ - files: ['**/*.ts', '**/*.tsx'], - plugins: { - '@rushstack/packlets': rushstackPackletsEslintPlugin - }, - rules: { - '@rushstack/packlets/mechanics': 'warn', - '@rushstack/packlets/circular-deps': 'warn' - } -}); + rules: { + '@rushstack/packlets/mechanics': 'warn', + '@rushstack/packlets/circular-deps': 'warn' + } + } + ] +}; diff --git a/eslint/eslint-config/mixins/react.js b/eslint/eslint-config/mixins/react.js index 6efb085a7b5..00e06aa0074 100644 --- a/eslint/eslint-config/mixins/react.js +++ b/eslint/eslint-config/mixins/react.js @@ -3,17 +3,10 @@ // 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 +module.exports = { + // Plugin documentation: https://www.npmjs.com/package/eslint-plugin-react + plugins: ['eslint-plugin-react'], -const { defineConfig } = require('eslint/config'); -const reactEslintPlugin = require('eslint-plugin-react'); - -module.exports = defineConfig({ - files: ['**/*.ts', '**/*.tsx'], - plugins: { - react: reactEslintPlugin - }, settings: { react: { // The default value is "detect". Automatic detection works by loading the entire React library @@ -22,55 +15,63 @@ module.exports = defineConfig({ 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', + overrides: [ + { + // Declare an override that applies to TypeScript files only + files: ['*.ts', '*.tsx'], + + rules: { + // RATIONALE: When React components are added to an array, they generally need a "key". + 'react/jsx-key': 'warn', - // RATIONALE: Catches a common coding mistake. - 'react/jsx-no-comment-textnodes': 'warn', + // RATIONALE: Catches a common coding practice that significantly impacts performance. + 'react/jsx-no-bind': 'warn', - // RATIONALE: Security risk. - 'react/jsx-no-target-blank': 'warn', + // RATIONALE: Catches a common coding mistake. + 'react/jsx-no-comment-textnodes': 'warn', - // RATIONALE: Fixes the no-unused-vars rule to make it compatible with React - 'react/jsx-uses-react': '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-vars': 'warn', + // RATIONALE: Fixes the no-unused-vars rule to make it compatible with React + 'react/jsx-uses-react': 'warn', - // RATIONALE: Catches a common coding mistake. - 'react/no-children-prop': '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-danger-with-children': 'warn', + // RATIONALE: Catches a common coding mistake. + 'react/no-children-prop': '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-danger-with-children': 'warn', - // RATIONALE: Catches a common coding mistake. - 'react/no-direct-mutation-state': '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 some common coding mistakes. - 'react/no-unescaped-entities': 'warn', + // RATIONALE: Catches a common coding mistake. + 'react/no-direct-mutation-state': 'warn', - // RATIONALE: Avoids a potential performance problem. - 'react/no-find-dom-node': 'warn', + // RATIONALE: Catches some common coding mistakes. + 'react/no-unescaped-entities': 'warn', - // RATIONALE: Deprecated API. - 'react/no-is-mounted': 'warn', + // RATIONALE: Avoids a potential performance problem. + 'react/no-find-dom-node': 'warn', - // RATIONALE: Deprecated API. - 'react/no-render-return-value': 'warn', + // RATIONALE: Deprecated API. + 'react/no-is-mounted': 'warn', - // RATIONALE: Deprecated API. - 'react/no-string-refs': 'warn', + // RATIONALE: Deprecated API. + 'react/no-render-return-value': 'warn', - // RATIONALE: Improves syntax for some cases that are not already handled by Prettier. - 'react/self-closing-comp': '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/mixins/tsdoc.js b/eslint/eslint-config/mixins/tsdoc.js index 5955760f892..5e07fc79e28 100644 --- a/eslint/eslint-config/mixins/tsdoc.js +++ b/eslint/eslint-config/mixins/tsdoc.js @@ -3,18 +3,18 @@ // 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 +module.exports = { + // The plugin documentation is here: https://www.npmjs.com/package/eslint-plugin-tsdoc + plugins: ['eslint-plugin-tsdoc'], -const { defineConfig } = require('eslint/config'); -const tsdocEslintPlugin = require('eslint-plugin-tsdoc'); + overrides: [ + { + // Declare an override that applies to TypeScript files only + files: ['*.ts', '*.tsx'], -module.exports = defineConfig({ - files: ['**/*.ts', '**/*.tsx'], - plugins: { - tsdoc: tsdocEslintPlugin - }, - rules: { - 'tsdoc/syntax': 'warn' - } -}); + rules: { + 'tsdoc/syntax': 'warn' + } + } + ] +}; diff --git a/eslint/eslint-config/package.json b/eslint/eslint-config/package.json index 93f675c93bb..5ea61e26ee7 100644 --- a/eslint/eslint-config/package.json +++ b/eslint/eslint-config/package.json @@ -23,10 +23,11 @@ "typescript" ], "peerDependencies": { - "eslint": "^9.25.1", + "eslint": "^8.57.0 || ^9.25.1", "typescript": ">=4.7.0" }, "dependencies": { + "@rushstack/eslint-patch": "workspace:*", "@rushstack/eslint-plugin": "workspace:*", "@rushstack/eslint-plugin-packlets": "workspace:*", "@rushstack/eslint-plugin-security": "workspace:*", diff --git a/eslint/eslint-config/patch-eslint6.js b/eslint/eslint-config/patch-eslint6.js new file mode 100644 index 00000000000..336494cb3b9 --- /dev/null +++ b/eslint/eslint-config/patch-eslint6.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. + +throw new Error( + 'The patch-eslint6.js script has been rewritten to support both ESLint 6.x and 7.x.' + + ' Please update your ESLint configuration to use this path instead:\n\n' + + ' require("@rushstack/eslint-config/patch/modern-module-resolution");' +); diff --git a/eslint/eslint-config/patch/custom-config-package-names.js b/eslint/eslint-config/patch/custom-config-package-names.js new file mode 100644 index 00000000000..20341195020 --- /dev/null +++ b/eslint/eslint-config/patch/custom-config-package-names.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/custom-config-package-names'); diff --git a/eslint/eslint-config/patch/eslint-bulk-suppressions.js b/eslint/eslint-config/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/eslint/eslint-config/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/eslint/eslint-config/patch/modern-module-resolution.js b/eslint/eslint-config/patch/modern-module-resolution.js new file mode 100644 index 00000000000..d4ba8827123 --- /dev/null +++ b/eslint/eslint-config/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/eslint/eslint-config/profile/_common.js b/eslint/eslint-config/profile/_common.js index f72cd197142..4f64259436c 100644 --- a/eslint/eslint-config/profile/_common.js +++ b/eslint/eslint-config/profile/_common.js @@ -1,34 +1,9 @@ // 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 macros = require('./_macros'); -const { defineConfig, 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 = [ +const namingConventionRuleOptions = [ { // We should be stricter about 'enumMember', but it often functions legitimately as an ad hoc namespace. selectors: ['variable', 'enumMember', 'function'], @@ -183,590 +158,642 @@ const commonNamingConventionSelectors = [ } ]; -const commonConfig = defineConfig([ - // 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', - - // 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' - } - ], +// 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 - // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json - '@typescript-eslint/no-use-before-define': [ - 'error', - { - // Base ESLint options +function buildRules(profile) { + return { + // After an .eslintrc.js file is loaded, ESLint will normally continue visiting all parent folders + // to look for other .eslintrc.js files, and also consult a personal file ~/.eslintrc.js. If any files + // are found, their options will be merged. This is difficult for humans to understand, and it will cause + // nondeterministic behavior if files are loaded from outside the Git working folder. + // + // Setting root=true causes ESLint to stop looking for other config files after the first .eslintrc.js + // is loaded. + root: true, + + // Disable the parser by default + parser: '', + + plugins: [ + // Plugin documentation: https://www.npmjs.com/package/@rushstack/eslint-plugin + '@rushstack/eslint-plugin', + // Plugin documentation: https://www.npmjs.com/package/@rushstack/eslint-plugin-security + '@rushstack/eslint-plugin-security', + // Plugin documentation: https://www.npmjs.com/package/@typescript-eslint/eslint-plugin + '@typescript-eslint/eslint-plugin', + // Plugin documentation: https://www.npmjs.com/package/eslint-plugin-promise + 'eslint-plugin-promise' + ], - // 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: + // 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. + ignorePatterns: ['*.d.ts'], + + overrides: [ + { + // Declare an override that applies to TypeScript files only + files: ['*.ts', '*.tsx'], + parser: '@typescript-eslint/parser', + 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' + }, + + rules: { + // ==================================================================== + // CUSTOM RULES + // ==================================================================== + + // The @rushstack rules are documented in the package README: + // https://www.npmjs.com/package/@rushstack/eslint-plugin + + // 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 + // ==================================================================== + + // This is disabled for tools because, for example, it is a common and safe practice for a tool + // to read a RegExp from a config file and use it to filter files paths. + '@rushstack/security/no-unsafe-regexp': profile === 'node-trusted-tool' ? 'off' : 'warn', + + // ==================================================================== + // GENERAL 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. // - // class MyComponent { - // public render(): React.ReactNode { - // return ( - // click me - // ); - // } + // 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: // - // // The assignment here avoids the need for "this._onClick.bind(this)" - // private _onClick = (event: React.MouseEvent): void => { - // console.log("Clicked! " + this.props.title); - // }; - // } + // - @typescript-eslint/camelcase + // - @typescript-eslint/class-name-casing + // - @typescript-eslint/interface-name-prefix + // - @typescript-eslint/member-naming // - // 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', + // Docs: https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/docs/rules/naming-convention.md + '@typescript-eslint/naming-convention': [ + 'warn', + ...macros.expandNamingConventionSelectors(namingConventionRuleOptions) + ], - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-ex-assign': 'error', + // STANDARDIZED BY: @typescript-eslint\eslint-plugin\dist\configs\recommended.json + '@typescript-eslint/no-array-constructor': 'warn', - // 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: @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', + + // 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', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-extra-boolean-cast': '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 + } + ], + + // 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', - 'no-extra-label': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-extra-boolean-cast': 'warn', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-fallthrough': 'error', + 'no-extra-label': 'warn', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-func-assign': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-fallthrough': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-implied-eval': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-func-assign': 'warn', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-invalid-regexp': 'error', + // RATIONALE: Catches a common coding mistake. + 'no-implied-eval': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-label-var': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-invalid-regexp': 'error', - // RATIONALE: Eliminates redundant code. - 'no-lone-blocks': 'warn', + // RATIONALE: Catches a common coding mistake. + 'no-label-var': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-misleading-character-class': 'error', + // RATIONALE: Eliminates redundant code. + 'no-lone-blocks': 'warn', - // RATIONALE: Catches a common coding mistake. - 'no-multi-str': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-misleading-character-class': '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: Catches a common coding mistake. + 'no-multi-str': 'error', - // RATIONALE: Obsolete language feature that is deprecated. - 'no-new-func': '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-object': 'error', + // RATIONALE: Obsolete language feature that is deprecated. + 'no-new-func': 'error', - // RATIONALE: Obsolete notation. - 'no-new-wrappers': 'warn', + // RATIONALE: Obsolete language feature that is deprecated. + 'no-new-object': 'error', - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-octal': 'error', + // RATIONALE: Obsolete notation. + 'no-new-wrappers': 'warn', - // 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-octal': 'error', - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-regex-spaces': 'error', + // RATIONALE: Catches code that is likely to be incorrect + 'no-octal-escape': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-return-assign': 'error', + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-regex-spaces': 'error', - // RATIONALE: Security risk. - 'no-script-url': 'warn', + // RATIONALE: Catches a common coding mistake. + 'no-return-assign': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-self-assign': 'error', + // RATIONALE: Security risk. + 'no-script-url': 'warn', - // RATIONALE: Catches a common coding mistake. - 'no-self-compare': 'error', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-self-assign': '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 a common coding mistake. + 'no-self-compare': 'error', - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-shadow-restricted-names': '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: Obsolete language feature that is deprecated. - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-sparse-arrays': 'error', + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-shadow-restricted-names': '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: Obsolete language feature that is deprecated. + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-sparse-arrays': 'error', - // RATIONALE: Catches a common coding mistake. - 'no-unmodified-loop-condition': 'warn', + // 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', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-unsafe-finally': 'error', + // RATIONALE: Catches a common coding mistake. + 'no-unmodified-loop-condition': 'warn', - // RATIONALE: Catches a common coding mistake. - 'no-unused-expressions': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-unsafe-finally': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-unused-labels': 'warn', + // RATIONALE: Catches a common coding mistake. + 'no-unused-expressions': 'warn', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-useless-catch': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-unused-labels': 'warn', - // RATIONALE: Avoids a potential performance problem. - 'no-useless-concat': 'warn', + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-useless-catch': '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: Avoids a potential performance problem. + 'no-useless-concat': 'warn', - // RATIONALE: Generally not needed in modern code. - 'no-void': 'error', + // 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: Obsolete language feature that is deprecated. - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'no-with': 'error', + // RATIONALE: Generally not needed in modern code. + 'no-void': '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: Obsolete language feature that is deprecated. + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'no-with': 'error', - // RATIONALE: Catches a common coding mistake where "resolve" and "reject" are confused. - 'promise/param-names': '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 code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'require-atomic-updates': 'error', + // RATIONALE: Catches a common coding mistake where "resolve" and "reject" are confused. + 'promise/param-names': 'error', - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'require-yield': 'warn', + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'require-atomic-updates': 'error', - // "Use strict" is redundant when using the TypeScript compiler. - strict: ['error', 'never'], + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'require-yield': 'warn', - // RATIONALE: Catches code that is likely to be incorrect - // STANDARDIZED BY: eslint\conf\eslint-recommended.js - 'use-isnan': 'error' + // "Use strict" is redundant when using the TypeScript compiler. + strict: ['error', 'never'], - // 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": [ - // ], - } - }, + // RATIONALE: Catches code that is likely to be incorrect + // STANDARDIZED BY: eslint\conf\eslint-recommended.js + 'use-isnan': 'error' - // ==================================================================== - // 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' - } - } -]); + // 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": [ + // ], + } + }, + { + // 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' + ], + 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', + '@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 + } + ] + } + } + ] + }; +} -module.exports = { commonNamingConventionSelectors, commonConfig }; +exports.buildRules = buildRules; +exports.namingConventionRuleOptions = namingConventionRuleOptions; diff --git a/eslint/eslint-config/profile/_macros.js b/eslint/eslint-config/profile/_macros.js index 4d95857abc1..87c8487b314 100644 --- a/eslint/eslint-config/profile/_macros.js +++ b/eslint/eslint-config/profile/_macros.js @@ -99,6 +99,4 @@ function expandNamingConventionSelectors(inputBlocks) { return secondPassBlocks; } -module.exports = { - expandNamingConventionSelectors: expandNamingConventionSelectors -}; +exports.expandNamingConventionSelectors = expandNamingConventionSelectors; diff --git a/eslint/eslint-config/profile/node-trusted-tool.js b/eslint/eslint-config/profile/node-trusted-tool.js index 0e912db0cb4..f185f532b70 100644 --- a/eslint/eslint-config/profile/node-trusted-tool.js +++ b/eslint/eslint-config/profile/node-trusted-tool.js @@ -12,16 +12,7 @@ // 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 { defineConfig } = require('eslint/config'); -const { commonConfig } = require('./_common'); +const { buildRules } = require('./_common'); -module.exports = defineConfig([ - ...commonConfig, - { - files: ['**/*.ts', '**/*.tsx'], - rules: { - // This is disabled for trusted tools because the tool is known to be safe. - '@rushstack/security/no-unsafe-regex': 'off' - } - } -]); +const rules = buildRules('node-trusted-tool'); +module.exports = rules; diff --git a/eslint/eslint-config/profile/node.js b/eslint/eslint-config/profile/node.js index f0348ae2194..df3b0dc79fa 100644 --- a/eslint/eslint-config/profile/node.js +++ b/eslint/eslint-config/profile/node.js @@ -5,7 +5,7 @@ // 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 { defineConfig } = require('eslint/config'); -const { commonConfig } = require('./_common'); +const { buildRules } = require('./_common'); -module.exports = defineConfig([...commonConfig]); +const rules = buildRules('node'); +module.exports = rules; diff --git a/eslint/eslint-config/profile/web-app.js b/eslint/eslint-config/profile/web-app.js index cb4d39d17c5..916b888ec6e 100644 --- a/eslint/eslint-config/profile/web-app.js +++ b/eslint/eslint-config/profile/web-app.js @@ -7,7 +7,7 @@ // Also use this profile if you are creating a library that can be consumed by both Node.js // and web applications. -const { defineConfig } = require('eslint/config'); -const { commonConfig } = require('./_common'); +const { buildRules } = require('./_common'); -module.exports = defineConfig([...commonConfig]); +const rules = buildRules('web-app'); +module.exports = rules; diff --git a/eslint/eslint-config/react.js b/eslint/eslint-config/react.js new file mode 100644 index 00000000000..14516d2ff32 --- /dev/null +++ b/eslint/eslint-config/react.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. + +throw new Error( + 'The react.js entry point has moved. Please update your ESLint configuration to reference' + + ' "@rushstack/eslint-config/mixins/react" instead.' + + '\n\nSee the documentation for details: https://www.npmjs.com/package/@rushstack/eslint-config' +); diff --git a/rush.json b/rush.json index 13c7dd2c074..6914c943dd3 100644 --- a/rush.json +++ b/rush.json @@ -596,6 +596,33 @@ "shouldPublish": false, "tags": ["api-extractor-tests"] }, + { + "packageName": "eslint-7-11-test", + "projectFolder": "build-tests/eslint-7-11-test", + "reviewCategory": "tests", + "shouldPublish": false, + "decoupledLocalDependencies": ["@rushstack/eslint-config"] + }, + { + "packageName": "eslint-7-7-test", + "projectFolder": "build-tests/eslint-7-7-test", + "reviewCategory": "tests", + "shouldPublish": false, + "decoupledLocalDependencies": ["@rushstack/eslint-config"] + }, + { + "packageName": "eslint-7-test", + "projectFolder": "build-tests/eslint-7-test", + "reviewCategory": "tests", + "shouldPublish": false, + "decoupledLocalDependencies": ["@rushstack/eslint-config"] + }, + { + "packageName": "eslint-8-test", + "projectFolder": "build-tests/eslint-8-test", + "reviewCategory": "tests", + "shouldPublish": false + }, { "packageName": "eslint-9-test", "projectFolder": "build-tests/eslint-9-test", From dc7b734f59e0698e38144bb2b0d066805de06055 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 17:10:30 -0700 Subject: [PATCH 12/60] Pull more things back in from main --- .../build-tests-subspace/repo-state.json | 2 +- .../config/subspaces/default/pnpm-lock.yaml | 11 ++++++ .../config/subspaces/default/repo-state.json | 2 +- eslint/local-eslint-config/.gitignore | 7 ++-- eslint/local-eslint-config/.npmignore | 3 +- eslint/local-eslint-config/config/heft.json | 38 +++++++++---------- .../config/rush-project.json | 5 +-- .../{ => flat}/mixins/friendly-locals.js | 0 .../{ => flat}/mixins/packlets.js | 0 .../{ => flat}/mixins/react.js | 0 .../{ => flat}/mixins/tsdoc.js | 0 .../{ => flat}/profile/_common.js | 0 .../{ => flat}/profile/node-trusted-tool.js | 0 .../{ => flat}/profile/node.js | 0 .../{ => flat}/profile/web-app.js | 0 eslint/local-eslint-config/package.json | 1 + .../eslint/flat/mixins/friendly-locals.js | 7 ++++ .../includes/eslint/flat/mixins/packlets.js | 7 ++++ .../includes/eslint/flat/mixins/react.js | 7 ++++ .../includes/eslint/flat/mixins/tsdoc.js | 7 ++++ .../eslint/flat/profile/node-trusted-tool.js | 7 ++++ .../includes/eslint/flat/profile/node.js | 7 ++++ .../includes/eslint/mixins/friendly-locals.js | 7 ++-- .../includes/eslint/mixins/packlets.js | 7 ++-- .../default/includes/eslint/mixins/react.js | 7 ++-- .../default/includes/eslint/mixins/tsdoc.js | 7 ++-- .../patch/custom-config-package-names.js | 4 ++ .../eslint/patch/eslint-bulk-suppressions.js | 4 ++ .../eslint/patch/modern-module-resolution.js | 4 ++ .../eslint/profile/node-trusted-tool.js | 7 ++-- .../default/includes/eslint/profile/node.js | 7 ++-- 31 files changed, 112 insertions(+), 53 deletions(-) rename eslint/local-eslint-config/{ => flat}/mixins/friendly-locals.js (100%) rename eslint/local-eslint-config/{ => flat}/mixins/packlets.js (100%) rename eslint/local-eslint-config/{ => flat}/mixins/react.js (100%) rename eslint/local-eslint-config/{ => flat}/mixins/tsdoc.js (100%) rename eslint/local-eslint-config/{ => flat}/profile/_common.js (100%) rename eslint/local-eslint-config/{ => flat}/profile/node-trusted-tool.js (100%) rename eslint/local-eslint-config/{ => flat}/profile/node.js (100%) rename eslint/local-eslint-config/{ => flat}/profile/web-app.js (100%) create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 20f6d1df4c1..32a78c4a281 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -2,5 +2,5 @@ { "pnpmShrinkwrapHash": "66723d30c5555c15856aece8309d1f7c555f8be5", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "5060374392d27d2f96c5443d429f5d350628fc98" + "packageJsonInjectedDependenciesHash": "a4864cc684424f2f2d679b8bb77c11f1b0d5f8a8" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index abc531ca007..ff71af583ef 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -2490,6 +2490,9 @@ importers: eslint-import-resolver-node: specifier: 0.3.9 version: 0.3.9 + eslint-plugin-header: + specifier: ~3.1.1 + version: 3.1.1(eslint@9.25.1) eslint-plugin-headers: specifier: ~1.2.1 version: 1.2.1(eslint@9.25.1) @@ -18524,6 +18527,14 @@ packages: eslint: 8.57.0 dev: false + /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} diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index 675c1250004..cba3ce2a064 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": "a6a1391f86f1021db2dd6f1881141ca4de060667", + "pnpmShrinkwrapHash": "5bda561759fca29b4ae209530de2db426ce3a553", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } diff --git a/eslint/local-eslint-config/.gitignore b/eslint/local-eslint-config/.gitignore index 031e775b1d5..654694f5ee1 100644 --- a/eslint/local-eslint-config/.gitignore +++ b/eslint/local-eslint-config/.gitignore @@ -1,4 +1,3 @@ -# TODO: Remove comment when decoupled-local-node-rig is updated to ESLint 9 -# /mixins -# /patch -# /profile \ No newline at end of file +/mixins +/patch +/profile \ No newline at end of file diff --git a/eslint/local-eslint-config/.npmignore b/eslint/local-eslint-config/.npmignore index 84ca84895cd..3b354d69138 100644 --- a/eslint/local-eslint-config/.npmignore +++ b/eslint/local-eslint-config/.npmignore @@ -26,4 +26,5 @@ !/mixins/** !/patch/** -!/profile/** \ No newline at end of file +!/profile/** +!/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 01319952eac..d4ccbea3f42 100644 --- a/eslint/local-eslint-config/config/heft.json +++ b/eslint/local-eslint-config/config/heft.json @@ -3,25 +3,25 @@ "phasesByName": { "build": { - // TODO: Remove comment when decoupled-local-node-rig is updated to ESLint 9 - // "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": ["**"] - // } - // ] - // } - // } - // } - // } + "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": ["**"] + } + ] + } + } + } + } } } } diff --git a/eslint/local-eslint-config/config/rush-project.json b/eslint/local-eslint-config/config/rush-project.json index bc61a6bc271..1965f21aa81 100644 --- a/eslint/local-eslint-config/config/rush-project.json +++ b/eslint/local-eslint-config/config/rush-project.json @@ -3,9 +3,8 @@ "operationSettings": [ { - "operationName": "_phase:build" - // TODO: Remove comment when decoupled-local-node-rig is updated to ESLint 9 - // "outputFolderNames": ["mixins", "patch", "profile"] + "operationName": "_phase:build", + "outputFolderNames": ["mixins", "patch", "profile"] } ] } diff --git a/eslint/local-eslint-config/mixins/friendly-locals.js b/eslint/local-eslint-config/flat/mixins/friendly-locals.js similarity index 100% rename from eslint/local-eslint-config/mixins/friendly-locals.js rename to eslint/local-eslint-config/flat/mixins/friendly-locals.js diff --git a/eslint/local-eslint-config/mixins/packlets.js b/eslint/local-eslint-config/flat/mixins/packlets.js similarity index 100% rename from eslint/local-eslint-config/mixins/packlets.js rename to eslint/local-eslint-config/flat/mixins/packlets.js diff --git a/eslint/local-eslint-config/mixins/react.js b/eslint/local-eslint-config/flat/mixins/react.js similarity index 100% rename from eslint/local-eslint-config/mixins/react.js rename to eslint/local-eslint-config/flat/mixins/react.js diff --git a/eslint/local-eslint-config/mixins/tsdoc.js b/eslint/local-eslint-config/flat/mixins/tsdoc.js similarity index 100% rename from eslint/local-eslint-config/mixins/tsdoc.js rename to eslint/local-eslint-config/flat/mixins/tsdoc.js diff --git a/eslint/local-eslint-config/profile/_common.js b/eslint/local-eslint-config/flat/profile/_common.js similarity index 100% rename from eslint/local-eslint-config/profile/_common.js rename to eslint/local-eslint-config/flat/profile/_common.js diff --git a/eslint/local-eslint-config/profile/node-trusted-tool.js b/eslint/local-eslint-config/flat/profile/node-trusted-tool.js similarity index 100% rename from eslint/local-eslint-config/profile/node-trusted-tool.js rename to eslint/local-eslint-config/flat/profile/node-trusted-tool.js diff --git a/eslint/local-eslint-config/profile/node.js b/eslint/local-eslint-config/flat/profile/node.js similarity index 100% rename from eslint/local-eslint-config/profile/node.js rename to eslint/local-eslint-config/flat/profile/node.js diff --git a/eslint/local-eslint-config/profile/web-app.js b/eslint/local-eslint-config/flat/profile/web-app.js similarity index 100% rename from eslint/local-eslint-config/profile/web-app.js rename to eslint/local-eslint-config/flat/profile/web-app.js diff --git a/eslint/local-eslint-config/package.json b/eslint/local-eslint-config/package.json index a163b5f5590..609534bf052 100644 --- a/eslint/local-eslint-config/package.json +++ b/eslint/local-eslint-config/package.json @@ -20,6 +20,7 @@ "@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-headers": "~1.2.1", "eslint-plugin-import": "2.31.0", "eslint-plugin-jsdoc": "50.6.11", diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..e565795a703 --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('local-eslint-config/mixins/friendly-locals'); + +module.exports = defineConfig([...friendlyLocalsMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js new file mode 100644 index 00000000000..d676698a76b --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const packletsMixin = require('local-eslint-config/mixins/packlets'); + +module.exports = defineConfig([...packletsMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js new file mode 100644 index 00000000000..30034b95344 --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const reactMixin = require('local-eslint-config/mixins/react'); + +module.exports = defineConfig([...reactMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..b073d1857b0 --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const tsdocMixin = require('local-eslint-config/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js new file mode 100644 index 00000000000..977c6f8276f --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('local-eslint-config/profile/node-trusted-tool'); + +module.exports = defineConfig([...nodeTrustedToolProfile]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js new file mode 100644 index 00000000000..2d67bc4eead --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/profile/node'); + +module.exports = defineConfig([...nodeProfile]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js index e565795a703..8ce8a5a50f1 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js @@ -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. -const { defineConfig } = require('eslint/config'); -const friendlyLocalsMixin = require('local-eslint-config/mixins/friendly-locals'); - -module.exports = defineConfig([...friendlyLocalsMixin]); +module.exports = { + extends: ['local-eslint-config/mixins/friendly-locals'] +}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js index d676698a76b..34121152062 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js @@ -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. -const { defineConfig } = require('eslint/config'); -const packletsMixin = require('local-eslint-config/mixins/packlets'); - -module.exports = defineConfig([...packletsMixin]); +module.exports = { + extends: ['local-eslint-config/mixins/packlets'] +}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js index 30034b95344..32d2625068b 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js @@ -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. -const { defineConfig } = require('eslint/config'); -const reactMixin = require('local-eslint-config/mixins/react'); - -module.exports = defineConfig([...reactMixin]); +module.exports = { + extends: ['local-eslint-config/mixins/react'] +}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js index b073d1857b0..48a832eef64 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js @@ -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. -const { defineConfig } = require('eslint/config'); -const tsdocMixin = require('local-eslint-config/mixins/tsdoc'); - -module.exports = defineConfig([...tsdocMixin]); +module.exports = { + extends: ['local-eslint-config/mixins/tsdoc'] +}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js new file mode 100644 index 00000000000..831b7c639fb --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.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('local-eslint-config/patch/custom-config-package-names'); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..6cc6d7238fb --- /dev/null +++ b/rigs/local-node-rig/profiles/default/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('local-eslint-config/patch/eslint-bulk-suppressions'); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js new file mode 100644 index 00000000000..a262ef96af5 --- /dev/null +++ b/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.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('local-eslint-config/patch/modern-module-resolution'); 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/profile/node-trusted-tool.js index 977c6f8276f..ffced0b4377 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js @@ -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. -const { defineConfig } = require('eslint/config'); -const nodeTrustedToolProfile = require('local-eslint-config/profile/node-trusted-tool'); - -module.exports = defineConfig([...nodeTrustedToolProfile]); +module.exports = { + extends: ['local-eslint-config/profile/node-trusted-tool'] +}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js b/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js index 2d67bc4eead..58350ac8a62 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js @@ -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. -const { defineConfig } = require('eslint/config'); -const nodeProfile = require('local-eslint-config/profile/node'); - -module.exports = defineConfig([...nodeProfile]); +module.exports = { + extends: ['local-eslint-config/profile/node'] +}; From 20ca637db769a62aee7fb8625f7b576862f46336 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 17:26:11 -0700 Subject: [PATCH 13/60] Update flat configs for new paths --- eslint/local-eslint-config/flat/mixins/friendly-locals.js | 2 +- eslint/local-eslint-config/flat/mixins/packlets.js | 2 +- eslint/local-eslint-config/flat/mixins/react.js | 4 ++-- eslint/local-eslint-config/flat/mixins/tsdoc.js | 2 +- eslint/local-eslint-config/flat/profile/_common.js | 4 ++-- eslint/local-eslint-config/flat/profile/node-trusted-tool.js | 4 ++-- eslint/local-eslint-config/flat/profile/node.js | 2 +- eslint/local-eslint-config/flat/profile/web-app.js | 2 +- .../default/includes/eslint/flat/mixins/friendly-locals.js | 2 +- .../profiles/default/includes/eslint/flat/mixins/packlets.js | 2 +- .../profiles/default/includes/eslint/flat/mixins/react.js | 2 +- .../profiles/default/includes/eslint/flat/mixins/tsdoc.js | 2 +- .../default/includes/eslint/flat/profile/node-trusted-tool.js | 2 +- .../profiles/default/includes/eslint/flat/profile/node.js | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/eslint/local-eslint-config/flat/mixins/friendly-locals.js b/eslint/local-eslint-config/flat/mixins/friendly-locals.js index cf74f64bb4d..b188d376fd1 100644 --- a/eslint/local-eslint-config/flat/mixins/friendly-locals.js +++ b/eslint/local-eslint-config/flat/mixins/friendly-locals.js @@ -4,6 +4,6 @@ // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile const { defineConfig } = require('eslint/config'); -const friendlyLocalsMixin = require('@rushstack/eslint-config/mixins/friendly-locals'); +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); module.exports = defineConfig([...friendlyLocalsMixin]); diff --git a/eslint/local-eslint-config/flat/mixins/packlets.js b/eslint/local-eslint-config/flat/mixins/packlets.js index f1279ee283a..b4722218b9a 100644 --- a/eslint/local-eslint-config/flat/mixins/packlets.js +++ b/eslint/local-eslint-config/flat/mixins/packlets.js @@ -4,6 +4,6 @@ // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile const { defineConfig } = require('eslint/config'); -const packletsMixin = require('@rushstack/eslint-config/mixins/packlets'); +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); module.exports = defineConfig([...packletsMixin]); diff --git a/eslint/local-eslint-config/flat/mixins/react.js b/eslint/local-eslint-config/flat/mixins/react.js index 7c16bc953f3..1e30e565d58 100644 --- a/eslint/local-eslint-config/flat/mixins/react.js +++ b/eslint/local-eslint-config/flat/mixins/react.js @@ -3,7 +3,7 @@ // 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/mixins/react) +// - 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: @@ -13,7 +13,7 @@ const { defineConfig } = require('eslint/config'); const reactHooksEslintPlugin = require('eslint-plugin-react-hooks'); -const reactMixin = require('@rushstack/eslint-config/mixins/react'); +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); module.exports = defineConfig([ ...reactMixin, diff --git a/eslint/local-eslint-config/flat/mixins/tsdoc.js b/eslint/local-eslint-config/flat/mixins/tsdoc.js index cf100018e0a..18e220f9d5c 100644 --- a/eslint/local-eslint-config/flat/mixins/tsdoc.js +++ b/eslint/local-eslint-config/flat/mixins/tsdoc.js @@ -5,7 +5,7 @@ const { defineConfig } = require('eslint/config'); const jsdocEslintPlugin = require('eslint-plugin-jsdoc'); -const tsdocMixin = require('@rushstack/eslint-config/mixins/tsdoc'); +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); module.exports = defineConfig([ ...tsdocMixin, diff --git a/eslint/local-eslint-config/flat/profile/_common.js b/eslint/local-eslint-config/flat/profile/_common.js index 583f3919ed6..160c0867432 100644 --- a/eslint/local-eslint-config/flat/profile/_common.js +++ b/eslint/local-eslint-config/flat/profile/_common.js @@ -2,8 +2,8 @@ // See LICENSE in the project root for license information. const { defineConfig } = require('eslint/config'); -const { expandNamingConventionSelectors } = require('@rushstack/eslint-config/profile/_macros'); -const { commonNamingConventionSelectors } = require('@rushstack/eslint-config/profile/_common'); +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'); diff --git a/eslint/local-eslint-config/flat/profile/node-trusted-tool.js b/eslint/local-eslint-config/flat/profile/node-trusted-tool.js index 08882f3ba78..565773ef235 100644 --- a/eslint/local-eslint-config/flat/profile/node-trusted-tool.js +++ b/eslint/local-eslint-config/flat/profile/node-trusted-tool.js @@ -10,10 +10,10 @@ // 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/profiles/node" instead. +// use "local-eslint-config/flat/profiles/node" instead. const { defineConfig } = require('eslint/config'); -const nodeTrustedToolProfile = require('@rushstack/eslint-config/profile/node-trusted-tool'); +const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node-trusted-tool'); const { localCommonConfig } = require('./_common'); diff --git a/eslint/local-eslint-config/flat/profile/node.js b/eslint/local-eslint-config/flat/profile/node.js index 9610335cae9..deedc8067b8 100644 --- a/eslint/local-eslint-config/flat/profile/node.js +++ b/eslint/local-eslint-config/flat/profile/node.js @@ -6,7 +6,7 @@ // untrusted user. If that is not the case, consider using the "node-trusted-tool" profile instead. const { defineConfig } = require('eslint/config'); -const nodeProfile = require('@rushstack/eslint-config/profile/node'); +const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); const { localCommonConfig } = require('./_common'); diff --git a/eslint/local-eslint-config/flat/profile/web-app.js b/eslint/local-eslint-config/flat/profile/web-app.js index 025f2737bdb..ac85123b880 100644 --- a/eslint/local-eslint-config/flat/profile/web-app.js +++ b/eslint/local-eslint-config/flat/profile/web-app.js @@ -9,7 +9,7 @@ const { defineConfig } = require('eslint/config'); const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); -const webAppProfile = require('@rushstack/eslint-config/profile/web-app'); +const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); const { localCommonConfig } = require('./_common'); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js index e565795a703..01460747289 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js @@ -2,6 +2,6 @@ // See LICENSE in the project root for license information. const { defineConfig } = require('eslint/config'); -const friendlyLocalsMixin = require('local-eslint-config/mixins/friendly-locals'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); module.exports = defineConfig([...friendlyLocalsMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js index d676698a76b..c906babf0ba 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js @@ -2,6 +2,6 @@ // See LICENSE in the project root for license information. const { defineConfig } = require('eslint/config'); -const packletsMixin = require('local-eslint-config/mixins/packlets'); +const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); module.exports = defineConfig([...packletsMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js index 30034b95344..43271b52f6d 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js @@ -2,6 +2,6 @@ // See LICENSE in the project root for license information. const { defineConfig } = require('eslint/config'); -const reactMixin = require('local-eslint-config/mixins/react'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); module.exports = defineConfig([...reactMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js index b073d1857b0..1634743ff68 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js @@ -2,6 +2,6 @@ // See LICENSE in the project root for license information. const { defineConfig } = require('eslint/config'); -const tsdocMixin = require('local-eslint-config/mixins/tsdoc'); +const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); module.exports = defineConfig([...tsdocMixin]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js index 977c6f8276f..39c553e695e 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js @@ -2,6 +2,6 @@ // See LICENSE in the project root for license information. const { defineConfig } = require('eslint/config'); -const nodeTrustedToolProfile = require('local-eslint-config/profile/node-trusted-tool'); +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); module.exports = defineConfig([...nodeTrustedToolProfile]); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js index 2d67bc4eead..54b30beb8ad 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js @@ -2,6 +2,6 @@ // See LICENSE in the project root for license information. const { defineConfig } = require('eslint/config'); -const nodeProfile = require('local-eslint-config/profile/node'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); module.exports = defineConfig([...nodeProfile]); From a532f59c755012fb372df7fca8d3f886ff534920 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 17:31:26 -0700 Subject: [PATCH 14/60] Add support for previous eslint versions back to lint plugin --- heft-plugins/heft-lint-plugin/src/Eslint.ts | 145 +++++++++++++----- .../heft-lint-plugin/src/LintPlugin.ts | 58 +------ heft-plugins/heft-lint-plugin/src/Tslint.ts | 11 ++ 3 files changed, 123 insertions(+), 91 deletions(-) diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index 3c941fc07bd..e6bddb3addd 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -1,19 +1,22 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. +import path from 'node:path'; import { createHash, type Hash } from 'crypto'; import { performance } from 'perf_hooks'; import type * as TTypescript from 'typescript'; 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; } @@ -49,7 +52,9 @@ async function patchTimerAsync(eslintPackagePath: string, timingsMap: Map { - private readonly _eslintPackage: typeof TEslint; - private readonly _linter: TEslint.ESLint; +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) { @@ -97,44 +117,98 @@ 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 an .eslintrc.js 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 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) => { - this._currentFixMessages.push(message); + fixFn = (message: TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this._currentFixMessages.push(message as any); return true; }; + } 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. + 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. - overrideConfig = { + 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(); @@ -150,13 +224,12 @@ export class Eslint extends LinterBase { } public override printVersionHeader(): void { - const linterVersion: string = this._eslintPackage.Linter.version; - this._terminal.writeLine(`Using ESLint version ${linterVersion}`); + const { version, major } = this._eslintPackageVersion; + this._terminal.writeLine(`Using ESLint version ${version}`); - const majorVersion: number = semver.major(linterVersion); - if (majorVersion < 9) { - throw new Error('Heft requires ESLint 9 or newer. Your ESLint version is too old'); - } else if (majorVersion > 9) { + if (major < 7) { + throw new Error('Heft requires ESLint 7 or newer. Your ESLint version is too old'); + } 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( @@ -166,7 +239,7 @@ export class Eslint extends LinterBase { } protected override async getCacheVersionAsync(): Promise { - return `${this._eslintPackage.Linter.version}_${process.version}`; + return `${this._eslintPackageVersion.version}_${process.version}`; } protected override async getSourceFileHashAsync(sourceFile: IExtendedSourceFile): Promise { @@ -177,7 +250,7 @@ export class Eslint extends LinterBase { // 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.__originalToJSON) { + if (sourceFileEslintConfiguration.toJSON && !sourceFileEslintConfiguration.__originalToJSON) { sourceFileEslintConfiguration.__originalToJSON = sourceFileEslintConfiguration.toJSON; sourceFileEslintConfiguration.toJSON = patchedToJSON.bind(sourceFileEslintConfiguration); } @@ -191,20 +264,20 @@ export class Eslint extends LinterBase { // 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')}}`; + return `${originalSourceFileHash}_${hash.digest('base64')}`; } protected override async lintFileAsync( sourceFile: TTypescript.SourceFile - ): Promise { - const lintResults: TEslint.ESLint.LintResult[] = await this._linter.lintText(sourceFile.text, { - filePath: sourceFile.fileName - }); + ): 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); } @@ -212,11 +285,11 @@ export class Eslint extends LinterBase { this._fixesPossible = this._fixesPossible || (!this._fix && - lintResults.some((lintResult: TEslint.ESLint.LintResult) => { + 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 || @@ -224,7 +297,8 @@ export class Eslint extends LinterBase { lintResult.errorCount > 0 || fixMessages.length > 0 ) { - trimmedLintResults.push(lintResult); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + trimmedLintResults.push(lintResult as any); } } @@ -256,7 +330,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)}`; @@ -306,8 +381,8 @@ export class Eslint extends LinterBase { } 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 665676cb2bd..5cd1121d24c 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, @@ -25,11 +24,6 @@ import type { IExtendedProgram, IExtendedSourceFile } from './internalTypings/Ty const PLUGIN_NAME: 'lint-plugin' = 'lint-plugin'; const TYPESCRIPT_PLUGIN_NAME: typeof TypeScriptPluginName = 'typescript-plugin'; const FIX_PARAMETER_NAME: string = '--fix'; -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'; interface ILintPluginOptions { alwaysFix?: boolean; @@ -134,7 +128,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', @@ -143,7 +137,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( @@ -208,52 +202,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 configPathCandidates: string[] = [ - `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_JS_FILENAME}`, - `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_CJS_FILENAME}`, - `${heftConfiguration.buildFolderPath}/${ESLINT_CONFIG_MJS_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('", "')}"`); - } else if (foundConfigs.length === 0) { - // Check for legacy .eslintrc.js and .eslintrc.cjs files - const legacyConfigPathCandidates: string[] = [ - `${heftConfiguration.buildFolderPath}/${LEGACY_ESLINTRC_JS_FILENAME}`, - `${heftConfiguration.buildFolderPath}/${LEGACY_ESLINTRC_CJS_FILENAME}` - ]; - const foundLegacyConfigs: string[] = ( - await Promise.all( - legacyConfigPathCandidates.map(async (p: string) => (await FileSystem.existsAsync(p)) && p) - ) - ).filter((p) => p !== false); - - if (foundLegacyConfigs.length !== 0) { - throw new Error( - 'Project contains non-flat ESLint configuration files. The ensure that all ESLint configurations are ' + - 'formatted using flat-config. For more information, see: ' + - 'https://eslint.org/blog/2023/10/flat-config-rollout-plans/' - ); - } - } - - return foundConfigs[0]; - } } 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. From 2220db335c8a22ec0f721630b2afb2d48e3a3b62 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 17:32:14 -0700 Subject: [PATCH 15/60] Fix eslint config for eslint 9 test --- build-tests/eslint-9-test/eslint.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-tests/eslint-9-test/eslint.config.js b/build-tests/eslint-9-test/eslint.config.js index a6c8d26e2b0..a3fe2d6d289 100644 --- a/build-tests/eslint-9-test/eslint.config.js +++ b/build-tests/eslint-9-test/eslint.config.js @@ -3,8 +3,8 @@ const { defineConfig } = require('eslint/config'); const typescriptEslintParser = require('@typescript-eslint/parser'); -const nodeTrustedToolProfile = require('local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool'); -const friendlyLocalsMixin = require('local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals'); +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 = defineConfig([ ...nodeTrustedToolProfile, From 962336281a7855c8e5cf2fef56e8e923996241e8 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 17:39:27 -0700 Subject: [PATCH 16/60] Rush update --- .../config/subspaces/default/pnpm-lock.yaml | 57 ++++++++----------- .../config/subspaces/default/repo-state.json | 4 +- 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index ea3b5e1bb5e..f834509399a 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -15244,7 +15244,7 @@ packages: define-properties: 1.2.1 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 @@ -16185,7 +16185,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==} @@ -16197,13 +16196,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==} @@ -17376,7 +17383,6 @@ packages: optional: true dependencies: ms: 2.1.3 - dev: false /debuglog@1.0.1: resolution: {integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==} @@ -17474,9 +17480,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==} @@ -17844,7 +17850,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==} @@ -18149,12 +18154,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==} @@ -18164,7 +18168,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 @@ -18209,7 +18213,6 @@ 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==} @@ -20319,7 +20322,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==} @@ -20336,7 +20338,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==} @@ -20361,7 +20362,7 @@ 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==} @@ -20575,12 +20576,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==} @@ -20687,7 +20687,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==} @@ -21383,7 +21382,7 @@ 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==} @@ -23424,7 +23423,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==} @@ -24255,7 +24253,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==} @@ -25476,7 +25473,7 @@ packages: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.9 - get-intrinsic: 1.2.4 + get-intrinsic: 1.3.0 iterate-value: 1.0.2 dev: true @@ -26592,7 +26589,7 @@ 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 @@ -27203,8 +27200,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: @@ -27307,7 +27304,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==} @@ -27317,7 +27313,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==} @@ -27328,7 +27323,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==} @@ -27348,7 +27342,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==} @@ -28767,7 +28760,7 @@ packages: 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 @@ -28788,7 +28781,7 @@ 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 @@ -28810,7 +28803,7 @@ packages: 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 @@ -29884,7 +29877,7 @@ 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: diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index e5e157b00f0..d036cdce750 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": "543a92cc45070b162c2c911f153d08e9577c2c5e", - "preferredVersionsHash": "54149ea3f01558a859c96dee2052b797d4defe68" + "pnpmShrinkwrapHash": "4efec418a3154395464daeaae1c25effe0b58a7e", + "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } From 4e0d5ac9257fb3ce4a0865d755437ba1560e5fa3 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 2 May 2025 17:43:41 -0700 Subject: [PATCH 17/60] Rush change --- .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-05-03-00-43.json | 10 ++++++++++ 15 files changed, 150 insertions(+) create mode 100644 common/changes/@microsoft/api-extractor-model/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/eslint-config/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/eslint-plugin-packlets/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/eslint-plugin-security/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/eslint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/heft-config-file/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/heft-lint-plugin/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/heft-node-rig/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/heft/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/node-core-library/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/operation-graph/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/rig-package/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/terminal/user-danade-UpdateEslint2_2025-05-03-00-43.json create mode 100644 common/changes/@rushstack/ts-command-line/user-danade-UpdateEslint2_2025-05-03-00-43.json 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/@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..0eb668b6877 --- /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-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-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/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/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-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..a34761956dc --- /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-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..d02b6cc6d0d --- /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.", + "type": "minor" + } + ], + "packageName": "@rushstack/heft-node-rig" +} \ 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/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/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/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/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 From 64d7ef8fb8f85821e2ab3303fc0171290d5dd099 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Mon, 5 May 2025 23:12:59 -0700 Subject: [PATCH 18/60] Update a bunch of packages to the new eslint --- libraries/localization-utilities/.eslintrc.js | 12 ---------- .../localization-utilities/eslint.config.js | 19 ++++++++++++++++ libraries/localization-utilities/package.json | 1 + libraries/typings-generator/.eslintrc.js | 12 ---------- libraries/typings-generator/eslint.config.js | 19 ++++++++++++++++ libraries/typings-generator/package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 1 + .../rush-buildxl-graph-plugin/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../rush-buildxl-graph-plugin/package.json | 1 + .../rush-http-build-cache-plugin/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../rush-http-build-cache-plugin/package.json | 1 + .../rush-litewatch-plugin/.eslintrc.js | 13 ----------- .../rush-litewatch-plugin/eslint.config.js | 21 ++++++++++++++++++ .../rush-litewatch-plugin/package.json | 1 + .../rush-redis-cobuild-plugin/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../rush-redis-cobuild-plugin/package.json | 1 + .../rush-resolver-cache-plugin/.eslintrc.js | 13 ----------- .../eslint.config.js | 21 ++++++++++++++++++ .../rush-resolver-cache-plugin/package.json | 1 + rush-plugins/rush-serve-plugin/.eslintrc.js | 13 ----------- .../rush-serve-plugin/eslint.config.js | 21 ++++++++++++++++++ rush-plugins/rush-serve-plugin/package.json | 1 + .../rush-vscode-extension/.eslintrc.js | 13 ----------- .../rush-vscode-extension/eslint.config.js | 22 +++++++++++++++++++ .../rush-vscode-extension/package.json | 3 ++- .../hashed-folder-copy-plugin/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../hashed-folder-copy-plugin/package.json | 1 + .../loader-load-themed-styles/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../loader-load-themed-styles/package.json | 5 +++-- webpack/loader-raw-script/.eslintrc.js | 12 ---------- webpack/loader-raw-script/eslint.config.js | 19 ++++++++++++++++ webpack/loader-raw-script/package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 1 + .../webpack-deep-imports-plugin/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../webpack-deep-imports-plugin/package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 1 + webpack/webpack-plugin-utilities/.eslintrc.js | 12 ---------- .../webpack-plugin-utilities/eslint.config.js | 19 ++++++++++++++++ webpack/webpack-plugin-utilities/package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 1 + .../webpack4-localization-plugin/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../webpack4-localization-plugin/package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 7 +++--- .../webpack5-localization-plugin/.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../webpack5-localization-plugin/package.json | 1 + .../.eslintrc.js | 12 ---------- .../eslint.config.js | 19 ++++++++++++++++ .../package.json | 1 + 72 files changed, 495 insertions(+), 298 deletions(-) delete mode 100644 libraries/localization-utilities/.eslintrc.js create mode 100644 libraries/localization-utilities/eslint.config.js delete mode 100644 libraries/typings-generator/.eslintrc.js create mode 100644 libraries/typings-generator/eslint.config.js delete mode 100644 rush-plugins/rush-azure-storage-build-cache-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-azure-storage-build-cache-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-buildxl-graph-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-buildxl-graph-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-http-build-cache-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-http-build-cache-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-litewatch-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-litewatch-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-redis-cobuild-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-redis-cobuild-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-resolver-cache-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-resolver-cache-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-serve-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-serve-plugin/eslint.config.js delete mode 100644 vscode-extensions/rush-vscode-extension/.eslintrc.js create mode 100644 vscode-extensions/rush-vscode-extension/eslint.config.js delete mode 100644 webpack/hashed-folder-copy-plugin/.eslintrc.js create mode 100644 webpack/hashed-folder-copy-plugin/eslint.config.js delete mode 100644 webpack/loader-load-themed-styles/.eslintrc.js create mode 100644 webpack/loader-load-themed-styles/eslint.config.js delete mode 100644 webpack/loader-raw-script/.eslintrc.js create mode 100644 webpack/loader-raw-script/eslint.config.js delete mode 100644 webpack/preserve-dynamic-require-plugin/.eslintrc.js create mode 100644 webpack/preserve-dynamic-require-plugin/eslint.config.js delete mode 100644 webpack/set-webpack-public-path-plugin/.eslintrc.js create mode 100644 webpack/set-webpack-public-path-plugin/eslint.config.js delete mode 100644 webpack/webpack-deep-imports-plugin/.eslintrc.js create mode 100644 webpack/webpack-deep-imports-plugin/eslint.config.js delete mode 100644 webpack/webpack-embedded-dependencies-plugin/.eslintrc.js create mode 100644 webpack/webpack-embedded-dependencies-plugin/eslint.config.js delete mode 100644 webpack/webpack-plugin-utilities/.eslintrc.js create mode 100644 webpack/webpack-plugin-utilities/eslint.config.js delete mode 100644 webpack/webpack-workspace-resolve-plugin/.eslintrc.js create mode 100644 webpack/webpack-workspace-resolve-plugin/eslint.config.js delete mode 100644 webpack/webpack4-localization-plugin/.eslintrc.js create mode 100644 webpack/webpack4-localization-plugin/eslint.config.js delete mode 100644 webpack/webpack4-module-minifier-plugin/.eslintrc.js create mode 100644 webpack/webpack4-module-minifier-plugin/eslint.config.js delete mode 100644 webpack/webpack5-load-themed-styles-loader/.eslintrc.js create mode 100644 webpack/webpack5-load-themed-styles-loader/eslint.config.js delete mode 100644 webpack/webpack5-localization-plugin/.eslintrc.js create mode 100644 webpack/webpack5-localization-plugin/eslint.config.js delete mode 100644 webpack/webpack5-module-minifier-plugin/.eslintrc.js create mode 100644 webpack/webpack5-module-minifier-plugin/eslint.config.js 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..e1662ed03d3 --- /dev/null +++ b/libraries/localization-utilities/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/libraries/localization-utilities/package.json b/libraries/localization-utilities/package.json index 73db4b5b277..e3883521fd5 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/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..e1662ed03d3 --- /dev/null +++ b/libraries/typings-generator/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/libraries/typings-generator/package.json b/libraries/typings-generator/package.json index 06a5300a3cb..b1756014602 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/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..e1662ed03d3 --- /dev/null +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 118635a9744..6adf8dd6048 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-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..e1662ed03d3 --- /dev/null +++ b/rush-plugins/rush-buildxl-graph-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 ad864705cc9..3c00e951c32 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-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..e1662ed03d3 --- /dev/null +++ b/rush-plugins/rush-http-build-cache-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 256e1646804..182055f3f2e 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..50face04735 --- /dev/null +++ b/rush-plugins/rush-litewatch-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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-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..e1662ed03d3 --- /dev/null +++ b/rush-plugins/rush-redis-cobuild-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 1335d51ded8..3e38955e369 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..50face04735 --- /dev/null +++ b/rush-plugins/rush-resolver-cache-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 f63180e25ae..48a7d149ba4 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-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..50face04735 --- /dev/null +++ b/rush-plugins/rush-serve-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 ff1a208199b..53b740f84a6 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/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..4a7834e92ea --- /dev/null +++ b/vscode-extensions/rush-vscode-extension/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/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..e1662ed03d3 --- /dev/null +++ b/webpack/hashed-folder-copy-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 1dc0aa52dc9..5e5e6c64f55 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/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..e1662ed03d3 --- /dev/null +++ b/webpack/loader-load-themed-styles/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 dfd745d12e6..1576aa9e041 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..e1662ed03d3 --- /dev/null +++ b/webpack/loader-raw-script/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 50666404c7e..c8b49c30290 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..e1662ed03d3 --- /dev/null +++ b/webpack/preserve-dynamic-require-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 45e08bcc5bb..7a923ba761b 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..e1662ed03d3 --- /dev/null +++ b/webpack/set-webpack-public-path-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 0f78831b27a..5c06b2006b4 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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack-deep-imports-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack-embedded-dependencies-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 1ec3ffeec49..fb42f0b7888 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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack-plugin-utilities/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 7897249a324..9ddafb230fd 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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack-workspace-resolve-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 64a64946076..d75a4401e6a 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/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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack4-localization-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 2685f814d24..2b7504f066b 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-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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack4-module-minifier-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 d4e35220e27..1253bee5641 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/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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack5-load-themed-styles-loader/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 5b1cb5e72d6..d295f16b308 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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack5-localization-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 04d7f24c28f..405bd1644dc 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..e1662ed03d3 --- /dev/null +++ b/webpack/webpack5-module-minifier-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 c0b0c7707c9..3dc8601a0ce 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" From e89d1210cdb1c54444ec4c0753dcd5988d513a9f Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Mon, 5 May 2025 23:13:23 -0700 Subject: [PATCH 19/60] Fix a rule disablement --- eslint/eslint-config/flat/profile/node-trusted-tool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eslint/eslint-config/flat/profile/node-trusted-tool.js b/eslint/eslint-config/flat/profile/node-trusted-tool.js index 0e912db0cb4..4109a60f32f 100644 --- a/eslint/eslint-config/flat/profile/node-trusted-tool.js +++ b/eslint/eslint-config/flat/profile/node-trusted-tool.js @@ -21,7 +21,7 @@ module.exports = defineConfig([ files: ['**/*.ts', '**/*.tsx'], rules: { // This is disabled for trusted tools because the tool is known to be safe. - '@rushstack/security/no-unsafe-regex': 'off' + '@rushstack/security/no-unsafe-regexp': 'off' } } ]); From 89d697908aa5b63613a011164e982c31e649e17a Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Mon, 5 May 2025 23:19:36 -0700 Subject: [PATCH 20/60] Simplify linter --- .../heft-lint-plugin/src/LintPlugin.ts | 113 ++++++++++-------- 1 file changed, 65 insertions(+), 48 deletions(-) diff --git a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts index 5cd1121d24c..62f72e448b5 100644 --- a/heft-plugins/heft-lint-plugin/src/LintPlugin.ts +++ b/heft-plugins/heft-lint-plugin/src/LintPlugin.ts @@ -15,6 +15,7 @@ import type { IChangedFilesHookOptions, ITypeScriptPluginAccessor } from '@rushstack/heft-typescript-plugin'; +import { AlreadyReportedError } from '@rushstack/node-core-library'; import type { LinterBase } from './LinterBase'; import { Eslint } from './Eslint'; @@ -22,6 +23,8 @@ 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'; @@ -40,8 +43,6 @@ interface ILintOptions { } export default class LintPlugin implements IHeftTaskPlugin { - private readonly _lintingPromises: Promise[] = []; - // These are initliazed by _initAsync private _initPromise!: Promise; private _eslintToolPath: string | undefined; @@ -56,61 +57,77 @@ export default class LintPlugin implements IHeftTaskPlugin { ): void { // 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) { - let fix: boolean = - pluginOptions?.alwaysFix || taskSession.parameters.getFlagParameter(FIX_PARAMETER_NAME).value; - if (fix && taskSession.parameters.production) { - // Write this as a standard output message since we don't want to throw errors when running in - // production mode and "alwaysFix" is specified in the plugin options - taskSession.logger.terminal.writeLine( - 'Fix mode has been disabled since Heft is running in production mode' - ); - fix = false; - } - - const relativeSarifLogPath: string | undefined = pluginOptions?.sarifLogPath; - const sarifLogPath: string | undefined = - relativeSarifLogPath && path.resolve(heftConfiguration.buildFolderPath, relativeSarifLogPath); - - // 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 - }); - // Hold on to the original promise, which will throw in the run hook if it unexpectedly fails - this._lintingPromises.push(lintingPromise); - } - ); + if (taskSession.parameters.watch) { + let warningPrinted: boolean = false; + taskSession.hooks.run.tapPromise(PLUGIN_NAME, async () => { + if (warningPrinted) { + return; } + + // Warn since don't run the linters when in watch mode. + taskSession.logger.terminal.writeWarningLine("Linting isn't currently supported in watch mode"); + warningPrinted = true; + }); + return; + } + + const { alwaysFix, sarifLogPath } = pluginOptions || {}; + let fix: boolean = alwaysFix || taskSession.parameters.getFlagParameter(FIX_PARAMETER_NAME).value; + if (fix && taskSession.parameters.production) { + // Write this as a standard output message since we don't want to throw errors when running in + // production mode and "alwaysFix" is specified in the plugin options + taskSession.logger.terminal.writeLine( + 'Fix mode has been disabled since Heft is running in production mode' ); + fix = false; } - let warningPrinted: boolean = false; + const resolvedSarifLogPath: string | undefined = + sarifLogPath && path.resolve(heftConfiguration.buildFolderPath, sarifLogPath); + + // 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) => { + // 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) => { + typescriptChangedFiles.push([ + changedFilesHookOptions.program as IExtendedProgram, + changedFilesHookOptions.changedFiles as ReadonlySet + ]); + }); + } + ); 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 (warningPrinted) { - return; + for (const [tsProgram, changedFiles] of typescriptChangedFiles) { + try { + await this._lintAsync({ + taskSession, + heftConfiguration, + tsProgram, + changedFiles, + fix, + sarifLogPath: resolvedSarifLogPath + }); + } catch (error) { + if (!(error instanceof AlreadyReportedError)) { + taskSession.logger.emitError(error as Error); + } } - 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 { - await Promise.all(this._lintingPromises); + // 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(); } }); } From 953e09b784255b512a9377c7ccd51808afbe4bcf Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 12:48:58 -0700 Subject: [PATCH 21/60] Update projects that consume local-eslint-config --- .../heft-node-basic-tutorial/.eslintrc.js | 9 --------- .../heft-node-basic-tutorial/eslint.config.js | 17 +++++++++++++++++ .../heft-node-basic-tutorial/package.json | 4 ++-- .../heft-node-jest-tutorial/.eslintrc.js | 9 --------- .../heft-node-jest-tutorial/eslint.config.js | 17 +++++++++++++++++ .../heft-node-jest-tutorial/package.json | 4 ++-- .../heft-node-rig-tutorial/.eslintrc.js | 9 --------- .../heft-node-rig-tutorial/eslint.config.js | 17 +++++++++++++++++ .../heft-node-rig-tutorial/package.json | 3 ++- .../.eslintrc.js | 9 --------- .../eslint.config.js | 19 +++++++++++++++++++ .../package.json | 8 ++++---- .../heft-web-rig-app-tutorial/.eslintrc.js | 9 --------- .../eslint.config.js | 19 +++++++++++++++++++ .../heft-web-rig-app-tutorial/package.json | 9 +++++---- .../.eslintrc.js | 9 --------- .../eslint.config.js | 19 +++++++++++++++++++ .../package.json | 5 +++-- .../heft-webpack-basic-tutorial/.eslintrc.js | 9 --------- .../eslint.config.js | 19 +++++++++++++++++++ .../heft-webpack-basic-tutorial/package.json | 6 +++--- .../heft-example-plugin-01/.eslintrc.js | 9 --------- .../heft-example-plugin-01/eslint.config.js | 19 +++++++++++++++++++ .../heft-example-plugin-01/package.json | 4 ++-- .../heft-example-plugin-02/.eslintrc.js | 9 --------- .../heft-example-plugin-02/eslint.config.js | 19 +++++++++++++++++++ .../heft-example-plugin-02/package.json | 4 ++-- build-tests/heft-fastify-test/.eslintrc.js | 9 --------- .../heft-fastify-test/eslint.config.js | 17 +++++++++++++++++ build-tests/heft-fastify-test/package.json | 4 ++-- .../heft-jest-preset-test/.eslintrc.js | 9 --------- .../heft-jest-preset-test/eslint.config.js | 17 +++++++++++++++++ .../heft-jest-preset-test/package.json | 4 ++-- .../heft-jest-reporters-test/.eslintrc.js | 9 --------- .../heft-jest-reporters-test/eslint.config.js | 17 +++++++++++++++++ .../heft-jest-reporters-test/package.json | 6 +++--- .../.eslintrc.cjs | 9 --------- .../eslint.config.js | 17 +++++++++++++++++ .../package.json | 4 ++-- .../heft-node-everything-test/.eslintrc.js | 9 --------- .../eslint.config.js | 17 +++++++++++++++++ .../heft-node-everything-test/package.json | 4 ++-- .../heft-parameter-plugin/.eslintrc.js | 9 --------- .../heft-parameter-plugin/eslint.config.js | 19 +++++++++++++++++++ .../heft-parameter-plugin/package.json | 4 ++-- build-tests/heft-sass-test/.eslintrc.js | 9 --------- build-tests/heft-sass-test/eslint.config.js | 19 +++++++++++++++++++ build-tests/heft-sass-test/package.json | 2 +- .../.eslintrc.js | 9 --------- .../eslint.config.js | 18 ++++++++++++++++++ .../package.json | 4 ++-- .../.eslintrc.js | 9 --------- .../eslint.config.js | 17 +++++++++++++++++ .../package.json | 2 +- .../.eslintrc.js | 9 --------- .../eslint.config.js | 17 +++++++++++++++++ .../package.json | 2 +- 57 files changed, 383 insertions(+), 211 deletions(-) delete mode 100644 build-tests-samples/heft-node-basic-tutorial/.eslintrc.js create mode 100644 build-tests-samples/heft-node-basic-tutorial/eslint.config.js delete mode 100644 build-tests-samples/heft-node-jest-tutorial/.eslintrc.js create mode 100644 build-tests-samples/heft-node-jest-tutorial/eslint.config.js delete mode 100644 build-tests-samples/heft-node-rig-tutorial/.eslintrc.js create mode 100644 build-tests-samples/heft-node-rig-tutorial/eslint.config.js delete mode 100644 build-tests-samples/heft-storybook-react-tutorial/.eslintrc.js create mode 100644 build-tests-samples/heft-storybook-react-tutorial/eslint.config.js delete mode 100644 build-tests-samples/heft-web-rig-app-tutorial/.eslintrc.js create mode 100644 build-tests-samples/heft-web-rig-app-tutorial/eslint.config.js delete mode 100644 build-tests-samples/heft-web-rig-library-tutorial/.eslintrc.js create mode 100644 build-tests-samples/heft-web-rig-library-tutorial/eslint.config.js delete mode 100644 build-tests-samples/heft-webpack-basic-tutorial/.eslintrc.js create mode 100644 build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js delete mode 100644 build-tests/heft-example-plugin-01/.eslintrc.js create mode 100644 build-tests/heft-example-plugin-01/eslint.config.js delete mode 100644 build-tests/heft-example-plugin-02/.eslintrc.js create mode 100644 build-tests/heft-example-plugin-02/eslint.config.js delete mode 100644 build-tests/heft-fastify-test/.eslintrc.js create mode 100644 build-tests/heft-fastify-test/eslint.config.js delete mode 100644 build-tests/heft-jest-preset-test/.eslintrc.js create mode 100644 build-tests/heft-jest-preset-test/eslint.config.js delete mode 100644 build-tests/heft-jest-reporters-test/.eslintrc.js create mode 100644 build-tests/heft-jest-reporters-test/eslint.config.js delete mode 100644 build-tests/heft-node-everything-esm-module-test/.eslintrc.cjs create mode 100644 build-tests/heft-node-everything-esm-module-test/eslint.config.js delete mode 100644 build-tests/heft-node-everything-test/.eslintrc.js create mode 100644 build-tests/heft-node-everything-test/eslint.config.js delete mode 100644 build-tests/heft-parameter-plugin/.eslintrc.js create mode 100644 build-tests/heft-parameter-plugin/eslint.config.js delete mode 100644 build-tests/heft-sass-test/.eslintrc.js create mode 100644 build-tests/heft-sass-test/eslint.config.js delete mode 100644 build-tests/heft-typescript-composite-test/.eslintrc.js create mode 100644 build-tests/heft-typescript-composite-test/eslint.config.js delete mode 100644 build-tests/heft-webpack4-everything-test/.eslintrc.js create mode 100644 build-tests/heft-webpack4-everything-test/eslint.config.js delete mode 100644 build-tests/heft-webpack5-everything-test/.eslintrc.js create mode 100644 build-tests/heft-webpack5-everything-test/eslint.config.js 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..2a15ea7f46b --- /dev/null +++ b/build-tests-samples/heft-node-basic-tutorial/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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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..2a15ea7f46b --- /dev/null +++ b/build-tests-samples/heft-node-jest-tutorial/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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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..2a15ea7f46b --- /dev/null +++ b/build-tests-samples/heft-node-rig-tutorial/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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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-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..7829878c089 --- /dev/null +++ b/build-tests-samples/heft-storybook-react-tutorial/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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = defineConfig([ + ...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..7829878c089 --- /dev/null +++ b/build-tests-samples/heft-web-rig-app-tutorial/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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = defineConfig([ + ...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..7829878c089 --- /dev/null +++ b/build-tests-samples/heft-web-rig-library-tutorial/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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = defineConfig([ + ...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..7829878c089 --- /dev/null +++ b/build-tests-samples/heft-webpack-basic-tutorial/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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = defineConfig([ + ...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/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..f3eea545808 --- /dev/null +++ b/build-tests/heft-example-plugin-01/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 { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([ + ...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..f3eea545808 --- /dev/null +++ b/build-tests/heft-example-plugin-02/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 { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([ + ...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..2a15ea7f46b --- /dev/null +++ b/build-tests/heft-fastify-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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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..2a15ea7f46b --- /dev/null +++ b/build-tests/heft-jest-preset-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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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..2a15ea7f46b --- /dev/null +++ b/build-tests/heft-jest-reporters-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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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.js b/build-tests/heft-node-everything-esm-module-test/eslint.config.js new file mode 100644 index 00000000000..2a15ea7f46b --- /dev/null +++ b/build-tests/heft-node-everything-esm-module-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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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..2a15ea7f46b --- /dev/null +++ b/build-tests/heft-node-everything-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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...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 c85e317f85b..c62593212d8 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,9 +21,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-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..f3eea545808 --- /dev/null +++ b/build-tests/heft-parameter-plugin/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 { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([ + ...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..7829878c089 --- /dev/null +++ b/build-tests/heft-sass-test/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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = defineConfig([ + ...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-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..c408705a1b0 --- /dev/null +++ b/build-tests/heft-typescript-composite-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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([ + ...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-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..54c599ea1b8 --- /dev/null +++ b/build-tests/heft-webpack4-everything-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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([ + ...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..54c599ea1b8 --- /dev/null +++ b/build-tests/heft-webpack5-everything-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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([ + ...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", From 55af9c1bdc54e757812549844ee68051ddcfd87e Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 12:55:44 -0700 Subject: [PATCH 22/60] Undo changes to web rig --- .../profiles/app/includes/eslint/mixins/friendly-locals.js | 7 +++---- .../profiles/app/includes/eslint/mixins/packlets.js | 7 +++---- .../profiles/app/includes/eslint/mixins/react.js | 7 +++---- .../profiles/app/includes/eslint/mixins/tsdoc.js | 7 +++---- .../includes/eslint/patch/custom-config-package-names.js | 4 ++++ .../app/includes/eslint/patch/modern-module-resolution.js | 4 ++++ .../profiles/app/includes/eslint/profile/web-app.js | 7 +++---- .../library/includes/eslint/mixins/friendly-locals.js | 7 +++---- .../profiles/library/includes/eslint/mixins/packlets.js | 7 +++---- .../profiles/library/includes/eslint/mixins/react.js | 7 +++---- .../profiles/library/includes/eslint/mixins/tsdoc.js | 7 +++---- .../includes/eslint/patch/custom-config-package-names.js | 4 ++++ .../includes/eslint/patch/modern-module-resolution.js | 4 ++++ .../profiles/library/includes/eslint/profile/web-app.js | 7 +++---- 14 files changed, 46 insertions(+), 40 deletions(-) create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js index 5b6f9c2bf46..8ce8a5a50f1 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js @@ -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. -const { defineConfig } = require('eslint/config'); -const friendlyLocalsConfig = require('local-eslint-config/mixins/friendly-locals'); - -module.exports = defineConfig([...friendlyLocalsConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/friendly-locals'] +}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js index 5115cc2be98..34121152062 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js @@ -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. -const { defineConfig } = require('eslint/config'); -const packletsConfig = require('local-eslint-config/mixins/packlets'); - -module.exports = defineConfig([...packletsConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/packlets'] +}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js index 7bc2eeb2fa4..32d2625068b 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js @@ -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. -const { defineConfig } = require('eslint/config'); -const reactConfig = require('local-eslint-config/mixins/react'); - -module.exports = defineConfig([...reactConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/react'] +}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js index 02e61e7b327..48a832eef64 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js @@ -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. -const { defineConfig } = require('eslint/config'); -const tsdocConfig = require('local-eslint-config/mixins/tsdoc'); - -module.exports = defineConfig([...tsdocConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/tsdoc'] +}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js b/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js new file mode 100644 index 00000000000..831b7c639fb --- /dev/null +++ b/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.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('local-eslint-config/patch/custom-config-package-names'); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js b/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js new file mode 100644 index 00000000000..a262ef96af5 --- /dev/null +++ b/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.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('local-eslint-config/patch/modern-module-resolution'); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js index 20e483483ad..6753941a378 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js @@ -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. -const { defineConfig } = require('eslint/config'); -const webAppConfig = require('local-eslint-config/profile/web-app'); - -module.exports = defineConfig([...webAppConfig]); +module.exports = { + extends: ['local-eslint-config/profile/web-app'] +}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js index 5b6f9c2bf46..8ce8a5a50f1 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js @@ -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. -const { defineConfig } = require('eslint/config'); -const friendlyLocalsConfig = require('local-eslint-config/mixins/friendly-locals'); - -module.exports = defineConfig([...friendlyLocalsConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/friendly-locals'] +}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js index 5115cc2be98..34121152062 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js @@ -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. -const { defineConfig } = require('eslint/config'); -const packletsConfig = require('local-eslint-config/mixins/packlets'); - -module.exports = defineConfig([...packletsConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/packlets'] +}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js index 7bc2eeb2fa4..32d2625068b 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js @@ -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. -const { defineConfig } = require('eslint/config'); -const reactConfig = require('local-eslint-config/mixins/react'); - -module.exports = defineConfig([...reactConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/react'] +}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js index 02e61e7b327..48a832eef64 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js @@ -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. -const { defineConfig } = require('eslint/config'); -const tsdocConfig = require('local-eslint-config/mixins/tsdoc'); - -module.exports = defineConfig([...tsdocConfig]); +module.exports = { + extends: ['local-eslint-config/mixins/tsdoc'] +}; 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 new file mode 100644 index 00000000000..831b7c639fb --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.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('local-eslint-config/patch/custom-config-package-names'); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js b/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js new file mode 100644 index 00000000000..a262ef96af5 --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.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('local-eslint-config/patch/modern-module-resolution'); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js index 20e483483ad..6753941a378 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js @@ -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. -const { defineConfig } = require('eslint/config'); -const webAppConfig = require('local-eslint-config/profile/web-app'); - -module.exports = defineConfig([...webAppConfig]); +module.exports = { + extends: ['local-eslint-config/profile/web-app'] +}; From 3ec636a0b6a55fd434df44950b1e0dc0ad6f271a Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 12:56:13 -0700 Subject: [PATCH 23/60] Add flat config versions to the web rig --- .../app/includes/eslint/flat/mixins/friendly-locals.js | 7 +++++++ .../profiles/app/includes/eslint/flat/mixins/packlets.js | 7 +++++++ .../profiles/app/includes/eslint/flat/mixins/react.js | 7 +++++++ .../profiles/app/includes/eslint/flat/mixins/tsdoc.js | 7 +++++++ .../profiles/app/includes/eslint/flat/profile/web-app.js | 7 +++++++ .../library/includes/eslint/flat/mixins/friendly-locals.js | 7 +++++++ .../library/includes/eslint/flat/mixins/packlets.js | 7 +++++++ .../profiles/library/includes/eslint/flat/mixins/react.js | 7 +++++++ .../profiles/library/includes/eslint/flat/mixins/tsdoc.js | 7 +++++++ .../library/includes/eslint/flat/profile/web-app.js | 7 +++++++ 10 files changed, 70 insertions(+) create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/react.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js new file mode 100644 index 00000000000..01460747289 --- /dev/null +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([...friendlyLocalsMixin]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js new file mode 100644 index 00000000000..c906babf0ba --- /dev/null +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); + +module.exports = defineConfig([...packletsMixin]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js new file mode 100644 index 00000000000..43271b52f6d --- /dev/null +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = defineConfig([...reactMixin]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js new file mode 100644 index 00000000000..1634743ff68 --- /dev/null +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocMixin]); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js new file mode 100644 index 00000000000..6fbf201afe0 --- /dev/null +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([...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..01460747289 --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([...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..c906babf0ba --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); + +module.exports = defineConfig([...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..43271b52f6d --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/react.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const reactMixin = require('local-eslint-config/flat/mixins/react'); + +module.exports = defineConfig([...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..1634743ff68 --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocMixin]); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js new file mode 100644 index 00000000000..6fbf201afe0 --- /dev/null +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([...webAppProfile]); From 6fea2e04a5ece69ef434e705e9dd8d3be78286a3 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 13:18:42 -0700 Subject: [PATCH 24/60] Update consumers of local-web-rig --- apps/lockfile-explorer-web/.eslintrc.js | 12 - apps/lockfile-explorer-web/eslint.config.js | 19 ++ apps/lockfile-explorer-web/package.json | 3 +- .../build-tests-subspace/pnpm-lock.yaml | 24 +- .../build-tests-subspace/repo-state.json | 4 +- .../config/subspaces/default/pnpm-lock.yaml | 210 +++++++++++++----- .../config/subspaces/default/repo-state.json | 4 +- libraries/load-themed-styles/.eslintrc.js | 12 - libraries/load-themed-styles/eslint.config.js | 19 ++ libraries/load-themed-styles/package.json | 1 + libraries/rush-themed-ui/.eslintrc.js | 12 - libraries/rush-themed-ui/eslint.config.js | 19 ++ libraries/rush-themed-ui/package.json | 15 +- rigs/local-web-rig/package.json | 2 +- .../rush-vscode-command-webview/.eslintrc.js | 12 - .../eslint.config.js | 19 ++ .../rush-vscode-command-webview/package.json | 10 +- 17 files changed, 259 insertions(+), 138 deletions(-) delete mode 100644 apps/lockfile-explorer-web/.eslintrc.js create mode 100644 apps/lockfile-explorer-web/eslint.config.js delete mode 100644 libraries/load-themed-styles/.eslintrc.js create mode 100644 libraries/load-themed-styles/eslint.config.js delete mode 100644 libraries/rush-themed-ui/.eslintrc.js create mode 100644 libraries/rush-themed-ui/eslint.config.js delete mode 100644 vscode-extensions/rush-vscode-command-webview/.eslintrc.js create mode 100644 vscode-extensions/rush-vscode-command-webview/eslint.config.js 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..968377e406a --- /dev/null +++ b/apps/lockfile-explorer-web/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 4dcb53ef2f1..8c4d78b75fa 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -114,10 +114,10 @@ importers: 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.3)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.5)(@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.3)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.5)(@types/node@20.17.19) eslint: specifier: ~9.25.1 version: 9.25.1 @@ -6787,7 +6787,7 @@ packages: - typescript dev: true - file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.3)(@types/node@20.17.19): + file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.5)(@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' @@ -6801,7 +6801,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.3)(@types/node@20.17.19)(jest-environment-node@29.5.0): + file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.5)(@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' @@ -6836,7 +6836,7 @@ packages: - ts-node dev: true - file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.3)(@types/node@20.17.19): + file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.5)(@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' @@ -6851,7 +6851,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.3)(@types/node@20.17.19): + file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.5)(@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' @@ -7076,7 +7076,7 @@ packages: transitivePeerDependencies: - '@types/node' - file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.3)(@types/node@20.17.19): + file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.5)(@types/node@20.17.19): resolution: {directory: ../../../rigs/heft-node-rig, type: directory} id: file:../../../rigs/heft-node-rig name: '@rushstack/heft-node-rig' @@ -7086,10 +7086,10 @@ packages: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) '@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.3)(@types/node@20.17.19) - '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.3)(@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.3)(@types/node@20.17.19) - '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.3)(@types/node@20.17.19) + '@rushstack/heft-api-extractor-plugin': file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.5)(@types/node@20.17.19) + '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.5)(@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.5)(@types/node@20.17.19) + '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.5)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 eslint: 9.25.1 jest-environment-node: 29.5.0 @@ -7110,7 +7110,7 @@ packages: dependencies: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) '@rushstack/heft': file:../../../apps/heft(@types/node@20.17.19) - '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.3)(@types/node@20.17.19) + '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.5)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 '@types/node': 20.17.19 eslint: 9.25.1 diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 32a78c4a281..837398d410a 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": "66723d30c5555c15856aece8309d1f7c555f8be5", + "pnpmShrinkwrapHash": "bfa760b12a7289a53f0a792b51f909f0e85ad0e8", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "a4864cc684424f2f2d679b8bb77c11f1b0d5f8a8" + "packageJsonInjectedDependenciesHash": "b0569f874717cd3f37dba1a0c79f538dcf97b50e" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 595102b9239..5b723d005a9 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -282,6 +282,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 @@ -431,8 +434,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 @@ -461,8 +464,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 @@ -484,6 +487,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 @@ -583,7 +589,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 @@ -603,8 +609,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 @@ -668,7 +674,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) @@ -745,6 +751,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 @@ -776,6 +785,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 @@ -823,8 +835,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) @@ -1334,8 +1346,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 @@ -1358,8 +1370,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 @@ -1392,8 +1404,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 @@ -1422,8 +1434,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 @@ -1458,8 +1470,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 @@ -1533,8 +1545,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 @@ -1578,8 +1590,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 @@ -1615,8 +1627,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 @@ -1706,8 +1718,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) @@ -1793,8 +1805,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 @@ -1961,8 +1973,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) @@ -2024,8 +2036,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) @@ -3044,6 +3056,9 @@ importers: '@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 @@ -3072,6 +3087,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 @@ -3528,6 +3546,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 @@ -3632,6 +3653,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 @@ -3934,8 +3958,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 @@ -3995,6 +4019,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 @@ -4020,6 +4047,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 @@ -4045,6 +4075,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 @@ -4064,6 +4097,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 @@ -4089,6 +4125,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 @@ -4117,6 +4156,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 @@ -4175,6 +4217,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 @@ -4231,8 +4276,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) @@ -4294,6 +4339,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 @@ -4322,6 +4370,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 @@ -4350,6 +4401,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 @@ -4363,6 +4417,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 @@ -4372,6 +4429,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 @@ -4394,6 +4454,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 @@ -4413,6 +4476,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 @@ -4432,6 +4498,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 @@ -4457,6 +4526,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 @@ -4476,6 +4548,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 @@ -4525,6 +4600,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 @@ -4559,6 +4637,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 @@ -4583,6 +4664,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 @@ -4611,6 +4695,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 @@ -4645,6 +4732,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 @@ -11603,7 +11693,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) @@ -11681,17 +11771,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) @@ -11986,7 +12076,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 @@ -12024,7 +12114,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) @@ -12116,7 +12206,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 @@ -12288,7 +12378,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 @@ -12331,7 +12421,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 @@ -12364,7 +12454,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 @@ -12381,13 +12471,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) @@ -12437,7 +12527,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 @@ -12452,7 +12542,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 @@ -12500,7 +12590,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 @@ -12515,7 +12605,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) @@ -12622,7 +12712,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 @@ -12644,8 +12734,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) @@ -20050,7 +20140,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: @@ -20070,7 +20160,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 diff --git a/common/config/subspaces/default/repo-state.json b/common/config/subspaces/default/repo-state.json index bf53d6e721b..0ea47757597 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": "cffd2b8ab4cceebd7d5a02823e015b7eaabe89da", - "preferredVersionsHash": "54149ea3f01558a859c96dee2052b797d4defe68" + "pnpmShrinkwrapHash": "fedbb8ab58b802f1322b1dd21098e007199684a6", + "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9" } 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..abbbc0f994d --- /dev/null +++ b/libraries/load-themed-styles/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 459104591e3..69d41c802ce 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/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..53e8b8d093b --- /dev/null +++ b/libraries/rush-themed-ui/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/rigs/local-web-rig/package.json b/rigs/local-web-rig/package.json index 525067bc46e..9149477c479 100644 --- a/rigs/local-web-rig/package.json +++ b/rigs/local-web-rig/package.json @@ -15,7 +15,7 @@ "@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/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..1e1849783d3 --- /dev/null +++ b/vscode-extensions/rush-vscode-command-webview/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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" } } From d90a0cf5165ecad9c5cf0976096ad66eb5040080 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 14:58:48 -0700 Subject: [PATCH 25/60] Convert rigs --- .../default/includes/eslint/flat/mixins/friendly-locals.js | 7 +++++++ .../default/includes/eslint/flat/mixins/packlets.js | 7 +++++++ .../profiles/default/includes/eslint/flat/mixins/react.js | 7 +++++++ .../profiles/default/includes/eslint/flat/mixins/tsdoc.js | 7 +++++++ .../includes/eslint/flat/profile/node-trusted-tool.js | 7 +++++++ .../profiles/default/includes/eslint/flat/profile/node.js | 7 +++++++ .../default/includes/eslint/mixins/friendly-locals.js | 6 ------ .../profiles/default/includes/eslint/mixins/packlets.js | 6 ------ .../profiles/default/includes/eslint/mixins/react.js | 6 ------ .../profiles/default/includes/eslint/mixins/tsdoc.js | 6 ------ .../includes/eslint/patch/custom-config-package-names.js | 4 ---- .../includes/eslint/patch/modern-module-resolution.js | 4 ---- .../default/includes/eslint/profile/node-trusted-tool.js | 6 ------ .../profiles/default/includes/eslint/profile/node.js | 6 ------ .../app/includes/eslint/flat/mixins/friendly-locals.js | 7 +++++++ .../profiles/app/includes/eslint/flat/mixins/packlets.js | 7 +++++++ .../profiles/app/includes/eslint/flat/mixins/react.js | 7 +++++++ .../profiles/app/includes/eslint/flat/mixins/tsdoc.js | 7 +++++++ .../profiles/app/includes/eslint/flat/profile/web-app.js | 7 +++++++ .../profiles/app/includes/eslint/mixins/friendly-locals.js | 6 ------ .../profiles/app/includes/eslint/mixins/packlets.js | 6 ------ .../profiles/app/includes/eslint/mixins/react.js | 6 ------ .../profiles/app/includes/eslint/mixins/tsdoc.js | 6 ------ .../includes/eslint/patch/custom-config-package-names.js | 4 ---- .../app/includes/eslint/patch/modern-module-resolution.js | 4 ---- .../profiles/app/includes/eslint/profile/web-app.js | 6 ------ .../library/includes/eslint/flat/mixins/friendly-locals.js | 7 +++++++ .../library/includes/eslint/flat/mixins/packlets.js | 7 +++++++ .../profiles/library/includes/eslint/flat/mixins/react.js | 7 +++++++ .../profiles/library/includes/eslint/flat/mixins/tsdoc.js | 7 +++++++ .../library/includes/eslint/flat/profile/web-app.js | 7 +++++++ .../library/includes/eslint/mixins/friendly-locals.js | 6 ------ .../profiles/library/includes/eslint/mixins/packlets.js | 6 ------ .../profiles/library/includes/eslint/mixins/react.js | 6 ------ .../profiles/library/includes/eslint/mixins/tsdoc.js | 6 ------ .../includes/eslint/patch/custom-config-package-names.js | 4 ---- .../includes/eslint/patch/modern-module-resolution.js | 4 ---- .../profiles/library/includes/eslint/profile/web-app.js | 6 ------ 38 files changed, 112 insertions(+), 120 deletions(-) create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/react.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/packlets.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/react.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js delete mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/react.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js delete mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js delete mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/packlets.js delete mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/react.js delete mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js delete mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/profile/web-app.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/react.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js delete mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js delete mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/packlets.js delete mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/react.js delete mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js delete mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/profile/web-app.js 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..955de41c92b --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([...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..7d89c075615 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); + +module.exports = defineConfig([...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..b72013445cb --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/react.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); + +module.exports = defineConfig([...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..2a50a53170b --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocMixin]); 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..54635c3c6dd --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node-trusted-tool'); + +module.exports = defineConfig([...nodeTrustedToolProfile]); diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js new file mode 100644 index 00000000000..29fb1b52229 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); + +module.exports = defineConfig([...nodeProfile]); diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js deleted file mode 100644 index e6cbfeacc95..00000000000 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/friendly-locals'] -}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/packlets.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/packlets.js deleted file mode 100644 index 82a19efce16..00000000000 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/packlets.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/packlets'] -}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/react.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/react.js deleted file mode 100644 index 796699ee874..00000000000 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/react.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/react'] -}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js deleted file mode 100644 index d0a4b1d6a79..00000000000 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/tsdoc'] -}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 1fe7079f030..00000000000 --- a/rigs/heft-node-rig/profiles/default/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('@rushstack/eslint-config/patch/custom-config-package-names'); diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index 14e8d976c23..00000000000 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.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('@rushstack/eslint-config/patch/modern-module-resolution'); diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js b/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js deleted file mode 100644 index e5b291a3b08..00000000000 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/profile/node-trusted-tool'] -}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.js b/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.js deleted file mode 100644 index edd8dbb2cd2..00000000000 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/profile/node'] -}; 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..955de41c92b --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([...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..7d89c075615 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); + +module.exports = defineConfig([...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..b72013445cb --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/react.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); + +module.exports = defineConfig([...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..2a50a53170b --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocMixin]); 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..e0baeb8fabf --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([...webAppProfile]); diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js deleted file mode 100644 index e6cbfeacc95..00000000000 --- a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/friendly-locals'] -}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/packlets.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/packlets.js deleted file mode 100644 index 82a19efce16..00000000000 --- a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/packlets.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/packlets'] -}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/react.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/react.js deleted file mode 100644 index 796699ee874..00000000000 --- a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/react.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/react'] -}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js deleted file mode 100644 index d0a4b1d6a79..00000000000 --- a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/tsdoc'] -}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 1fe7079f030..00000000000 --- a/rigs/heft-web-rig/profiles/app/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('@rushstack/eslint-config/patch/custom-config-package-names'); diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index 14e8d976c23..00000000000 --- a/rigs/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.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('@rushstack/eslint-config/patch/modern-module-resolution'); diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/profile/web-app.js b/rigs/heft-web-rig/profiles/app/includes/eslint/profile/web-app.js deleted file mode 100644 index eaa661335e4..00000000000 --- a/rigs/heft-web-rig/profiles/app/includes/eslint/profile/web-app.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/profile/web-app'] -}; 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..955de41c92b --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/friendly-locals.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); + +module.exports = defineConfig([...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..7d89c075615 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/packlets.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); + +module.exports = defineConfig([...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..b72013445cb --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/react.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); + +module.exports = defineConfig([...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..2a50a53170b --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/mixins/tsdoc.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); + +module.exports = defineConfig([...tsdocMixin]); 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..e0baeb8fabf --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([...webAppProfile]); diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js deleted file mode 100644 index e6cbfeacc95..00000000000 --- a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/friendly-locals'] -}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/packlets.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/packlets.js deleted file mode 100644 index 82a19efce16..00000000000 --- a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/packlets.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/packlets'] -}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/react.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/react.js deleted file mode 100644 index 796699ee874..00000000000 --- a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/react.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/react'] -}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js deleted file mode 100644 index d0a4b1d6a79..00000000000 --- a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/mixins/tsdoc'] -}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 1fe7079f030..00000000000 --- a/rigs/heft-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('@rushstack/eslint-config/patch/custom-config-package-names'); diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index 14e8d976c23..00000000000 --- a/rigs/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.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('@rushstack/eslint-config/patch/modern-module-resolution'); diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/profile/web-app.js b/rigs/heft-web-rig/profiles/library/includes/eslint/profile/web-app.js deleted file mode 100644 index eaa661335e4..00000000000 --- a/rigs/heft-web-rig/profiles/library/includes/eslint/profile/web-app.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. -// See LICENSE in the project root for license information. - -module.exports = { - extends: ['@rushstack/eslint-config/profile/web-app'] -}; From 00839192dfcd576fdc816415a08f9b08ddf0bb4b Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 17:05:36 -0700 Subject: [PATCH 26/60] Convert more projects --- apps/api-documenter/.eslintrc.js | 21 ----- apps/api-documenter/eslint.config.js | 22 +++++ apps/api-documenter/package.json | 1 + apps/cpu-profile-summarizer/.eslintrc.js | 21 ----- apps/cpu-profile-summarizer/eslint.config.js | 22 +++++ apps/cpu-profile-summarizer/package.json | 1 + apps/lockfile-explorer/.eslintrc.js | 18 ---- apps/lockfile-explorer/eslint.config.js | 20 +++++ apps/lockfile-explorer/package.json | 1 + apps/rundown/.eslintrc.js | 21 ----- apps/rundown/eslint.config.js | 22 +++++ apps/rundown/package.json | 1 + apps/rush-mcp-server/.eslintrc.js | 12 --- apps/rush-mcp-server/eslint.config.js | 19 +++++ apps/rush-mcp-server/package.json | 1 + apps/rush/.eslintrc.js | 21 ----- apps/rush/eslint.config.js | 22 +++++ apps/rush/package.json | 1 + apps/trace-import/.eslintrc.js | 21 ----- apps/trace-import/eslint.config.js | 22 +++++ apps/trace-import/package.json | 1 + .../dist/tsdoc-metadata.json | 2 +- .../eslint.config.js | 17 ++++ .../heft-web-rig-library-test/package.json | 3 +- .../build-tests-subspace/repo-state.json | 2 +- .../config/subspaces/default/pnpm-lock.yaml | 83 ++++++++++++++++--- .../heft-dev-cert-plugin/.eslintrc.js | 12 --- .../heft-dev-cert-plugin/eslint.config.js | 19 +++++ .../heft-dev-cert-plugin/package.json | 4 +- .../.eslintrc.js | 12 --- .../eslint.config.js | 19 +++++ .../package.json | 4 +- heft-plugins/heft-sass-plugin/.eslintrc.js | 12 --- .../heft-sass-plugin/eslint.config.js | 19 +++++ heft-plugins/heft-sass-plugin/package.json | 4 +- .../heft-serverless-stack-plugin/.eslintrc.js | 12 --- .../eslint.config.js | 19 +++++ .../heft-serverless-stack-plugin/package.json | 1 + .../heft-storybook-plugin/.eslintrc.js | 12 --- .../heft-storybook-plugin/eslint.config.js | 19 +++++ .../heft-storybook-plugin/package.json | 1 + .../heft-webpack4-plugin/.eslintrc.js | 12 --- .../heft-webpack4-plugin/eslint.config.js | 19 +++++ .../heft-webpack4-plugin/package.json | 3 +- .../heft-webpack5-plugin/.eslintrc.js | 12 --- .../heft-webpack5-plugin/eslint.config.js | 19 +++++ .../heft-webpack5-plugin/package.json | 5 +- .../src/Webpack5Plugin.ts | 1 - .../debug-certificate-manager/.eslintrc.js | 12 --- .../eslint.config.js | 19 +++++ .../debug-certificate-manager/package.json | 1 + libraries/package-deps-hash/.eslintrc.js | 12 --- libraries/package-deps-hash/eslint.config.js | 19 +++++ libraries/package-deps-hash/package.json | 1 + libraries/package-extractor/.eslintrc.js | 13 --- libraries/package-extractor/eslint.config.js | 21 +++++ libraries/package-extractor/package.json | 2 +- libraries/rush-lib/.eslintrc.js | 12 --- libraries/rush-lib/eslint.config.js | 19 +++++ libraries/rush-lib/package.json | 1 + libraries/rushell/.eslintrc.js | 12 --- libraries/rushell/eslint.config.js | 19 +++++ libraries/rushell/package.json | 1 + libraries/stream-collator/.eslintrc.js | 12 --- libraries/stream-collator/eslint.config.js | 19 +++++ libraries/stream-collator/package.json | 1 + libraries/worker-pool/.eslintrc.js | 13 --- libraries/worker-pool/eslint.config.js | 21 +++++ libraries/worker-pool/package.json | 1 + .../doc-plugin-rush-stack/.eslintrc.js | 12 --- .../doc-plugin-rush-stack/eslint.config.js | 19 +++++ .../doc-plugin-rush-stack/package.json | 5 +- repo-scripts/repo-toolbox/.eslintrc.js | 12 --- repo-scripts/repo-toolbox/eslint.config.js | 19 +++++ repo-scripts/repo-toolbox/package.json | 5 +- rigs/heft-web-rig/package.json | 2 +- .../.eslintrc.js | 12 --- .../eslint.config.js | 19 +++++ .../package.json | 1 + 79 files changed, 605 insertions(+), 370 deletions(-) delete mode 100644 apps/api-documenter/.eslintrc.js create mode 100644 apps/api-documenter/eslint.config.js delete mode 100644 apps/cpu-profile-summarizer/.eslintrc.js create mode 100644 apps/cpu-profile-summarizer/eslint.config.js delete mode 100644 apps/lockfile-explorer/.eslintrc.js create mode 100644 apps/lockfile-explorer/eslint.config.js delete mode 100644 apps/rundown/.eslintrc.js create mode 100644 apps/rundown/eslint.config.js delete mode 100644 apps/rush-mcp-server/.eslintrc.js create mode 100644 apps/rush-mcp-server/eslint.config.js delete mode 100644 apps/rush/.eslintrc.js create mode 100644 apps/rush/eslint.config.js delete mode 100644 apps/trace-import/.eslintrc.js create mode 100644 apps/trace-import/eslint.config.js create mode 100644 build-tests/heft-web-rig-library-test/eslint.config.js delete mode 100644 heft-plugins/heft-dev-cert-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-dev-cert-plugin/eslint.config.js delete mode 100644 heft-plugins/heft-localization-typings-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-localization-typings-plugin/eslint.config.js delete mode 100644 heft-plugins/heft-sass-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-sass-plugin/eslint.config.js delete mode 100644 heft-plugins/heft-serverless-stack-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-serverless-stack-plugin/eslint.config.js delete mode 100644 heft-plugins/heft-storybook-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-storybook-plugin/eslint.config.js delete mode 100644 heft-plugins/heft-webpack4-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-webpack4-plugin/eslint.config.js delete mode 100644 heft-plugins/heft-webpack5-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-webpack5-plugin/eslint.config.js delete mode 100644 libraries/debug-certificate-manager/.eslintrc.js create mode 100644 libraries/debug-certificate-manager/eslint.config.js delete mode 100644 libraries/package-deps-hash/.eslintrc.js create mode 100644 libraries/package-deps-hash/eslint.config.js delete mode 100644 libraries/package-extractor/.eslintrc.js create mode 100644 libraries/package-extractor/eslint.config.js delete mode 100644 libraries/rush-lib/.eslintrc.js create mode 100644 libraries/rush-lib/eslint.config.js delete mode 100644 libraries/rushell/.eslintrc.js create mode 100644 libraries/rushell/eslint.config.js delete mode 100644 libraries/stream-collator/.eslintrc.js create mode 100644 libraries/stream-collator/eslint.config.js delete mode 100644 libraries/worker-pool/.eslintrc.js create mode 100644 libraries/worker-pool/eslint.config.js delete mode 100644 repo-scripts/doc-plugin-rush-stack/.eslintrc.js create mode 100644 repo-scripts/doc-plugin-rush-stack/eslint.config.js delete mode 100644 repo-scripts/repo-toolbox/.eslintrc.js create mode 100644 repo-scripts/repo-toolbox/eslint.config.js delete mode 100644 rush-plugins/rush-amazon-s3-build-cache-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-amazon-s3-build-cache-plugin/eslint.config.js 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..8ac0cef2c22 --- /dev/null +++ b/apps/api-documenter/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 388d215b2e4..c6f5ed91f34 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/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..8ac0cef2c22 --- /dev/null +++ b/apps/cpu-profile-summarizer/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 92190b5e8af..585361a9105 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/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..247d86bbeca --- /dev/null +++ b/apps/lockfile-explorer/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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); + +module.exports = defineConfig([ + ...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 af9f525d2dc..9e4774635ca 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..8ac0cef2c22 --- /dev/null +++ b/apps/rundown/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 f445e7cad52..da23495413c 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..e1662ed03d3 --- /dev/null +++ b/apps/rush-mcp-server/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 03ecf9ffb02..94f39285515 100644 --- a/apps/rush-mcp-server/package.json +++ b/apps/rush-mcp-server/package.json @@ -30,6 +30,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/.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..8ac0cef2c22 --- /dev/null +++ b/apps/rush/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 3511ea15793..7ef6e693928 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..8ac0cef2c22 --- /dev/null +++ b/apps/trace-import/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 bb22a026de2..8ce054773d2 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/api-extractor-test-05/dist/tsdoc-metadata.json b/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json index 5c31157a604..953bd7b7bdb 100644 --- a/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json +++ b/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json @@ -5,7 +5,7 @@ "toolPackages": [ { "packageName": "@microsoft/api-extractor", - "packageVersion": "7.52.4" + "packageVersion": "7.52.7" } ] } 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..64162ee84a2 --- /dev/null +++ b/build-tests/heft-web-rig-library-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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('@rushstack/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app'); + +module.exports = defineConfig([ + ...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/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 837398d410a..421dcfdbf1e 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -2,5 +2,5 @@ { "pnpmShrinkwrapHash": "bfa760b12a7289a53f0a792b51f909f0e85ad0e8", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "b0569f874717cd3f37dba1a0c79f538dcf97b50e" + "packageJsonInjectedDependenciesHash": "08f5b84a529308191d05c78b28060aab0c5ca3c6" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 5b723d005a9..f2200189ba5 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 @@ -245,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 @@ -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 @@ -1933,6 +1954,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: @@ -2614,8 +2638,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 @@ -2768,8 +2792,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 @@ -2821,8 +2845,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 @@ -2842,6 +2866,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 @@ -2864,6 +2891,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 @@ -2935,6 +2965,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 @@ -2972,6 +3005,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 @@ -3019,6 +3055,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 @@ -3202,6 +3241,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 @@ -3258,8 +3300,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 @@ -3454,6 +3496,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 @@ -3562,6 +3607,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 @@ -3578,6 +3626,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 @@ -3665,6 +3716,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 @@ -3693,6 +3747,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 @@ -3730,6 +3787,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 @@ -3858,8 +3918,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) @@ -3991,6 +4051,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 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..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-dev-cert-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 c974f57b0ea..aa6b5d34a77 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-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..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-localization-typings-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 05eecc7d234..a42f0f94c5f 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-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..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-sass-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 a41d115b5e4..60bb068a594 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-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..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-serverless-stack-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 5f169d9ff36..3086833dff4 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..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-storybook-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 3832261dd49..a39063a1bc5 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-webpack4-plugin/.eslintrc.js b/heft-plugins/heft-webpack4-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-webpack4-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-webpack4-plugin/eslint.config.js b/heft-plugins/heft-webpack4-plugin/eslint.config.js new file mode 100644 index 00000000000..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-webpack4-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/heft-plugins/heft-webpack4-plugin/package.json b/heft-plugins/heft-webpack4-plugin/package.json index 21c21021dd8..fddfcff6ee6 100644 --- a/heft-plugins/heft-webpack4-plugin/package.json +++ b/heft-plugins/heft-webpack4-plugin/package.json @@ -36,11 +36,12 @@ "webpack-dev-server": "~4.9.3" }, "devDependencies": { - "local-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/terminal": "workspace:*", "@types/watchpack": "2.4.0", "@types/webpack": "4.41.32", + "eslint": "~9.25.1", + "local-node-rig": "workspace:*", "webpack": "~4.47.0" } } diff --git a/heft-plugins/heft-webpack5-plugin/.eslintrc.js b/heft-plugins/heft-webpack5-plugin/.eslintrc.js deleted file mode 100644 index 27dc0bdff95..00000000000 --- a/heft-plugins/heft-webpack5-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-webpack5-plugin/eslint.config.js b/heft-plugins/heft-webpack5-plugin/eslint.config.js new file mode 100644 index 00000000000..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-webpack5-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/heft-plugins/heft-webpack5-plugin/package.json b/heft-plugins/heft-webpack5-plugin/package.json index ed2b9e8dcb5..41f970a2168 100644 --- a/heft-plugins/heft-webpack5-plugin/package.json +++ b/heft-plugins/heft-webpack5-plugin/package.json @@ -33,7 +33,8 @@ "@rushstack/heft": "workspace:*", "@rushstack/terminal": "workspace:*", "@types/watchpack": "2.4.0", - "webpack": "~5.98.0", - "local-node-rig": "workspace:*" + "eslint": "~9.25.1", + "local-node-rig": "workspace:*", + "webpack": "~5.98.0" } } diff --git a/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts b/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts index eb9d8ad7de8..40f01da335e 100644 --- a/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts +++ b/heft-plugins/heft-webpack5-plugin/src/Webpack5Plugin.ts @@ -333,7 +333,6 @@ export default class Webpack5Plugin implements IHeftTaskPlugin { 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..e1662ed03d3 --- /dev/null +++ b/libraries/debug-certificate-manager/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 f9f0d330ba8..b3d4f60a75c 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/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..e1662ed03d3 --- /dev/null +++ b/libraries/package-deps-hash/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 70216283d52..635772fbf33 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..50face04735 --- /dev/null +++ b/libraries/package-extractor/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 bef3cf0f8a2..f2cd85622ad 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/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..e1662ed03d3 --- /dev/null +++ b/libraries/rush-lib/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/libraries/rush-lib/package.json b/libraries/rush-lib/package.json index 4bac16045f8..da9a9bec0ea 100644 --- a/libraries/rush-lib/package.json +++ b/libraries/rush-lib/package.json @@ -69,6 +69,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/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..e1662ed03d3 --- /dev/null +++ b/libraries/rushell/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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..16133ac0d64 --- /dev/null +++ b/libraries/stream-collator/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/libraries/stream-collator/package.json b/libraries/stream-collator/package.json index f42d51dd1d1..ce157b4ae5d 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/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..50face04735 --- /dev/null +++ b/libraries/worker-pool/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 a5dbff16178..55768d9da7f 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..e1662ed03d3 --- /dev/null +++ b/repo-scripts/doc-plugin-rush-stack/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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..e1662ed03d3 --- /dev/null +++ b/repo-scripts/repo-toolbox/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/heft-web-rig/package.json b/rigs/heft-web-rig/package.json index 1c2710bbd0d..657c5e31a9e 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/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..e1662ed03d3 --- /dev/null +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 a8a64aa6571..105c50fb223 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:*" } } From 3e4776e3350c641202dfb8522b05bc24937a87de Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 17:39:17 -0700 Subject: [PATCH 27/60] Remove unused eslint ignores --- heft-plugins/heft-sass-plugin/src/SassProcessor.ts | 3 --- .../heft-storybook-plugin/src/StorybookPlugin.ts | 1 - libraries/load-themed-styles/src/index.ts | 11 ++++------- .../src/Message/toExtension.ts | 1 - .../src/test/scenarios/localFolder/entry.ts | 1 - .../src/AssetProcessor.ts | 1 - 6 files changed, 4 insertions(+), 14 deletions(-) diff --git a/heft-plugins/heft-sass-plugin/src/SassProcessor.ts b/heft-plugins/heft-sass-plugin/src/SassProcessor.ts index 3c8719653c8..b88d3082a53 100644 --- a/heft-plugins/heft-sass-plugin/src/SassProcessor.ts +++ b/heft-plugins/heft-sass-plugin/src/SassProcessor.ts @@ -329,7 +329,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()) @@ -431,7 +430,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; } @@ -573,7 +571,6 @@ export class SassProcessor { } } - // eslint-disable-next-line @rushstack/no-null return null; } 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 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/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts b/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts index 0081ddea340..8f0a5c0cf98 100644 --- a/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts +++ b/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts @@ -13,6 +13,5 @@ interface IToExtensionMessageCommandInfo { const vscode: Webview = window.acquireVsCodeApi(); export const sendMessageToExtension: (message: IToExtensionMessage) => void = (message) => { - // eslint-disable-next-line @typescript-eslint/no-floating-promises vscode.postMessage(message); }; 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/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) From 892f1d976cc89e8e6f4f33a2a6c8ab617065d342 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 17:41:09 -0700 Subject: [PATCH 28/60] Fix file matcher for test files --- .../flat/mixins/friendly-locals.js | 20 +++++++++---------- eslint/eslint-config/flat/profile/_common.js | 8 ++++---- .../local-eslint-config/flat/mixins/react.js | 20 +++++++++---------- .../local-eslint-config/flat/mixins/tsdoc.js | 20 +++++++++---------- 4 files changed, 34 insertions(+), 34 deletions(-) diff --git a/eslint/eslint-config/flat/mixins/friendly-locals.js b/eslint/eslint-config/flat/mixins/friendly-locals.js index 6999a840f34..6e73fcf30e3 100644 --- a/eslint/eslint-config/flat/mixins/friendly-locals.js +++ b/eslint/eslint-config/flat/mixins/friendly-locals.js @@ -54,20 +54,20 @@ module.exports = defineConfig([ { files: [ // Test files - '*.test.ts', - '*.test.tsx', - '*.spec.ts', - '*.spec.tsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', // Facebook convention - '**/__mocks__/*.ts', - '**/__mocks__/*.tsx', - '**/__tests__/*.ts', - '**/__tests__/*.tsx', + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', // Microsoft convention - '**/test/*.ts', - '**/test/*.tsx' + '**/test/**/*.ts', + '**/test/**/*.tsx' ], plugins: { '@typescript-eslint': typescriptEslintPlugin diff --git a/eslint/eslint-config/flat/profile/_common.js b/eslint/eslint-config/flat/profile/_common.js index f72cd197142..4b67751528e 100644 --- a/eslint/eslint-config/flat/profile/_common.js +++ b/eslint/eslint-config/flat/profile/_common.js @@ -741,10 +741,10 @@ const commonConfig = defineConfig([ { files: [ // Test files - '*.test.ts', - '*.test.tsx', - '*.spec.ts', - '*.spec.tsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', // Facebook convention '**/__mocks__/*.ts', diff --git a/eslint/local-eslint-config/flat/mixins/react.js b/eslint/local-eslint-config/flat/mixins/react.js index 1e30e565d58..51026dd8f21 100644 --- a/eslint/local-eslint-config/flat/mixins/react.js +++ b/eslint/local-eslint-config/flat/mixins/react.js @@ -35,20 +35,20 @@ module.exports = defineConfig([ // defaults specified above. files: [ // Test files - '*.test.ts', - '*.test.tsx', - '*.spec.ts', - '*.spec.tsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', // Facebook convention - '**/__mocks__/*.ts', - '**/__mocks__/*.tsx', - '**/__tests__/*.ts', - '**/__tests__/*.tsx', + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', // Microsoft convention - '**/test/*.ts', - '**/test/*.tsx' + '**/test/**/*.ts', + '**/test/**/*.tsx' ], // New rules and changes to existing rules diff --git a/eslint/local-eslint-config/flat/mixins/tsdoc.js b/eslint/local-eslint-config/flat/mixins/tsdoc.js index 18e220f9d5c..452ac15d8d3 100644 --- a/eslint/local-eslint-config/flat/mixins/tsdoc.js +++ b/eslint/local-eslint-config/flat/mixins/tsdoc.js @@ -23,20 +23,20 @@ module.exports = defineConfig([ { files: [ // Test files - '*.test.ts', - '*.test.tsx', - '*.spec.ts', - '*.spec.tsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', // Facebook convention - '**/__mocks__/*.ts', - '**/__mocks__/*.tsx', - '**/__tests__/*.ts', - '**/__tests__/*.tsx', + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', // Microsoft convention - '**/test/*.ts', - '**/test/*.tsx' + '**/test/**/*.ts', + '**/test/**/*.tsx' ], rules: {} } From a244d4e72341b5a7c9bab1c1bb60cb400d869328 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 17:41:29 -0700 Subject: [PATCH 29/60] Fix file matcher for test files --- .../flat/profile/_common.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/eslint/local-eslint-config/flat/profile/_common.js b/eslint/local-eslint-config/flat/profile/_common.js index 160c0867432..375ec3dba6a 100644 --- a/eslint/local-eslint-config/flat/profile/_common.js +++ b/eslint/local-eslint-config/flat/profile/_common.js @@ -137,20 +137,20 @@ module.exports = { { files: [ // Test files - '*.test.ts', - '*.test.tsx', - '*.spec.ts', - '*.spec.tsx', + '**/*.test.ts', + '**/*.test.tsx', + '**/*.spec.ts', + '**/*.spec.tsx', // Facebook convention - '**/__mocks__/*.ts', - '**/__mocks__/*.tsx', - '**/__tests__/*.ts', - '**/__tests__/*.tsx', + '**/__mocks__/**/*.ts', + '**/__mocks__/**/*.tsx', + '**/__tests__/**/*.ts', + '**/__tests__/**/*.tsx', // Microsoft convention - '**/test/*.ts', - '**/test/*.tsx' + '**/test/**/*.ts', + '**/test/**/*.tsx' ], rules: {} } From 1012b1c6ec56c72b4092101fa1cfde08821398f1 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 17:42:51 -0700 Subject: [PATCH 30/60] Allow fix command to be passed to rush build --- common/config/rush/command-line.json | 7 +++++++ 1 file changed, 7 insertions(+) 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"] } ] } From b069e39a13736345751aa7a91e729dd7eec1f037 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 6 May 2025 18:02:12 -0700 Subject: [PATCH 31/60] Update more projects --- .../typescript-newest-test/.eslintrc.js | 12 ------- .../typescript-newest-test/eslint.config.js | 19 ++++++++++++ build-tests/api-documenter-test/.eslintrc.js | 12 ------- .../api-documenter-test/eslint.config.js | 19 ++++++++++++ build-tests/api-documenter-test/package.json | 1 + .../run-scenarios-helpers/.eslintrc.js | 12 ------- .../run-scenarios-helpers/eslint.config.js | 19 ++++++++++++ .../run-scenarios-helpers/package.json | 1 + .../.eslintrc.js | 9 ------ .../eslint.config.js | 17 ++++++++++ .../package.json | 3 +- .../.eslintrc.js | 22 ------------- .../eslint.config.js | 23 ++++++++++++++ .../package.json | 5 +-- .../.eslintrc.js | 9 ------ .../eslint.config.js | 17 ++++++++++ .../package.json | 5 +-- .../build-tests-subspace/repo-state.json | 2 +- .../config/subspaces/default/pnpm-lock.yaml | 31 +++++++++++++++++-- .../.eslintrc.js | 12 ------- .../eslint.config.js | 19 ++++++++++++ .../package.json | 5 +-- .../.eslintrc.js | 12 ------- .../eslint.config.js | 19 ++++++++++++ .../package.json | 2 +- libraries/lookup-by-path/.eslintrc.js | 13 -------- libraries/lookup-by-path/eslint.config.js | 21 +++++++++++++ libraries/lookup-by-path/package.json | 1 + libraries/module-minifier/.eslintrc.js | 13 -------- libraries/module-minifier/eslint.config.js | 21 +++++++++++++ libraries/module-minifier/package.json | 1 + libraries/rush-sdk/.eslintrc.js | 12 ------- libraries/rush-sdk/eslint.config.js | 19 ++++++++++++ libraries/rush-sdk/package.json | 3 +- 34 files changed, 261 insertions(+), 150 deletions(-) delete mode 100644 build-tests-subspace/typescript-newest-test/.eslintrc.js create mode 100644 build-tests-subspace/typescript-newest-test/eslint.config.js delete mode 100644 build-tests/api-documenter-test/.eslintrc.js create mode 100644 build-tests/api-documenter-test/eslint.config.js delete mode 100644 build-tests/run-scenarios-helpers/.eslintrc.js create mode 100644 build-tests/run-scenarios-helpers/eslint.config.js delete mode 100644 build-tests/rush-amazon-s3-build-cache-plugin-integration-test/.eslintrc.js create mode 100644 build-tests/rush-amazon-s3-build-cache-plugin-integration-test/eslint.config.js delete mode 100644 build-tests/rush-lib-declaration-paths-test/.eslintrc.js create mode 100644 build-tests/rush-lib-declaration-paths-test/eslint.config.js delete mode 100644 build-tests/rush-redis-cobuild-plugin-integration-test/.eslintrc.js create mode 100644 build-tests/rush-redis-cobuild-plugin-integration-test/eslint.config.js delete mode 100644 heft-plugins/heft-isolated-typescript-transpile-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js delete mode 100644 heft-plugins/heft-sass-load-themed-styles-plugin/.eslintrc.js create mode 100644 heft-plugins/heft-sass-load-themed-styles-plugin/eslint.config.js delete mode 100644 libraries/lookup-by-path/.eslintrc.js create mode 100644 libraries/lookup-by-path/eslint.config.js delete mode 100644 libraries/module-minifier/.eslintrc.js create mode 100644 libraries/module-minifier/eslint.config.js delete mode 100644 libraries/rush-sdk/.eslintrc.js create mode 100644 libraries/rush-sdk/eslint.config.js 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..e1662ed03d3 --- /dev/null +++ b/build-tests-subspace/typescript-newest-test/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); 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..e1662ed03d3 --- /dev/null +++ b/build-tests/api-documenter-test/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/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..e1662ed03d3 --- /dev/null +++ b/build-tests/run-scenarios-helpers/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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..c8411d742f5 --- /dev/null +++ b/build-tests/rush-amazon-s3-build-cache-plugin-integration-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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); + +module.exports = defineConfig([ + ...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..2d6e3c4363a --- /dev/null +++ b/build-tests/rush-lib-declaration-paths-test/eslint.config.js @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. +// See LICENSE in the project root for license information. + +const { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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-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..c8411d742f5 --- /dev/null +++ b/build-tests/rush-redis-cobuild-plugin-integration-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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); + +module.exports = defineConfig([ + ...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/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 421dcfdbf1e..0d8ffc61d03 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -2,5 +2,5 @@ { "pnpmShrinkwrapHash": "bfa760b12a7289a53f0a792b51f909f0e85ad0e8", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "08f5b84a529308191d05c78b28060aab0c5ca3c6" + "packageJsonInjectedDependenciesHash": "41b10a571fc839419ac1bb8aa793181ed25584e7" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index f2200189ba5..885a2d8264c 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -936,6 +936,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 @@ -2250,6 +2253,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 @@ -2277,6 +2283,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 @@ -2299,6 +2308,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 @@ -2345,6 +2357,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 @@ -2668,6 +2683,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 @@ -2811,8 +2829,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 @@ -3138,6 +3156,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 @@ -3166,6 +3187,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 @@ -3551,6 +3575,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 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..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 826c206e0bf..38b62c852b1 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-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..e1662ed03d3 --- /dev/null +++ b/heft-plugins/heft-sass-load-themed-styles-plugin/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 f8b8430ee22..0820e3d9184 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/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..50face04735 --- /dev/null +++ b/libraries/lookup-by-path/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 a9708c1a344..03ac1bfe18e 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/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..50face04735 --- /dev/null +++ b/libraries/module-minifier/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 28277543c3a..f90c838e3ad 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/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..e1662ed03d3 --- /dev/null +++ b/libraries/rush-sdk/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...nodeTrustedToolProfile, + ...friendlyLocalsMixin, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/libraries/rush-sdk/package.json b/libraries/rush-sdk/package.json index f5f78612626..43e9d99f5b5 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" } } From d9a6bc602b9728ff73e45558e079b3b2cb3ccdff Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Wed, 7 May 2025 16:06:06 -0700 Subject: [PATCH 32/60] Update the remaining projects, except for the eslint bulk suppressions --- apps/lockfile-explorer-web/src/start.tsx | 1 - .../.eslintrc.js | 9 -- .../eslint.config.js | 0 .../package.json | 2 +- .../rush-lib-test/.eslintrc.js | 12 -- .../rush-lib-test/eslint.config.js | 19 +++ .../rush-lib-test/package.json | 3 - .../rush-sdk-test/.eslintrc.js | 12 -- .../rush-sdk-test/eslint.config.js | 19 +++ .../rush-sdk-test/package.json | 3 - .../typescript-newest-test/package.json | 4 - .../typescript-v4-test/.eslintrc.js | 7 -- .../typescript-v4-test/eslint.config.js | 17 +++ .../api-documenter-scenarios/.eslintrc.js | 12 -- .../api-documenter-scenarios/eslint.config.js | 19 +++ .../api-documenter-scenarios/package.json | 1 + build-tests/eslint-7-11-test/.eslintrc.js | 4 +- build-tests/eslint-7-7-test/.eslintrc.js | 4 +- build-tests/eslint-7-test/.eslintrc.js | 4 +- build-tests/eslint-8-test/.eslintrc.js | 8 +- build-tests/eslint-8-test/package.json | 3 +- .../eslint.config.cjs | 17 +++ build-tests/heft-sass-test/src/index.tsx | 1 - build-tests/heft-swc-test/.eslintrc.js | 9 -- build-tests/heft-swc-test/eslint.config.js | 17 +++ build-tests/heft-swc-test/package.json | 4 +- .../localization-plugin-test-01/.eslintrc.js | 12 -- .../eslint.config.js | 19 +++ .../localization-plugin-test-01/package.json | 11 +- .../localization-plugin-test-02/.eslintrc.js | 12 -- .../eslint.config.js | 19 +++ .../localization-plugin-test-02/package.json | 9 +- .../localization-plugin-test-03/.eslintrc.js | 12 -- .../eslint.config.js | 19 +++ .../localization-plugin-test-03/package.json | 7 +- .../scripts/createSrc.js | 6 +- .../.eslintrc.js | 12 -- .../eslint.config.js | 19 +++ .../package.json | 1 + .../build-tests-subspace/pnpm-lock.yaml | 112 +++++++++--------- .../build-tests-subspace/repo-state.json | 4 +- .../config/subspaces/default/pnpm-lock.yaml | 26 +++- eslint/eslint-config/.npmignore | 1 + eslint/eslint-config/flat/profile/_common.js | 7 +- eslint/eslint-config/profile/_common.js | 7 +- eslint/local-eslint-config/.gitignore | 3 - eslint/local-eslint-config/.npmignore | 3 - eslint/local-eslint-config/config/heft.json | 27 ----- .../config/rush-project.json | 10 -- .../flat/profile/_common.js | 8 +- eslint/local-eslint-config/package.json | 8 +- libraries/lookup-by-path/src/LookupByPath.ts | 1 - .../module-minifier/src/MinifiedIdentifier.ts | 10 +- libraries/rush-lib/src/api/ChangeManager.ts | 1 - .../src/cli/actions/InitSubspaceAction.ts | 1 - .../rush-lib/src/cli/actions/PublishAction.ts | 1 - .../cli/scriptActions/PhasedScriptAction.ts | 1 - libraries/rush-lib/src/logic/Git.ts | 3 +- .../operations/CacheableOperationPlugin.ts | 2 - .../src/logic/test/ChangelogGenerator.test.ts | 2 - .../src/logic/test/PublishUtilities.test.ts | 2 - .../PluginLoader/PluginLoaderBase.ts | 1 - .../src/utilities/prompts/SearchListPrompt.ts | 4 - .../includes/eslint/profile/_common.js | 8 +- .../src/GraphProcessor.ts | 2 - .../rush-resolver-cache-plugin/src/helpers.ts | 1 - .../src/Message/toExtension.ts | 1 + .../src/logic/RushWorkspace.ts | 1 - .../src/providers/RushCommandsProvider.ts | 1 - .../src/KnownDescriptionFilePlugin.ts | 3 - .../src/KnownPackageDependenciesPlugin.ts | 1 - .../src/ParallelCompiler.ts | 3 +- .../src/workerPool/WebpackWorker.ts | 2 +- 73 files changed, 341 insertions(+), 296 deletions(-) delete mode 100644 build-tests-samples/heft-serverless-stack-tutorial/.eslintrc.js rename {build-tests/heft-node-everything-esm-module-test => build-tests-samples/heft-serverless-stack-tutorial}/eslint.config.js (100%) delete mode 100644 build-tests-subspace/rush-lib-test/.eslintrc.js create mode 100644 build-tests-subspace/rush-lib-test/eslint.config.js delete mode 100644 build-tests-subspace/rush-sdk-test/.eslintrc.js create mode 100644 build-tests-subspace/rush-sdk-test/eslint.config.js delete mode 100644 build-tests-subspace/typescript-v4-test/.eslintrc.js create mode 100644 build-tests-subspace/typescript-v4-test/eslint.config.js delete mode 100644 build-tests/api-documenter-scenarios/.eslintrc.js create mode 100644 build-tests/api-documenter-scenarios/eslint.config.js create mode 100644 build-tests/heft-node-everything-esm-module-test/eslint.config.cjs delete mode 100644 build-tests/heft-swc-test/.eslintrc.js create mode 100644 build-tests/heft-swc-test/eslint.config.js delete mode 100644 build-tests/localization-plugin-test-01/.eslintrc.js create mode 100644 build-tests/localization-plugin-test-01/eslint.config.js delete mode 100644 build-tests/localization-plugin-test-02/.eslintrc.js create mode 100644 build-tests/localization-plugin-test-02/eslint.config.js delete mode 100644 build-tests/localization-plugin-test-03/.eslintrc.js create mode 100644 build-tests/localization-plugin-test-03/eslint.config.js delete mode 100644 build-tests/rush-project-change-analyzer-test/.eslintrc.js create mode 100644 build-tests/rush-project-change-analyzer-test/eslint.config.js delete mode 100644 eslint/local-eslint-config/.gitignore delete mode 100644 eslint/local-eslint-config/config/heft.json delete mode 100644 eslint/local-eslint-config/config/rush-project.json 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/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/heft-node-everything-esm-module-test/eslint.config.js b/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js similarity index 100% rename from build-tests/heft-node-everything-esm-module-test/eslint.config.js rename to build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js 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-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..e1662ed03d3 --- /dev/null +++ b/build-tests-subspace/rush-lib-test/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 44d4315ca0c..b622838bef8 100644 --- a/build-tests-subspace/rush-lib-test/package.json +++ b/build-tests-subspace/rush-lib-test/package.json @@ -23,9 +23,6 @@ "@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..e1662ed03d3 --- /dev/null +++ b/build-tests-subspace/rush-sdk-test/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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 9606f90f3f0..cbddd0f8b80 100644 --- a/build-tests-subspace/rush-sdk-test/package.json +++ b/build-tests-subspace/rush-sdk-test/package.json @@ -23,9 +23,6 @@ "@microsoft/rush-lib": { "injected": true }, - "@rushstack/eslint-config": { - "injected": true - }, "@rushstack/rush-sdk": { "injected": true }, diff --git a/build-tests-subspace/typescript-newest-test/package.json b/build-tests-subspace/typescript-newest-test/package.json index 7ef94c5bc2c..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": "~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..778da21999d --- /dev/null +++ b/build-tests-subspace/typescript-v4-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 { defineConfig } = require('eslint/config'); +const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...nodeTrustedToolProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); 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..e1662ed03d3 --- /dev/null +++ b/build-tests/api-documenter-scenarios/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/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 fcd538e656e..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.31.0", "eslint": "~8.57.0", + "local-node-rig": "workspace:*", "typescript": "~5.8.2" } } 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..2a15ea7f46b --- /dev/null +++ b/build-tests/heft-node-everything-esm-module-test/eslint.config.cjs @@ -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 { defineConfig } = require('eslint/config'); +const nodeProfile = require('local-eslint-config/flat/profile/node'); + +module.exports = defineConfig([ + ...nodeProfile, + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + parserOptions: { + tsconfigRootDir: __dirname + } + } + } +]); 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..54c599ea1b8 --- /dev/null +++ b/build-tests/heft-swc-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 { defineConfig } = require('eslint/config'); +const webAppProfile = require('local-eslint-config/flat/profile/web-app'); + +module.exports = defineConfig([ + ...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/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..e1662ed03d3 --- /dev/null +++ b/build-tests/localization-plugin-test-01/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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..e1662ed03d3 --- /dev/null +++ b/build-tests/localization-plugin-test-02/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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..e1662ed03d3 --- /dev/null +++ b/build-tests/localization-plugin-test-03/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/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..e1662ed03d3 --- /dev/null +++ b/build-tests/rush-project-change-analyzer-test/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 { defineConfig } = require('eslint/config'); +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 = defineConfig([ + ...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/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 8c4d78b75fa..c4e7eec3bc5 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -37,8 +37,6 @@ importers: dependenciesMeta: '@microsoft/rush-lib': injected: true - '@rushstack/eslint-config': - injected: true '@rushstack/heft': injected: true '@rushstack/terminal': @@ -70,8 +68,6 @@ importers: dependenciesMeta: '@microsoft/rush-lib': injected: true - '@rushstack/eslint-config': - injected: true '@rushstack/heft': injected: true '@rushstack/rush-sdk': @@ -81,9 +77,6 @@ importers: ../../../build-tests-subspace/typescript-newest-test: devDependencies: - '@rushstack/eslint-config': - specifier: file:../../eslint/eslint-config - version: file:../../../eslint/eslint-config(eslint@9.25.1)(typescript@5.8.2) '@rushstack/heft': specifier: file:../../apps/heft version: file:../../../apps/heft(@types/node@20.17.19) @@ -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: @@ -1644,7 +1635,7 @@ 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 @@ -1680,12 +1671,12 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 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-object-atoms: 1.0.0 - es-shim-unscopables: 1.0.2 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 dev: true /array.prototype.findlastindex@1.2.6: @@ -1727,19 +1718,19 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.5 - es-shim-unscopables: 1.0.2 + 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: @@ -1747,7 +1738,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 @@ -2213,7 +2204,7 @@ 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 @@ -2231,7 +2222,7 @@ packages: 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 @@ -2249,7 +2240,7 @@ packages: 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 @@ -2617,7 +2608,7 @@ packages: define-properties: 1.2.1 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.3.0 globalthis: 1.0.4 @@ -3136,7 +3127,7 @@ 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 @@ -3204,7 +3195,7 @@ packages: engines: {node: '>= 0.4'} dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 dev: true /get-stream@5.2.0: @@ -3221,7 +3212,7 @@ 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 @@ -3405,7 +3396,7 @@ 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: @@ -3591,7 +3582,7 @@ packages: 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 @@ -3625,7 +3616,7 @@ 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 @@ -3750,7 +3741,7 @@ 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 @@ -3786,7 +3777,7 @@ 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 @@ -3811,7 +3802,7 @@ packages: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 dev: true /is-shared-array-buffer@1.0.4: @@ -3894,7 +3885,7 @@ 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: @@ -3980,7 +3971,7 @@ packages: engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 get-proto: 1.0.1 has-symbols: 1.1.0 @@ -4522,7 +4513,7 @@ packages: dependencies: array-includes: 3.1.8 array.prototype.flat: 1.3.2 - object.assign: 4.1.5 + object.assign: 4.1.7 object.values: 1.2.1 dev: true @@ -4956,7 +4947,7 @@ 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 @@ -4969,7 +4960,7 @@ packages: 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 @@ -5019,7 +5010,7 @@ packages: 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 dev: true /once@1.4.0: @@ -5439,7 +5430,7 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -5569,7 +5560,7 @@ 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 @@ -5604,7 +5595,7 @@ packages: 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 @@ -5682,7 +5673,7 @@ packages: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 dev: true /shebang-command@2.0.0: @@ -5728,9 +5719,9 @@ packages: 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 @@ -5851,7 +5842,7 @@ packages: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 gopd: 1.2.0 has-symbols: 1.1.0 @@ -5865,7 +5856,7 @@ packages: resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} dependencies: define-properties: 1.2.1 - es-abstract: 1.23.5 + es-abstract: 1.23.9 dev: true /string.prototype.trim@1.2.10: @@ -5877,7 +5868,7 @@ packages: define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 dev: true @@ -5885,10 +5876,10 @@ packages: 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: @@ -5906,7 +5897,7 @@ packages: 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 dev: true /string.prototype.trimstart@1.0.8: @@ -5915,7 +5906,7 @@ packages: dependencies: 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: @@ -6159,7 +6150,7 @@ 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 @@ -6177,7 +6168,7 @@ packages: 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 @@ -6200,7 +6191,7 @@ 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-proto: 1.1.0 @@ -6253,7 +6244,7 @@ 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 @@ -6445,7 +6436,7 @@ 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 @@ -6769,22 +6760,25 @@ packages: 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@9.25.1)(typescript@5.8.2) '@rushstack/eslint-patch': file:../../../eslint/eslint-patch '@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.5)(@types/node@20.17.19): diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 0d8ffc61d03..bf7e0901597 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": "bfa760b12a7289a53f0a792b51f909f0e85ad0e8", + "pnpmShrinkwrapHash": "335c5510c55f7546d3d06673436cfc7f852556ce", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "41b10a571fc839419ac1bb8aa793181ed25584e7" + "packageJsonInjectedDependenciesHash": "ae33ec2d818eaaed908c466da488e2cac9a70d87" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 885a2d8264c..803efa666d5 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -563,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 @@ -915,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 @@ -1206,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 @@ -1796,8 +1802,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 @@ -2104,6 +2110,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) @@ -2146,6 +2155,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) @@ -2188,6 +2200,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) @@ -2330,6 +2345,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 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/profile/_common.js b/eslint/eslint-config/flat/profile/_common.js index 4b67751528e..28a01711fac 100644 --- a/eslint/eslint-config/flat/profile/_common.js +++ b/eslint/eslint-config/flat/profile/_common.js @@ -320,7 +320,12 @@ const commonConfig = defineConfig([ // 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-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/local-eslint-config/.gitignore b/eslint/local-eslint-config/.gitignore deleted file mode 100644 index 654694f5ee1..00000000000 --- a/eslint/local-eslint-config/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/mixins -/patch -/profile \ No newline at end of file diff --git a/eslint/local-eslint-config/.npmignore b/eslint/local-eslint-config/.npmignore index 3b354d69138..25141726512 100644 --- a/eslint/local-eslint-config/.npmignore +++ b/eslint/local-eslint-config/.npmignore @@ -24,7 +24,4 @@ ## Project specific definitions # ----------------------------- -!/mixins/** -!/patch/** -!/profile/** !/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 deleted file mode 100644 index d4ccbea3f42..00000000000 --- a/eslint/local-eslint-config/config/heft.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/heft/v0/heft.schema.json", - - "phasesByName": { - "build": { - "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": ["**"] - } - ] - } - } - } - } - } - } -} diff --git a/eslint/local-eslint-config/config/rush-project.json b/eslint/local-eslint-config/config/rush-project.json deleted file mode 100644 index 1965f21aa81..00000000000 --- a/eslint/local-eslint-config/config/rush-project.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/rush-project.schema.json", - - "operationSettings": [ - { - "operationName": "_phase:build", - "outputFolderNames": ["mixins", "patch", "profile"] - } - ] -} diff --git a/eslint/local-eslint-config/flat/profile/_common.js b/eslint/local-eslint-config/flat/profile/_common.js index 375ec3dba6a..b9cc8a8efda 100644 --- a/eslint/local-eslint-config/flat/profile/_common.js +++ b/eslint/local-eslint-config/flat/profile/_common.js @@ -44,7 +44,13 @@ module.exports = { // 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/eslint/local-eslint-config/package.json b/eslint/local-eslint-config/package.json index 609534bf052..d0b94a4dea0 100644 --- a/eslint/local-eslint-config/package.json +++ b/eslint/local-eslint-config/package.json @@ -4,8 +4,12 @@ "private": true, "description": "An ESLint configuration consumed projects inside the rushstack repo.", "scripts": { - "build": "heft build --clean", - "_phase:build": "heft build --clean" + "build": "", + "_phase:build": "" + }, + "peerDependencies": { + "eslint": "^9.25.1", + "typescript": ">=4.7.0" }, "devDependencies": { "eslint": "~9.25.1", diff --git a/libraries/lookup-by-path/src/LookupByPath.ts b/libraries/lookup-by-path/src/LookupByPath.ts index 63868c0a677..e844cb32346 100644 --- a/libraries/lookup-by-path/src/LookupByPath.ts +++ b/libraries/lookup-by-path/src/LookupByPath.ts @@ -440,7 +440,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/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/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 4f02d4f08c3..99454449b35 100644 --- a/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts +++ b/libraries/rush-lib/src/cli/scriptActions/PhasedScriptAction.ts @@ -817,7 +817,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 } = 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/operations/CacheableOperationPlugin.ts b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts index 48217f4494e..6c7f68b664e 100644 --- a/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts +++ b/libraries/rush-lib/src/logic/operations/CacheableOperationPlugin.ts @@ -574,7 +574,6 @@ export class CacheableOperationPlugin implements IPhasedCommandPlugin { return; } - // eslint-disable-next-line require-atomic-updates -- This is guaranteed to not be concurrent buildCacheContext.operationBuildCache = ProjectBuildCache.forOperation(record, { buildCacheConfiguration, terminal @@ -624,7 +623,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 = projectBuildCache; return projectBuildCache; 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/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/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-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/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts b/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts index 8f0a5c0cf98..0081ddea340 100644 --- a/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts +++ b/vscode-extensions/rush-vscode-command-webview/src/Message/toExtension.ts @@ -13,5 +13,6 @@ interface IToExtensionMessageCommandInfo { const vscode: Webview = window.acquireVsCodeApi(); export const sendMessageToExtension: (message: IToExtensionMessage) => void = (message) => { + // eslint-disable-next-line @typescript-eslint/no-floating-promises vscode.postMessage(message); }; 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/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-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; From bb878d2ef45e1337f0eb67103fb769a5bb574947 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Thu, 8 May 2025 08:42:23 -0700 Subject: [PATCH 33/60] Remove usage of defineConfig --- apps/api-documenter/eslint.config.js | 5 ++--- apps/cpu-profile-summarizer/eslint.config.js | 5 ++--- apps/lockfile-explorer-web/eslint.config.js | 5 ++--- apps/lockfile-explorer/eslint.config.js | 5 ++--- apps/rundown/eslint.config.js | 5 ++--- apps/rush-mcp-server/eslint.config.js | 5 ++--- apps/rush/eslint.config.js | 5 ++--- apps/trace-import/eslint.config.js | 5 ++--- .../heft-node-basic-tutorial/eslint.config.js | 5 ++--- .../heft-node-jest-tutorial/eslint.config.js | 5 ++--- .../heft-node-rig-tutorial/eslint.config.js | 5 ++--- .../heft-serverless-stack-tutorial/eslint.config.js | 5 ++--- .../heft-storybook-react-tutorial/eslint.config.js | 5 ++--- .../heft-web-rig-app-tutorial/eslint.config.js | 5 ++--- .../heft-web-rig-library-tutorial/eslint.config.js | 5 ++--- .../heft-webpack-basic-tutorial/eslint.config.js | 5 ++--- build-tests-subspace/rush-lib-test/eslint.config.js | 5 ++--- build-tests-subspace/rush-sdk-test/eslint.config.js | 5 ++--- .../typescript-newest-test/eslint.config.js | 5 ++--- build-tests-subspace/typescript-v4-test/eslint.config.js | 9 ++++----- build-tests/api-documenter-scenarios/eslint.config.js | 5 ++--- build-tests/api-documenter-test/eslint.config.js | 5 ++--- build-tests/eslint-9-test/eslint.config.js | 5 ++--- build-tests/heft-example-plugin-01/eslint.config.js | 5 ++--- build-tests/heft-example-plugin-02/eslint.config.js | 5 ++--- build-tests/heft-fastify-test/eslint.config.js | 5 ++--- build-tests/heft-jest-preset-test/eslint.config.js | 5 ++--- build-tests/heft-jest-reporters-test/eslint.config.js | 5 ++--- .../eslint.config.cjs | 5 ++--- build-tests/heft-node-everything-test/eslint.config.js | 5 ++--- build-tests/heft-parameter-plugin/eslint.config.js | 5 ++--- build-tests/heft-sass-test/eslint.config.js | 5 ++--- build-tests/heft-swc-test/eslint.config.js | 5 ++--- .../heft-typescript-composite-test/eslint.config.js | 5 ++--- build-tests/heft-web-rig-library-test/eslint.config.js | 5 ++--- .../heft-webpack4-everything-test/eslint.config.js | 5 ++--- .../heft-webpack5-everything-test/eslint.config.js | 5 ++--- build-tests/localization-plugin-test-01/eslint.config.js | 5 ++--- build-tests/localization-plugin-test-02/eslint.config.js | 5 ++--- build-tests/localization-plugin-test-03/eslint.config.js | 5 ++--- build-tests/run-scenarios-helpers/eslint.config.js | 5 ++--- .../eslint.config.js | 5 ++--- .../rush-lib-declaration-paths-test/eslint.config.js | 5 ++--- .../rush-project-change-analyzer-test/eslint.config.js | 5 ++--- .../eslint.config.js | 5 ++--- eslint/eslint-config/flat/mixins/friendly-locals.js | 5 ++--- eslint/eslint-config/flat/mixins/packlets.js | 5 ++--- eslint/eslint-config/flat/mixins/react.js | 5 ++--- eslint/eslint-config/flat/mixins/tsdoc.js | 5 ++--- eslint/eslint-config/flat/profile/_common.js | 6 +++--- eslint/eslint-config/flat/profile/node-trusted-tool.js | 5 ++--- eslint/eslint-config/flat/profile/node.js | 3 +-- eslint/eslint-config/flat/profile/web-app.js | 3 +-- .../local-eslint-config/flat/mixins/friendly-locals.js | 3 +-- eslint/local-eslint-config/flat/mixins/packlets.js | 3 +-- eslint/local-eslint-config/flat/mixins/react.js | 5 ++--- eslint/local-eslint-config/flat/mixins/tsdoc.js | 5 ++--- eslint/local-eslint-config/flat/profile/_common.js | 5 ++--- .../flat/profile/node-trusted-tool.js | 3 +-- eslint/local-eslint-config/flat/profile/node.js | 3 +-- eslint/local-eslint-config/flat/profile/web-app.js | 5 ++--- heft-plugins/heft-dev-cert-plugin/eslint.config.js | 5 ++--- .../eslint.config.js | 5 ++--- .../heft-localization-typings-plugin/eslint.config.js | 5 ++--- .../heft-sass-load-themed-styles-plugin/eslint.config.js | 5 ++--- heft-plugins/heft-sass-plugin/eslint.config.js | 5 ++--- .../heft-serverless-stack-plugin/eslint.config.js | 5 ++--- heft-plugins/heft-storybook-plugin/eslint.config.js | 5 ++--- heft-plugins/heft-webpack4-plugin/eslint.config.js | 5 ++--- heft-plugins/heft-webpack5-plugin/eslint.config.js | 5 ++--- libraries/debug-certificate-manager/eslint.config.js | 5 ++--- libraries/load-themed-styles/eslint.config.js | 5 ++--- libraries/localization-utilities/eslint.config.js | 5 ++--- libraries/lookup-by-path/eslint.config.js | 5 ++--- libraries/module-minifier/eslint.config.js | 5 ++--- libraries/package-deps-hash/eslint.config.js | 5 ++--- libraries/package-extractor/eslint.config.js | 5 ++--- libraries/rush-lib/eslint.config.js | 5 ++--- libraries/rush-sdk/eslint.config.js | 5 ++--- libraries/rush-themed-ui/eslint.config.js | 5 ++--- libraries/rushell/eslint.config.js | 5 ++--- libraries/stream-collator/eslint.config.js | 5 ++--- libraries/typings-generator/eslint.config.js | 5 ++--- libraries/worker-pool/eslint.config.js | 5 ++--- repo-scripts/doc-plugin-rush-stack/eslint.config.js | 5 ++--- repo-scripts/repo-toolbox/eslint.config.js | 5 ++--- .../includes/eslint/flat/mixins/friendly-locals.js | 3 +-- .../default/includes/eslint/flat/mixins/packlets.js | 3 +-- .../default/includes/eslint/flat/mixins/react.js | 3 +-- .../default/includes/eslint/flat/mixins/tsdoc.js | 3 +-- .../includes/eslint/flat/profile/node-trusted-tool.js | 3 +-- .../default/includes/eslint/flat/profile/node.js | 3 +-- .../app/includes/eslint/flat/mixins/friendly-locals.js | 3 +-- .../profiles/app/includes/eslint/flat/mixins/packlets.js | 3 +-- .../profiles/app/includes/eslint/flat/mixins/react.js | 3 +-- .../profiles/app/includes/eslint/flat/mixins/tsdoc.js | 3 +-- .../profiles/app/includes/eslint/flat/profile/web-app.js | 3 +-- .../includes/eslint/flat/mixins/friendly-locals.js | 3 +-- .../library/includes/eslint/flat/mixins/packlets.js | 3 +-- .../library/includes/eslint/flat/mixins/react.js | 3 +-- .../library/includes/eslint/flat/mixins/tsdoc.js | 3 +-- .../library/includes/eslint/flat/profile/web-app.js | 3 +-- .../includes/eslint/flat/mixins/friendly-locals.js | 3 +-- .../default/includes/eslint/flat/mixins/packlets.js | 3 +-- .../default/includes/eslint/flat/mixins/react.js | 3 +-- .../default/includes/eslint/flat/mixins/tsdoc.js | 3 +-- .../includes/eslint/flat/profile/node-trusted-tool.js | 3 +-- .../default/includes/eslint/flat/profile/node.js | 3 +-- .../app/includes/eslint/flat/mixins/friendly-locals.js | 3 +-- .../profiles/app/includes/eslint/flat/mixins/packlets.js | 3 +-- .../profiles/app/includes/eslint/flat/mixins/react.js | 3 +-- .../profiles/app/includes/eslint/flat/mixins/tsdoc.js | 3 +-- .../profiles/app/includes/eslint/flat/profile/web-app.js | 3 +-- .../includes/eslint/flat/mixins/friendly-locals.js | 3 +-- .../library/includes/eslint/flat/mixins/packlets.js | 3 +-- .../library/includes/eslint/flat/mixins/react.js | 3 +-- .../library/includes/eslint/flat/mixins/tsdoc.js | 3 +-- .../library/includes/eslint/flat/profile/web-app.js | 3 +-- .../rush-amazon-s3-build-cache-plugin/eslint.config.js | 5 ++--- .../eslint.config.js | 5 ++--- rush-plugins/rush-buildxl-graph-plugin/eslint.config.js | 5 ++--- .../rush-http-build-cache-plugin/eslint.config.js | 5 ++--- rush-plugins/rush-litewatch-plugin/eslint.config.js | 5 ++--- rush-plugins/rush-redis-cobuild-plugin/eslint.config.js | 5 ++--- rush-plugins/rush-resolver-cache-plugin/eslint.config.js | 5 ++--- rush-plugins/rush-serve-plugin/eslint.config.js | 5 ++--- .../rush-vscode-command-webview/eslint.config.js | 5 ++--- vscode-extensions/rush-vscode-extension/eslint.config.js | 5 ++--- webpack/hashed-folder-copy-plugin/eslint.config.js | 5 ++--- webpack/loader-load-themed-styles/eslint.config.js | 5 ++--- webpack/loader-raw-script/eslint.config.js | 5 ++--- webpack/preserve-dynamic-require-plugin/eslint.config.js | 5 ++--- webpack/set-webpack-public-path-plugin/eslint.config.js | 5 ++--- webpack/webpack-deep-imports-plugin/eslint.config.js | 5 ++--- .../eslint.config.js | 5 ++--- webpack/webpack-plugin-utilities/eslint.config.js | 5 ++--- .../webpack-workspace-resolve-plugin/eslint.config.js | 5 ++--- webpack/webpack4-localization-plugin/eslint.config.js | 5 ++--- webpack/webpack4-module-minifier-plugin/eslint.config.js | 5 ++--- .../webpack5-load-themed-styles-loader/eslint.config.js | 5 ++--- webpack/webpack5-localization-plugin/eslint.config.js | 5 ++--- webpack/webpack5-module-minifier-plugin/eslint.config.js | 5 ++--- 142 files changed, 249 insertions(+), 390 deletions(-) diff --git a/apps/api-documenter/eslint.config.js b/apps/api-documenter/eslint.config.js index 8ac0cef2c22..ceb5a1bee40 100644 --- a/apps/api-documenter/eslint.config.js +++ b/apps/api-documenter/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -19,4 +18,4 @@ module.exports = defineConfig([ 'no-console': 'off' } } -]); +]; diff --git a/apps/cpu-profile-summarizer/eslint.config.js b/apps/cpu-profile-summarizer/eslint.config.js index 8ac0cef2c22..ceb5a1bee40 100644 --- a/apps/cpu-profile-summarizer/eslint.config.js +++ b/apps/cpu-profile-summarizer/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -19,4 +18,4 @@ module.exports = defineConfig([ 'no-console': 'off' } } -]); +]; diff --git a/apps/lockfile-explorer-web/eslint.config.js b/apps/lockfile-explorer-web/eslint.config.js index 968377e406a..4664e2044d7 100644 --- a/apps/lockfile-explorer-web/eslint.config.js +++ b/apps/lockfile-explorer-web/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...webAppProfile, ...reactMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/apps/lockfile-explorer/eslint.config.js b/apps/lockfile-explorer/eslint.config.js index 247d86bbeca..0c26ce1ce48 100644 --- a/apps/lockfile-explorer/eslint.config.js +++ b/apps/lockfile-explorer/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -17,4 +16,4 @@ module.exports = defineConfig([ 'no-console': 'off' } } -]); +]; diff --git a/apps/rundown/eslint.config.js b/apps/rundown/eslint.config.js index 8ac0cef2c22..ceb5a1bee40 100644 --- a/apps/rundown/eslint.config.js +++ b/apps/rundown/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -19,4 +18,4 @@ module.exports = defineConfig([ 'no-console': 'off' } } -]); +]; diff --git a/apps/rush-mcp-server/eslint.config.js b/apps/rush-mcp-server/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/apps/rush-mcp-server/eslint.config.js +++ b/apps/rush-mcp-server/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/apps/rush/eslint.config.js b/apps/rush/eslint.config.js index 8ac0cef2c22..ceb5a1bee40 100644 --- a/apps/rush/eslint.config.js +++ b/apps/rush/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -19,4 +18,4 @@ module.exports = defineConfig([ 'no-console': 'off' } } -]); +]; diff --git a/apps/trace-import/eslint.config.js b/apps/trace-import/eslint.config.js index 8ac0cef2c22..ceb5a1bee40 100644 --- a/apps/trace-import/eslint.config.js +++ b/apps/trace-import/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -19,4 +18,4 @@ module.exports = defineConfig([ 'no-console': 'off' } } -]); +]; diff --git a/build-tests-samples/heft-node-basic-tutorial/eslint.config.js b/build-tests-samples/heft-node-basic-tutorial/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests-samples/heft-node-basic-tutorial/eslint.config.js +++ b/build-tests-samples/heft-node-basic-tutorial/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-samples/heft-node-jest-tutorial/eslint.config.js b/build-tests-samples/heft-node-jest-tutorial/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests-samples/heft-node-jest-tutorial/eslint.config.js +++ b/build-tests-samples/heft-node-jest-tutorial/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-samples/heft-node-rig-tutorial/eslint.config.js b/build-tests-samples/heft-node-rig-tutorial/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests-samples/heft-node-rig-tutorial/eslint.config.js +++ b/build-tests-samples/heft-node-rig-tutorial/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js b/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js +++ b/build-tests-samples/heft-serverless-stack-tutorial/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-samples/heft-storybook-react-tutorial/eslint.config.js b/build-tests-samples/heft-storybook-react-tutorial/eslint.config.js index 7829878c089..e5eaf3c624a 100644 --- a/build-tests-samples/heft-storybook-react-tutorial/eslint.config.js +++ b/build-tests-samples/heft-storybook-react-tutorial/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, ...reactMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index 7829878c089..e5eaf3c624a 100644 --- a/build-tests-samples/heft-web-rig-app-tutorial/eslint.config.js +++ b/build-tests-samples/heft-web-rig-app-tutorial/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, ...reactMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index 7829878c089..e5eaf3c624a 100644 --- a/build-tests-samples/heft-web-rig-library-tutorial/eslint.config.js +++ b/build-tests-samples/heft-web-rig-library-tutorial/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, ...reactMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js b/build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js index 7829878c089..e5eaf3c624a 100644 --- a/build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js +++ b/build-tests-samples/heft-webpack-basic-tutorial/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, ...reactMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-subspace/rush-lib-test/eslint.config.js b/build-tests-subspace/rush-lib-test/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests-subspace/rush-lib-test/eslint.config.js +++ b/build-tests-subspace/rush-lib-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-subspace/rush-sdk-test/eslint.config.js b/build-tests-subspace/rush-sdk-test/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests-subspace/rush-sdk-test/eslint.config.js +++ b/build-tests-subspace/rush-sdk-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-subspace/typescript-newest-test/eslint.config.js b/build-tests-subspace/typescript-newest-test/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests-subspace/typescript-newest-test/eslint.config.js +++ b/build-tests-subspace/typescript-newest-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests-subspace/typescript-v4-test/eslint.config.js b/build-tests-subspace/typescript-v4-test/eslint.config.js index 778da21999d..20dead69438 100644 --- a/build-tests-subspace/typescript-v4-test/eslint.config.js +++ b/build-tests-subspace/typescript-v4-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); -const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node'); +const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); -module.exports = defineConfig([ - ...nodeTrustedToolProfile, +module.exports = [ + ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], languageOptions: { @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/api-documenter-scenarios/eslint.config.js b/build-tests/api-documenter-scenarios/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests/api-documenter-scenarios/eslint.config.js +++ b/build-tests/api-documenter-scenarios/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/api-documenter-test/eslint.config.js b/build-tests/api-documenter-test/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests/api-documenter-test/eslint.config.js +++ b/build-tests/api-documenter-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/eslint-9-test/eslint.config.js b/build-tests/eslint-9-test/eslint.config.js index a3fe2d6d289..d86d5e04d6c 100644 --- a/build-tests/eslint-9-test/eslint.config.js +++ b/build-tests/eslint-9-test/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -26,4 +25,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-example-plugin-01/eslint.config.js b/build-tests/heft-example-plugin-01/eslint.config.js index f3eea545808..a05a76dc048 100644 --- a/build-tests/heft-example-plugin-01/eslint.config.js +++ b/build-tests/heft-example-plugin-01/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-example-plugin-02/eslint.config.js b/build-tests/heft-example-plugin-02/eslint.config.js index f3eea545808..a05a76dc048 100644 --- a/build-tests/heft-example-plugin-02/eslint.config.js +++ b/build-tests/heft-example-plugin-02/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-fastify-test/eslint.config.js b/build-tests/heft-fastify-test/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests/heft-fastify-test/eslint.config.js +++ b/build-tests/heft-fastify-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-jest-preset-test/eslint.config.js b/build-tests/heft-jest-preset-test/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests/heft-jest-preset-test/eslint.config.js +++ b/build-tests/heft-jest-preset-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-jest-reporters-test/eslint.config.js b/build-tests/heft-jest-reporters-test/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests/heft-jest-reporters-test/eslint.config.js +++ b/build-tests/heft-jest-reporters-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests/heft-node-everything-esm-module-test/eslint.config.cjs +++ b/build-tests/heft-node-everything-esm-module-test/eslint.config.cjs @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-node-everything-test/eslint.config.js b/build-tests/heft-node-everything-test/eslint.config.js index 2a15ea7f46b..3d80b5cc649 100644 --- a/build-tests/heft-node-everything-test/eslint.config.js +++ b/build-tests/heft-node-everything-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-parameter-plugin/eslint.config.js b/build-tests/heft-parameter-plugin/eslint.config.js index f3eea545808..a05a76dc048 100644 --- a/build-tests/heft-parameter-plugin/eslint.config.js +++ b/build-tests/heft-parameter-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-sass-test/eslint.config.js b/build-tests/heft-sass-test/eslint.config.js index 7829878c089..e5eaf3c624a 100644 --- a/build-tests/heft-sass-test/eslint.config.js +++ b/build-tests/heft-sass-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, ...reactMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-swc-test/eslint.config.js b/build-tests/heft-swc-test/eslint.config.js index 54c599ea1b8..5a9df48909b 100644 --- a/build-tests/heft-swc-test/eslint.config.js +++ b/build-tests/heft-swc-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-typescript-composite-test/eslint.config.js b/build-tests/heft-typescript-composite-test/eslint.config.js index c408705a1b0..0b09ea9f25b 100644 --- a/build-tests/heft-typescript-composite-test/eslint.config.js +++ b/build-tests/heft-typescript-composite-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -15,4 +14,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-web-rig-library-test/eslint.config.js b/build-tests/heft-web-rig-library-test/eslint.config.js index 64162ee84a2..2c2f8d27066 100644 --- a/build-tests/heft-web-rig-library-test/eslint.config.js +++ b/build-tests/heft-web-rig-library-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('@rushstack/heft-web-rig/profiles/library/includes/eslint/flat/profile/web-app'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-webpack4-everything-test/eslint.config.js b/build-tests/heft-webpack4-everything-test/eslint.config.js index 54c599ea1b8..5a9df48909b 100644 --- a/build-tests/heft-webpack4-everything-test/eslint.config.js +++ b/build-tests/heft-webpack4-everything-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/heft-webpack5-everything-test/eslint.config.js b/build-tests/heft-webpack5-everything-test/eslint.config.js index 54c599ea1b8..5a9df48909b 100644 --- a/build-tests/heft-webpack5-everything-test/eslint.config.js +++ b/build-tests/heft-webpack5-everything-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/localization-plugin-test-01/eslint.config.js b/build-tests/localization-plugin-test-01/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests/localization-plugin-test-01/eslint.config.js +++ b/build-tests/localization-plugin-test-01/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/localization-plugin-test-02/eslint.config.js b/build-tests/localization-plugin-test-02/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests/localization-plugin-test-02/eslint.config.js +++ b/build-tests/localization-plugin-test-02/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/localization-plugin-test-03/eslint.config.js b/build-tests/localization-plugin-test-03/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests/localization-plugin-test-03/eslint.config.js +++ b/build-tests/localization-plugin-test-03/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/run-scenarios-helpers/eslint.config.js b/build-tests/run-scenarios-helpers/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests/run-scenarios-helpers/eslint.config.js +++ b/build-tests/run-scenarios-helpers/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index c8411d742f5..95db6d06e12 100644 --- 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 @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/build-tests/rush-lib-declaration-paths-test/eslint.config.js b/build-tests/rush-lib-declaration-paths-test/eslint.config.js index 2d6e3c4363a..096c66fb598 100644 --- a/build-tests/rush-lib-declaration-paths-test/eslint.config.js +++ b/build-tests/rush-lib-declaration-paths-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -20,4 +19,4 @@ module.exports = defineConfig([ 'header/header': 'off' } } -]); +]; diff --git a/build-tests/rush-project-change-analyzer-test/eslint.config.js b/build-tests/rush-project-change-analyzer-test/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/build-tests/rush-project-change-analyzer-test/eslint.config.js +++ b/build-tests/rush-project-change-analyzer-test/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index c8411d742f5..95db6d06e12 100644 --- a/build-tests/rush-redis-cobuild-plugin-integration-test/eslint.config.js +++ b/build-tests/rush-redis-cobuild-plugin-integration-test/eslint.config.js @@ -1,10 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-node-rig/profiles/default/includes/eslint/flat/profile/node'); -module.exports = defineConfig([ +module.exports = [ ...nodeProfile, { files: ['**/*.ts', '**/*.tsx'], @@ -14,4 +13,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/eslint/eslint-config/flat/mixins/friendly-locals.js b/eslint/eslint-config/flat/mixins/friendly-locals.js index 6e73fcf30e3..e63e96783ca 100644 --- a/eslint/eslint-config/flat/mixins/friendly-locals.js +++ b/eslint/eslint-config/flat/mixins/friendly-locals.js @@ -22,10 +22,9 @@ // // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); -module.exports = defineConfig([ +module.exports = [ { files: ['**/*.ts', '**/*.tsx'], plugins: { @@ -88,4 +87,4 @@ module.exports = defineConfig([ ] } } -]); +]; diff --git a/eslint/eslint-config/flat/mixins/packlets.js b/eslint/eslint-config/flat/mixins/packlets.js index 8adcd30600d..0c1f22487dd 100644 --- a/eslint/eslint-config/flat/mixins/packlets.js +++ b/eslint/eslint-config/flat/mixins/packlets.js @@ -7,10 +7,9 @@ // // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const rushstackPackletsEslintPlugin = require('@rushstack/eslint-plugin-packlets'); -module.exports = defineConfig({ +module.exports = { files: ['**/*.ts', '**/*.tsx'], plugins: { '@rushstack/packlets': rushstackPackletsEslintPlugin @@ -19,4 +18,4 @@ module.exports = defineConfig({ '@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 index 6efb085a7b5..6b2c4126c26 100644 --- a/eslint/eslint-config/flat/mixins/react.js +++ b/eslint/eslint-config/flat/mixins/react.js @@ -6,10 +6,9 @@ // // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const reactEslintPlugin = require('eslint-plugin-react'); -module.exports = defineConfig({ +module.exports = { files: ['**/*.ts', '**/*.tsx'], plugins: { react: reactEslintPlugin @@ -73,4 +72,4 @@ module.exports = defineConfig({ // 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 index 5955760f892..63287129cd7 100644 --- a/eslint/eslint-config/flat/mixins/tsdoc.js +++ b/eslint/eslint-config/flat/mixins/tsdoc.js @@ -6,10 +6,9 @@ // // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const tsdocEslintPlugin = require('eslint-plugin-tsdoc'); -module.exports = defineConfig({ +module.exports = { files: ['**/*.ts', '**/*.tsx'], plugins: { tsdoc: tsdocEslintPlugin @@ -17,4 +16,4 @@ module.exports = defineConfig({ rules: { 'tsdoc/syntax': 'warn' } -}); +}; diff --git a/eslint/eslint-config/flat/profile/_common.js b/eslint/eslint-config/flat/profile/_common.js index 28a01711fac..cb35456c9db 100644 --- a/eslint/eslint-config/flat/profile/_common.js +++ b/eslint/eslint-config/flat/profile/_common.js @@ -20,7 +20,7 @@ // - 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 { defineConfig, globalIgnores } = require('eslint/config'); +const { globalIgnores } = require('eslint/config'); const promiseEslintPlugin = require('eslint-plugin-promise'); const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); const typescriptEslintParser = require('@typescript-eslint/parser'); @@ -183,7 +183,7 @@ const commonNamingConventionSelectors = [ } ]; -const commonConfig = defineConfig([ +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. @@ -772,6 +772,6 @@ const commonConfig = defineConfig([ '@rushstack/typedef-var': 'off' } } -]); +]; module.exports = { commonNamingConventionSelectors, commonConfig }; diff --git a/eslint/eslint-config/flat/profile/node-trusted-tool.js b/eslint/eslint-config/flat/profile/node-trusted-tool.js index 4109a60f32f..a6a05c4b061 100644 --- a/eslint/eslint-config/flat/profile/node-trusted-tool.js +++ b/eslint/eslint-config/flat/profile/node-trusted-tool.js @@ -12,10 +12,9 @@ // 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 { defineConfig } = require('eslint/config'); const { commonConfig } = require('./_common'); -module.exports = defineConfig([ +module.exports = [ ...commonConfig, { files: ['**/*.ts', '**/*.tsx'], @@ -24,4 +23,4 @@ module.exports = defineConfig([ '@rushstack/security/no-unsafe-regexp': 'off' } } -]); +]; diff --git a/eslint/eslint-config/flat/profile/node.js b/eslint/eslint-config/flat/profile/node.js index f0348ae2194..e18325a793a 100644 --- a/eslint/eslint-config/flat/profile/node.js +++ b/eslint/eslint-config/flat/profile/node.js @@ -5,7 +5,6 @@ // 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 { defineConfig } = require('eslint/config'); const { commonConfig } = require('./_common'); -module.exports = defineConfig([...commonConfig]); +module.exports = [...commonConfig]; diff --git a/eslint/eslint-config/flat/profile/web-app.js b/eslint/eslint-config/flat/profile/web-app.js index cb4d39d17c5..8d254fdd8d9 100644 --- a/eslint/eslint-config/flat/profile/web-app.js +++ b/eslint/eslint-config/flat/profile/web-app.js @@ -7,7 +7,6 @@ // Also use this profile if you are creating a library that can be consumed by both Node.js // and web applications. -const { defineConfig } = require('eslint/config'); const { commonConfig } = require('./_common'); -module.exports = defineConfig([...commonConfig]); +module.exports = [...commonConfig]; diff --git a/eslint/local-eslint-config/flat/mixins/friendly-locals.js b/eslint/local-eslint-config/flat/mixins/friendly-locals.js index b188d376fd1..446fe54cad6 100644 --- a/eslint/local-eslint-config/flat/mixins/friendly-locals.js +++ b/eslint/local-eslint-config/flat/mixins/friendly-locals.js @@ -3,7 +3,6 @@ // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([...friendlyLocalsMixin]); +module.exports = [...friendlyLocalsMixin]; diff --git a/eslint/local-eslint-config/flat/mixins/packlets.js b/eslint/local-eslint-config/flat/mixins/packlets.js index b4722218b9a..c6f6a123ab5 100644 --- a/eslint/local-eslint-config/flat/mixins/packlets.js +++ b/eslint/local-eslint-config/flat/mixins/packlets.js @@ -3,7 +3,6 @@ // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); -module.exports = defineConfig([...packletsMixin]); +module.exports = [...packletsMixin]; diff --git a/eslint/local-eslint-config/flat/mixins/react.js b/eslint/local-eslint-config/flat/mixins/react.js index 51026dd8f21..15deb89fa31 100644 --- a/eslint/local-eslint-config/flat/mixins/react.js +++ b/eslint/local-eslint-config/flat/mixins/react.js @@ -11,11 +11,10 @@ // // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const reactHooksEslintPlugin = require('eslint-plugin-react-hooks'); const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); -module.exports = defineConfig([ +module.exports = [ ...reactMixin, { files: ['**/*.ts', '**/*.tsx'], @@ -54,4 +53,4 @@ module.exports = defineConfig([ // 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 index 452ac15d8d3..342d3612a97 100644 --- a/eslint/local-eslint-config/flat/mixins/tsdoc.js +++ b/eslint/local-eslint-config/flat/mixins/tsdoc.js @@ -3,11 +3,10 @@ // IMPORTANT: Mixins must be included in your ESLint configuration AFTER the profile -const { defineConfig } = require('eslint/config'); const jsdocEslintPlugin = require('eslint-plugin-jsdoc'); const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); -module.exports = defineConfig([ +module.exports = [ ...tsdocMixin, { files: ['**/*.ts', '**/*.tsx'], @@ -40,4 +39,4 @@ module.exports = defineConfig([ ], rules: {} } -]); +]; diff --git a/eslint/local-eslint-config/flat/profile/_common.js b/eslint/local-eslint-config/flat/profile/_common.js index b9cc8a8efda..c7a8b144da3 100644 --- a/eslint/local-eslint-config/flat/profile/_common.js +++ b/eslint/local-eslint-config/flat/profile/_common.js @@ -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. -const { defineConfig } = require('eslint/config'); const { expandNamingConventionSelectors } = require('@rushstack/eslint-config/flat/profile/_macros'); const { commonNamingConventionSelectors } = require('@rushstack/eslint-config/flat/profile/_common'); const rushstackEslintPlugin = require('@rushstack/eslint-plugin'); @@ -12,7 +11,7 @@ const headersEslintPlugin = require('eslint-plugin-headers'); const nodeImportResolverPath = require.resolve('eslint-import-resolver-node'); module.exports = { - localCommonConfig: defineConfig([ + localCommonConfig: [ { files: ['**/*.ts', '**/*.tsx'], plugins: { @@ -160,5 +159,5 @@ module.exports = { ], 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 index 565773ef235..69c3662a206 100644 --- a/eslint/local-eslint-config/flat/profile/node-trusted-tool.js +++ b/eslint/local-eslint-config/flat/profile/node-trusted-tool.js @@ -12,9 +12,8 @@ // 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 { defineConfig } = require('eslint/config'); const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node-trusted-tool'); const { localCommonConfig } = require('./_common'); -module.exports = defineConfig([...nodeTrustedToolProfile, ...localCommonConfig]); +module.exports = [...nodeTrustedToolProfile, ...localCommonConfig]; diff --git a/eslint/local-eslint-config/flat/profile/node.js b/eslint/local-eslint-config/flat/profile/node.js index deedc8067b8..0b3e77ec0e7 100644 --- a/eslint/local-eslint-config/flat/profile/node.js +++ b/eslint/local-eslint-config/flat/profile/node.js @@ -5,9 +5,8 @@ // 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 { defineConfig } = require('eslint/config'); const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); const { localCommonConfig } = require('./_common'); -module.exports = defineConfig([...nodeProfile, ...localCommonConfig]); +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 index ac85123b880..7990844a462 100644 --- a/eslint/local-eslint-config/flat/profile/web-app.js +++ b/eslint/local-eslint-config/flat/profile/web-app.js @@ -7,13 +7,12 @@ // Also use this profile if you are creating a library that can be consumed by both Node.js // and web applications. -const { defineConfig } = require('eslint/config'); const typescriptEslintPlugin = require('@typescript-eslint/eslint-plugin'); const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); const { localCommonConfig } = require('./_common'); -module.exports = defineConfig([ +module.exports = [ ...webAppProfile, ...localCommonConfig, { @@ -27,4 +26,4 @@ module.exports = defineConfig([ '@typescript-eslint/no-require-imports': 'error' } } -]); +]; diff --git a/heft-plugins/heft-dev-cert-plugin/eslint.config.js b/heft-plugins/heft-dev-cert-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-dev-cert-plugin/eslint.config.js +++ b/heft-plugins/heft-dev-cert-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js b/heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js +++ b/heft-plugins/heft-isolated-typescript-transpile-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/heft-plugins/heft-localization-typings-plugin/eslint.config.js b/heft-plugins/heft-localization-typings-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-localization-typings-plugin/eslint.config.js +++ b/heft-plugins/heft-localization-typings-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-sass-load-themed-styles-plugin/eslint.config.js +++ b/heft-plugins/heft-sass-load-themed-styles-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/heft-plugins/heft-sass-plugin/eslint.config.js b/heft-plugins/heft-sass-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-sass-plugin/eslint.config.js +++ b/heft-plugins/heft-sass-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/heft-plugins/heft-serverless-stack-plugin/eslint.config.js b/heft-plugins/heft-serverless-stack-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-serverless-stack-plugin/eslint.config.js +++ b/heft-plugins/heft-serverless-stack-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/heft-plugins/heft-storybook-plugin/eslint.config.js b/heft-plugins/heft-storybook-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-storybook-plugin/eslint.config.js +++ b/heft-plugins/heft-storybook-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/heft-plugins/heft-webpack4-plugin/eslint.config.js b/heft-plugins/heft-webpack4-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-webpack4-plugin/eslint.config.js +++ b/heft-plugins/heft-webpack4-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/heft-plugins/heft-webpack5-plugin/eslint.config.js b/heft-plugins/heft-webpack5-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/heft-plugins/heft-webpack5-plugin/eslint.config.js +++ b/heft-plugins/heft-webpack5-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/debug-certificate-manager/eslint.config.js b/libraries/debug-certificate-manager/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/libraries/debug-certificate-manager/eslint.config.js +++ b/libraries/debug-certificate-manager/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/load-themed-styles/eslint.config.js b/libraries/load-themed-styles/eslint.config.js index abbbc0f994d..8a61a653f26 100644 --- a/libraries/load-themed-styles/eslint.config.js +++ b/libraries/load-themed-styles/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...webAppProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/localization-utilities/eslint.config.js b/libraries/localization-utilities/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/libraries/localization-utilities/eslint.config.js +++ b/libraries/localization-utilities/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/lookup-by-path/eslint.config.js b/libraries/lookup-by-path/eslint.config.js index 50face04735..87132f43292 100644 --- a/libraries/lookup-by-path/eslint.config.js +++ b/libraries/lookup-by-path/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, ...tsdocMixin, @@ -18,4 +17,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/module-minifier/eslint.config.js b/libraries/module-minifier/eslint.config.js index 50face04735..87132f43292 100644 --- a/libraries/module-minifier/eslint.config.js +++ b/libraries/module-minifier/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, ...tsdocMixin, @@ -18,4 +17,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/package-deps-hash/eslint.config.js b/libraries/package-deps-hash/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/libraries/package-deps-hash/eslint.config.js +++ b/libraries/package-deps-hash/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/package-extractor/eslint.config.js b/libraries/package-extractor/eslint.config.js index 50face04735..87132f43292 100644 --- a/libraries/package-extractor/eslint.config.js +++ b/libraries/package-extractor/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, ...tsdocMixin, @@ -18,4 +17,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/rush-lib/eslint.config.js b/libraries/rush-lib/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/libraries/rush-lib/eslint.config.js +++ b/libraries/rush-lib/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/rush-sdk/eslint.config.js b/libraries/rush-sdk/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/libraries/rush-sdk/eslint.config.js +++ b/libraries/rush-sdk/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/rush-themed-ui/eslint.config.js b/libraries/rush-themed-ui/eslint.config.js index 53e8b8d093b..25d563f73a7 100644 --- a/libraries/rush-themed-ui/eslint.config.js +++ b/libraries/rush-themed-ui/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...webAppProfile, ...reactMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/rushell/eslint.config.js b/libraries/rushell/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/libraries/rushell/eslint.config.js +++ b/libraries/rushell/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/stream-collator/eslint.config.js b/libraries/stream-collator/eslint.config.js index 16133ac0d64..f7f52307dac 100644 --- a/libraries/stream-collator/eslint.config.js +++ b/libraries/stream-collator/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/typings-generator/eslint.config.js b/libraries/typings-generator/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/libraries/typings-generator/eslint.config.js +++ b/libraries/typings-generator/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/libraries/worker-pool/eslint.config.js b/libraries/worker-pool/eslint.config.js index 50face04735..87132f43292 100644 --- a/libraries/worker-pool/eslint.config.js +++ b/libraries/worker-pool/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, ...tsdocMixin, @@ -18,4 +17,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/repo-scripts/doc-plugin-rush-stack/eslint.config.js b/repo-scripts/doc-plugin-rush-stack/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/repo-scripts/doc-plugin-rush-stack/eslint.config.js +++ b/repo-scripts/doc-plugin-rush-stack/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/repo-scripts/repo-toolbox/eslint.config.js b/repo-scripts/repo-toolbox/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/repo-scripts/repo-toolbox/eslint.config.js +++ b/repo-scripts/repo-toolbox/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index 955de41c92b..860b58395f6 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([...friendlyLocalsMixin]); +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 index 7d89c075615..a3f2ea0992a 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); -module.exports = defineConfig([...packletsMixin]); +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 index b72013445cb..5aafda8dcf0 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); -module.exports = defineConfig([...reactMixin]); +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 index 2a50a53170b..012a5bece42 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); -module.exports = defineConfig([...tsdocMixin]); +module.exports = [...tsdocMixin]; 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 index 54635c3c6dd..245d236069a 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const nodeTrustedToolProfile = require('@rushstack/eslint-config/flat/profile/node-trusted-tool'); -module.exports = defineConfig([...nodeTrustedToolProfile]); +module.exports = [...nodeTrustedToolProfile]; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js index 29fb1b52229..16b5c3f2f6e 100644 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/profile/node.js @@ -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. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('@rushstack/eslint-config/flat/profile/node'); -module.exports = defineConfig([...nodeProfile]); +module.exports = [...nodeProfile]; 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 index 955de41c92b..860b58395f6 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([...friendlyLocalsMixin]); +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 index 7d89c075615..a3f2ea0992a 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); -module.exports = defineConfig([...packletsMixin]); +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 index b72013445cb..5aafda8dcf0 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); -module.exports = defineConfig([...reactMixin]); +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 index 2a50a53170b..012a5bece42 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); -module.exports = defineConfig([...tsdocMixin]); +module.exports = [...tsdocMixin]; 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 index e0baeb8fabf..d825f616500 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); -module.exports = defineConfig([...webAppProfile]); +module.exports = [...webAppProfile]; 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 index 955de41c92b..860b58395f6 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const friendlyLocalsMixin = require('@rushstack/eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([...friendlyLocalsMixin]); +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 index 7d89c075615..a3f2ea0992a 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const packletsMixin = require('@rushstack/eslint-config/flat/mixins/packlets'); -module.exports = defineConfig([...packletsMixin]); +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 index b72013445cb..5aafda8dcf0 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const reactMixin = require('@rushstack/eslint-config/flat/mixins/react'); -module.exports = defineConfig([...reactMixin]); +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 index 2a50a53170b..012a5bece42 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const tsdocMixin = require('@rushstack/eslint-config/flat/mixins/tsdoc'); -module.exports = defineConfig([...tsdocMixin]); +module.exports = [...tsdocMixin]; 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 index e0baeb8fabf..d825f616500 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('@rushstack/eslint-config/flat/profile/web-app'); -module.exports = defineConfig([...webAppProfile]); +module.exports = [...webAppProfile]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js index 01460747289..fa55581f566 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/friendly-locals.js @@ -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. -const { defineConfig } = require('eslint/config'); const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([...friendlyLocalsMixin]); +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js index c906babf0ba..4291377cb4d 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/packlets.js @@ -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. -const { defineConfig } = require('eslint/config'); const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); -module.exports = defineConfig([...packletsMixin]); +module.exports = [...packletsMixin]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js index 43271b52f6d..e8ce9b16050 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/react.js @@ -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. -const { defineConfig } = require('eslint/config'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([...reactMixin]); +module.exports = [...reactMixin]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js index 1634743ff68..e5cb903f6cd 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/mixins/tsdoc.js @@ -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. -const { defineConfig } = require('eslint/config'); const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); -module.exports = defineConfig([...tsdocMixin]); +module.exports = [...tsdocMixin]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js index 39c553e695e..aa7fc56fae1 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node-trusted-tool.js @@ -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. -const { defineConfig } = require('eslint/config'); const nodeTrustedToolProfile = require('local-eslint-config/flat/profile/node-trusted-tool'); -module.exports = defineConfig([...nodeTrustedToolProfile]); +module.exports = [...nodeTrustedToolProfile]; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js index 54b30beb8ad..753ef86ecb6 100644 --- a/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js +++ b/rigs/local-node-rig/profiles/default/includes/eslint/flat/profile/node.js @@ -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. -const { defineConfig } = require('eslint/config'); const nodeProfile = require('local-eslint-config/flat/profile/node'); -module.exports = defineConfig([...nodeProfile]); +module.exports = [...nodeProfile]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js index 01460747289..fa55581f566 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/friendly-locals.js @@ -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. -const { defineConfig } = require('eslint/config'); const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([...friendlyLocalsMixin]); +module.exports = [...friendlyLocalsMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js index c906babf0ba..4291377cb4d 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/packlets.js @@ -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. -const { defineConfig } = require('eslint/config'); const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); -module.exports = defineConfig([...packletsMixin]); +module.exports = [...packletsMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js index 43271b52f6d..e8ce9b16050 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/react.js @@ -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. -const { defineConfig } = require('eslint/config'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([...reactMixin]); +module.exports = [...reactMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js index 1634743ff68..e5cb903f6cd 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/mixins/tsdoc.js @@ -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. -const { defineConfig } = require('eslint/config'); const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); -module.exports = defineConfig([...tsdocMixin]); +module.exports = [...tsdocMixin]; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js index 6fbf201afe0..5d8f876da20 100644 --- a/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js +++ b/rigs/local-web-rig/profiles/app/includes/eslint/flat/profile/web-app.js @@ -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. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); -module.exports = defineConfig([...webAppProfile]); +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 index 01460747289..fa55581f566 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const friendlyLocalsMixin = require('local-eslint-config/flat/mixins/friendly-locals'); -module.exports = defineConfig([...friendlyLocalsMixin]); +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 index c906babf0ba..4291377cb4d 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const packletsMixin = require('local-eslint-config/flat/mixins/packlets'); -module.exports = defineConfig([...packletsMixin]); +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 index 43271b52f6d..e8ce9b16050 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const reactMixin = require('local-eslint-config/flat/mixins/react'); -module.exports = defineConfig([...reactMixin]); +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 index 1634743ff68..e5cb903f6cd 100644 --- 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 @@ -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. -const { defineConfig } = require('eslint/config'); const tsdocMixin = require('local-eslint-config/flat/mixins/tsdoc'); -module.exports = defineConfig([...tsdocMixin]); +module.exports = [...tsdocMixin]; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js b/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js index 6fbf201afe0..5d8f876da20 100644 --- a/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js +++ b/rigs/local-web-rig/profiles/library/includes/eslint/flat/profile/web-app.js @@ -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. -const { defineConfig } = require('eslint/config'); const webAppProfile = require('local-eslint-config/flat/profile/web-app'); -module.exports = defineConfig([...webAppProfile]); +module.exports = [...webAppProfile]; 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 index e1662ed03d3..c15e6077310 100644 --- a/rush-plugins/rush-amazon-s3-build-cache-plugin/eslint.config.js +++ b/rush-plugins/rush-amazon-s3-build-cache-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; 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 index e1662ed03d3..c15e6077310 100644 --- a/rush-plugins/rush-azure-storage-build-cache-plugin/eslint.config.js +++ b/rush-plugins/rush-azure-storage-build-cache-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/rush-plugins/rush-buildxl-graph-plugin/eslint.config.js b/rush-plugins/rush-buildxl-graph-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/rush-plugins/rush-buildxl-graph-plugin/eslint.config.js +++ b/rush-plugins/rush-buildxl-graph-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/rush-plugins/rush-http-build-cache-plugin/eslint.config.js b/rush-plugins/rush-http-build-cache-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/rush-plugins/rush-http-build-cache-plugin/eslint.config.js +++ b/rush-plugins/rush-http-build-cache-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/rush-plugins/rush-litewatch-plugin/eslint.config.js b/rush-plugins/rush-litewatch-plugin/eslint.config.js index 50face04735..87132f43292 100644 --- a/rush-plugins/rush-litewatch-plugin/eslint.config.js +++ b/rush-plugins/rush-litewatch-plugin/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, ...tsdocMixin, @@ -18,4 +17,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/rush-plugins/rush-redis-cobuild-plugin/eslint.config.js b/rush-plugins/rush-redis-cobuild-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/rush-plugins/rush-redis-cobuild-plugin/eslint.config.js +++ b/rush-plugins/rush-redis-cobuild-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/rush-plugins/rush-resolver-cache-plugin/eslint.config.js b/rush-plugins/rush-resolver-cache-plugin/eslint.config.js index 50face04735..87132f43292 100644 --- a/rush-plugins/rush-resolver-cache-plugin/eslint.config.js +++ b/rush-plugins/rush-resolver-cache-plugin/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, ...tsdocMixin, @@ -18,4 +17,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/rush-plugins/rush-serve-plugin/eslint.config.js b/rush-plugins/rush-serve-plugin/eslint.config.js index 50face04735..87132f43292 100644 --- a/rush-plugins/rush-serve-plugin/eslint.config.js +++ b/rush-plugins/rush-serve-plugin/eslint.config.js @@ -1,12 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeProfile, ...friendlyLocalsMixin, ...tsdocMixin, @@ -18,4 +17,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/vscode-extensions/rush-vscode-command-webview/eslint.config.js b/vscode-extensions/rush-vscode-command-webview/eslint.config.js index 1e1849783d3..d19f4f2a29b 100644 --- a/vscode-extensions/rush-vscode-command-webview/eslint.config.js +++ b/vscode-extensions/rush-vscode-command-webview/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...webAppProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/vscode-extensions/rush-vscode-extension/eslint.config.js b/vscode-extensions/rush-vscode-extension/eslint.config.js index 4a7834e92ea..3470d28356b 100644 --- a/vscode-extensions/rush-vscode-extension/eslint.config.js +++ b/vscode-extensions/rush-vscode-extension/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -19,4 +18,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/hashed-folder-copy-plugin/eslint.config.js b/webpack/hashed-folder-copy-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/hashed-folder-copy-plugin/eslint.config.js +++ b/webpack/hashed-folder-copy-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/loader-load-themed-styles/eslint.config.js b/webpack/loader-load-themed-styles/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/loader-load-themed-styles/eslint.config.js +++ b/webpack/loader-load-themed-styles/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/loader-raw-script/eslint.config.js b/webpack/loader-raw-script/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/loader-raw-script/eslint.config.js +++ b/webpack/loader-raw-script/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/preserve-dynamic-require-plugin/eslint.config.js b/webpack/preserve-dynamic-require-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/preserve-dynamic-require-plugin/eslint.config.js +++ b/webpack/preserve-dynamic-require-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/set-webpack-public-path-plugin/eslint.config.js b/webpack/set-webpack-public-path-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/set-webpack-public-path-plugin/eslint.config.js +++ b/webpack/set-webpack-public-path-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack-deep-imports-plugin/eslint.config.js b/webpack/webpack-deep-imports-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack-deep-imports-plugin/eslint.config.js +++ b/webpack/webpack-deep-imports-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack-embedded-dependencies-plugin/eslint.config.js b/webpack/webpack-embedded-dependencies-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack-embedded-dependencies-plugin/eslint.config.js +++ b/webpack/webpack-embedded-dependencies-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack-plugin-utilities/eslint.config.js b/webpack/webpack-plugin-utilities/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack-plugin-utilities/eslint.config.js +++ b/webpack/webpack-plugin-utilities/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack-workspace-resolve-plugin/eslint.config.js b/webpack/webpack-workspace-resolve-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack-workspace-resolve-plugin/eslint.config.js +++ b/webpack/webpack-workspace-resolve-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack4-localization-plugin/eslint.config.js b/webpack/webpack4-localization-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack4-localization-plugin/eslint.config.js +++ b/webpack/webpack4-localization-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack4-module-minifier-plugin/eslint.config.js b/webpack/webpack4-module-minifier-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack4-module-minifier-plugin/eslint.config.js +++ b/webpack/webpack4-module-minifier-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack5-load-themed-styles-loader/eslint.config.js b/webpack/webpack5-load-themed-styles-loader/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack5-load-themed-styles-loader/eslint.config.js +++ b/webpack/webpack5-load-themed-styles-loader/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack5-localization-plugin/eslint.config.js b/webpack/webpack5-localization-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack5-localization-plugin/eslint.config.js +++ b/webpack/webpack5-localization-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; diff --git a/webpack/webpack5-module-minifier-plugin/eslint.config.js b/webpack/webpack5-module-minifier-plugin/eslint.config.js index e1662ed03d3..c15e6077310 100644 --- a/webpack/webpack5-module-minifier-plugin/eslint.config.js +++ b/webpack/webpack5-module-minifier-plugin/eslint.config.js @@ -1,11 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license. // See LICENSE in the project root for license information. -const { defineConfig } = require('eslint/config'); 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 = defineConfig([ +module.exports = [ ...nodeTrustedToolProfile, ...friendlyLocalsMixin, { @@ -16,4 +15,4 @@ module.exports = defineConfig([ } } } -]); +]; From 9eca36a9d807b2996666688395a3f43f2d481e02 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Thu, 22 May 2025 14:57:54 -0700 Subject: [PATCH 34/60] Remove the local rig non-flat equivalents --- .../default/includes/eslint/mixins/friendly-locals.js | 6 ------ .../profiles/default/includes/eslint/mixins/packlets.js | 6 ------ .../profiles/default/includes/eslint/mixins/react.js | 6 ------ .../profiles/default/includes/eslint/mixins/tsdoc.js | 6 ------ .../includes/eslint/patch/custom-config-package-names.js | 4 ---- .../includes/eslint/patch/eslint-bulk-suppressions.js | 4 ---- .../includes/eslint/patch/modern-module-resolution.js | 4 ---- .../default/includes/eslint/profile/node-trusted-tool.js | 6 ------ .../profiles/default/includes/eslint/profile/node.js | 6 ------ .../profiles/app/includes/eslint/mixins/friendly-locals.js | 6 ------ .../profiles/app/includes/eslint/mixins/packlets.js | 6 ------ .../profiles/app/includes/eslint/mixins/react.js | 6 ------ .../profiles/app/includes/eslint/mixins/tsdoc.js | 6 ------ .../includes/eslint/patch/custom-config-package-names.js | 4 ---- .../app/includes/eslint/patch/modern-module-resolution.js | 4 ---- .../profiles/app/includes/eslint/profile/web-app.js | 6 ------ .../library/includes/eslint/mixins/friendly-locals.js | 6 ------ .../profiles/library/includes/eslint/mixins/packlets.js | 6 ------ .../profiles/library/includes/eslint/mixins/react.js | 6 ------ .../profiles/library/includes/eslint/mixins/tsdoc.js | 6 ------ .../includes/eslint/patch/custom-config-package-names.js | 4 ---- .../includes/eslint/patch/modern-module-resolution.js | 4 ---- .../profiles/library/includes/eslint/profile/web-app.js | 6 ------ 23 files changed, 124 deletions(-) delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js delete mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js delete mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js deleted file mode 100644 index 8ce8a5a50f1..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js deleted file mode 100644 index 34121152062..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/packlets.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js deleted file mode 100644 index 32d2625068b..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/react.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js b/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js deleted file mode 100644 index 48a832eef64..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 831b7c639fb..00000000000 --- a/rigs/local-node-rig/profiles/default/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/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js deleted file mode 100644 index 6cc6d7238fb..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.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/eslint-bulk-suppressions'); diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js b/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index a262ef96af5..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); 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/profile/node-trusted-tool.js deleted file mode 100644 index ffced0b4377..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js b/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js deleted file mode 100644 index 58350ac8a62..00000000000 --- a/rigs/local-node-rig/profiles/default/includes/eslint/profile/node.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js deleted file mode 100644 index 8ce8a5a50f1..00000000000 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js deleted file mode 100644 index 34121152062..00000000000 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/packlets.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js deleted file mode 100644 index 32d2625068b..00000000000 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/react.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js b/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js deleted file mode 100644 index 48a832eef64..00000000000 --- a/rigs/local-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js b/rigs/local-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js deleted file mode 100644 index 831b7c639fb..00000000000 --- a/rigs/local-web-rig/profiles/app/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/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js b/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index a262ef96af5..00000000000 --- a/rigs/local-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js deleted file mode 100644 index 6753941a378..00000000000 --- a/rigs/local-web-rig/profiles/app/includes/eslint/profile/web-app.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js deleted file mode 100644 index 8ce8a5a50f1..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js deleted file mode 100644 index 34121152062..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/packlets.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js deleted file mode 100644 index 32d2625068b..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/react.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js b/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js deleted file mode 100644 index 48a832eef64..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; 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/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js b/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js deleted file mode 100644 index a262ef96af5..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js b/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js deleted file mode 100644 index 6753941a378..00000000000 --- a/rigs/local-web-rig/profiles/library/includes/eslint/profile/web-app.js +++ /dev/null @@ -1,6 +0,0 @@ -// 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'] -}; From d10ab8a9f5c5e32fb18fa62cdc63e8387f5ac369 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 23 May 2025 14:41:09 -0700 Subject: [PATCH 35/60] Fix build --- .../dist/tsdoc-metadata.json | 2 +- .../client/.eslintrc.js | 7 +- .../server/.eslintrc.js | 7 +- eslint/eslint-bulk/.eslintrc.js | 21 --- eslint/eslint-bulk/eslint.config.js | 21 +++ eslint/eslint-config/flat/mixins/react.js | 128 +++++++++--------- eslint/eslint-config/flat/mixins/tsdoc.js | 18 +-- 7 files changed, 103 insertions(+), 101 deletions(-) delete mode 100644 eslint/eslint-bulk/.eslintrc.js create mode 100644 eslint/eslint-bulk/eslint.config.js diff --git a/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json b/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json index 953bd7b7bdb..89625ac60e4 100644 --- a/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json +++ b/build-tests/api-extractor-test-05/dist/tsdoc-metadata.json @@ -5,7 +5,7 @@ "toolPackages": [ { "packageName": "@microsoft/api-extractor", - "packageVersion": "7.52.7" + "packageVersion": "7.52.8" } ] } 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/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/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-config/flat/mixins/react.js b/eslint/eslint-config/flat/mixins/react.js index 6b2c4126c26..8ee798c1e0b 100644 --- a/eslint/eslint-config/flat/mixins/react.js +++ b/eslint/eslint-config/flat/mixins/react.js @@ -8,68 +8,70 @@ 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' +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' } - }, - 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 index 63287129cd7..2b1009259bf 100644 --- a/eslint/eslint-config/flat/mixins/tsdoc.js +++ b/eslint/eslint-config/flat/mixins/tsdoc.js @@ -8,12 +8,14 @@ const tsdocEslintPlugin = require('eslint-plugin-tsdoc'); -module.exports = { - files: ['**/*.ts', '**/*.tsx'], - plugins: { - tsdoc: tsdocEslintPlugin - }, - rules: { - 'tsdoc/syntax': 'warn' +module.exports = [ + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + tsdoc: tsdocEslintPlugin + }, + rules: { + 'tsdoc/syntax': 'warn' + } } -}; +]; From 20255fb094297720efe66fd267f58bf08479d4a2 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 23 May 2025 15:07:38 -0700 Subject: [PATCH 36/60] Add patch dependency back to local rigs --- .../build-tests-subspace/pnpm-lock.yaml | 25 +++++++------- .../build-tests-subspace/repo-state.json | 4 +-- .../config/subspaces/default/pnpm-lock.yaml | 33 +++++++++++++++++++ rigs/local-node-rig/package.json | 1 + .../flat/patch/eslint-bulk-suppressions.js | 4 +++ rigs/local-web-rig/package.json | 1 + .../flat/patch/eslint-bulk-suppressions.js | 4 +++ .../flat/patch/eslint-bulk-suppressions.js | 4 +++ 8 files changed, 62 insertions(+), 14 deletions(-) create mode 100644 rigs/local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js create mode 100644 rigs/local-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js create mode 100644 rigs/local-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js diff --git a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index c4e7eec3bc5..9933466902b 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -105,10 +105,10 @@ importers: 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.5)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.6)(@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.5)(@types/node@20.17.19) + version: file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.6)(@types/node@20.17.19) eslint: specifier: ~9.25.1 version: 9.25.1 @@ -6781,7 +6781,7 @@ packages: - supports-color dev: true - file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.5)(@types/node@20.17.19): + file:../../../heft-plugins/heft-api-extractor-plugin(@rushstack/heft@0.73.6)(@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' @@ -6795,7 +6795,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.5)(@types/node@20.17.19)(jest-environment-node@29.5.0): + file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.6)(@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' @@ -6830,7 +6830,7 @@ packages: - ts-node dev: true - file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.5)(@types/node@20.17.19): + file:../../../heft-plugins/heft-lint-plugin(@rushstack/heft@0.73.6)(@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' @@ -6845,7 +6845,7 @@ packages: - '@types/node' dev: true - file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.5)(@types/node@20.17.19): + file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.6)(@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' @@ -7070,7 +7070,7 @@ packages: transitivePeerDependencies: - '@types/node' - file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.5)(@types/node@20.17.19): + file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.6)(@types/node@20.17.19): resolution: {directory: ../../../rigs/heft-node-rig, type: directory} id: file:../../../rigs/heft-node-rig name: '@rushstack/heft-node-rig' @@ -7080,10 +7080,10 @@ packages: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) '@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.5)(@types/node@20.17.19) - '@rushstack/heft-jest-plugin': file:../../../heft-plugins/heft-jest-plugin(@rushstack/heft@0.73.5)(@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.5)(@types/node@20.17.19) - '@rushstack/heft-typescript-plugin': file:../../../heft-plugins/heft-typescript-plugin(@rushstack/heft@0.73.5)(@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) '@types/heft-jest': 1.0.1 eslint: 9.25.1 jest-environment-node: 29.5.0 @@ -7103,8 +7103,9 @@ 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.5)(@types/node@20.17.19) + '@rushstack/heft-node-rig': file:../../../rigs/heft-node-rig(@rushstack/heft@0.73.6)(@types/node@20.17.19) '@types/heft-jest': 1.0.1 '@types/node': 20.17.19 eslint: 9.25.1 diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index bf7e0901597..ecca7e3d910 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": "335c5510c55f7546d3d06673436cfc7f852556ce", + "pnpmShrinkwrapHash": "218b2843814056309dfe845c61743f26ec24948e", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "ae33ec2d818eaaed908c466da488e2cac9a70d87" + "packageJsonInjectedDependenciesHash": "73ac8c2f92989afefdb4e8bdb4cd7b95cd9ccc9a" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 803efa666d5..23af31f9052 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1279,6 +1279,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': @@ -4020,6 +4047,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 @@ -4050,6 +4080,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 diff --git a/rigs/local-node-rig/package.json b/rigs/local-node-rig/package.json index b2c70317c19..f5bca90d5a2 100644 --- a/rigs/local-node-rig/package.json +++ b/rigs/local-node-rig/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@microsoft/api-extractor": "workspace:*", + "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft-node-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@types/heft-jest": "1.0.1", diff --git a/rigs/local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/local-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/rigs/local-node-rig/profiles/default/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/package.json b/rigs/local-web-rig/package.json index 9149477c479..0a7c8002889 100644 --- a/rigs/local-web-rig/package.json +++ b/rigs/local-web-rig/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@microsoft/api-extractor": "workspace:*", + "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft-web-rig": "workspace:*", "@rushstack/heft": "workspace:*", "@types/heft-jest": "1.0.1", diff --git a/rigs/local-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/local-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/rigs/local-web-rig/profiles/app/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/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'); From 1e64ae1653738762fd18e1552f588f3e1d7784f1 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 23 May 2025 18:12:13 -0700 Subject: [PATCH 37/60] Add dedicated flat config test --- .../build.js | 108 ++++++++++++++ .../.eslint-bulk-suppressions-9.25.1.json | 139 ++++++++++++++++++ .../client/eslint.config.js | 26 ++++ .../client/src/index.ts | 64 ++++++++ .../config/rig.json | 7 + .../package.json | 19 +++ .../.eslint-bulk-suppressions-9.25.1.json | 69 +++++++++ .../server/eslint.config.js | 26 ++++ .../server/src/index.ts | 56 +++++++ .../tsconfig.json | 23 +++ rush.json | 6 + 11 files changed, 543 insertions(+) create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/build.js create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/client/.eslint-bulk-suppressions-9.25.1.json create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/client/eslint.config.js create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/client/src/index.ts create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/config/rig.json create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/package.json create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/server/.eslint-bulk-suppressions-9.25.1.json create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/server/eslint.config.js create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/server/src/index.ts create mode 100644 build-tests/eslint-bulk-suppressions-test-flat/tsconfig.json 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..9b2a80a0210 --- /dev/null +++ b/build-tests/eslint-bulk-suppressions-test-flat/client/.eslint-bulk-suppressions-9.25.1.json @@ -0,0 +1,139 @@ +{ + "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": ".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": ".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/rush.json b/rush.json index 3054d62391e..faa60056f2b 100644 --- a/rush.json +++ b/rush.json @@ -635,6 +635,12 @@ "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", From f1e702ac0f1ef1b337f1dc3564b9f899a9142c87 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Fri, 23 May 2025 18:13:01 -0700 Subject: [PATCH 38/60] Update patch file generation to be compatible with flat config --- eslint/eslint-bulk/src/start.ts | 8 +- eslint/eslint-patch/src/_patch-base.ts | 185 +++++++++++++----- .../generate-patched-file.ts | 31 ++- 3 files changed, 167 insertions(+), 57 deletions(-) diff --git a/eslint/eslint-bulk/src/start.ts b/eslint/eslint-bulk/src/start.ts index c591b09c09f..b4fae03071a 100644 --- a/eslint/eslint-bulk/src/start.ts +++ b/eslint/eslint-bulk/src/start.ts @@ -22,7 +22,13 @@ interface IEslintBulkConfigurationJson { } function findPatchPath(): string { - const candidatePaths: string[] = [`${process.cwd()}/.eslintrc.js`, `${process.cwd()}/.eslintrc.cjs`]; + const candidatePaths: string[] = [ + `${process.cwd()}/.eslintrc.js`, + `${process.cwd()}/.eslintrc.cjs`, + `${process.cwd()}/eslint.config.js`, + `${process.cwd()}/eslint.config.cjs`, + `${process.cwd()}/eslint.config.mjs` + ]; let eslintrcPath: string | undefined; for (const candidatePath of candidatePaths) { if (fs.existsSync(candidatePath)) { diff --git a/eslint/eslint-patch/src/_patch-base.ts b/eslint/eslint-patch/src/_patch-base.ts index 68651d3cb0a..380ea6637f9 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,86 @@ 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; + } + } + } + } + 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 +174,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 +306,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/generate-patched-file.ts b/eslint/eslint-patch/src/eslint-bulk-suppressions/generate-patched-file.ts index fdb97d28afa..8e4a5b6cc58 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 @@ -70,6 +70,20 @@ 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 @@ -80,16 +94,18 @@ export function generatePatchedLinterJsFileIfDoesNotExist( 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) { + if ( + startOfClassMethodIndex === -1 || + !startOfClassMethodMarker || + startOfClassMethodIndex > endOfClassIndex + ) { return -1; } - const afterMarkerIndex: number = - rest.indexOf(markerForStartOfClassMethod) + markerForStartOfClassMethod.length; + const afterMarkerIndex: number = startOfClassMethodIndex + startOfClassMethodMarker.length; const isPublicMethod: boolean = rest[afterMarkerIndex] !== '_' && @@ -207,9 +223,6 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ // --- END MONKEY PATCH --- `; - outputFile += scanUntilMarker('nodeQueue.forEach(traversalInfo => {'); - outputFile += scanUntilMarker('});'); - outputFile += scanUntilNewline(); outputFile += scanUntilMarker('class Linter {'); outputFile += scanUntilNewline(); outputFile += ` From d23b8636c41fe333be90e49240970b07d6537d6a Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 15:42:11 -0700 Subject: [PATCH 39/60] Fix standard bulk suppressions test --- .../client/.eslint-bulk-suppressions-8.57.0.json | 14 +++++++------- .../client/.eslintrc.js | 10 +++++----- .../eslint-bulk-suppressions-test/package.json | 1 + .../server/.eslint-bulk-suppressions-8.57.0.json | 4 ++-- .../server/.eslintrc.js | 10 +++++----- rush.json | 3 ++- 6 files changed, 22 insertions(+), 20 deletions(-) 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..40059c12365 100644 --- a/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json +++ b/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json @@ -8,12 +8,12 @@ { "file": "src/index.ts", "scopeId": ".ExampleClass", - "rule": "@typescript-eslint/explicit-member-accessibility" + "rule": "@typescript-eslint/ban-types" }, { "file": "src/index.ts", "scopeId": ".ExampleClass", - "rule": "@typescript-eslint/no-wrapper-object-types" + "rule": "@typescript-eslint/explicit-member-accessibility" }, { "file": "src/index.ts", @@ -58,17 +58,17 @@ { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/explicit-function-return-type" + "rule": "@typescript-eslint/ban-types" }, { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/explicit-member-accessibility" + "rule": "@typescript-eslint/explicit-function-return-type" }, { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/no-wrapper-object-types" + "rule": "@typescript-eslint/explicit-member-accessibility" }, { "file": "src/index.ts", @@ -98,12 +98,12 @@ { "file": "src/index.ts", "scopeId": ".exampleFunction", - "rule": "@typescript-eslint/explicit-function-return-type" + "rule": "@typescript-eslint/ban-types" }, { "file": "src/index.ts", "scopeId": ".exampleFunction", - "rule": "@typescript-eslint/no-wrapper-object-types" + "rule": "@typescript-eslint/explicit-function-return-type" }, { "file": "src/index.ts", 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 f46b84a10af..ca3e0b3e273 100644 --- a/build-tests/eslint-bulk-suppressions-test/package.json +++ b/build-tests/eslint-bulk-suppressions-test/package.json @@ -8,6 +8,7 @@ }, "devDependencies": { "@rushstack/eslint-bulk": "workspace:*", + "@rushstack/eslint-config": "3.7.1", "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", diff --git a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json b/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json index 5d0e82b5147..ab3846d907a 100644 --- a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json +++ b/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json @@ -53,12 +53,12 @@ { "file": "src/index.ts", "scopeId": ".ExampleObjectType", - "rule": "@typescript-eslint/consistent-type-definitions" + "rule": "@typescript-eslint/ban-types" }, { "file": "src/index.ts", "scopeId": ".ExampleObjectType", - "rule": "@typescript-eslint/no-wrapper-object-types" + "rule": "@typescript-eslint/consistent-type-definitions" }, { "file": "src/index.ts", 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/rush.json b/rush.json index faa60056f2b..28d7878fdae 100644 --- a/rush.json +++ b/rush.json @@ -633,7 +633,8 @@ "packageName": "eslint-bulk-suppressions-test", "projectFolder": "build-tests/eslint-bulk-suppressions-test", "reviewCategory": "tests", - "shouldPublish": false + "shouldPublish": false, + "cyclicDependencyProjects": ["@rushstack/eslint-config"] }, { "packageName": "eslint-bulk-suppressions-test-flat", From 057ebe48ff32484b157a4976086aa12a51c8aa82 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 15:43:31 -0700 Subject: [PATCH 40/60] Update eslint patch to add support for eslint 9 --- .../build-tests-subspace/repo-state.json | 2 +- .../config/subspaces/default/pnpm-lock.yaml | 21 ++++-- eslint/eslint-patch/package.json | 6 +- .../bulk-suppressions-file.ts | 26 +++---- .../bulk-suppressions-patch.ts | 59 ++++++++------- .../src/eslint-bulk-suppressions/cli/prune.ts | 8 +- .../eslint-bulk-suppressions/cli/runEslint.ts | 30 +++++--- .../cli/utils/get-eslint-cli.ts | 7 +- .../cli/utils/is-correct-cwd.ts | 8 +- .../generate-patched-file.ts | 74 ++++++++++++++----- .../src/eslint-bulk-suppressions/index.ts | 4 +- 11 files changed, 157 insertions(+), 88 deletions(-) diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index ecca7e3d910..76263150c72 100644 --- a/common/config/subspaces/build-tests-subspace/repo-state.json +++ b/common/config/subspaces/build-tests-subspace/repo-state.json @@ -2,5 +2,5 @@ { "pnpmShrinkwrapHash": "218b2843814056309dfe845c61743f26ec24948e", "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", - "packageJsonInjectedDependenciesHash": "73ac8c2f92989afefdb4e8bdb4cd7b95cd9ccc9a" + "packageJsonInjectedDependenciesHash": "4e392ce6cc6a6123d688dc49f51b32a57a935e3b" } diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 23af31f9052..f5e4615c12f 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1257,6 +1257,9 @@ importers: '@rushstack/eslint-bulk': specifier: workspace:* version: link:../../eslint/eslint-bulk + '@rushstack/eslint-config': + specifier: 3.7.1 + version: 3.7.1(eslint@8.57.0)(typescript@5.8.2) '@rushstack/eslint-patch': specifier: workspace:* version: link:../../eslint/eslint-patch @@ -2511,18 +2514,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.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 diff --git a/eslint/eslint-patch/package.json b/eslint/eslint-patch/package.json index 079784f7a15..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", + "@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/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..9cf5b9e8b36 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.split('.')[0], 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 8e4a5b6cc58..9b40bab0955 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.split('.')[0], 10); + const inputFile: string = fs.readFileSync(inputFilePath).toString(); let inputIndex: number = 0; @@ -89,7 +92,7 @@ export function generatePatchedLinterJsFileIfDoesNotExist( * @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}'); @@ -102,7 +105,7 @@ export function generatePatchedLinterJsFileIfDoesNotExist( !startOfClassMethodMarker || startOfClassMethodIndex > endOfClassIndex ) { - return -1; + return { index: -1 }; } const afterMarkerIndex: number = startOfClassMethodIndex + startOfClassMethodMarker.length; @@ -113,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 { @@ -178,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) { @@ -218,10 +225,17 @@ 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 ---`; + + 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('class Linter {'); outputFile += scanUntilNewline(); @@ -251,18 +265,42 @@ 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. + // 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); From 27332f7067cb007d7e0a1e2e22aa038706f93533 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 15:44:00 -0700 Subject: [PATCH 41/60] Update suppressions --- .../client/.eslint-bulk-suppressions-9.25.1.json | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 index 9b2a80a0210..070dbc8562a 100644 --- 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 @@ -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", @@ -115,6 +120,11 @@ "scopeId": ".exampleFunction", "rule": "no-extra-boolean-cast" }, + { + "file": "src/index.ts", + "scopeId": ".exampleFunction", + "rule": "no-unused-expressions" + }, { "file": "src/index.ts", "scopeId": ".exampleObject", From 3658650b587323e2ae2224005ce38d34327ee9d4 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 16:18:48 -0700 Subject: [PATCH 42/60] Rush change --- .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ .../user-danade-UpdateEslint2_2025-06-03-23-17.json | 10 ++++++++++ 45 files changed, 450 insertions(+) create mode 100644 common/changes/@microsoft/api-documenter/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@microsoft/load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@microsoft/loader-load-themed-styles/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@microsoft/rush/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@microsoft/webpack5-load-themed-styles-loader/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/cpu-profile-summarizer/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/debug-certificate-manager/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/eslint-bulk/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/eslint-patch/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/eslint-plugin-packlets/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/eslint-plugin-security/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/eslint-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/hashed-folder-copy-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-dev-cert-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-isolated-typescript-transpile-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-localization-typings-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-sass-load-themed-styles-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-sass-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-serverless-stack-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-storybook-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-web-rig/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-webpack4-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/heft-webpack5-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/loader-raw-script/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/localization-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/lockfile-explorer/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/lookup-by-path/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/mcp-server/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/module-minifier/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/package-deps-hash/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/package-extractor/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/rundown/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/set-webpack-public-path-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/stream-collator/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/trace-import/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/typings-generator/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack-embedded-dependencies-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack-plugin-utilities/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack-preserve-dynamic-require-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack-workspace-resolve-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack4-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack4-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack5-localization-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/webpack5-module-minifier-plugin/user-danade-UpdateEslint2_2025-06-03-23-17.json create mode 100644 common/changes/@rushstack/worker-pool/user-danade-UpdateEslint2_2025-06-03-23-17.json 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/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-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-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-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-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-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-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-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..51d4737481e --- /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": "", + "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/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/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/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/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/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/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 From 7edace04697aa46be6aa06a172d1f41bdeb75198 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 16:34:34 -0700 Subject: [PATCH 43/60] Update bulk and patch for eslint 9 support --- eslint/eslint-bulk/src/start.ts | 29 ++++++++++++++------------ eslint/eslint-patch/src/_patch-base.ts | 8 +++++++ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/eslint/eslint-bulk/src/start.ts b/eslint/eslint-bulk/src/start.ts index b4fae03071a..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,24 +30,19 @@ interface IEslintBulkConfigurationJson { } function findPatchPath(): string { - const candidatePaths: string[] = [ - `${process.cwd()}/.eslintrc.js`, - `${process.cwd()}/.eslintrc.cjs`, - `${process.cwd()}/eslint.config.js`, - `${process.cwd()}/eslint.config.cjs`, - `${process.cwd()}/eslint.config.mjs` - ]; - 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); } @@ -86,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-patch/src/_patch-base.ts b/eslint/eslint-patch/src/_patch-base.ts index 380ea6637f9..171f93a134b 100644 --- a/eslint/eslint-patch/src/_patch-base.ts +++ b/eslint/eslint-patch/src/_patch-base.ts @@ -113,6 +113,14 @@ for (let currentModule: NodeModule = module; ; ) { } } } + + if (eslintFolder) { + const eslintrcFolderPath: string = path.dirname( + require.resolve('@eslint/eslintrc/package.json', { paths: [eslintFolder] }) + ); + eslintrcBundlePath = path.join(eslintrcFolderPath, 'dist/eslintrc.cjs'); + } + break; } From 1a2c628edd09fae14a0827681178692191df7516 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 16:38:20 -0700 Subject: [PATCH 44/60] Add a patch file to the eslint config --- eslint/eslint-config/flat/patch/eslint-bulk-suppressions.js | 4 ++++ .../includes/eslint/flat/patch/eslint-bulk-suppressions.js | 4 ++++ .../includes/eslint/flat/patch/eslint-bulk-suppressions.js | 4 ++++ .../includes/eslint/flat/patch/eslint-bulk-suppressions.js | 4 ++++ 4 files changed, 16 insertions(+) create mode 100644 eslint/eslint-config/flat/patch/eslint-bulk-suppressions.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/flat/patch/eslint-bulk-suppressions.js diff --git a/eslint/eslint-config/flat/patch/eslint-bulk-suppressions.js b/eslint/eslint-config/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/eslint/eslint-config/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/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/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/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/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/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..12c37b253da --- /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-patch/eslint-bulk-suppressions'); From 735b2fa4de74352eff3b767f8e455b508f5e0c12 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 16:41:19 -0700 Subject: [PATCH 45/60] Fix references --- .../includes/eslint/flat/patch/eslint-bulk-suppressions.js | 2 +- .../app/includes/eslint/flat/patch/eslint-bulk-suppressions.js | 2 +- .../includes/eslint/flat/patch/eslint-bulk-suppressions.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js index 12c37b253da..ec6804684d1 100644 --- a/rigs/heft-node-rig/profiles/default/includes/eslint/flat/patch/eslint-bulk-suppressions.js +++ b/rigs/heft-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('@rushstack/eslint-patch/eslint-bulk-suppressions'); +require('@rushstack/eslint-config/flat/patch/eslint-bulk-suppressions'); diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js b/rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js index 12c37b253da..ec6804684d1 100644 --- a/rigs/heft-web-rig/profiles/app/includes/eslint/flat/patch/eslint-bulk-suppressions.js +++ b/rigs/heft-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('@rushstack/eslint-patch/eslint-bulk-suppressions'); +require('@rushstack/eslint-config/flat/patch/eslint-bulk-suppressions'); 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 index 12c37b253da..ec6804684d1 100644 --- 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 @@ -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('@rushstack/eslint-patch/eslint-bulk-suppressions'); +require('@rushstack/eslint-config/flat/patch/eslint-bulk-suppressions'); From 686bf5586826be6d76d54d5f357ed09870a10916 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 17:08:06 -0700 Subject: [PATCH 46/60] Simplify build --- build-tests/eslint-bulk-suppressions-test/package.json | 2 +- common/config/subspaces/default/pnpm-lock.yaml | 10 +++++----- rush.json | 3 +-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/build-tests/eslint-bulk-suppressions-test/package.json b/build-tests/eslint-bulk-suppressions-test/package.json index ca3e0b3e273..95c02ffe209 100644 --- a/build-tests/eslint-bulk-suppressions-test/package.json +++ b/build-tests/eslint-bulk-suppressions-test/package.json @@ -8,7 +8,7 @@ }, "devDependencies": { "@rushstack/eslint-bulk": "workspace:*", - "@rushstack/eslint-config": "3.7.1", + "@rushstack/eslint-config": "workspace:*", "@rushstack/eslint-patch": "workspace:*", "@rushstack/heft": "workspace:*", "@rushstack/node-core-library": "workspace:*", diff --git a/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index 2029377a620..b314d3be52c 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1258,8 +1258,8 @@ importers: specifier: workspace:* version: link:../../eslint/eslint-bulk '@rushstack/eslint-config': - specifier: 3.7.1 - version: 3.7.1(eslint@8.57.0)(typescript@5.8.2) + specifier: workspace:* + version: link:../../eslint/eslint-config '@rushstack/eslint-patch': specifier: workspace:* version: link:../../eslint/eslint-patch @@ -3414,12 +3414,12 @@ importers: '@pnpm/dependency-path': specifier: ~1000.0.9 version: 1000.0.9 - '@pnpm/dependency-path-lockfile-pre-v9': - specifier: npm:@pnpm/dependency-path@~2.1.2 - version: /@pnpm/dependency-path@2.1.8 '@pnpm/dependency-path-lockfile-pre-v10': specifier: npm:@pnpm/dependency-path@~5.1.7 version: /@pnpm/dependency-path@5.1.7 + '@pnpm/dependency-path-lockfile-pre-v9': + specifier: npm:@pnpm/dependency-path@~2.1.2 + version: /@pnpm/dependency-path@2.1.8 '@pnpm/link-bins': specifier: ~5.3.7 version: 5.3.25 diff --git a/rush.json b/rush.json index 28d7878fdae..faa60056f2b 100644 --- a/rush.json +++ b/rush.json @@ -633,8 +633,7 @@ "packageName": "eslint-bulk-suppressions-test", "projectFolder": "build-tests/eslint-bulk-suppressions-test", "reviewCategory": "tests", - "shouldPublish": false, - "cyclicDependencyProjects": ["@rushstack/eslint-config"] + "shouldPublish": false }, { "packageName": "eslint-bulk-suppressions-test-flat", From 572a58ca6e943e3a3dd5e0d0d090d1b74aff6139 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 17:08:18 -0700 Subject: [PATCH 47/60] Fix snapshots --- .../src/test/__snapshots__/HashedFolderCopyPlugin.test.ts.snap | 1 - 1 file changed, 1 deletion(-) 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); From bf62d22e9e549cf7cc7a54ab4e5e7fdd208a9afb Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 17:39:54 -0700 Subject: [PATCH 48/60] Fix patch handling of renaming of private methods --- .../generate-patched-file.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) 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 9b40bab0955..c29034ea306 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 @@ -295,12 +295,14 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ outputFile += scanUntilEnd(); // Do a second pass to find and replace all calls to private methods with the patched versions. - // 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)}(`; - }); + 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); } From 3b18dec86415f849d2d18d87519c56e066652d42 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 17:44:40 -0700 Subject: [PATCH 49/60] Update bulk suppressions --- .../.eslint-bulk-suppressions-8.57.0.json | 19 ++++++++++++------- .../.eslint-bulk-suppressions-8.57.0.json | 4 ++-- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json b/build-tests/eslint-bulk-suppressions-test/client/.eslint-bulk-suppressions-8.57.0.json index 40059c12365..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 @@ -8,12 +8,12 @@ { "file": "src/index.ts", "scopeId": ".ExampleClass", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/explicit-member-accessibility" }, { "file": "src/index.ts", "scopeId": ".ExampleClass", - "rule": "@typescript-eslint/explicit-member-accessibility" + "rule": "@typescript-eslint/no-wrapper-object-types" }, { "file": "src/index.ts", @@ -58,17 +58,22 @@ { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/explicit-function-return-type" }, { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/explicit-function-return-type" + "rule": "@typescript-eslint/explicit-member-accessibility" }, { "file": "src/index.ts", "scopeId": ".exampleAnonymousClass.exampleSetGet", - "rule": "@typescript-eslint/explicit-member-accessibility" + "rule": "@typescript-eslint/no-wrapper-object-types" + }, + { + "file": "src/index.ts", + "scopeId": ".exampleAnonymousClass.exampleSetGet", + "rule": "prefer-const" }, { "file": "src/index.ts", @@ -98,12 +103,12 @@ { "file": "src/index.ts", "scopeId": ".exampleFunction", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/explicit-function-return-type" }, { "file": "src/index.ts", "scopeId": ".exampleFunction", - "rule": "@typescript-eslint/explicit-function-return-type" + "rule": "@typescript-eslint/no-wrapper-object-types" }, { "file": "src/index.ts", diff --git a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json b/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json index ab3846d907a..5d0e82b5147 100644 --- a/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json +++ b/build-tests/eslint-bulk-suppressions-test/server/.eslint-bulk-suppressions-8.57.0.json @@ -53,12 +53,12 @@ { "file": "src/index.ts", "scopeId": ".ExampleObjectType", - "rule": "@typescript-eslint/ban-types" + "rule": "@typescript-eslint/consistent-type-definitions" }, { "file": "src/index.ts", "scopeId": ".ExampleObjectType", - "rule": "@typescript-eslint/consistent-type-definitions" + "rule": "@typescript-eslint/no-wrapper-object-types" }, { "file": "src/index.ts", From 8a6079fa9def4eadb3b0e03194c72e9666fd5f07 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 3 Jun 2025 18:06:08 -0700 Subject: [PATCH 50/60] Update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a506c6af0e1..72a898bda4b 100644 --- a/README.md +++ b/README.md @@ -161,7 +161,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 | From 9a5ba44b7d0629de651158528fe921353d7d21e7 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Wed, 11 Jun 2025 15:52:20 -0700 Subject: [PATCH 51/60] Rush update --- .../config/subspaces/build-tests-subspace/pnpm-lock.yaml | 8 ++++---- .../config/subspaces/build-tests-subspace/repo-state.json | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 7e52687d3d0..e9d9073c574 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -2397,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 @@ -4885,7 +4885,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.15.1 - semver: 7.6.3 + semver: 7.7.2 validate-npm-package-license: 3.0.4 /normalize-path@3.0.0: @@ -5162,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==} @@ -6344,7 +6344,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 diff --git a/common/config/subspaces/build-tests-subspace/repo-state.json b/common/config/subspaces/build-tests-subspace/repo-state.json index 7d80b11e4e5..367100b3342 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": "c7ba4d11d03d9e1b14ba33e023a043d385fa3fd8", - "preferredVersionsHash": "54149ea3f01558a859c96dee2052b797d4defe68", - "packageJsonInjectedDependenciesHash": "de32ff5fe062252f7310c4fb86383790757d735c" + "pnpmShrinkwrapHash": "f7f98f7a48ade55793c06d98f04681eeb7168f8c", + "preferredVersionsHash": "550b4cee0bef4e97db6c6aad726df5149d20e7d9", + "packageJsonInjectedDependenciesHash": "df4319f7a9c36e81fd3cb4495b55e221a7b1350c" } From a8f2236cd4f243fd7bae9015daf3bd8ec9415e89 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Thu, 12 Jun 2025 12:20:24 -0700 Subject: [PATCH 52/60] Merge changes to lint plugin --- .../heft-lint-plugin/src/LintPlugin.ts | 172 +++++++----------- 1 file changed, 68 insertions(+), 104 deletions(-) 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; - } - } } From 3f630acfe72b75af79c070330ec1bbff33db9d46 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Thu, 12 Jun 2025 12:52:44 -0700 Subject: [PATCH 53/60] PR feedback --- ...danade-UpdateEslint2_2025-05-03-00-43.json | 2 +- ...danade-UpdateEslint2_2025-05-03-00-43.json | 2 +- ...danade-UpdateEslint2_2025-05-03-00-43.json | 2 +- ...danade-UpdateEslint2_2025-06-03-23-17.json | 2 +- eslint/local-eslint-config/.gitignore | 4 +++ eslint/local-eslint-config/config/heft.json | 28 +++++++++++++++++++ .../config/rush-project.json | 11 ++++++++ .../flat/patch/eslint-bulk-suppressions.js | 4 +++ eslint/local-eslint-config/package.json | 4 +-- heft-plugins/heft-lint-plugin/src/Eslint.ts | 20 +++++++------ 10 files changed, 64 insertions(+), 15 deletions(-) create mode 100644 eslint/local-eslint-config/.gitignore create mode 100644 eslint/local-eslint-config/config/heft.json create mode 100644 eslint/local-eslint-config/config/rush-project.json create mode 100644 eslint/local-eslint-config/flat/patch/eslint-bulk-suppressions.js 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 index 0eb668b6877..dc5110e0994 100644 --- 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 @@ -2,7 +2,7 @@ "changes": [ { "packageName": "@rushstack/eslint-config", - "comment": "Add flat config compatible versions of profiles and mixins. These are located under the \"/flat/*\" path.", + "comment": "Add flat config compatible versions of profiles and mixins. These are located under the `/flat/*` path.", "type": "minor" } ], 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 index a34761956dc..b3c688d8cb9 100644 --- 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 @@ -2,7 +2,7 @@ "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", + "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" } ], 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 index d02b6cc6d0d..3c05be5874b 100644 --- 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 @@ -2,7 +2,7 @@ "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.", + "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" } ], 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 index 51d4737481e..9e7eb6f9426 100644 --- 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 @@ -2,7 +2,7 @@ "changes": [ { "packageName": "@rushstack/heft-web-rig", - "comment": "", + "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" } ], diff --git a/eslint/local-eslint-config/.gitignore b/eslint/local-eslint-config/.gitignore new file mode 100644 index 00000000000..e266a90461c --- /dev/null +++ b/eslint/local-eslint-config/.gitignore @@ -0,0 +1,4 @@ +# 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/config/heft.json b/eslint/local-eslint-config/config/heft.json new file mode 100644 index 00000000000..f849cc64520 --- /dev/null +++ b/eslint/local-eslint-config/config/heft.json @@ -0,0 +1,28 @@ +{ + "$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"] }], + + "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": ["**"] + // } + // ] + // } + // } + // } + } + } + } +} diff --git a/eslint/local-eslint-config/config/rush-project.json b/eslint/local-eslint-config/config/rush-project.json new file mode 100644 index 00000000000..340c4fd0356 --- /dev/null +++ b/eslint/local-eslint-config/config/rush-project.json @@ -0,0 +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"] + // } + ] +} diff --git a/eslint/local-eslint-config/flat/patch/eslint-bulk-suppressions.js b/eslint/local-eslint-config/flat/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..12c37b253da --- /dev/null +++ b/eslint/local-eslint-config/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/eslint/local-eslint-config/package.json b/eslint/local-eslint-config/package.json index d0b94a4dea0..3e47a58341a 100644 --- a/eslint/local-eslint-config/package.json +++ b/eslint/local-eslint-config/package.json @@ -4,8 +4,8 @@ "private": true, "description": "An ESLint configuration consumed projects inside the rushstack repo.", "scripts": { - "build": "", - "_phase:build": "" + "build": "heft build --clean", + "_phase:build": "heft build --clean" }, "peerDependencies": { "eslint": "^9.25.1", diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index e6bddb3addd..3713bb4d2d8 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -96,11 +96,11 @@ export class Eslint extends LinterBase = new Map(); - private readonly _currentFixMessages: TEslint.Linter.LintMessage[] | TEslintLegacy.Linter.LintMessage[] = + 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[] + (TEslint.Linter.LintMessage | TEslintLegacy.Linter.LintMessage)[] > = new Map(); private readonly _sarifLogPath: string | undefined; @@ -121,14 +121,17 @@ export class Eslint extends LinterBase= 9 && ESLINT_LEGACY_CONFIG_FILENAMES.has(linterConfigFileName) ) { throw new Error( - `You must use an eslint.config.js file with ESLint 9 or newer. The provided config file is "${linterConfigFilePath}".` + `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}".` ); } @@ -143,7 +146,7 @@ export class Eslint extends LinterBase { // eslint-disable-next-line @typescript-eslint/no-explicit-any - this._currentFixMessages.push(message as any); + this._currentFixMessages.push(message); return true; }; } else if (this._eslintPackageVersion.major <= 8) { @@ -276,7 +279,7 @@ export class Eslint extends LinterBase 0; })); - const trimmedLintResults: TEslint.ESLint.LintResult[] | TEslintLegacy.ESLint.LintResult[] = []; + const trimmedLintResults: (TEslint.ESLint.LintResult | TEslintLegacy.ESLint.LintResult)[] = []; for (const lintResult of lintResults) { if ( lintResult.messages.length > 0 || @@ -297,8 +300,7 @@ export class Eslint extends LinterBase 0 || fixMessages.length > 0 ) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - trimmedLintResults.push(lintResult as any); + trimmedLintResults.push(lintResult); } } From af21e257171a906734663b9295e52dedfe31786e Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:11:15 -0700 Subject: [PATCH 54/60] Re-add the legacy configs to heft-node-rig and heft-web-rig --- .../default/includes/eslint/mixins/friendly-locals.js | 6 ++++++ .../profiles/default/includes/eslint/mixins/packlets.js | 6 ++++++ .../profiles/default/includes/eslint/mixins/react.js | 6 ++++++ .../profiles/default/includes/eslint/mixins/tsdoc.js | 6 ++++++ .../includes/eslint/patch/custom-config-package-names.js | 4 ++++ .../includes/eslint/patch/eslint-bulk-suppressions.js | 4 ++++ .../includes/eslint/patch/modern-module-resolution.js | 4 ++++ .../default/includes/eslint/profile/node-trusted-tool.js | 6 ++++++ .../profiles/default/includes/eslint/profile/node.js | 6 ++++++ .../profiles/app/includes/eslint/mixins/friendly-locals.js | 6 ++++++ .../profiles/app/includes/eslint/mixins/packlets.js | 6 ++++++ .../profiles/app/includes/eslint/mixins/react.js | 6 ++++++ .../profiles/app/includes/eslint/mixins/tsdoc.js | 6 ++++++ .../includes/eslint/patch/custom-config-package-names.js | 4 ++++ .../app/includes/eslint/patch/eslint-bulk-suppressions.js | 4 ++++ .../app/includes/eslint/patch/modern-module-resolution.js | 4 ++++ .../profiles/app/includes/eslint/profile/web-app.js | 6 ++++++ .../library/includes/eslint/mixins/friendly-locals.js | 6 ++++++ .../profiles/library/includes/eslint/mixins/packlets.js | 6 ++++++ .../profiles/library/includes/eslint/mixins/react.js | 6 ++++++ .../profiles/library/includes/eslint/mixins/tsdoc.js | 6 ++++++ .../includes/eslint/patch/custom-config-package-names.js | 4 ++++ .../includes/eslint/patch/eslint-bulk-suppressions.js | 4 ++++ .../includes/eslint/patch/modern-module-resolution.js | 4 ++++ .../profiles/library/includes/eslint/profile/web-app.js | 6 ++++++ 25 files changed, 132 insertions(+) create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/packlets.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/react.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js create mode 100644 rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/packlets.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/react.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/patch/eslint-bulk-suppressions.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js create mode 100644 rigs/heft-web-rig/profiles/app/includes/eslint/profile/web-app.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/packlets.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/react.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/patch/eslint-bulk-suppressions.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js create mode 100644 rigs/heft-web-rig/profiles/library/includes/eslint/profile/web-app.js diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/friendly-locals.js new file mode 100644 index 00000000000..e6cbfeacc95 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/friendly-locals'] +}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/packlets.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/packlets.js new file mode 100644 index 00000000000..82a19efce16 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/packlets'] +}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/react.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/react.js new file mode 100644 index 00000000000..796699ee874 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/react'] +}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js b/rigs/heft-node-rig/profiles/default/includes/eslint/mixins/tsdoc.js new file mode 100644 index 00000000000..d0a4b1d6a79 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/tsdoc'] +}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.js new file mode 100644 index 00000000000..1fe7079f030 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/custom-config-package-names.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/custom-config-package-names'); diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..084519e6ebb --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/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/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.js new file mode 100644 index 00000000000..14e8d976c23 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js b/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node-trusted-tool.js new file mode 100644 index 00000000000..e5b291a3b08 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/profile/node-trusted-tool'] +}; diff --git a/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.js b/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.js new file mode 100644 index 00000000000..edd8dbb2cd2 --- /dev/null +++ b/rigs/heft-node-rig/profiles/default/includes/eslint/profile/node.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. + +module.exports = { + extends: ['@rushstack/eslint-config/profile/node'] +}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/friendly-locals.js new file mode 100644 index 00000000000..e6cbfeacc95 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/friendly-locals'] +}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/packlets.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/packlets.js new file mode 100644 index 00000000000..82a19efce16 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/packlets'] +}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/react.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/react.js new file mode 100644 index 00000000000..796699ee874 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/react'] +}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js b/rigs/heft-web-rig/profiles/app/includes/eslint/mixins/tsdoc.js new file mode 100644 index 00000000000..d0a4b1d6a79 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/tsdoc'] +}; diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.js new file mode 100644 index 00000000000..1fe7079f030 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/custom-config-package-names.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/custom-config-package-names'); diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/patch/eslint-bulk-suppressions.js b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/eslint-bulk-suppressions.js new file mode 100644 index 00000000000..084519e6ebb --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/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/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.js new file mode 100644 index 00000000000..14e8d976c23 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/rigs/heft-web-rig/profiles/app/includes/eslint/profile/web-app.js b/rigs/heft-web-rig/profiles/app/includes/eslint/profile/web-app.js new file mode 100644 index 00000000000..eaa661335e4 --- /dev/null +++ b/rigs/heft-web-rig/profiles/app/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/profile/web-app'] +}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/friendly-locals.js new file mode 100644 index 00000000000..e6cbfeacc95 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/friendly-locals'] +}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/packlets.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/packlets.js new file mode 100644 index 00000000000..82a19efce16 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/packlets'] +}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/react.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/react.js new file mode 100644 index 00000000000..796699ee874 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/react'] +}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js b/rigs/heft-web-rig/profiles/library/includes/eslint/mixins/tsdoc.js new file mode 100644 index 00000000000..d0a4b1d6a79 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/mixins/tsdoc'] +}; diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.js new file mode 100644 index 00000000000..1fe7079f030 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/custom-config-package-names.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/custom-config-package-names'); 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/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.js new file mode 100644 index 00000000000..14e8d976c23 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/patch/modern-module-resolution.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/modern-module-resolution'); diff --git a/rigs/heft-web-rig/profiles/library/includes/eslint/profile/web-app.js b/rigs/heft-web-rig/profiles/library/includes/eslint/profile/web-app.js new file mode 100644 index 00000000000..eaa661335e4 --- /dev/null +++ b/rigs/heft-web-rig/profiles/library/includes/eslint/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. + +module.exports = { + extends: ['@rushstack/eslint-config/profile/web-app'] +}; From 526904091fcf3ed68a6605da857d265954581230 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:13:20 -0700 Subject: [PATCH 55/60] PR feedback --- .../src/eslint-bulk-suppressions/cli/runEslint.ts | 2 +- .../src/eslint-bulk-suppressions/generate-patched-file.ts | 2 +- rush-plugins/rush-resolver-cache-plugin/src/index.ts | 5 +---- 3 files changed, 3 insertions(+), 6 deletions(-) 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 9cf5b9e8b36..512b3b3339f 100644 --- a/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/runEslint.ts +++ b/eslint/eslint-patch/src/eslint-bulk-suppressions/cli/runEslint.ts @@ -11,7 +11,7 @@ export async function runEslintAsync(files: string[], mode: 'suppress' | 'prune' const { ESLint }: typeof import('eslint-9') | typeof import('eslint-8') = require(eslintPath); let eslint: TEslint | TEslintLegacy; - const majorVersion: number = parseInt(eslintVersion.split('.')[0], 10); + const majorVersion: number = parseInt(eslintVersion, 10); if (majorVersion < 9) { eslint = new ESLint({ cwd, useEslintrc: true }); } else { 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 c29034ea306..2b5fac90f19 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 @@ -23,7 +23,7 @@ export function generatePatchedLinterJsFileIfDoesNotExist( return; } - const majorVersion: number = parseInt(eslintPackageVersion.split('.')[0], 10); + const majorVersion: number = parseInt(eslintPackageVersion, 10); const inputFile: string = fs.readFileSync(inputFilePath).toString(); 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')); From 5bc786884e0d28faca94c65a67880f4e7e48b37f Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:17:30 -0700 Subject: [PATCH 56/60] PR feedback --- .../generate-patched-file.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 2b5fac90f19..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 @@ -216,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)) { @@ -229,6 +229,23 @@ const requireFromPathToLinterJS = bulkSuppressionsPatch.requireFromPathToLinterJ 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 += ` From bdf4098fee84339526a5a875c09e1975b0ea0d21 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 24 Jun 2025 15:29:43 -0700 Subject: [PATCH 57/60] Update the sarif formatter to generate code snippets based on location --- heft-plugins/heft-lint-plugin/package.json | 5 +- heft-plugins/heft-lint-plugin/src/Eslint.ts | 38 +++-- .../heft-lint-plugin/src/SarifFormatter.ts | 52 ++++-- .../src/test/SarifFormatter.test.ts | 93 ++++++----- .../__snapshots__/SarifFormatter.test.ts.snap | 148 +++++------------- 5 files changed, 149 insertions(+), 187 deletions(-) diff --git a/heft-plugins/heft-lint-plugin/package.json b/heft-plugins/heft-lint-plugin/package.json index 30193bd9238..ef10ec8de65 100644 --- a/heft-plugins/heft-lint-plugin/package.json +++ b/heft-plugins/heft-lint-plugin/package.json @@ -10,9 +10,10 @@ "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.73.6" diff --git a/heft-plugins/heft-lint-plugin/src/Eslint.ts b/heft-plugins/heft-lint-plugin/src/Eslint.ts index 3713bb4d2d8..d368b96ba9f 100644 --- a/heft-plugins/heft-lint-plugin/src/Eslint.ts +++ b/heft-plugins/heft-lint-plugin/src/Eslint.ts @@ -2,8 +2,8 @@ // See LICENSE in the project root for license information. import path from 'node:path'; -import { createHash, type Hash } from 'crypto'; -import { performance } from 'perf_hooks'; +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-9'; import type * as TEslintLegacy from 'eslint'; @@ -66,17 +66,24 @@ interface IExtendedEslintConfig extends TEslint.Linter.Config { } function patchedToJSON(this: IExtendedEslintConfig): object { - let programs: TTypescript.Program[] | undefined; - if (this.languageOptions?.parserOptions?.programs) { - programs = this.languageOptions.parserOptions.programs; - delete this.languageOptions.parserOptions.programs; + // 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); - if (this.languageOptions?.parserOptions && programs) { - this.languageOptions.parserOptions.programs = programs; - } - return serializableConfig; } @@ -285,12 +292,11 @@ export class Eslint extends LinterBase { - 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 | TEslintLegacy.ESLint.LintResult)[] = []; for (const lintResult of lintResults) { diff --git a/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts b/heft-plugins/heft-lint-plugin/src/SarifFormatter.ts index e262710c132..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-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,12 +306,33 @@ export function formatEslintResultsAsSARIF( physicalLocation.region = region; } - // if (message.source) { - // physicalLocation.region ??= {}; - // physicalLocation.region.snippet = { - // text: 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: snippetText + }; + } if (message.ruleId) { sarifResults.push(sarifRepresentation); 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 104d2228fff..dbc3944829d 100644 --- a/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts +++ b/heft-plugins/heft-lint-plugin/src/test/SarifFormatter.test.ts @@ -9,17 +9,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: [], @@ -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, }, }, }, From f6d87b99988f2a9492f88f7421107c612f4d0929 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 24 Jun 2025 15:38:47 -0700 Subject: [PATCH 58/60] Rush update --- .../build-tests-subspace/pnpm-lock.yaml | 25 +++++++++---------- .../build-tests-subspace/repo-state.json | 6 ++--- .../config/subspaces/default/pnpm-lock.yaml | 4 +-- .../config/subspaces/default/repo-state.json | 4 +-- 4 files changed, 19 insertions(+), 20 deletions(-) diff --git a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml index 7a5ca5710e1..56bccea6214 100644 --- a/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml +++ b/common/config/subspaces/build-tests-subspace/pnpm-lock.yaml @@ -105,10 +105,10 @@ importers: 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: ~9.25.1 version: 9.25.1 @@ -6827,7 +6827,7 @@ packages: - supports-color 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' @@ -6841,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' @@ -6876,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' @@ -6887,12 +6887,11 @@ packages: '@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' @@ -7118,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' @@ -7128,10 +7127,10 @@ packages: '@microsoft/api-extractor': file:../../../apps/api-extractor(@types/node@20.17.19) '@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: 9.25.1 jest-environment-node: 29.5.0 @@ -7153,7 +7152,7 @@ packages: '@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: 9.25.1 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/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index dd96c8ff299..eaf5991eab8 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1674,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 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" } From 3026e12c0f64ef2d9f7ea77b51b0730886a23f32 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 24 Jun 2025 16:22:38 -0700 Subject: [PATCH 59/60] Update new projects to use eslint 9 --- .../src/pluginFramework/IRushMcpPlugin.ts | 1 - .../.eslintrc.js | 9 --------- .../eslint.config.js | 18 +++++++++++++++++ .../package.json | 4 ++-- .../config/subspaces/default/pnpm-lock.yaml | 10 ++++++++-- .../rush-bridge-cache-plugin/.eslintrc.js | 13 ------------ .../rush-bridge-cache-plugin/eslint.config.js | 20 +++++++++++++++++++ .../rush-bridge-cache-plugin/package.json | 1 + .../rush-mcp-docs-plugin/.eslintrc.js | 13 ------------ .../rush-mcp-docs-plugin/eslint.config.js | 20 +++++++++++++++++++ .../rush-mcp-docs-plugin/package.json | 1 + 11 files changed, 70 insertions(+), 40 deletions(-) delete mode 100644 build-tests/heft-example-lifecycle-plugin/.eslintrc.js create mode 100644 build-tests/heft-example-lifecycle-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-bridge-cache-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-bridge-cache-plugin/eslint.config.js delete mode 100644 rush-plugins/rush-mcp-docs-plugin/.eslintrc.js create mode 100644 rush-plugins/rush-mcp-docs-plugin/eslint.config.js 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/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/common/config/subspaces/default/pnpm-lock.yaml b/common/config/subspaces/default/pnpm-lock.yaml index eaf5991eab8..0c3f3585186 100644 --- a/common/config/subspaces/default/pnpm-lock.yaml +++ b/common/config/subspaces/default/pnpm-lock.yaml @@ -1399,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 @@ -4239,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 @@ -4333,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 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-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:*" } From 0f56e64668fa3338d915e824f3d49e68e8a64286 Mon Sep 17 00:00:00 2001 From: Daniel Nadeau <3473356+D4N14L@users.noreply.github.com> Date: Tue, 24 Jun 2025 16:29:34 -0700 Subject: [PATCH 60/60] Rush change --- .../user-danade-UpdateEslint2_2025-06-24-23-29.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@rushstack/rush-mcp-docs-plugin/user-danade-UpdateEslint2_2025-06-24-23-29.json 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