From 652a6ea30c414a8414f358667fbe97d67b3951af Mon Sep 17 00:00:00 2001 From: Dave Date: Thu, 20 Mar 2025 01:41:37 +1000 Subject: [PATCH 01/23] chore(builder): make tests cross-platform (#2315) --- packages/builder/src/lint.impl.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/builder/src/lint.impl.spec.ts b/packages/builder/src/lint.impl.spec.ts index 3210dfa9c..8ea1e128c 100644 --- a/packages/builder/src/lint.impl.spec.ts +++ b/packages/builder/src/lint.impl.spec.ts @@ -5,7 +5,7 @@ import { workspaceRoot } from '@nx/devkit'; import type { ESLint } from 'eslint'; import { mkdtempSync, writeFileSync } from 'node:fs'; import { tmpdir } from 'node:os'; -import { join, sep } from 'node:path'; +import { basename, join, sep } from 'node:path'; import { setWorkspaceRoot } from 'nx/src/utils/workspace-root'; import type { Schema } from './schema'; @@ -211,7 +211,7 @@ describe('Linter Builder', () => { it('should resolve and instantiate ESLint with useFlatConfig=true if the root config is eslint.config.js', async () => { jest.spyOn(fs, 'existsSync').mockImplementation((path: any) => { - if (path.endsWith('/eslint.config.js')) { + if (basename(path) === 'eslint.config.js') { return true; } return false; @@ -249,7 +249,7 @@ describe('Linter Builder', () => { it('should resolve and instantiate ESLint with useFlatConfig=true if the root config is eslint.config.mjs', async () => { jest.spyOn(fs, 'existsSync').mockImplementation((path: any) => { - if (path.endsWith('/eslint.config.mjs')) { + if (basename(path) === 'eslint.config.js') { return true; } return false; @@ -287,7 +287,7 @@ describe('Linter Builder', () => { it('should resolve and instantiate ESLint with useFlatConfig=true if the root config is eslint.config.cjs', async () => { jest.spyOn(fs, 'existsSync').mockImplementation((path: any) => { - if (path.endsWith('/eslint.config.cjs')) { + if (basename(path) === 'eslint.config.js') { return true; } return false; From 8039d522cc8adb738219fe80fb0b7f1f2b6b4dc9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Mar 2025 19:42:33 +0400 Subject: [PATCH 02/23] fix: update typescript-eslint packages to v8.26.1 (#2313) --- .../inline-template-fixer.test.ts.snap | 2 +- ...ion-false-ng-add-then-project.test.ts.snap | 2 +- ...ion-false-project-then-ng-add.test.ts.snap | 2 +- .../new-workspace-type-module.test.ts.snap | 2 +- .../__snapshots__/new-workspace.test.ts.snap | 2 +- package.json | 8 +- packages/schematics/package.json | 2 +- pnpm-lock.yaml | 269 +++++++++++------- 8 files changed, 171 insertions(+), 118 deletions(-) diff --git a/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap b/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap index a575d5ed8..6cd5890f2 100644 --- a/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap +++ b/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap @@ -30,6 +30,6 @@ exports[`inline-template-fixer should generate the expected inline template fixe "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.X.X", - "typescript-eslint": "8.26.0" + "typescript-eslint": "8.26.1" } `; diff --git a/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap b/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap index c22786626..2f9693db7 100644 --- a/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap @@ -15,7 +15,7 @@ exports[`new-workspace-create-application-false-ng-add-then-project should pass "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.X.X", - "typescript-eslint": "8.26.0" + "typescript-eslint": "8.26.1" } `; diff --git a/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap b/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap index a89030594..d90b7c1ce 100644 --- a/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap @@ -15,7 +15,7 @@ exports[`new-workspace-create-application-false-project-then-ng-add should pass "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.X.X", - "typescript-eslint": "8.26.0" + "typescript-eslint": "8.26.1" } `; diff --git a/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap b/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap index 6bc3210ac..47117db76 100644 --- a/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap @@ -16,7 +16,7 @@ exports[`new-workspace-type-module should pass linting after creating a new work "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^19.X.X", "typescript": "~5.X.X", - "typescript-eslint": "8.26.0" + "typescript-eslint": "8.26.1" } `; diff --git a/e2e/src/__snapshots__/new-workspace.test.ts.snap b/e2e/src/__snapshots__/new-workspace.test.ts.snap index 4c02936d1..f5df0970a 100644 --- a/e2e/src/__snapshots__/new-workspace.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace.test.ts.snap @@ -16,7 +16,7 @@ exports[`new-workspace should pass linting after creating a new workspace from s "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^19.X.X", "typescript": "~5.X.X", - "typescript-eslint": "8.26.0" + "typescript-eslint": "8.26.1" } `; diff --git a/package.json b/package.json index 5d9851ab7..70c96a545 100644 --- a/package.json +++ b/package.json @@ -72,9 +72,9 @@ "@types/node": "20.17.24", "@types/semver": "^7.5.8", "@types/yargs": "^17.0.33", - "@typescript-eslint/rule-tester": "8.26.0", - "@typescript-eslint/types": "8.26.0", - "@typescript-eslint/utils": "8.26.0", + "@typescript-eslint/rule-tester": "8.26.1", + "@typescript-eslint/types": "8.26.1", + "@typescript-eslint/utils": "8.26.1", "cz-conventional-changelog": "3.3.0", "esbuild": "^0.25.0", "eslint": "9.22.0", @@ -98,7 +98,7 @@ "tslib": "^2.4.1", "tsx": "^4.7.3", "typescript": "5.7.3", - "typescript-eslint": "8.26.0", + "typescript-eslint": "8.26.1", "verdaccio": "6.0.5", "yargs": "17.7.2" }, diff --git a/packages/schematics/package.json b/packages/schematics/package.json index 3143ca6b2..4f9ed3e19 100644 --- a/packages/schematics/package.json +++ b/packages/schematics/package.json @@ -45,7 +45,7 @@ "strip-json-comments": "3.1.1" }, "devDependencies": { - "@typescript-eslint/utils": "8.26.0", + "@typescript-eslint/utils": "8.26.1", "eslint": "9.22.0" }, "gitHead": "e2006e5e9c99e5a943d1a999e0efa5247d29ec24" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19311c69d..4212d9585 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,9 @@ settings: excludeLinksFromLockfile: false overrides: - '@typescript-eslint/parser': 8.26.0 - '@typescript-eslint/rule-tester': 8.26.0 - '@typescript-eslint/utils': 8.26.0 + '@typescript-eslint/parser': 8.26.1 + '@typescript-eslint/rule-tester': 8.26.1 + '@typescript-eslint/utils': 8.26.1 patchedDependencies: '@typescript-eslint/rule-tester': @@ -44,7 +44,7 @@ importers: version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint-plugin': specifier: 20.5.0 - version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/jest': specifier: 20.5.0 version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) @@ -91,14 +91,14 @@ importers: specifier: ^17.0.33 version: 17.0.33 '@typescript-eslint/rule-tester': - specifier: 8.26.0 - version: 8.26.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.26.1 + version: 8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/types': - specifier: 8.26.0 - version: 8.26.0 + specifier: 8.26.1 + version: 8.26.1 '@typescript-eslint/utils': - specifier: 8.26.0 - version: 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.26.1 + version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) cz-conventional-changelog: specifier: 3.3.0 version: 3.3.0(@types/node@20.17.24)(typescript@5.7.3) @@ -169,8 +169,8 @@ importers: specifier: 5.7.3 version: 5.7.3 typescript-eslint: - specifier: 8.26.0 - version: 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.26.1 + version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) verdaccio: specifier: 6.0.5 version: 6.0.5(encoding@0.1.13)(typanion@3.14.0) @@ -203,13 +203,13 @@ importers: version: link:../template-parser '@typescript-eslint/types': specifier: ^8.0.0 - version: 8.26.0 + version: 8.26.1 '@typescript-eslint/utils': - specifier: 8.26.0 - version: 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.26.1 + version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: specifier: ^8.57.0 || ^9.0.0 - version: 9.21.0(jiti@2.4.2) + version: 9.22.0(jiti@2.4.2) typescript: specifier: '*' version: 5.7.3 @@ -243,8 +243,8 @@ importers: specifier: workspace:* version: link:../utils '@typescript-eslint/utils': - specifier: 8.26.0 - version: 8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.26.1 + version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) eslint: specifier: ^8.57.0 || ^9.0.0 version: 9.15.0(jiti@2.4.2) @@ -268,8 +268,8 @@ importers: specifier: ^7.11.0 || ^8.0.0 version: 8.16.0 '@typescript-eslint/utils': - specifier: 8.26.0 - version: 8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.26.1 + version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) aria-query: specifier: 5.3.2 version: 5.3.2 @@ -320,8 +320,8 @@ importers: version: 3.1.1 devDependencies: '@typescript-eslint/utils': - specifier: 8.26.0 - version: 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.26.1 + version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: specifier: 9.22.0 version: 9.22.0(jiti@2.4.2) @@ -347,14 +347,14 @@ importers: specifier: workspace:* version: link:../template-parser '@typescript-eslint/parser': - specifier: 8.26.0 - version: 8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.26.1 + version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) '@typescript-eslint/rule-tester': - specifier: 8.26.0 - version: 8.26.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.26.1 + version: 8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) '@typescript-eslint/utils': - specifier: 8.26.0 - version: 8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.26.1 + version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) eslint: specifier: ^8.57.0 || ^9.0.0 version: 9.15.0(jiti@2.4.2) @@ -368,8 +368,8 @@ importers: specifier: workspace:* version: link:../bundled-angular-compiler '@typescript-eslint/utils': - specifier: 8.26.0 - version: 8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.26.1 + version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) eslint: specifier: ^8.57.0 || ^9.0.0 version: 9.15.0(jiti@2.4.2) @@ -1824,7 +1824,7 @@ packages: '@nx/eslint-plugin@20.5.0': resolution: {integrity: sha512-SEryJj5c50JWZgv2NaJUgQTy6l2Xwzmgu7hJpDD4Xc0LWMirrLix95XY8Plkom4y328GXL5k8CuFESjCh+9aew==} peerDependencies: - '@typescript-eslint/parser': 8.26.0 + '@typescript-eslint/parser': 8.26.1 eslint-config-prettier: ^9.0.0 peerDependenciesMeta: eslint-config-prettier: @@ -2232,30 +2232,30 @@ packages: resolution: {integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': 8.26.0 + '@typescript-eslint/parser': 8.26.1 eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.26.0': - resolution: {integrity: sha512-cLr1J6pe56zjKYajK6SSSre6nl1Gj6xDp1TY0trpgPzjVbgDwd09v2Ws37LABxzkicmUjhEeg/fAUjPJJB1v5Q==} + '@typescript-eslint/eslint-plugin@8.26.1': + resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': 8.26.0 + '@typescript-eslint/parser': 8.26.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.26.0': - resolution: {integrity: sha512-mNtXP9LTVBy14ZF3o7JG69gRPBK/2QWtQd0j0oH26HcY/foyJJau6pNUez7QrM5UHnSvwlQcJXKsk0I99B9pOA==} + '@typescript-eslint/parser@8.26.1': + resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} 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' - '@typescript-eslint/rule-tester@8.26.0': - resolution: {integrity: sha512-o6UDdOWGpkdXpfG+iVC/caucZptQfbcXLoWWRyKVXYW5PDTqN9HDXlDXS0jKtqT0gIHdNuYKflo+ELv7oW7cvw==} + '@typescript-eslint/rule-tester@8.26.1': + resolution: {integrity: sha512-hiCEpOw/ctCBias5sYNShkdtSum5Hix7nyXQs9bqr1no1+oD3mgYSy0iZfkx8MVA+86PLr+Hr3OUbOx3k2YAEg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2264,8 +2264,8 @@ packages: resolution: {integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.26.0': - resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} + '@typescript-eslint/scope-manager@8.26.1': + resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@8.16.0': @@ -2285,6 +2285,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.26.1': + resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} + 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' + '@typescript-eslint/types@8.16.0': resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2293,6 +2300,10 @@ packages: resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.26.1': + resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.16.0': resolution: {integrity: sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2308,8 +2319,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.26.0': - resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} + '@typescript-eslint/typescript-estree@8.26.1': + resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.26.1': + resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2323,6 +2340,10 @@ packages: resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.26.1': + resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@verdaccio/auth@8.0.0-next-8.7': resolution: {integrity: sha512-CSLBAsCJT1oOpJ4OWnVGmN6o/ZilDNa7Aa5+AU1LI2lbRblqgr4BVRn07GFqimJ//6+tPzl8BHgyiCbBhh1ZiA==} engines: {node: '>=18'} @@ -5592,8 +5613,8 @@ packages: typescript: optional: true - typescript-eslint@8.26.0: - resolution: {integrity: sha512-PtVz9nAnuNJuAVeUFvwztjuUgSnJInODAUx47VDwWPXzd5vismPOtPtt83tzNXyOjVQbPRp786D6WFW/M2koIA==} + typescript-eslint@8.26.1: + resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7660,13 +7681,13 @@ snapshots: - typescript - verdaccio - '@nx/eslint-plugin@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint-plugin@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) '@nx/js': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@typescript-eslint/parser': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/type-utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) chalk: 4.1.2 confusing-browser-globals: 1.0.11 globals: 15.12.0 @@ -8151,13 +8172,13 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.16.0 '@typescript-eslint/type-utils': 8.16.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.16.0 eslint: 9.21.0(jiti@2.4.2) graphemer: 1.4.0 @@ -8169,14 +8190,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/type-utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.0 + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.26.1 eslint: 9.22.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 @@ -8186,47 +8207,47 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': + '@typescript-eslint/parser@8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.26.0 + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.4.0 eslint: 9.15.0(jiti@2.4.2) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.0 + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.0 + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.4.0 eslint: 9.22.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@8.26.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': + '@typescript-eslint/rule-tester@8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: - '@typescript-eslint/parser': 8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + '@typescript-eslint/parser': 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.5.4) + '@typescript-eslint/utils': 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) ajv: 6.12.6 eslint: 9.15.0(jiti@2.4.2) json-stable-stringify-without-jsonify: 1.0.1 @@ -8236,11 +8257,11 @@ snapshots: - supports-color - typescript - '@typescript-eslint/rule-tester@8.26.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/rule-tester@8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/parser': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) ajv: 6.12.6 eslint: 9.22.0(jiti@2.4.2) json-stable-stringify-without-jsonify: 1.0.1 @@ -8255,15 +8276,15 @@ snapshots: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 - '@typescript-eslint/scope-manager@8.26.0': + '@typescript-eslint/scope-manager@8.26.1': dependencies: - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/visitor-keys': 8.26.0 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/visitor-keys': 8.26.1 '@typescript-eslint/type-utils@8.16.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.7.3) @@ -8275,7 +8296,18 @@ snapshots: '@typescript-eslint/type-utils@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.22.0(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 eslint: 9.22.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) @@ -8287,6 +8319,8 @@ snapshots: '@typescript-eslint/types@8.26.0': {} + '@typescript-eslint/types@8.26.1': {} + '@typescript-eslint/typescript-estree@8.16.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.16.0 @@ -8302,7 +8336,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.26.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.26.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.26.0 '@typescript-eslint/visitor-keys': 8.26.0 @@ -8311,15 +8345,29 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.26.1(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/visitor-keys': 8.26.1 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 ts-api-utils: 2.0.1(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.26.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.26.1(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/visitor-keys': 8.26.0 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/visitor-keys': 8.26.1 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -8330,34 +8378,34 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': + '@typescript-eslint/utils@8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.5.4) eslint: 9.15.0(jiti@2.4.2) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.0 - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.26.1 + '@typescript-eslint/types': 8.26.1 + '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) eslint: 9.22.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: @@ -8373,6 +8421,11 @@ snapshots: '@typescript-eslint/types': 8.26.0 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.26.1': + dependencies: + '@typescript-eslint/types': 8.26.1 + eslint-visitor-keys: 4.2.0 + '@verdaccio/auth@8.0.0-next-8.7': dependencies: '@verdaccio/config': 8.0.0-next-8.7 @@ -12142,20 +12195,20 @@ snapshots: typescript-eslint@8.16.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.21.0(jiti@2.4.2) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - typescript-eslint@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.22.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: From 52cae1e21e5189f17234d6eb084d55f2d6022afa Mon Sep 17 00:00:00 2001 From: James Henry Date: Fri, 21 Mar 2025 23:41:29 +0400 Subject: [PATCH 03/23] chore: leverage new nx release versioning implementation (#2329) --- nx.json | 6 +- package.json | 18 +-- pnpm-lock.yaml | 407 ++++++++++++++++++------------------------------- 3 files changed, 157 insertions(+), 274 deletions(-) diff --git a/nx.json b/nx.json index e56f98957..9b54a6e67 100644 --- a/nx.json +++ b/nx.json @@ -41,10 +41,8 @@ "release": { "projects": ["packages/*", "!nx-plugin"], "version": { - "conventionalCommits": true, - "generatorOptions": { - "preserveLocalDependencyProtocols": true - } + "useLegacyVersioning": false, + "conventionalCommits": true }, "changelog": { "workspaceChangelog": { diff --git a/package.json b/package.json index 70c96a545..861a7ac2e 100644 --- a/package.json +++ b/package.json @@ -53,14 +53,14 @@ "@commitlint/cli": "19.8.0", "@commitlint/config-conventional": "19.8.0", "@mdn/browser-compat-data": "5.7.1", - "@nx/devkit": "20.5.0", - "@nx/esbuild": "20.5.0", - "@nx/eslint": "20.5.0", - "@nx/eslint-plugin": "20.5.0", - "@nx/jest": "20.5.0", - "@nx/js": "20.5.0", - "@nx/plugin": "20.5.0", - "@nx/workspace": "20.5.0", + "@nx/devkit": "0.0.0-pr-30418-4f79396", + "@nx/esbuild": "0.0.0-pr-30418-4f79396", + "@nx/eslint": "0.0.0-pr-30418-4f79396", + "@nx/eslint-plugin": "0.0.0-pr-30418-4f79396", + "@nx/jest": "0.0.0-pr-30418-4f79396", + "@nx/js": "0.0.0-pr-30418-4f79396", + "@nx/plugin": "0.0.0-pr-30418-4f79396", + "@nx/workspace": "0.0.0-pr-30418-4f79396", "@schematics/angular": "19.2.1", "@swc-node/register": "1.10.9", "@swc/cli": "0.6.0", @@ -87,7 +87,7 @@ "jsonc-eslint-parser": "^2.1.0", "lint-staged": "15.4.3", "ncp": "2.0.0", - "nx": "20.5.0", + "nx": "0.0.0-pr-30418-4f79396", "picocolors": "1.1.1", "prettier": "3.5.3", "prettier-v2-for-jest-inline-snapshots": "npm:prettier@^2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4212d9585..bb4d533c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,29 +34,29 @@ importers: specifier: 5.7.1 version: 5.7.1 '@nx/devkit': - specifier: 20.5.0 - version: 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) '@nx/esbuild': - specifier: 20.5.0 - version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.0)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint': - specifier: 20.5.0 - version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint-plugin': - specifier: 20.5.0 - version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/jest': - specifier: 20.5.0 - version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/js': - specifier: 20.5.0 - version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/plugin': - specifier: 20.5.0 - version: 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/workspace': - specifier: 20.5.0 - version: 20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) '@schematics/angular': specifier: 19.2.1 version: 19.2.1 @@ -136,8 +136,8 @@ importers: specifier: 2.0.0 version: 2.0.0 nx: - specifier: 20.5.0 - version: 20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + specifier: 0.0.0-pr-30418-4f79396 + version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) picocolors: specifier: 1.1.1 version: 1.1.1 @@ -215,7 +215,7 @@ importers: version: 5.7.3 typescript-eslint: specifier: ^8.0.0 - version: 8.16.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.16.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) packages/builder: dependencies: @@ -1357,10 +1357,6 @@ packages: resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.21.0': - resolution: {integrity: sha512-BqStZ3HX8Yz6LvsF5ByXYrtigrV5AXADWLAGc7PH/1SxOb7/FIYYMszZZWiUou/GB9P2lXWk2SV4d+Z8h0nknw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.22.0': resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1808,21 +1804,21 @@ packages: resolution: {integrity: sha512-q9C0uHrb6B6cm3qXVM32UmpqTKuFGbtP23O2K5sLvPMz2hilKd0ptqGXSpuunOuOmPQb/aT5F/kCXFc1P2gO/A==} engines: {node: ^18.17.0 || >=20.5.0} - '@nx/devkit@20.5.0': - resolution: {integrity: sha512-FLHjNRb6VImdlnDsp3ioIdM600y2xPvN88LFV9zPrG2hDXSaD9Np9YBZvvfCr4x46MrPCTTMoAVwWsCXIBgchg==} + '@nx/devkit@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-69Bza98Fg0wJFLfth/ysUOJUKQgaicnYn+CapwvokAik6nWTCEupHaw9uApL9qs01YAJAGdMPPFy5Vn4GJAjJg==} peerDependencies: nx: '>= 19 <= 21' - '@nx/esbuild@20.5.0': - resolution: {integrity: sha512-2J4PLGArds3kkl4/9Hzq4DE+6l1Ny1wO9dEk/QUbmEMPs+wn/a6IQfNc++JD4m3mvMlFLG5FLPl8gR/nrKjGmg==} + '@nx/esbuild@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-kMgFEQ0vI11FEOeHNr6ebxqIE3xHzSue8Mf+1KJI+HImO6wHcC9C5SgOpGhiM7yJlupi6o93zcpzJ2a2sbugkA==} peerDependencies: esbuild: ^0.19.2 peerDependenciesMeta: esbuild: optional: true - '@nx/eslint-plugin@20.5.0': - resolution: {integrity: sha512-SEryJj5c50JWZgv2NaJUgQTy6l2Xwzmgu7hJpDD4Xc0LWMirrLix95XY8Plkom4y328GXL5k8CuFESjCh+9aew==} + '@nx/eslint-plugin@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-TvmNHZXqsW+/orP8de3QMgmFQF02AKfL0aKMQM/wKdDYI8Kwfgxjc9RGDgByDlg0ZjwoYa3cWzpDJJgd2chlaQ==} peerDependencies: '@typescript-eslint/parser': 8.26.1 eslint-config-prettier: ^9.0.0 @@ -1830,8 +1826,8 @@ packages: eslint-config-prettier: optional: true - '@nx/eslint@20.5.0': - resolution: {integrity: sha512-9rMnlkSJ+Be+rXICDXaBoDfE5PbSV4TBnG0BM2V9dB1iRWpVtgv49ZreDUFYW0AAJ/RrlGHtlbYl6vupxL9EGg==} + '@nx/eslint@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-OKoV/6KLX2BAP42J0aFySx9ilhOvG7IPrHVTtJ9pVXv7ERPqqfP6YnzNV4H3aPZOEaQxBvt0kTETA2KIadKxRQ==} peerDependencies: '@zkochan/js-yaml': 0.0.7 eslint: ^8.0.0 || ^9.0.0 @@ -1839,82 +1835,82 @@ packages: '@zkochan/js-yaml': optional: true - '@nx/jest@20.5.0': - resolution: {integrity: sha512-/wfADqIHQx2QYmylkAYimP1J7XFbBThce9fPaRQ/Ybows3x9YCfHJT0A7eetIf0qEaxmogigm/0QVmtkPArorg==} + '@nx/jest@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-m7XTAwbXoB1rEOXpoNNHYKlQ7aAK+Ip8fW6M7ARzDTyzgNF0RpNLBC08OavtO2iP7Ge0SRVcpmgnk15W3/zIww==} - '@nx/js@20.5.0': - resolution: {integrity: sha512-TFdmmSARDNYiwxXUsVowHgMYhjuGzYG4wWExCXkb8m4g6ER1zT9oUzGRf9eC7CHFTGonvAQ8hgBt90xt2EUdQA==} + '@nx/js@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-4SUsWtedZNqPEDzGg9TEIRIQfipyninrICmWltw2bn1hfKvjsdIUogP0obJs+pQ10PSD0x/KpDlfqJ5UFAWw+w==} peerDependencies: verdaccio: ^6.0.5 peerDependenciesMeta: verdaccio: optional: true - '@nx/nx-darwin-arm64@20.5.0': - resolution: {integrity: sha512-HlMMC4d253kk/yrafiepk8bhXMl+v4BIugftwUzRl7AOznyNgaj5WDaIVXZLZzt+WwYw6CTb+zYxfY4LuPFvOg==} + '@nx/nx-darwin-arm64@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-lzCm7WvtoXE7XtWjaBX3n7E+CxPiguR894qD3LhyqqQTh5COcPKRIXqdweVLDx6SBxpb4A1auuFFWclTL9pscw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@20.5.0': - resolution: {integrity: sha512-+LO8YC5Iy1168saPeItNePChToP2TuRCj3MuxEtTTJXoRlab38rNaOjWaV1itvtcgrzkQi/IohINWMI8WC5b7g==} + '@nx/nx-darwin-x64@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-K+8Je3BMm40sp/nyvFqa7Y8qE9+gFI+RCHr0LpqiK+IJsasw3hZurLJwPuTOqBiMhKiDb/h1rjhW/GAjTAMGkA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@20.5.0': - resolution: {integrity: sha512-he3VOuj35XDAAmO3s6LqiWx00CsCMgHceNOHziCELQL0tfQlvvyI0Agmhesw68BAbabt+mKH9g+miENiaMknbg==} + '@nx/nx-freebsd-x64@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-dmK4b2IKJvmF/Jouccd0aLE5l8AS8wsqGWI9An7qojDIawmsAncyUtsHGcN3Ow+ibx1GNdpzmfJ1D9zrGAS75w==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@20.5.0': - resolution: {integrity: sha512-xeysjXvm4xZa/ED7XlbzuS28sCOGZ0AlS7DKWRxEMv60iprxewj0WKPdH7RveiNNauzgHWOW/wxvTWXRu+i36Q==} + '@nx/nx-linux-arm-gnueabihf@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-CAL73NUhBj4VfVe3iIpeHmORulO0PVGVZcWWHeJW5hm5shSlTbvMvG9nVYfZ83Y9ELFZf3Tzg3cybn06phFOoA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@20.5.0': - resolution: {integrity: sha512-pj+6OA7d1ltkW/ZYFooi3bDtqVFPxi8YYiZlQx7enEuOxbrTvpjEPvBjVyf+oYpCe9rfKlx9ghzufqsI4uGM0w==} + '@nx/nx-linux-arm64-gnu@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-p4zReI7l7pUK6KbeOMlh3l4QlxBwo3zvhd1zgM209/IxKq4GQCfJrrfYMYkERz5yuy2UbraDfvlLFDFIwhodmg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@20.5.0': - resolution: {integrity: sha512-gCIJEb/VYv6pxiAcSeizX0jpOmTnPmgYVi2EZLSWus0Pg6FIwMHE4MX5kuqehyvnDt9xInb7Rh8vgz/JBOOsbA==} + '@nx/nx-linux-arm64-musl@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-eDhWaVpeA/E9a9RI48F9p7wbdc0Kh0yXgI/dmToGSn6PfyN0oT+o08HodtmXqBfS5RimPj9QqTL8Imz3TLvRBg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@20.5.0': - resolution: {integrity: sha512-hfCDmfy7TBQJdgBwNvOh55e8Y00Cxcddw2QeKguvy6vsnVa7fesXDWCw2t3m/VPPQDKQGd8cY1lS1JqX3N+wCA==} + '@nx/nx-linux-x64-gnu@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-VDRDu1V8wz4Wzda1568Rhql0e4abXzdFHD7xZhqYvUkHdMsXIhmSMNJUznebe1QE8WVxTZLHHL3IKSiBIAYbVw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@20.5.0': - resolution: {integrity: sha512-RTTCPjZNSDFE5mUdavDFimDw/aXNBY0w+iuRM5q17rDHxwa//DghCY0GEkBdfuxD7wpw+sRwE18mWsNDek5lXA==} + '@nx/nx-linux-x64-musl@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-IDb0Uft1hJRvf6CqO+YewS4GCAxr5GGJ3xMeiDs+NncmjwoyqTNJgcbsGZHPnVXBfELbPku5+KyywNXULp+9ww==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@20.5.0': - resolution: {integrity: sha512-nT9WlG0QA8D74UJhEP1feGrV00/bas1nnqS+zkwnpJs0vcPmMuIktdETh3lEnqrGD04R7GtwbKtoGIGiZh5m9w==} + '@nx/nx-win32-arm64-msvc@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-4V4ITC0n8/fVYYJ2EJGw9ZnMA2jLMWsbT8RUhhAZOeTRmuq4zVZ2Qas5rPBsqpXGhWmpIynRKLLiXZf9yKMpJQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@20.5.0': - resolution: {integrity: sha512-KQVqFSYfc8ToSBgzhVNV8WcFEvLdy1zp58qwewa0xnE7DDncMbA+6YoVizUcQ/6GZRlMJ9sdVn3kwm5B8eD5mg==} + '@nx/nx-win32-x64-msvc@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-rA8Y9j4WPVFoNXRQsem55HSVpp5VXz+ONwj/YekiDTiHRjx4ByEM/0/k4hdeGxQ0CZ1VUUHWqB/eruuyOi0Blg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@nx/plugin@20.5.0': - resolution: {integrity: sha512-jJB5pm605dnxOj9sqTBXsHQGljqVxo9ctLe7VcZqVS4aJEFabzk2ZgspvOg7yJbjusBA8JdmhQQxxHQ+mCtLjQ==} + '@nx/plugin@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-Kv0g6va6Rqm8VRZ1QwtpZ79BZnRiwzFa0b5npkJuJb1Z07XCG1+qSBdTs53zNErp5KS/aRiBqUv3dnQPouI04Q==} - '@nx/workspace@20.5.0': - resolution: {integrity: sha512-Oe5p7rcgF/o4G2XDHYOxQxa/eDEfvmQV+kFCs8DBQwlzUwREAP4/pHFI0AIdWSfYkq55C5PE/PNKUGHrk2/xTA==} + '@nx/workspace@0.0.0-pr-30418-4f79396': + resolution: {integrity: sha512-Vbvt8TZBnjIzOX6s8wClP9wbuEIVBg4owEPm1lnHH5gbjgZgKU6DMka/u0YsiLV+cn0bBlKQgIs1Mbvn0vIG4Q==} '@oxc-resolver/binding-darwin-arm64@1.12.0': resolution: {integrity: sha512-wYe+dlF8npM7cwopOOxbdNjtmJp17e/xF5c0K2WooQXy5VOh74icydM33+Uh/SZDgwyum09/U1FVCX5GdeQk+A==} @@ -2278,13 +2274,6 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.26.0': - resolution: {integrity: sha512-ruk0RNChLKz3zKGn2LwXuVoeBcUMh+jaqzN461uMMdxy5H9epZqIBtYj7UiPXRuOpaALXGbmRuZQhmwHhaS04Q==} - 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' - '@typescript-eslint/type-utils@8.26.1': resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2296,10 +2285,6 @@ packages: resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.26.0': - resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.26.1': resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2313,12 +2298,6 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.26.0': - resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/typescript-estree@8.26.1': resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2336,10 +2315,6 @@ packages: resolution: {integrity: sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.26.0': - resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.26.1': resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2634,8 +2609,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axios@1.7.8: - resolution: {integrity: sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==} + axios@1.8.4: + resolution: {integrity: sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} @@ -3330,16 +3305,6 @@ packages: jiti: optional: true - eslint@9.21.0: - resolution: {integrity: sha512-KjeihdFqTPhOMXTt7StsDxriV4n66ueuF/jfPNC3j/lduHwr/ijDwJMsF+wyMJethgiKi5wniIE243vi07d3pg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - eslint@9.22.0: resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3487,6 +3452,14 @@ packages: picomatch: optional: true + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -4703,8 +4676,8 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nx@20.5.0: - resolution: {integrity: sha512-KuAzhTj1NHu3iOVsTBrzu7cboO69UgwzUMoAb8KfszV5FwQD5dARrkR7Ew4NZzFdB+arUr2rvo1ik9f1O19keg==} + nx@0.0.0-pr-30418-4f79396: + resolution: {integrity: sha512-8O1WGRh8nLPfmorI2pzDIpvfKz4W24EF6elZ6D5ip2+p9M5LkIxoKu1NrcsOQrL0N306j3RjLXYVmYIS7W1p1A==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -5471,6 +5444,10 @@ packages: resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} engines: {node: '>=12.0.0'} + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + tldts-core@6.1.71: resolution: {integrity: sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==} @@ -7041,11 +7018,6 @@ snapshots: eslint: 9.15.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))': - dependencies: - eslint: 9.21.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.4.1(eslint@9.22.0(jiti@2.4.2))': dependencies: eslint: 9.22.0(jiti@2.4.2) @@ -7107,8 +7079,6 @@ snapshots: '@eslint/js@9.15.0': {} - '@eslint/js@9.21.0': {} - '@eslint/js@9.22.0': {} '@eslint/object-schema@2.1.4': {} @@ -7647,24 +7617,24 @@ snapshots: - bluebird - supports-color - '@nx/devkit@20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))': + '@nx/devkit@0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))': dependencies: ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + nx: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) semver: 7.7.1 tmp: 0.2.3 tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/esbuild@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.0)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/esbuild@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) picocolors: 1.1.1 - tinyglobby: 0.2.10 + tinyglobby: 0.2.12 tsconfig-paths: 4.2.0 tslib: 2.8.1 optionalDependencies: @@ -7681,12 +7651,12 @@ snapshots: - typescript - verdaccio - '@nx/eslint-plugin@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/type-utils': 8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) chalk: 4.1.2 confusing-browser-globals: 1.0.11 @@ -7709,10 +7679,10 @@ snapshots: - typescript - verdaccio - '@nx/eslint@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) eslint: 9.22.0(jiti@2.4.2) semver: 7.7.1 tslib: 2.8.1 @@ -7730,12 +7700,12 @@ snapshots: - supports-color - verdaccio - '@nx/jest@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/jest@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 - '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) identity-obj-proxy: 3.0.0 jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) @@ -7762,7 +7732,7 @@ snapshots: - typescript - verdaccio - '@nx/js@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/js@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -7771,8 +7741,8 @@ snapshots: '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/workspace': 20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/workspace': 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) '@zkochan/js-yaml': 0.0.7 babel-plugin-const-enum: 1.2.0(@babel/core@7.26.0) babel-plugin-macros: 3.1.0 @@ -7791,7 +7761,7 @@ snapshots: picomatch: 4.0.2 semver: 7.7.1 source-map-support: 0.5.19 - tinyglobby: 0.2.10 + tinyglobby: 0.2.12 ts-node: 10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3) tsconfig-paths: 4.2.0 tslib: 2.8.1 @@ -7808,42 +7778,42 @@ snapshots: - supports-color - typescript - '@nx/nx-darwin-arm64@20.5.0': + '@nx/nx-darwin-arm64@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-darwin-x64@20.5.0': + '@nx/nx-darwin-x64@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-freebsd-x64@20.5.0': + '@nx/nx-freebsd-x64@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-linux-arm-gnueabihf@20.5.0': + '@nx/nx-linux-arm-gnueabihf@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-linux-arm64-gnu@20.5.0': + '@nx/nx-linux-arm64-gnu@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-linux-arm64-musl@20.5.0': + '@nx/nx-linux-arm64-musl@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-linux-x64-gnu@20.5.0': + '@nx/nx-linux-x64-gnu@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-linux-x64-musl@20.5.0': + '@nx/nx-linux-x64-musl@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-win32-arm64-msvc@20.5.0': + '@nx/nx-win32-arm64-msvc@0.0.0-pr-30418-4f79396': optional: true - '@nx/nx-win32-x64-msvc@20.5.0': + '@nx/nx-win32-x64-msvc@0.0.0-pr-30418-4f79396': optional: true - '@nx/plugin@20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/eslint': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@nx/jest': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@nx/js': 20.5.0(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/eslint': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/jest': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) tslib: 2.8.1 transitivePeerDependencies: - '@babel/traverse' @@ -7862,12 +7832,14 @@ snapshots: - typescript - verdaccio - '@nx/workspace@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))': + '@nx/workspace@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))': dependencies: - '@nx/devkit': 20.5.0(nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@zkochan/js-yaml': 0.0.7 chalk: 4.1.2 enquirer: 2.3.6 - nx: 20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + nx: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + picomatch: 4.0.2 tslib: 2.8.1 yargs-parser: 21.1.1 transitivePeerDependencies: @@ -8172,15 +8144,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.16.0 - '@typescript-eslint/type-utils': 8.16.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.16.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.16.0 - eslint: 9.21.0(jiti@2.4.2) + eslint: 9.22.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -8219,18 +8191,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.1 - debug: 4.4.0 - eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.26.1 @@ -8281,25 +8241,14 @@ snapshots: '@typescript-eslint/types': 8.26.1 '@typescript-eslint/visitor-keys': 8.26.1 - '@typescript-eslint/type-utils@8.16.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.16.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - debug: 4.4.0 - eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 1.4.3(typescript@5.7.3) - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@8.26.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.7.3) '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 eslint: 9.22.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 1.4.3(typescript@5.7.3) + optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -8317,8 +8266,6 @@ snapshots: '@typescript-eslint/types@8.16.0': {} - '@typescript-eslint/types@8.26.0': {} - '@typescript-eslint/types@8.26.1': {} '@typescript-eslint/typescript-estree@8.16.0(typescript@5.7.3)': @@ -8336,20 +8283,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.26.0(typescript@5.7.3)': - dependencies: - '@typescript-eslint/types': 8.26.0 - '@typescript-eslint/visitor-keys': 8.26.0 - debug: 4.4.0 - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.26.1(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 8.26.1 @@ -8389,17 +8322,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) @@ -8416,11 +8338,6 @@ snapshots: '@typescript-eslint/types': 8.16.0 eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.26.0': - dependencies: - '@typescript-eslint/types': 8.26.0 - eslint-visitor-keys: 4.2.0 - '@typescript-eslint/visitor-keys@8.26.1': dependencies: '@typescript-eslint/types': 8.26.1 @@ -8799,7 +8716,7 @@ snapshots: aws4@1.13.2: {} - axios@1.7.8: + axios@1.8.4: dependencies: follow-redirects: 1.15.9 form-data: 4.0.1 @@ -9575,47 +9492,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.21.0(jiti@2.4.2): - dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.2 - '@eslint/core': 0.12.0 - '@eslint/eslintrc': 3.3.0 - '@eslint/js': 9.21.0 - '@eslint/plugin-kit': 0.2.7 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.0 - escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - 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.4 - optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - supports-color - eslint@9.22.0(jiti@2.4.2): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) @@ -9831,6 +9707,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -11220,13 +11100,13 @@ snapshots: dependencies: path-key: 4.0.0 - nx@20.5.0(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)): + nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.2 '@zkochan/js-yaml': 0.0.7 - axios: 1.7.8 + axios: 1.8.4 chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 @@ -11257,16 +11137,16 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 20.5.0 - '@nx/nx-darwin-x64': 20.5.0 - '@nx/nx-freebsd-x64': 20.5.0 - '@nx/nx-linux-arm-gnueabihf': 20.5.0 - '@nx/nx-linux-arm64-gnu': 20.5.0 - '@nx/nx-linux-arm64-musl': 20.5.0 - '@nx/nx-linux-x64-gnu': 20.5.0 - '@nx/nx-linux-x64-musl': 20.5.0 - '@nx/nx-win32-arm64-msvc': 20.5.0 - '@nx/nx-win32-x64-msvc': 20.5.0 + '@nx/nx-darwin-arm64': 0.0.0-pr-30418-4f79396 + '@nx/nx-darwin-x64': 0.0.0-pr-30418-4f79396 + '@nx/nx-freebsd-x64': 0.0.0-pr-30418-4f79396 + '@nx/nx-linux-arm-gnueabihf': 0.0.0-pr-30418-4f79396 + '@nx/nx-linux-arm64-gnu': 0.0.0-pr-30418-4f79396 + '@nx/nx-linux-arm64-musl': 0.0.0-pr-30418-4f79396 + '@nx/nx-linux-x64-gnu': 0.0.0-pr-30418-4f79396 + '@nx/nx-linux-x64-musl': 0.0.0-pr-30418-4f79396 + '@nx/nx-win32-arm64-msvc': 0.0.0-pr-30418-4f79396 + '@nx/nx-win32-x64-msvc': 0.0.0-pr-30418-4f79396 '@swc-node/register': 1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3) '@swc/core': 1.11.8(@swc/helpers@0.5.15) transitivePeerDependencies: @@ -12064,6 +11944,11 @@ snapshots: fdir: 6.4.2(picomatch@4.0.2) picomatch: 4.0.2 + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + tldts-core@6.1.71: {} tldts@6.1.71: @@ -12193,12 +12078,12 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - typescript-eslint@8.16.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.16.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.21.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.22.0(jiti@2.4.2) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: From a1e71970d5777dc4f9505a671a4c748cf87afff9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 12:44:07 +0400 Subject: [PATCH 04/23] chore: update pnpm to v10.6.5 (#2309) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 861a7ac2e..afed85798 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "volta": { "node": "20.18.3" }, - "packageManager": "pnpm@10.6.1", + "packageManager": "pnpm@10.6.5", "contributors": [ "James Henry " ], From 994b87225411aa15273ba46f13c86aba0a0f3961 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 12:44:20 +0400 Subject: [PATCH 05/23] chore: update dependency esbuild to v0.25.1 (#2310) --- pnpm-lock.yaml | 222 ++++++++++++++++++++++++------------------------- 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb4d533c9..f08f8f95a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,7 +38,7 @@ importers: version: 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) '@nx/esbuild': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint': specifier: 0.0.0-pr-30418-4f79396 version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) @@ -104,7 +104,7 @@ importers: version: 3.3.0(@types/node@20.17.24)(typescript@5.7.3) esbuild: specifier: ^0.25.0 - version: 0.25.0 + version: 0.25.1 eslint: specifier: 9.22.0 version: 9.22.0(jiti@2.4.2) @@ -158,7 +158,7 @@ importers: version: 1.2.2 ts-jest: specifier: 29.2.4 - version: 29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.0)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3) + version: 29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3) tslib: specifier: ^2.4.1 version: 2.8.1 @@ -1165,152 +1165,152 @@ packages: '@emnapi/wasi-threads@1.0.1': resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} - '@esbuild/aix-ppc64@0.25.0': - resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.0': - resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.0': - resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.0': - resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.0': - resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.0': - resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.0': - resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.0': - resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.0': - resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.0': - resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.0': - resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.0': - resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.0': - resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.0': - resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.0': - resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.0': - resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.0': - resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.0': - resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.0': - resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.0': - resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.0': - resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.0': - resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.0': - resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.0': - resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.0': - resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -3249,8 +3249,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - esbuild@0.25.0: - resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} engines: {node: '>=18'} hasBin: true @@ -6938,79 +6938,79 @@ snapshots: dependencies: tslib: 2.8.1 - '@esbuild/aix-ppc64@0.25.0': + '@esbuild/aix-ppc64@0.25.1': optional: true - '@esbuild/android-arm64@0.25.0': + '@esbuild/android-arm64@0.25.1': optional: true - '@esbuild/android-arm@0.25.0': + '@esbuild/android-arm@0.25.1': optional: true - '@esbuild/android-x64@0.25.0': + '@esbuild/android-x64@0.25.1': optional: true - '@esbuild/darwin-arm64@0.25.0': + '@esbuild/darwin-arm64@0.25.1': optional: true - '@esbuild/darwin-x64@0.25.0': + '@esbuild/darwin-x64@0.25.1': optional: true - '@esbuild/freebsd-arm64@0.25.0': + '@esbuild/freebsd-arm64@0.25.1': optional: true - '@esbuild/freebsd-x64@0.25.0': + '@esbuild/freebsd-x64@0.25.1': optional: true - '@esbuild/linux-arm64@0.25.0': + '@esbuild/linux-arm64@0.25.1': optional: true - '@esbuild/linux-arm@0.25.0': + '@esbuild/linux-arm@0.25.1': optional: true - '@esbuild/linux-ia32@0.25.0': + '@esbuild/linux-ia32@0.25.1': optional: true - '@esbuild/linux-loong64@0.25.0': + '@esbuild/linux-loong64@0.25.1': optional: true - '@esbuild/linux-mips64el@0.25.0': + '@esbuild/linux-mips64el@0.25.1': optional: true - '@esbuild/linux-ppc64@0.25.0': + '@esbuild/linux-ppc64@0.25.1': optional: true - '@esbuild/linux-riscv64@0.25.0': + '@esbuild/linux-riscv64@0.25.1': optional: true - '@esbuild/linux-s390x@0.25.0': + '@esbuild/linux-s390x@0.25.1': optional: true - '@esbuild/linux-x64@0.25.0': + '@esbuild/linux-x64@0.25.1': optional: true - '@esbuild/netbsd-arm64@0.25.0': + '@esbuild/netbsd-arm64@0.25.1': optional: true - '@esbuild/netbsd-x64@0.25.0': + '@esbuild/netbsd-x64@0.25.1': optional: true - '@esbuild/openbsd-arm64@0.25.0': + '@esbuild/openbsd-arm64@0.25.1': optional: true - '@esbuild/openbsd-x64@0.25.0': + '@esbuild/openbsd-x64@0.25.1': optional: true - '@esbuild/sunos-x64@0.25.0': + '@esbuild/sunos-x64@0.25.1': optional: true - '@esbuild/win32-arm64@0.25.0': + '@esbuild/win32-arm64@0.25.1': optional: true - '@esbuild/win32-ia32@0.25.0': + '@esbuild/win32-ia32@0.25.1': optional: true - '@esbuild/win32-x64@0.25.0': + '@esbuild/win32-x64@0.25.1': optional: true '@eslint-community/eslint-utils@4.4.1(eslint@9.15.0(jiti@2.4.2))': @@ -7629,7 +7629,7 @@ snapshots: tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/esbuild@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/esbuild@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) @@ -7638,7 +7638,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 optionalDependencies: - esbuild: 0.25.0 + esbuild: 0.25.1 transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -9395,33 +9395,33 @@ snapshots: es-errors@1.3.0: {} - esbuild@0.25.0: + esbuild@0.25.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.0 - '@esbuild/android-arm': 0.25.0 - '@esbuild/android-arm64': 0.25.0 - '@esbuild/android-x64': 0.25.0 - '@esbuild/darwin-arm64': 0.25.0 - '@esbuild/darwin-x64': 0.25.0 - '@esbuild/freebsd-arm64': 0.25.0 - '@esbuild/freebsd-x64': 0.25.0 - '@esbuild/linux-arm': 0.25.0 - '@esbuild/linux-arm64': 0.25.0 - '@esbuild/linux-ia32': 0.25.0 - '@esbuild/linux-loong64': 0.25.0 - '@esbuild/linux-mips64el': 0.25.0 - '@esbuild/linux-ppc64': 0.25.0 - '@esbuild/linux-riscv64': 0.25.0 - '@esbuild/linux-s390x': 0.25.0 - '@esbuild/linux-x64': 0.25.0 - '@esbuild/netbsd-arm64': 0.25.0 - '@esbuild/netbsd-x64': 0.25.0 - '@esbuild/openbsd-arm64': 0.25.0 - '@esbuild/openbsd-x64': 0.25.0 - '@esbuild/sunos-x64': 0.25.0 - '@esbuild/win32-arm64': 0.25.0 - '@esbuild/win32-ia32': 0.25.0 - '@esbuild/win32-x64': 0.25.0 + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 escalade@3.2.0: {} @@ -11994,7 +11994,7 @@ snapshots: dependencies: typescript: 5.7.3 - ts-jest@29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.0)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 @@ -12012,7 +12012,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.26.0) - esbuild: 0.25.0 + esbuild: 0.25.1 ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3): dependencies: @@ -12044,7 +12044,7 @@ snapshots: tsx@4.19.3: dependencies: - esbuild: 0.25.0 + esbuild: 0.25.1 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 From 8be2f7cd1f34f42c6dcfc68b152314f0a2cee00d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 12:44:41 +0400 Subject: [PATCH 06/23] chore: update angular-cli monorepo to v19.2.4 (#2319) --- package.json | 4 ++-- pnpm-lock.yaml | 54 +++++++++++++++++++++++++------------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/package.json b/package.json index afed85798..40ee1a0dd 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ ] }, "devDependencies": { - "@angular/cli": "19.2.1", + "@angular/cli": "19.2.4", "@angular/compiler": "19.2.1", "@commitlint/cli": "19.8.0", "@commitlint/config-conventional": "19.8.0", @@ -61,7 +61,7 @@ "@nx/js": "0.0.0-pr-30418-4f79396", "@nx/plugin": "0.0.0-pr-30418-4f79396", "@nx/workspace": "0.0.0-pr-30418-4f79396", - "@schematics/angular": "19.2.1", + "@schematics/angular": "19.2.4", "@swc-node/register": "1.10.9", "@swc/cli": "0.6.0", "@swc/core": "1.11.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f08f8f95a..f07881afb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,8 +19,8 @@ importers: .: devDependencies: '@angular/cli': - specifier: 19.2.1 - version: 19.2.1(@types/node@20.17.24) + specifier: 19.2.4 + version: 19.2.4(@types/node@20.17.24) '@angular/compiler': specifier: 19.2.1 version: 19.2.1 @@ -58,8 +58,8 @@ importers: specifier: 0.0.0-pr-30418-4f79396 version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) '@schematics/angular': - specifier: 19.2.1 - version: 19.2.1 + specifier: 19.2.4 + version: 19.2.4 '@swc-node/register': specifier: 1.10.9 version: 1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3) @@ -387,8 +387,8 @@ packages: resolution: {integrity: sha512-oC2CyKf9olKvthEwp2wmkKw+H9NhpnK9cWYHvajWeCRJ8A4DLaKwfMuZ9lioi92QPourrJzoikgp7C6m2AuuZQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/architect@0.1902.1': - resolution: {integrity: sha512-iCm6F4HYO5aIgjzhjOUPKnyFHcn6yVE8gCpjWFQL8JVqrVzFG27vMZ0wK8b8rMDIDt6/hr2FOSSwChVg/cv9GQ==} + '@angular-devkit/architect@0.1902.4': + resolution: {integrity: sha512-YTLiJ7uVItZTAxRuSgASP0M5qILESWH8xGmfR+YWR1JiJem09DWEOpWeLdha1BFzUui5L+6j1btzh4FUHJOtAg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@angular-devkit/core@19.0.0': @@ -409,8 +409,8 @@ packages: chokidar: optional: true - '@angular-devkit/core@19.2.1': - resolution: {integrity: sha512-DYsoU8emxmBkfIKI693BNUqocwHTVHLjgybyD5nU1qMOH+D/jqEzL5bQbjhUeqeARyrzDg7tyPM5Xno+GsS7KQ==} + '@angular-devkit/core@19.2.4': + resolution: {integrity: sha512-dL6AmCQsKh+CFVvO/jxX8qZpamVwt9r4iIo7fYcAI2+mTSDGxxBGWbS+onIfdPFuRp2HgKa+AT6WiHmRqu63AA==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: chokidar: ^4.0.0 @@ -426,12 +426,12 @@ packages: resolution: {integrity: sha512-bwq8ReC92gGFTd2BeNBWCnOqIKu2YKNvwMVc7dl+D154WO2gzCaK2J5nL97qm5EjoUoXgvFRs84ysSAnLFzBxQ==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular-devkit/schematics@19.2.1': - resolution: {integrity: sha512-IVWXGROEACyV+YH/s9xvpbLVblK55GvqldZRCMvpevtXMJy1aubOPOB+8TkHOVBlmAteW/5I7ouDbQWVZjNfww==} + '@angular-devkit/schematics@19.2.4': + resolution: {integrity: sha512-WaFe95ncm1A+QTlUHxQcFyGKIn67xgqGX7WCj8R0QlKOS0hLKx97SG4p19uwHlww0lmAcwk/QJP6G6sPL/CJ9w==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - '@angular/cli@19.2.1': - resolution: {integrity: sha512-0ioZmuaapsbndXhpoUAew1uA4RFhNEa16kKgYPw5XlouaS2SLLrzC4nLW9DPJv6XrkOsOebf+OpyyHazzdFoSw==} + '@angular/cli@19.2.4': + resolution: {integrity: sha512-YmZYrxdGBwSZsrnpS6vr9gQ8+PrZHzwyYW/3jU2NRAMtl0ZlipDyfpLIDgrfqYPeumzr7+SKtJYVvlsMnjkN4g==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true @@ -1976,8 +1976,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@schematics/angular@19.2.1': - resolution: {integrity: sha512-QYYGVR2n+YtLzqo0IsQq7OUnBMeP6OjyuVlGdjsAnSDCKQ9kUcqZDwjxxh5NUj25R4vvu+5aVaa6W6iTxfHadQ==} + '@schematics/angular@19.2.4': + resolution: {integrity: sha512-P7fphIPbqHHYRVRPiFl7RAHYPYhINGSUYOXrcThVBBsgKQBX18oNdUWvhZA6ylwK/9T21XB20VyLjNy0d78H1Q==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} '@sec-ant/readable-stream@0.4.1': @@ -5862,9 +5862,9 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/architect@0.1902.1': + '@angular-devkit/architect@0.1902.4': dependencies: - '@angular-devkit/core': 19.2.1 + '@angular-devkit/core': 19.2.4 rxjs: 7.8.1 transitivePeerDependencies: - chokidar @@ -5887,7 +5887,7 @@ snapshots: rxjs: 7.8.1 source-map: 0.7.4 - '@angular-devkit/core@19.2.1': + '@angular-devkit/core@19.2.4': dependencies: ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) @@ -5916,9 +5916,9 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/schematics@19.2.1': + '@angular-devkit/schematics@19.2.4': dependencies: - '@angular-devkit/core': 19.2.1 + '@angular-devkit/core': 19.2.4 jsonc-parser: 3.3.1 magic-string: 0.30.17 ora: 5.4.1 @@ -5926,14 +5926,14 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/cli@19.2.1(@types/node@20.17.24)': + '@angular/cli@19.2.4(@types/node@20.17.24)': dependencies: - '@angular-devkit/architect': 0.1902.1 - '@angular-devkit/core': 19.2.1 - '@angular-devkit/schematics': 19.2.1 + '@angular-devkit/architect': 0.1902.4 + '@angular-devkit/core': 19.2.4 + '@angular-devkit/schematics': 19.2.4 '@inquirer/prompts': 7.3.2(@types/node@20.17.24) '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@20.17.24)) - '@schematics/angular': 19.2.1 + '@schematics/angular': 19.2.4 '@yarnpkg/lockfile': 1.1.0 ini: 5.0.0 jsonc-parser: 3.3.1 @@ -7890,10 +7890,10 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@schematics/angular@19.2.1': + '@schematics/angular@19.2.4': dependencies: - '@angular-devkit/core': 19.2.1 - '@angular-devkit/schematics': 19.2.1 + '@angular-devkit/core': 19.2.4 + '@angular-devkit/schematics': 19.2.4 jsonc-parser: 3.3.1 transitivePeerDependencies: - chokidar From f95220493657f195477785a09d9d3d1b7e28477a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 12:45:02 +0400 Subject: [PATCH 07/23] chore: update dependency lint-staged to v15.5.0 (#2321) --- package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 40ee1a0dd..20c82ff1f 100644 --- a/package.json +++ b/package.json @@ -85,7 +85,7 @@ "json-schema-to-typescript": "15.0.4", "json-schema-traverse": "1.0.0", "jsonc-eslint-parser": "^2.1.0", - "lint-staged": "15.4.3", + "lint-staged": "15.5.0", "ncp": "2.0.0", "nx": "0.0.0-pr-30418-4f79396", "picocolors": "1.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f07881afb..74cfb2698 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -130,8 +130,8 @@ importers: specifier: ^2.1.0 version: 2.4.0 lint-staged: - specifier: 15.4.3 - version: 15.4.3 + specifier: 15.5.0 + version: 15.5.0 ncp: specifier: 2.0.0 version: 2.0.0 @@ -4264,8 +4264,8 @@ packages: resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lint-staged@15.4.3: - resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==} + lint-staged@15.5.0: + resolution: {integrity: sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==} engines: {node: '>=18.12.0'} hasBin: true @@ -10696,7 +10696,7 @@ snapshots: lines-and-columns@2.0.3: {} - lint-staged@15.4.3: + lint-staged@15.5.0: dependencies: chalk: 5.4.1 commander: 13.1.0 From eb6d4b564a469b1ee73d647e8ee9311448781c56 Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 22 Mar 2025 18:46:59 +1000 Subject: [PATCH 08/23] feat(template-parser): visit @let child nodes (#2312) --- packages/template-parser/src/index.ts | 1 + packages/template-parser/tests/index.test.ts | 948 +++++++++++++++++++ 2 files changed, 949 insertions(+) diff --git a/packages/template-parser/src/index.ts b/packages/template-parser/src/index.ts index d7bd581a0..99a45513e 100644 --- a/packages/template-parser/src/index.ts +++ b/packages/template-parser/src/index.ts @@ -71,6 +71,7 @@ const KEYS: VisitorKeys = { ForLoopBlock: ['children', 'empty', 'expression', 'trackBy'], ForLoopBlockEmpty: ['children'], Content: ['children'], + LetDeclaration$1: ['value'], }; function fallbackKeysFilter(this: Node, key: string) { diff --git a/packages/template-parser/tests/index.test.ts b/packages/template-parser/tests/index.test.ts index e6eff7504..8a59f0e7c 100644 --- a/packages/template-parser/tests/index.test.ts +++ b/packages/template-parser/tests/index.test.ts @@ -10445,6 +10445,954 @@ describe('parseForESLint()', () => { }); }); + describe('@let', () => { + it('should support @let', () => { + expect( + parseForESLint( + ` + @let a = 1; + @let b = a + 1; + @let c = foo(); + `, + { filePath: './foo.html' }, + ).ast, + ).toMatchInlineSnapshot(` + Object { + "comments": Array [], + "loc": Object { + "end": Object { + "column": 6, + "line": 5, + }, + "start": Object { + "column": 10, + "line": 2, + }, + }, + "range": Array [ + 11, + 81, + ], + "templateNodes": Array [ + Text$3 { + "loc": Object { + "end": Object { + "column": 10, + "line": 2, + }, + "start": Object { + "column": 10, + "line": 2, + }, + }, + "sourceSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 11, + }, + "fullStart": ParseLocation { + "col": 0, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 0, + "offset": 0, + }, + "start": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 11, + }, + }, + "type": "Text$3", + "value": " + ", + }, + LetDeclaration$1 { + "loc": Object { + "end": Object { + "column": 20, + "line": 2, + }, + "start": Object { + "column": 10, + "line": 2, + }, + }, + "name": "a", + "nameSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 16, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 17, + }, + "fullStart": ParseLocation { + "col": 15, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 16, + }, + "start": ParseLocation { + "col": 15, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 16, + }, + }, + "sourceSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 20, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 21, + }, + "fullStart": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 11, + }, + "start": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 11, + }, + }, + "type": "LetDeclaration$1", + "value": ASTWithSource { + "ast": LiteralPrimitive { + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 21, + "start": 20, + }, + "span": ParseSpan { + "end": 1, + "start": 0, + }, + "type": "LiteralPrimitive", + "value": 1, + }, + "errors": Array [], + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "location": "./foo.html@1:19", + "source": "1", + "sourceSpan": AbsoluteSourceSpan { + "end": 21, + "start": 20, + }, + "span": ParseSpan { + "end": 1, + "start": 0, + }, + "type": "ASTWithSource", + }, + "valueSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 20, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 21, + }, + "fullStart": ParseLocation { + "col": 19, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 20, + }, + "start": ParseLocation { + "col": 19, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 20, + }, + }, + }, + Text$3 { + "loc": Object { + "end": Object { + "column": 10, + "line": 3, + }, + "start": Object { + "column": 10, + "line": 3, + }, + }, + "sourceSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 33, + }, + "fullStart": ParseLocation { + "col": 21, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 1, + "offset": 22, + }, + "start": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 33, + }, + }, + "type": "Text$3", + "value": " + ", + }, + LetDeclaration$1 { + "loc": Object { + "end": Object { + "column": 24, + "line": 3, + }, + "start": Object { + "column": 10, + "line": 3, + }, + }, + "name": "b", + "nameSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 16, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 39, + }, + "fullStart": ParseLocation { + "col": 15, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 38, + }, + "start": ParseLocation { + "col": 15, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 38, + }, + }, + "sourceSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 24, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 47, + }, + "fullStart": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 33, + }, + "start": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 33, + }, + }, + "type": "LetDeclaration$1", + "value": ASTWithSource { + "ast": Binary { + "left": PropertyRead { + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "name": "a", + "nameSpan": AbsoluteSourceSpan { + "end": 43, + "start": 42, + }, + "receiver": ImplicitReceiver { + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 42, + "start": 42, + }, + "span": ParseSpan { + "end": 0, + "start": 0, + }, + "type": "ImplicitReceiver", + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 43, + "start": 42, + }, + "span": ParseSpan { + "end": 1, + "start": 0, + }, + "type": "PropertyRead", + }, + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "operation": "+", + "right": LiteralPrimitive { + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 47, + "start": 46, + }, + "span": ParseSpan { + "end": 5, + "start": 4, + }, + "type": "LiteralPrimitive", + "value": 1, + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 47, + "start": 42, + }, + "span": ParseSpan { + "end": 5, + "start": 0, + }, + "type": "Binary", + }, + "errors": Array [], + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "location": "./foo.html@2:19", + "source": "a + 1", + "sourceSpan": AbsoluteSourceSpan { + "end": 47, + "start": 42, + }, + "span": ParseSpan { + "end": 5, + "start": 0, + }, + "type": "ASTWithSource", + }, + "valueSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 24, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 47, + }, + "fullStart": ParseLocation { + "col": 19, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 42, + }, + "start": ParseLocation { + "col": 19, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 42, + }, + }, + }, + Text$3 { + "loc": Object { + "end": Object { + "column": 10, + "line": 4, + }, + "start": Object { + "column": 10, + "line": 4, + }, + }, + "sourceSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 59, + }, + "fullStart": ParseLocation { + "col": 25, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 2, + "offset": 48, + }, + "start": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 59, + }, + }, + "type": "Text$3", + "value": " + ", + }, + LetDeclaration$1 { + "loc": Object { + "end": Object { + "column": 24, + "line": 4, + }, + "start": Object { + "column": 10, + "line": 4, + }, + }, + "name": "c", + "nameSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 16, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 65, + }, + "fullStart": ParseLocation { + "col": 15, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 64, + }, + "start": ParseLocation { + "col": 15, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 64, + }, + }, + "sourceSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 24, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 73, + }, + "fullStart": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 59, + }, + "start": ParseLocation { + "col": 10, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 59, + }, + }, + "type": "LetDeclaration$1", + "value": ASTWithSource { + "ast": Call { + "args": Array [], + "argumentSpan": AbsoluteSourceSpan { + "end": 72, + "start": 72, + }, + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "receiver": PropertyRead { + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "name": "foo", + "nameSpan": AbsoluteSourceSpan { + "end": 71, + "start": 68, + }, + "receiver": ImplicitReceiver { + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 68, + "start": 68, + }, + "span": ParseSpan { + "end": 0, + "start": 0, + }, + "type": "ImplicitReceiver", + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 71, + "start": 68, + }, + "span": ParseSpan { + "end": 3, + "start": 0, + }, + "type": "PropertyRead", + }, + "sourceSpan": AbsoluteSourceSpan { + "end": 73, + "start": 68, + }, + "span": ParseSpan { + "end": 5, + "start": 0, + }, + "type": "Call", + }, + "errors": Array [], + "loc": Object { + "end": Object { + "column": undefined, + "line": NaN, + }, + "start": Object { + "column": undefined, + "line": NaN, + }, + }, + "location": "./foo.html@3:19", + "source": "foo()", + "sourceSpan": AbsoluteSourceSpan { + "end": 73, + "start": 68, + }, + "span": ParseSpan { + "end": 5, + "start": 0, + }, + "type": "ASTWithSource", + }, + "valueSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 24, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 73, + }, + "fullStart": ParseLocation { + "col": 19, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 68, + }, + "start": ParseLocation { + "col": 19, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 68, + }, + }, + }, + Text$3 { + "loc": Object { + "end": Object { + "column": 6, + "line": 5, + }, + "start": Object { + "column": 6, + "line": 5, + }, + }, + "sourceSpan": ParseSourceSpan { + "details": null, + "end": ParseLocation { + "col": 6, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 4, + "offset": 81, + }, + "fullStart": ParseLocation { + "col": 25, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 3, + "offset": 74, + }, + "start": ParseLocation { + "col": 6, + "file": ParseSourceFile { + "content": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + "url": "./foo.html", + }, + "line": 4, + "offset": 81, + }, + }, + "type": "Text$3", + "value": " + ", + }, + ], + "tokens": Array [], + "type": "Program", + "value": " + @let a = 1; + @let b = a + 1; + @let c = foo(); + ", + } + `); + }); + }); + describe('@for', () => { it('should support the different variants of @for', () => { expect( From 837382d1c76d5ba8a87fbbcba04b1241aeaca90c Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 22 Mar 2025 18:49:20 +1000 Subject: [PATCH 09/23] chore: improve rule docs generation (#2314) --- .../docs/rules/attributes-order.md | 90 ++++++-- .../docs/rules/component-selector.md | 16 +- .../docs/rules/consistent-component-styles.md | 32 +-- .../docs/rules/directive-selector.md | 10 +- .../docs/rules/no-input-prefix.md | 131 +++++++++++- .../docs/rules/no-input-rename.md | 127 +++++++++++ .../docs/rules/no-output-native.md | 120 +++++++++++ .../docs/rules/no-output-on-prefix.md | 120 +++++++++++ .../docs/rules/no-output-rename.md | 122 +++++++++++ .../eslint-plugin/docs/rules/pipe-prefix.md | 2 +- .../docs/rules/require-localize-metadata.md | 18 +- .../tests/rules/no-input-prefix/cases.ts | 8 +- .../tests/rules/no-input-rename/cases.ts | 8 +- .../tests/rules/no-output-native/cases.ts | 8 +- .../tests/rules/no-output-on-prefix/cases.ts | 8 +- .../tests/rules/no-output-rename/cases.ts | 8 +- ...onvert-annotated-source-to-failure-case.ts | 8 +- tools/scripts/generate-rule-docs.ts | 197 +++++------------- 18 files changed, 808 insertions(+), 225 deletions(-) diff --git a/packages/eslint-plugin-template/docs/rules/attributes-order.md b/packages/eslint-plugin-template/docs/rules/attributes-order.md index d3ce4485a..6cddee498 100644 --- a/packages/eslint-plugin-template/docs/rules/attributes-order.md +++ b/packages/eslint-plugin-template/docs/rules/attributes-order.md @@ -112,13 +112,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -283,7 +286,14 @@ interface Options { "error", { "alphabetical": false, - "order": [] + "order": [ + "TEMPLATE_REFERENCE", + "ATTRIBUTE_BINDING", + "STRUCTURAL_DIRECTIVE", + "INPUT_BINDING", + "OUTPUT_BINDING", + "TWO_WAY_BINDING" + ] } ] } @@ -314,7 +324,14 @@ interface Options { "error", { "alphabetical": true, - "order": [] + "order": [ + "TEMPLATE_REFERENCE", + "STRUCTURAL_DIRECTIVE", + "ATTRIBUTE_BINDING", + "INPUT_BINDING", + "OUTPUT_BINDING", + "TWO_WAY_BINDING" + ] } ] } @@ -484,13 +501,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -511,13 +531,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -538,13 +561,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -565,13 +591,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -594,13 +623,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -621,13 +653,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -652,13 +687,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -688,7 +726,14 @@ interface Options { "error", { "alphabetical": true, - "order": [] + "order": [ + "ATTRIBUTE_BINDING", + "TEMPLATE_REFERENCE", + "INPUT_BINDING", + "OUTPUT_BINDING", + "TWO_WAY_BINDING", + "STRUCTURAL_DIRECTIVE" + ] } ] } @@ -710,13 +755,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } diff --git a/packages/eslint-plugin/docs/rules/component-selector.md b/packages/eslint-plugin/docs/rules/component-selector.md index 7ebf1ebd5..5f28effba 100644 --- a/packages/eslint-plugin/docs/rules/component-selector.md +++ b/packages/eslint-plugin/docs/rules/component-selector.md @@ -964,7 +964,7 @@ class Test {} ```ts @Component({ - selector: \`[appFooBar]\` + selector: `[appFooBar]` }) class Test {} ``` @@ -1004,9 +1004,9 @@ class Test {} ```ts @Component({ - selector: \` + selector: ` [appFooBar] - \` + ` }) class Test {} ``` @@ -1046,10 +1046,10 @@ class Test {} ```ts @Component({ - selector: \` + selector: ` [appFooBar], [appBarFoo] - \` + ` }) class Test {} ``` @@ -1089,7 +1089,7 @@ class Test {} ```ts @Component({ - selector: \`button[appFooBar]\` + selector: `button[appFooBar]` }) class Test {} ``` @@ -1127,7 +1127,7 @@ class Test {} ```ts @Component({ - selector: \`app-foo-bar\`, + selector: `app-foo-bar`, encapsulation: ViewEncapsulation.ShadowDom }) class Test {} @@ -1166,7 +1166,7 @@ class Test {} ```ts @Component({ - selector: \`app-foo-bar\`, + selector: `app-foo-bar`, encapsulation: ViewEncapsulation.ShadowDom }) class Test {} diff --git a/packages/eslint-plugin/docs/rules/consistent-component-styles.md b/packages/eslint-plugin/docs/rules/consistent-component-styles.md index 42aa88b68..f8a3ff0f3 100644 --- a/packages/eslint-plugin/docs/rules/consistent-component-styles.md +++ b/packages/eslint-plugin/docs/rules/consistent-component-styles.md @@ -945,9 +945,9 @@ class Test {} ```ts @Component({ - styles: \` + styles: ` :host { display: block; } - \`, + `, }) class Test {} ``` @@ -980,9 +980,9 @@ class Test {} selector: 'my-test', standalone: true, imports: [CommonModule], - styles: \` + styles: ` :host { display: block; } - \`, + `, providers: [FooService] }) class Test {} @@ -1015,7 +1015,7 @@ class Test {} @Component({ styles: [ ':host { display: block; }', - \`.foo { color: red; }\` + `.foo { color: red; }` ], }) class Test {} @@ -1046,7 +1046,7 @@ class Test {} ```ts @Component({ - styleUrl: \`./test.component.css\`, + styleUrl: `./test.component.css`, }) class Test {} ``` @@ -1078,7 +1078,7 @@ class Test {} @Component({ styleUrls: [ '../shared.css', - \`./test.component.css\` + `./test.component.css` ], }) class Test {} @@ -1114,7 +1114,7 @@ class Test {} imports: [CommonModule], styleUrls: [ '../shared.css', - \`./test.component.css\` + `./test.component.css` ], providers: [FooService] }) @@ -1177,9 +1177,9 @@ class Test {} ```ts @Component({ styles: [ - \` + ` :host { display: block; } - \` + ` ], }) class Test {} @@ -1214,9 +1214,9 @@ class Test {} standalone: true, imports: [CommonModule], styles: [ - \` + ` :host { display: block; } - \` + ` ], providers: [FooService] }) @@ -1250,7 +1250,7 @@ class Test {} @Component({ styles: [ ':host { display: block; }', - \`.foo { color: red; }\` + `.foo { color: red; }` ], }) class Test {} @@ -1281,7 +1281,7 @@ class Test {} ```ts @Component({ - styleUrls: [\`./test.component.css\`], + styleUrls: [`./test.component.css`], }) class Test {} ``` @@ -1313,7 +1313,7 @@ class Test {} @Component({ styleUrls: [ '../shared.css', - \`./test.component.css\` + `./test.component.css` ], }) class Test {} @@ -1349,7 +1349,7 @@ class Test {} imports: [CommonModule], styleUrls: [ '../shared.css', - \`./test.component.css\` + `./test.component.css` ], providers: [FooService] }) diff --git a/packages/eslint-plugin/docs/rules/directive-selector.md b/packages/eslint-plugin/docs/rules/directive-selector.md index b842d6ead..f86e6dd86 100644 --- a/packages/eslint-plugin/docs/rules/directive-selector.md +++ b/packages/eslint-plugin/docs/rules/directive-selector.md @@ -630,7 +630,7 @@ class Test {} ```ts @Directive({ - selector: \`[app-foo-bar]\` + selector: `[app-foo-bar]` }) class Test {} ``` @@ -780,9 +780,9 @@ class Test {} ```ts @Directive({ - selector: \` + selector: ` [app-foo-bar] - \` + ` }) class Test {} ``` @@ -820,10 +820,10 @@ class Test {} ```ts @Directive({ - selector: \` + selector: ` [app-foo-bar], [app-bar-foo] - \` + ` }) class Test {} ``` diff --git a/packages/eslint-plugin/docs/rules/no-input-prefix.md b/packages/eslint-plugin/docs/rules/no-input-prefix.md index 2c2491b98..bcebafad3 100644 --- a/packages/eslint-plugin/docs/rules/no-input-prefix.md +++ b/packages/eslint-plugin/docs/rules/no-input-prefix.md @@ -436,6 +436,41 @@ class Test { #### Custom Config +```json +{ + "rules": { + "@angular-eslint/no-input-prefix": [ + "error", + { + "prefixes": [ + "on" + ] + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +@Directive() +class Test { + @Input(`onSetter`) set setter() {} + ~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Custom Config + ```json { "rules": { @@ -602,7 +637,7 @@ class Test {} ```ts @Page({ - inputs: ['on', onChange, \`onLine\`, 'on: on2', 'offline: on', ...onCheck, onInput()], + inputs: ['on', onChange, `onLine`, 'on: on2', 'offline: on', ...onCheck, onInput()], }) class Test {} ``` @@ -739,7 +774,7 @@ class Test { ```ts @Directive() class Test { - @Input(\`one\`) ontype = new EventEmitter<{ bar: string, on: boolean }>(); + @Input(`one`) ontype = new EventEmitter<{ bar: string, on: boolean }>(); } ``` @@ -773,7 +808,7 @@ class Test { ```ts @Directive() class Test { - @Input({ alias: \`one\` }) ontype = new EventEmitter<{ bar: string, on: boolean }>(); + @Input({ alias: `one` }) ontype = new EventEmitter<{ bar: string, on: boolean }>(); } ``` @@ -1006,6 +1041,96 @@ class Test { #### ✅ Valid Code +```ts +@Component({ + selector: 'foo', + 'inputs': [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-input-prefix": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Directive({ + selector: 'foo', + ['inputs']: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-input-prefix": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + selector: 'foo', + [`inputs`]: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-input-prefix": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```ts @Directive({ selector: 'foo', diff --git a/packages/eslint-plugin/docs/rules/no-input-rename.md b/packages/eslint-plugin/docs/rules/no-input-rename.md index 70135dded..8d340a7a1 100644 --- a/packages/eslint-plugin/docs/rules/no-input-rename.md +++ b/packages/eslint-plugin/docs/rules/no-input-rename.md @@ -390,6 +390,43 @@ class Test {
+#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/no-input-rename": [ + "error", + { + "allowedNames": [ + "allowedName" + ] + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```ts +@Component() +class Test { + @Input(`devicechange`) set setter(setter: string) {} + ~~~~~~~~~~~~~~ + + @Input('allowedName') test: string; +} +``` + +
+ +--- + +
+ #### Default Config ```json @@ -1887,6 +1924,96 @@ class Test { #### ✅ Valid Code +```ts +@Directive({ + 'selector': 'foo', + 'inputs': [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-input-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + 'selector': 'foo', + ['inputs']: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-input-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Directive({ + 'selector': 'foo', + [`inputs`]: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-input-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```ts @Component({ selector: '[foo], test', diff --git a/packages/eslint-plugin/docs/rules/no-output-native.md b/packages/eslint-plugin/docs/rules/no-output-native.md index ac9f2aa4e..b91a84e4b 100644 --- a/packages/eslint-plugin/docs/rules/no-output-native.md +++ b/packages/eslint-plugin/docs/rules/no-output-native.md @@ -446,6 +446,36 @@ class Test { #### ❌ Invalid Code +```ts +@Directive() +class Test { + @Output(`devicechange`) get getter() {} + ~~~~~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-native": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + ```ts @Injectable() class Test { @@ -1009,6 +1039,96 @@ class Test { #### ✅ Valid Code +```ts +@Component({ + selector: 'foo', + 'outputs': [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-native": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Directive({ + selector: 'foo', + ['outputs']: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-native": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + 'selector': 'foo', + [`outputs`]: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-native": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```ts @Directive({ selector: 'foo', diff --git a/packages/eslint-plugin/docs/rules/no-output-on-prefix.md b/packages/eslint-plugin/docs/rules/no-output-on-prefix.md index 8e71b4a56..217e39e01 100644 --- a/packages/eslint-plugin/docs/rules/no-output-on-prefix.md +++ b/packages/eslint-plugin/docs/rules/no-output-on-prefix.md @@ -445,6 +445,36 @@ class Test { #### ❌ Invalid Code +```ts +@Directive() +class Test { + @Output(`onGetter`) get getter() {} + ~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-on-prefix": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + ```ts @Injectable() class Test { @@ -1008,6 +1038,96 @@ class Test { #### ✅ Valid Code +```ts +@Component({ + selector: 'foo', + 'outputs': [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-on-prefix": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Directive({ + selector: 'foo', + ['outputs']: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-on-prefix": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + 'selector': 'foo', + [`outputs`]: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-on-prefix": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```ts @Directive({ selector: 'foo', diff --git a/packages/eslint-plugin/docs/rules/no-output-rename.md b/packages/eslint-plugin/docs/rules/no-output-rename.md index 10eb1fce8..47de7b74e 100644 --- a/packages/eslint-plugin/docs/rules/no-output-rename.md +++ b/packages/eslint-plugin/docs/rules/no-output-rename.md @@ -298,6 +298,38 @@ class Test { #### ❌ Invalid Code +```ts +@Component() +class Test { + @Output(`devicechange`) get getter() {} + ~~~~~~~~~~~~~~ + + @Output() test: string; +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-rename": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + ```ts @Directive({ selector: 'foo' @@ -1102,6 +1134,96 @@ class Test { #### ✅ Valid Code +```ts +@Directive({ + 'selector': 'foo', + 'outputs': [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Component({ + 'selector': 'foo', + ['outputs']: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```ts +@Directive({ + 'selector': 'foo', + [`outputs`]: [`test: foo`] +}) +class Test {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/no-output-rename": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```ts @Component({ selector: '[foo], test', diff --git a/packages/eslint-plugin/docs/rules/pipe-prefix.md b/packages/eslint-plugin/docs/rules/pipe-prefix.md index 29612a97f..a96039f9a 100644 --- a/packages/eslint-plugin/docs/rules/pipe-prefix.md +++ b/packages/eslint-plugin/docs/rules/pipe-prefix.md @@ -357,7 +357,7 @@ class Test {} ```ts @Pipe({ - name: \`ngBarFoo\` + name: `ngBarFoo` }) class Test {} ``` diff --git a/packages/eslint-plugin/docs/rules/require-localize-metadata.md b/packages/eslint-plugin/docs/rules/require-localize-metadata.md index dc2f0ae8f..c426fa3c7 100644 --- a/packages/eslint-plugin/docs/rules/require-localize-metadata.md +++ b/packages/eslint-plugin/docs/rules/require-localize-metadata.md @@ -518,8 +518,8 @@ const localizedText = $localize`:site header|@@custom_id:Hello i18n!`; #### ✅ Valid Code ```ts -let localizedText = $localize\`:An introduction header for this sample:Hello i18n!\`; -localizedText = $localize\`:An introduction header for this sample modified:Hello i18n modified!\`; +let localizedText = $localize`:An introduction header for this sample:Hello i18n!`; +localizedText = $localize`:An introduction header for this sample modified:Hello i18n modified!`; ```
@@ -549,9 +549,9 @@ localizedText = $localize\`:An introduction header for this sample modified:Hell ```ts const localizedTexts = { - helloI18n: $localize\`:An introduction header for this sample:Hello i18n!\` + helloI18n: $localize`:An introduction header for this sample:Hello i18n!` }; -localizedTexts.helloI18n = $localize\`:An introduction header for this sample modified:Hello i18n modified!\`; +localizedTexts.helloI18n = $localize`:An introduction header for this sample modified:Hello i18n modified!`; ```
@@ -580,7 +580,7 @@ localizedTexts.helloI18n = $localize\`:An introduction header for this sample mo #### ✅ Valid Code ```ts -return $localize\`:An introduction header for this sample:Hello i18n!\`; +return $localize`:An introduction header for this sample:Hello i18n!`; ```
@@ -609,7 +609,7 @@ return $localize\`:An introduction header for this sample:Hello i18n!\`; #### ✅ Valid Code ```ts -someFunction($localize\`:An introduction header for this sample:Hello i18n!\`); +someFunction($localize`:An introduction header for this sample:Hello i18n!`); ```
@@ -638,7 +638,7 @@ someFunction($localize\`:An introduction header for this sample:Hello i18n!\`); #### ✅ Valid Code ```ts -const localizedText = \`Hello i18n!\`; +const localizedText = `Hello i18n!`; ```
@@ -667,7 +667,7 @@ const localizedText = \`Hello i18n!\`; #### ✅ Valid Code ```ts -const localizedText = $localize\`:site header|:Hello i18n!\`; +const localizedText = $localize`:site header|:Hello i18n!`; ```
@@ -697,7 +697,7 @@ const localizedText = $localize\`:site header|:Hello i18n!\`; #### ✅ Valid Code ```ts -const localizedText = $localize\`:site header|An introduction header for this sample:Hello i18n!\`; +const localizedText = $localize`:site header|An introduction header for this sample:Hello i18n!`; ``` diff --git a/packages/eslint-plugin/tests/rules/no-input-prefix/cases.ts b/packages/eslint-plugin/tests/rules/no-input-prefix/cases.ts index 96d8ea996..4d7d87fc6 100644 --- a/packages/eslint-plugin/tests/rules/no-input-prefix/cases.ts +++ b/packages/eslint-plugin/tests/rules/no-input-prefix/cases.ts @@ -128,21 +128,21 @@ export const valid: readonly (string | ValidTestCase)[] = [ ` @Component({ selector: 'foo', - 'inputs': [\`test: ${'foo'}\`] + 'inputs': [\`test: foo\`] }) class Test {} `, ` @Directive({ selector: 'foo', - ['inputs']: [\`test: ${'foo'}\`] + ['inputs']: [\`test: foo\`] }) class Test {} `, ` @Component({ selector: 'foo', - [\`inputs\`]: [\`test: ${'foo'}\`] + [\`inputs\`]: [\`test: foo\`] }) class Test {} `, @@ -319,7 +319,7 @@ export const invalid: readonly InvalidTestCase[] = [ annotatedSource: ` @Directive() class Test { - @Input(\`${'onSetter'}\`) set setter() {} + @Input(\`onSetter\`) set setter() {} ~~~~~~~~~~ } `, diff --git a/packages/eslint-plugin/tests/rules/no-input-rename/cases.ts b/packages/eslint-plugin/tests/rules/no-input-rename/cases.ts index 2d0ea8eff..b4b4f5414 100644 --- a/packages/eslint-plugin/tests/rules/no-input-rename/cases.ts +++ b/packages/eslint-plugin/tests/rules/no-input-rename/cases.ts @@ -192,21 +192,21 @@ export const valid: readonly (string | ValidTestCase)[] = [ ` @Directive({ 'selector': 'foo', - 'inputs': [\`test: ${'foo'}\`] + 'inputs': [\`test: foo\`] }) class Test {} `, ` @Component({ 'selector': 'foo', - ['inputs']: [\`test: ${'foo'}\`] + ['inputs']: [\`test: foo\`] }) class Test {} `, ` @Directive({ 'selector': 'foo', - [\`inputs\`]: [\`test: ${'foo'}\`] + [\`inputs\`]: [\`test: foo\`] }) class Test {} `, @@ -624,7 +624,7 @@ export const invalid: readonly InvalidTestCase[] = [ annotatedSource: ` @Component() class Test { - @Input(\`${'devicechange'}\`) set setter(setter: string) {} + @Input(\`devicechange\`) set setter(setter: string) {} ~~~~~~~~~~~~~~ @Input('allowedName') test: string; diff --git a/packages/eslint-plugin/tests/rules/no-output-native/cases.ts b/packages/eslint-plugin/tests/rules/no-output-native/cases.ts index 083d90f5b..b59c28802 100644 --- a/packages/eslint-plugin/tests/rules/no-output-native/cases.ts +++ b/packages/eslint-plugin/tests/rules/no-output-native/cases.ts @@ -118,21 +118,21 @@ export const valid: readonly (string | ValidTestCase)[] = [ ` @Component({ selector: 'foo', - 'outputs': [\`test: ${'foo'}\`] + 'outputs': [\`test: foo\`] }) class Test {} `, ` @Directive({ selector: 'foo', - ['outputs']: [\`test: ${'foo'}\`] + ['outputs']: [\`test: foo\`] }) class Test {} `, ` @Component({ 'selector': 'foo', - [\`outputs\`]: [\`test: ${'foo'}\`] + [\`outputs\`]: [\`test: foo\`] }) class Test {} `, @@ -312,7 +312,7 @@ export const invalid: readonly InvalidTestCase[] = [ annotatedSource: ` @Directive() class Test { - @Output(\`${'devicechange'}\`) get getter() {} + @Output(\`devicechange\`) get getter() {} ~~~~~~~~~~~~~~ } `, diff --git a/packages/eslint-plugin/tests/rules/no-output-on-prefix/cases.ts b/packages/eslint-plugin/tests/rules/no-output-on-prefix/cases.ts index ba68dbb4c..13f4b6300 100644 --- a/packages/eslint-plugin/tests/rules/no-output-on-prefix/cases.ts +++ b/packages/eslint-plugin/tests/rules/no-output-on-prefix/cases.ts @@ -117,21 +117,21 @@ export const valid: readonly (string | ValidTestCase)[] = [ ` @Component({ selector: 'foo', - 'outputs': [\`test: ${'foo'}\`] + 'outputs': [\`test: foo\`] }) class Test {} `, ` @Directive({ selector: 'foo', - ['outputs']: [\`test: ${'foo'}\`] + ['outputs']: [\`test: foo\`] }) class Test {} `, ` @Component({ 'selector': 'foo', - [\`outputs\`]: [\`test: ${'foo'}\`] + [\`outputs\`]: [\`test: foo\`] }) class Test {} `, @@ -309,7 +309,7 @@ export const invalid: readonly InvalidTestCase[] = [ annotatedSource: ` @Directive() class Test { - @Output(\`${'onGetter'}\`) get getter() {} + @Output(\`onGetter\`) get getter() {} ~~~~~~~~~~ } `, diff --git a/packages/eslint-plugin/tests/rules/no-output-rename/cases.ts b/packages/eslint-plugin/tests/rules/no-output-rename/cases.ts index 6a913e634..5116e8e0c 100644 --- a/packages/eslint-plugin/tests/rules/no-output-rename/cases.ts +++ b/packages/eslint-plugin/tests/rules/no-output-rename/cases.ts @@ -115,21 +115,21 @@ export const valid: readonly (string | ValidTestCase)[] = [ ` @Directive({ 'selector': 'foo', - 'outputs': [\`test: ${'foo'}\`] + 'outputs': [\`test: foo\`] }) class Test {} `, ` @Component({ 'selector': 'foo', - ['outputs']: [\`test: ${'foo'}\`] + ['outputs']: [\`test: foo\`] }) class Test {} `, ` @Directive({ 'selector': 'foo', - [\`outputs\`]: [\`test: ${'foo'}\`] + [\`outputs\`]: [\`test: foo\`] }) class Test {} `, @@ -391,7 +391,7 @@ export const invalid: readonly InvalidTestCase[] = [ annotatedSource: ` @Component() class Test { - @Output(\`${'devicechange'}\`) get getter() {} + @Output(\`devicechange\`) get getter() {} ~~~~~~~~~~~~~~ @Output() test: string; diff --git a/packages/test-utils/src/convert-annotated-source-to-failure-case.ts b/packages/test-utils/src/convert-annotated-source-to-failure-case.ts index 57ddb2af9..46fb223c1 100644 --- a/packages/test-utils/src/convert-annotated-source-to-failure-case.ts +++ b/packages/test-utils/src/convert-annotated-source-to-failure-case.ts @@ -147,7 +147,13 @@ export function convertAnnotatedSourceToFailureCase< return { name: errorOptions.description, - code: parsedSource, + code: + // If the rule docs are being generated by importing the test cases, + // then use the original annotated source because the docs need the + // annotations and the tests are not actually being run. + process.env.GENERATING_RULE_DOCS === '1' + ? errorOptions.annotatedSource + : parsedSource, filename: errorOptions.filename, options: errorOptions.options ?? ([] as any), errors, diff --git a/tools/scripts/generate-rule-docs.ts b/tools/scripts/generate-rule-docs.ts index a49b0ca2d..56d2b1162 100644 --- a/tools/scripts/generate-rule-docs.ts +++ b/tools/scripts/generate-rule-docs.ts @@ -1,13 +1,11 @@ +import type { + InvalidTestCase, + ValidTestCase, +} from '@typescript-eslint/rule-tester'; import type { TSESLint } from '@typescript-eslint/utils'; import { compile } from 'json-schema-to-typescript'; import traverse from 'json-schema-traverse'; -import { - mkdirSync, - readdirSync, - readFileSync, - rmSync, - writeFileSync, -} from 'node:fs'; +import { mkdirSync, readdirSync, rmSync, writeFileSync } from 'node:fs'; import { join, relative } from 'node:path'; import { format, resolveConfig } from 'prettier'; import ts from 'typescript'; @@ -269,12 +267,9 @@ async function generateAllRuleData(): Promise { // For rule sources we just import/execute the rule source file for (const ruleFile of ruleFiles) { const ruleFilePath = join(rulesDir, ruleFile.replace('.ts', '')); - const { - default: ruleConfig, - RULE_NAME, - RULE_DOCS_EXTENSION, - // eslint-disable-next-line @typescript-eslint/no-var-requires - } = require(ruleFilePath); + const { default: ruleConfig, RULE_NAME, RULE_DOCS_EXTENSION } = require( + ruleFilePath, + ); ruleData[RULE_NAME] = { ruleConfig, ruleFilePath: ruleFilePath + '.ts', @@ -283,135 +278,55 @@ async function generateAllRuleData(): Promise { } /** - * For tests we want to preserve the annotated sources, so we do NOT want - * to execute the file and instead need to parse it using the ts compiler. + * For tests we want to preserve the annotated sources. We can preserve that while + * importing the test source by setting an environment variable. This allows parameterized + * tests to be used, which we wouldn't be able to use if we just parsed the TypeScript. */ - for (const testDir of testDirs) { - const testDirPath = join(testDirsDir, testDir); - const casesFilePath = join(testDirPath, 'cases.ts'); - const testCasesContents = readFileSync(casesFilePath, 'utf-8'); - const casesSourceFile = ts.createSourceFile( - casesFilePath, - testCasesContents, - ts.ScriptTarget.Latest, - true, - ); - - const extractedValid: ExtractedTestCase[] = []; - const extractedInvalid: ExtractedTestCase[] = []; - - const extractNodes = (node: ts.Node) => { - if ( - ts.isVariableDeclaration(node) && - node.name.getText() === 'valid' && - node.initializer && - ts.isArrayLiteralExpression(node.initializer) - ) { - node.initializer.elements.forEach((el) => { - const newExtractedTestCase: ExtractedTestCase = { - code: '', - }; - - if (ts.isStringLiteralLike(el)) { - newExtractedTestCase.code = el.text; - } - - if (ts.isObjectLiteralExpression(el)) { - el.properties.forEach((prop) => { - if ( - ts.isPropertyAssignment(prop) && - prop.name.getText() === 'code' - ) { - if (ts.isNoSubstitutionTemplateLiteral(prop.initializer)) { - newExtractedTestCase.code = - prop.initializer.rawText || prop.initializer.text; - } - if (ts.isTemplateExpression(prop.initializer)) { - newExtractedTestCase.code = prop.initializer.getText(); - } - if (ts.isStringLiteral(prop.initializer)) { - newExtractedTestCase.code = prop.initializer.text; - } - } - - if ( - ts.isPropertyAssignment(prop) && - prop.name.getText() === 'options' && - ts.isArrayLiteralExpression(prop.initializer) - ) { - newExtractedTestCase.options = - convertArrayLiteralExpressionToCode(prop.initializer); - } - if ( - ts.isPropertyAssignment(prop) && - prop.name.getText() === 'filename' && - ts.isStringLiteral(prop.initializer) - ) { - newExtractedTestCase.filename = prop.initializer.text; - } - }); - } - - if (newExtractedTestCase.code) { - extractedValid.push(newExtractedTestCase); - } - }); - } - - if ( - ts.isVariableDeclaration(node) && - node.name.getText() === 'invalid' && - node.initializer && - ts.isArrayLiteralExpression(node.initializer) - ) { - node.initializer.elements.forEach((el) => { - if ( - ts.isCallExpression(el) && - el.expression.getText() === 'convertAnnotatedSourceToFailureCase' - ) { - const newExtractedTestCase: ExtractedTestCase = { - code: '', - }; - - const config = el.arguments[0] as ts.ObjectLiteralExpression; - config.properties.forEach((prop) => { - if ( - ts.isPropertyAssignment(prop) && - prop.name.getText() === 'annotatedSource' && - ts.isNoSubstitutionTemplateLiteral(prop.initializer) - ) { - newExtractedTestCase.code = prop.initializer.text; - } - - if ( - ts.isPropertyAssignment(prop) && - prop.name.getText() === 'options' && - ts.isArrayLiteralExpression(prop.initializer) - ) { - newExtractedTestCase.options = - convertArrayLiteralExpressionToCode(prop.initializer); - } - }); - - if (newExtractedTestCase.code) { - extractedInvalid.push(newExtractedTestCase); - } - } - }); - } - - ts.forEachChild(node, extractNodes); - }; - - // Extract valid and invalid cases as strings - extractNodes(casesSourceFile); - - ruleData[testDir] = { - ...ruleData[testDir], - testCasesFilePath: casesFilePath, - valid: extractedValid, - invalid: extractedInvalid, - }; + process.env.GENERATING_RULE_DOCS = '1'; + try { + for (const testDir of testDirs) { + const testDirPath = join(testDirsDir, testDir); + const casesFilePath = join(testDirPath, 'cases.ts'); + const { valid, invalid } = require(casesFilePath) as { + valid: (string | ValidTestCase<[]>)[]; + invalid: InvalidTestCase<'', []>[]; + }; + + const extractedValid: ExtractedTestCase[] = valid + .map((test) => + typeof test === 'string' + ? { code: test } + : { + code: test.code, + options: + test.options && test.options.length > 0 + ? [...test.options] + : undefined, + filename: test.filename, + }, + ) + .filter((test) => test.code); + + const extractedInvalid: ExtractedTestCase[] = invalid + .map((test) => ({ + code: test.code, + options: + test.options && test.options.length > 0 + ? [...test.options] + : undefined, + filename: test.filename, + })) + .filter((test) => test.code); + + ruleData[testDir] = { + ...ruleData[testDir], + testCasesFilePath: casesFilePath, + valid: extractedValid, + invalid: extractedInvalid, + }; + } + } finally { + delete process.env.GENERATING_RULE_DOCS; } return ruleData; From 0217b538640a942a63dd6493faa441ce2db689d7 Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 22 Mar 2025 18:59:14 +1000 Subject: [PATCH 10/23] feat(eslint-plugin-template): [button-has-type] add option to ignore missing type (#2326) --- .../docs/rules/button-has-type.md | 139 +++++++++++++++++- .../src/rules/button-has-type.ts | 63 ++++++-- .../tests/rules/button-has-type/cases.ts | 31 ++++ 3 files changed, 223 insertions(+), 10 deletions(-) diff --git a/packages/eslint-plugin-template/docs/rules/button-has-type.md b/packages/eslint-plugin-template/docs/rules/button-has-type.md index b62075b31..a64c80dab 100644 --- a/packages/eslint-plugin-template/docs/rules/button-has-type.md +++ b/packages/eslint-plugin-template/docs/rules/button-has-type.md @@ -23,7 +23,17 @@ Ensures that a button has a valid type specified ## Rule Options -The rule does not have any configuration options. +The rule accepts an options object with the following properties: + +```ts +interface Options { + /** + * Default: `[]` + */ + ignoreWithDirectives?: string[]; +} + +```
@@ -140,6 +150,71 @@ The rule does not have any configuration options. ~~~~~~~~~~~~~~~~~~~~~~~~ ``` +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/button-has-type": [ + "error", + { + "ignoreWithDirectives": [ + "myButton", + "uiButton" + ] + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/button-has-type": [ + "error", + { + "ignoreWithDirectives": [ + "myButton" + ] + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html + + ~~~~~~~~~~~~~~~ +``` +
@@ -407,6 +482,68 @@ The rule does not have any configuration options. ``` +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/button-has-type": [ + "error", + { + "ignoreWithDirectives": [ + "myButton" + ] + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html + +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/button-has-type": [ + "error", + { + "ignoreWithDirectives": [ + "myButton" + ] + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html + +``` +
diff --git a/packages/eslint-plugin-template/src/rules/button-has-type.ts b/packages/eslint-plugin-template/src/rules/button-has-type.ts index 922fcb8b3..c9df60dee 100644 --- a/packages/eslint-plugin-template/src/rules/button-has-type.ts +++ b/packages/eslint-plugin-template/src/rules/button-has-type.ts @@ -9,10 +9,16 @@ import { import { getTemplateParserServices } from '@angular-eslint/utils'; import { createESLintRule } from '../utils/create-eslint-rule'; -export type Options = []; +export type Options = [ + { + readonly ignoreWithDirectives?: string[]; + }, +]; export type MessageIds = 'invalidType' | 'missingType'; export const RULE_NAME = 'button-has-type'; - +const DEFAULT_OPTIONS: Options[number] = { + ignoreWithDirectives: [], +}; export const INVALID_TYPE_DATA_KEY = 'type'; interface InvalidButtonTypeInfo { @@ -31,23 +37,42 @@ export default createESLintRule({ docs: { description: 'Ensures that a button has a valid type specified', }, - schema: [], + schema: [ + { + type: 'object', + properties: { + ignoreWithDirectives: { + type: 'array', + items: { type: 'string' }, + uniqueItems: true, + default: DEFAULT_OPTIONS.ignoreWithDirectives as + | string[] + | undefined, + }, + }, + additionalProperties: false, + }, + ], messages: { missingType: 'Type for `, ``, ``, + { + code: ``, + options: [{ ignoreWithDirectives: ['myButton'] }], + }, + { + code: ``, + options: [{ ignoreWithDirectives: ['myButton'] }], + }, ]; export const invalid: readonly InvalidTestCase[] = [ @@ -61,4 +69,27 @@ export const invalid: readonly InvalidTestCase[] = [ [INVALID_TYPE_DATA_KEY]: 'whatever', }, }), + convertAnnotatedSourceToFailureCase({ + description: + 'should fail if button has no type attribute, and ignoreWithDirectives option specifies directives, but none of the directives are present', + annotatedSource: ` + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + options: [{ ignoreWithDirectives: ['myButton', 'uiButton'] }], + messageId: missingType, + }), + convertAnnotatedSourceToFailureCase({ + description: + 'should fail if button has invalid attribute type, and ignoreWithDirectives option specifies directives and element has one of them', + annotatedSource: ` + + ~~~~~~~~~~~~~~~ + `, + options: [{ ignoreWithDirectives: ['myButton'] }], + messageId: invalidType, + data: { + [INVALID_TYPE_DATA_KEY]: 'whatever', + }, + }), ]; From f24dc3319780a1d478c8fa060d5894456d0e5530 Mon Sep 17 00:00:00 2001 From: m-akinc <7282195+m-akinc@users.noreply.github.com> Date: Sat, 22 Mar 2025 04:00:24 -0500 Subject: [PATCH 11/23] fix(eslint-plugin-template): [i18n] Avoid exception in i18n rule with allowMarkupInContent=false (#2327) --- .../eslint-plugin-template/docs/rules/i18n.md | 31 +++++++++++++++++++ .../eslint-plugin-template/src/rules/i18n.ts | 2 +- .../tests/rules/i18n/cases.ts | 7 +++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin-template/docs/rules/i18n.md b/packages/eslint-plugin-template/docs/rules/i18n.md index 7ec23e91e..19b8a38e8 100644 --- a/packages/eslint-plugin-template/docs/rules/i18n.md +++ b/packages/eslint-plugin-template/docs/rules/i18n.md @@ -2308,6 +2308,37 @@ interface Options { #### ✅ Valid Code +```html +
+
+``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/i18n": [ + "error", + { + "allowMarkupInContent": false, + "checkId": false + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```html
Text to translate{{ Bound }} diff --git a/packages/eslint-plugin-template/src/rules/i18n.ts b/packages/eslint-plugin-template/src/rules/i18n.ts index e173dd293..90a5c0304 100644 --- a/packages/eslint-plugin-template/src/rules/i18n.ts +++ b/packages/eslint-plugin-template/src/rules/i18n.ts @@ -595,5 +595,5 @@ function isTagAllowed(allowedTags: ReadonlySet, node: unknown) { // `customId` could be `undefined` in case of non-`Message`. function getI18nCustomId(i18n: I18nMeta): string | undefined { - return (i18n as Message).customId; + return (i18n as Message)?.customId; } diff --git a/packages/eslint-plugin-template/tests/rules/i18n/cases.ts b/packages/eslint-plugin-template/tests/rules/i18n/cases.ts index f91ef9850..3e2aff598 100644 --- a/packages/eslint-plugin-template/tests/rules/i18n/cases.ts +++ b/packages/eslint-plugin-template/tests/rules/i18n/cases.ts @@ -250,6 +250,13 @@ export const valid: readonly (string | ValidTestCase)[] = [ `, options: [{ ignoreTags: ['ng-template'] }], }, + { + code: ` +
+
+ `, + options: [{ allowMarkupInContent: false, checkId: false }], + }, { code: `
From 1bd350badbe67825eca43ad8680a2aa0da42d54c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 13:04:51 +0400 Subject: [PATCH 12/23] chore: update dependency @mdn/browser-compat-data to v5.7.5 (#2317) --- package.json | 2 +- .../utils/src/eslint-plugin/get-native-event-names.ts | 2 +- pnpm-lock.yaml | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 20c82ff1f..6fc6184a0 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "@angular/compiler": "19.2.1", "@commitlint/cli": "19.8.0", "@commitlint/config-conventional": "19.8.0", - "@mdn/browser-compat-data": "5.7.1", + "@mdn/browser-compat-data": "5.7.5", "@nx/devkit": "0.0.0-pr-30418-4f79396", "@nx/esbuild": "0.0.0-pr-30418-4f79396", "@nx/eslint": "0.0.0-pr-30418-4f79396", diff --git a/packages/utils/src/eslint-plugin/get-native-event-names.ts b/packages/utils/src/eslint-plugin/get-native-event-names.ts index d21f3c8c0..6cdd45384 100644 --- a/packages/utils/src/eslint-plugin/get-native-event-names.ts +++ b/packages/utils/src/eslint-plugin/get-native-event-names.ts @@ -9,7 +9,7 @@ let nativeEventNames: ReadonlySet | null = null; /** * Check MDN events page for details https://developer.mozilla.org/en-US/docs/Web/Events * - * Event names sourced from @mdn/browser-compat-data@5.7.1 + * Event names sourced from @mdn/browser-compat-data@5.7.5 */ export function getNativeEventNames(): ReadonlySet { return ( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74cfb2698..6fcf0bde1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,8 +31,8 @@ importers: specifier: 19.8.0 version: 19.8.0 '@mdn/browser-compat-data': - specifier: 5.7.1 - version: 5.7.1 + specifier: 5.7.5 + version: 5.7.5 '@nx/devkit': specifier: 0.0.0-pr-30418-4f79396 version: 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) @@ -1638,8 +1638,8 @@ packages: peerDependencies: '@inquirer/prompts': '>= 3 < 8' - '@mdn/browser-compat-data@5.7.1': - resolution: {integrity: sha512-GvRSM02AVVdB0rBeu/Xb1Zd3Q3fGPtpgQoaoOwNwcpMSQ4s08O0WHeGs1OywiFYKUFKo3i3kMYn4QzjRjZqw/w==} + '@mdn/browser-compat-data@5.7.5': + resolution: {integrity: sha512-AD9mNP6Yv1IdFOnP22UnggZM1Cx6MWcTlatCLzv69ObHNJsyKHAACnjc7ldlF9sIBs76J3jGfto1TywCFRy5DA==} '@napi-rs/nice-android-arm-eabi@1.0.1': resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==} @@ -7443,7 +7443,7 @@ snapshots: '@inquirer/prompts': 7.3.2(@types/node@20.17.24) '@inquirer/type': 1.5.5 - '@mdn/browser-compat-data@5.7.1': {} + '@mdn/browser-compat-data@5.7.5': {} '@napi-rs/nice-android-arm-eabi@1.0.1': optional: true From 368988f17f7ccadb041e25529c3492b3bdca77bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 13:22:06 +0400 Subject: [PATCH 13/23] chore: update swc monorepo (#2318) --- package.json | 4 +- pnpm-lock.yaml | 336 ++++++++++++++++++++++++------------------------- 2 files changed, 170 insertions(+), 170 deletions(-) diff --git a/package.json b/package.json index 6fc6184a0..9383aaeab 100644 --- a/package.json +++ b/package.json @@ -62,9 +62,9 @@ "@nx/plugin": "0.0.0-pr-30418-4f79396", "@nx/workspace": "0.0.0-pr-30418-4f79396", "@schematics/angular": "19.2.4", - "@swc-node/register": "1.10.9", + "@swc-node/register": "1.10.10", "@swc/cli": "0.6.0", - "@swc/core": "1.11.8", + "@swc/core": "1.11.11", "@swc/helpers": "0.5.15", "@types/eslint": "9.6.1", "@types/eslint-scope": "3.7.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6fcf0bde1..3f1292c42 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,40 +35,40 @@ importers: version: 5.7.5 '@nx/devkit': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + version: 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) '@nx/esbuild': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint-plugin': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/jest': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/js': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/plugin': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/workspace': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)) '@schematics/angular': specifier: 19.2.4 version: 19.2.4 '@swc-node/register': - specifier: 1.10.9 - version: 1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3) + specifier: 1.10.10 + version: 1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3) '@swc/cli': specifier: 0.6.0 - version: 0.6.0(@swc/core@1.11.8(@swc/helpers@0.5.15)) + version: 0.6.0(@swc/core@1.11.11(@swc/helpers@0.5.15)) '@swc/core': - specifier: 1.11.8 - version: 1.11.8(@swc/helpers@0.5.15) + specifier: 1.11.11 + version: 1.11.11(@swc/helpers@0.5.15) '@swc/helpers': specifier: 0.5.15 version: 0.5.15 @@ -119,7 +119,7 @@ importers: version: 9.1.7 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + version: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) json-schema-to-typescript: specifier: 15.0.4 version: 15.0.4 @@ -137,7 +137,7 @@ importers: version: 2.0.0 nx: specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)) picocolors: specifier: 1.1.1 version: 1.1.1 @@ -158,7 +158,7 @@ importers: version: 1.2.2 ts-jest: specifier: 29.2.4 - version: 29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3) + version: 29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3) tslib: specifier: ^2.4.1 version: 2.8.1 @@ -1744,8 +1744,8 @@ packages: '@napi-rs/wasm-runtime@0.2.4': resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} - '@napi-rs/wasm-runtime@0.2.5': - resolution: {integrity: sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==} + '@napi-rs/wasm-runtime@0.2.7': + resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1912,58 +1912,58 @@ packages: '@nx/workspace@0.0.0-pr-30418-4f79396': resolution: {integrity: sha512-Vbvt8TZBnjIzOX6s8wClP9wbuEIVBg4owEPm1lnHH5gbjgZgKU6DMka/u0YsiLV+cn0bBlKQgIs1Mbvn0vIG4Q==} - '@oxc-resolver/binding-darwin-arm64@1.12.0': - resolution: {integrity: sha512-wYe+dlF8npM7cwopOOxbdNjtmJp17e/xF5c0K2WooQXy5VOh74icydM33+Uh/SZDgwyum09/U1FVCX5GdeQk+A==} + '@oxc-resolver/binding-darwin-arm64@5.0.1': + resolution: {integrity: sha512-lY5mi+6ztYGM9tiyMhHbzZteE7LFaexu9PjDL2N0stCNuGkSHO1eeeabi2ckxGWBbu9EW01XovbQqir12NbA6A==} cpu: [arm64] os: [darwin] - '@oxc-resolver/binding-darwin-x64@1.12.0': - resolution: {integrity: sha512-FZxxp99om+SlvBr1cjzF8A3TjYcS0BInCqjUlM+2f9m9bPTR2Bng9Zq5Q09ZQyrKJjfGKqlOEHs3akuVOnrx3Q==} + '@oxc-resolver/binding-darwin-x64@5.0.1': + resolution: {integrity: sha512-wHKdPB2Q0dMVQy6b5depG8IGI0Y37CIUTZYrZDYEGMT3X481DAJjp6AIVVHQeolEZzy+lWrpUQdGPy0dQnt7IA==} cpu: [x64] os: [darwin] - '@oxc-resolver/binding-freebsd-x64@1.12.0': - resolution: {integrity: sha512-BZi0iU6IEOnXGSkqt1OjTTkN9wfyaK6kTpQwL/axl8eCcNDc7wbv1vloHgILf7ozAY1TP75nsLYlASYI4B5kGA==} + '@oxc-resolver/binding-freebsd-x64@5.0.1': + resolution: {integrity: sha512-TchNkHMASh2vZ2/FH71zqgAUNYuAlP8Bm1ocSnt7UVV43jZ9kG8HtQFc3AsYeVGzw06LZoeE3mVdSQVXUZhgzA==} cpu: [x64] os: [freebsd] - '@oxc-resolver/binding-linux-arm-gnueabihf@1.12.0': - resolution: {integrity: sha512-L2qnMEnZAqxbG9b1J3di/w/THIm+1fMVfbbTMWIQNMMXdMeqqDN6ojnOLDtuP564rAh4TBFPdLyEfGhMz6ipNA==} + '@oxc-resolver/binding-linux-arm-gnueabihf@5.0.1': + resolution: {integrity: sha512-JhqYi6uTSYflXSDNG/ZPTvBUcvcPR+vr/09XLdWJpZfEYzpPEEr7YQ2ogiOfZVUmCZOJWVOP8jJdv735j46a5w==} cpu: [arm] os: [linux] - '@oxc-resolver/binding-linux-arm64-gnu@1.12.0': - resolution: {integrity: sha512-otVbS4zeo3n71zgGLBYRTriDzc0zpruC0WI3ICwjpIk454cLwGV0yzh4jlGYWQJYJk0BRAmXFd3ooKIF+bKBHw==} + '@oxc-resolver/binding-linux-arm64-gnu@5.0.1': + resolution: {integrity: sha512-W2OXq25tYiFVhi0Eioc9b+KWnaK2Hj7x/eW2u6r6u4afd1cQ09U+o5u98jrj1rxowSOTfFyiKqMqQOrS4PAlFg==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-arm64-musl@1.12.0': - resolution: {integrity: sha512-IStQDjIT7Lzmqg1i9wXvPL/NsYsxF24WqaQFS8b8rxra+z0VG7saBOsEnOaa4jcEY8MVpLYabFhTV+fSsA2vnA==} + '@oxc-resolver/binding-linux-arm64-musl@5.0.1': + resolution: {integrity: sha512-dYaXmy90L5fTpH0mWmWvsf5PC9me5Lyjcj5vOQYNVedSQUavGMbQ+sKOWOTAFIpS8xzzIhYRdLI7oj4WV9S2bQ==} cpu: [arm64] os: [linux] - '@oxc-resolver/binding-linux-x64-gnu@1.12.0': - resolution: {integrity: sha512-SipT7EVORz8pOQSFwemOm91TpSiBAGmOjG830/o+aLEsvQ4pEy223+SAnCfITh7+AahldYsJnVoIs519jmIlKQ==} + '@oxc-resolver/binding-linux-x64-gnu@5.0.1': + resolution: {integrity: sha512-lOgcxgtV7nM4TjolWgW9qk05iDQE2GGZTx2Zr+Jj+4GqdIhkkGpbqyGPJx2FRsY6kXhyaA9eOad4Bldfo8vAaw==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-linux-x64-musl@1.12.0': - resolution: {integrity: sha512-mGh0XfUzKdn+WFaqPacziNraCWL5znkHRfQVxG9avGS9zb2KC/N1EBbPzFqutDwixGDP54r2gx4q54YCJEZ4iQ==} + '@oxc-resolver/binding-linux-x64-musl@5.0.1': + resolution: {integrity: sha512-3Pg8eSolVs3hy3xoqkjCgoIC1uHKPAUY0rs4QX+KtsPMOZ7iO5b3JBbJHl+ZDIeuzE8dkSRG7aIuCNVonp5G1Q==} cpu: [x64] os: [linux] - '@oxc-resolver/binding-wasm32-wasi@1.12.0': - resolution: {integrity: sha512-SZN6v7apKmQf/Vwiqb6e/s3Y2Oacw8uW8V2i1AlxtyaEFvnFE0UBn89zq6swEwE3OCajNWs0yPvgAXUMddYc7Q==} + '@oxc-resolver/binding-wasm32-wasi@5.0.1': + resolution: {integrity: sha512-rBEgV5AW5obb6ATeNUSUouW0FzpoADOweTYblprko+Cv6rW1NSQGzGxD6o6jhIk4yV7/CZBwBWAkz9xpL5JSUQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@oxc-resolver/binding-win32-arm64-msvc@1.12.0': - resolution: {integrity: sha512-GRe4bqCfFsyghruEn5bv47s9w3EWBdO2q72xCz5kpQ0LWbw+enPHtTjw3qX5PUcFYpKykM55FaO0hFDs1yzatw==} + '@oxc-resolver/binding-win32-arm64-msvc@5.0.1': + resolution: {integrity: sha512-okHg9C+z+2tCGKPszYVJDTZKhPHta7xKvhw0WMWPLTz9wbBMmHTuY9vVpgvFGhTU3N5iQ56LPollnSPtjvObCw==} cpu: [arm64] os: [win32] - '@oxc-resolver/binding-win32-x64-msvc@1.12.0': - resolution: {integrity: sha512-Z3llHH0jfJP4mlWq3DT7bK6qV+/vYe0+xzCgfc67+Tc/U3eYndujl880bexeGdGNPh87JeYznpZAOJ44N7QVVQ==} + '@oxc-resolver/binding-win32-x64-msvc@5.0.1': + resolution: {integrity: sha512-ODlCn4Pbd0HEWMixonax1uJtNCG4lEne6Jq98iUsmwSibQYcBzutxPed1qhLKur6KtCsYYa4LtRxys7e/5lZwQ==} cpu: [x64] os: [win32] @@ -2027,8 +2027,8 @@ packages: '@swc/core': '>= 1.4.13' '@swc/types': '>= 0.1' - '@swc-node/register@1.10.9': - resolution: {integrity: sha512-iXy2sjP0phPEpK2yivjRC3PAgoLaT4sjSk0LDWCTdcTBJmR4waEog0E6eJbvoOkLkOtWw37SB8vCkl/bbh4+8A==} + '@swc-node/register@1.10.10': + resolution: {integrity: sha512-jYWaI2WNEKz8KZL3sExd2KVL1JMma1/J7z+9iTpv0+fRN7LGMF8VTGGuHI2bug/ztpdZU1G44FG/Kk6ElXL9CQ==} peerDependencies: '@swc/core': '>= 1.4.13' typescript: '>= 4.3' @@ -2047,68 +2047,68 @@ packages: chokidar: optional: true - '@swc/core-darwin-arm64@1.11.8': - resolution: {integrity: sha512-rrSsunyJWpHN+5V1zumndwSSifmIeFQBK9i2RMQQp15PgbgUNxHK5qoET1n20pcUrmZeT6jmJaEWlQchkV//Og==} + '@swc/core-darwin-arm64@1.11.11': + resolution: {integrity: sha512-vJcjGVDB8cZH7zyOkC0AfpFYI/7GHKG0NSsH3tpuKrmoAXJyCYspKPGid7FT53EAlWreN7+Pew+bukYf5j+Fmg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.11.8': - resolution: {integrity: sha512-44goLqQuuo0HgWnG8qC+ZFw/qnjCVVeqffhzFr9WAXXotogVaxM8ze6egE58VWrfEc8me8yCcxOYL9RbtjhS/Q==} + '@swc/core-darwin-x64@1.11.11': + resolution: {integrity: sha512-/N4dGdqEYvD48mCF3QBSycAbbQd3yoZ2YHSzYesQf8usNc2YpIhYqEH3sql02UsxTjEFOJSf1bxZABDdhbSl6A==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.11.8': - resolution: {integrity: sha512-Mzo8umKlhTWwF1v8SLuTM1z2A+P43UVhf4R8RZDhzIRBuB2NkeyE+c0gexIOJBuGSIATryuAF4O4luDu727D1w==} + '@swc/core-linux-arm-gnueabihf@1.11.11': + resolution: {integrity: sha512-hsBhKK+wVXdN3x9MrL5GW0yT8o9GxteE5zHAI2HJjRQel3HtW7m5Nvwaq+q8rwMf4YQRd8ydbvwl4iUOZx7i2Q==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.11.8': - resolution: {integrity: sha512-EyhO6U+QdoGYC1MeHOR0pyaaSaKYyNuT4FQNZ1eZIbnuueXpuICC7iNmLIOfr3LE5bVWcZ7NKGVPlM2StJEcgA==} + '@swc/core-linux-arm64-gnu@1.11.11': + resolution: {integrity: sha512-YOCdxsqbnn/HMPCNM6nrXUpSndLXMUssGTtzT7ffXqr7WuzRg2e170FVDVQFIkb08E7Ku5uOnnUVAChAJQbMOQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.11.8': - resolution: {integrity: sha512-QU6wOkZnS6/QuBN1MHD6G2BgFxB0AclvTVGbqYkRA7MsVkcC29PffESqzTXnypzB252/XkhQjoB2JIt9rPYf6A==} + '@swc/core-linux-arm64-musl@1.11.11': + resolution: {integrity: sha512-nR2tfdQRRzwqR2XYw9NnBk9Fdvff/b8IiJzDL28gRR2QiJWLaE8LsRovtWrzCOYq6o5Uu9cJ3WbabWthLo4jLw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.11.8': - resolution: {integrity: sha512-r72onUEIU1iJi9EUws3R28pztQ/eM3EshNpsPRBfuLwKy+qn3et55vXOyDhIjGCUph5Eg2Yn8H3h6MTxDdLd+w==} + '@swc/core-linux-x64-gnu@1.11.11': + resolution: {integrity: sha512-b4gBp5HA9xNWNC5gsYbdzGBJWx4vKSGybGMGOVWWuF+ynx10+0sA/o4XJGuNHm8TEDuNh9YLKf6QkIO8+GPJ1g==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.11.8': - resolution: {integrity: sha512-294k8cLpO103++f4ZUEDr3vnBeUfPitW6G0a3qeVZuoXFhFgaW7ANZIWknUc14WiLOMfMecphJAEiy9C8OeYSw==} + '@swc/core-linux-x64-musl@1.11.11': + resolution: {integrity: sha512-dEvqmQVswjNvMBwXNb8q5uSvhWrJLdttBSef3s6UC5oDSwOr00t3RQPzyS3n5qmGJ8UMTdPRmsopxmqaODISdg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.11.8': - resolution: {integrity: sha512-EbjOzQ+B85rumHyeesBYxZ+hq3ZQn+YAAT1ZNE9xW1/8SuLoBmHy/K9YniRGVDq/2NRmp5kI5+5h5TX0asIS9A==} + '@swc/core-win32-arm64-msvc@1.11.11': + resolution: {integrity: sha512-aZNZznem9WRnw2FbTqVpnclvl8Q2apOBW2B316gZK+qxbe+ktjOUnYaMhdCG3+BYggyIBDOnaJeQrXbKIMmNdw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.11.8': - resolution: {integrity: sha512-Z+FF5kgLHfQWIZ1KPdeInToXLzbY0sMAashjd/igKeP1Lz0qKXVAK+rpn6ASJi85Fn8wTftCGCyQUkRVn0bTDg==} + '@swc/core-win32-ia32-msvc@1.11.11': + resolution: {integrity: sha512-DjeJn/IfjgOddmJ8IBbWuDK53Fqw7UvOz7kyI/728CSdDYC3LXigzj3ZYs4VvyeOt+ZcQZUB2HA27edOifomGw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.11.8': - resolution: {integrity: sha512-j6B6N0hChCeAISS6xp/hh6zR5CSCr037BAjCxNLsT8TGe5D+gYZ57heswUWXRH8eMKiRDGiLCYpPB2pkTqxCSw==} + '@swc/core-win32-x64-msvc@1.11.11': + resolution: {integrity: sha512-Gp/SLoeMtsU4n0uRoKDOlGrRC6wCfifq7bqLwSlAG8u8MyJYJCcwjg7ggm0rhLdC2vbiZ+lLVl3kkETp+JUvKg==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.11.8': - resolution: {integrity: sha512-UAL+EULxrc0J73flwYHfu29mO8CONpDJiQv1QPDXsyCvDUcEhqAqUROVTgC+wtJCFFqMQdyr4stAA5/s0KSOmA==} + '@swc/core@1.11.11': + resolution: {integrity: sha512-pCVY2Wn6dV/labNvssk9b3Owi4WOYsapcbWm90XkIj4xH/56Z6gzja9fsU+4MdPuEfC2Smw835nZHcdCFGyX6A==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -4743,8 +4743,8 @@ packages: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - oxc-resolver@1.12.0: - resolution: {integrity: sha512-YlaCIArvWNKCWZFRrMjhh2l5jK80eXnpYP+bhRc1J/7cW3TiyEY0ngJo73o/5n8hA3+4yLdTmXLNTQ3Ncz50LQ==} + oxc-resolver@5.0.1: + resolution: {integrity: sha512-BbclyCSxgnqO5mo05RGcwp8rkVdZL7sf0ugEnFWK67DIBAMq5wR0/GQlQCdPiPkpiv9GESAVX2cbh1DMFux/TQ==} p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} @@ -7261,7 +7261,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 @@ -7275,7 +7275,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -7519,7 +7519,7 @@ snapshots: '@emnapi/runtime': 1.3.1 '@tybys/wasm-util': 0.9.0 - '@napi-rs/wasm-runtime@0.2.5': + '@napi-rs/wasm-runtime@0.2.7': dependencies: '@emnapi/core': 1.3.1 '@emnapi/runtime': 1.3.1 @@ -7617,22 +7617,22 @@ snapshots: - bluebird - supports-color - '@nx/devkit@0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))': + '@nx/devkit@0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))': dependencies: ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + nx: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)) semver: 7.7.1 tmp: 0.2.3 tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/esbuild@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/esbuild@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) picocolors: 1.1.1 tinyglobby: 0.2.12 tsconfig-paths: 4.2.0 @@ -7651,10 +7651,10 @@ snapshots: - typescript - verdaccio - '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) @@ -7679,10 +7679,10 @@ snapshots: - typescript - verdaccio - '@nx/eslint@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) eslint: 9.22.0(jiti@2.4.2) semver: 7.7.1 tslib: 2.8.1 @@ -7700,15 +7700,15 @@ snapshots: - supports-color - verdaccio - '@nx/jest@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/jest@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 - '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) identity-obj-proxy: 3.0.0 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) jest-resolve: 29.7.0 jest-util: 29.7.0 minimatch: 9.0.3 @@ -7732,7 +7732,7 @@ snapshots: - typescript - verdaccio - '@nx/js@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/js@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -7741,8 +7741,8 @@ snapshots: '@babel/preset-env': 7.26.0(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/workspace': 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) + '@nx/workspace': 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)) '@zkochan/js-yaml': 0.0.7 babel-plugin-const-enum: 1.2.0(@babel/core@7.26.0) babel-plugin-macros: 3.1.0 @@ -7762,7 +7762,7 @@ snapshots: semver: 7.7.1 source-map-support: 0.5.19 tinyglobby: 0.2.12 - ts-node: 10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3) + ts-node: 10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3) tsconfig-paths: 4.2.0 tslib: 2.8.1 optionalDependencies: @@ -7808,12 +7808,12 @@ snapshots: '@nx/nx-win32-x64-msvc@0.0.0-pr-30418-4f79396': optional: true - '@nx/plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: - '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) - '@nx/eslint': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@nx/jest': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) + '@nx/eslint': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/jest': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) tslib: 2.8.1 transitivePeerDependencies: - '@babel/traverse' @@ -7832,13 +7832,13 @@ snapshots: - typescript - verdaccio - '@nx/workspace@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))': + '@nx/workspace@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))': dependencies: - '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15))) + '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) '@zkochan/js-yaml': 0.0.7 chalk: 4.1.2 enquirer: 2.3.6 - nx: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)) + nx: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)) picomatch: 4.0.2 tslib: 2.8.1 yargs-parser: 21.1.1 @@ -7847,39 +7847,39 @@ snapshots: - '@swc/core' - debug - '@oxc-resolver/binding-darwin-arm64@1.12.0': + '@oxc-resolver/binding-darwin-arm64@5.0.1': optional: true - '@oxc-resolver/binding-darwin-x64@1.12.0': + '@oxc-resolver/binding-darwin-x64@5.0.1': optional: true - '@oxc-resolver/binding-freebsd-x64@1.12.0': + '@oxc-resolver/binding-freebsd-x64@5.0.1': optional: true - '@oxc-resolver/binding-linux-arm-gnueabihf@1.12.0': + '@oxc-resolver/binding-linux-arm-gnueabihf@5.0.1': optional: true - '@oxc-resolver/binding-linux-arm64-gnu@1.12.0': + '@oxc-resolver/binding-linux-arm64-gnu@5.0.1': optional: true - '@oxc-resolver/binding-linux-arm64-musl@1.12.0': + '@oxc-resolver/binding-linux-arm64-musl@5.0.1': optional: true - '@oxc-resolver/binding-linux-x64-gnu@1.12.0': + '@oxc-resolver/binding-linux-x64-gnu@5.0.1': optional: true - '@oxc-resolver/binding-linux-x64-musl@1.12.0': + '@oxc-resolver/binding-linux-x64-musl@5.0.1': optional: true - '@oxc-resolver/binding-wasm32-wasi@1.12.0': + '@oxc-resolver/binding-wasm32-wasi@5.0.1': dependencies: - '@napi-rs/wasm-runtime': 0.2.5 + '@napi-rs/wasm-runtime': 0.2.7 optional: true - '@oxc-resolver/binding-win32-arm64-msvc@1.12.0': + '@oxc-resolver/binding-win32-arm64-msvc@5.0.1': optional: true - '@oxc-resolver/binding-win32-x64-msvc@1.12.0': + '@oxc-resolver/binding-win32-x64-msvc@5.0.1': optional: true '@phenomnomnominal/tsquery@5.0.1(typescript@5.7.3)': @@ -7944,19 +7944,19 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@swc-node/core@1.13.3(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)': + '@swc-node/core@1.13.3(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)': dependencies: - '@swc/core': 1.11.8(@swc/helpers@0.5.15) + '@swc/core': 1.11.11(@swc/helpers@0.5.15) '@swc/types': 0.1.19 - '@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3)': + '@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3)': dependencies: - '@swc-node/core': 1.13.3(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19) + '@swc-node/core': 1.13.3(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19) '@swc-node/sourcemap-support': 0.5.1 - '@swc/core': 1.11.8(@swc/helpers@0.5.15) + '@swc/core': 1.11.11(@swc/helpers@0.5.15) colorette: 2.0.20 - debug: 4.3.7 - oxc-resolver: 1.12.0 + debug: 4.4.0 + oxc-resolver: 5.0.1 pirates: 4.0.6 tslib: 2.8.1 typescript: 5.7.3 @@ -7969,9 +7969,9 @@ snapshots: source-map-support: 0.5.21 tslib: 2.8.1 - '@swc/cli@0.6.0(@swc/core@1.11.8(@swc/helpers@0.5.15))': + '@swc/cli@0.6.0(@swc/core@1.11.11(@swc/helpers@0.5.15))': dependencies: - '@swc/core': 1.11.8(@swc/helpers@0.5.15) + '@swc/core': 1.11.11(@swc/helpers@0.5.15) '@swc/counter': 0.1.3 '@xhmikosr/bin-wrapper': 13.0.5 commander: 8.3.0 @@ -7982,51 +7982,51 @@ snapshots: slash: 3.0.0 source-map: 0.7.4 - '@swc/core-darwin-arm64@1.11.8': + '@swc/core-darwin-arm64@1.11.11': optional: true - '@swc/core-darwin-x64@1.11.8': + '@swc/core-darwin-x64@1.11.11': optional: true - '@swc/core-linux-arm-gnueabihf@1.11.8': + '@swc/core-linux-arm-gnueabihf@1.11.11': optional: true - '@swc/core-linux-arm64-gnu@1.11.8': + '@swc/core-linux-arm64-gnu@1.11.11': optional: true - '@swc/core-linux-arm64-musl@1.11.8': + '@swc/core-linux-arm64-musl@1.11.11': optional: true - '@swc/core-linux-x64-gnu@1.11.8': + '@swc/core-linux-x64-gnu@1.11.11': optional: true - '@swc/core-linux-x64-musl@1.11.8': + '@swc/core-linux-x64-musl@1.11.11': optional: true - '@swc/core-win32-arm64-msvc@1.11.8': + '@swc/core-win32-arm64-msvc@1.11.11': optional: true - '@swc/core-win32-ia32-msvc@1.11.8': + '@swc/core-win32-ia32-msvc@1.11.11': optional: true - '@swc/core-win32-x64-msvc@1.11.8': + '@swc/core-win32-x64-msvc@1.11.11': optional: true - '@swc/core@1.11.8(@swc/helpers@0.5.15)': + '@swc/core@1.11.11(@swc/helpers@0.5.15)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.19 optionalDependencies: - '@swc/core-darwin-arm64': 1.11.8 - '@swc/core-darwin-x64': 1.11.8 - '@swc/core-linux-arm-gnueabihf': 1.11.8 - '@swc/core-linux-arm64-gnu': 1.11.8 - '@swc/core-linux-arm64-musl': 1.11.8 - '@swc/core-linux-x64-gnu': 1.11.8 - '@swc/core-linux-x64-musl': 1.11.8 - '@swc/core-win32-arm64-msvc': 1.11.8 - '@swc/core-win32-ia32-msvc': 1.11.8 - '@swc/core-win32-x64-msvc': 1.11.8 + '@swc/core-darwin-arm64': 1.11.11 + '@swc/core-darwin-x64': 1.11.11 + '@swc/core-linux-arm-gnueabihf': 1.11.11 + '@swc/core-linux-arm64-gnu': 1.11.11 + '@swc/core-linux-arm64-musl': 1.11.11 + '@swc/core-linux-x64-gnu': 1.11.11 + '@swc/core-linux-x64-musl': 1.11.11 + '@swc/core-win32-arm64-msvc': 1.11.11 + '@swc/core-win32-ia32-msvc': 1.11.11 + '@swc/core-win32-x64-msvc': 1.11.11 '@swc/helpers': 0.5.15 '@swc/counter@0.1.3': {} @@ -9202,13 +9202,13 @@ snapshots: optionalDependencies: typescript: 5.7.3 - create-jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + create-jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -10294,16 +10294,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + jest-cli@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + create-jest: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10313,7 +10313,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + jest-config@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -10339,7 +10339,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.17.24 - ts-node: 10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3) + ts-node: 10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -10559,12 +10559,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-cli: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -11100,7 +11100,7 @@ snapshots: dependencies: path-key: 4.0.0 - nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.8(@swc/helpers@0.5.15)): + nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 @@ -11147,8 +11147,8 @@ snapshots: '@nx/nx-linux-x64-musl': 0.0.0-pr-30418-4f79396 '@nx/nx-win32-arm64-msvc': 0.0.0-pr-30418-4f79396 '@nx/nx-win32-x64-msvc': 0.0.0-pr-30418-4f79396 - '@swc-node/register': 1.10.9(@swc/core@1.11.8(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3) - '@swc/core': 1.11.8(@swc/helpers@0.5.15) + '@swc-node/register': 1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3) + '@swc/core': 1.11.11(@swc/helpers@0.5.15) transitivePeerDependencies: - debug @@ -11220,19 +11220,19 @@ snapshots: os-tmpdir@1.0.2: {} - oxc-resolver@1.12.0: + oxc-resolver@5.0.1: optionalDependencies: - '@oxc-resolver/binding-darwin-arm64': 1.12.0 - '@oxc-resolver/binding-darwin-x64': 1.12.0 - '@oxc-resolver/binding-freebsd-x64': 1.12.0 - '@oxc-resolver/binding-linux-arm-gnueabihf': 1.12.0 - '@oxc-resolver/binding-linux-arm64-gnu': 1.12.0 - '@oxc-resolver/binding-linux-arm64-musl': 1.12.0 - '@oxc-resolver/binding-linux-x64-gnu': 1.12.0 - '@oxc-resolver/binding-linux-x64-musl': 1.12.0 - '@oxc-resolver/binding-wasm32-wasi': 1.12.0 - '@oxc-resolver/binding-win32-arm64-msvc': 1.12.0 - '@oxc-resolver/binding-win32-x64-msvc': 1.12.0 + '@oxc-resolver/binding-darwin-arm64': 5.0.1 + '@oxc-resolver/binding-darwin-x64': 5.0.1 + '@oxc-resolver/binding-freebsd-x64': 5.0.1 + '@oxc-resolver/binding-linux-arm-gnueabihf': 5.0.1 + '@oxc-resolver/binding-linux-arm64-gnu': 5.0.1 + '@oxc-resolver/binding-linux-arm64-musl': 5.0.1 + '@oxc-resolver/binding-linux-x64-gnu': 5.0.1 + '@oxc-resolver/binding-linux-x64-musl': 5.0.1 + '@oxc-resolver/binding-wasm32-wasi': 5.0.1 + '@oxc-resolver/binding-win32-arm64-msvc': 5.0.1 + '@oxc-resolver/binding-win32-x64-msvc': 5.0.1 p-cancelable@3.0.0: {} @@ -11994,12 +11994,12 @@ snapshots: dependencies: typescript: 5.7.3 - ts-jest@29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12014,7 +12014,7 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.26.0) esbuild: 0.25.1 - ts-node@10.9.1(@swc/core@1.11.8(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3): + ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -12032,7 +12032,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.11.8(@swc/helpers@0.5.15) + '@swc/core': 1.11.11(@swc/helpers@0.5.15) tsconfig-paths@4.2.0: dependencies: From 5c3c774d7bcfd073baff3e9c09025ee3d09acfb7 Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 22 Mar 2025 19:25:25 +1000 Subject: [PATCH 14/23] fix(eslint-plugin-template): [attributes-order] order i18n attributes (#2307) --- .../docs/rules/attributes-order.md | 379 +++++++++++++++++- .../src/rules/attributes-order.ts | 276 ++++++++++--- .../tests/rules/attributes-order/cases.ts | 134 ++++++- 3 files changed, 725 insertions(+), 64 deletions(-) diff --git a/packages/eslint-plugin-template/docs/rules/attributes-order.md b/packages/eslint-plugin-template/docs/rules/attributes-order.md index 6cddee498..d3dcf7f0f 100644 --- a/packages/eslint-plugin-template/docs/rules/attributes-order.md +++ b/packages/eslint-plugin-template/docs/rules/attributes-order.md @@ -806,6 +806,141 @@ interface Options { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +
x
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +The value is {{ foo }}. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` +
@@ -1043,6 +1178,32 @@ interface Options { #### ✅ Valid Code +```html +
a
+``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```html
``` @@ -1069,6 +1230,32 @@ interface Options { #### ✅ Valid Code +```html +
+``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + ```html
``` @@ -1096,7 +1283,137 @@ interface Options { #### ✅ Valid Code ```html -
+c +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
+``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
+``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
+``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
+``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
```
@@ -1125,6 +1442,66 @@ interface Options { ``` +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error", + { + "alphabetical": true, + "order": [] + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
+``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error", + { + "alphabetical": true, + "order": [] + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
+``` +
diff --git a/packages/eslint-plugin-template/src/rules/attributes-order.ts b/packages/eslint-plugin-template/src/rules/attributes-order.ts index 6263827ac..76c677cc1 100644 --- a/packages/eslint-plugin-template/src/rules/attributes-order.ts +++ b/packages/eslint-plugin-template/src/rules/attributes-order.ts @@ -1,4 +1,5 @@ import type { + Attribute, TmplAstBoundAttribute, TmplAstBoundEvent, TmplAstElement, @@ -8,6 +9,8 @@ import type { TmplAstVariable, } from '@angular-eslint/bundled-angular-compiler'; import { + Element, + HtmlParser, ParseSourceSpan, TmplAstTemplate, } from '@angular-eslint/bundled-angular-compiler'; @@ -52,11 +55,15 @@ type ExtendedTmplAstTextAttribute = TmplAstTextAttribute & type ExtendedTmplAstReference = TmplAstReference & HasOrderType; type ExtendedTmplAstElement = TmplAstElement & HasTemplateParent; -type ExtendedAttribute = - | ExtendedTmplAstBoundAttribute - | ExtendedTmplAstBoundEvent - | ExtendedTmplAstTextAttribute - | ExtendedTmplAstReference; + +interface SortableAttribute { + readonly name: string; + readonly sourceSpan: ParseSourceSpan; + readonly keySpan: ParseSourceSpan | undefined; + readonly orderType: OrderType; + readonly fromHtmlParser?: boolean; + readonly isI18nForAttribute?: boolean; +} export type MessageIds = 'attributesOrder'; export const RULE_NAME = 'attributes-order'; @@ -114,25 +121,12 @@ export default createESLintRule({ create(context, [{ alphabetical, order }]) { const parserServices = getTemplateParserServices(context); - function getLocation(attr: ExtendedAttribute): TSESTree.SourceLocation { - const loc = parserServices.convertNodeSourceSpanToLoc(attr.sourceSpan); - - switch (attr.orderType) { - case OrderType.StructuralDirective: - return { - start: { - line: loc.start.line, - column: loc.start.column - 1, - }, - end: { - line: loc.end.line, - column: - loc.end.column + (isValuelessStructuralDirective(attr) ? 0 : 1), - }, - }; - default: - return loc; - } + function getLocation(attr: SortableAttribute): TSESTree.SourceLocation { + return adjustLocation( + parserServices.convertNodeSourceSpanToLoc(attr.sourceSpan), + 'location', + attr, + ); } return { @@ -140,21 +134,7 @@ export default createESLintRule({ if (isImplicitTemplate(node)) { return; } - - const { attributes, inputs, outputs, references } = node; - const { extractedBananaBoxes, extractedInputs, extractedOutputs } = - normalizeInputsOutputs( - inputs.map(toInputBindingOrderType), - outputs.map(toOutputBindingOrderType), - ); - const allAttributes = [ - ...extractTemplateAttrs(node), - ...attributes.map(toAttributeBindingOrderType), - ...references.map(toTemplateReferenceVariableOrderType), - ...extractedBananaBoxes, - ...extractedInputs, - ...extractedOutputs, - ] as const; + const allAttributes = getAllAttributes(node, context.filename); if (allAttributes.length < 2) { return; @@ -224,14 +204,14 @@ export default createESLintRule({ }, }); -function byLocation(one: ExtendedAttribute, other: ExtendedAttribute) { +function byLocation(one: SortableAttribute, other: SortableAttribute) { return one.sourceSpan.start.line === other.sourceSpan.start.line ? one.sourceSpan.start.col - other.sourceSpan.start.col : one.sourceSpan.start.line - other.sourceSpan.start.line; } function byOrder(order: readonly OrderType[], alphabetical: boolean) { - return function (one: ExtendedAttribute, other: ExtendedAttribute) { + return function (one: SortableAttribute, other: SortableAttribute) { const orderComparison = getOrderIndex(one, order) - getOrderIndex(other, order); @@ -252,10 +232,53 @@ function byOrder(order: readonly OrderType[], alphabetical: boolean) { }; } -function getOrderIndex(attr: ExtendedAttribute, order: readonly OrderType[]) { +function getOrderIndex(attr: SortableAttribute, order: readonly OrderType[]) { return order.indexOf(attr.orderType); } +function getAllAttributes( + node: ExtendedTmplAstElement | TmplAstTemplate, + filename: string, +): SortableAttribute[] { + // If there are any i18n attributes (either associated with the + // element itself, or with any attribute or input), then we need + // to use the HTML parser to get the attributes because the i18n + // metadata does not contain the spans of the i18n attributes. + if (node.i18n) { + return getAttributesFromHtmlParser(node, filename, node.inputs); + } + const { attributes, inputs, outputs, references } = node; + const extendedInputs: ExtendedTmplAstBoundAttribute[] = []; + for (const input of inputs) { + if (input.i18n) { + return getAttributesFromHtmlParser(node, filename, node.inputs); + } + extendedInputs.push(toInputBindingOrderType(input)); + } + + const attributeBindings: ExtendedTmplAstTextAttribute[] = []; + for (const attribute of attributes) { + if (attribute.i18n) { + return getAttributesFromHtmlParser(node, filename, node.inputs); + } + attributeBindings.push(toAttributeBindingOrderType(attribute)); + } + + const { extractedBananaBoxes, extractedInputs, extractedOutputs } = + normalizeInputsOutputs( + extendedInputs, + outputs.map(toOutputBindingOrderType), + ); + return [ + ...extractTemplateAttrs(node), + ...attributeBindings, + ...references.map(toTemplateReferenceVariableOrderType), + ...extractedBananaBoxes, + ...extractedInputs, + ...extractedOutputs, + ]; +} + function toAttributeBindingOrderType( attribute: TmplAstTextAttribute | TmplAstVariable, ) { @@ -409,7 +432,7 @@ function isOnSameLocation( ); } -function getMessageName(expected: ExtendedAttribute): string { +function getMessageName(expected: SortableAttribute): string { const fullName = expected.keySpan?.details ?? expected.name; switch (expected.orderType) { case OrderType.StructuralDirective: @@ -417,7 +440,7 @@ function getMessageName(expected: ExtendedAttribute): string { case OrderType.TemplateReferenceVariable: return `#${fullName}`; case OrderType.InputBinding: - return `[${fullName}]`; + return expected.isI18nForAttribute ? fullName : `[${fullName}]`; case OrderType.OutputBinding: return `(${fullName})`; case OrderType.TwoWayBinding: @@ -427,7 +450,7 @@ function getMessageName(expected: ExtendedAttribute): string { } } -function isValuelessStructuralDirective(attr: ExtendedAttribute): boolean { +function isValuelessStructuralDirective(attr: SortableAttribute): boolean { if (attr.orderType !== OrderType.StructuralDirective || !attr.keySpan) { return false; } @@ -450,23 +473,156 @@ function isValuelessStructuralDirective(attr: ExtendedAttribute): boolean { ); } -function getStartPos(expected: ExtendedAttribute): number { - switch (expected.orderType) { - case OrderType.StructuralDirective: - return expected.sourceSpan.start.offset - 1; - default: - return expected.sourceSpan.start.offset; +function getStartPos(expected: SortableAttribute): number { + return adjustLocation(expected.sourceSpan.start.offset, 'start', expected); +} + +function getEndPos(expected: SortableAttribute): number { + return adjustLocation(expected.sourceSpan.end.offset, 'end', expected); +} + +function adjustLocation( + loc: TSESTree.SourceLocation, + kind: 'location', + attr: SortableAttribute, +): TSESTree.SourceLocation; +function adjustLocation( + offset: number, + kind: 'start' | 'end', + attr: SortableAttribute, +): number; +function adjustLocation( + locOrOffset: TSESTree.SourceLocation | number, + kind: 'location' | 'start' | 'end', + attr: SortableAttribute, +): TSESTree.SourceLocation | number { + // Spans for structural directives created from the + // template parser will exclude the leading "*", so + // we need to move the start back to include it. + if ( + !attr.fromHtmlParser && + attr.orderType === OrderType.StructuralDirective + ) { + if (typeof locOrOffset === 'number') { + if (kind === 'start') { + return locOrOffset - 1; + } else { + return locOrOffset + (isValuelessStructuralDirective(attr) ? 0 : 1); + } + } else { + return { + start: { + line: locOrOffset.start.line, + column: locOrOffset.start.column - 1, + }, + end: { + line: locOrOffset.end.line, + column: + locOrOffset.end.column + + (isValuelessStructuralDirective(attr) ? 0 : 1), + }, + }; + } } + return locOrOffset; } -function getEndPos(expected: ExtendedAttribute): number { - switch (expected.orderType) { - case OrderType.StructuralDirective: - return ( - expected.sourceSpan.end.offset + - (isValuelessStructuralDirective(expected) ? 0 : 1) - ); - default: - return expected.sourceSpan.end.offset; +function getAttributesFromHtmlParser( + node: ExtendedTmplAstElement | TmplAstTemplate, + filename: string, + inputs: TmplAstBoundAttribute[], +): SortableAttribute[] { + // The template AST does not include the spans for i18n attributes. + // To get their spans, we can re-parse just the element as HTML. + // We only need the spans of the attributes, so take only the + // start element and the end element (if there is one) so that + // we don't waste time parsing the element's content. + let html = node.startSourceSpan.toString(); + if (node.endSourceSpan) { + html += node.endSourceSpan.toString(); } + const parser = new HtmlParser(); + const tree = parser.parse(html, filename, { preserveLineEndings: true }); + const element = tree.rootNodes.find((n) => n instanceof Element); + if (element) { + return element.attrs.map((attribute) => ({ + ...getHtmlAttributeNameAndOrderType(attribute, inputs), + fromHtmlParser: true, + // The HTML element was at the start of the string which means the + // offset of each element will be relative to the start of the element. + // To get the offset of the attribute in the template, we need to + // move each span forward by the offset of the span in the template. + sourceSpan: new ParseSourceSpan( + node.startSourceSpan.start.moveBy(attribute.sourceSpan.start.offset), + node.startSourceSpan.start.moveBy(attribute.sourceSpan.end.offset), + ), + keySpan: attribute.keySpan + ? new ParseSourceSpan( + node.startSourceSpan.start.moveBy(attribute.keySpan.start.offset), + node.startSourceSpan.start.moveBy(attribute.keySpan.end.offset), + ) + : undefined, + })); + } + return []; +} + +function getHtmlAttributeNameAndOrderType( + attr: Attribute, + inputs: TmplAstBoundAttribute[], +): Pick { + if (attr.name.startsWith('#')) { + return { + name: attr.name.slice(1), + orderType: OrderType.TemplateReferenceVariable, + }; + } + + if (attr.name.startsWith('*')) { + return { + name: attr.name.slice(1), + orderType: OrderType.StructuralDirective, + }; + } + + if (attr.name.startsWith('[(') && attr.name.endsWith(')]')) { + return { + name: attr.name.slice(2, -2), + orderType: OrderType.TwoWayBinding, + }; + } + + if (attr.name.startsWith('[') && attr.name.endsWith(']')) { + return { + name: attr.name.slice(1, -1), + orderType: OrderType.InputBinding, + }; + } + + if (attr.name.startsWith('(') && attr.name.endsWith(')')) { + return { + name: attr.name.slice(1, -1), + orderType: OrderType.OutputBinding, + }; + } + + const isI18nForAttribute = attr.name.startsWith('i18n-'); + let orderType = OrderType.AttributeBinding; + + // If the attribute is an i18n attribute, and it is associated with + // an input binding, then treat it as an input binding for ordering, + // even though it is a regular attribute. This will keep the i18n + // attribute immediately after its corresponding input binding. + if (inputs.length > 0 && isI18nForAttribute) { + const correspondingName = attr.name.slice(5); + if (inputs.some((input) => input.name === correspondingName)) { + orderType = OrderType.InputBinding; + } + } + + return { + name: attr.name, + orderType, + isI18nForAttribute, + }; } diff --git a/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts b/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts index 0c7d5d5ef..af6637484 100644 --- a/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts +++ b/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts @@ -20,10 +20,49 @@ export const valid: readonly (string | ValidTestCase)[] = [ '', '', '
', + '
a
', '
', + '
', '
', - '
', + 'c', + '
', + '
', + '
', + '
', + '
', '', + { + code: '
', + options: [ + { + alphabetical: true, + order: [ + OrderType.StructuralDirective, + OrderType.TemplateReferenceVariable, + OrderType.AttributeBinding, + OrderType.InputBinding, + OrderType.TwoWayBinding, + OrderType.OutputBinding, + ], + }, + ], + }, + { + code: '
', + options: [ + { + alphabetical: true, + order: [ + OrderType.StructuralDirective, + OrderType.TemplateReferenceVariable, + OrderType.AttributeBinding, + OrderType.InputBinding, + OrderType.TwoWayBinding, + OrderType.OutputBinding, + ], + }, + ], + }, ]; export const invalid: readonly InvalidTestCase[] = [ @@ -457,7 +496,6 @@ export const invalid: readonly InvalidTestCase[] = [ `, }), - convertAnnotatedSourceToFailureCase({ messageId, description: @@ -476,7 +514,6 @@ export const invalid: readonly InvalidTestCase[] = [ `, }), - convertAnnotatedSourceToFailureCase({ messageId, description: @@ -494,4 +531,95 @@ export const invalid: readonly InvalidTestCase[] = [ `, }), + convertAnnotatedSourceToFailureCase({ + messageId, + description: + 'should order i18n attributes for other attributes after their corresponding attribute', + annotatedSource: ` +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + options: [{ alphabetical: true }] as Options, + data: { + expected: '`alpha`, `i18n-alpha`, `beta`', + actual: '`i18n-alpha`, `beta`, `alpha`', + }, + annotatedOutput: ` +
+ + `, + }), + convertAnnotatedSourceToFailureCase({ + messageId, + description: + 'should order i18n attribute for element alphabetically with other attributes', + annotatedSource: ` +
x
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + options: [{ alphabetical: true }] as Options, + data: { + expected: '`alpha`, `beta`, `i18n`', + actual: '`i18n`, `beta`, `alpha`', + }, + annotatedOutput: ` +
x
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + }), + convertAnnotatedSourceToFailureCase({ + messageId, + description: + 'should order i18n attributes along with all other types of attributes', + annotatedSource: ` +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + options: [{ alphabetical: true }] as Options, + data: { + expected: + '`*ngIf`, `#alpha`, `beta`, `i18n-beta`, `pi`, `[gamma]`, `[(delta)]`, `(epsilon)`', + actual: + '`#alpha`, `*ngIf`, `(epsilon)`, `beta`, `[gamma]`, `i18n-beta`, `[(delta)]`, `pi`', + }, + annotatedOutput: ` +
+ + `, + }), + convertAnnotatedSourceToFailureCase({ + messageId, + description: + 'should order i18n attribute for input after the corresponding input', + annotatedSource: ` +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + options: [{ alphabetical: true }] as Options, + data: { + expected: '`alpha`, `i18n-alpha`, `[beta]`, `i18n-beta`, `[gamma]`', + actual: '`[beta]`, `alpha`, `[gamma]`, `i18n-alpha`, `i18n-beta`', + }, + annotatedOutput: ` +
+ + `, + }), + convertAnnotatedSourceToFailureCase({ + messageId, + description: 'should order i18n in template correctly', + annotatedSource: ` + The value is {{ foo }}. + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + options: [{ alphabetical: true }] as Options, + data: { + expected: '`#template`, `i18n`, `let-foo`', + actual: '`i18n`, `let-foo`, `#template`', + }, + annotatedOutput: ` + The value is {{ foo }}. + + `, + }), ]; From e8152c9e84ee163744cf26a2f4316340499615ec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 14:07:39 +0400 Subject: [PATCH 15/23] chore: update node.js to v20.19.0 (#2322) --- package.json | 4 +- pnpm-lock.yaml | 290 ++++++++++++++++++++++++------------------------- 2 files changed, 147 insertions(+), 147 deletions(-) diff --git a/package.json b/package.json index 9383aaeab..46f94fe97 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "private": true, "description": "The tooling which enables ESLint to work with Angular projects", "volta": { - "node": "20.18.3" + "node": "20.19.0" }, "packageManager": "pnpm@10.6.5", "contributors": [ @@ -69,7 +69,7 @@ "@types/eslint": "9.6.1", "@types/eslint-scope": "3.7.7", "@types/jest": "29.5.12", - "@types/node": "20.17.24", + "@types/node": "20.17.25", "@types/semver": "^7.5.8", "@types/yargs": "^17.0.33", "@typescript-eslint/rule-tester": "8.26.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3f1292c42..74f4df97e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,13 +20,13 @@ importers: devDependencies: '@angular/cli': specifier: 19.2.4 - version: 19.2.4(@types/node@20.17.24) + version: 19.2.4(@types/node@20.17.25) '@angular/compiler': specifier: 19.2.1 version: 19.2.1 '@commitlint/cli': specifier: 19.8.0 - version: 19.8.0(@types/node@20.17.24)(typescript@5.7.3) + version: 19.8.0(@types/node@20.17.25)(typescript@5.7.3) '@commitlint/config-conventional': specifier: 19.8.0 version: 19.8.0 @@ -38,22 +38,22 @@ importers: version: 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) '@nx/esbuild': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint-plugin': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/jest': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/js': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/plugin': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/workspace': specifier: 0.0.0-pr-30418-4f79396 version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)) @@ -82,8 +82,8 @@ importers: specifier: 29.5.12 version: 29.5.12 '@types/node': - specifier: 20.17.24 - version: 20.17.24 + specifier: 20.17.25 + version: 20.17.25 '@types/semver': specifier: ^7.5.8 version: 7.5.8 @@ -101,7 +101,7 @@ importers: version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) cz-conventional-changelog: specifier: 3.3.0 - version: 3.3.0(@types/node@20.17.24)(typescript@5.7.3) + version: 3.3.0(@types/node@20.17.25)(typescript@5.7.3) esbuild: specifier: ^0.25.0 version: 0.25.1 @@ -119,7 +119,7 @@ importers: version: 9.1.7 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + version: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) json-schema-to-typescript: specifier: 15.0.4 version: 15.0.4 @@ -158,7 +158,7 @@ importers: version: 1.2.2 ts-jest: specifier: 29.2.4 - version: 29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3) + version: 29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)))(typescript@5.7.3) tslib: specifier: ^2.4.1 version: 2.8.1 @@ -2206,8 +2206,8 @@ packages: '@types/lodash@4.17.13': resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} - '@types/node@20.17.24': - resolution: {integrity: sha512-d7fGCyB96w9BnWQrOsJtpyiSaBcAYYr75bnK6ZRjDbql2cGLj/3GsL5OYmLPNq76l7Gf2q4Rv9J2o6h5CrD9sA==} + '@types/node@20.17.25': + resolution: {integrity: sha512-bT+r2haIlplJUYtlZrEanFHdPIZTeiMeh/fSOEbOOfWf9uTn+lg8g0KU6Q3iMgjd9FLuuMAgfCNSkjUbxL6E3Q==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -5926,13 +5926,13 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular/cli@19.2.4(@types/node@20.17.24)': + '@angular/cli@19.2.4(@types/node@20.17.25)': dependencies: '@angular-devkit/architect': 0.1902.4 '@angular-devkit/core': 19.2.4 '@angular-devkit/schematics': 19.2.4 - '@inquirer/prompts': 7.3.2(@types/node@20.17.24) - '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@20.17.24)) + '@inquirer/prompts': 7.3.2(@types/node@20.17.25) + '@listr2/prompt-adapter-inquirer': 2.0.18(@inquirer/prompts@7.3.2(@types/node@20.17.25)) '@schematics/angular': 19.2.4 '@yarnpkg/lockfile': 1.1.0 ini: 5.0.0 @@ -6748,11 +6748,11 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@commitlint/cli@19.8.0(@types/node@20.17.24)(typescript@5.7.3)': + '@commitlint/cli@19.8.0(@types/node@20.17.25)(typescript@5.7.3)': dependencies: '@commitlint/format': 19.8.0 '@commitlint/lint': 19.8.0 - '@commitlint/load': 19.8.0(@types/node@20.17.24)(typescript@5.7.3) + '@commitlint/load': 19.8.0(@types/node@20.17.25)(typescript@5.7.3) '@commitlint/read': 19.8.0 '@commitlint/types': 19.8.0 tinyexec: 0.3.1 @@ -6808,7 +6808,7 @@ snapshots: '@commitlint/rules': 19.8.0 '@commitlint/types': 19.8.0 - '@commitlint/load@19.5.0(@types/node@20.17.24)(typescript@5.7.3)': + '@commitlint/load@19.5.0(@types/node@20.17.25)(typescript@5.7.3)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 @@ -6816,7 +6816,7 @@ snapshots: '@commitlint/types': 19.5.0 chalk: 5.4.1 cosmiconfig: 9.0.0(typescript@5.7.3) - cosmiconfig-typescript-loader: 5.1.0(@types/node@20.17.24)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + cosmiconfig-typescript-loader: 5.1.0(@types/node@20.17.25)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -6825,7 +6825,7 @@ snapshots: - typescript optional: true - '@commitlint/load@19.8.0(@types/node@20.17.24)(typescript@5.7.3)': + '@commitlint/load@19.8.0(@types/node@20.17.25)(typescript@5.7.3)': dependencies: '@commitlint/config-validator': 19.8.0 '@commitlint/execute-rule': 19.8.0 @@ -6833,7 +6833,7 @@ snapshots: '@commitlint/types': 19.8.0 chalk: 5.4.1 cosmiconfig: 9.0.0(typescript@5.7.3) - cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.24)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@20.17.25)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -7109,27 +7109,27 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} - '@inquirer/checkbox@4.1.2(@types/node@20.17.24)': + '@inquirer/checkbox@4.1.2(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/type': 3.0.4(@types/node@20.17.25) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/confirm@5.1.6(@types/node@20.17.24)': + '@inquirer/confirm@5.1.6(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) + '@inquirer/type': 3.0.4(@types/node@20.17.25) optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/core@10.1.7(@types/node@20.17.24)': + '@inquirer/core@10.1.7(@types/node@20.17.25)': dependencies: '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/type': 3.0.4(@types/node@20.17.25) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -7137,97 +7137,97 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/editor@4.2.7(@types/node@20.17.24)': + '@inquirer/editor@4.2.7(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) + '@inquirer/type': 3.0.4(@types/node@20.17.25) external-editor: 3.1.0 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/expand@4.0.9(@types/node@20.17.24)': + '@inquirer/expand@4.0.9(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) + '@inquirer/type': 3.0.4(@types/node@20.17.25) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 '@inquirer/figures@1.0.10': {} - '@inquirer/input@4.1.6(@types/node@20.17.24)': + '@inquirer/input@4.1.6(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) + '@inquirer/type': 3.0.4(@types/node@20.17.25) optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/number@3.0.9(@types/node@20.17.24)': + '@inquirer/number@3.0.9(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) + '@inquirer/type': 3.0.4(@types/node@20.17.25) optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/password@4.0.9(@types/node@20.17.24)': + '@inquirer/password@4.0.9(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) + '@inquirer/type': 3.0.4(@types/node@20.17.25) ansi-escapes: 4.3.2 optionalDependencies: - '@types/node': 20.17.24 - - '@inquirer/prompts@7.3.2(@types/node@20.17.24)': - dependencies: - '@inquirer/checkbox': 4.1.2(@types/node@20.17.24) - '@inquirer/confirm': 5.1.6(@types/node@20.17.24) - '@inquirer/editor': 4.2.7(@types/node@20.17.24) - '@inquirer/expand': 4.0.9(@types/node@20.17.24) - '@inquirer/input': 4.1.6(@types/node@20.17.24) - '@inquirer/number': 3.0.9(@types/node@20.17.24) - '@inquirer/password': 4.0.9(@types/node@20.17.24) - '@inquirer/rawlist': 4.0.9(@types/node@20.17.24) - '@inquirer/search': 3.0.9(@types/node@20.17.24) - '@inquirer/select': 4.0.9(@types/node@20.17.24) + '@types/node': 20.17.25 + + '@inquirer/prompts@7.3.2(@types/node@20.17.25)': + dependencies: + '@inquirer/checkbox': 4.1.2(@types/node@20.17.25) + '@inquirer/confirm': 5.1.6(@types/node@20.17.25) + '@inquirer/editor': 4.2.7(@types/node@20.17.25) + '@inquirer/expand': 4.0.9(@types/node@20.17.25) + '@inquirer/input': 4.1.6(@types/node@20.17.25) + '@inquirer/number': 3.0.9(@types/node@20.17.25) + '@inquirer/password': 4.0.9(@types/node@20.17.25) + '@inquirer/rawlist': 4.0.9(@types/node@20.17.25) + '@inquirer/search': 3.0.9(@types/node@20.17.25) + '@inquirer/select': 4.0.9(@types/node@20.17.25) optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/rawlist@4.0.9(@types/node@20.17.24)': + '@inquirer/rawlist@4.0.9(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) + '@inquirer/type': 3.0.4(@types/node@20.17.25) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/search@3.0.9(@types/node@20.17.24)': + '@inquirer/search@3.0.9(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/type': 3.0.4(@types/node@20.17.25) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 - '@inquirer/select@4.0.9(@types/node@20.17.24)': + '@inquirer/select@4.0.9(@types/node@20.17.25)': dependencies: - '@inquirer/core': 10.1.7(@types/node@20.17.24) + '@inquirer/core': 10.1.7(@types/node@20.17.25) '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@20.17.24) + '@inquirer/type': 3.0.4(@types/node@20.17.25) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 '@inquirer/type@1.5.5': dependencies: mute-stream: 1.0.0 - '@inquirer/type@3.0.4(@types/node@20.17.24)': + '@inquirer/type@3.0.4(@types/node@20.17.25)': optionalDependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 '@isaacs/cliui@8.0.2': dependencies: @@ -7255,27 +7255,27 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -7300,7 +7300,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -7318,7 +7318,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.17.24 + '@types/node': 20.17.25 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -7340,7 +7340,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.17.24 + '@types/node': 20.17.25 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -7410,7 +7410,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.17.24 + '@types/node': 20.17.25 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -7438,9 +7438,9 @@ snapshots: '@jsdevtools/ono@7.1.3': {} - '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@20.17.24))': + '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@20.17.25))': dependencies: - '@inquirer/prompts': 7.3.2(@types/node@20.17.24) + '@inquirer/prompts': 7.3.2(@types/node@20.17.25) '@inquirer/type': 1.5.5 '@mdn/browser-compat-data@5.7.5': {} @@ -7629,10 +7629,10 @@ snapshots: tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/esbuild@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/esbuild@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) picocolors: 1.1.1 tinyglobby: 0.2.12 tsconfig-paths: 4.2.0 @@ -7651,10 +7651,10 @@ snapshots: - typescript - verdaccio - '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) @@ -7679,10 +7679,10 @@ snapshots: - typescript - verdaccio - '@nx/eslint@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) eslint: 9.22.0(jiti@2.4.2) semver: 7.7.1 tslib: 2.8.1 @@ -7700,15 +7700,15 @@ snapshots: - supports-color - verdaccio - '@nx/jest@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/jest@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@jest/reporters': 29.7.0 '@jest/test-result': 29.7.0 '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) identity-obj-proxy: 3.0.0 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) jest-resolve: 29.7.0 jest-util: 29.7.0 minimatch: 9.0.3 @@ -7732,7 +7732,7 @@ snapshots: - typescript - verdaccio - '@nx/js@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/js@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) @@ -7762,7 +7762,7 @@ snapshots: semver: 7.7.1 source-map-support: 0.5.19 tinyglobby: 0.2.12 - ts-node: 10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3) + ts-node: 10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3) tsconfig-paths: 4.2.0 tslib: 2.8.1 optionalDependencies: @@ -7808,12 +7808,12 @@ snapshots: '@nx/nx-win32-x64-msvc@0.0.0-pr-30418-4f79396': optional: true - '@nx/plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) - '@nx/eslint': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@nx/jest': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/eslint': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/jest': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) tslib: 2.8.1 transitivePeerDependencies: - '@babel/traverse' @@ -8089,7 +8089,7 @@ snapshots: '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 '@types/eslint-scope@3.7.7': dependencies: @@ -8105,7 +8105,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 '@types/http-cache-semantics@4.0.4': {} @@ -8128,7 +8128,7 @@ snapshots: '@types/lodash@4.17.13': {} - '@types/node@20.17.24': + '@types/node@20.17.25': dependencies: undici-types: 6.19.8 @@ -9081,10 +9081,10 @@ snapshots: commander@8.3.0: {} - commitizen@4.3.1(@types/node@20.17.24)(typescript@5.7.3): + commitizen@4.3.1(@types/node@20.17.25)(typescript@5.7.3): dependencies: cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0(@types/node@20.17.24)(typescript@5.7.3) + cz-conventional-changelog: 3.3.0(@types/node@20.17.25)(typescript@5.7.3) dedent: 0.7.0 detect-indent: 6.1.0 find-node-modules: 2.1.3 @@ -9170,17 +9170,17 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig-typescript-loader@5.1.0(@types/node@20.17.24)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): + cosmiconfig-typescript-loader@5.1.0(@types/node@20.17.25)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): dependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 cosmiconfig: 9.0.0(typescript@5.7.3) jiti: 1.21.6 typescript: 5.7.3 optional: true - cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.24)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): + cosmiconfig-typescript-loader@6.1.0(@types/node@20.17.25)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): dependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 cosmiconfig: 9.0.0(typescript@5.7.3) jiti: 2.4.2 typescript: 5.7.3 @@ -9202,13 +9202,13 @@ snapshots: optionalDependencies: typescript: 5.7.3 - create-jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + create-jest@29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -9225,16 +9225,16 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - cz-conventional-changelog@3.3.0(@types/node@20.17.24)(typescript@5.7.3): + cz-conventional-changelog@3.3.0(@types/node@20.17.25)(typescript@5.7.3): dependencies: chalk: 2.4.2 - commitizen: 4.3.1(@types/node@20.17.24)(typescript@5.7.3) + commitizen: 4.3.1(@types/node@20.17.25)(typescript@5.7.3) conventional-commit-types: 3.0.0 lodash.map: 4.6.0 longest: 2.0.1 word-wrap: 1.2.5 optionalDependencies: - '@commitlint/load': 19.5.0(@types/node@20.17.24)(typescript@5.7.3) + '@commitlint/load': 19.5.0(@types/node@20.17.25)(typescript@5.7.3) transitivePeerDependencies: - '@types/node' - typescript @@ -10274,7 +10274,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3(babel-plugin-macros@3.1.0) @@ -10294,16 +10294,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + jest-cli@29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + create-jest: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-config: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -10313,7 +10313,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + jest-config@29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)): dependencies: '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 @@ -10338,8 +10338,8 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.17.24 - ts-node: 10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3) + '@types/node': 20.17.25 + ts-node: 10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -10368,7 +10368,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -10378,7 +10378,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.17.24 + '@types/node': 20.17.25 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -10417,7 +10417,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -10452,7 +10452,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -10480,7 +10480,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -10526,7 +10526,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -10545,7 +10545,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.17.24 + '@types/node': 20.17.25 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -10554,17 +10554,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.17.24 + '@types/node': 20.17.25 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)): + jest@29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest-cli: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -11994,12 +11994,12 @@ snapshots: dependencies: typescript: 5.7.3 - ts-jest@29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)))(typescript@5.7.3): + ts-jest@29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.17.24)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3)) + jest: 29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -12014,14 +12014,14 @@ snapshots: babel-jest: 29.7.0(@babel/core@7.26.0) esbuild: 0.25.1 - ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.24)(typescript@5.7.3): + ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.17.24 + '@types/node': 20.17.25 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 From 33350253e269696c2f8d1d5f23f0d0d85ce3acbe Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 22 Mar 2025 20:09:43 +1000 Subject: [PATCH 16/23] fix(eslint-plugin-template): [attributes-order] treat inputs without square brackets as attributes (#2316) --- .../docs/rules/attributes-order.md | 128 ++++++++++++++++-- .../src/rules/attributes-order.ts | 28 +++- .../tests/rules/attributes-order/cases.ts | 46 +++++++ 3 files changed, 185 insertions(+), 17 deletions(-) diff --git a/packages/eslint-plugin-template/docs/rules/attributes-order.md b/packages/eslint-plugin-template/docs/rules/attributes-order.md index d3dcf7f0f..f6a9c8465 100644 --- a/packages/eslint-plugin-template/docs/rules/attributes-order.md +++ b/packages/eslint-plugin-template/docs/rules/attributes-order.md @@ -812,13 +812,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -839,13 +842,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -866,13 +872,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -893,13 +902,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -920,13 +932,16 @@ interface Options {
-#### Default Config +#### Custom Config ```json { "rules": { "@angular-eslint/template/attributes-order": [ - "error" + "error", + { + "alphabetical": true + } ] } } @@ -941,6 +956,44 @@ interface Options { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``` +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error", + { + "alphabetical": true, + "order": [ + "ATTRIBUTE_BINDING", + "OUTPUT_BINDING", + "INPUT_BINDING", + "STRUCTURAL_DIRECTIVE", + "TEMPLATE_REFERENCE", + "TWO_WAY_BINDING" + ] + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``` +
@@ -1457,7 +1510,14 @@ interface Options { "error", { "alphabetical": true, - "order": [] + "order": [ + "STRUCTURAL_DIRECTIVE", + "TEMPLATE_REFERENCE", + "ATTRIBUTE_BINDING", + "INPUT_BINDING", + "TWO_WAY_BINDING", + "OUTPUT_BINDING" + ] } ] } @@ -1487,7 +1547,14 @@ interface Options { "error", { "alphabetical": true, - "order": [] + "order": [ + "STRUCTURAL_DIRECTIVE", + "TEMPLATE_REFERENCE", + "ATTRIBUTE_BINDING", + "INPUT_BINDING", + "TWO_WAY_BINDING", + "OUTPUT_BINDING" + ] } ] } @@ -1502,6 +1569,43 @@ interface Options {
``` +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/attributes-order": [ + "error", + { + "alphabetical": true, + "order": [ + "ATTRIBUTE_BINDING", + "OUTPUT_BINDING", + "INPUT_BINDING", + "STRUCTURAL_DIRECTIVE", + "TEMPLATE_REFERENCE", + "TWO_WAY_BINDING" + ] + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +
+``` +
diff --git a/packages/eslint-plugin-template/src/rules/attributes-order.ts b/packages/eslint-plugin-template/src/rules/attributes-order.ts index 76c677cc1..70f7f291b 100644 --- a/packages/eslint-plugin-template/src/rules/attributes-order.ts +++ b/packages/eslint-plugin-template/src/rules/attributes-order.ts @@ -15,7 +15,7 @@ import { TmplAstTemplate, } from '@angular-eslint/bundled-angular-compiler'; import { getTemplateParserServices } from '@angular-eslint/utils'; -import type { TSESTree } from '@typescript-eslint/utils'; +import type { TSESTree, TSESLint } from '@typescript-eslint/utils'; import { createESLintRule } from '../utils/create-eslint-rule'; export enum OrderType { @@ -63,6 +63,7 @@ interface SortableAttribute { readonly orderType: OrderType; readonly fromHtmlParser?: boolean; readonly isI18nForAttribute?: boolean; + readonly isBracketed?: boolean; } export type MessageIds = 'attributesOrder'; @@ -134,7 +135,11 @@ export default createESLintRule({ if (isImplicitTemplate(node)) { return; } - const allAttributes = getAllAttributes(node, context.filename); + const allAttributes = getAllAttributes( + node, + context.filename, + context.sourceCode, + ); if (allAttributes.length < 2) { return; @@ -239,6 +244,7 @@ function getOrderIndex(attr: SortableAttribute, order: readonly OrderType[]) { function getAllAttributes( node: ExtendedTmplAstElement | TmplAstTemplate, filename: string, + sourceCode: Readonly, ): SortableAttribute[] { // If there are any i18n attributes (either associated with the // element itself, or with any attribute or input), then we need @@ -249,14 +255,26 @@ function getAllAttributes( } const { attributes, inputs, outputs, references } = node; const extendedInputs: ExtendedTmplAstBoundAttribute[] = []; + const attributeBindings: ExtendedTmplAstTextAttribute[] = []; + for (const input of inputs) { if (input.i18n) { return getAttributesFromHtmlParser(node, filename, node.inputs); } - extendedInputs.push(toInputBindingOrderType(input)); + + // Some attributes are parsed as inputs by the Angular template parser, + // but they don't have square brackets. We don't want those attributes + // to be classified as inputs because they look like regular attributes. + // The name of the input will never include the square brackets, so we + // need to look at the source. Unfortunately, the key span also doesn't + // include the square brackets, so the source span is what we need to use. + if (sourceCode.text.at(input.sourceSpan.start.offset) === '[') { + extendedInputs.push(toInputBindingOrderType(input)); + } else { + attributeBindings.push(toAttributeBindingOrderType(input)); + } } - const attributeBindings: ExtendedTmplAstTextAttribute[] = []; for (const attribute of attributes) { if (attribute.i18n) { return getAttributesFromHtmlParser(node, filename, node.inputs); @@ -280,7 +298,7 @@ function getAllAttributes( } function toAttributeBindingOrderType( - attribute: TmplAstTextAttribute | TmplAstVariable, + attribute: TmplAstTextAttribute | TmplAstVariable | TmplAstBoundAttribute, ) { return { ...attribute, diff --git a/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts b/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts index af6637484..d1cab3bcb 100644 --- a/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts +++ b/packages/eslint-plugin-template/tests/rules/attributes-order/cases.ts @@ -63,6 +63,22 @@ export const valid: readonly (string | ValidTestCase)[] = [ }, ], }, + { + code: '
', + options: [ + { + alphabetical: true, + order: [ + OrderType.AttributeBinding, + OrderType.OutputBinding, + OrderType.InputBinding, + OrderType.StructuralDirective, + OrderType.TemplateReferenceVariable, + OrderType.TwoWayBinding, + ], + }, + ], + }, ]; export const invalid: readonly InvalidTestCase[] = [ @@ -622,4 +638,34 @@ export const invalid: readonly InvalidTestCase[] = [ `, }), + convertAnnotatedSourceToFailureCase({ + messageId, + description: + 'should treat attribute with dynamic value as an attribute binding', + annotatedSource: ` +
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + `, + options: [ + { + alphabetical: true, + order: [ + OrderType.AttributeBinding, + OrderType.OutputBinding, + OrderType.InputBinding, + OrderType.StructuralDirective, + OrderType.TemplateReferenceVariable, + OrderType.TwoWayBinding, + ], + }, + ], + data: { + expected: '`beta`, `(gamma)`', + actual: '`(gamma)`, `beta`', + }, + annotatedOutput: ` +
+ + `, + }), ]; From 2ea4b0d5329a02d8dd10d0257051477f7ca85f8d Mon Sep 17 00:00:00 2001 From: Dave Date: Sat, 22 Mar 2025 20:23:41 +1000 Subject: [PATCH 17/23] feat(eslint-plugin-template): add rule prefer-contextual-for-variables (#2311) --- .../src/configs/template-all.ts | 1 + packages/eslint-plugin-template/README.md | 1 + .../rules/prefer-contextual-for-variables.md | 4223 +++++++++++++++++ .../src/configs/all.json | 1 + packages/eslint-plugin-template/src/index.ts | 4 + .../rules/prefer-contextual-for-variables.ts | 698 +++ .../src/utils/are-equivalent-asts.ts | 190 + .../prefer-contextual-for-variables/cases.ts | 670 +++ .../prefer-contextual-for-variables/spec.ts | 16 + .../tests/utils/are-equivalent-asts.spec.ts | 751 +++ 10 files changed, 6555 insertions(+) create mode 100644 packages/eslint-plugin-template/docs/rules/prefer-contextual-for-variables.md create mode 100644 packages/eslint-plugin-template/src/rules/prefer-contextual-for-variables.ts create mode 100644 packages/eslint-plugin-template/src/utils/are-equivalent-asts.ts create mode 100644 packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/cases.ts create mode 100644 packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/spec.ts create mode 100644 packages/eslint-plugin-template/tests/utils/are-equivalent-asts.spec.ts diff --git a/packages/angular-eslint/src/configs/template-all.ts b/packages/angular-eslint/src/configs/template-all.ts index 5368f3fb7..dc6bf4894 100644 --- a/packages/angular-eslint/src/configs/template-all.ts +++ b/packages/angular-eslint/src/configs/template-all.ts @@ -38,6 +38,7 @@ export default ( '@angular-eslint/template/no-interpolation-in-attributes': 'error', '@angular-eslint/template/no-negated-async': 'error', '@angular-eslint/template/no-positive-tabindex': 'error', + '@angular-eslint/template/prefer-contextual-for-variables': 'error', '@angular-eslint/template/prefer-control-flow': 'error', '@angular-eslint/template/prefer-ngsrc': 'error', '@angular-eslint/template/prefer-self-closing-tags': 'error', diff --git a/packages/eslint-plugin-template/README.md b/packages/eslint-plugin-template/README.md index a39858eb6..8002ed741 100644 --- a/packages/eslint-plugin-template/README.md +++ b/packages/eslint-plugin-template/README.md @@ -61,6 +61,7 @@ Please see https://github.com/angular-eslint/angular-eslint for full usage instr | [`no-interpolation-in-attributes`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-interpolation-in-attributes.md) | Ensures that property-binding is used instead of interpolation in attributes. | | | | | | [`no-negated-async`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-negated-async.md) | Ensures that async pipe results, as well as values used with the async pipe, are not negated | :white_check_mark: | | :bulb: | | | [`no-positive-tabindex`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-positive-tabindex.md) | Ensures that the `tabindex` attribute is not positive | | | :bulb: | | +| [`prefer-contextual-for-variables`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/prefer-contextual-for-variables.md) | Ensures that contextual variables are used in @for blocks where possible instead of aliasing them. | | :wrench: | | | | [`prefer-control-flow`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/prefer-control-flow.md) | Ensures that the built-in control flow is used. | | | | | | [`prefer-ngsrc`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/prefer-ngsrc.md) | Ensures ngSrc is used instead of src for img elements | | | | | | [`role-has-required-aria`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/role-has-required-aria.md) | [Accessibility] Ensures elements with ARIA roles have all required properties for that role. | | | :bulb: | :accessibility: | diff --git a/packages/eslint-plugin-template/docs/rules/prefer-contextual-for-variables.md b/packages/eslint-plugin-template/docs/rules/prefer-contextual-for-variables.md new file mode 100644 index 000000000..a255e1d3c --- /dev/null +++ b/packages/eslint-plugin-template/docs/rules/prefer-contextual-for-variables.md @@ -0,0 +1,4223 @@ + + +
+ +# `@angular-eslint/template/prefer-contextual-for-variables` + +Ensures that contextual variables are used in @for blocks where possible instead of aliasing them. + +- Type: suggestion +- 🔧 Supports autofix (`--fix`) + +
+ +## Rule Options + +The rule accepts an options object with the following properties: + +```ts +interface Options { + /** + * Default: `{"$count":[],"$index":[],"$first":[],"$last":[],"$even":[],"$odd":[]}` + */ + allowedAliases?: { + /** + * Aliases for $count that are allowed to be used. + */ + $count?: string[]; + /** + * Aliases for $index that are allowed to be used. + */ + $index?: string[]; + /** + * Aliases for $first that are allowed to be used. + */ + $first?: string[]; + /** + * Aliases for $last that are allowed to be used. + */ + $last?: string[]; + /** + * Aliases for $even that are allowed to be used. + */ + $even?: string[]; + /** + * Aliases for $odd that are allowed to be used. + */ + $odd?: string[]; + [k: string]: unknown; + }; +} + +``` + +
+ +## Usage Examples + +> The following examples are generated automatically from the actual unit tests within the plugin, so you can be assured that their behavior is accurate based on the current commit. + +
+ +
+❌ - Toggle examples of incorrect code for this rule + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let index = $index) {} + ~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $index) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let count = $count) {} + ~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $count) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let first = $first) {} + ~~~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $first) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let last = $last) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $last) {} + ~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let even = $even) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $even) {} + ~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let odd = $odd) {} + ~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $odd) {} + ~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$index": [ + "foo" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let bar = $index) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$count": [ + "foo" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let bar = $count) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$first": [ + "foo" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let bar = $first) {} + ~~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$last": [ + "foo" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let bar = $last) {} + ~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$even": [ + "foo" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let bar = $even) {} + ~~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$odd": [ + "foo" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let bar = $odd) {} + ~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$index": [ + "a" + ], + "$count": [ + "b" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let x = $even, a = $index, b = $count) {,} + ~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$index": [ + "a" + ], + "$count": [ + "b" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let a = $index, x = $even, b = $count) {,} + ~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$index": [ + "a" + ], + "$count": [ + "b" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let a = $index, b = $count, x = $even) {,} + ~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$count": [ + "b" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let a = $index, b = $count, x = $even) {,} + ~~~~~~~~~~ ~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$count": [ + "b" + ] + } + } + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let a = $index, x = $even, b = $count) {,} + ~~~~~~~~~~ ~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let a = $index, b = $even, c = $count) {,} + ~~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~~~ +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $index) { + ~~~~~~~~~~~~ + {{ foo }} + {{ foo + 1 }} + +
+ @if (foo) {} + @switch (foo) {} + @let bar = foo + 1; +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $count) { + ~~~~~~~~~~~~ + {{ foo }} + {{ foo + 1 }} + +
+ @if (foo) {} + @switch (foo) {} + @let bar = foo + 1; +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $first) { + ~~~~~~~~~~~~ + {{ foo }} + {{ foo + 1 }} + +
+ @if (foo) {} + @switch (foo) {} + @let bar = foo + 1; +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $last) { + ~~~~~~~~~~~ + {{ foo }} + {{ foo + 1 }} + +
+ @if (foo) {} + @switch (foo) {} + @let bar = foo + 1; +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $even) { + ~~~~~~~~~~~ + {{ foo }} + {{ foo + 1 }} + +
+ @if (foo) {} + @switch (foo) {} + @let bar = foo + 1; +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id; let foo = $odd) { + ~~~~~~~~~~ + {{ foo }} + {{ foo + 1 }} + +
+ @if (foo) {} + @switch (foo) {} + @let bar = foo + 1; +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + {{ $index + 1 }} of {{ items.length }} + ~~~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items(); track item.id) { + {{ $index + 1 }} of {{ items().length }} + ~~~~~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index === 0) { + ~~~~~~~~~~~~ + first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index == 0) { + ~~~~~~~~~~~ + first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 === $index) { + ~~~~~~~~~~~~ + first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 == $index) { + ~~~~~~~~~~~ + first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index > 0) { + ~~~~~~~~~~ + not first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index !== 0) { + ~~~~~~~~~~~~ + not first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index != 0) { + ~~~~~~~~~~~ + not first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 < $index) { + ~~~~~~~~~~ + not first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 !== $index) { + ~~~~~~~~~~~~ + not first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 != $index) { + ~~~~~~~~~~~ + not first item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index + 1 === $count) { + ~~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index + 1 == $count) { + ~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index === $count - 1) { + ~~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index == $count - 1) { + ~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count === $index + 1) { + ~~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count == $index + 1) { + ~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count - 1 === $index) { + ~~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count - 1 == $index) { + ~~~~~~~~~~~~~~~~~~~~ + last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index + 1 < $count) { + ~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index + 1 !== $count) { + ~~~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index < $count - 1) { + ~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index !== $count - 1) { + ~~~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count > $index + 1) { + ~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count !== $index + 1) { + ~~~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count - 1 > $index) { + ~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($count - 1 !== $index) { + ~~~~~~~~~~~~~~~~~~~~~ + not last item + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (!($index % 2)) { + ~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 === 0) { + ~~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 == 0) { + ~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 !== 1) { + ~~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 != 1) { + ~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 < 1) { + ~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 === $index % 2) { + ~~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 == $index % 2) { + ~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (1 !== $index % 2) { + ~~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (1 !== $index % 2) { + ~~~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (1 > $index % 2) { + ~~~~~~~~~~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (!$odd) { + ~~~~~ + is even + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 === 1) { + ~~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 == 1) { + ~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 !== 0) { + ~~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 != 0) { + ~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2 > 0) { + ~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (1 === $index % 2) { + ~~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (1 == $index % 2) { + ~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 !== $index % 2) { + ~~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 != $index % 2) { + ~~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (0 < $index % 2) { + ~~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (!$even) { + ~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if (!!($index % 2)) { + ~~~~~~~~~~~~~ + is odd + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + {{ foo && $index % 2 }} + ~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 && foo }} + ~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 ? 1 : 2 }} + ~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (item of items; track item.id) { + @if ($index % 2) {} + ~~~~~~~~~~ +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ❌ Invalid Code + +```html +@for (a of outer; track a.id) { + @if ($index === 0) { + ~~~~~~~~~~~~ + first outer + } + @for (b of inner; track b.id) { + @if ($index === 0) { + ~~~~~~~~~~~~ + first inner + } + } +} +``` + +
+ +
+ +--- + +
+ +
+✅ - Toggle examples of correct code for this rule + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track $index) {} +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$index": [ + "alpha", + "beta", + "gamma" + ] + } + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id; let beta = $index) {} +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$count": [ + "alpha", + "beta", + "gamma" + ] + } + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id; let beta = $count) {} +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$first": [ + "alpha", + "beta", + "gamma" + ] + } + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id; let beta = $first) {} +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$last": [ + "alpha", + "beta", + "gamma" + ] + } + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id; let beta = $last) {} +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$even": [ + "alpha", + "beta", + "gamma" + ] + } + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id; let beta = $even) {} +``` + +
+ +--- + +
+ +#### Custom Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error", + { + "allowedAliases": { + "$odd": [ + "alpha", + "beta", + "gamma" + ] + } + } + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id; let beta = $odd) {} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $index) { + @for (b of inner; track b.id) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $count) { + @for (b of inner; track b.id) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $first) { + @for (b of inner; track b.id) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $last) { + @for (b of inner; track b.id) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $even) { + @for (b of inner; track b.id) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $odd) { + @for (b of inner; track b.id) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id) { + @for (b of inner; track b.id; let innerVar = $index) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id) { + @for (b of inner; track b.id; let innerVar = $count) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id) { + @for (b of inner; track b.id; let innerVar = $first) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id) { + @for (b of inner; track b.id; let innerVar = $last) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id) { + @for (b of inner; track b.id; let innerVar = $even) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id) { + @for (b of inner; track b.id; let innerVar = $odd) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $index) { + @for (b of inner; track b.id; let innerVar = $index) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $count) { + @for (b of inner; track b.id; let innerVar = $count) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $first) { + @for (b of inner; track b.id; let innerVar = $first) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $last) { + @for (b of inner; track b.id; let innerVar = $last) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $even) { + @for (b of inner; track b.id; let innerVar = $even) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id; let outerVar = $odd) { + @for (b of inner; track b.id; let innerVar = $odd) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) {} +{{ items.length }} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer; track a.id) { + @for (b of inner; track b.id) { + {{ outer.length }} + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (a of outer(); track a.id) { + @for (b of inner(); track b.id) { + {{ outer().length }} + } +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ this.$index === 0 }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index === this.$count - 1 }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) {} +{{ $index % 2 === 0 }} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) {} +{{ $index % 2 !== 0 }} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) {} +{{ !$even }} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) {} +{{ !$odd }} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + @if (this.$index % 2 === 0) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + @if (this.$index % 2 !== 0) {} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ !this.$even }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ !this.$odd }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 === foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 !== foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 >= foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 > foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 <= foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 < foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 + foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 - foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 * foo }} +} +``` + +
+ +--- + +
+ +#### Default Config + +```json +{ + "rules": { + "@angular-eslint/template/prefer-contextual-for-variables": [ + "error" + ] + } +} +``` + +
+ +#### ✅ Valid Code + +```html +@for (item of items; track item.id) { + {{ $index % 2 / foo }} +} +``` + +
+ +
diff --git a/packages/eslint-plugin-template/src/configs/all.json b/packages/eslint-plugin-template/src/configs/all.json index 5ff375c0b..ef987c2aa 100644 --- a/packages/eslint-plugin-template/src/configs/all.json +++ b/packages/eslint-plugin-template/src/configs/all.json @@ -24,6 +24,7 @@ "@angular-eslint/template/no-interpolation-in-attributes": "error", "@angular-eslint/template/no-negated-async": "error", "@angular-eslint/template/no-positive-tabindex": "error", + "@angular-eslint/template/prefer-contextual-for-variables": "error", "@angular-eslint/template/prefer-control-flow": "error", "@angular-eslint/template/prefer-ngsrc": "error", "@angular-eslint/template/prefer-self-closing-tags": "error", diff --git a/packages/eslint-plugin-template/src/index.ts b/packages/eslint-plugin-template/src/index.ts index c7fa19293..cb2b1ce72 100644 --- a/packages/eslint-plugin-template/src/index.ts +++ b/packages/eslint-plugin-template/src/index.ts @@ -64,6 +64,9 @@ import noPositiveTabindex, { import preferNgsrc, { RULE_NAME as preferNgsrcRuleName, } from './rules/prefer-ngsrc'; +import preferContextualForVariables, { + RULE_NAME as preferContextualForVariablesRuleName, +} from './rules/prefer-contextual-for-variables'; import preferControlFlow, { RULE_NAME as preferControlFlowRuleName, } from './rules/prefer-control-flow'; @@ -115,6 +118,7 @@ export = { [noInterpolationInAttributesRuleName]: noInterpolationInAttributes, [noNegatedAsyncRuleName]: noNegatedAsync, [noPositiveTabindexRuleName]: noPositiveTabindex, + [preferContextualForVariablesRuleName]: preferContextualForVariables, [preferControlFlowRuleName]: preferControlFlow, [preferSelfClosingTagsRuleName]: preferSelfClosingTags, [preferStaticStringPropertiesRuleName]: preferStaticStringProperties, diff --git a/packages/eslint-plugin-template/src/rules/prefer-contextual-for-variables.ts b/packages/eslint-plugin-template/src/rules/prefer-contextual-for-variables.ts new file mode 100644 index 000000000..91ba2acf0 --- /dev/null +++ b/packages/eslint-plugin-template/src/rules/prefer-contextual-for-variables.ts @@ -0,0 +1,698 @@ +import { + AST, + ASTWithSource, + Binary, + Conditional, + ImplicitReceiver, + LiteralPrimitive, + PrefixNot, + PropertyRead, + TmplAstIfBlockBranch, + type TmplAstForLoopBlock, + type TmplAstVariable, +} from '@angular-eslint/bundled-angular-compiler'; +import { getTemplateParserServices } from '@angular-eslint/utils'; +import { createESLintRule } from '../utils/create-eslint-rule'; +import { TSESTree } from '@typescript-eslint/utils'; +import { SourceCode } from '@typescript-eslint/utils/ts-eslint'; +import { areEquivalentASTs } from '../utils/are-equivalent-asts'; + +export type Options = [ + { + readonly allowedAliases?: { + $count?: readonly string[]; + $index?: readonly string[]; + $first?: readonly string[]; + $last?: readonly string[]; + $even?: readonly string[]; + $odd?: readonly string[]; + }; + }, +]; +export type MessageIds = + | 'preferContextualVariable' + | 'preferCount' + | 'preferFirst' + | 'preferLast' + | 'preferEven' + | 'preferOdd'; +export const RULE_NAME = 'prefer-contextual-for-variables'; +const DEFAULT_OPTIONS: Options[number] = { + allowedAliases: { + $count: [], + $index: [], + $first: [], + $last: [], + $even: [], + $odd: [], + }, +}; +const EQUALITY_OPERATORS = ['===', '==']; +const INEQUALITY_OPERATORS = ['!==', '!=']; +const LOGICAL_OPERATORS = ['&&', '||']; +export default createESLintRule({ + name: RULE_NAME, + meta: { + type: 'suggestion', + docs: { + description: + 'Ensures that contextual variables are used in @for blocks where possible instead of aliasing them.', + }, + fixable: 'code', + schema: [ + { + type: 'object', + properties: { + allowedAliases: { + type: 'object', + properties: { + $count: { + type: 'array', + items: { type: 'string' }, + description: 'Aliases for $count that are allowed to be used.', + }, + $index: { + type: 'array', + items: { type: 'string' }, + description: 'Aliases for $index that are allowed to be used.', + }, + $first: { + type: 'array', + items: { type: 'string' }, + description: 'Aliases for $first that are allowed to be used.', + }, + $last: { + type: 'array', + items: { type: 'string' }, + description: 'Aliases for $last that are allowed to be used.', + }, + $even: { + type: 'array', + items: { type: 'string' }, + description: 'Aliases for $even that are allowed to be used.', + }, + $odd: { + type: 'array', + items: { type: 'string' }, + description: 'Aliases for $odd that are allowed to be used.', + }, + }, + }, + }, + additionalProperties: false, + }, + ], + messages: { + preferContextualVariable: + "Use the '{{name}}' contextual variable instead of aliasing it.", + preferCount: "Use '$count' instead of '{{ expression }}'.", + preferFirst: "Use '$first' instead of '{{ expression }}'.", + preferLast: "Use '$last' instead of '{{ expression }}'.", + preferEven: "Use '$even' instead of '{{ expression }}'.", + preferOdd: "Use '$odd' instead of '{{ expression }}'.", + }, + }, + defaultOptions: [DEFAULT_OPTIONS], + create(context, [{ allowedAliases }]) { + const parserServices = getTemplateParserServices(context); + const forLoops: ForLoopInfo[] = []; + + function reportSimplifications( + messageId: SimplificationMessageIds, + forLoop: ForLoopInfo, + ): void { + const simplifications = forLoop.simplifications?.[messageId]; + if (!simplifications) { + return; + } + const sourceCode = context.sourceCode; + for (const simplification of simplifications) { + context.report({ + messageId, + loc: { + start: sourceCode.getLocFromIndex(simplification.range[0]), + end: sourceCode.getLocFromIndex(simplification.range[1]), + }, + data: { + expression: context.sourceCode.text.slice( + simplification.range[0], + simplification.range[1], + ), + }, + fix: (fixer) => + fixer.replaceTextRange( + simplification.range, + simplification.replacement, + ), + }); + } + } + + return { + ForLoopBlock(node: TmplAstForLoopBlock) { + // We need to know if there are nested for loops before we + // can report any problems. When there are nested for loops, + // aliasing will be required to access the outer contextual + // variables from within the inner loop, so we won't report + // any problems when there are nested for loops. + const nested = forLoops.length > 0; + if (nested) { + forLoops[forLoops.length - 1].canAlias = true; + } + + // All contextual variables are defined, but + // only aliased variables have a value span. + const variables = node.contextVariables.filter((x) => x.valueSpan); + forLoops.push({ + canAlias: nested, + source: node.expression.ast, + variables, + references: + // Don't bother creating a map of variable + // references if there are no variables to track. + variables.length > 0 + ? new Map(variables.map((variable) => [variable.name, []])) + : undefined, + }); + }, + 'ForLoopBlock:exit'() { + const forLoop = forLoops.pop(); + if (!forLoop) { + return; + } + + if (!forLoop.canAlias) { + const problems: Problem[] = []; + for (const [index, variable] of forLoop.variables.entries()) { + const allowed = getAllowedAliases(allowedAliases, variable.value); + if (allowed === undefined || !allowed.includes(variable.name)) { + problems.push({ + index, + variable, + loc: parserServices.convertNodeSourceSpanToLoc( + variable.sourceSpan, + ), + }); + } + } + + for (const problem of problems) { + context.report({ + messageId: 'preferContextualVariable', + loc: problem.loc, + data: { name: problem.variable.value }, + fix: function* (fixer) { + yield fixer.removeRange( + getVariableRangeToRemove( + problem, + context.sourceCode, + forLoop.variables.length, + ), + ); + + // Replace any references to the alias + // with the contextual variable name. + const references = forLoop.references?.get( + problem.variable.name, + ); + if (references) { + for (const reference of references) { + yield fixer.replaceTextRange( + reference, + problem.variable.value, + ); + } + } + }, + }); + } + } + + if (forLoop.simplifications) { + reportSimplifications('preferCount', forLoop); + reportSimplifications('preferFirst', forLoop); + reportSimplifications('preferLast', forLoop); + reportSimplifications('preferEven', forLoop); + reportSimplifications('preferOdd', forLoop); + } + }, + PropertyRead(node: PropertyRead) { + // Get the information for the inner-most for loop (which will be + // the last one in the array) so that we can record the usage of + // aliases and expressions using contextual variables that can be + // simplified. We only need the inner-most for loop because we + // don't remove aliases when there are nested for loops (meaning + // we don't need to record alias usage for the outer for loop), and + // any contextual variables will only reference the inner most loop. + const forLoop = forLoops.at(-1); + if (!forLoop) { + return; + } + + // Record any references to aliased variables so + // that we can replace them if we remove the alias. + forLoop.references + ?.get(node.name) + ?.push([node.sourceSpan.start, node.sourceSpan.end]); + + // If the `length` property is being read from the same + // value that was used as the source of the for loop, then + // we can simplify that to just use the `$count` variable. + if ( + node.name === 'length' && + areEquivalentASTs(node.receiver, forLoop.source) + ) { + recordSimplification(node, forLoop, 'preferCount', '$count'); + } + }, + Binary(node: Binary) { + const forLoop = forLoops.at(-1); + if (!forLoop) { + return; + } + + if (isIndex(node.left)) { + if (isZero(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `$index === 0` can be simplified to `$first`. + recordSimplification(node, forLoop, 'preferFirst', '$first'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '>' + ) { + // `$index !== 0` or `$index > 0` can be simplified to `!$first`. + recordSimplification(node, forLoop, 'preferFirst', '!$first'); + } + } else if (isCountMinusOne(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `$index === ($count - 1)` can be simplified to `$last`. + recordSimplification(node, forLoop, 'preferLast', '$last'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '<' + ) { + // `$index !== ($count - 1)` or `$index < ($count - 1)` + // can be simplified to `!$last`. + recordSimplification(node, forLoop, 'preferLast', '!$last'); + } + } + } else if (isZero(node.left)) { + if (isIndex(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `0 === $index` can be simplified to `$first`. + recordSimplification(node, forLoop, 'preferFirst', '$first'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '<' + ) { + // `0 !== $index` or `0 < $index` can be simplified to `!$first`. + recordSimplification(node, forLoop, 'preferFirst', '!$first'); + } + } else if (isIndexModTwo(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `0 == ($index % 2)` can be simplified to `$even`. + recordSimplification(node, forLoop, 'preferEven', '$even'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '<' + ) { + // `0 !== ($index % 2)` or `0 < ($index % 2)` + // can be simplified to `$odd`. + recordSimplification(node, forLoop, 'preferOdd', '$odd'); + } + } + } else if (isOne(node.left)) { + if (isIndexModTwo(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `1 === ($index % 2)` can be simplified to `$odd`. + recordSimplification(node, forLoop, 'preferOdd', '$odd'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '>' + ) { + // `1 !== ($index % 2)` or `1 > ($index % 2)` + // can be simplified to `$even`. + recordSimplification(node, forLoop, 'preferEven', '$even'); + } + } + } else if (isCount(node.left)) { + if (isIndexPlusOne(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `$count === ($index + 1)` can be simplified to `$last`. + recordSimplification(node, forLoop, 'preferLast', '$last'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '>' + ) { + // `$count !== ($index + 1)` or `$count > ($index + 1)` + // can be simplified to `!$last`. + recordSimplification(node, forLoop, 'preferLast', '!$last'); + } + } + } else if (isIndexPlusOne(node.left)) { + if (isCount(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `($index + 1) === $count` can be simplified to `$last`. + recordSimplification(node, forLoop, 'preferLast', '$last'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '<' + ) { + // `($index + 1) !== $count` or `($index + 1) < $count` + // can be simplified to `!$last`. + recordSimplification(node, forLoop, 'preferLast', '!$last'); + } + } + } else if (isCountMinusOne(node.left)) { + if (isIndex(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `($count - 1) === $index` can be simplified to `$last`. + recordSimplification(node, forLoop, 'preferLast', '$last'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '>' + ) { + // `($count - 1) !== $index` or `($count - 1) > $index` + // can be simplified to `!$last`. + recordSimplification(node, forLoop, 'preferLast', '!$last'); + } + } + } else if (isIndexModTwo(node.left)) { + if (isZero(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `($index % 2) === 0` can be simplified to `$even`. + recordSimplification(node, forLoop, 'preferEven', '$even'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '>' + ) { + // `($index % 2) !== 0` or `($index % 2) > 0` + // can be simplified to `$odd`. + recordSimplification(node, forLoop, 'preferOdd', '$odd'); + } + } else if (isOne(node.right)) { + if (EQUALITY_OPERATORS.includes(node.operation)) { + // `($index % 2) === 1` can be simplified to `$odd`. + recordSimplification(node, forLoop, 'preferOdd', '$odd'); + } else if ( + INEQUALITY_OPERATORS.includes(node.operation) || + node.operation === '<' + ) { + // `($index % 2) !== 1` or `($index % 2) < 1` + // can be simplified to `$even`. + recordSimplification(node, forLoop, 'preferEven', '$even'); + } + } else if (LOGICAL_OPERATORS.includes(node.operation)) { + // `$index % 2` can be used to test if `$index` is odd, but it + // results in a number, so we can only simplify it when it is + // being used as a truthy value. Because it's on the left-hand + // side of a logical binary expression, we can simplify it. + recordSimplification(node.left, forLoop, 'preferOdd', '$odd'); + } + } + + if ( + isIndexModTwo(node.right) && + LOGICAL_OPERATORS.includes(node.operation) + ) { + // As we did with the left-hand side above, when `$index % 2` + // is used as a truthy value on the right-hand side + // of a logical binary expression, we can simplify it. + recordSimplification(node.right, forLoop, 'preferOdd', '$odd'); + } + }, + PrefixNot(node: PrefixNot) { + const forLoop = forLoops.at(-1); + if (!forLoop) { + return; + } + + if (isOdd(node.expression) || isIndexModTwo(node.expression)) { + // `!$odd` or `!($index % 2)` can be simplified to `$even`. + recordSimplification(node, forLoop, 'preferEven', '$even'); + } else if (isEven(node.expression)) { + // `!$even` can be simplified to `$odd`. + recordSimplification(node, forLoop, 'preferOdd', '$odd'); + } + }, + Conditional(node: Conditional) { + const forLoop = forLoops.at(-1); + if (!forLoop) { + return; + } + + // If the condition is `$index % 2`, then it's being + // used as a truthy value and we can simplify it. + if (isIndexModTwo(node.condition)) { + recordSimplification(node.condition, forLoop, 'preferOdd', '$odd'); + } + }, + IfBlockBranch(node: TmplAstIfBlockBranch) { + const forLoop = forLoops.at(-1); + if (!forLoop) { + return; + } + + // If the expression is `$index % 2`, then it's being + // used as a truthy value and we can simplify it. + if (node.expression) { + let expression = node.expression; + if (expression instanceof ASTWithSource) { + expression = expression.ast; + } + if (isIndexModTwo(expression)) { + recordSimplification(expression, forLoop, 'preferOdd', '$odd'); + } + } + }, + }; + }, +}); + +function getAllowedAliases( + allowedAliases: Options[number]['allowedAliases'], + variableName: string, +): readonly string[] | undefined { + if (allowedAliases && variableName in allowedAliases) { + return allowedAliases[variableName as keyof typeof allowedAliases]; + } + return undefined; +} + +function getVariableRangeToRemove( + problem: Problem, + sourceCode: SourceCode, + variableCount: number, +): TSESTree.Range { + let start = problem.variable.sourceSpan.start.offset; + let end = problem.variable.sourceSpan.end.offset; + if (variableCount === 1) { + // There's only one variable defined, so we + // want to remove the `let` keyword as well. + const letIndex = getStartOfPreviousToken('let', start, sourceCode); + if (letIndex !== undefined) { + // We also want to remove the preceding semicolon. + start = getStartOfPreviousToken(';', letIndex, sourceCode) ?? letIndex; + } + } else if (problem.index === 0) { + // There are multiple variables, but we're removing + // the first one. We need to keep the `let` keyword, but + // remove the trailing comma and any whitespace after it. + const commaIndex = getStartOfNextToken(',', end, sourceCode); + if (commaIndex !== undefined) { + // The range to remove is end-exclusive, so we + // need to add one to remove the comma. + end = getIndexOfNextNonWhitespace(commaIndex + 1, sourceCode); + } + } else { + // There is a variable before this one, so we + // need to remove the preceding comma as well. + start = getStartOfPreviousToken(',', start, sourceCode) ?? start; + } + + return [start, end]; +} + +function getStartOfPreviousToken( + tokenToFind: string, + startIndex: number, + sourceCode: SourceCode, +): number | undefined { + const text = sourceCode.text; + for (let i = startIndex - tokenToFind.length; i >= 0; i--) { + if (text.slice(i, i + tokenToFind.length) === tokenToFind) { + return i; + } + } + return undefined; +} + +function getStartOfNextToken( + tokenToFind: string, + startIndex: number, + sourceCode: SourceCode, +): number | undefined { + const text = sourceCode.text; + for (let i = startIndex; i < text.length; i++) { + if (text.slice(i, i + tokenToFind.length) === tokenToFind) { + return i; + } + } + return undefined; +} + +function getIndexOfNextNonWhitespace( + startIndex: number, + sourceCode: SourceCode, +): number { + const text = sourceCode.text; + let index = startIndex; + while (index < text.length) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + if (!/\s/.test(text.at(index)!)) { + return index; + } + index++; + } + return text.length; +} + +function recordSimplification( + node: AST, + forLoop: ForLoopInfo, + type: keyof Simplifications, + replacement: string, +) { + // Most of the time we won't find anything to simplify because + // we would have simplified everything on the previous passes, + // so we delay-create this to reduce memory allocations. + if (!forLoop.simplifications) { + forLoop.simplifications = {}; + } + + let nodes = forLoop.simplifications[type]; + if (!nodes) { + nodes = []; + forLoop.simplifications[type] = nodes; + } + nodes.push({ + range: [node.sourceSpan.start, node.sourceSpan.end], + replacement, + }); +} + +function isIndex(node: AST): boolean { + return isContextualVariable(node, '$index'); +} + +function isIndexPlusOne(node: AST): boolean { + if (node instanceof Binary) { + if (node.operation === '+') { + if (isIndex(node.left)) { + return isOne(node.right); + } else { + return isIndex(node.right) && isOne(node.left); + } + } + } + + return false; +} + +function isIndexModTwo(node: AST): boolean { + return ( + node instanceof Binary && + node.operation === '%' && + isIndex(node.left) && + isTwo(node.right) + ); +} + +function isCount(node: AST): boolean { + return isContextualVariable(node, '$count'); +} + +function isCountMinusOne(node: AST): boolean { + if (node instanceof Binary) { + if (node.operation === '-') { + if (isCount(node.left)) { + return isOne(node.right); + } else { + return isCount(node.right) && isOne(node.left); + } + } + } + + return false; +} + +function isEven(node: AST): boolean { + return isContextualVariable(node, '$even'); +} + +function isOdd(node: AST): boolean { + return isContextualVariable(node, '$odd'); +} + +function isContextualVariable( + node: AST, + name: '$index' | '$count' | '$first' | '$last' | '$even' | '$odd', +) { + return ( + node instanceof PropertyRead && + node.name === name && + // The contextual variable must be accessed implicitly. + // That is, `this.$index` is not a contextual variable. + // Note that `ThisReceiver` extends `ImplicitReceiver`, so we + // need to check that the receiver is exactly an `ImplicitReceiver` + // and not just an instance of `ImplicitReceiver`. + node.receiver.constructor === ImplicitReceiver + ); +} + +function isZero(node: AST): boolean { + return isLiteralNumber(node, 0); +} + +function isOne(node: AST): boolean { + return isLiteralNumber(node, 1); +} + +function isTwo(node: AST): boolean { + return isLiteralNumber(node, 2); +} + +function isLiteralNumber(node: AST, value: number): boolean { + return node instanceof LiteralPrimitive && node.value === value; +} + +interface ForLoopInfo { + canAlias: boolean; + readonly source: AST; + readonly variables: readonly TmplAstVariable[]; + readonly references: Map | undefined; + simplifications?: + | Partial> + | undefined; +} + +interface Simplifications { + preferCount?: Simplification[]; + preferFirst?: Simplification[]; + preferLast?: Simplification[]; + preferEven?: Simplification[]; + preferOdd?: Simplification[]; +} + +interface Simplification { + readonly range: TSESTree.Range; + readonly replacement: string; +} + +interface Problem { + readonly index: number; + readonly variable: TmplAstVariable; + readonly loc: TSESTree.SourceLocation; +} + +type SimplificationMessageIds = Exclude; diff --git a/packages/eslint-plugin-template/src/utils/are-equivalent-asts.ts b/packages/eslint-plugin-template/src/utils/are-equivalent-asts.ts new file mode 100644 index 000000000..c002f4ca7 --- /dev/null +++ b/packages/eslint-plugin-template/src/utils/are-equivalent-asts.ts @@ -0,0 +1,190 @@ +import { + AST, + ASTWithSource, + Binary, + BindingPipe, + Call, + Chain, + Conditional, + ImplicitReceiver, + Interpolation, + KeyedRead, + KeyedWrite, + LiteralArray, + LiteralMap, + LiteralPrimitive, + NonNullAssert, + PrefixNot, + PropertyRead, + PropertyWrite, + SafeCall, + SafeKeyedRead, + SafePropertyRead, + TypeofExpression, + Unary, +} from '@angular-eslint/bundled-angular-compiler'; + +export function areEquivalentASTs(a: AST, b: AST): boolean { + // An `ImplicitReceiver` is equivalent to a `ThisReceiver` because + // `this.foo` and `foo` mean the same thing. A `ThisReceiver` extends + // `ImplicitReceiver` so before we check if the two ASTs are the same + // type, we can check if they are both some sort of `ImplicitReceiver`. + if (a instanceof ImplicitReceiver) { + return b instanceof ImplicitReceiver; + } + + // Bail out if the two ASTs are not the same type. + if (a.constructor !== b.constructor) { + return false; + } + + // Check reads and calls first, because + // they are probably the most common type. + + if (a instanceof PropertyRead && b instanceof PropertyRead) { + return a.name === b.name && areEquivalentASTs(a.receiver, b.receiver); + } + + if (a instanceof SafePropertyRead && b instanceof SafePropertyRead) { + return a.name === b.name && areEquivalentASTs(a.receiver, b.receiver); + } + + if (a instanceof Call && b instanceof Call) { + return ( + areEquivalentASTArrays(a.args, b.args) && + areEquivalentASTs(a.receiver, b.receiver) + ); + } + + if (a instanceof SafeCall && b instanceof SafeCall) { + return ( + areEquivalentASTArrays(a.args, b.args) && + areEquivalentASTs(a.receiver, b.receiver) + ); + } + + if (a instanceof KeyedRead && b instanceof KeyedRead) { + return ( + areEquivalentASTs(a.key, b.key) && + areEquivalentASTs(a.receiver, b.receiver) + ); + } + + if (a instanceof SafeKeyedRead && b instanceof SafeKeyedRead) { + return ( + areEquivalentASTs(a.key, b.key) && + areEquivalentASTs(a.receiver, b.receiver) + ); + } + + if (a instanceof NonNullAssert && b instanceof NonNullAssert) { + return areEquivalentASTs(a.expression, b.expression); + } + + // Expressions used as conditions can come next. + + if (a instanceof PrefixNot && b instanceof PrefixNot) { + return areEquivalentASTs(a.expression, b.expression); + } + + // Unary extends Binary, so we need to check `Unary` + // first, otherwise we will treat it as a `Binary`. + if (a instanceof Unary && b instanceof Unary) { + return a.operator === b.operator && areEquivalentASTs(a.expr, b.expr); + } + + if (a instanceof Binary && b instanceof Binary) { + return ( + a.operation === b.operation && + areEquivalentASTs(a.left, b.left) && + areEquivalentASTs(a.right, b.right) + ); + } + + if (a instanceof Conditional && b instanceof Conditional) { + return ( + areEquivalentASTs(a.condition, b.condition) && + areEquivalentASTs(a.trueExp, b.trueExp) && + areEquivalentASTs(a.falseExp, b.falseExp) + ); + } + + // Literals can be checked next. + + if (a instanceof LiteralPrimitive && b instanceof LiteralPrimitive) { + return a.value === b.value; + } + + if (a instanceof LiteralArray && b instanceof LiteralArray) { + return areEquivalentASTArrays(a.expressions, b.expressions); + } + + if (a instanceof LiteralMap && b instanceof LiteralMap) { + return ( + a.keys.length === b.keys.length && + // Only check that the keys are equivalent. We don't need to check + // the `quoted` property because a quoted key with the same value as + // an unquoted key is the same key. Likewise, the `isShorthandInitialized` + // property doesn't affect the name of the key. + a.keys.every((aKey, index) => aKey.key === b.keys[index].key) && + areEquivalentASTArrays(a.values, b.values) + ); + } + + // Pipes and interpolations are next. + + if (a instanceof BindingPipe && b instanceof BindingPipe) { + return ( + a.name === b.name && + areEquivalentASTs(a.exp, b.exp) && + areEquivalentASTArrays(a.args, b.args) + ); + } + + if (a instanceof Interpolation && b instanceof Interpolation) { + return ( + a.strings.length === b.strings.length && + a.strings.every((aString, index) => aString === b.strings[index]) && + areEquivalentASTArrays(a.expressions, b.expressions) + ); + } + + // Miscellaneous things and writes can be checked next. + + if (a instanceof ASTWithSource && b instanceof ASTWithSource) { + return areEquivalentASTs(a.ast, b.ast); + } + + if (a instanceof Chain && b instanceof Chain) { + return areEquivalentASTArrays(a.expressions, b.expressions); + } + + if (a instanceof PropertyWrite && b instanceof PropertyWrite) { + return ( + a.name === b.name && + areEquivalentASTs(a.receiver, b.receiver) && + areEquivalentASTs(a.value, b.value) + ); + } + + if (a instanceof KeyedWrite && b instanceof KeyedWrite) { + return ( + areEquivalentASTs(a.key, b.key) && + areEquivalentASTs(a.receiver, b.receiver) && + areEquivalentASTs(a.value, b.value) + ); + } + + if (a instanceof TypeofExpression && b instanceof TypeofExpression) { + return areEquivalentASTs(a.expression, b.expression); + } + + return false; +} + +function areEquivalentASTArrays(a: AST[], b: AST[]): boolean { + return ( + a.length === b.length && + a.every((aElement, index) => areEquivalentASTs(aElement, b[index])) + ); +} diff --git a/packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/cases.ts b/packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/cases.ts new file mode 100644 index 000000000..1f0394c41 --- /dev/null +++ b/packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/cases.ts @@ -0,0 +1,670 @@ +import { convertAnnotatedSourceToFailureCase } from '@angular-eslint/test-utils'; +import type { + InvalidTestCase, + ValidTestCase, +} from '@typescript-eslint/rule-tester'; +import type { + MessageIds, + Options, +} from '../../../src/rules/prefer-contextual-for-variables'; + +const preferContextualVariable: MessageIds = 'preferContextualVariable'; +const preferCount: MessageIds = 'preferCount'; +const preferFirst: MessageIds = 'preferFirst'; +const preferLast: MessageIds = 'preferLast'; +const preferEven: MessageIds = 'preferEven'; +const preferOdd: MessageIds = 'preferOdd'; + +const VARIABLE_NAMES: readonly string[] = [ + '$index', + '$count', + '$first', + '$last', + '$even', + '$odd', +]; + +export const valid: readonly (string | ValidTestCase)[] = [ + `@for (item of items; track item.id) {}`, + `@for (item of items; track $index) {}`, + ...VARIABLE_NAMES.map( + (variable): ValidTestCase => ({ + options: [{ allowedAliases: { [variable]: ['alpha', 'beta', 'gamma'] } }], + code: `@for (item of items; track item.id; let beta = ${variable}) {}`, + }), + ), + ...VARIABLE_NAMES.map( + (variable) => ` + @for (a of outer; track a.id; let outerVar = ${variable}) { + @for (b of inner; track b.id) {} + }`, + ), + ...VARIABLE_NAMES.map( + (variable) => ` + @for (a of outer; track a.id) { + @for (b of inner; track b.id; let innerVar = ${variable}) {} + }`, + ), + ...VARIABLE_NAMES.map( + (variable) => ` + @for (a of outer; track a.id; let outerVar = ${variable}) { + @for (b of inner; track b.id; let innerVar = ${variable}) {} + }`, + ), + ` + @for (item of items; track item.id) {} + {{ items.length }}`, + ` + @for (a of outer; track a.id) { + @for (b of inner; track b.id) { + {{ outer.length }} + } + }`, + ` + @for (a of outer(); track a.id) { + @for (b of inner(); track b.id) { + {{ outer().length }} + } + }`, + ` + @for (item of items; track item.id) { + {{ this.$index === 0 }} + }`, + ` + @for (item of items; track item.id) { + {{ $index === this.$count - 1 }} + }`, + ` + @for (item of items; track item.id) {} + {{ $index % 2 === 0 }} + `, + ` + @for (item of items; track item.id) {} + {{ $index % 2 !== 0 }} + `, + ` + @for (item of items; track item.id) {} + {{ !$even }} + `, + ` + @for (item of items; track item.id) {} + {{ !$odd }} + `, + ` + @for (item of items; track item.id) { + @if (this.$index % 2 === 0) {} + }`, + ` + @for (item of items; track item.id) { + @if (this.$index % 2 !== 0) {} + }`, + ` + @for (item of items; track item.id) { + {{ !this.$even }} + }`, + ` + @for (item of items; track item.id) { + {{ !this.$odd }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 === foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 !== foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 >= foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 > foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 <= foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 < foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 + foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 - foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 * foo }} + }`, + ` + @for (item of items; track item.id) { + {{ $index % 2 / foo }} + }`, +]; + +export const invalid: readonly InvalidTestCase[] = [ + ...VARIABLE_NAMES.flatMap((name) => [ + [name, name.slice(1)], + [name, 'foo'], + ]).map(([variable, alias]) => + convertAnnotatedSourceToFailureCase({ + description: `should fail when '${variable}' is aliased as '${alias}' and no aliases are allowed`, + annotatedSource: ` + @for (item of items; track item.id; let ${alias} = ${variable}) {} + ${'~'.repeat(alias.length + 3 + variable.length)} + `, + messageId: preferContextualVariable, + data: { name: variable }, + annotatedOutput: ` + @for (item of items; track item.id) {} + + `, + }), + ), + ...VARIABLE_NAMES.map((variable) => + convertAnnotatedSourceToFailureCase({ + description: `should fail when '${variable}' can be aliased as 'foo' but is aliased as 'bar'`, + options: [{ allowedAliases: { [variable]: ['foo'] } }], + annotatedSource: ` + @for (item of items; track item.id; let bar = ${variable}) {} + ~~~~~~${'~'.repeat(variable.length)} + `, + messageId: preferContextualVariable, + data: { name: variable }, + annotatedOutput: ` + @for (item of items; track item.id) {} + + `, + }), + ), + convertAnnotatedSourceToFailureCase({ + description: `can remove only the first variable when fixing`, + options: [{ allowedAliases: { $index: ['a'], $count: ['b'] } }], + annotatedSource: ` + @for (item of items; track item.id; let x = $even, a = $index, b = $count) {,} + ~~~~~~~~~ + `, + messageId: preferContextualVariable, + data: { name: '$even' }, + annotatedOutput: ` + @for (item of items; track item.id; let a = $index, b = $count) {,} + ~~~~~~~~~ + `, + }), + convertAnnotatedSourceToFailureCase({ + description: `can remove only a middle variable when fixing`, + options: [{ allowedAliases: { $index: ['a'], $count: ['b'] } }], + annotatedSource: ` + @for (item of items; track item.id; let a = $index, x = $even, b = $count) {,} + ~~~~~~~~~ + `, + messageId: preferContextualVariable, + data: { name: '$even' }, + annotatedOutput: ` + @for (item of items; track item.id; let a = $index, b = $count) {,} + + `, + }), + convertAnnotatedSourceToFailureCase({ + description: `can remove only the last variable when fixing`, + options: [{ allowedAliases: { $index: ['a'], $count: ['b'] } }], + annotatedSource: ` + @for (item of items; track item.id; let a = $index, b = $count, x = $even) {,} + ~~~~~~~~~ + `, + messageId: preferContextualVariable, + data: { name: '$even' }, + annotatedOutput: ` + @for (item of items; track item.id; let a = $index, b = $count) {,} + + `, + }), + convertAnnotatedSourceToFailureCase({ + description: `can remove multiple non-consecutive variables when fixing`, + options: [{ allowedAliases: { $count: ['b'] } }], + annotatedSource: ` + @for (item of items; track item.id; let a = $index, b = $count, x = $even) {,} + ~~~~~~~~~~ ^^^^^^^^^ + `, + messages: [ + { + char: '~', + messageId: preferContextualVariable, + data: { name: '$index' }, + }, + { + char: '^', + messageId: preferContextualVariable, + data: { name: '$even' }, + }, + ], + annotatedOutput: ` + @for (item of items; track item.id; let b = $count) {,} + + `, + }), + convertAnnotatedSourceToFailureCase({ + description: `can remove multiple consecutive variables when fixing`, + options: [{ allowedAliases: { $count: ['b'] } }], + annotatedSource: ` + @for (item of items; track item.id; let a = $index, x = $even, b = $count) {,} + ~~~~~~~~~~ ^^^^^^^^^ + `, + messages: [ + { + char: '~', + messageId: preferContextualVariable, + data: { name: '$index' }, + }, + { + char: '^', + messageId: preferContextualVariable, + data: { name: '$even' }, + }, + ], + annotatedOutputs: [ + ` + @for (item of items; track item.id; let x = $even, b = $count) {,} + + `, + ` + @for (item of items; track item.id; let b = $count) {,} + + `, + ], + }), + convertAnnotatedSourceToFailureCase({ + description: `can remove all variables when fixing`, + annotatedSource: ` + @for (item of items; track item.id; let a = $index, b = $even, c = $count) {,} + ~~~~~~~~~~ ^^^^^^^^^ ########## + `, + messages: [ + { + char: '~', + messageId: preferContextualVariable, + data: { name: '$index' }, + }, + { + char: '^', + messageId: preferContextualVariable, + data: { name: '$even' }, + }, + { + char: '#', + messageId: preferContextualVariable, + data: { name: '$count' }, + }, + ], + annotatedOutputs: [ + ` + @for (item of items; track item.id; let b = $even) {,} + + `, + ` + @for (item of items; track item.id) {,} + + `, + ], + }), + ...VARIABLE_NAMES.map((variable) => + convertAnnotatedSourceToFailureCase({ + description: `should rename references to alias of '${variable}' when fixing`, + annotatedSource: ` + @for (item of items; track item.id; let foo = ${variable}) { + ~~~~~~${'~'.repeat(variable.length)} + {{ foo }} + {{ foo + 1 }} + +
+ @if (foo) {} + @switch (foo) {} + @let bar = foo + 1; + } + `, + messageId: preferContextualVariable, + data: { name: variable }, + annotatedOutput: ` + @for (item of items; track item.id) { + + {{ ${variable} }} + {{ ${variable} + 1 }} + +
+ @if (${variable}) {} + @switch (${variable}) {} + @let bar = ${variable} + 1; + } + `, + }), + ), + ...['items', 'items()'].map((source) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${source}.length' with '$count'`, + annotatedSource: ` + @for (item of ${source}; track item.id) { + {{ $index + 1 }} of {{ ${source}.length }} + ${'~'.repeat(source.length + 7)} + } + `, + messageId: preferCount, + data: { expression: `${source}.length` }, + annotatedOutput: ` + @for (item of ${source}; track item.id) { + {{ $index + 1 }} of {{ $count }} + + } + `, + }), + ), + ...['$index === 0', '$index == 0', '0 === $index', '0 == $index'].map( + (expression) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${expression}' with '$first'`, + annotatedSource: ` + @for (item of items; track item.id) { + @if (${expression}) { + ${`~`.repeat(expression.length)} + first item + } + } + `, + messageId: preferFirst, + data: { expression }, + annotatedOutput: ` + @for (item of items; track item.id) { + @if ($first) { + + first item + } + } + `, + }), + ), + ...[ + '$index > 0', + '$index !== 0', + '$index != 0', + '0 < $index', + '0 !== $index', + '0 != $index', + ].map((expression) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${expression}' with '!$first'`, + annotatedSource: ` + @for (item of items; track item.id) { + @if (${expression}) { + ${`~`.repeat(expression.length)} + not first item + } + } + `, + messageId: preferFirst, + data: { expression }, + annotatedOutput: ` + @for (item of items; track item.id) { + @if (!$first) { + + not first item + } + } + `, + }), + ), + ...[ + '$index + 1 === $count', + '$index + 1 == $count', + '$index === $count - 1', + '$index == $count - 1', + '$count === $index + 1', + '$count == $index + 1', + '$count - 1 === $index', + '$count - 1 == $index', + ].map((expression) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${expression}' with '$last'`, + annotatedSource: ` + @for (item of items; track item.id) { + @if (${expression}) { + ${`~`.repeat(expression.length)} + last item + } + } + `, + messageId: preferLast, + data: { expression }, + annotatedOutput: ` + @for (item of items; track item.id) { + @if ($last) { + + last item + } + } + `, + }), + ), + ...[ + '$index + 1 < $count', + '$index + 1 !== $count', + '$index < $count - 1', + '$index !== $count - 1', + '$count > $index + 1', + '$count !== $index + 1', + '$count - 1 > $index', + '$count - 1 !== $index', + ].map((expression) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${expression}' with '!$last'`, + annotatedSource: ` + @for (item of items; track item.id) { + @if (${expression}) { + ${`~`.repeat(expression.length)} + not last item + } + } + `, + messageId: preferLast, + data: { expression }, + annotatedOutput: ` + @for (item of items; track item.id) { + @if (!$last) { + + not last item + } + } + `, + }), + ), + ...[ + '!($index % 2)', + '$index % 2 === 0', + '$index % 2 == 0', + '$index % 2 !== 1', + '$index % 2 != 1', + '$index % 2 < 1', + '0 === $index % 2', + '0 == $index % 2', + '1 !== $index % 2', + '1 !== $index % 2', + '1 > $index % 2', + '!$odd', + ].map((expression) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${expression}' with '$even'`, + annotatedSource: ` + @for (item of items; track item.id) { + @if (${expression}) { + ${`~`.repeat(expression.length)} + is even + } + } + `, + messageId: preferEven, + data: { expression }, + annotatedOutput: ` + @for (item of items; track item.id) { + @if ($even) { + + is even + } + } + `, + }), + ), + ...[ + '$index % 2 === 1', + '$index % 2 == 1', + '$index % 2 !== 0', + '$index % 2 != 0', + '$index % 2 > 0', + '1 === $index % 2', + '1 == $index % 2', + '0 !== $index % 2', + '0 != $index % 2', + '0 < $index % 2', + '!$even', + ].map((expression) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${expression}' with '$odd'`, + annotatedSource: ` + @for (item of items; track item.id) { + @if (${expression}) { + ${`~`.repeat(expression.length)} + is odd + } + } + `, + messageId: preferOdd, + data: { expression }, + annotatedOutput: ` + @for (item of items; track item.id) { + @if ($odd) { + + is odd + } + } + `, + }), + ), + convertAnnotatedSourceToFailureCase({ + description: `should replace '!!($index % 2)' with '$odd'`, + annotatedSource: ` + @for (item of items; track item.id) { + @if (!!($index % 2)) { + ~~~~~~~~~~~~~ + is odd + } + } + `, + // Detecting a double `PrefixNot` is difficult because we would report + // a simplification for the outer `PrefixNot`, but when we see the inner + // `PrefixNot`, we don't know that it's the expression in a parent `PrefixNot`, + // so we would also report a simplification for it. So instead of reporting + // on the outer `PrefixNot`, we only report on the inner one and rely on + // the fact that once it has been fixed, we can then simplify it further. + messages: [ + { + char: '~', + messageId: preferEven, + data: { expression: '!($index % 2)' }, + }, + ], + annotatedOutputs: [ + // First, we simplify the inner `PrefixNot` to `$even`. + ` + @for (item of items; track item.id) { + @if (!$even) { + + is odd + } + } + `, + // Then we simplify what was the outer `PrefixNot` to `$odd`. + ` + @for (item of items; track item.id) { + @if ($odd) { + + is odd + } + } + `, + ], + }), + ...[ + { pre: '{{ foo && ', expression: '$index % 2', post: ' }}' }, + { pre: '{{ ', expression: '$index % 2', post: ' && foo }}' }, + { pre: '{{ ', expression: '$index % 2', post: ' ? 1 : 2 }}' }, + { pre: '@if (', expression: '$index % 2', post: ') {}' }, + ].map(({ pre, expression, post }) => + convertAnnotatedSourceToFailureCase({ + description: `should replace '${pre}${expression}${post}' with '${pre}$odd${post}'`, + annotatedSource: ` + @for (item of items; track item.id) { + ${pre}${expression}${post} + ${' '.repeat(pre.length)}${`~`.repeat(expression.length)} + } + `, + messageId: preferOdd, + data: { expression }, + annotatedOutput: ` + @for (item of items; track item.id) { + ${pre}$odd${post} + ${' '.repeat(pre.length)} + } + `, + }), + ), + convertAnnotatedSourceToFailureCase({ + description: `should simplify contextual variable usage in nested for loops`, + annotatedSource: ` + @for (a of outer; track a.id) { + @if ($index === 0) { + ~~~~~~~~~~~~ + first outer + } + @for (b of inner; track b.id) { + @if ($index === 0) { + ^^^^^^^^^^^^ + first inner + } + } + } + `, + messages: [ + { + char: '~', + messageId: preferFirst, + data: { expression: '$index === 0' }, + }, + { + char: '^', + messageId: preferFirst, + data: { expression: '$index === 0' }, + }, + ], + annotatedOutput: ` + @for (a of outer; track a.id) { + @if ($first) { + + first outer + } + @for (b of inner; track b.id) { + @if ($first) { + + first inner + } + } + } + `, + }), +]; diff --git a/packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/spec.ts b/packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/spec.ts new file mode 100644 index 000000000..b771da48c --- /dev/null +++ b/packages/eslint-plugin-template/tests/rules/prefer-contextual-for-variables/spec.ts @@ -0,0 +1,16 @@ +import { RuleTester } from '@angular-eslint/test-utils'; +import rule, { + RULE_NAME, +} from '../../../src/rules/prefer-contextual-for-variables'; +import { invalid, valid } from './cases'; + +const ruleTester = new RuleTester({ + languageOptions: { + parser: require('@angular-eslint/template-parser'), + }, +}); + +ruleTester.run(RULE_NAME, rule, { + valid, + invalid, +}); diff --git a/packages/eslint-plugin-template/tests/utils/are-equivalent-asts.spec.ts b/packages/eslint-plugin-template/tests/utils/are-equivalent-asts.spec.ts new file mode 100644 index 000000000..40358f435 --- /dev/null +++ b/packages/eslint-plugin-template/tests/utils/are-equivalent-asts.spec.ts @@ -0,0 +1,751 @@ +import { parseForESLint } from '@angular-eslint/template-parser'; +import { areEquivalentASTs } from '../../src/utils/are-equivalent-asts'; +import { + ASTWithSource, + BindingPipe, + Binary, + Chain, + Conditional, + ImplicitReceiver, + Interpolation, + KeyedRead, + KeyedWrite, + LiteralArray, + LiteralMap, + LiteralPrimitive, + PropertyRead, + ThisReceiver, + TmplAstBoundText, + TmplAstElement, + Unary, + PrefixNot, + TypeofExpression, + NonNullAssert, + PropertyWrite, + SafePropertyRead, + SafeKeyedRead, + Call, + SafeCall, +} from '@angular-eslint/bundled-angular-compiler'; + +describe('areEquivalentASTs', () => { + describe('Unary', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = '+foo'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different operator', () => { + expect(compare('+foo', '-foo')).toBe(false); + }); + + it('different expression', () => { + expect(compare('+foo', '+bar')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): Unary { + return parseBoundText(`{{ ${markup} }}`, Unary); + } + }); + + describe('Binary', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'a + b'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different operator', () => { + expect(compare('a + b', 'a - b')).toBe(false); + }); + + it('different expression', () => { + expect(compare('a + b', 'a + c')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): Binary { + return parseBoundText(`{{ ${markup} }}`, Binary); + } + }); + + describe('Chain', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'a + 1; b + 2'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different order', () => { + expect(compare('a + 1; b + 2', 'b + 2; a + 1')).toBe(false); + }); + + it('different expressions', () => { + expect(compare('a + 1; b + 2', 'c + 3; d + 4')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs( + parseOutputHandler(a, Chain), + parseOutputHandler(b, Chain), + ); + } + }); + + describe('Conditional', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'a > b ? 1 : 2'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different true case', () => { + expect(compare('a > b ? 1 : 2', 'a > b ? 0 : 2')).toBe(false); + }); + + it('different false case', () => { + expect(compare('a > b ? 1 : 2', 'a > b ? 1 : 3')).toBe(false); + }); + + it('different test', () => { + expect(compare('a > b ? 1 : 2', 'a < b ? 1 : 2')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): Conditional { + return parseBoundText(`{{ ${markup} }}`, Conditional); + } + }); + + describe('ThisReceiver and ImplicitReceiver', () => { + describe('equivalent', () => { + it('this is identical to itself', () => { + const ast = getThisReceiver(); + expect(areEquivalentASTs(ast, ast)).toBe(true); + }); + + it('implicit receiver is identical to itself', () => { + const ast = getImplicitReceiver(); + expect(areEquivalentASTs(ast, ast)).toBe(true); + }); + + it('this is equivalent to implicit', () => { + expect( + areEquivalentASTs(getThisReceiver(), getImplicitReceiver()), + ).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('this receiver and different node type', () => { + expect( + areEquivalentASTs(getThisReceiver(), parse('foo', PropertyRead)), + ).toBe(false); + }); + + it('this receiver and different node type', () => { + expect( + areEquivalentASTs(getImplicitReceiver(), parse('foo', PropertyRead)), + ).toBe(false); + }); + }); + + function getThisReceiver(): ThisReceiver { + return parse('this', ThisReceiver); + } + + function getImplicitReceiver(): ImplicitReceiver { + const read = parse('foo', PropertyRead); + expect(read.receiver).toBeInstanceOf(ImplicitReceiver); + return read.receiver; + } + + function parse(markup: string, type: unknown): T { + return parseBoundText(`{{ ${markup} }}`, type); + } + }); + + describe('Interpolation', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'before {{ foo }} after'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different number of strings and expressions', () => { + expect(compare('a{{ b }}c', 'a{{ b }}c{{d}}')).toBe(false); + }); + + it('different strings', () => { + expect(compare('a{{ b }}c', 'a{{ b }}d')).toBe(false); + }); + + it('different expressions', () => { + expect(compare('a{{ b }}c', 'a{{ d }}c')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): Interpolation { + const ast = parseForESLint(markup, { + filePath: './foo.html', + suppressParseErrors: false, + }).ast; + expect(ast.templateNodes).toHaveLength(1); + + expect(ast.templateNodes[0]).toBeInstanceOf(TmplAstBoundText); + const boundText = ast.templateNodes[0] as TmplAstBoundText; + + expect(boundText.value).toBeInstanceOf(ASTWithSource); + const astWithSource = boundText.value as ASTWithSource; + + expect(astWithSource.ast).toBeInstanceOf(Interpolation); + return astWithSource.ast as Interpolation; + } + }); + + describe('KeyedRead', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'foo["bar"]'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different receiver', () => { + expect(compare('a["bar"]', 'b["bar"]')).toBe(false); + }); + + it('different key', () => { + expect(compare('a["x"]', 'a["y"]')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): KeyedRead { + return parseBoundText(`{{ ${markup} }}`, KeyedRead); + } + }); + + describe('KeyedWrite', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'foo["bar"] = 1'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different receiver', () => { + expect(compare('a["bar"] = 1', 'b["bar"] = 1')).toBe(false); + }); + + it('different key', () => { + expect(compare('a["x"] = 1', 'a["y"] = 1')).toBe(false); + }); + + it('different value', () => { + expect(compare('a["foo"] = 1', 'a["foo"] = 2')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs( + parseOutputHandler(a, KeyedWrite), + parseOutputHandler(b, KeyedWrite), + ); + } + }); + + describe('LiteralArray', () => { + describe('equivalent', () => { + it('empty', () => { + const markup = '[]'; + expect(compare(markup, markup)).toBe(true); + }); + + it('same elements', () => { + const markup = '[1, 2, 3]'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different length', () => { + expect(compare('[1, 2, 3]', '[1, 2]')).toBe(false); + }); + + it('different values', () => { + expect(compare('[1, 2, 3]', '[1, 4, 3]')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): LiteralArray { + return parseBoundText(`{{ ${markup} }}`, LiteralArray); + } + }); + + describe('LiteralMap', () => { + describe('equivalent', () => { + it('empty', () => { + const markup = '{}'; + expect(compare(markup, markup)).toBe(true); + }); + + it('same elements', () => { + const markup = '{ a: 1, b: 2 }'; + expect(compare(markup, markup)).toBe(true); + }); + + it('quoted and not quoted elements', () => { + expect(compare('{ a: 1 }', '{ "a": 1 }')).toBe(true); + }); + + it('shorthand and not shorthand initialization', () => { + expect(compare('{ a: a }', '{ a }')).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different number of elements', () => { + expect(compare('{ a: 1, b: 2 }', '{ a: 1, b: 2, c: 3 }')).toBe(false); + }); + + it('different keys', () => { + expect(compare('{ a: 1, b: 2, c: 3 }', '{ a: 1, d: 2, c: 3 }')).toBe( + false, + ); + }); + + it('different values', () => { + expect(compare('{ a: 1, b: 2, c: 3 }', '{ a: 1, b: 4, c: 3 }')).toBe( + false, + ); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): LiteralMap { + return parseBoundText(`{{ ${markup} }}`, LiteralMap); + } + }); + + describe('LiteralPrimitive', () => { + describe('equivalent', () => { + it.each([ + { type: 'boolean', value: 'true' }, + { type: 'number', value: '42' }, + { type: 'string', value: '"test"' }, + { type: 'null', value: 'null' }, + { type: 'undefined', value: 'undefined' }, + ])('$type', ({ value }) => { + expect(compare(value, value)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it.each([ + { type: 'boolean', first: 'true', second: 'false' }, + { type: 'number', first: '42', second: '24' }, + { type: 'string', first: '"test"', second: '"other"' }, + ])('different $type values', ({ first, second }) => { + expect(compare(first, second)).toBe(false); + }); + + it('different types', () => { + expect(compare('42', 'true')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): LiteralPrimitive { + return parseBoundText(`{{ ${markup} }}`, LiteralPrimitive); + } + }); + + describe('BindingPipe', () => { + describe('equivalent', () => { + it('identical with no arguments', () => { + const markup = 'foo | bar'; + expect(compare(markup, markup)).toBe(true); + }); + + it('identical with arguments', () => { + const markup = 'foo | bar: 1 : 2 : 3'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different expression', () => { + expect(compare('a | foo', 'b | foo')).toBe(false); + }); + + it('different name', () => { + expect(compare('a | foo', 'a | bar')).toBe(false); + }); + + it('different number of arguments', () => { + expect(compare('a | foo : 1 : 2', 'a | foo : 1 : 2 : 3')).toBe(false); + }); + + it('different argument values', () => { + expect(compare('a | foo : 1 : 2 : 3', 'a | foo : 1 : 4 : 3')).toBe( + false, + ); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): BindingPipe { + return parseBoundText(`{{ ${markup} }}`, BindingPipe); + } + }); + + describe('PrefixNot', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = '!foo'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different expression', () => { + expect(compare('!a', '!b')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): PrefixNot { + return parseBoundText(`{{ ${markup} }}`, PrefixNot); + } + }); + + describe('TypeofExpression', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'typeof foo'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different expression', () => { + expect(compare('typeof a', 'typeof b')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): TypeofExpression { + return parseBoundText(`{{ ${markup} }}`, TypeofExpression); + } + }); + + describe('NonNullAssert', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'foo!'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different expression', () => { + expect(compare('a!', 'b!')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): NonNullAssert { + return parseBoundText(`{{ ${markup} }}`, NonNullAssert); + } + }); + + describe('PropertyRead', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'foo'; + expect(compare(markup, markup)).toBe(true); + }); + + it('this and implicit receiver', () => { + expect(compare('foo', 'this.foo')).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different name', () => { + expect(compare('a.b', 'a.c')).toBe(false); + }); + + it('different receiver', () => { + expect(compare('a.b', 'c.b')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): PropertyRead { + return parseBoundText(`{{ ${markup} }}`, PropertyRead); + } + }); + + describe('PropertyWrite', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'foo = 1'; + expect(compare(markup, markup)).toBe(true); + }); + + it('this and implicit receiver', () => { + expect(compare('foo = 1', 'this.foo = 1')).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different name', () => { + expect(compare('a.b = 1', 'a.c = 1')).toBe(false); + }); + + it('different receiver', () => { + expect(compare('a.b = 1', 'c.b = 1')).toBe(false); + }); + + it('different value', () => { + expect(compare('a.b = 1', 'a.b = 2')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs( + parseOutputHandler(a, PropertyWrite), + parseOutputHandler(b, PropertyWrite), + ); + } + }); + + describe('SafePropertyRead', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'foo?.bar'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different name', () => { + expect(compare('a?.b', 'a?.c')).toBe(false); + }); + + it('different receiver', () => { + expect(compare('a?.b', 'c?.b')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): SafePropertyRead { + return parseBoundText(`{{ ${markup} }}`, SafePropertyRead); + } + }); + + describe('SafeKeyedRead', () => { + describe('equivalent', () => { + it('identical', () => { + const markup = 'foo?.["bar"]'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different receiver', () => { + expect(compare('a?.["bar"]', 'b?.["bar"]')).toBe(false); + }); + + it('different key', () => { + expect(compare('a?.["x"]', 'a?.["y"]')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): SafeKeyedRead { + return parseBoundText(`{{ ${markup} }}`, SafeKeyedRead); + } + }); + + describe('Call', () => { + describe('equivalent', () => { + it('identical with no arguments', () => { + const markup = 'foo()'; + expect(compare(markup, markup)).toBe(true); + }); + + it('identical with arguments', () => { + const markup = 'foo(1, 2)'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different receiver', () => { + expect(compare('a(1)', 'b(1)')).toBe(false); + }); + + it('different number of arguments', () => { + expect(compare('a(1, 2, 3)', 'a(1, 2, 3, 4)')).toBe(false); + }); + + it('different argument values', () => { + expect(compare('a(1, 2, 3)', 'a(1, 3, 2)')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): Call { + return parseBoundText(`{{ ${markup} }}`, Call); + } + }); + + describe('SafeCall', () => { + describe('equivalent', () => { + it('identical with no arguments', () => { + const markup = 'foo?.()'; + expect(compare(markup, markup)).toBe(true); + }); + + it('identical with arguments', () => { + const markup = 'foo?.(1, 2)'; + expect(compare(markup, markup)).toBe(true); + }); + }); + + describe('not equivalent', () => { + it('different receiver', () => { + expect(compare('a?.(1)', 'b?.(1)')).toBe(false); + }); + + it('different number of arguments', () => { + expect(compare('a?.(1, 2, 3)', 'a?.(1, 2, 3, 4)')).toBe(false); + }); + + it('different argument values', () => { + expect(compare('a?.(1, 2, 3)', 'a?.(1, 3, 2)')).toBe(false); + }); + }); + + function compare(a: string, b: string): boolean { + return areEquivalentASTs(parse(a), parse(b)); + } + + function parse(markup: string): SafeCall { + return parseBoundText(`{{ ${markup} }}`, SafeCall); + } + }); +}); + +function parseBoundText(markup: string, type: unknown): T { + const ast = parseForESLint(markup, { + filePath: './foo.html', + suppressParseErrors: false, + }).ast; + expect(ast.templateNodes).toHaveLength(1); + + expect(ast.templateNodes[0]).toBeInstanceOf(TmplAstBoundText); + const boundText = ast.templateNodes[0] as TmplAstBoundText; + + expect(boundText.value).toBeInstanceOf(ASTWithSource); + const astWithSource = boundText.value as ASTWithSource; + + expect(astWithSource.ast).toBeInstanceOf(Interpolation); + const interpolation = astWithSource.ast as Interpolation; + + expect(interpolation.expressions).toHaveLength(1); + expect(interpolation.expressions[0]).toBeInstanceOf(type); + + return interpolation.expressions[0] as T; +} + +function parseOutputHandler(markup: string, type: unknown): T { + const ast = parseForESLint(``, { + filePath: './foo.html', + suppressParseErrors: false, + }).ast; + expect(ast.templateNodes).toHaveLength(1); + + expect(ast.templateNodes[0]).toBeInstanceOf(TmplAstElement); + const element = ast.templateNodes[0] as TmplAstElement; + + expect(element.outputs).toHaveLength(1); + const output = element.outputs[0]; + + expect(output.handler).toBeInstanceOf(ASTWithSource); + const astWithSource = output.handler as ASTWithSource; + + expect(astWithSource.ast).toBeInstanceOf(type); + return output.handler as T; +} From 5a04396bc3b73d2fc62bda9d728c2af4a3790f7f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 14:26:39 +0400 Subject: [PATCH 18/23] feat: use @angular/compiler 19.2.3 and rename some AST nodes to match (#2320) --- package.json | 2 +- .../src/rules/alt-text.ts | 2 +- .../src/rules/attributes-order.ts | 2 +- .../src/rules/button-has-type.ts | 2 +- .../src/rules/click-events-have-key-events.ts | 2 +- .../src/rules/conditional-complexity.ts | 2 +- .../src/rules/elements-content.ts | 2 +- .../eslint-plugin-template/src/rules/i18n.ts | 6 +- .../src/rules/interactive-supports-focus.ts | 2 +- .../src/rules/label-has-associated-control.ts | 2 +- .../src/rules/mouse-events-have-key-events.ts | 2 +- .../src/rules/no-autofocus.ts | 2 +- .../src/rules/no-distracting-elements.ts | 2 +- .../src/rules/no-duplicate-attributes.ts | 2 +- .../src/rules/no-inline-styles.ts | 2 +- .../rules/no-interpolation-in-attributes.ts | 2 +- .../src/rules/no-positive-tabindex.ts | 2 +- .../src/rules/prefer-ngsrc.ts | 2 +- .../src/rules/prefer-self-closing-tags.ts | 2 +- .../src/rules/role-has-required-aria.ts | 2 +- .../src/rules/table-scope.ts | 2 +- .../src/rules/valid-aria.ts | 2 +- .../src/convert-source-span-to-loc.ts | 2 +- packages/template-parser/src/index.ts | 8 +- .../tests/__snapshots__/index.test.ts.snap | 28 +- packages/template-parser/tests/index.test.ts | 240 +++++++++--------- pnpm-lock.yaml | 15 +- 27 files changed, 168 insertions(+), 173 deletions(-) diff --git a/package.json b/package.json index 46f94fe97..2a95837a1 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ }, "devDependencies": { "@angular/cli": "19.2.4", - "@angular/compiler": "19.2.1", + "@angular/compiler": "19.2.3", "@commitlint/cli": "19.8.0", "@commitlint/config-conventional": "19.8.0", "@mdn/browser-compat-data": "5.7.5", diff --git a/packages/eslint-plugin-template/src/rules/alt-text.ts b/packages/eslint-plugin-template/src/rules/alt-text.ts index a6a30db85..7a5ceb791 100644 --- a/packages/eslint-plugin-template/src/rules/alt-text.ts +++ b/packages/eslint-plugin-template/src/rules/alt-text.ts @@ -28,7 +28,7 @@ export default createESLintRule({ const parserServices = getTemplateParserServices(context); return { - 'Element$1[name=/^(img|area|object|input)$/]'(node: TmplAstElement) { + 'Element[name=/^(img|area|object|input)$/]'(node: TmplAstElement) { const isValid = isValidNode(node); if (!isValid) { diff --git a/packages/eslint-plugin-template/src/rules/attributes-order.ts b/packages/eslint-plugin-template/src/rules/attributes-order.ts index 70f7f291b..aea292ae3 100644 --- a/packages/eslint-plugin-template/src/rules/attributes-order.ts +++ b/packages/eslint-plugin-template/src/rules/attributes-order.ts @@ -131,7 +131,7 @@ export default createESLintRule({ } return { - ['Element$1, Template'](node: ExtendedTmplAstElement | TmplAstTemplate) { + ['Element, Template'](node: ExtendedTmplAstElement | TmplAstTemplate) { if (isImplicitTemplate(node)) { return; } diff --git a/packages/eslint-plugin-template/src/rules/button-has-type.ts b/packages/eslint-plugin-template/src/rules/button-has-type.ts index c9df60dee..e153af12d 100644 --- a/packages/eslint-plugin-template/src/rules/button-has-type.ts +++ b/packages/eslint-plugin-template/src/rules/button-has-type.ts @@ -63,7 +63,7 @@ export default createESLintRule({ const parserServices = getTemplateParserServices(context); return { - [`Element$1[name=button]`](element: TmplAstElement) { + [`Element[name=button]`](element: TmplAstElement) { if (!isTypeAttributePresentInElement(element)) { if (!isIgnored(ignoreWithDirectives, element)) { context.report({ diff --git a/packages/eslint-plugin-template/src/rules/click-events-have-key-events.ts b/packages/eslint-plugin-template/src/rules/click-events-have-key-events.ts index 395557baa..1ecc4d067 100644 --- a/packages/eslint-plugin-template/src/rules/click-events-have-key-events.ts +++ b/packages/eslint-plugin-template/src/rules/click-events-have-key-events.ts @@ -27,7 +27,7 @@ export default createESLintRule({ defaultOptions: [], create(context) { return { - Element$1(node: TmplAstElement) { + Element(node: TmplAstElement) { if (!getDomElements().has(node.name)) { return; } diff --git a/packages/eslint-plugin-template/src/rules/conditional-complexity.ts b/packages/eslint-plugin-template/src/rules/conditional-complexity.ts index 714899a40..2d48aa945 100644 --- a/packages/eslint-plugin-template/src/rules/conditional-complexity.ts +++ b/packages/eslint-plugin-template/src/rules/conditional-complexity.ts @@ -78,7 +78,7 @@ export default createESLintRule({ data: { maxComplexity, totalComplexity }, }); }, - Interpolation$1({ expressions }: Interpolation) { + Interpolation({ expressions }: Interpolation) { for (const expression of expressions) { const totalComplexity = getTotalComplexity(expression); diff --git a/packages/eslint-plugin-template/src/rules/elements-content.ts b/packages/eslint-plugin-template/src/rules/elements-content.ts index 73075b7d7..c8946fcb3 100644 --- a/packages/eslint-plugin-template/src/rules/elements-content.ts +++ b/packages/eslint-plugin-template/src/rules/elements-content.ts @@ -52,7 +52,7 @@ export default createESLintRule({ const parserServices = getTemplateParserServices(context); return { - 'Element$1[name=/^(a|button|h1|h2|h3|h4|h5|h6)$/][children.length=0]'( + 'Element[name=/^(a|button|h1|h2|h3|h4|h5|h6)$/][children.length=0]'( node: TmplAstElement, ) { if (isHiddenFromScreenReader(node)) return; diff --git a/packages/eslint-plugin-template/src/rules/i18n.ts b/packages/eslint-plugin-template/src/rules/i18n.ts index 90a5c0304..afca180d5 100644 --- a/packages/eslint-plugin-template/src/rules/i18n.ts +++ b/packages/eslint-plugin-template/src/rules/i18n.ts @@ -421,7 +421,7 @@ export default createESLintRule({ checkId || requireDescription || requireMeaning) && { - [`:matches(Element$1, Template[tagName="ng-template"])${ + [`:matches(Element, Template[tagName="ng-template"])${ allowMarkupInContent ? '[i18n]' : '' }`](node: StronglyTypedElement | StronglyTypedTemplate) { handleElementOrTemplate(node); @@ -431,14 +431,14 @@ export default createESLintRule({ checkId || requireDescription || requireMeaning) && { - [`Element$1 > TextAttribute[value=${PL_PATTERN}]`]( + [`Element > TextAttribute[value=${PL_PATTERN}]`]( node: StronglyTypedTextAttribute, ) { handleTextAttribute(node); }, }), ...(checkText && { - [`BoundText, Icu$1, Text$3[value=${PL_PATTERN}]`]( + [`BoundText, Icu, Text[value=${PL_PATTERN}]`]( node: StronglyTypedBoundTextOrIcuOrText, ) { handleBoundTextOrIcuOrText(node); diff --git a/packages/eslint-plugin-template/src/rules/interactive-supports-focus.ts b/packages/eslint-plugin-template/src/rules/interactive-supports-focus.ts index f09491526..907604db1 100644 --- a/packages/eslint-plugin-template/src/rules/interactive-supports-focus.ts +++ b/packages/eslint-plugin-template/src/rules/interactive-supports-focus.ts @@ -49,7 +49,7 @@ export default createESLintRule({ defaultOptions: [{ allowList: DEFAULT_ALLOW_LIST }], create(context, [{ allowList }]) { return { - Element$1(node: TmplAstElement) { + Element(node: TmplAstElement) { const elementType = node.name; if (!getDomElements().has(elementType)) { return; diff --git a/packages/eslint-plugin-template/src/rules/label-has-associated-control.ts b/packages/eslint-plugin-template/src/rules/label-has-associated-control.ts index 9b71fba35..c42dfac6b 100644 --- a/packages/eslint-plugin-template/src/rules/label-has-associated-control.ts +++ b/packages/eslint-plugin-template/src/rules/label-has-associated-control.ts @@ -95,7 +95,7 @@ export default createESLintRule({ let labelItems: TmplAstElement[] = []; return { - [`Element$1`](node: TmplAstElement) { + [`Element`](node: TmplAstElement) { if (allControlComponents.has(node.name)) { inputItems.push(node); } diff --git a/packages/eslint-plugin-template/src/rules/mouse-events-have-key-events.ts b/packages/eslint-plugin-template/src/rules/mouse-events-have-key-events.ts index a03123abf..651d6d00e 100644 --- a/packages/eslint-plugin-template/src/rules/mouse-events-have-key-events.ts +++ b/packages/eslint-plugin-template/src/rules/mouse-events-have-key-events.ts @@ -44,7 +44,7 @@ export default createESLintRule({ return eventPairs.reduce>( (accumulator, [keyEvent, mouseEvent]) => ({ ...accumulator, - [`Element$1[name=${domElementsPattern}]:has(BoundEvent[name='${mouseEvent}']):not(:has(BoundEvent[name='${keyEvent}']))`]({ + [`Element[name=${domElementsPattern}]:has(BoundEvent[name='${mouseEvent}']):not(:has(BoundEvent[name='${keyEvent}']))`]({ sourceSpan, }: TmplAstElement) { const loc = parserServices.convertNodeSourceSpanToLoc(sourceSpan); diff --git a/packages/eslint-plugin-template/src/rules/no-autofocus.ts b/packages/eslint-plugin-template/src/rules/no-autofocus.ts index 341c72296..edb1d47ac 100644 --- a/packages/eslint-plugin-template/src/rules/no-autofocus.ts +++ b/packages/eslint-plugin-template/src/rules/no-autofocus.ts @@ -32,7 +32,7 @@ export default createESLintRule({ const elementNamePattern = toPattern([...getDomElements()]); return { - [`Element$1[name=${elementNamePattern}] > :matches(BoundAttribute, TextAttribute)[name="autofocus"]`]({ + [`Element[name=${elementNamePattern}] > :matches(BoundAttribute, TextAttribute)[name="autofocus"]`]({ sourceSpan, }: TmplAstBoundAttribute | TmplAstTextAttribute) { const loc = parserServices.convertNodeSourceSpanToLoc(sourceSpan); diff --git a/packages/eslint-plugin-template/src/rules/no-distracting-elements.ts b/packages/eslint-plugin-template/src/rules/no-distracting-elements.ts index 8fb149edb..a6cbdbdf9 100644 --- a/packages/eslint-plugin-template/src/rules/no-distracting-elements.ts +++ b/packages/eslint-plugin-template/src/rules/no-distracting-elements.ts @@ -26,7 +26,7 @@ export default createESLintRule({ const parserServices = getTemplateParserServices(context); return { - 'Element$1[name=/^(blink|marquee)$/]'({ + 'Element[name=/^(blink|marquee)$/]'({ name: element, sourceSpan, }: TmplAstElement) { diff --git a/packages/eslint-plugin-template/src/rules/no-duplicate-attributes.ts b/packages/eslint-plugin-template/src/rules/no-duplicate-attributes.ts index 1615d9904..f53ff790e 100644 --- a/packages/eslint-plugin-template/src/rules/no-duplicate-attributes.ts +++ b/packages/eslint-plugin-template/src/rules/no-duplicate-attributes.ts @@ -70,7 +70,7 @@ export default createESLintRule({ const parserServices = getTemplateParserServices(context); return { - Element$1({ inputs, outputs, attributes }: TmplAstElement) { + Element({ inputs, outputs, attributes }: TmplAstElement) { // According to the Angular documentation (https://angular.dev/guide/templates/class-binding#styling-precedence) // Angular merges both attributes which means their combined use can be seen as valid const angularStylePrecedenceDuplicatesAllowed = ['class', 'style']; diff --git a/packages/eslint-plugin-template/src/rules/no-inline-styles.ts b/packages/eslint-plugin-template/src/rules/no-inline-styles.ts index 20ce13d43..9fdbda3ea 100644 --- a/packages/eslint-plugin-template/src/rules/no-inline-styles.ts +++ b/packages/eslint-plugin-template/src/rules/no-inline-styles.ts @@ -51,7 +51,7 @@ export default createESLintRule({ const parserServices = getTemplateParserServices(context); return { - Element$1(node: TmplAstElement) { + Element(node: TmplAstElement) { let isInvalid = false; if (!allowNgStyle && !allowBindToStyle) { diff --git a/packages/eslint-plugin-template/src/rules/no-interpolation-in-attributes.ts b/packages/eslint-plugin-template/src/rules/no-interpolation-in-attributes.ts index 19c252af2..e37256323 100644 --- a/packages/eslint-plugin-template/src/rules/no-interpolation-in-attributes.ts +++ b/packages/eslint-plugin-template/src/rules/no-interpolation-in-attributes.ts @@ -24,7 +24,7 @@ export default createESLintRule({ const sourceCode = context.sourceCode; return { - ['BoundAttribute Interpolation$1'](interpolation: Interpolation) { + ['BoundAttribute Interpolation'](interpolation: Interpolation) { const { sourceSpan: { start, end }, } = interpolation; diff --git a/packages/eslint-plugin-template/src/rules/no-positive-tabindex.ts b/packages/eslint-plugin-template/src/rules/no-positive-tabindex.ts index b181ec43b..df29f3b13 100644 --- a/packages/eslint-plugin-template/src/rules/no-positive-tabindex.ts +++ b/packages/eslint-plugin-template/src/rules/no-positive-tabindex.ts @@ -32,7 +32,7 @@ export default createESLintRule({ const elementNamePattern = toPattern([...getDomElements()]); return { - [`Element$1[name=${elementNamePattern}] > BoundAttribute[name="tabindex"][value.ast.value>0], TextAttribute[name="tabindex"][value>0]`]({ + [`Element[name=${elementNamePattern}] > BoundAttribute[name="tabindex"][value.ast.value>0], TextAttribute[name="tabindex"][value>0]`]({ valueSpan, }: (TmplAstBoundAttribute | TmplAstTextAttribute) & { valueSpan: ParseSourceSpan; diff --git a/packages/eslint-plugin-template/src/rules/prefer-ngsrc.ts b/packages/eslint-plugin-template/src/rules/prefer-ngsrc.ts index 8677de4d5..f1dadc174 100644 --- a/packages/eslint-plugin-template/src/rules/prefer-ngsrc.ts +++ b/packages/eslint-plugin-template/src/rules/prefer-ngsrc.ts @@ -30,7 +30,7 @@ export default createESLintRule({ const parserServices = getTemplateParserServices(context); return { - 'Element$1[name=img]'(element: TmplAstElement) { + 'Element[name=img]'(element: TmplAstElement) { const ngSrcAttribute = hasNgSrcAttribute(element); const srcAttribute = hasNormalSrcAttribute(element); diff --git a/packages/eslint-plugin-template/src/rules/prefer-self-closing-tags.ts b/packages/eslint-plugin-template/src/rules/prefer-self-closing-tags.ts index 4a168ad40..da0057aaa 100644 --- a/packages/eslint-plugin-template/src/rules/prefer-self-closing-tags.ts +++ b/packages/eslint-plugin-template/src/rules/prefer-self-closing-tags.ts @@ -37,7 +37,7 @@ export default createESLintRule({ return {}; } return { - 'Element$1, Template, Content'( + 'Element, Template, Content'( node: TmplAstElement | TmplAstTemplate | TmplAstContent, ) { if (isContentNode(node)) { diff --git a/packages/eslint-plugin-template/src/rules/role-has-required-aria.ts b/packages/eslint-plugin-template/src/rules/role-has-required-aria.ts index 679caab4f..778ab59c1 100644 --- a/packages/eslint-plugin-template/src/rules/role-has-required-aria.ts +++ b/packages/eslint-plugin-template/src/rules/role-has-required-aria.ts @@ -36,7 +36,7 @@ export default createESLintRule({ const elementNamePattern = toPattern([...getDomElements()]); return { - [`Element$1[name=${elementNamePattern}] > TextAttribute[name='role']`]( + [`Element[name=${elementNamePattern}] > TextAttribute[name='role']`]( node: TmplAstTextAttribute & { parent: TmplAstElement; }, diff --git a/packages/eslint-plugin-template/src/rules/table-scope.ts b/packages/eslint-plugin-template/src/rules/table-scope.ts index c23935b30..f677ae6c1 100644 --- a/packages/eslint-plugin-template/src/rules/table-scope.ts +++ b/packages/eslint-plugin-template/src/rules/table-scope.ts @@ -33,7 +33,7 @@ export default createESLintRule({ ); return { - [`Element$1[name=${domElementsPattern}] > :matches(BoundAttribute, TextAttribute)[name='scope']`]({ + [`Element[name=${domElementsPattern}] > :matches(BoundAttribute, TextAttribute)[name='scope']`]({ sourceSpan, }: TmplAstBoundAttribute | TmplAstTextAttribute) { const loc = parserServices.convertNodeSourceSpanToLoc(sourceSpan); diff --git a/packages/eslint-plugin-template/src/rules/valid-aria.ts b/packages/eslint-plugin-template/src/rules/valid-aria.ts index a1eb7867a..8ea93a63f 100644 --- a/packages/eslint-plugin-template/src/rules/valid-aria.ts +++ b/packages/eslint-plugin-template/src/rules/valid-aria.ts @@ -44,7 +44,7 @@ export default createESLintRule({ const elementNamePattern = toPattern([...getDomElements()]); return { - [`Element$1[name=${elementNamePattern}] > :matches(BoundAttribute, TextAttribute)[name=/^aria-.+/]`]( + [`Element[name=${elementNamePattern}] > :matches(BoundAttribute, TextAttribute)[name=/^aria-.+/]`]( node: TmplAstBoundAttribute | TmplAstTextAttribute, ) { const { name: attribute, sourceSpan } = node; diff --git a/packages/template-parser/src/convert-source-span-to-loc.ts b/packages/template-parser/src/convert-source-span-to-loc.ts index ee3fe79dc..f62d9e073 100644 --- a/packages/template-parser/src/convert-source-span-to-loc.ts +++ b/packages/template-parser/src/convert-source-span-to-loc.ts @@ -29,7 +29,7 @@ export function convertElementSourceSpanToLoc( context: Readonly>, node: TmplAstElement & { type: string }, ): TSESTree.SourceLocation { - if (node.type !== 'Element$1') { + if (node.type !== 'Element') { // We explicitly throw an exception since this function should not be used // with non-element nodes, e.g. `TextAttribute` or `MethodDefinition`, etc. throw new Error( diff --git a/packages/template-parser/src/index.ts b/packages/template-parser/src/index.ts index 99a45513e..615bc53c7 100644 --- a/packages/template-parser/src/index.ts +++ b/packages/template-parser/src/index.ts @@ -44,8 +44,8 @@ const KEYS: VisitorKeys = { Call: ['receiver', 'args'], SafeCall: ['receiver', 'args'], Conditional: ['condition', 'trueExp', 'falseExp'], - Element$1: ['children', 'inputs', 'outputs', 'attributes'], - Interpolation$1: ['expressions'], + Element: ['children', 'inputs', 'outputs', 'attributes'], + Interpolation: ['expressions'], PrefixNot: ['expression'], Program: ['templateNodes'], PropertyRead: ['receiver'], @@ -71,7 +71,7 @@ const KEYS: VisitorKeys = { ForLoopBlock: ['children', 'empty', 'expression', 'trackBy'], ForLoopBlockEmpty: ['children'], Content: ['children'], - LetDeclaration$1: ['value'], + LetDeclaration: ['value'], }; function fallbackKeysFilter(this: Node, key: string) { @@ -132,7 +132,7 @@ function preprocessNode(node: Node) { if (isArr) { for (j = 0; j < child.length; ++j) { - const c = child[j]; + const c = child[j] as any; if (c.type !== undefined) { // Angular sometimes uses a prop called type already c.__originalType = c.type; diff --git a/packages/template-parser/tests/__snapshots__/index.test.ts.snap b/packages/template-parser/tests/__snapshots__/index.test.ts.snap index 4542915aa..89b919f89 100644 --- a/packages/template-parser/tests/__snapshots__/index.test.ts.snap +++ b/packages/template-parser/tests/__snapshots__/index.test.ts.snap @@ -18,7 +18,7 @@ Object { 129, ], "templateNodes": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -77,14 +77,14 @@ Object { "offset": 11, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, Content { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 13, @@ -143,7 +143,7 @@ Object { "offset": 37, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -151,7 +151,7 @@ Object { "branches": Array [ IfBlockBranch { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 15, @@ -210,14 +210,14 @@ Object { "offset": 64, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 26, @@ -276,7 +276,7 @@ Object { "offset": 69, }, }, - "type": "Text$3", + "type": "Text", "value": "Hello!", }, ], @@ -439,9 +439,9 @@ Object { "offset": 64, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 13, @@ -500,7 +500,7 @@ Object { "offset": 95, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -1051,7 +1051,7 @@ Object { }, "type": "Content", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 8, @@ -1110,7 +1110,7 @@ Object { "offset": 129, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, diff --git a/packages/template-parser/tests/index.test.ts b/packages/template-parser/tests/index.test.ts index 8a59f0e7c..69bc8ee7d 100644 --- a/packages/template-parser/tests/index.test.ts +++ b/packages/template-parser/tests/index.test.ts @@ -67,7 +67,7 @@ describe('parseForESLint()', () => { 106, ], "templateNodes": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 6, @@ -120,11 +120,11 @@ describe('parseForESLint()', () => { "offset": 7, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 6, @@ -177,14 +177,14 @@ describe('parseForESLint()', () => { "offset": 47, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 20, @@ -237,7 +237,7 @@ describe('parseForESLint()', () => { "offset": 52, }, }, - "type": "Text$3", + "type": "Text", "value": "some node", }, ], @@ -382,9 +382,9 @@ describe('parseForESLint()', () => { "offset": 47, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 6, @@ -437,11 +437,11 @@ describe('parseForESLint()', () => { "offset": 74, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 4, @@ -494,7 +494,7 @@ describe('parseForESLint()', () => { "offset": 106, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -597,7 +597,7 @@ describe('parseForESLint()', () => { 525, ], "templateNodes": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -695,13 +695,13 @@ describe('parseForESLint()', () => { "offset": 11, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, DeferredBlock { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -799,14 +799,14 @@ describe('parseForESLint()', () => { "offset": 45, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 22, @@ -904,7 +904,7 @@ describe('parseForESLint()', () => { "offset": 50, }, }, - "type": "Text$3", + "type": "Text", "value": "Hello", }, ], @@ -1184,9 +1184,9 @@ describe('parseForESLint()', () => { "offset": 45, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -1284,7 +1284,7 @@ describe('parseForESLint()', () => { "offset": 72, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -2015,7 +2015,7 @@ describe('parseForESLint()', () => { }, DeferredBlock { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -2113,11 +2113,11 @@ describe('parseForESLint()', () => { "offset": 120, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [], "endSourceSpan": ParseSourceSpan { @@ -2396,9 +2396,9 @@ describe('parseForESLint()', () => { "offset": 120, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -2496,7 +2496,7 @@ describe('parseForESLint()', () => { "offset": 147, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -2783,7 +2783,7 @@ describe('parseForESLint()', () => { }, "placeholder": DeferredBlockPlaceholder { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -2881,14 +2881,14 @@ describe('parseForESLint()', () => { "offset": 192, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 34, @@ -2986,7 +2986,7 @@ describe('parseForESLint()', () => { "offset": 195, }, }, - "type": "Text$3", + "type": "Text", "value": "Placeholder content", }, ], @@ -3266,9 +3266,9 @@ describe('parseForESLint()', () => { "offset": 192, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -3366,7 +3366,7 @@ describe('parseForESLint()', () => { "offset": 229, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -4182,7 +4182,7 @@ describe('parseForESLint()', () => { }, DeferredBlock { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -4280,11 +4280,11 @@ describe('parseForESLint()', () => { "offset": 262, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [], "endSourceSpan": ParseSourceSpan { @@ -4563,9 +4563,9 @@ describe('parseForESLint()', () => { "offset": 262, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -4663,7 +4663,7 @@ describe('parseForESLint()', () => { "offset": 292, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -4764,7 +4764,7 @@ describe('parseForESLint()', () => { "loading": DeferredBlockLoading { "afterTime": 100, "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -4862,11 +4862,11 @@ describe('parseForESLint()', () => { "offset": 343, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [ TextAttribute { "i18n": undefined, @@ -5700,9 +5700,9 @@ describe('parseForESLint()', () => { "offset": 343, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -5800,7 +5800,7 @@ describe('parseForESLint()', () => { "offset": 396, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -6536,7 +6536,7 @@ describe('parseForESLint()', () => { }, DeferredBlock { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -6634,11 +6634,11 @@ describe('parseForESLint()', () => { "offset": 429, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [], "endSourceSpan": ParseSourceSpan { @@ -6917,9 +6917,9 @@ describe('parseForESLint()', () => { "offset": 429, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -7017,7 +7017,7 @@ describe('parseForESLint()', () => { "offset": 456, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -7114,7 +7114,7 @@ describe('parseForESLint()', () => { }, "error": DeferredBlockError { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -7212,14 +7212,14 @@ describe('parseForESLint()', () => { "offset": 479, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 42, @@ -7317,7 +7317,7 @@ describe('parseForESLint()', () => { "offset": 482, }, }, - "type": "Text$3", + "type": "Text", "value": "Failed to load the calendar", }, ], @@ -7597,9 +7597,9 @@ describe('parseForESLint()', () => { "offset": 479, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -7697,7 +7697,7 @@ describe('parseForESLint()', () => { "offset": 524, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -8494,7 +8494,7 @@ describe('parseForESLint()', () => { 200, ], "templateNodes": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -8559,7 +8559,7 @@ describe('parseForESLint()', () => { "offset": 11, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -8635,7 +8635,7 @@ describe('parseForESLint()', () => { }, "type": "BoundText", "value": ASTWithSource { - "ast": Interpolation$1 { + "ast": Interpolation { "expressions": Array [ PropertyRead { "loc": Object { @@ -8757,7 +8757,7 @@ describe('parseForESLint()', () => { " ", ], - "type": "Interpolation$1", + "type": "Interpolation", }, "errors": Array [], "loc": Object { @@ -9226,7 +9226,7 @@ describe('parseForESLint()', () => { }, "type": "BoundText", "value": ASTWithSource { - "ast": Interpolation$1 { + "ast": Interpolation { "expressions": Array [ PropertyRead { "loc": Object { @@ -9348,7 +9348,7 @@ describe('parseForESLint()', () => { " ", ], - "type": "Interpolation$1", + "type": "Interpolation", }, "errors": Array [], "loc": Object { @@ -9817,7 +9817,7 @@ describe('parseForESLint()', () => { }, "type": "BoundText", "value": ASTWithSource { - "ast": Interpolation$1 { + "ast": Interpolation { "expressions": Array [ PropertyRead { "loc": Object { @@ -9939,7 +9939,7 @@ describe('parseForESLint()', () => { " ", ], - "type": "Interpolation$1", + "type": "Interpolation", }, "errors": Array [], "loc": Object { @@ -10474,7 +10474,7 @@ describe('parseForESLint()', () => { 81, ], "templateNodes": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -10527,11 +10527,11 @@ describe('parseForESLint()', () => { "offset": 11, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - LetDeclaration$1 { + LetDeclaration { "loc": Object { "end": Object { "column": 20, @@ -10627,7 +10627,7 @@ describe('parseForESLint()', () => { "offset": 11, }, }, - "type": "LetDeclaration$1", + "type": "LetDeclaration", "value": ASTWithSource { "ast": LiteralPrimitive { "loc": Object { @@ -10717,7 +10717,7 @@ describe('parseForESLint()', () => { }, }, }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -10770,11 +10770,11 @@ describe('parseForESLint()', () => { "offset": 33, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - LetDeclaration$1 { + LetDeclaration { "loc": Object { "end": Object { "column": 24, @@ -10870,7 +10870,7 @@ describe('parseForESLint()', () => { "offset": 33, }, }, - "type": "LetDeclaration$1", + "type": "LetDeclaration", "value": ASTWithSource { "ast": Binary { "left": PropertyRead { @@ -11029,7 +11029,7 @@ describe('parseForESLint()', () => { }, }, }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -11082,11 +11082,11 @@ describe('parseForESLint()', () => { "offset": 59, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - LetDeclaration$1 { + LetDeclaration { "loc": Object { "end": Object { "column": 24, @@ -11182,7 +11182,7 @@ describe('parseForESLint()', () => { "offset": 59, }, }, - "type": "LetDeclaration$1", + "type": "LetDeclaration", "value": ASTWithSource { "ast": Call { "args": Array [], @@ -11323,7 +11323,7 @@ describe('parseForESLint()', () => { }, }, }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 6, @@ -11376,7 +11376,7 @@ describe('parseForESLint()', () => { "offset": 81, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -11424,7 +11424,7 @@ describe('parseForESLint()', () => { 142, ], "templateNodes": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -11483,7 +11483,7 @@ describe('parseForESLint()', () => { "offset": 11, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -11551,7 +11551,7 @@ describe('parseForESLint()', () => { }, "type": "BoundText", "value": ASTWithSource { - "ast": Interpolation$1 { + "ast": Interpolation { "expressions": Array [ PropertyRead { "loc": Object { @@ -11651,7 +11651,7 @@ describe('parseForESLint()', () => { " ", ], - "type": "Interpolation$1", + "type": "Interpolation", }, "errors": Array [], "loc": Object { @@ -12290,7 +12290,7 @@ describe('parseForESLint()', () => { ], "empty": ForLoopBlockEmpty { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -12349,7 +12349,7 @@ describe('parseForESLint()', () => { "offset": 111, }, }, - "type": "Text$3", + "type": "Text", "value": " There are no items. ", @@ -13182,7 +13182,7 @@ describe('parseForESLint()', () => { 283, ], "templateNodes": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 10, @@ -13259,7 +13259,7 @@ describe('parseForESLint()', () => { "offset": 11, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -13267,7 +13267,7 @@ describe('parseForESLint()', () => { "cases": Array [ SwitchBlockCase { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 14, @@ -13344,14 +13344,14 @@ describe('parseForESLint()', () => { "offset": 75, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 27, @@ -13428,7 +13428,7 @@ describe('parseForESLint()', () => { "offset": 81, }, }, - "type": "Text$3", + "type": "Text", "value": "Case A.", }, ], @@ -13645,9 +13645,9 @@ describe('parseForESLint()', () => { "offset": 75, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -13724,7 +13724,7 @@ describe('parseForESLint()', () => { "offset": 108, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -14079,7 +14079,7 @@ describe('parseForESLint()', () => { }, SwitchBlockCase { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 14, @@ -14156,14 +14156,14 @@ describe('parseForESLint()', () => { "offset": 152, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 27, @@ -14240,7 +14240,7 @@ describe('parseForESLint()', () => { "offset": 158, }, }, - "type": "Text$3", + "type": "Text", "value": "Case B.", }, ], @@ -14457,9 +14457,9 @@ describe('parseForESLint()', () => { "offset": 152, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -14536,7 +14536,7 @@ describe('parseForESLint()', () => { "offset": 185, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -14891,7 +14891,7 @@ describe('parseForESLint()', () => { }, SwitchBlockCase { "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 14, @@ -14968,14 +14968,14 @@ describe('parseForESLint()', () => { "offset": 224, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, - Element$1 { + Element { "attributes": Array [], "children": Array [ - Text$3 { + Text { "loc": Object { "end": Object { "column": 33, @@ -15052,7 +15052,7 @@ describe('parseForESLint()', () => { "offset": 230, }, }, - "type": "Text$3", + "type": "Text", "value": "Default case.", }, ], @@ -15269,9 +15269,9 @@ describe('parseForESLint()', () => { "offset": 224, }, }, - "type": "Element$1", + "type": "Element", }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 12, @@ -15348,7 +15348,7 @@ describe('parseForESLint()', () => { "offset": 263, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -15980,7 +15980,7 @@ describe('parseForESLint()', () => { "type": "SwitchBlock", "unknownBlocks": Array [], }, - Text$3 { + Text { "loc": Object { "end": Object { "column": 6, @@ -16057,7 +16057,7 @@ describe('parseForESLint()', () => { "offset": 283, }, }, - "type": "Text$3", + "type": "Text", "value": " ", }, @@ -16149,7 +16149,7 @@ describe('parseForESLint()', () => { }, "type": "BoundText", "value": ASTWithSource { - "ast": Interpolation$1 { + "ast": Interpolation { "expressions": Array [ Call { "args": Array [], @@ -16321,7 +16321,7 @@ describe('parseForESLint()', () => { " ", "", ], - "type": "Interpolation$1", + "type": "Interpolation", }, "errors": Array [], "loc": Object { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 74f4df97e..f093b393a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,8 +22,8 @@ importers: specifier: 19.2.4 version: 19.2.4(@types/node@20.17.25) '@angular/compiler': - specifier: 19.2.1 - version: 19.2.1 + specifier: 19.2.3 + version: 19.2.3 '@commitlint/cli': specifier: 19.8.0 version: 19.8.0(@types/node@20.17.25)(typescript@5.7.3) @@ -435,14 +435,9 @@ packages: engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} hasBin: true - '@angular/compiler@19.2.1': - resolution: {integrity: sha512-yCN/lgXMvMsPtEmTChd621zV17RLn+flhcJ6mNZjyGA7zx16m5zity4/00G6phbGfG8WXOtH5vQ/k7nnO7wS4A==} + '@angular/compiler@19.2.3': + resolution: {integrity: sha512-TL/JIU7vzSWD+IrMq2PAiHZi7IUFSRhdHo8q6/WuZ8SQmbuXCK2pJvHZpTtUdLswdPeD/UVhkhTAhQzEyEdZVg==} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/core': 19.2.1 - peerDependenciesMeta: - '@angular/core': - optional: true '@apidevtools/json-schema-ref-parser@11.7.2': resolution: {integrity: sha512-4gY54eEGEstClvEkGnwVkTkrx0sqwemEFG5OSRRn3tD91XH0+Q8XIkYIfo7IwEWPpJZwILb9GUXeShtplRc/eA==} @@ -5951,7 +5946,7 @@ snapshots: - chokidar - supports-color - '@angular/compiler@19.2.1': + '@angular/compiler@19.2.3': dependencies: tslib: 2.8.1 From 26515506947d7aef06ba6353ece9f9a8e9e7a0cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 15:35:23 +0400 Subject: [PATCH 19/23] fix: update typescript-eslint packages to v8.27.0 (#2328) --- .github/workflows/ci.yml | 14 +- .../inline-template-fixer.test.ts.snap | 2 +- ...ion-false-ng-add-then-project.test.ts.snap | 2 +- ...ion-false-project-then-ng-add.test.ts.snap | 2 +- .../new-workspace-type-module.test.ts.snap | 2 +- .../__snapshots__/new-workspace.test.ts.snap | 2 +- package.json | 8 +- packages/schematics/package.json | 2 +- pnpm-lock.yaml | 274 +++++++++++------- pnpm-workspace.yaml | 3 + 10 files changed, 194 insertions(+), 117 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e98ba12a7..b01051e90 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,13 +52,13 @@ jobs: pnpm nx-cloud record -- pnpm format-check pnpm nx-cloud record -- pnpm nx sync:check - - name: Run parallel distributed tasks for build, typecheck, check-rule-docs, check-rule-lists, check-rule-configs, lint and test targets - uses: jameshenry/parallel-bash-commands@v1 - with: - # Note that the typecheck target *also* typechecks tests and tools, - # whereas the build only checks src files - cmd1: pnpm nx run-many -t build,typecheck,check-rule-docs,lint,check-rule-lists,check-rule-configs - cmd2: pnpm nx run-many -t test --codeCoverage + - name: Run parallel distributed tasks for build, typecheck, check-rule-docs, check-rule-lists, check-rule-configs, lint targets + # Note that the typecheck target *also* typechecks tests and tools, + # whereas the build only checks src files + run: pnpm nx run-many -t build,typecheck,check-rule-docs,lint,check-rule-lists,check-rule-configs + + - name: Run unit tests + run: pnpm nx run-many -t test --codeCoverage # Run distributed e2e test suites with independent local registries (max 1 per agent via parallel=1) - name: Run e2e test suites diff --git a/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap b/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap index 6cd5890f2..96ebdcf3e 100644 --- a/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap +++ b/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap @@ -30,6 +30,6 @@ exports[`inline-template-fixer should generate the expected inline template fixe "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.X.X", - "typescript-eslint": "8.26.1" + "typescript-eslint": "8.27.0" } `; diff --git a/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap b/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap index 2f9693db7..3402dfbd4 100644 --- a/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap @@ -15,7 +15,7 @@ exports[`new-workspace-create-application-false-ng-add-then-project should pass "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.X.X", - "typescript-eslint": "8.26.1" + "typescript-eslint": "8.27.0" } `; diff --git a/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap b/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap index d90b7c1ce..b1339f3a9 100644 --- a/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap @@ -15,7 +15,7 @@ exports[`new-workspace-create-application-false-project-then-ng-add should pass "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.X.X", - "typescript-eslint": "8.26.1" + "typescript-eslint": "8.27.0" } `; diff --git a/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap b/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap index 47117db76..9fc0973bd 100644 --- a/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap @@ -16,7 +16,7 @@ exports[`new-workspace-type-module should pass linting after creating a new work "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^19.X.X", "typescript": "~5.X.X", - "typescript-eslint": "8.26.1" + "typescript-eslint": "8.27.0" } `; diff --git a/e2e/src/__snapshots__/new-workspace.test.ts.snap b/e2e/src/__snapshots__/new-workspace.test.ts.snap index f5df0970a..535afa18d 100644 --- a/e2e/src/__snapshots__/new-workspace.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace.test.ts.snap @@ -16,7 +16,7 @@ exports[`new-workspace should pass linting after creating a new workspace from s "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^19.X.X", "typescript": "~5.X.X", - "typescript-eslint": "8.26.1" + "typescript-eslint": "8.27.0" } `; diff --git a/package.json b/package.json index 2a95837a1..0f876bc99 100644 --- a/package.json +++ b/package.json @@ -72,9 +72,9 @@ "@types/node": "20.17.25", "@types/semver": "^7.5.8", "@types/yargs": "^17.0.33", - "@typescript-eslint/rule-tester": "8.26.1", - "@typescript-eslint/types": "8.26.1", - "@typescript-eslint/utils": "8.26.1", + "@typescript-eslint/rule-tester": "8.27.0", + "@typescript-eslint/types": "8.27.0", + "@typescript-eslint/utils": "8.27.0", "cz-conventional-changelog": "3.3.0", "esbuild": "^0.25.0", "eslint": "9.22.0", @@ -98,7 +98,7 @@ "tslib": "^2.4.1", "tsx": "^4.7.3", "typescript": "5.7.3", - "typescript-eslint": "8.26.1", + "typescript-eslint": "8.27.0", "verdaccio": "6.0.5", "yargs": "17.7.2" }, diff --git a/packages/schematics/package.json b/packages/schematics/package.json index 4f9ed3e19..90c409dd3 100644 --- a/packages/schematics/package.json +++ b/packages/schematics/package.json @@ -45,7 +45,7 @@ "strip-json-comments": "3.1.1" }, "devDependencies": { - "@typescript-eslint/utils": "8.26.1", + "@typescript-eslint/utils": "8.27.0", "eslint": "9.22.0" }, "gitHead": "e2006e5e9c99e5a943d1a999e0efa5247d29ec24" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f093b393a..6383b8b3d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,9 @@ settings: excludeLinksFromLockfile: false overrides: - '@typescript-eslint/parser': 8.26.1 - '@typescript-eslint/rule-tester': 8.26.1 - '@typescript-eslint/utils': 8.26.1 + '@typescript-eslint/parser': 8.27.0 + '@typescript-eslint/rule-tester': 8.27.0 + '@typescript-eslint/utils': 8.27.0 patchedDependencies: '@typescript-eslint/rule-tester': @@ -44,7 +44,7 @@ importers: version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint-plugin': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/jest': specifier: 0.0.0-pr-30418-4f79396 version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) @@ -91,14 +91,14 @@ importers: specifier: ^17.0.33 version: 17.0.33 '@typescript-eslint/rule-tester': - specifier: 8.26.1 - version: 8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.27.0 + version: 8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/types': - specifier: 8.26.1 - version: 8.26.1 + specifier: 8.27.0 + version: 8.27.0 '@typescript-eslint/utils': - specifier: 8.26.1 - version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.27.0 + version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) cz-conventional-changelog: specifier: 3.3.0 version: 3.3.0(@types/node@20.17.25)(typescript@5.7.3) @@ -169,8 +169,8 @@ importers: specifier: 5.7.3 version: 5.7.3 typescript-eslint: - specifier: 8.26.1 - version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.27.0 + version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) verdaccio: specifier: 6.0.5 version: 6.0.5(encoding@0.1.13)(typanion@3.14.0) @@ -203,10 +203,10 @@ importers: version: link:../template-parser '@typescript-eslint/types': specifier: ^8.0.0 - version: 8.26.1 + version: 8.27.0 '@typescript-eslint/utils': - specifier: 8.26.1 - version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.27.0 + version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: specifier: ^8.57.0 || ^9.0.0 version: 9.22.0(jiti@2.4.2) @@ -243,8 +243,8 @@ importers: specifier: workspace:* version: link:../utils '@typescript-eslint/utils': - specifier: 8.26.1 - version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.27.0 + version: 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) eslint: specifier: ^8.57.0 || ^9.0.0 version: 9.15.0(jiti@2.4.2) @@ -268,8 +268,8 @@ importers: specifier: ^7.11.0 || ^8.0.0 version: 8.16.0 '@typescript-eslint/utils': - specifier: 8.26.1 - version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.27.0 + version: 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) aria-query: specifier: 5.3.2 version: 5.3.2 @@ -320,8 +320,8 @@ importers: version: 3.1.1 devDependencies: '@typescript-eslint/utils': - specifier: 8.26.1 - version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + specifier: 8.27.0 + version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: specifier: 9.22.0 version: 9.22.0(jiti@2.4.2) @@ -347,14 +347,14 @@ importers: specifier: workspace:* version: link:../template-parser '@typescript-eslint/parser': - specifier: 8.26.1 - version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.27.0 + version: 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) '@typescript-eslint/rule-tester': - specifier: 8.26.1 - version: 8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.27.0 + version: 8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) '@typescript-eslint/utils': - specifier: 8.26.1 - version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.27.0 + version: 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) eslint: specifier: ^8.57.0 || ^9.0.0 version: 9.15.0(jiti@2.4.2) @@ -368,8 +368,8 @@ importers: specifier: workspace:* version: link:../bundled-angular-compiler '@typescript-eslint/utils': - specifier: 8.26.1 - version: 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + specifier: 8.27.0 + version: 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) eslint: specifier: ^8.57.0 || ^9.0.0 version: 9.15.0(jiti@2.4.2) @@ -1316,6 +1316,12 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -1815,7 +1821,7 @@ packages: '@nx/eslint-plugin@0.0.0-pr-30418-4f79396': resolution: {integrity: sha512-TvmNHZXqsW+/orP8de3QMgmFQF02AKfL0aKMQM/wKdDYI8Kwfgxjc9RGDgByDlg0ZjwoYa3cWzpDJJgd2chlaQ==} peerDependencies: - '@typescript-eslint/parser': 8.26.1 + '@typescript-eslint/parser': 8.27.0 eslint-config-prettier: ^9.0.0 peerDependenciesMeta: eslint-config-prettier: @@ -2223,30 +2229,30 @@ packages: resolution: {integrity: sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': 8.26.1 + '@typescript-eslint/parser': 8.27.0 eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.26.1': - resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==} + '@typescript-eslint/eslint-plugin@8.27.0': + resolution: {integrity: sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': 8.26.1 + '@typescript-eslint/parser': 8.27.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.26.1': - resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==} + '@typescript-eslint/parser@8.27.0': + resolution: {integrity: sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==} 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' - '@typescript-eslint/rule-tester@8.26.1': - resolution: {integrity: sha512-hiCEpOw/ctCBias5sYNShkdtSum5Hix7nyXQs9bqr1no1+oD3mgYSy0iZfkx8MVA+86PLr+Hr3OUbOx3k2YAEg==} + '@typescript-eslint/rule-tester@8.27.0': + resolution: {integrity: sha512-38XMf0Y1G7iApnxutV+5iLwRTOKKSSMVFj9jPIhe7RHQsR4bF1VPUe+dvxrsas3jz5QyT6WtLwMBTLB5Gtghyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2255,8 +2261,8 @@ packages: resolution: {integrity: sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.26.1': - resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==} + '@typescript-eslint/scope-manager@8.27.0': + resolution: {integrity: sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@8.16.0': @@ -2276,6 +2282,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.27.0': + resolution: {integrity: sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==} + 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' + '@typescript-eslint/types@8.16.0': resolution: {integrity: sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2284,6 +2297,10 @@ packages: resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.27.0': + resolution: {integrity: sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.16.0': resolution: {integrity: sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2299,8 +2316,14 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.26.1': - resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==} + '@typescript-eslint/typescript-estree@8.27.0': + resolution: {integrity: sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.27.0': + resolution: {integrity: sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2314,6 +2337,10 @@ packages: resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.27.0': + resolution: {integrity: sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@verdaccio/auth@8.0.0-next-8.7': resolution: {integrity: sha512-CSLBAsCJT1oOpJ4OWnVGmN6o/ZilDNa7Aa5+AU1LI2lbRblqgr4BVRn07GFqimJ//6+tPzl8BHgyiCbBhh1ZiA==} engines: {node: '>=18'} @@ -5496,6 +5523,12 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-jest@29.2.4: resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} @@ -5585,8 +5618,8 @@ packages: typescript: optional: true - typescript-eslint@8.26.1: - resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==} + typescript-eslint@8.27.0: + resolution: {integrity: sha512-ZZ/8+Y0rRUMuW1gJaPtLWe4ryHbsPLzzibk5Sq+IFa2aOH1Vo0gPr1fbA6pOnzBke7zC2Da4w8AyCgxKXo3lqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7018,6 +7051,11 @@ snapshots: eslint: 9.22.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.5.1(eslint@9.22.0(jiti@2.4.2))': + dependencies: + eslint: 9.22.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.19.0': @@ -7646,13 +7684,13 @@ snapshots: - typescript - verdaccio - '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) chalk: 4.1.2 confusing-browser-globals: 1.0.11 globals: 15.12.0 @@ -8139,13 +8177,13 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.16.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.16.0 '@typescript-eslint/type-utils': 8.16.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.16.0 eslint: 9.22.0(jiti@2.4.2) graphemer: 1.4.0 @@ -8157,14 +8195,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/type-utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.27.0 eslint: 9.22.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 @@ -8174,35 +8212,35 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': + '@typescript-eslint/parser@8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.27.0 debug: 4.4.0 eslint: 9.15.0(jiti@2.4.2) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.27.0 debug: 4.4.0 eslint: 9.22.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/rule-tester@8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': + '@typescript-eslint/rule-tester@8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: - '@typescript-eslint/parser': 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.5.4) - '@typescript-eslint/utils': 8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + '@typescript-eslint/parser': 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) ajv: 6.12.6 eslint: 9.15.0(jiti@2.4.2) json-stable-stringify-without-jsonify: 1.0.1 @@ -8212,11 +8250,11 @@ snapshots: - supports-color - typescript - '@typescript-eslint/rule-tester@8.26.1(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/rule-tester@8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) ajv: 6.12.6 eslint: 9.22.0(jiti@2.4.2) json-stable-stringify-without-jsonify: 1.0.1 @@ -8231,15 +8269,15 @@ snapshots: '@typescript-eslint/types': 8.16.0 '@typescript-eslint/visitor-keys': 8.16.0 - '@typescript-eslint/scope-manager@8.26.1': + '@typescript-eslint/scope-manager@8.27.0': dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/visitor-keys': 8.27.0 '@typescript-eslint/type-utils@8.16.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.16.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 eslint: 9.22.0(jiti@2.4.2) ts-api-utils: 1.4.3(typescript@5.7.3) @@ -8251,7 +8289,18 @@ snapshots: '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + debug: 4.4.0 + eslint: 9.22.0(jiti@2.4.2) + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/type-utils@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 eslint: 9.22.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) @@ -8263,6 +8312,8 @@ snapshots: '@typescript-eslint/types@8.26.1': {} + '@typescript-eslint/types@8.27.0': {} + '@typescript-eslint/typescript-estree@8.16.0(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.16.0 @@ -8278,7 +8329,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.26.1(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.26.1(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.26.1 '@typescript-eslint/visitor-keys': 8.26.1 @@ -8287,42 +8338,56 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.27.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/visitor-keys': 8.27.0 + debug: 4.4.0 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 ts-api-utils: 2.0.1(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.26.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.27.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/visitor-keys': 8.26.1 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/visitor-keys': 8.27.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) + ts-api-utils: 2.1.0(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.1(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': + '@typescript-eslint/utils@8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.5.4) eslint: 9.15.0(jiti@2.4.2) typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.26.1 - '@typescript-eslint/types': 8.26.1 - '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.22.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) eslint: 9.22.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: @@ -8338,6 +8403,11 @@ snapshots: '@typescript-eslint/types': 8.26.1 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.27.0': + dependencies: + '@typescript-eslint/types': 8.27.0 + eslint-visitor-keys: 4.2.0 + '@verdaccio/auth@8.0.0-next-8.7': dependencies: '@verdaccio/config': 8.0.0-next-8.7 @@ -11989,6 +12059,10 @@ snapshots: dependencies: typescript: 5.7.3 + ts-api-utils@2.1.0(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + ts-jest@29.2.4(@babel/core@7.26.0)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3)))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 @@ -12075,20 +12149,20 @@ snapshots: typescript-eslint@8.16.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.16.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.22.0(jiti@2.4.2) optionalDependencies: typescript: 5.7.3 transitivePeerDependencies: - supports-color - typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.22.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7bdac8168..801c4ecb1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,4 +2,7 @@ packages: - packages/* onlyBuiltDependencies: - '@swc/core' + - esbuild - nx +ignoredBuiltDependencies: + - core-js From 857d14a8207e82f107ad0a535db4b2527c216ec7 Mon Sep 17 00:00:00 2001 From: JamesHenry Date: Sat, 22 Mar 2025 16:28:19 +0400 Subject: [PATCH 20/23] chore: wip --- packages/bundled-angular-compiler/project.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/bundled-angular-compiler/project.json b/packages/bundled-angular-compiler/project.json index 492e5de20..73de7b55f 100644 --- a/packages/bundled-angular-compiler/project.json +++ b/packages/bundled-angular-compiler/project.json @@ -5,8 +5,8 @@ "targets": { "build": { "executor": "nx:run-commands", - "dependsOn": ["^build", "^compile", "compile"], - "outputs": ["{projectRoot}/dist"], + "dependsOn": ["compile"], + "outputs": ["{projectRoot}/dist/index.js"], "options": { "cwd": "packages/bundled-angular-compiler", "parallel": false, @@ -14,6 +14,13 @@ "npx esbuild ./src/index.ts --bundle --outfile=./dist/index.js --platform=node --keep-names" ] } + }, + "compile": { + "outputs": [ + "{projectRoot}/dist/index.d.ts", + "{projectRoot}/dist/index.d.ts.map", + "{projectRoot}/dist/tsconfig.lib.tsbuildinfo" + ] } }, "implicitDependencies": [] From 1c028e41f9701b76b69047e7bd113b525b18e222 Mon Sep 17 00:00:00 2001 From: James Henry Date: Sat, 22 Mar 2025 16:57:25 +0400 Subject: [PATCH 21/23] chore: config cleanup (#2334) --- nx.json | 1 + packages/angular-eslint/project.json | 3 +-- packages/builder/project.json | 3 +-- packages/bundled-angular-compiler/project.json | 3 +-- packages/eslint-plugin-template/project.json | 1 - packages/eslint-plugin/project.json | 1 - packages/schematics/project.json | 3 +-- packages/template-parser/project.json | 3 +-- packages/test-utils/project.json | 7 ------- packages/utils/package.json | 15 +++++++++++++++ packages/utils/project.json | 17 ----------------- 11 files changed, 21 insertions(+), 36 deletions(-) delete mode 100644 packages/test-utils/project.json delete mode 100644 packages/utils/project.json diff --git a/nx.json b/nx.json index 9b54a6e67..693f4392a 100644 --- a/nx.json +++ b/nx.json @@ -25,6 +25,7 @@ "exclude": [ "*", "packages/builder/**", + "packages/bundled-angular-compiler/**", "packages/eslint-plugin-template/**", "packages/eslint-plugin/**", "packages/nx-plugin/**", diff --git a/packages/angular-eslint/project.json b/packages/angular-eslint/project.json index e2edac3d5..a64e4d5fc 100644 --- a/packages/angular-eslint/project.json +++ b/packages/angular-eslint/project.json @@ -2,6 +2,5 @@ "name": "angular-eslint", "$schema": "../../node_modules/nx/schemas/project-schema.json", "type": "library", - "targets": {}, - "implicitDependencies": [] + "targets": {} } diff --git a/packages/builder/project.json b/packages/builder/project.json index 1973ed5fc..1e656a836 100644 --- a/packages/builder/project.json +++ b/packages/builder/project.json @@ -15,6 +15,5 @@ "jestConfig": "packages/builder/jest.config.ts" } } - }, - "implicitDependencies": [] + } } diff --git a/packages/bundled-angular-compiler/project.json b/packages/bundled-angular-compiler/project.json index 73de7b55f..024d22b9e 100644 --- a/packages/bundled-angular-compiler/project.json +++ b/packages/bundled-angular-compiler/project.json @@ -22,6 +22,5 @@ "{projectRoot}/dist/tsconfig.lib.tsbuildinfo" ] } - }, - "implicitDependencies": [] + } } diff --git a/packages/eslint-plugin-template/project.json b/packages/eslint-plugin-template/project.json index 2997b3a1c..5a5a862d3 100644 --- a/packages/eslint-plugin-template/project.json +++ b/packages/eslint-plugin-template/project.json @@ -2,7 +2,6 @@ "name": "eslint-plugin-template", "$schema": "../../node_modules/nx/schemas/project-schema.json", "type": "library", - "implicitDependencies": ["template-parser", "bundled-angular-compiler"], "namedInputs": { "projectSpecificFiles": [ "{workspaceRoot}/tools/scripts/generate-rule-docs.ts", diff --git a/packages/eslint-plugin/project.json b/packages/eslint-plugin/project.json index 46161cfe2..13aa40a70 100644 --- a/packages/eslint-plugin/project.json +++ b/packages/eslint-plugin/project.json @@ -2,7 +2,6 @@ "name": "eslint-plugin", "$schema": "../../node_modules/nx/schemas/project-schema.json", "type": "library", - "implicitDependencies": ["bundled-angular-compiler"], "namedInputs": { "projectSpecificFiles": [ "{workspaceRoot}/tools/scripts/generate-rule-docs.ts", diff --git a/packages/schematics/project.json b/packages/schematics/project.json index a05542aee..982c19843 100644 --- a/packages/schematics/project.json +++ b/packages/schematics/project.json @@ -34,6 +34,5 @@ "passWithNoTests": false } } - }, - "implicitDependencies": [] + } } diff --git a/packages/template-parser/project.json b/packages/template-parser/project.json index 8ec195aaa..bf2485182 100644 --- a/packages/template-parser/project.json +++ b/packages/template-parser/project.json @@ -11,6 +11,5 @@ "passWithNoTests": false } } - }, - "implicitDependencies": [] + } } diff --git a/packages/test-utils/project.json b/packages/test-utils/project.json deleted file mode 100644 index bafd1ebf4..000000000 --- a/packages/test-utils/project.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "test-utils", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "type": "library", - "targets": {}, - "implicitDependencies": [] -} diff --git a/packages/utils/package.json b/packages/utils/package.json index 8061bc6d2..c55a29083 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -24,5 +24,20 @@ "dependencies": { "@angular-eslint/bundled-angular-compiler": "workspace:*" }, + "nx": { + "namedInputs": { + "projectSpecificFiles": [ + "{workspaceRoot}/tools/scripts/update-native-event-names.ts" + ] + }, + "targets": { + "update-native-event-names": { + "outputs": [ + "{projectRoot}/src/eslint-plugin/get-native-event-names" + ], + "command": "npx tsx ./tools/scripts/update-native-event-names.ts" + } + } + }, "gitHead": "e2006e5e9c99e5a943d1a999e0efa5247d29ec24" } diff --git a/packages/utils/project.json b/packages/utils/project.json deleted file mode 100644 index 6aa1a2af5..000000000 --- a/packages/utils/project.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "utils", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "type": "library", - "implicitDependencies": ["bundled-angular-compiler"], - "namedInputs": { - "projectSpecificFiles": [ - "{workspaceRoot}/tools/scripts/update-native-event-names.ts" - ] - }, - "targets": { - "update-native-event-names": { - "outputs": ["{projectRoot}/src/eslint-plugin/get-native-event-names"], - "command": "npx tsx ./tools/scripts/update-native-event-names.ts" - } - } -} From 5d839161b92b065d89ee0b5f8f58d6ebe656d2cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 22 Mar 2025 17:14:48 +0400 Subject: [PATCH 22/23] fix: update dependency eslint to v9.23.0 (#2331) --- .../inline-template-fixer.test.ts.snap | 2 +- ...ion-false-ng-add-then-project.test.ts.snap | 2 +- ...ion-false-project-then-ng-add.test.ts.snap | 2 +- .../new-workspace-type-module.test.ts.snap | 2 +- .../__snapshots__/new-workspace.test.ts.snap | 2 +- package.json | 2 +- packages/schematics/package.json | 2 +- pnpm-lock.yaml | 213 ++++++++++++++---- 8 files changed, 171 insertions(+), 56 deletions(-) diff --git a/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap b/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap index 96ebdcf3e..da2541f64 100644 --- a/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap +++ b/e2e/src/__snapshots__/inline-template-fixer.test.ts.snap @@ -22,7 +22,7 @@ exports[`inline-template-fixer should generate the expected inline template fixe "@angular/compiler-cli": "^19.X.X", "@types/jasmine": "~5.1.0", "angular-eslint": "0.0.0-e2e", - "eslint": "^9.22.0", + "eslint": "^9.23.0", "jasmine-core": "~5.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", diff --git a/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap b/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap index 3402dfbd4..723a40975 100644 --- a/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-create-application-false-ng-add-then-project.test.ts.snap @@ -7,7 +7,7 @@ exports[`new-workspace-create-application-false-ng-add-then-project should pass "@angular/compiler-cli": "^19.X.X", "@types/jasmine": "~5.1.0", "angular-eslint": "0.0.0-e2e", - "eslint": "^9.22.0", + "eslint": "^9.23.0", "jasmine-core": "~5.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", diff --git a/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap b/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap index b1339f3a9..deb887f65 100644 --- a/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-create-application-false-project-then-ng-add.test.ts.snap @@ -7,7 +7,7 @@ exports[`new-workspace-create-application-false-project-then-ng-add should pass "@angular/compiler-cli": "^19.X.X", "@types/jasmine": "~5.1.0", "angular-eslint": "0.0.0-e2e", - "eslint": "^9.22.0", + "eslint": "^9.23.0", "jasmine-core": "~5.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", diff --git a/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap b/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap index 9fc0973bd..1ae2e2bfd 100644 --- a/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace-type-module.test.ts.snap @@ -7,7 +7,7 @@ exports[`new-workspace-type-module should pass linting after creating a new work "@angular/compiler-cli": "^19.X.X", "@types/jasmine": "~5.1.0", "angular-eslint": "0.0.0-e2e", - "eslint": "^9.22.0", + "eslint": "^9.23.0", "jasmine-core": "~5.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", diff --git a/e2e/src/__snapshots__/new-workspace.test.ts.snap b/e2e/src/__snapshots__/new-workspace.test.ts.snap index 535afa18d..5d3ae85a0 100644 --- a/e2e/src/__snapshots__/new-workspace.test.ts.snap +++ b/e2e/src/__snapshots__/new-workspace.test.ts.snap @@ -7,7 +7,7 @@ exports[`new-workspace should pass linting after creating a new workspace from s "@angular/compiler-cli": "^19.X.X", "@types/jasmine": "~5.1.0", "angular-eslint": "0.0.0-e2e", - "eslint": "^9.22.0", + "eslint": "^9.23.0", "jasmine-core": "~5.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", diff --git a/package.json b/package.json index 0f876bc99..c8acd20cb 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "@typescript-eslint/utils": "8.27.0", "cz-conventional-changelog": "3.3.0", "esbuild": "^0.25.0", - "eslint": "9.22.0", + "eslint": "9.23.0", "eslint-config-prettier": "10.1.1", "execa": "5.1.1", "husky": "9.1.7", diff --git a/packages/schematics/package.json b/packages/schematics/package.json index 90c409dd3..cfcaf0e1c 100644 --- a/packages/schematics/package.json +++ b/packages/schematics/package.json @@ -46,7 +46,7 @@ }, "devDependencies": { "@typescript-eslint/utils": "8.27.0", - "eslint": "9.22.0" + "eslint": "9.23.0" }, "gitHead": "e2006e5e9c99e5a943d1a999e0efa5247d29ec24" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6383b8b3d..c05e2806a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,10 +41,10 @@ importers: version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(esbuild@0.25.1)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.23.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/eslint-plugin': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/jest': specifier: 0.0.0-pr-30418-4f79396 version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) @@ -53,7 +53,7 @@ importers: version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/plugin': specifier: 0.0.0-pr-30418-4f79396 - version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + version: 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.23.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/workspace': specifier: 0.0.0-pr-30418-4f79396 version: 0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)) @@ -92,13 +92,13 @@ importers: version: 17.0.33 '@typescript-eslint/rule-tester': specifier: 8.27.0 - version: 8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/types': specifier: 8.27.0 version: 8.27.0 '@typescript-eslint/utils': specifier: 8.27.0 - version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) cz-conventional-changelog: specifier: 3.3.0 version: 3.3.0(@types/node@20.17.25)(typescript@5.7.3) @@ -106,11 +106,11 @@ importers: specifier: ^0.25.0 version: 0.25.1 eslint: - specifier: 9.22.0 - version: 9.22.0(jiti@2.4.2) + specifier: 9.23.0 + version: 9.23.0(jiti@2.4.2) eslint-config-prettier: specifier: 10.1.1 - version: 10.1.1(eslint@9.22.0(jiti@2.4.2)) + version: 10.1.1(eslint@9.23.0(jiti@2.4.2)) execa: specifier: 5.1.1 version: 5.1.1 @@ -170,7 +170,7 @@ importers: version: 5.7.3 typescript-eslint: specifier: 8.27.0 - version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) verdaccio: specifier: 6.0.5 version: 6.0.5(encoding@0.1.13)(typanion@3.14.0) @@ -321,10 +321,10 @@ importers: devDependencies: '@typescript-eslint/utils': specifier: 8.27.0 - version: 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) eslint: - specifier: 9.22.0 - version: 9.22.0(jiti@2.4.2) + specifier: 9.23.0 + version: 9.23.0(jiti@2.4.2) packages/template-parser: dependencies: @@ -1338,6 +1338,10 @@ packages: resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.2.0': + resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.12.0': resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1354,6 +1358,10 @@ packages: resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.15.0': resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1362,6 +1370,10 @@ packages: resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@9.23.0': + resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3337,6 +3349,16 @@ packages: jiti: optional: true + eslint@9.23.0: + resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + espree@10.3.0: resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7051,11 +7073,21 @@ snapshots: eslint: 9.22.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.5.1(eslint@9.15.0(jiti@2.4.2))': + dependencies: + eslint: 9.15.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.5.1(eslint@9.22.0(jiti@2.4.2))': dependencies: eslint: 9.22.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0(jiti@2.4.2))': + dependencies: + eslint: 9.23.0(jiti@2.4.2) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.19.0': @@ -7076,6 +7108,8 @@ snapshots: '@eslint/config-helpers@0.1.0': {} + '@eslint/config-helpers@0.2.0': {} + '@eslint/core@0.12.0': dependencies: '@types/json-schema': 7.0.15 @@ -7110,10 +7144,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.0 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/js@9.15.0': {} '@eslint/js@9.22.0': {} + '@eslint/js@9.23.0': {} + '@eslint/object-schema@2.1.4': {} '@eslint/object-schema@2.1.6': {} @@ -7684,13 +7734,13 @@ snapshots: - typescript - verdaccio - '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint-plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3))(eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)))(eslint@9.23.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) chalk: 4.1.2 confusing-browser-globals: 1.0.11 globals: 15.12.0 @@ -7698,7 +7748,7 @@ snapshots: semver: 7.7.1 tslib: 2.8.1 optionalDependencies: - eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2)) + eslint-config-prettier: 10.1.1(eslint@9.23.0(jiti@2.4.2)) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -7712,11 +7762,11 @@ snapshots: - typescript - verdaccio - '@nx/eslint@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/eslint@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.23.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) - eslint: 9.22.0(jiti@2.4.2) + eslint: 9.23.0(jiti@2.4.2) semver: 7.7.1 tslib: 2.8.1 typescript: 5.7.3 @@ -7841,10 +7891,10 @@ snapshots: '@nx/nx-win32-x64-msvc@0.0.0-pr-30418-4f79396': optional: true - '@nx/plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': + '@nx/plugin@0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(babel-plugin-macros@3.1.0)(eslint@9.23.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0))': dependencies: '@nx/devkit': 0.0.0-pr-30418-4f79396(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))) - '@nx/eslint': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.22.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) + '@nx/eslint': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(@zkochan/js-yaml@0.0.7)(eslint@9.23.0(jiti@2.4.2))(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/jest': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(babel-plugin-macros@3.1.0)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(ts-node@10.9.1(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(typescript@5.7.3))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) '@nx/js': 0.0.0-pr-30418-4f79396(@babel/traverse@7.25.9)(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15))(@types/node@20.17.25)(nx@0.0.0-pr-30418-4f79396(@swc-node/register@1.10.10(@swc/core@1.11.11(@swc/helpers@0.5.15))(@swc/types@0.1.19)(typescript@5.7.3))(@swc/core@1.11.11(@swc/helpers@0.5.15)))(typescript@5.7.3)(verdaccio@6.0.5(encoding@0.1.13)(typanion@3.14.0)) tslib: 2.8.1 @@ -8195,15 +8245,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.27.0 - '@typescript-eslint/type-utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.27.0 - eslint: 9.22.0(jiti@2.4.2) + eslint: 9.23.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -8236,6 +8286,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.27.0 + debug: 4.4.0 + eslint: 9.23.0(jiti@2.4.2) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/rule-tester@8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: '@typescript-eslint/parser': 8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4) @@ -8250,13 +8312,13 @@ snapshots: - supports-color - typescript - '@typescript-eslint/rule-tester@8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/rule-tester@8.27.0(patch_hash=0395d56159bca55b94596b2ce1a79005dd964f4b648c29e0c04c6dfcb85e13cf)(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) ajv: 6.12.6 - eslint: 9.22.0(jiti@2.4.2) + eslint: 9.23.0(jiti@2.4.2) json-stable-stringify-without-jsonify: 1.0.1 lodash.merge: 4.6.2 semver: 7.7.1 @@ -8286,23 +8348,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.26.1(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.26.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 - eslint: 9.22.0(jiti@2.4.2) + eslint: 9.23.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 - eslint: 9.22.0(jiti@2.4.2) + eslint: 9.23.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -8352,7 +8414,7 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.5.4) + ts-api-utils: 2.1.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -8373,7 +8435,7 @@ snapshots: '@typescript-eslint/utils@8.27.0(eslint@9.15.0(jiti@2.4.2))(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.15.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.5.1(eslint@9.15.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.27.0 '@typescript-eslint/types': 8.27.0 '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.5.4) @@ -8393,6 +8455,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) + '@typescript-eslint/scope-manager': 8.27.0 + '@typescript-eslint/types': 8.27.0 + '@typescript-eslint/typescript-estree': 8.27.0(typescript@5.7.3) + eslint: 9.23.0(jiti@2.4.2) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.16.0': dependencies: '@typescript-eslint/types': 8.16.0 @@ -9498,9 +9571,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)): + eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)): dependencies: - eslint: 9.22.0(jiti@2.4.2) + eslint: 9.23.0(jiti@2.4.2) eslint-scope@8.2.0: dependencies: @@ -9599,6 +9672,48 @@ snapshots: transitivePeerDependencies: - supports-color + eslint@9.23.0(jiti@2.4.2): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2 + '@eslint/config-helpers': 0.2.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.23.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0 + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + 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.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color + espree@10.3.0: dependencies: acorn: 8.14.0 @@ -12051,14 +12166,14 @@ snapshots: dependencies: typescript: 5.7.3 - ts-api-utils@2.0.1(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - ts-api-utils@2.0.1(typescript@5.7.3): dependencies: typescript: 5.7.3 + ts-api-utils@2.1.0(typescript@5.5.4): + dependencies: + typescript: 5.5.4 + ts-api-utils@2.1.0(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -12158,12 +12273,12 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-eslint@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): + typescript-eslint@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.27.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) + '@typescript-eslint/eslint-plugin': 8.27.0(@typescript-eslint/parser@8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.27.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.23.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color From 8303144bfce697c96285e58f7717dbb3e3dccd34 Mon Sep 17 00:00:00 2001 From: JamesHenry Date: Sat, 22 Mar 2025 17:44:01 +0400 Subject: [PATCH 23/23] chore(release): publish 19.3.0 --- CHANGELOG.md | 23 +++++++++++++++++++ packages/angular-eslint/CHANGELOG.md | 10 ++++++++ packages/angular-eslint/package.json | 2 +- packages/builder/CHANGELOG.md | 4 ++++ packages/builder/package.json | 2 +- .../bundled-angular-compiler/CHANGELOG.md | 4 ++++ .../bundled-angular-compiler/package.json | 2 +- packages/eslint-plugin-template/CHANGELOG.md | 19 +++++++++++++++ packages/eslint-plugin-template/package.json | 2 +- packages/eslint-plugin/CHANGELOG.md | 4 ++++ packages/eslint-plugin/package.json | 2 +- packages/schematics/CHANGELOG.md | 8 +++++++ packages/schematics/package.json | 2 +- packages/template-parser/CHANGELOG.md | 11 +++++++++ packages/template-parser/package.json | 2 +- packages/test-utils/CHANGELOG.md | 4 ++++ packages/test-utils/package.json | 2 +- packages/utils/CHANGELOG.md | 4 ++++ packages/utils/package.json | 2 +- 19 files changed, 100 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8770f6ef8..0665fad97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +## 19.3.0 (2025-03-22) + +### 🚀 Features + +- use @angular/compiler 19.2.3 and rename some AST nodes to match ([#2320](https://github.com/angular-eslint/angular-eslint/pull/2320)) +- **eslint-plugin-template:** [button-has-type] add option to ignore missing type ([#2326](https://github.com/angular-eslint/angular-eslint/pull/2326)) +- **eslint-plugin-template:** add rule prefer-contextual-for-variables ([#2311](https://github.com/angular-eslint/angular-eslint/pull/2311)) +- **template-parser:** visit @let child nodes ([#2312](https://github.com/angular-eslint/angular-eslint/pull/2312)) + +### 🩹 Fixes + +- update typescript-eslint packages to v8.26.1 ([#2313](https://github.com/angular-eslint/angular-eslint/pull/2313)) +- update typescript-eslint packages to v8.27.0 ([#2328](https://github.com/angular-eslint/angular-eslint/pull/2328)) +- update dependency eslint to v9.23.0 ([#2331](https://github.com/angular-eslint/angular-eslint/pull/2331)) +- **eslint-plugin-template:** [i18n] Avoid exception in i18n rule with allowMarkupInContent=false ([#2327](https://github.com/angular-eslint/angular-eslint/pull/2327)) +- **eslint-plugin-template:** [attributes-order] order i18n attributes ([#2307](https://github.com/angular-eslint/angular-eslint/pull/2307)) +- **eslint-plugin-template:** [attributes-order] treat inputs without square brackets as attributes ([#2316](https://github.com/angular-eslint/angular-eslint/pull/2316)) + +### ❤️ Thank You + +- Dave @reduckted +- m-akinc @m-akinc + ## 19.2.1 (2025-03-08) ### 🩹 Fixes diff --git a/packages/angular-eslint/CHANGELOG.md b/packages/angular-eslint/CHANGELOG.md index 716b2e7e7..4385ad976 100644 --- a/packages/angular-eslint/CHANGELOG.md +++ b/packages/angular-eslint/CHANGELOG.md @@ -1,3 +1,13 @@ +## 19.3.0 (2025-03-22) + +### 🚀 Features + +- **eslint-plugin-template:** add rule prefer-contextual-for-variables ([#2311](https://github.com/angular-eslint/angular-eslint/pull/2311)) + +### ❤️ Thank You + +- Dave @reduckted + ## 19.2.1 (2025-03-08) This was a version bump only for angular-eslint to align it with other projects, there were no code changes. diff --git a/packages/angular-eslint/package.json b/packages/angular-eslint/package.json index 19afe64c3..c8bb8b202 100644 --- a/packages/angular-eslint/package.json +++ b/packages/angular-eslint/package.json @@ -1,6 +1,6 @@ { "name": "angular-eslint", - "version": "19.2.1", + "version": "19.3.0", "description": "The tooling which enables ESLint to work with Angular projects", "license": "MIT", "main": "dist/index.js", diff --git a/packages/builder/CHANGELOG.md b/packages/builder/CHANGELOG.md index c40a0cfda..ced2faf71 100644 --- a/packages/builder/CHANGELOG.md +++ b/packages/builder/CHANGELOG.md @@ -1,3 +1,7 @@ +## 19.3.0 (2025-03-22) + +This was a version bump only for builder to align it with other projects, there were no code changes. + ## 19.2.1 (2025-03-08) This was a version bump only for builder to align it with other projects, there were no code changes. diff --git a/packages/builder/package.json b/packages/builder/package.json index d48150f9d..0e05f2014 100644 --- a/packages/builder/package.json +++ b/packages/builder/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/builder", - "version": "19.2.1", + "version": "19.3.0", "description": "Angular CLI builder for ESLint", "license": "MIT", "main": "dist/index.js", diff --git a/packages/bundled-angular-compiler/CHANGELOG.md b/packages/bundled-angular-compiler/CHANGELOG.md index 1e438449c..321251afd 100644 --- a/packages/bundled-angular-compiler/CHANGELOG.md +++ b/packages/bundled-angular-compiler/CHANGELOG.md @@ -1,3 +1,7 @@ +## 19.3.0 (2025-03-22) + +This was a version bump only for bundled-angular-compiler to align it with other projects, there were no code changes. + ## 19.2.1 (2025-03-08) This was a version bump only for bundled-angular-compiler to align it with other projects, there were no code changes. diff --git a/packages/bundled-angular-compiler/package.json b/packages/bundled-angular-compiler/package.json index 0a428eba4..beaf359af 100644 --- a/packages/bundled-angular-compiler/package.json +++ b/packages/bundled-angular-compiler/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/bundled-angular-compiler", - "version": "19.2.1", + "version": "19.3.0", "description": "A CJS bundled version of @angular/compiler", "license": "MIT", "main": "dist/index.js", diff --git a/packages/eslint-plugin-template/CHANGELOG.md b/packages/eslint-plugin-template/CHANGELOG.md index 4cf2815c0..4f54c5668 100644 --- a/packages/eslint-plugin-template/CHANGELOG.md +++ b/packages/eslint-plugin-template/CHANGELOG.md @@ -1,3 +1,22 @@ +## 19.3.0 (2025-03-22) + +### 🚀 Features + +- use @angular/compiler 19.2.3 and rename some AST nodes to match ([#2320](https://github.com/angular-eslint/angular-eslint/pull/2320)) +- **eslint-plugin-template:** add rule prefer-contextual-for-variables ([#2311](https://github.com/angular-eslint/angular-eslint/pull/2311)) +- **eslint-plugin-template:** [button-has-type] add option to ignore missing type ([#2326](https://github.com/angular-eslint/angular-eslint/pull/2326)) + +### 🩹 Fixes + +- **eslint-plugin-template:** [attributes-order] treat inputs without square brackets as attributes ([#2316](https://github.com/angular-eslint/angular-eslint/pull/2316)) +- **eslint-plugin-template:** [attributes-order] order i18n attributes ([#2307](https://github.com/angular-eslint/angular-eslint/pull/2307)) +- **eslint-plugin-template:** [i18n] Avoid exception in i18n rule with allowMarkupInContent=false ([#2327](https://github.com/angular-eslint/angular-eslint/pull/2327)) + +### ❤️ Thank You + +- Dave @reduckted +- m-akinc @m-akinc + ## 19.2.1 (2025-03-08) ### 🩹 Fixes diff --git a/packages/eslint-plugin-template/package.json b/packages/eslint-plugin-template/package.json index cd293d90e..c64fcc813 100644 --- a/packages/eslint-plugin-template/package.json +++ b/packages/eslint-plugin-template/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/eslint-plugin-template", - "version": "19.2.1", + "version": "19.3.0", "description": "ESLint plugin for Angular Templates", "license": "MIT", "main": "dist/index.js", diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index 4e01b9c02..e57c8f1bb 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -1,3 +1,7 @@ +## 19.3.0 (2025-03-22) + +This was a version bump only for eslint-plugin to align it with other projects, there were no code changes. + ## 19.2.1 (2025-03-08) This was a version bump only for eslint-plugin to align it with other projects, there were no code changes. diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index b028dad0b..68fae903f 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/eslint-plugin", - "version": "19.2.1", + "version": "19.3.0", "description": "ESLint plugin for Angular applications, following https://angular.dev/style-guide", "license": "MIT", "main": "dist/index.js", diff --git a/packages/schematics/CHANGELOG.md b/packages/schematics/CHANGELOG.md index 7a164a4cf..b75953ef5 100644 --- a/packages/schematics/CHANGELOG.md +++ b/packages/schematics/CHANGELOG.md @@ -1,3 +1,11 @@ +## 19.3.0 (2025-03-22) + +### 🩹 Fixes + +- update dependency eslint to v9.23.0 ([#2331](https://github.com/angular-eslint/angular-eslint/pull/2331)) +- update typescript-eslint packages to v8.27.0 ([#2328](https://github.com/angular-eslint/angular-eslint/pull/2328)) +- update typescript-eslint packages to v8.26.1 ([#2313](https://github.com/angular-eslint/angular-eslint/pull/2313)) + ## 19.2.1 (2025-03-08) ### 🩹 Fixes diff --git a/packages/schematics/package.json b/packages/schematics/package.json index cfcaf0e1c..cebc5a625 100644 --- a/packages/schematics/package.json +++ b/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/schematics", - "version": "19.2.1", + "version": "19.3.0", "description": "Angular Schematics for angular-eslint", "license": "MIT", "main": "dist/index.js", diff --git a/packages/template-parser/CHANGELOG.md b/packages/template-parser/CHANGELOG.md index 875f6846b..92676366e 100644 --- a/packages/template-parser/CHANGELOG.md +++ b/packages/template-parser/CHANGELOG.md @@ -1,3 +1,14 @@ +## 19.3.0 (2025-03-22) + +### 🚀 Features + +- use @angular/compiler 19.2.3 and rename some AST nodes to match ([#2320](https://github.com/angular-eslint/angular-eslint/pull/2320)) +- **template-parser:** visit @let child nodes ([#2312](https://github.com/angular-eslint/angular-eslint/pull/2312)) + +### ❤️ Thank You + +- Dave @reduckted + ## 19.2.1 (2025-03-08) This was a version bump only for template-parser to align it with other projects, there were no code changes. diff --git a/packages/template-parser/package.json b/packages/template-parser/package.json index 25ca10097..a361130a6 100644 --- a/packages/template-parser/package.json +++ b/packages/template-parser/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/template-parser", - "version": "19.2.1", + "version": "19.3.0", "description": "Angular Template parser for ESLint", "license": "MIT", "main": "dist/index.js", diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 21dec73c3..8b9c89c23 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,3 +1,7 @@ +## 19.3.0 (2025-03-22) + +This was a version bump only for @angular-eslint/test-utils to align it with other projects, there were no code changes. + ## 19.2.1 (2025-03-08) This was a version bump only for test-utils to align it with other projects, there were no code changes. diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 0654e2d42..ff591ce0c 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/test-utils", - "version": "19.2.1", + "version": "19.3.0", "license": "MIT", "main": "dist/index.js", "types": "dist/index.d.ts", diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index aab1b1bb6..3b7374ca9 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -1,3 +1,7 @@ +## 19.3.0 (2025-03-22) + +This was a version bump only for @angular-eslint/utils to align it with other projects, there were no code changes. + ## 19.2.1 (2025-03-08) This was a version bump only for utils to align it with other projects, there were no code changes. diff --git a/packages/utils/package.json b/packages/utils/package.json index c55a29083..9543d2dac 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@angular-eslint/utils", - "version": "19.2.1", + "version": "19.3.0", "license": "MIT", "main": "dist/index.js", "types": "dist/index.d.ts",