From 09ebf5f2dae7bbe1aca9748f54b888d05f4b2209 Mon Sep 17 00:00:00 2001 From: Jack Hsu Date: Wed, 26 Feb 2025 14:07:03 -0500 Subject: [PATCH] fix(eslint): ensure that packages in the same group as updated together (#30187) This PR updates `migrations.json` for `@nx/eslint` and `@nx/angular` so that `@typescript-eslint/*` and `@angular-eslint/*` packages that are installed in the workspaces are updated to the same version. I've updated it for v20 and v19, but if we need to go back further we could. This will also require patch versions for each major that we want to fix. **Note:** Previously there were two entries for `@nx/esilnt@20.4.0` that handles cases where one of `typescript-eslint` or `@typescript-eslint/eslint-plugin` are > 8. The packages in both entries overlap, so I collapsed them down to one entry that checks `typescript-eslint > 8`. ## Current Behavior If user has `@typescript-eslint/rule-tester` or `@angular-eslint/test-utils` installed, our migrations do not update these versions. This makes them out of sync with `@typescript-eslint/utils`, etc. which can lead to problems. ## Expected Behavior Packages in the same `@typescript-eslint/*` and `@angular-eslint/*` are updated together. If they are not installed, we don't add them to the workspace. ## Related Issue(s) Fixes # --- docs/generated/manifests/nx-api.json | 10 ---- docs/generated/packages-metadata.json | 10 ---- .../migrations/19.1.2-package-updates.json | 16 +++++++ ...20.2.0-angular-eslint-package-updates.json | 16 +++++++ ...20.2.2-angular-eslint-package-updates.json | 16 +++++++ .../migrations/19.5.0-package-updates.json | 14 +++++- ....0-@typescript-eslint-package-updates.json | 18 ------- ...4.0-typescript-eslint-package-updates.json | 16 ++++++- packages/angular/migrations.json | 48 +++++++++++++++++++ packages/eslint/migrations.json | 44 +++++++++-------- 10 files changed, 147 insertions(+), 61 deletions(-) delete mode 100644 docs/generated/packages/eslint/migrations/20.4.0-@typescript-eslint-package-updates.json diff --git a/docs/generated/manifests/nx-api.json b/docs/generated/manifests/nx-api.json index 05865fbc17..da59554b1a 100644 --- a/docs/generated/manifests/nx-api.json +++ b/docs/generated/manifests/nx-api.json @@ -1698,16 +1698,6 @@ "path": "/nx-api/eslint/migrations/20.4.0-typescript-eslint-package-updates", "type": "migration" }, - "/nx-api/eslint/migrations/20.4.0-@typescript-eslint-package-updates": { - "description": "", - "file": "generated/packages/eslint/migrations/20.4.0-@typescript-eslint-package-updates.json", - "hidden": false, - "name": "20.4.0-@typescript-eslint-package-updates", - "version": "20.4.0-beta.1", - "originalFilePath": "/packages/eslint", - "path": "/nx-api/eslint/migrations/20.4.0-@typescript-eslint-package-updates", - "type": "migration" - }, "/nx-api/eslint/migrations/add-file-extensions-to-overrides": { "description": "Update ESLint flat config to include .cjs, .mjs, .cts, and .mts files in overrides (if needed)", "file": "generated/packages/eslint/migrations/add-file-extensions-to-overrides.json", diff --git a/docs/generated/packages-metadata.json b/docs/generated/packages-metadata.json index a602ea31bb..1a62142798 100644 --- a/docs/generated/packages-metadata.json +++ b/docs/generated/packages-metadata.json @@ -1686,16 +1686,6 @@ "path": "eslint/migrations/20.4.0-typescript-eslint-package-updates", "type": "migration" }, - { - "description": "", - "file": "generated/packages/eslint/migrations/20.4.0-@typescript-eslint-package-updates.json", - "hidden": false, - "name": "20.4.0-@typescript-eslint-package-updates", - "version": "20.4.0-beta.1", - "originalFilePath": "/packages/eslint", - "path": "eslint/migrations/20.4.0-@typescript-eslint-package-updates", - "type": "migration" - }, { "description": "Update ESLint flat config to include .cjs, .mjs, .cts, and .mts files in overrides (if needed)", "file": "generated/packages/eslint/migrations/add-file-extensions-to-overrides.json", diff --git a/docs/generated/packages/angular/migrations/19.1.2-package-updates.json b/docs/generated/packages/angular/migrations/19.1.2-package-updates.json index 58a065ce5d..bcae3e8db4 100644 --- a/docs/generated/packages/angular/migrations/19.1.2-package-updates.json +++ b/docs/generated/packages/angular/migrations/19.1.2-package-updates.json @@ -21,6 +21,22 @@ "@angular-eslint/utils": { "version": "^18.0.1", "alwaysAddToPackageJson": false + }, + "@angular-eslint/schematics": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/test-utils": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/builder": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false } }, "aliases": [], diff --git a/docs/generated/packages/angular/migrations/20.2.0-angular-eslint-package-updates.json b/docs/generated/packages/angular/migrations/20.2.0-angular-eslint-package-updates.json index bfbbf443f5..1d8e4ddf6e 100644 --- a/docs/generated/packages/angular/migrations/20.2.0-angular-eslint-package-updates.json +++ b/docs/generated/packages/angular/migrations/20.2.0-angular-eslint-package-updates.json @@ -22,6 +22,22 @@ "@angular-eslint/utils": { "version": "^19.0.0", "alwaysAddToPackageJson": false + }, + "@angular-eslint/schematics": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/test-utils": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/builder": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false } }, "aliases": [], diff --git a/docs/generated/packages/angular/migrations/20.2.2-angular-eslint-package-updates.json b/docs/generated/packages/angular/migrations/20.2.2-angular-eslint-package-updates.json index 8f2ee30b7c..fb5a749d80 100644 --- a/docs/generated/packages/angular/migrations/20.2.2-angular-eslint-package-updates.json +++ b/docs/generated/packages/angular/migrations/20.2.2-angular-eslint-package-updates.json @@ -22,6 +22,22 @@ "@angular-eslint/utils": { "version": "^19.0.2", "alwaysAddToPackageJson": false + }, + "@angular-eslint/schematics": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/test-utils": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/builder": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false } }, "aliases": [], diff --git a/docs/generated/packages/eslint/migrations/19.5.0-package-updates.json b/docs/generated/packages/eslint/migrations/19.5.0-package-updates.json index 863b4368ae..6df068ed27 100644 --- a/docs/generated/packages/eslint/migrations/19.5.0-package-updates.json +++ b/docs/generated/packages/eslint/migrations/19.5.0-package-updates.json @@ -4,7 +4,19 @@ "packages": { "@typescript-eslint/parser": { "version": "^7.16.0" }, "@typescript-eslint/eslint-plugin": { "version": "^7.16.0" }, - "@typescript-eslint/utils": { "version": "^7.16.0" } + "@typescript-eslint/utils": { "version": "^7.16.0" }, + "@typescript-eslint/rule-tester": { + "version": "^7.16.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/scope-manager": { + "version": "^7.16.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/typescript-estree": { + "version": "^7.16.0", + "alwaysAddToPackageJson": false + } }, "aliases": [], "description": "", diff --git a/docs/generated/packages/eslint/migrations/20.4.0-@typescript-eslint-package-updates.json b/docs/generated/packages/eslint/migrations/20.4.0-@typescript-eslint-package-updates.json deleted file mode 100644 index bacafc1cee..0000000000 --- a/docs/generated/packages/eslint/migrations/20.4.0-@typescript-eslint-package-updates.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "20.4.0-@typescript-eslint-package-updates", - "version": "20.4.0-beta.1", - "requires": { "@typescript-eslint/eslint-plugin": ">8.0.0 <8.19.0" }, - "packages": { - "typescript-eslint": { "version": "^8.19.0" }, - "@typescript-eslint/parser": { "version": "^8.19.0" }, - "@typescript-eslint/eslint-plugin": { "version": "^8.19.0" }, - "@typescript-eslint/utils": { "version": "^8.19.0" } - }, - "aliases": [], - "description": "", - "hidden": false, - "implementation": "", - "path": "/packages/eslint", - "schema": null, - "type": "migration" -} diff --git a/docs/generated/packages/eslint/migrations/20.4.0-typescript-eslint-package-updates.json b/docs/generated/packages/eslint/migrations/20.4.0-typescript-eslint-package-updates.json index 6cdbbf8911..73037cfb4d 100644 --- a/docs/generated/packages/eslint/migrations/20.4.0-typescript-eslint-package-updates.json +++ b/docs/generated/packages/eslint/migrations/20.4.0-typescript-eslint-package-updates.json @@ -4,9 +4,21 @@ "requires": { "typescript-eslint": ">8.0.0 <8.19.0" }, "packages": { "typescript-eslint": { "version": "^8.19.0" }, - "@typescript-eslint/parser": { "version": "^8.19.0" }, "@typescript-eslint/eslint-plugin": { "version": "^8.19.0" }, - "@typescript-eslint/utils": { "version": "^8.19.0" } + "@typescript-eslint/parser": { "version": "^8.19.0" }, + "@typescript-eslint/utils": { "version": "^8.19.0" }, + "@typescript-eslint/rule-tester": { + "version": "^8.19.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/scope-manager": { + "version": "^8.19.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/typescript-estree": { + "version": "^8.19.0", + "alwaysAddToPackageJson": false + } }, "aliases": [], "description": "", diff --git a/packages/angular/migrations.json b/packages/angular/migrations.json index 138696e3fb..641b5820f7 100644 --- a/packages/angular/migrations.json +++ b/packages/angular/migrations.json @@ -1049,6 +1049,22 @@ "@angular-eslint/utils": { "version": "^18.0.1", "alwaysAddToPackageJson": false + }, + "@angular-eslint/schematics": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/test-utils": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/builder": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "^18.0.1", + "alwaysAddToPackageJson": false } } }, @@ -1368,6 +1384,22 @@ "@angular-eslint/utils": { "version": "^19.0.0", "alwaysAddToPackageJson": false + }, + "@angular-eslint/schematics": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/test-utils": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/builder": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "^19.0.0", + "alwaysAddToPackageJson": false } } }, @@ -1410,6 +1442,22 @@ "@angular-eslint/utils": { "version": "^19.0.2", "alwaysAddToPackageJson": false + }, + "@angular-eslint/schematics": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/test-utils": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/builder": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false + }, + "@angular-eslint/bundled-angular-compiler": { + "version": "^19.0.2", + "alwaysAddToPackageJson": false } } }, diff --git a/packages/eslint/migrations.json b/packages/eslint/migrations.json index 9bfdb70414..95efa5b2ec 100644 --- a/packages/eslint/migrations.json +++ b/packages/eslint/migrations.json @@ -104,6 +104,18 @@ }, "@typescript-eslint/utils": { "version": "^7.16.0" + }, + "@typescript-eslint/rule-tester": { + "version": "^7.16.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/scope-manager": { + "version": "^7.16.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/typescript-estree": { + "version": "^7.16.0", + "alwaysAddToPackageJson": false } } }, @@ -116,34 +128,26 @@ "typescript-eslint": { "version": "^8.19.0" }, - "@typescript-eslint/parser": { - "version": "^8.19.0" - }, "@typescript-eslint/eslint-plugin": { "version": "^8.19.0" }, - "@typescript-eslint/utils": { - "version": "^8.19.0" - } - } - }, - "20.4.0-@typescript-eslint": { - "version": "20.4.0-beta.1", - "requires": { - "@typescript-eslint/eslint-plugin": ">8.0.0 <8.19.0" - }, - "packages": { - "typescript-eslint": { - "version": "^8.19.0" - }, "@typescript-eslint/parser": { "version": "^8.19.0" }, - "@typescript-eslint/eslint-plugin": { - "version": "^8.19.0" - }, "@typescript-eslint/utils": { "version": "^8.19.0" + }, + "@typescript-eslint/rule-tester": { + "version": "^8.19.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/scope-manager": { + "version": "^8.19.0", + "alwaysAddToPackageJson": false + }, + "@typescript-eslint/typescript-estree": { + "version": "^8.19.0", + "alwaysAddToPackageJson": false } } }