From 093d50d1d5dc1d35538e6cf8d3b6377e6270ca9b Mon Sep 17 00:00:00 2001 From: matthieu-crouzet Date: Fri, 8 Nov 2024 14:42:43 +0100 Subject: [PATCH] fix(eslint): fix test int --- .yarn/sdks/eslint/package.json | 2 +- apps/chrome-devtools/package.json | 4 +- apps/github-cascading-app/package.json | 4 +- apps/showcase/package.json | 4 +- apps/vscode-extension/package.json | 4 +- package.json | 4 +- packages/@ama-sdk/client-angular/package.json | 4 +- packages/@ama-sdk/client-beacon/package.json | 4 +- packages/@ama-sdk/client-fetch/package.json | 4 +- packages/@ama-sdk/core/package.json | 4 +- packages/@ama-sdk/create/package.json | 4 +- packages/@ama-sdk/schematics/package.json | 4 +- .../@ama-sdk/swagger-builder/package.json | 4 +- packages/@ama-terasu/cli/package.json | 4 +- packages/@ama-terasu/core/package.json | 4 +- packages/@ama-terasu/schematics/package.json | 4 +- .../@o3r-training/showcase-sdk/package.json | 4 +- .../@o3r-training/training-tools/package.json | 4 +- .../amaterasu/amaterasu-api-spec/package.json | 4 +- .../amaterasu/amaterasu-dodo/package.json | 4 +- .../amaterasu/amaterasu-otter/package.json | 4 +- .../@o3r/amaterasu/amaterasu-sdk/package.json | 4 +- packages/@o3r/analytics/package.json | 4 +- packages/@o3r/apis-manager/package.json | 4 +- packages/@o3r/application/package.json | 4 +- packages/@o3r/artifactory-tools/package.json | 4 +- packages/@o3r/azure-tools/package.json | 4 +- packages/@o3r/components/package.json | 4 +- packages/@o3r/configuration/package.json | 4 +- packages/@o3r/core/package.json | 8 +- packages/@o3r/create/package.json | 4 +- packages/@o3r/design/package.json | 4 +- packages/@o3r/dev-tools/package.json | 4 +- packages/@o3r/dynamic-content/package.json | 4 +- .../eslint.local.config.mjs | 25 + .../@o3r/eslint-config-otter/package.json | 31 +- .../templates/project/tsconfig.eslint.json | 2 +- packages/@o3r/eslint-config/package.json | 24 +- .../eslint-config/schematics/index.it.spec.ts | 53 +- .../schematics/ng-add/eslint/index.spec.ts | 117 ++++- .../schematics/ng-add/eslint/index.ts | 77 ++- ...eslint.local.config.__extension__.template | 20 +- .../eslint.config.__extension__.template | 35 +- ...eslint.local.config.__extension__.template | 4 +- .../schematics/ng-add/index.spec.ts | 15 +- .../eslint-config/schematics/ng-add/index.ts | 64 ++- .../schematics/ng-add/schema.json | 5 + .../eslint-config/schematics/ng-add/schema.ts | 2 + .../schematics/ng-add/tsconfig/index.spec.ts | 6 +- .../schematics/ng-add/tsconfig/index.ts | 4 +- .../schematics/ng-add/vscode/index.spec.ts | 2 +- .../schematics/ng-add/vscode/index.ts | 2 +- packages/@o3r/eslint-plugin/package.json | 12 +- packages/@o3r/extractors/package.json | 4 +- packages/@o3r/forms/package.json | 4 +- packages/@o3r/localization/package.json | 4 +- packages/@o3r/logger/package.json | 4 +- packages/@o3r/mobile/package.json | 4 +- packages/@o3r/new-version/package.json | 4 +- packages/@o3r/pipeline/package.json | 4 +- packages/@o3r/routing/package.json | 4 +- packages/@o3r/rules-engine/package.json | 4 +- packages/@o3r/schematics/package.json | 6 +- .../rule-factories/add-imports/index.spec.ts | 43 ++ .../src/rule-factories/add-imports/index.ts | 27 +- .../dev-tools/devtools-registration.spec.ts | 14 +- .../dev-tools/devtools-registration.ts | 55 +- packages/@o3r/store-sync/package.json | 4 +- packages/@o3r/storybook/package.json | 4 +- packages/@o3r/stylelint-plugin/package.json | 4 +- packages/@o3r/styling/package.json | 4 +- packages/@o3r/telemetry/package.json | 4 +- packages/@o3r/test-helpers/package.json | 4 +- packages/@o3r/testing/package.json | 4 +- packages/@o3r/third-party/package.json | 4 +- packages/@o3r/workspace/package.json | 4 +- tools/@o3r/build-helpers/package.json | 4 +- tools/github-actions/audit/package.json | 4 +- tools/github-actions/cascading/package.json | 4 +- tools/github-actions/get-npm-tag/package.json | 4 +- tools/github-actions/new-version/package.json | 4 +- tools/github-actions/release/package.json | 4 +- yarn.lock | 490 ++++++++++-------- 83 files changed, 893 insertions(+), 476 deletions(-) create mode 100644 packages/@o3r/schematics/src/rule-factories/add-imports/index.spec.ts diff --git a/.yarn/sdks/eslint/package.json b/.yarn/sdks/eslint/package.json index 6767f39134..ef73eb41d6 100644 --- a/.yarn/sdks/eslint/package.json +++ b/.yarn/sdks/eslint/package.json @@ -1,6 +1,6 @@ { "name": "eslint", - "version": "9.11.0-sdk", + "version": "9.14.0-sdk", "main": "./lib/api.js", "type": "commonjs", "bin": { diff --git a/apps/chrome-devtools/package.json b/apps/chrome-devtools/package.json index c77b388d9c..e344e2f8ed 100644 --- a/apps/chrome-devtools/package.json +++ b/apps/chrome-devtools/package.json @@ -47,13 +47,13 @@ "@types/jest": "~29.5.2", "@types/tinycolor2": "^1.4.6", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "archiver": "^7.0.0", "chokidar": "^3.5.2", "chrome-webstore-upload": "^3.0.0", "concurrently": "^8.0.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/apps/github-cascading-app/package.json b/apps/github-cascading-app/package.json index 841138b453..df08c37cb2 100644 --- a/apps/github-cascading-app/package.json +++ b/apps/github-cascading-app/package.json @@ -44,10 +44,10 @@ "@types/node": "^20.0.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", "ejs": "^3.1.9", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/apps/showcase/package.json b/apps/showcase/package.json index b128167afa..eb32b4aec1 100644 --- a/apps/showcase/package.json +++ b/apps/showcase/package.json @@ -109,9 +109,9 @@ "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", "@webcontainer/api": "~1.4.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "concurrently": "^8.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/apps/vscode-extension/package.json b/apps/vscode-extension/package.json index e70cc01b7b..2a170f95e4 100644 --- a/apps/vscode-extension/package.json +++ b/apps/vscode-extension/package.json @@ -344,7 +344,7 @@ }, "dependencies": { "@o3r/design": "workspace:^", - "eslint": "^9.0.0" + "eslint": "~9.14.0" }, "devDependencies": { "@angular-devkit/build-angular": "~18.2.0", @@ -373,7 +373,7 @@ "@types/vscode": "^1.67.0", "@typescript-eslint/parser": "~8.12.2", "@vscode/vsce": "^2.16.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", "esbuild": "~0.24.0", "eslint-import-resolver-node": "^0.3.9", diff --git a/package.json b/package.json index 4ee9f19791..4ef29e14a2 100644 --- a/package.json +++ b/package.json @@ -213,7 +213,7 @@ "@yarnpkg/sdks": "^3.2.0", "ag-grid-angular": "~32.3.0", "ag-grid-community": "~32.3.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "babel-loader": "^9.0.0", "bootstrap": "5.3.3", "bootstrap-icons": "^1.11.3", @@ -222,7 +222,7 @@ "concurrently": "^8.0.0", "cpy-cli": "^5.0.0", "editorconfig-checker": "^5.1.8", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-sdk/client-angular/package.json b/packages/@ama-sdk/client-angular/package.json index 4a403cca6c..3da152a358 100644 --- a/packages/@ama-sdk/client-angular/package.json +++ b/packages/@ama-sdk/client-angular/package.json @@ -94,9 +94,9 @@ "@types/node": "^20.0.0", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-sdk/client-beacon/package.json b/packages/@ama-sdk/client-beacon/package.json index a986e52f39..701488b89c 100644 --- a/packages/@ama-sdk/client-beacon/package.json +++ b/packages/@ama-sdk/client-beacon/package.json @@ -93,9 +93,9 @@ "@types/node": "^20.0.0", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-sdk/client-fetch/package.json b/packages/@ama-sdk/client-fetch/package.json index 6fd46b414b..da570db77b 100644 --- a/packages/@ama-sdk/client-fetch/package.json +++ b/packages/@ama-sdk/client-fetch/package.json @@ -97,9 +97,9 @@ "@types/node": "^20.0.0", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-sdk/core/package.json b/packages/@ama-sdk/core/package.json index d8e35466cd..ea0c265dc7 100644 --- a/packages/@ama-sdk/core/package.json +++ b/packages/@ama-sdk/core/package.json @@ -141,9 +141,9 @@ "@types/node": "^20.0.0", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-sdk/create/package.json b/packages/@ama-sdk/create/package.json index 96ab7004b6..7542cd8564 100644 --- a/packages/@ama-sdk/create/package.json +++ b/packages/@ama-sdk/create/package.json @@ -56,9 +56,9 @@ "@types/pid-from-port": "^1.1.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-sdk/schematics/package.json b/packages/@ama-sdk/schematics/package.json index 8f4acec1d9..a834f35da8 100644 --- a/packages/@ama-sdk/schematics/package.json +++ b/packages/@ama-sdk/schematics/package.json @@ -107,11 +107,11 @@ "@types/pid-from-port": "^1.1.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "commit-and-tag-version": "^12.0.0", "copyfiles": "^2.4.1", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-sdk/swagger-builder/package.json b/packages/@ama-sdk/swagger-builder/package.json index 7b6c11f703..febb05a9c4 100644 --- a/packages/@ama-sdk/swagger-builder/package.json +++ b/packages/@ama-sdk/swagger-builder/package.json @@ -45,10 +45,10 @@ "@types/semver": "^7.3.13", "@types/swagger-schema-official": "^2.0.22", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "concurrently": "^8.0.0", "copyfiles": "^2.4.1", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-terasu/cli/package.json b/packages/@ama-terasu/cli/package.json index 282b556181..4b97b20d97 100644 --- a/packages/@ama-terasu/cli/package.json +++ b/packages/@ama-terasu/cli/package.json @@ -43,8 +43,8 @@ "@types/prompts": "^2.0.14", "@types/yargs": "^17.0.20", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-terasu/core/package.json b/packages/@ama-terasu/core/package.json index 8ad1f372d8..4abe2c0f6b 100644 --- a/packages/@ama-terasu/core/package.json +++ b/packages/@ama-terasu/core/package.json @@ -26,8 +26,8 @@ "@types/node": "^20.0.0", "@types/yargs": "^17.0.20", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@ama-terasu/schematics/package.json b/packages/@ama-terasu/schematics/package.json index 371433f468..5abf2ea5d8 100644 --- a/packages/@ama-terasu/schematics/package.json +++ b/packages/@ama-terasu/schematics/package.json @@ -38,8 +38,8 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r-training/showcase-sdk/package.json b/packages/@o3r-training/showcase-sdk/package.json index 1d6591f502..d28e4f1155 100644 --- a/packages/@o3r-training/showcase-sdk/package.json +++ b/packages/@o3r-training/showcase-sdk/package.json @@ -88,11 +88,11 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "chokidar": "^3.5.2", "commit-and-tag-version": "^12.0.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/packages/@o3r-training/training-tools/package.json b/packages/@o3r-training/training-tools/package.json index 00ff0aaeb9..eb243e1b6b 100644 --- a/packages/@o3r-training/training-tools/package.json +++ b/packages/@o3r-training/training-tools/package.json @@ -98,9 +98,9 @@ "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", "@webcontainer/api": "~1.4.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/packages/@o3r/amaterasu/amaterasu-api-spec/package.json b/packages/@o3r/amaterasu/amaterasu-api-spec/package.json index c0e42011be..e3fb257c81 100644 --- a/packages/@o3r/amaterasu/amaterasu-api-spec/package.json +++ b/packages/@o3r/amaterasu/amaterasu-api-spec/package.json @@ -31,8 +31,8 @@ "@types/js-yaml": "^4.0.5", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/amaterasu/amaterasu-dodo/package.json b/packages/@o3r/amaterasu/amaterasu-dodo/package.json index e5ed838ee1..fbfcb17c51 100644 --- a/packages/@o3r/amaterasu/amaterasu-dodo/package.json +++ b/packages/@o3r/amaterasu/amaterasu-dodo/package.json @@ -43,8 +43,8 @@ "@types/node": "^20.0.0", "@types/tar": "~6.1.1", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/amaterasu/amaterasu-otter/package.json b/packages/@o3r/amaterasu/amaterasu-otter/package.json index 9ed7e57791..cc99a356af 100644 --- a/packages/@o3r/amaterasu/amaterasu-otter/package.json +++ b/packages/@o3r/amaterasu/amaterasu-otter/package.json @@ -42,8 +42,8 @@ "@types/js-yaml": "^4.0.5", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/amaterasu/amaterasu-sdk/package.json b/packages/@o3r/amaterasu/amaterasu-sdk/package.json index b4ff81f2c9..24de0798f1 100644 --- a/packages/@o3r/amaterasu/amaterasu-sdk/package.json +++ b/packages/@o3r/amaterasu/amaterasu-sdk/package.json @@ -31,8 +31,8 @@ "@types/js-yaml": "^4.0.5", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/analytics/package.json b/packages/@o3r/analytics/package.json index 6f7bca1525..19bf2c0766 100644 --- a/packages/@o3r/analytics/package.json +++ b/packages/@o3r/analytics/package.json @@ -95,9 +95,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/apis-manager/package.json b/packages/@o3r/apis-manager/package.json index fa70d39485..cad42df067 100644 --- a/packages/@o3r/apis-manager/package.json +++ b/packages/@o3r/apis-manager/package.json @@ -76,9 +76,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/application/package.json b/packages/@o3r/application/package.json index 3e48bf0fd2..f5ffe95975 100644 --- a/packages/@o3r/application/package.json +++ b/packages/@o3r/application/package.json @@ -82,9 +82,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/artifactory-tools/package.json b/packages/@o3r/artifactory-tools/package.json index 3b4633d476..ac58a818ce 100644 --- a/packages/@o3r/artifactory-tools/package.json +++ b/packages/@o3r/artifactory-tools/package.json @@ -57,9 +57,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/azure-tools/package.json b/packages/@o3r/azure-tools/package.json index cf5fc7dfc2..cba2613a15 100644 --- a/packages/@o3r/azure-tools/package.json +++ b/packages/@o3r/azure-tools/package.json @@ -55,9 +55,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/components/package.json b/packages/@o3r/components/package.json index e7a91ec38d..172980d9ed 100644 --- a/packages/@o3r/components/package.json +++ b/packages/@o3r/components/package.json @@ -180,10 +180,10 @@ "@yarnpkg/fslib": "^3.1.0", "@yarnpkg/plugin-npm": "^3.0.1", "@yarnpkg/plugin-pack": "^4.0.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "chokidar": "^3.5.2", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/configuration/package.json b/packages/@o3r/configuration/package.json index 5fd2e24a8f..8424ec6f09 100644 --- a/packages/@o3r/configuration/package.json +++ b/packages/@o3r/configuration/package.json @@ -110,9 +110,9 @@ "@types/node": "^20.0.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/core/package.json b/packages/@o3r/core/package.json index a790552010..6463829318 100644 --- a/packages/@o3r/core/package.json +++ b/packages/@o3r/core/package.json @@ -113,10 +113,10 @@ "@types/pid-from-port": "^1.1.0", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "chokidar": "^3.5.2", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", @@ -157,9 +157,9 @@ "@stylistic/eslint-plugin": "~2.7.0", "@types/jest": "~29.5.2", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/create/package.json b/packages/@o3r/create/package.json index 930486adbf..17fb38597e 100644 --- a/packages/@o3r/create/package.json +++ b/packages/@o3r/create/package.json @@ -53,9 +53,9 @@ "@types/node": "^20.0.0", "@types/shell-quote": "^1.7.5", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/design/package.json b/packages/@o3r/design/package.json index c6f692b944..75f2562a89 100644 --- a/packages/@o3r/design/package.json +++ b/packages/@o3r/design/package.json @@ -127,10 +127,10 @@ "@types/node": "^20.0.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "chokidar": "^3.5.2", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/dev-tools/package.json b/packages/@o3r/dev-tools/package.json index 12b85abeb4..a01b08b7e7 100644 --- a/packages/@o3r/dev-tools/package.json +++ b/packages/@o3r/dev-tools/package.json @@ -83,9 +83,9 @@ "@types/request": "^2.48.7", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/dynamic-content/package.json b/packages/@o3r/dynamic-content/package.json index 10a89d3653..0c1f9bf88a 100644 --- a/packages/@o3r/dynamic-content/package.json +++ b/packages/@o3r/dynamic-content/package.json @@ -100,9 +100,9 @@ "@types/node": "^20.0.0", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/eslint-config-otter/eslint.local.config.mjs b/packages/@o3r/eslint-config-otter/eslint.local.config.mjs index a58976e1e8..d6229e990c 100644 --- a/packages/@o3r/eslint-config-otter/eslint.local.config.mjs +++ b/packages/@o3r/eslint-config-otter/eslint.local.config.mjs @@ -23,5 +23,30 @@ export default [ ] } } + }, + { + name: '@o3r/eslint-config-otter/overrides', + rules: { + '@o3r/json-dependency-versions-harmonize': [ + 'error', + { + // TODO should be removed in Otter v12 + ignoredDependencies: [ + 'eslint', + '@typescript-eslint/eslint-plugin', + '@typescript-eslint/parser', + '@typescript-eslint/utils', + 'eslint-plugin-jsdoc', + 'eslint-plugin-unicorn' + ], + ignoredPackages: [ + '@o3r/build-helpers', + '@o3r/workspace-helpers' + ], + alignPeerDependencies: false, + alignEngines: true + } + ] + } } ]; diff --git a/packages/@o3r/eslint-config-otter/package.json b/packages/@o3r/eslint-config-otter/package.json index b66137c0a7..dda68acbb4 100644 --- a/packages/@o3r/eslint-config-otter/package.json +++ b/packages/@o3r/eslint-config-otter/package.json @@ -51,22 +51,26 @@ }, "peerDependencies": { "@angular-devkit/schematics": "~18.2.0", - "@angular-eslint/builder": "~18.3.0", + "@angular-eslint/builder": "~18.4.0", + "@angular-eslint/eslint-plugin": "~18.4.0", + "@angular-eslint/eslint-plugin-template": "~18.4.0", + "@angular-eslint/template-parser": "~18.4.0", "@angular/compiler": "~18.2.0", "@o3r/eslint-plugin": "workspace:^", "@o3r/schematics": "workspace:^", "@schematics/angular": "~18.2.0", "@stylistic/eslint-plugin-ts": "^2.7.0", - "angular-eslint": "~18.3.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/eslint-plugin": "^7.14.1", + "@typescript-eslint/parser": "^7.14.1", + "@typescript-eslint/utils": "^7.14.1", + "eslint": "^8.57.0", "eslint-import-resolver-node": "^0.3.4", "eslint-plugin-jasmine": "^4.1.3", "eslint-plugin-jest": "^28.0.0", - "eslint-plugin-jsdoc": "^48.11.0 || ^49.0.0 || ^50.0.0", + "eslint-plugin-jsdoc": "^48.11.0", "eslint-plugin-prefer-arrow": "^1.2.2", - "eslint-plugin-unicorn": "^54.0.0 || ^55.0.0", - "typescript": "~5.5.4", - "typescript-eslint": "^8.0.0" + "eslint-plugin-unicorn": "^54.0.0", + "typescript": "~5.5.4" }, "devDependencies": { "@angular-devkit/core": "~18.2.0", @@ -83,9 +87,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", @@ -118,6 +122,12 @@ "@angular-eslint/builder": { "optional": true }, + "@angular-eslint/eslint-plugin-template": { + "optional": true + }, + "@angular-eslint/template-parser": { + "optional": true + }, "@angular/compiler": { "optional": true }, @@ -127,9 +137,6 @@ "@schematics/angular": { "optional": true }, - "angular-eslint": { - "optional": true - }, "eslint-plugin-jasmine": { "optional": true }, diff --git a/packages/@o3r/eslint-config-otter/schematics/ng-add/linter/templates/project/tsconfig.eslint.json b/packages/@o3r/eslint-config-otter/schematics/ng-add/linter/templates/project/tsconfig.eslint.json index b301dd249e..b3b38b3bc8 100644 --- a/packages/@o3r/eslint-config-otter/schematics/ng-add/linter/templates/project/tsconfig.eslint.json +++ b/packages/@o3r/eslint-config-otter/schematics/ng-add/linter/templates/project/tsconfig.eslint.json @@ -1,6 +1,6 @@ { "extends": "./<%= projectTsConfig %>", "include": [ - "eslint*.config.mjs" + ".eslintrc.js" ] } diff --git a/packages/@o3r/eslint-config/package.json b/packages/@o3r/eslint-config/package.json index 2d1e095a29..986aadcddc 100644 --- a/packages/@o3r/eslint-config/package.json +++ b/packages/@o3r/eslint-config/package.json @@ -37,20 +37,23 @@ "peerDependencies": { "@angular-devkit/core": "~18.2.0", "@angular-devkit/schematics": "~18.2.0", + "@angular-eslint/builder": "~18.4.0", "@angular/compiler": "~18.2.0", "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0", - "@eslint/js": "9.10.0", + "@eslint/js": "~9.14.0", "@o3r/eslint-plugin": "workspace:^", "@o3r/schematics": "workspace:^", "@schematics/angular": "~18.2.0", "@stylistic/eslint-plugin": "^2.7.0", - "angular-eslint": "^18.3.0", - "eslint": "^8.57.0 || ^9.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@typescript-eslint/types": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0", + "angular-eslint": "^18.4.0", + "eslint": "^8.57.0 || ~9.14.0", "eslint-import-resolver-node": "^0.3.4", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", - "eslint-plugin-jasmine": "^4.1.3", "eslint-plugin-jest": "^28.0.0", "eslint-plugin-jsdoc": "^48.11.0 || ^49.0.0 || ^50.0.0", "eslint-plugin-prefer-arrow": "^1.2.2", @@ -58,7 +61,9 @@ "eslint-plugin-unicorn": "^54.0.0 || ^55.0.0", "eslint-plugin-unused-imports": "^4.1.4", "globals": "^15.9.0", + "globby": "^11.1.0", "jest": "~29.7.0", + "jsonc-eslint-parser": "~2.4.0", "ts-node": "~10.9.2", "typescript": "~5.5.4", "typescript-eslint": "^8.0.0" @@ -68,7 +73,7 @@ "@angular-devkit/schematics": "~18.2.0", "@angular/compiler": "~18.2.0", "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0", - "@eslint/js": "9.10.0", + "@eslint/js": "~9.14.0", "@nx/eslint-plugin": "~19.5.0", "@o3r/build-helpers": "workspace:^", "@o3r/eslint-plugin": "workspace:^", @@ -80,14 +85,13 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", - "eslint-plugin-jasmine": "^4.1.3", "eslint-plugin-jest": "~28.8.0", "eslint-plugin-jsdoc": "~50.2.0", "eslint-plugin-prefer-arrow": "~1.2.3", @@ -124,10 +128,10 @@ "@schematics/angular": { "optional": true }, - "eslint-plugin-jasmine": { + "eslint-plugin-jest": { "optional": true }, - "eslint-plugin-jest": { + "jest": { "optional": true }, "typescript": { diff --git a/packages/@o3r/eslint-config/schematics/index.it.spec.ts b/packages/@o3r/eslint-config/schematics/index.it.spec.ts index 2cb7b168c7..806bc0f71c 100644 --- a/packages/@o3r/eslint-config/schematics/index.it.spec.ts +++ b/packages/@o3r/eslint-config/schematics/index.it.spec.ts @@ -18,13 +18,12 @@ describe('new otter application with eslint config', () => { test('should add eslint config to existing application', () => { const { workspacePath, appName, isInWorkspace, untouchedProjectsPaths, o3rVersion } = o3rEnvironment.testEnvironment; const execAppOptions = { ...getDefaultExecSyncOptions(), cwd: workspacePath }; - packageManagerExec({ script: 'ng', args: ['add', `@o3r/eslint-config@${o3rVersion}`, '--skip-confirmation', '--project-name', appName] }, execAppOptions); + packageManagerExec({ script: 'ng', args: ['add', `@o3r/eslint-config@${o3rVersion}`, '--skip-confirmation', '--project-name', appName, '--fix'] }, execAppOptions); expect(() => packageManagerInstall(execAppOptions)).not.toThrow(); expect(() => packageManagerRunOnProject(appName, isInWorkspace, { script: 'build' }, execAppOptions)).not.toThrow(); const diff = getGitDiff(workspacePath); - expect(diff.modified).toContain('package.json'); expect(diff.added).toContain('tsconfig.eslint.json'); expect(diff.added).toContain('eslint.shared.config.mjs'); expect(diff.added).toContain('eslint.local.config.mjs'); @@ -32,6 +31,56 @@ describe('new otter application with eslint config', () => { expect(diff.added).toContain(path.posix.join('apps', appName, 'tsconfig.eslint.json')); expect(diff.added).toContain(path.posix.join('apps', appName, 'eslint.local.config.mjs')); expect(diff.added).toContain(path.posix.join('apps', appName, 'eslint.config.mjs')); + expect(diff.modified).toContain(path.posix.join('apps', appName, 'src', 'main.ts')); + expect(diff.modified).toContain('package.json'); + expect(diff.modified).toContain('angular.json'); + + untouchedProjectsPaths.forEach((untouchedProject) => { + expect(diff.all.some((file) => file.startsWith(path.posix.relative(workspacePath, untouchedProject)))).toBe(false); + }); + expect(() => packageManagerExec({ script: 'ng', args: ['lint', appName, '--fix'] }, execAppOptions)).not.toThrow(); + }); + + test('should add eslint config to existing library', () => { + const { workspacePath, libName, isInWorkspace, untouchedProjectsPaths, o3rVersion } = o3rEnvironment.testEnvironment; + const execAppOptions = { ...getDefaultExecSyncOptions(), cwd: workspacePath }; + packageManagerExec({ script: 'ng', args: ['add', `@o3r/eslint-config@${o3rVersion}`, '--skip-confirmation', '--project-name', libName] }, execAppOptions); + + expect(() => packageManagerInstall(execAppOptions)).not.toThrow(); + expect(() => packageManagerRunOnProject(libName, isInWorkspace, { script: 'build' }, execAppOptions)).not.toThrow(); + + const diff = getGitDiff(workspacePath); + expect(diff.added).toContain('tsconfig.eslint.json'); + expect(diff.added).toContain('eslint.shared.config.mjs'); + expect(diff.added).toContain('eslint.local.config.mjs'); + expect(diff.added).toContain('eslint.config.mjs'); + expect(diff.added).toContain(path.posix.join('libs', libName, 'tsconfig.eslint.json')); + expect(diff.added).toContain(path.posix.join('libs', libName, 'eslint.local.config.mjs')); + expect(diff.added).toContain(path.posix.join('libs', libName, 'eslint.config.mjs')); + expect(diff.modified).toContain('package.json'); + expect(diff.modified).toContain('angular.json'); + + untouchedProjectsPaths.forEach((untouchedProject) => { + expect(diff.all.some((file) => file.startsWith(path.posix.relative(workspacePath, untouchedProject)))).toBe(false); + }); + // TODO: reactivate this check once #2481 is fixed + // expect(() => packageManagerExec({ script: 'ng', args: ['lint', libName, '--fix'] }, execAppOptions)).not.toThrow(); + }); + + test('should add eslint config to existing repository', () => { + const { workspacePath, untouchedProjectsPaths, o3rVersion } = o3rEnvironment.testEnvironment; + const execAppOptions = { ...getDefaultExecSyncOptions(), cwd: workspacePath }; + packageManagerExec({ script: 'ng', args: ['add', `@o3r/eslint-config@${o3rVersion}`, '--skip-confirmation'] }, execAppOptions); + + expect(() => packageManagerInstall(execAppOptions)).not.toThrow(); + + const diff = getGitDiff(workspacePath); + expect(diff.modified).toContain('package.json'); + expect(diff.modified).not.toContain('angular.json'); + expect(diff.added).toContain('tsconfig.eslint.json'); + expect(diff.added).toContain('eslint.shared.config.mjs'); + expect(diff.added).toContain('eslint.local.config.mjs'); + expect(diff.added).toContain('eslint.config.mjs'); untouchedProjectsPaths.forEach((untouchedProject) => { expect(diff.all.some((file) => file.startsWith(path.posix.relative(workspacePath, untouchedProject)))).toBe(false); diff --git a/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.spec.ts b/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.spec.ts index 6d1d593a43..0671942f02 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.spec.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.spec.ts @@ -15,20 +15,121 @@ import { const collectionPath = path.join(__dirname, '..', '..', '..', 'collection.json'); const context = { description: { path: __dirname } }; +const runner = new SchematicTestRunner('schematics', collectionPath); + +const monorepoPkgName = '@scope/monorepo'; +const appName = 'test-app'; +const appRoot = `apps/${appName}`; +const libName = 'test-lib'; +const libRoot = `libs/${libName}`; +let initialTree: Tree; +const angularJsonContent = { + projects: { + [appName]: { + root: appRoot, + projectType: 'application', + architect: { + build: { + fakeContent: 'should not be modified' + } + } + }, + [libName]: { + root: libRoot, + projectType: 'library', + architect: { + build: { + fakeContent: 'should not be modified' + } + } + } + } +}; describe('update eslint config', () => { - it('should add a eslint config on workspace', async () => { - const initialTree = Tree.empty(); - initialTree.create('package.json', JSON.stringify({ name: '@scope/package' })); - const runner = new SchematicTestRunner('schematics', collectionPath); + beforeEach(() => { + initialTree = Tree.empty(); + initialTree.create('package.json', JSON.stringify({ name: monorepoPkgName })); + initialTree.create('angular.json', JSON.stringify(angularJsonContent)); + }); - const tree = await firstValueFrom(callRule(updateEslintConfig(), initialTree, runner.engine.createContext(context as any))); + it('should add an eslint config on workspace', async () => { + const tree = await firstValueFrom(callRule(updateEslintConfig(__dirname), initialTree, runner.engine.createContext(context as any))); expect(tree.exists('eslint.config.mjs')).toBeTruthy(); expect(tree.exists('eslint.local.config.mjs')).toBeTruthy(); expect(tree.exists('eslint.shared.config.mjs')).toBeTruthy(); expect(tree.exists('tsconfig.eslint.json')).toBeTruthy(); - expect(tree.readText('eslint.local.config.mjs')).toContain('@scope/package/projects'); - expect(tree.readText('eslint.shared.config.mjs')).toContain('@scope/package/report-unused-disable-directives'); - expect(tree.readText('eslint.shared.config.mjs')).toContain('@scope/package/eslint-config'); + expect(tree.readJson('angular.json')).toEqual(angularJsonContent); + expect(tree.readText('eslint.local.config.mjs')).toContain(`${monorepoPkgName}/projects`); + expect(tree.readText('eslint.shared.config.mjs')).toContain(`${monorepoPkgName}/report-unused-disable-directives`); + expect(tree.readText('eslint.shared.config.mjs')).toContain(`${monorepoPkgName}/eslint-config`); + }); + + it('should add an eslint config on an application', async () => { + const pckName = `@scope/${appName}`; + initialTree.create(`${appRoot}/package.json`, JSON.stringify({ name: pckName })); + const tree = await firstValueFrom(callRule(updateEslintConfig(__dirname, appName), initialTree, runner.engine.createContext(context as any))); + expect(tree.exists('eslint.config.mjs')).toBeFalsy(); + expect(tree.exists('eslint.local.config.mjs')).toBeFalsy(); + expect(tree.exists('eslint.shared.config.mjs')).toBeFalsy(); + expect(tree.exists('tsconfig.eslint.json')).toBeFalsy(); + expect(tree.exists(`${appRoot}/eslint.config.mjs`)).toBeTruthy(); + expect(tree.exists(`${appRoot}/eslint.local.config.mjs`)).toBeTruthy(); + expect(tree.exists(`${appRoot}/tsconfig.eslint.json`)).toBeTruthy(); + expect(tree.exists(`${libRoot}/eslint.config.mjs`)).toBeFalsy(); + expect(tree.exists(`${libRoot}/eslint.local.config.mjs`)).toBeFalsy(); + expect(tree.exists(`${libRoot}/tsconfig.eslint.json`)).toBeFalsy(); + expect(tree.readText(`${appRoot}/eslint.config.mjs`)).toContain('import shared from \'../../eslint.shared.config.mjs\''); + expect(tree.readText(`${appRoot}/eslint.local.config.mjs`)).toContain(`${pckName}/projects`); + expect(tree.readText(`${appRoot}/eslint.local.config.mjs`)).toContain('...globals.browser'); + expect(tree.readJson('angular.json')).toEqual({ + ...angularJsonContent, + projects: { + ...angularJsonContent.projects, + [appName]: { + ...angularJsonContent.projects[appName], + architect: { + ...angularJsonContent.projects[appName].architect, + lint: expect.objectContaining({ + builder: '@angular-eslint/builder:lint' + }) + } + } + } + }); + }); + + it('should add an eslint config on a library', async () => { + const pckName = `@scope/${libName}`; + initialTree.create(`${libRoot}/package.json`, JSON.stringify({ name: pckName })); + const tree = await firstValueFrom(callRule(updateEslintConfig(__dirname, libName), initialTree, runner.engine.createContext(context as any))); + expect(tree.exists('eslint.config.mjs')).toBeFalsy(); + expect(tree.exists('eslint.local.config.mjs')).toBeFalsy(); + expect(tree.exists('eslint.shared.config.mjs')).toBeFalsy(); + expect(tree.exists('tsconfig.eslint.json')).toBeFalsy(); + expect(tree.exists(`${libRoot}/eslint.config.mjs`)).toBeTruthy(); + expect(tree.exists(`${libRoot}/eslint.local.config.mjs`)).toBeTruthy(); + expect(tree.exists(`${libRoot}/tsconfig.eslint.json`)).toBeTruthy(); + expect(tree.exists(`${appRoot}/eslint.config.mjs`)).toBeFalsy(); + expect(tree.exists(`${appRoot}/eslint.local.config.mjs`)).toBeFalsy(); + expect(tree.exists(`${appRoot}/tsconfig.eslint.json`)).toBeFalsy(); + expect(tree.readText(`${libRoot}/eslint.config.mjs`)).toContain('import shared from \'../../eslint.shared.config.mjs\''); + expect(tree.readText(`${libRoot}/eslint.local.config.mjs`)).toContain(`${pckName}/projects`); + expect(tree.readText(`${libRoot}/eslint.local.config.mjs`)).not.toContain('...globals.browser'); + expect(tree.readJson('angular.json')).toEqual({ + ...angularJsonContent, + projects: { + ...angularJsonContent.projects, + [libName]: { + ...angularJsonContent.projects[libName], + architect: { + ...angularJsonContent.projects[libName].architect, + lint: expect.objectContaining({ + builder: '@angular-eslint/builder:lint' + }) + } + } + } + }); }); }); diff --git a/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.ts b/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.ts index a66d0589a8..0f45f254ed 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/eslint/index.ts @@ -1,29 +1,68 @@ import * as path from 'node:path'; -import type { - JsonObject, +import { + fragment, + type JsonObject, } from '@angular-devkit/core'; import { apply, + applyToSubtree, chain, MergeStrategy, mergeWith, + noop, renameTemplateFiles, type Rule, template, url, } from '@angular-devkit/schematics'; +import type { + WorkspaceSchema, +} from '@o3r/schematics'; import { updateOrAddTsconfigEslint, } from '../tsconfig/index'; +const editAngularJson = (projectName: string, extension: string): Rule => async (tree, context) => { + let workspace: WorkspaceSchema | null = null; + try { + const { getWorkspaceConfig } = await import('@o3r/schematics'); + workspace = getWorkspaceConfig(tree); + } catch { + context.logger.warn(`No @o3r/schematics installed, we could not detect the workspace. The linter task for ${projectName} can not be added.`); + } + const workspaceProject = workspace?.projects[projectName]; + if (!workspaceProject) { + context.logger.warn(`No project detected, the linter task for ${projectName} can not be added.`); + return; + } + + workspaceProject.architect ||= {}; + workspaceProject.architect.lint ||= { + builder: '@angular-eslint/builder:lint', + options: { + eslintConfig: `${workspaceProject.root}/eslint.config.${extension}`, + lintFilePatterns: [ + `${workspaceProject.sourceRoot || path.posix.join(workspaceProject.root, 'src')}/**/*.ts` + ] + } + }; + + workspace!.projects[projectName] = workspaceProject; + tree.overwrite('/angular.json', JSON.stringify(workspace, null, 2)); +}; + /** * Update ESLint Config - * @param isWorkspace * @param rootPath + * @param projectName */ -export const updateEslintConfig = (isWorkspace = true, rootPath = __dirname): Rule => async (tree, context) => { - const { findFilesInTree, getTemplateFolder } = await import('@o3r/schematics'); - const eslintConfigFiles = findFilesInTree(tree.root, (file) => /eslint.config.[cm]?js/.test(file)); +export const updateEslintConfig = (rootPath: string, projectName?: string): Rule => async (tree, context) => { + const { findFilesInTree, getTemplateFolder, getWorkspaceConfig } = await import('@o3r/schematics'); + const workspace = getWorkspaceConfig(tree); + const workspaceProject = workspace?.projects[projectName || '']; + const projectRootPath = workspaceProject?.root || '.'; + const workingDir = tree.getDir(projectRootPath); + const eslintConfigFiles = findFilesInTree(workingDir, (file) => /eslint.config.[cm]?js/.test(file)); if (eslintConfigFiles.length > 1) { context.logger.warn( 'Unable to add the "@o3r/eslint-config" recommendation because several ESLint config file detected.\n' @@ -31,20 +70,24 @@ export const updateEslintConfig = (isWorkspace = true, rootPath = __dirname): Ru ); return; } + const templateOptions = { extension: 'mjs', codeBeforeConfig: '', codeAfterConfig: '', oldConfig: '', - packageName: (tree.readJson('package.json') as JsonObject).name, - detectedTsConfigs: findFilesInTree(tree.root, (f) => /tsconfig.*\.json/.test(f)).map((entry) => path.basename(entry.path)).concat('tsconfig.eslint.json') + relativePathToRoot: path.relative(projectRootPath, '.'), + packageName: (tree.readJson(workingDir.file(fragment('package.json'))?.path || 'package.json') as JsonObject).name, + detectedTsConfigs: findFilesInTree(workingDir, (f) => /tsconfig\..*\.json/.test(f)).map((entry) => path.basename(entry.path)).concat('tsconfig.eslint.json'), + isApp: workspaceProject?.projectType === 'application' }; + if (eslintConfigFiles.length === 1) { const file = eslintConfigFiles[0]; const filePath = file.path.toString(); const fileContent = file.content.toString(); const extension = path.extname(filePath) as 'mjs' | 'cjs' | 'js'; - const regexp = extension === 'mjs' ? /export\s+default\s+[^;]*;/ : /module.exportss+=\s+[^;]*;/; + const regexp = extension === 'mjs' ? /export\s+default\s+[^;]*;/ : /module.exports\s*=\s*[^;]*;/; const [codeBeforeConfig, codeAfterConfig] = fileContent.split(regexp); if (!codeAfterConfig) { context.logger.warn( @@ -61,10 +104,16 @@ export const updateEslintConfig = (isWorkspace = true, rootPath = __dirname): Ru } return chain([ - updateOrAddTsconfigEslint(undefined, __dirname), - mergeWith(apply(url(getTemplateFolder(rootPath, __dirname, `./templates/${isWorkspace ? 'workspace' : 'project'}`)), [ - template(templateOptions), - renameTemplateFiles() - ]), MergeStrategy.Overwrite) + projectName ? editAngularJson(projectName, templateOptions.extension) : noop(), + applyToSubtree( + projectRootPath, + [ + updateOrAddTsconfigEslint(rootPath), + mergeWith(apply(url(getTemplateFolder(rootPath, __dirname, `./templates/${projectRootPath === '.' ? 'workspace' : 'project'}`)), [ + template(templateOptions), + renameTemplateFiles() + ]), MergeStrategy.Overwrite) + ] + ) ]); }; diff --git a/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/project/eslint.local.config.__extension__.template b/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/project/eslint.local.config.__extension__.template index 5b28eb6d34..4df72f6665 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/project/eslint.local.config.__extension__.template +++ b/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/project/eslint.local.config.__extension__.template @@ -1,19 +1,27 @@ <% if (extension === 'mjs') { %>import { dirname } from 'node:path'; import { fileURLToPath } from 'node:url'; - +<% if (isApp) { + %>import globals from 'globals';<% +} %> const __filename = fileURLToPath(import.meta.url); // __dirname is not defined in ES module scope const __dirname = dirname(__filename); - -<% } %><%= extension === 'mjs' ? 'export default' : 'module.exports =' %> [ +<% } else if (isApp) { %>const globals = require('globals'); +<% } %> +<%= extension === 'mjs' ? 'export default' : 'module.exports =' %> [ { name: '<%= packageName %>/projects', languageOptions: { - sourceType: 'commonjs', + sourceType: 'module', parserOptions: { tsconfigRootDir: __dirname, - project: [<%= detectedTsConfigs.map((tsconfig) => `'${tsconfig}'`).join(', ') %>] - } + project: [ +<%= detectedTsConfigs.map((tsconfig) => ` '${tsconfig}'`).join(',\n') %> + ] + }<% if (isApp) { %>, + globals: { + ...globals.browser + }<% } %> } } ]; diff --git a/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.config.__extension__.template b/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.config.__extension__.template index bc42d41e97..c51b535874 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.config.__extension__.template +++ b/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.config.__extension__.template @@ -1,15 +1,25 @@ -<% if (extension === 'mjs') { %>import { sync } from 'globby'; -import { dirname, relative } from 'node:path'; -import { fileURLToPath, pathToFileURL } from 'node:url'; +<% if (extension === 'mjs') { %>import { + dirname, + posix, + relative, + sep +} from 'node:path'; +import { + fileURLToPath, + pathToFileURL +} from 'node:url'; import shared from './eslint.shared.config.mjs'; +import { + sync +} from 'globby'; const __filename = fileURLToPath(import.meta.url); // __dirname is not defined in ES module scope const __dirname = dirname(__filename); <% } else { %> - const { sync } = require('globby'); - const { dirname, posix, relative, sep } from 'node:path'; - cons shared from './eslint.shared.config.<%= extension %>'; +const { dirname, posix, relative, sep } = require('node:path'); +const { sync } = require('globby'); +const shared = require('./eslint.shared.config.<%= extension %>'); <% } %> /** @@ -18,7 +28,7 @@ const __dirname = dirname(__filename); * @param {string | undefined} pathGlob * @returns {string} */ -const addPrefix = (prefix, pathGlob = '**/*') => pathGlob.replace(/^(!?)(\.?\/)?/, `$1${prefix}/`).replaceAll(sep, posix.sep); +const addPrefix = (prefix, pathGlob = '**/*') => pathGlob.replace(/^(!?)(\.?\/)?/, `$1${prefix}/`).replaceAll(sep, posix.sep).replace(/^\//, ''); /** * Merge ESLint config @@ -35,19 +45,13 @@ const mergeESLintConfigs = async (globs) => { /** @type {import('@typescript-eslint/utils').TSESLint.FlatConfig.ConfigArray} */ const configArray = Array.isArray(moduleConfig) ? moduleConfig : [moduleConfig]; const directory = relative(__dirname, dirname(localConfigFile)); - /** - * Add the directory as prefix to the glob - * @param {string} pathGlob - * @returns {string} - */ - const addDirectoryFn = (pathGlob) => addPrefix(directory, pathGlob); localConfigs = localConfigs.concat( configArray.map((config) => ({ ...config, - files: (config.files || ['**/*']).flat().map(addDirectoryFn), + files: (config.files || ['**/*']).flat().map((pathGlob) => addPrefix(directory, pathGlob)), ...( config.ignores - ? { ignores: config.ignores.map(addDirectoryFn) } + ? { ignores: config.ignores.map((pathGlob) => addPrefix(directory, pathGlob)) } : {} ) })) @@ -60,5 +64,4 @@ const mergeESLintConfigs = async (globs) => { ]; }; -// eslint-disable-next-line unicorn/prefer-top-level-await <%= extension === 'mjs' ? 'export default' : 'module.exports =' %> mergeESLintConfigs('**/eslint.local.config.mjs'); diff --git a/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.local.config.__extension__.template b/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.local.config.__extension__.template index bb6f2b9b2d..d0f797d6c0 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.local.config.__extension__.template +++ b/packages/@o3r/eslint-config/schematics/ng-add/eslint/templates/workspace/eslint.local.config.__extension__.template @@ -12,7 +12,9 @@ const __dirname = dirname(__filename); sourceType: 'commonjs', parserOptions: { tsconfigRootDir: __dirname, - project: [<%= detectedTsConfigs.map((tsconfig) => `'${tsconfig}'`).join(', ') %>] + project: [ +<%= detectedTsConfigs.map((tsconfig) => ` '${tsconfig}'`).join(', ') %> + ] } } } diff --git a/packages/@o3r/eslint-config/schematics/ng-add/index.spec.ts b/packages/@o3r/eslint-config/schematics/ng-add/index.spec.ts index 54d9f81879..b27ea01732 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/index.spec.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/index.spec.ts @@ -36,13 +36,23 @@ describe('ng add eslint-config', () => { await runner.runSchematic('ng-add', {}, Tree.empty()); expect(setupDependenciesMock).toHaveBeenCalledWith(expect.objectContaining({ dependencies: expect.objectContaining({ + '@eslint-community/eslint-plugin-eslint-comments': expect.objectContaining({}), + '@eslint/js': expect.objectContaining({}), '@o3r/eslint-plugin': expect.objectContaining({}), '@stylistic/eslint-plugin': expect.objectContaining({}), + '@typescript-eslint/parser': expect.objectContaining({}), 'angular-eslint': expect.objectContaining({}), eslint: expect.objectContaining({}), + 'eslint-import-resolver-node': expect.objectContaining({}), + 'eslint-import-resolver-typescript': expect.objectContaining({}), + 'eslint-plugin-import': expect.objectContaining({}), + 'eslint-plugin-import-newlines': expect.objectContaining({}), + 'eslint-plugin-jest': expect.objectContaining({}), 'eslint-plugin-jsdoc': expect.objectContaining({}), 'eslint-plugin-prefer-arrow': expect.objectContaining({}), + 'eslint-plugin-sort-export-all': expect.objectContaining({}), 'eslint-plugin-unicorn': expect.objectContaining({}), + 'eslint-plugin-unused-imports': expect.objectContaining({}), globby: expect.objectContaining({}), 'jsonc-eslint-parser': expect.objectContaining({}), 'typescript-eslint': expect.objectContaining({}) @@ -58,7 +68,6 @@ describe('ng add eslint-config', () => { const initialTree = Tree.empty(); initialTree.create('angular.json', JSON.stringify({ projects: { - 'project-test': { root: 'project-test' } @@ -69,7 +78,7 @@ describe('ng add eslint-config', () => { expect(setupDependenciesMock).toHaveBeenCalled(); expect(updateVscodeMock).toHaveBeenCalled(); expect(updateEslintConfigMock).toHaveBeenCalledTimes(2); - expect(updateEslintConfigMock).toHaveBeenCalledWith(); - expect(updateEslintConfigMock).toHaveBeenCalledWith(false); + expect(updateEslintConfigMock).toHaveBeenCalledWith(__dirname); + expect(updateEslintConfigMock).toHaveBeenCalledWith(__dirname, 'project-test'); }); }); diff --git a/packages/@o3r/eslint-config/schematics/ng-add/index.ts b/packages/@o3r/eslint-config/schematics/ng-add/index.ts index 2c4b2e4eb1..372706a849 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/index.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/index.ts @@ -1,6 +1,5 @@ import * as path from 'node:path'; import { - applyToSubtree, chain, noop, type Rule, @@ -23,25 +22,71 @@ You need to install '@o3r/schematics' package to be able to use the eslint-confi throw reason; }; +const handleOtterEslintErrors = (projectName: string): Rule => async (tree: Tree, context: SchematicContext) => { + if (!projectName) { + return; + } + const { getWorkspaceConfig } = await import('@o3r/schematics'); + const workspace = getWorkspaceConfig(tree); + if (!workspace) { + return; + } + const workspaceProject = workspace.projects[projectName]; + + if (!workspaceProject) { + context.logger.warn('No project detected, linter task can not be added.'); + return; + } + const projectRoot = workspaceProject.root; + const mainTsPath = path.posix.join(projectRoot, 'src/main.ts'); + if (tree.exists(mainTsPath)) { + const mainTsContent = tree.readText(mainTsPath); + tree.overwrite(mainTsPath, '/* eslint-disable no-console -- console.error is used to log error in the browser while initializing the Angular application */\n' + mainTsContent); + } + const appComponentPath = path.posix.join(projectRoot, 'src/app/app.component.ts'); + if (tree.exists(appComponentPath)) { + const appComponentContent = tree.readText(appComponentPath); + tree.overwrite(appComponentPath, appComponentContent.replace(/^(\s+)(title =)/m, '$1public $2')); + } + context.logger.warn('Linter errors may occur and should be fixed by hand or by running the linter with the option `--fix`.'); +}; + function ngAddFn(options: NgAddSchematicsSchema): Rule { /* ng add rules */ return async (tree: Tree, context: SchematicContext) => { + let installJestPlugin = false; + try { + require.resolve('jest'); + installJestPlugin = true; + } catch {} + const devDependenciesToInstall = [ + '@eslint-community/eslint-plugin-eslint-comments', + '@eslint/js', + '@o3r/eslint-plugin', '@stylistic/eslint-plugin', + '@typescript-eslint/parser', + '@typescript-eslint/utils', + '@typescript-eslint/types', 'angular-eslint', 'eslint', + 'eslint-import-resolver-node', 'eslint-import-resolver-typescript', 'eslint-plugin-import', - '@eslint-community/eslint-plugin-eslint-comments', - 'eslint-plugin-sort-export-all', 'eslint-plugin-import-newlines', - 'eslint-plugin-unused-imports', + ...(installJestPlugin ? ['eslint-plugin-jest'] : []), 'eslint-plugin-jsdoc', 'eslint-plugin-prefer-arrow', + 'eslint-plugin-sort-export-all', 'eslint-plugin-unicorn', + 'eslint-plugin-unused-imports', 'globby', + 'globals', + 'jsonc-eslint-parser', 'typescript-eslint', - 'jsonc-eslint-parser' + // TODO could be removed once #2482 is fixed + 'yaml-eslint-parser', + ...(options.projectName ? ['@angular-eslint/builder'] : []) ]; const { @@ -52,7 +97,7 @@ function ngAddFn(options: NgAddSchematicsSchema): Rule { getProjectNewDependenciesTypes, getPackageInstallConfig } = await import('@o3r/schematics'); - const depsInfo = getO3rPeerDeps(path.resolve(__dirname, '..', '..', 'package.json'), true, /^@(?:o3r|ama-sdk|eslint-)/); + const depsInfo = getO3rPeerDeps(path.resolve(__dirname, '..', '..', 'package.json'), true, /^@(?:o3r|ama-sdk)/); const workspaceProject = options.projectName ? getWorkspaceConfig(tree)?.projects[options.projectName] : undefined; const { NodeDependencyType } = await import('@schematics/angular/utility/dependencies'); const packageJsonPath = path.resolve(__dirname, '..', '..', 'package.json'); @@ -83,9 +128,12 @@ function ngAddFn(options: NgAddSchematicsSchema): Rule { ngAddToRun: depsInfo.o3rPeerDeps }), updateVscode, - updateEslintConfig(), + updateEslintConfig(__dirname), options.projectName && workspaceProject?.root - ? applyToSubtree(workspaceProject.root, [updateEslintConfig(false)]) + ? chain([ + updateEslintConfig(__dirname, options.projectName), + options.fix ? handleOtterEslintErrors(options.projectName) : noop() + ]) : noop() ])(tree, context); }; diff --git a/packages/@o3r/eslint-config/schematics/ng-add/schema.json b/packages/@o3r/eslint-config/schematics/ng-add/schema.json index 9e7cd8c721..c29bee7a4e 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/schema.json +++ b/packages/@o3r/eslint-config/schematics/ng-add/schema.json @@ -15,6 +15,11 @@ "type": "boolean", "description": "Use a pinned version for otter packages", "default": false + }, + "fix": { + "type": "boolean", + "description": "Fix known issues with our ESLint config after Otter application or library generation", + "default": false } }, "additionalProperties": true, diff --git a/packages/@o3r/eslint-config/schematics/ng-add/schema.ts b/packages/@o3r/eslint-config/schematics/ng-add/schema.ts index 94fa0790c9..92ff3d8000 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/schema.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/schema.ts @@ -7,4 +7,6 @@ export interface NgAddSchematicsSchema extends SchematicOptionObject { projectName?: string | undefined; /** Use a pinned version for otter packages */ exactO3rVersion?: boolean; + /** Fix known issues with our ESLint config after Otter application or library generation */ + fix?: boolean; } diff --git a/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.spec.ts b/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.spec.ts index c5480f4730..08968328ec 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.spec.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.spec.ts @@ -21,7 +21,7 @@ describe('update tsconfig', () => { it('should create a tsconfig eslint', async () => { const runner = new SchematicTestRunner('schematics', collectionPath); - let tree = await firstValueFrom(callRule(updateOrAddTsconfigEslint(), Tree.empty(), runner.engine.createContext(context as any))); + let tree = await firstValueFrom(callRule(updateOrAddTsconfigEslint(__dirname, undefined), Tree.empty(), runner.engine.createContext(context as any))); expect(tree.readJson(tsconfigEslintPath)).toEqual(expect.objectContaining({ extends: './tsconfig', include: [ @@ -29,7 +29,7 @@ describe('update tsconfig', () => { ] })); - tree = await firstValueFrom(callRule(updateOrAddTsconfigEslint('tsconfig.custom'), Tree.empty(), runner.engine.createContext(context as any))); + tree = await firstValueFrom(callRule(updateOrAddTsconfigEslint(__dirname, 'tsconfig.custom'), Tree.empty(), runner.engine.createContext(context as any))); expect(tree.readJson(tsconfigEslintPath)).toEqual(expect.objectContaining({ extends: './tsconfig.custom', include: [ @@ -43,7 +43,7 @@ describe('update tsconfig', () => { initialTree.create(tsconfigEslintPath, JSON.stringify({ extends: './tsconfig', include: ['include-path'] }, null, 2)); const runner = new SchematicTestRunner('schematics', collectionPath); - const tree = await firstValueFrom(callRule(updateOrAddTsconfigEslint('tsconfig.custom'), initialTree, runner.engine.createContext(context as any))); + const tree = await firstValueFrom(callRule(updateOrAddTsconfigEslint(__dirname, 'tsconfig.custom'), initialTree, runner.engine.createContext(context as any))); expect(tree.readJson(tsconfigEslintPath)).toEqual(expect.objectContaining({ extends: './tsconfig', include: [ diff --git a/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.ts b/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.ts index 9746731e56..100cb4504a 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/tsconfig/index.ts @@ -14,10 +14,10 @@ import { /** * Update or add tsconfig.eslint.json file - * @param projectTsConfig * @param rootPath + * @param projectTsConfig */ -export const updateOrAddTsconfigEslint = (projectTsConfig = 'tsconfig', rootPath = __dirname): Rule => async (tree) => { +export const updateOrAddTsconfigEslint = (rootPath: string, projectTsConfig = 'tsconfig'): Rule => async (tree) => { const tsconfigPath = 'tsconfig.eslint.json'; if (tree.exists(tsconfigPath)) { const tsconfig = tree.readJson(tsconfigPath) as JsonObject; diff --git a/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.spec.ts b/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.spec.ts index f8a19cc63a..e58a4b22cc 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.spec.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.spec.ts @@ -23,7 +23,7 @@ describe('update vscode', () => { const runner = new SchematicTestRunner('schematics', collectionPath); const tree = await firstValueFrom(runner.callRule(updateVscode, initialTree, { interactive: false })); - expect((tree.readJson(extensionFile) as any).recommendations).toEqual(expect.arrayContaining(['dbaeumer.vscode-eslint', 'stylelint.vscode-stylelint'])); + expect((tree.readJson(extensionFile) as any).recommendations).toEqual(expect.arrayContaining(['dbaeumer.vscode-eslint'])); expect((tree.readJson(settingFile) as any)['eslint.useFlatConfig']).toBe(true); expect((tree.readJson(settingFile) as any)['editor.defaultFormatter']).toBe('dbaeumer.vscode-eslint'); }); diff --git a/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.ts b/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.ts index e5ea48128f..ed6e0c82ea 100644 --- a/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.ts +++ b/packages/@o3r/eslint-config/schematics/ng-add/vscode/index.ts @@ -46,7 +46,7 @@ type VScodeSettings = JsonObject & EditorSettings & ESLintSettings; export const updateVscode: Rule = async () => { const { addVsCodeRecommendations } = await import('@o3r/schematics'); return chain([ - addVsCodeRecommendations(['dbaeumer.vscode-eslint', 'stylelint.vscode-stylelint']), + addVsCodeRecommendations(['dbaeumer.vscode-eslint']), (tree) => { const vscodeSettingsPath = '.vscode/settings.json'; const settings = (tree.exists(vscodeSettingsPath) ? (tree.readJson(vscodeSettingsPath) || {}) : {}) as VScodeSettings; diff --git a/packages/@o3r/eslint-plugin/package.json b/packages/@o3r/eslint-plugin/package.json index 9f8ae24ecf..d23173ebda 100644 --- a/packages/@o3r/eslint-plugin/package.json +++ b/packages/@o3r/eslint-plugin/package.json @@ -46,17 +46,17 @@ }, "peerDependencies": { "@angular-devkit/schematics": "~18.2.0", - "@angular-eslint/template-parser": "~18.3.0", - "@angular-eslint/test-utils": "~18.3.0", + "@angular-eslint/template-parser": "~18.4.0", + "@angular-eslint/test-utils": "~18.4.0", "@angular/compiler": "~18.2.0", - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ~9.14.0", "jsonc-eslint-parser": "~2.4.0", "yaml-eslint-parser": "^1.2.2" }, "devDependencies": { "@angular-devkit/core": "~18.2.0", "@angular-devkit/schematics": "~18.2.0", - "@angular-eslint/test-utils": "~18.3.0", + "@angular-eslint/test-utils": "~18.4.0", "@angular/compiler": "~18.2.0", "@babel/core": "~7.26.0", "@babel/preset-typescript": "~7.26.0", @@ -75,9 +75,9 @@ "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", "@typescript-eslint/rule-tester": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/packages/@o3r/extractors/package.json b/packages/@o3r/extractors/package.json index 9e3a24065e..2ad76d99d0 100644 --- a/packages/@o3r/extractors/package.json +++ b/packages/@o3r/extractors/package.json @@ -119,9 +119,9 @@ "@yarnpkg/fslib": "^3.1.0", "@yarnpkg/plugin-npm": "^3.0.1", "@yarnpkg/plugin-pack": "^4.0.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/forms/package.json b/packages/@o3r/forms/package.json index e02cb2ba6e..3ae7b9903c 100644 --- a/packages/@o3r/forms/package.json +++ b/packages/@o3r/forms/package.json @@ -78,9 +78,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/localization/package.json b/packages/@o3r/localization/package.json index 66a768916f..2f1a1257f8 100644 --- a/packages/@o3r/localization/package.json +++ b/packages/@o3r/localization/package.json @@ -158,10 +158,10 @@ "@yarnpkg/fslib": "^3.1.0", "@yarnpkg/plugin-npm": "^3.0.1", "@yarnpkg/plugin-pack": "^4.0.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "chokidar": "^3.5.2", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/logger/package.json b/packages/@o3r/logger/package.json index 57e88bb703..f3f9afe9c4 100644 --- a/packages/@o3r/logger/package.json +++ b/packages/@o3r/logger/package.json @@ -91,9 +91,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/mobile/package.json b/packages/@o3r/mobile/package.json index 4c789c9bd0..8ec9374bf6 100644 --- a/packages/@o3r/mobile/package.json +++ b/packages/@o3r/mobile/package.json @@ -99,9 +99,9 @@ "@types/node": "^20.0.0", "@types/node-fetch": "^2.6.2", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/new-version/package.json b/packages/@o3r/new-version/package.json index df005280e5..4ef25c2adb 100644 --- a/packages/@o3r/new-version/package.json +++ b/packages/@o3r/new-version/package.json @@ -51,9 +51,9 @@ "@types/node": "^20.0.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/pipeline/package.json b/packages/@o3r/pipeline/package.json index 6ca5103112..7151e60ce7 100644 --- a/packages/@o3r/pipeline/package.json +++ b/packages/@o3r/pipeline/package.json @@ -81,9 +81,9 @@ "@typescript-eslint/eslint-plugin": "^7.14.1", "@typescript-eslint/parser": "~8.12.2", "@typescript-eslint/utils": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/routing/package.json b/packages/@o3r/routing/package.json index f21fce99ec..c64027c89b 100644 --- a/packages/@o3r/routing/package.json +++ b/packages/@o3r/routing/package.json @@ -93,9 +93,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/rules-engine/package.json b/packages/@o3r/rules-engine/package.json index 52480316c1..4b072ca182 100644 --- a/packages/@o3r/rules-engine/package.json +++ b/packages/@o3r/rules-engine/package.json @@ -127,9 +127,9 @@ "@types/node": "^20.0.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/schematics/package.json b/packages/@o3r/schematics/package.json index dbd573bf7a..0407f97224 100644 --- a/packages/@o3r/schematics/package.json +++ b/packages/@o3r/schematics/package.json @@ -32,7 +32,7 @@ "@angular/cli": "~18.2.0", "@o3r/telemetry": "workspace:^", "@schematics/angular": "~18.2.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "rxjs": "^7.8.1", "type-fest": "^4.10.2", "typescript": "~5.5.4" @@ -95,9 +95,9 @@ "@types/node": "^20.0.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/schematics/src/rule-factories/add-imports/index.spec.ts b/packages/@o3r/schematics/src/rule-factories/add-imports/index.spec.ts new file mode 100644 index 0000000000..d15cde8213 --- /dev/null +++ b/packages/@o3r/schematics/src/rule-factories/add-imports/index.spec.ts @@ -0,0 +1,43 @@ +import { + callRule, + type SchematicContext, + Tree, +} from '@angular-devkit/schematics'; +import { + firstValueFrom, +} from 'rxjs'; +import { + addImportsRule, +} from './index'; + +describe('addImportsRule', () => { + let tree: Tree; + const warn = jest.fn(); + const fileName = 'index.ts'; + const context = { logger: { warn } } as any as SchematicContext; + + beforeEach(() => { + tree = Tree.empty(); + warn.mockReset(); + tree.create(fileName, 'content'); + }); + + it('should add several imports', async () => { + const rule = addImportsRule(fileName, [{ from: 'somewhere', importNames: ['something', 'whatever'] }, { from: 'elsewhere', importNames: ['somethingElse'] }]); + await firstValueFrom(callRule(rule, tree, context)); + const result = tree.readText(fileName); + + expect(result).toContain('import { something, whatever } from \'somewhere\''); + expect(result).toContain('import { somethingElse } from \'elsewhere\''); + expect(result).toContain('content'); + expect(warn).not.toHaveBeenCalled(); + }); + + it('should log a warning as the file does not exist', async () => { + const wrongPath = 'wrong-file.ts'; + const rule = addImportsRule(wrongPath, [{ from: 'somewhere', importNames: ['something', 'whatever'] }, { from: 'elsewhere', importNames: ['somethingElse'] }]); + await firstValueFrom(callRule(rule, tree, context)); + expect(warn).toHaveBeenCalledTimes(1); + expect(warn).toHaveBeenCalledWith(expect.stringContaining(wrongPath)); + }); +}); diff --git a/packages/@o3r/schematics/src/rule-factories/add-imports/index.ts b/packages/@o3r/schematics/src/rule-factories/add-imports/index.ts index f9da4d5c5d..0d6594e154 100644 --- a/packages/@o3r/schematics/src/rule-factories/add-imports/index.ts +++ b/packages/@o3r/schematics/src/rule-factories/add-imports/index.ts @@ -6,7 +6,6 @@ import { } from '@schematics/angular/utility/ast-utils'; import { applyToUpdateRecorder, - type Change, } from '@schematics/angular/utility/change'; import * as ts from 'typescript'; @@ -26,17 +25,19 @@ export const addImportsRule = ( context.logger.warn(`No update applied on file because ${filePath} does not exist.`); return; } - const sourceFile = ts.createSourceFile( - filePath, - tree.readText(filePath), - ts.ScriptTarget.ES2020, - true - ); - const recorder = tree.beginUpdate(filePath); - const changes = imports.reduce((acc: Change[], { importNames, from }) => acc.concat( - importNames.map((importName) => insertImport(sourceFile, filePath, importName, from)) - ), []); - applyToUpdateRecorder(recorder, changes); - tree.commitUpdate(recorder); + imports.forEach(({ importNames, from }) => { + importNames.forEach((importName) => { + const sourceFile = ts.createSourceFile( + filePath, + tree.readText(filePath), + ts.ScriptTarget.ES2020, + true + ); + const recorder = tree.beginUpdate(filePath); + const change = insertImport(sourceFile, filePath, importName, from); + applyToUpdateRecorder(recorder, [change]); + tree.commitUpdate(recorder); + }); + }); return tree; }; diff --git a/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.spec.ts b/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.spec.ts index c78e9d73ea..8fe436d5be 100644 --- a/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.spec.ts +++ b/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.spec.ts @@ -41,7 +41,12 @@ platformBrowserDynamic().bootstrapModule(AppModule).catch(err => console.error(e fakeContext ) ); - expect(tree.readText(mainFilePath)).toContain(`.then((m) => { runInInjectionContext(m.injector, () => { inject(${serviceName}); }); return m; })`); + expect(tree.readText(mainFilePath)).toContain(`.then((m) => { + runInInjectionContext(m.injector, () => { + inject(${serviceName}); + }); + return m; + })`); }); it('should inject a service if `bootstrapApplication` found', async () => { @@ -66,7 +71,12 @@ bootstrapApplication(AppComponent, appConfig) fakeContext ) ); - expect(tree.readText(mainFilePath)).toContain(`.then((m) => { runInInjectionContext(m.injector, () => { inject(${serviceName}); }); return m; })`); + expect(tree.readText(mainFilePath)).toContain(`.then((m) => { + runInInjectionContext(m.injector, () => { + inject(${serviceName}); + }); + return m; + })`); }); it('should not reinject a service', async () => { diff --git a/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.ts b/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.ts index 4b24149161..23aadb979c 100644 --- a/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.ts +++ b/packages/@o3r/schematics/src/rule-factories/dev-tools/devtools-registration.ts @@ -3,7 +3,6 @@ import { Rule, } from '@angular-devkit/schematics'; import { - insertImport, isImported, } from '@schematics/angular/utility/ast-utils'; import { @@ -24,6 +23,9 @@ import { getModuleIndex, getWorkspaceConfig, } from '../../utility/index'; +import { + addImportsRule, +} from '../add-imports'; /** Options for the devtools register rule factory */ export interface DevtoolRegisterOptions { @@ -96,37 +98,52 @@ export const injectServiceInMain = (options: DevtoolRegisterOptions): Rule => (t return tree; } + const recorder = tree.beginUpdate(mainFilePath); + const changes = []; + + changes.push( + new InsertChange( + mainFilePath, + match.index + match[0].length, + ` + .then((m) => { + runInInjectionContext(m.injector, () => { + inject(${options.serviceName}); + }); + return m; + })` + ) + ); + + applyToUpdateRecorder(recorder, changes); + tree.commitUpdate(recorder); const sourceFile = ts.createSourceFile( mainFilePath, content, ts.ScriptTarget.ES2015, true ); - - const recorder = tree.beginUpdate(mainFilePath); - const changes = []; + const importsToAdd = new Map(); if (!isImported(sourceFile, options.serviceName, options.packageName)) { - changes.push(insertImport(sourceFile, mainFilePath, options.serviceName, options.packageName)); + importsToAdd.set(options.packageName, [options.serviceName]); } if (!isImported(sourceFile, 'inject', '@angular/core')) { - changes.push(insertImport(sourceFile, mainFilePath, 'inject', '@angular/core')); + importsToAdd.set('@angular/core', ['inject']); } if (!isImported(sourceFile, 'runInInjectionContext', '@angular/core')) { - changes.push(insertImport(sourceFile, mainFilePath, 'runInInjectionContext', '@angular/core')); + const angularCoreImportsToAdd = importsToAdd.get('@angular/core'); + if (angularCoreImportsToAdd) { + angularCoreImportsToAdd.push('runInInjectionContext'); + } else { + importsToAdd.set('@angular/core', ['runInInjectionContext']); + } } - - changes.push( - new InsertChange( - mainFilePath, - match.index + match[0].length, - `\n .then((m) => { runInInjectionContext(m.injector, () => { inject(${options.serviceName}); }); return m; })` - ) - ); - - applyToUpdateRecorder(recorder, changes); - tree.commitUpdate(recorder); - return tree; + return addImportsRule( + mainFilePath, + [...importsToAdd.entries()] + .map(([from, importNames]) => ({ from, importNames })) + )(tree, context); }; /** diff --git a/packages/@o3r/store-sync/package.json b/packages/@o3r/store-sync/package.json index 452bf9fc36..cfc026255a 100644 --- a/packages/@o3r/store-sync/package.json +++ b/packages/@o3r/store-sync/package.json @@ -80,9 +80,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/storybook/package.json b/packages/@o3r/storybook/package.json index 93d937bcfa..315c40cc79 100644 --- a/packages/@o3r/storybook/package.json +++ b/packages/@o3r/storybook/package.json @@ -117,10 +117,10 @@ "@types/node": "^20.0.0", "@types/react": "^18.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "concurrently": "^8.0.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/stylelint-plugin/package.json b/packages/@o3r/stylelint-plugin/package.json index 7d30b8b9cd..02b1a1ba26 100644 --- a/packages/@o3r/stylelint-plugin/package.json +++ b/packages/@o3r/stylelint-plugin/package.json @@ -64,9 +64,9 @@ "@types/jest": "~29.5.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/styling/package.json b/packages/@o3r/styling/package.json index 249910738f..5213b3d06a 100644 --- a/packages/@o3r/styling/package.json +++ b/packages/@o3r/styling/package.json @@ -171,10 +171,10 @@ "@yarnpkg/fslib": "^3.1.0", "@yarnpkg/plugin-npm": "^3.0.1", "@yarnpkg/plugin-pack": "^4.0.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "chokidar": "^3.5.2", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/telemetry/package.json b/packages/@o3r/telemetry/package.json index 740ae4c88a..bafa13a8d6 100644 --- a/packages/@o3r/telemetry/package.json +++ b/packages/@o3r/telemetry/package.json @@ -54,9 +54,9 @@ "@types/minimist": "^1.2.2", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/test-helpers/package.json b/packages/@o3r/test-helpers/package.json index e234095366..ac9bbce9c4 100644 --- a/packages/@o3r/test-helpers/package.json +++ b/packages/@o3r/test-helpers/package.json @@ -54,9 +54,9 @@ "@types/pid-from-port": "^1.1.0", "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/testing/package.json b/packages/@o3r/testing/package.json index db94d64481..3031b02632 100644 --- a/packages/@o3r/testing/package.json +++ b/packages/@o3r/testing/package.json @@ -212,10 +212,10 @@ "@types/pixelmatch": "^5.2.3", "@types/pngjs": "^6.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "concurrently": "^8.0.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/third-party/package.json b/packages/@o3r/third-party/package.json index b5cd0df820..62a3bc0209 100644 --- a/packages/@o3r/third-party/package.json +++ b/packages/@o3r/third-party/package.json @@ -78,9 +78,9 @@ "@types/node": "^20.0.0", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/packages/@o3r/workspace/package.json b/packages/@o3r/workspace/package.json index db9cdfda56..154b2d50b5 100644 --- a/packages/@o3r/workspace/package.json +++ b/packages/@o3r/workspace/package.json @@ -93,9 +93,9 @@ "@types/semver": "^7.3.13", "@types/uuid": "^9.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "cpy-cli": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/tools/@o3r/build-helpers/package.json b/tools/@o3r/build-helpers/package.json index 50f3d0edbd..ad42745ef8 100644 --- a/tools/@o3r/build-helpers/package.json +++ b/tools/@o3r/build-helpers/package.json @@ -43,8 +43,8 @@ "@stylistic/eslint-plugin": "~2.7.0", "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-import-resolver-node": "^0.3.9", "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.31.0", diff --git a/tools/github-actions/audit/package.json b/tools/github-actions/audit/package.json index 046f3098aa..778e2df251 100644 --- a/tools/github-actions/audit/package.json +++ b/tools/github-actions/audit/package.json @@ -38,9 +38,9 @@ "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", "@vercel/ncc": "~0.38.0", - "angular-eslint": "~18.3.0", + "angular-eslint": "~18.4.0", "audit-types": "~0.6.0", - "eslint": "^9.0.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/tools/github-actions/cascading/package.json b/tools/github-actions/cascading/package.json index 2f4dbb1b21..47fe683300 100644 --- a/tools/github-actions/cascading/package.json +++ b/tools/github-actions/cascading/package.json @@ -31,8 +31,8 @@ "@types/node": "^20.0.0", "@typescript-eslint/parser": "~8.12.2", "@vercel/ncc": "~0.38.0", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/tools/github-actions/get-npm-tag/package.json b/tools/github-actions/get-npm-tag/package.json index 4f89c6d1cd..dd9e66741e 100644 --- a/tools/github-actions/get-npm-tag/package.json +++ b/tools/github-actions/get-npm-tag/package.json @@ -30,8 +30,8 @@ "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", "@vercel/ncc": "~0.38.0", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/tools/github-actions/new-version/package.json b/tools/github-actions/new-version/package.json index 6097870dbe..81b4988230 100644 --- a/tools/github-actions/new-version/package.json +++ b/tools/github-actions/new-version/package.json @@ -34,8 +34,8 @@ "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", "@vercel/ncc": "~0.38.0", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/tools/github-actions/release/package.json b/tools/github-actions/release/package.json index 372af251aa..c12b4deb3d 100644 --- a/tools/github-actions/release/package.json +++ b/tools/github-actions/release/package.json @@ -30,8 +30,8 @@ "@types/semver": "^7.3.13", "@typescript-eslint/parser": "~8.12.2", "@vercel/ncc": "~0.38.0", - "angular-eslint": "~18.3.0", - "eslint": "^9.0.0", + "angular-eslint": "~18.4.0", + "eslint": "~9.14.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-import-newlines": "^1.4.0", "eslint-plugin-jest": "~28.8.0", diff --git a/yarn.lock b/yarn.lock index a108592b14..003b5b1ecf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -292,9 +292,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -372,9 +372,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -450,9 +450,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -530,9 +530,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -620,9 +620,9 @@ __metadata: "@types/pid-from-port": "npm:^1.1.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -686,12 +686,12 @@ __metadata: "@types/pid-from-port": "npm:^1.1.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chokidar: "npm:^3.5.2" commit-and-tag-version: "npm:^12.0.0" copyfiles: "npm:^2.4.1" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -773,11 +773,11 @@ __metadata: "@types/semver": "npm:^7.3.13" "@types/swagger-schema-official": "npm:^2.0.22" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" commander: "npm:^12.0.0" concurrently: "npm:^8.0.0" copyfiles: "npm:^2.4.1" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -840,9 +840,9 @@ __metadata: "@types/prompts": "npm:^2.0.14" "@types/yargs": "npm:^17.0.20" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chalk: "npm:^4.1.2" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -911,8 +911,8 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/yargs": "npm:^17.0.20" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -958,8 +958,8 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -1272,87 +1272,88 @@ __metadata: languageName: node linkType: hard -"@angular-eslint/builder@npm:18.3.0": - version: 18.3.0 - resolution: "@angular-eslint/builder@npm:18.3.0" +"@angular-eslint/builder@npm:18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/builder@npm:18.4.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: "*" - checksum: 10/6257fdfcac79bfca72eb294c59a7fd6e0a39820f174254ed5698b53ad1ac981819972af8d7080e83520fd6cdd48ddf94d9bc5c163b529d195f81a5e231c8a16a + checksum: 10/10dfc895bdd054ebfdb5fef468ca0f1e39483ebf50a6f808936c182ba72dc0a8bfb4a7c167b3e8c28dbe7ee97b504eb0c32ea98ffbad2b3a40a2749efe372ef0 languageName: node linkType: hard -"@angular-eslint/bundled-angular-compiler@npm:18.3.0": - version: 18.3.0 - resolution: "@angular-eslint/bundled-angular-compiler@npm:18.3.0" - checksum: 10/5fb14b4e7a9aea6f21ac5e148b1c431d847fc8bc53a4ce4240a44b43bbff3ef2c1ab1d9b5a56d39e90a53a69663235c21e0d68e1375cda8afacb34d4f1d0c86a +"@angular-eslint/bundled-angular-compiler@npm:18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/bundled-angular-compiler@npm:18.4.0" + checksum: 10/604917c726469b2b1657b623ecc093d34730c4cd99a80a0dbaae689c3b749502fe6cd53369b82a3b2fb2502def84951d0fbf6db798c25fa5ffb0228df831d3e3 languageName: node linkType: hard -"@angular-eslint/eslint-plugin-template@npm:18.3.0": - version: 18.3.0 - resolution: "@angular-eslint/eslint-plugin-template@npm:18.3.0" +"@angular-eslint/eslint-plugin-template@npm:18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/eslint-plugin-template@npm:18.4.0" dependencies: - "@angular-eslint/bundled-angular-compiler": "npm:18.3.0" - "@angular-eslint/utils": "npm:18.3.0" - aria-query: "npm:5.3.0" + "@angular-eslint/bundled-angular-compiler": "npm:18.4.0" + "@angular-eslint/utils": "npm:18.4.0" + aria-query: "npm:5.3.2" axobject-query: "npm:4.1.0" peerDependencies: + "@typescript-eslint/types": ^7.11.0 || ^8.0.0 "@typescript-eslint/utils": ^7.11.0 || ^8.0.0 eslint: ^8.57.0 || ^9.0.0 typescript: "*" - checksum: 10/621776e16b580ce0f003b6ded029a61f3647f740fe687f0a9c162cc2ea3e03b270b2f7275d2112ee158152dc77c97177c1302fe7c53371f147ec42b157c6e265 + checksum: 10/8db27015f03d42308b29525583a7b952fb9d6ea718364bd2fe74c90dd3889e2b3fe88dcac29f88bf21aba421866c27ebe83be4282d34d9cf3b0ed89a7e1a5815 languageName: node linkType: hard -"@angular-eslint/eslint-plugin@npm:18.3.0": - version: 18.3.0 - resolution: "@angular-eslint/eslint-plugin@npm:18.3.0" +"@angular-eslint/eslint-plugin@npm:18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/eslint-plugin@npm:18.4.0" dependencies: - "@angular-eslint/bundled-angular-compiler": "npm:18.3.0" - "@angular-eslint/utils": "npm:18.3.0" + "@angular-eslint/bundled-angular-compiler": "npm:18.4.0" + "@angular-eslint/utils": "npm:18.4.0" peerDependencies: "@typescript-eslint/utils": ^7.11.0 || ^8.0.0 eslint: ^8.57.0 || ^9.0.0 typescript: "*" - checksum: 10/865978b548ae17c34477a54b9478bb74d82164f2c4ee412306222538fe9a2556727ed78b7db48112e78f99b735a05065a4f259becee263c47e9f53d3bebed694 + checksum: 10/38f3abe4ebb4e7cf504736f074a3e8f9a137f3127bd3fe2a806e2edbe3d70c8d318ad6347361eead89505f1c62e59909d82bb0962ef91d9a1109d4b4c9f8089a languageName: node linkType: hard -"@angular-eslint/schematics@npm:18.3.0": - version: 18.3.0 - resolution: "@angular-eslint/schematics@npm:18.3.0" +"@angular-eslint/schematics@npm:18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/schematics@npm:18.4.0" dependencies: - "@angular-eslint/eslint-plugin": "npm:18.3.0" - "@angular-eslint/eslint-plugin-template": "npm:18.3.0" + "@angular-eslint/eslint-plugin": "npm:18.4.0" + "@angular-eslint/eslint-plugin-template": "npm:18.4.0" ignore: "npm:5.3.2" semver: "npm:7.6.3" strip-json-comments: "npm:3.1.1" peerDependencies: "@angular-devkit/core": ">= 18.0.0 < 19.0.0" "@angular-devkit/schematics": ">= 18.0.0 < 19.0.0" - checksum: 10/2dd32c7d250a605ed95266f084ea6a6253c3a62158c34ee375a74248273be44e8457b320d28136cfb69993a9affd02040cce964981f7fefb65846d609a1b725d + checksum: 10/e4df41c51f4a1e423892034b804b6380dc26b88c71d0da276021e0cba3f5d441dfd9f28778d1681bb66dad7eb32c414d43029ac2815b15799f2c85ad3b005e66 languageName: node linkType: hard -"@angular-eslint/template-parser@npm:18.3.0": - version: 18.3.0 - resolution: "@angular-eslint/template-parser@npm:18.3.0" +"@angular-eslint/template-parser@npm:18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/template-parser@npm:18.4.0" dependencies: - "@angular-eslint/bundled-angular-compiler": "npm:18.3.0" + "@angular-eslint/bundled-angular-compiler": "npm:18.4.0" eslint-scope: "npm:^8.0.2" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: "*" - checksum: 10/62bc658891dc512122295ed30ab770ab32a930dac44665671896e103974d8ccd57df4c2087d010c2dcabccf0857458da1cc39457cd2cf1e49d43ed4fb6190d6b + checksum: 10/e91df7eb13c2e6aa02060fcacdb6d8d102f6a2ce803f23df2e5820a1a9f5cc6d35dd908b2420453ac0fe1e6682583f50c1035faaf0e412ebb980fef816660431 languageName: node linkType: hard -"@angular-eslint/test-utils@npm:~18.3.0": - version: 18.3.1 - resolution: "@angular-eslint/test-utils@npm:18.3.1" +"@angular-eslint/test-utils@npm:~18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/test-utils@npm:18.4.0" peerDependencies: - "@angular-eslint/template-parser": 18.3.1 + "@angular-eslint/template-parser": 18.4.0 "@typescript-eslint/parser": ^7.11.0 || ^8.0.0 "@typescript-eslint/rule-tester": ^7.11.0 || ^8.0.0 "@typescript-eslint/utils": ^7.11.0 || ^8.0.0 @@ -1363,20 +1364,20 @@ __metadata: optional: true "@typescript-eslint/parser": optional: true - checksum: 10/167b670ad4a4cbd19198350b4a5e8fbdebd6dbd9aab389c90905ce2b2e3cc64cdbd985d7a63b435334d309f456495c1d56c8780d72c667d1c4332da4ca7e8f85 + checksum: 10/c9def5aaea2a1e8fabc484fdf5dc232554941a20b087fb5edd913e44553d2f269cf5ee6f38a0cf1fc3c51e7f6ae6b58f41b9177c4a9adcbf9fbf79f9d78e6192 languageName: node linkType: hard -"@angular-eslint/utils@npm:18.3.0": - version: 18.3.0 - resolution: "@angular-eslint/utils@npm:18.3.0" +"@angular-eslint/utils@npm:18.4.0": + version: 18.4.0 + resolution: "@angular-eslint/utils@npm:18.4.0" dependencies: - "@angular-eslint/bundled-angular-compiler": "npm:18.3.0" + "@angular-eslint/bundled-angular-compiler": "npm:18.4.0" peerDependencies: "@typescript-eslint/utils": ^7.11.0 || ^8.0.0 eslint: ^8.57.0 || ^9.0.0 typescript: "*" - checksum: 10/8121d2ba48545e4db6fc0c79620582b668ff0b2734097d3d61e316fd6abbd8bbeaf76d8701a6405643df946ff3aeae4a9dfaac0cc4fe1fc5b284f6f4806a75fb + checksum: 10/e3371905abc526f740cfa325027c5edd082630236df9327a34273771c59c1fb99e0a12bddba15c4b86847341b979170f4bb911c6ddaa3fffae0a9322102b1e7a languageName: node linkType: hard @@ -4911,7 +4912,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.6.1": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.6.1": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" checksum: 10/c08f1dd7dd18fbb60bdd0d85820656d1374dd898af9be7f82cb00451313402a22d5e30569c150315b4385907cdbca78c22389b2a72ab78883b3173be317620cc @@ -4936,6 +4937,13 @@ __metadata: languageName: node linkType: hard +"@eslint/core@npm:^0.7.0": + version: 0.7.0 + resolution: "@eslint/core@npm:0.7.0" + checksum: 10/69227f33fddd9b402b7b0830732a6e84cae77d202cb5b56f0dbcc462882e07d00e80216b796cf2f243f5b775af3ef27545a0c439d78e66122eab71da4773b81c + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^2.1.4": version: 2.1.4 resolution: "@eslint/eslintrc@npm:2.1.4" @@ -4977,17 +4985,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.10.0": - version: 9.10.0 - resolution: "@eslint/js@npm:9.10.0" - checksum: 10/cbda2bf268c8ac7a2b2493aaaa0113a78165a576ee5178b9fbdaf245c3d40ffaf41d006f75afab5718f68d816f00319e267b4c88ead100b19022fe491f9e0175 - languageName: node - linkType: hard - -"@eslint/js@npm:9.11.0": - version: 9.11.0 - resolution: "@eslint/js@npm:9.11.0" - checksum: 10/4883e95d2668517ad8c7cd16107f86b45fb744b223116fb86e59483c888ba5477d901dcd8d5cebaa56a453093e7fd0fa919e30d01cb4d21c8d53a8d3c7c697af +"@eslint/js@npm:9.14.0, @eslint/js@npm:~9.14.0": + version: 9.14.0 + resolution: "@eslint/js@npm:9.14.0" + checksum: 10/897e26bd68f898e56e96f85c92a1d823ef3d9f34e17d88d0ff40e88882ddae28d2f35915150c21cf640e0c64cb23703d0fbe6f7c9b9d6328aabe58ca30d9b4fe languageName: node linkType: hard @@ -5105,6 +5106,23 @@ __metadata: languageName: node linkType: hard +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 10/270d936be483ab5921702623bc74ce394bf12abbf57d9145a69e8a0d1c87eb1c768bd2d93af16c5705041e257e6d9cc7529311f63a1349f3678abc776fc28523 + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" + dependencies: + "@humanfs/core": "npm:^0.19.1" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10/6d43c6727463772d05610aa05c83dab2bfbe78291022ee7a92cb50999910b8c720c76cc312822e2dea2b497aa1b3fef5fe9f68803fc45c9d4ed105874a65e339 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.13.0": version: 0.13.0 resolution: "@humanwhocodes/config-array@npm:0.13.0" @@ -5137,6 +5155,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/retry@npm:^0.4.0": + version: 0.4.1 + resolution: "@humanwhocodes/retry@npm:0.4.1" + checksum: 10/39fafc7319e88f61befebd5e1b4f0136534ea6a9bd10d74366698187bd63544210ec5d79a87ed4d91297f1cc64c4c53d45fb0077a2abfdce212cf0d3862d5f04 + languageName: node + linkType: hard + "@hutson/parse-repository-url@npm:^3.0.0": version: 3.0.2 resolution: "@hutson/parse-repository-url@npm:3.0.2" @@ -7109,11 +7134,11 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chokidar: "npm:^3.5.2" commit-and-tag-version: "npm:^12.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0" @@ -7187,10 +7212,10 @@ __metadata: "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" "@webcontainer/api": "npm:~1.4.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" commander: "npm:^12.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0" @@ -7253,8 +7278,8 @@ __metadata: "@types/js-yaml": "npm:^4.0.5" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7297,8 +7322,8 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/tar": "npm:~6.1.1" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7344,8 +7369,8 @@ __metadata: "@types/js-yaml": "npm:^4.0.5" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7392,8 +7417,8 @@ __metadata: "@types/js-yaml": "npm:^4.0.5" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7456,9 +7481,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7552,9 +7577,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7638,9 +7663,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7709,10 +7734,10 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" commander: "npm:^12.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7767,11 +7792,11 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" azure-devops-node-api: "npm:^13.0.0" commander: "npm:^12.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7815,8 +7840,8 @@ __metadata: "@stylistic/eslint-plugin": "npm:~2.7.0" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7902,14 +7927,14 @@ __metadata: "@typescript-eslint/parser": "npm:~8.12.2" ag-grid-angular: "npm:~32.3.0" ag-grid-community: "npm:~32.3.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" archiver: "npm:^7.0.0" bootstrap: "npm:5.3.3" chokidar: "npm:^3.5.2" chrome-webstore-upload: "npm:^3.0.0" concurrently: "npm:^8.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -7989,10 +8014,10 @@ __metadata: "@yarnpkg/fslib": "npm:^3.1.0" "@yarnpkg/plugin-npm": "npm:^3.0.1" "@yarnpkg/plugin-pack": "npm:^4.0.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chokidar: "npm:^3.5.2" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8144,9 +8169,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8247,10 +8272,10 @@ __metadata: "@types/pid-from-port": "npm:^1.1.0" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chokidar: "npm:^3.5.2" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8349,9 +8374,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/shell-quote": "npm:^1.7.5" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8426,10 +8451,10 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chokidar: "npm:^3.5.2" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8521,12 +8546,12 @@ __metadata: "@types/request-promise-native": "npm:^1.0.18" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" azure-devops-node-api: "npm:^13.0.0" chalk: "npm:^4.1.2" commander: "npm:^12.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8617,9 +8642,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8692,9 +8717,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -8721,35 +8746,41 @@ __metadata: typescript-eslint: "npm:~8.12.2" peerDependencies: "@angular-devkit/schematics": ~18.2.0 - "@angular-eslint/builder": ~18.3.0 + "@angular-eslint/builder": ~18.4.0 + "@angular-eslint/eslint-plugin": ~18.4.0 + "@angular-eslint/eslint-plugin-template": ~18.4.0 + "@angular-eslint/template-parser": ~18.4.0 "@angular/compiler": ~18.2.0 "@o3r/eslint-plugin": "workspace:^" "@o3r/schematics": "workspace:^" "@schematics/angular": ~18.2.0 "@stylistic/eslint-plugin-ts": ^2.7.0 - angular-eslint: ~18.3.0 - eslint: ^8.57.0 || ^9.0.0 + "@typescript-eslint/eslint-plugin": ^7.14.1 + "@typescript-eslint/parser": ^7.14.1 + "@typescript-eslint/utils": ^7.14.1 + eslint: ^8.57.0 eslint-import-resolver-node: ^0.3.4 eslint-plugin-jasmine: ^4.1.3 eslint-plugin-jest: ^28.0.0 - eslint-plugin-jsdoc: ^48.11.0 || ^49.0.0 || ^50.0.0 + eslint-plugin-jsdoc: ^48.11.0 eslint-plugin-prefer-arrow: ^1.2.2 - eslint-plugin-unicorn: ^54.0.0 || ^55.0.0 + eslint-plugin-unicorn: ^54.0.0 typescript: ~5.5.4 - typescript-eslint: ^8.0.0 peerDependenciesMeta: "@angular-devkit/schematics": optional: true "@angular-eslint/builder": optional: true + "@angular-eslint/eslint-plugin-template": + optional: true + "@angular-eslint/template-parser": + optional: true "@angular/compiler": optional: true "@o3r/schematics": optional: true "@schematics/angular": optional: true - angular-eslint: - optional: true eslint-plugin-jasmine: optional: true eslint-plugin-jest: @@ -8767,7 +8798,7 @@ __metadata: "@angular-devkit/schematics": "npm:~18.2.0" "@angular/compiler": "npm:~18.2.0" "@eslint-community/eslint-plugin-eslint-comments": "npm:^4.4.0" - "@eslint/js": "npm:9.10.0" + "@eslint/js": "npm:~9.14.0" "@nx/eslint-plugin": "npm:~19.5.0" "@o3r/build-helpers": "workspace:^" "@o3r/eslint-plugin": "workspace:^" @@ -8779,14 +8810,13 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" - eslint-plugin-jasmine: "npm:^4.1.3" eslint-plugin-jest: "npm:~28.8.0" eslint-plugin-jsdoc: "npm:~50.2.0" eslint-plugin-prefer-arrow: "npm:~1.2.3" @@ -8809,20 +8839,23 @@ __metadata: peerDependencies: "@angular-devkit/core": ~18.2.0 "@angular-devkit/schematics": ~18.2.0 + "@angular-eslint/builder": ~18.4.0 "@angular/compiler": ~18.2.0 "@eslint-community/eslint-plugin-eslint-comments": ^4.4.0 - "@eslint/js": 9.10.0 + "@eslint/js": ~9.14.0 "@o3r/eslint-plugin": "workspace:^" "@o3r/schematics": "workspace:^" "@schematics/angular": ~18.2.0 "@stylistic/eslint-plugin": ^2.7.0 - angular-eslint: ^18.3.0 - eslint: ^8.57.0 || ^9.0.0 + "@typescript-eslint/parser": ^8.0.0 + "@typescript-eslint/types": ^8.0.0 + "@typescript-eslint/utils": ^8.0.0 + angular-eslint: ^18.4.0 + eslint: ^8.57.0 || ~9.14.0 eslint-import-resolver-node: ^0.3.4 eslint-import-resolver-typescript: ^3.6.3 eslint-plugin-import: ^2.31.0 eslint-plugin-import-newlines: ^1.4.0 - eslint-plugin-jasmine: ^4.1.3 eslint-plugin-jest: ^28.0.0 eslint-plugin-jsdoc: ^48.11.0 || ^49.0.0 || ^50.0.0 eslint-plugin-prefer-arrow: ^1.2.2 @@ -8830,7 +8863,9 @@ __metadata: eslint-plugin-unicorn: ^54.0.0 || ^55.0.0 eslint-plugin-unused-imports: ^4.1.4 globals: ^15.9.0 + globby: ^11.1.0 jest: ~29.7.0 + jsonc-eslint-parser: ~2.4.0 ts-node: ~10.9.2 typescript: ~5.5.4 typescript-eslint: ^8.0.0 @@ -8845,10 +8880,10 @@ __metadata: optional: true "@schematics/angular": optional: true - eslint-plugin-jasmine: - optional: true eslint-plugin-jest: optional: true + jest: + optional: true typescript: optional: true languageName: unknown @@ -8860,7 +8895,7 @@ __metadata: dependencies: "@angular-devkit/core": "npm:~18.2.0" "@angular-devkit/schematics": "npm:~18.2.0" - "@angular-eslint/test-utils": "npm:~18.3.0" + "@angular-eslint/test-utils": "npm:~18.4.0" "@angular/compiler": "npm:~18.2.0" "@babel/core": "npm:~7.26.0" "@babel/preset-typescript": "npm:~7.26.0" @@ -8880,9 +8915,9 @@ __metadata: "@typescript-eslint/parser": "npm:~8.12.2" "@typescript-eslint/rule-tester": "npm:~8.12.2" "@typescript-eslint/utils": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0" @@ -8908,10 +8943,10 @@ __metadata: yaml-eslint-parser: "npm:^1.2.2" peerDependencies: "@angular-devkit/schematics": ~18.2.0 - "@angular-eslint/template-parser": ~18.3.0 - "@angular-eslint/test-utils": ~18.3.0 + "@angular-eslint/template-parser": ~18.4.0 + "@angular-eslint/test-utils": ~18.4.0 "@angular/compiler": ~18.2.0 - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ~9.14.0 jsonc-eslint-parser: ~2.4.0 yaml-eslint-parser: ^1.2.2 peerDependenciesMeta: @@ -8969,9 +9004,9 @@ __metadata: "@yarnpkg/fslib": "npm:^3.1.0" "@yarnpkg/plugin-npm": "npm:^3.0.1" "@yarnpkg/plugin-pack": "npm:^4.0.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9085,9 +9120,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9204,7 +9239,7 @@ __metadata: "@yarnpkg/sdks": "npm:^3.2.0" ag-grid-angular: "npm:~32.3.0" ag-grid-community: "npm:~32.3.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" babel-loader: "npm:^9.0.0" bootstrap: "npm:5.3.3" bootstrap-icons: "npm:^1.11.3" @@ -9213,7 +9248,7 @@ __metadata: concurrently: "npm:^8.0.0" cpy-cli: "npm:^5.0.0" editorconfig-checker: "npm:^5.1.8" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9304,10 +9339,10 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" ejs: "npm:^3.1.9" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9384,10 +9419,10 @@ __metadata: "@yarnpkg/fslib": "npm:^3.1.0" "@yarnpkg/plugin-npm": "npm:^3.0.1" "@yarnpkg/plugin-pack": "npm:^4.0.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chokidar: "npm:^3.5.2" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9521,9 +9556,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9624,10 +9659,10 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/node-fetch": "npm:^2.6.2" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" commander: "npm:^12.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9704,9 +9739,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9765,9 +9800,9 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:^7.14.1" "@typescript-eslint/parser": "npm:~8.12.2" "@typescript-eslint/utils": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9849,9 +9884,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -9948,9 +9983,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10062,10 +10097,10 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chalk: "npm:^4.1.2" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10101,7 +10136,7 @@ __metadata: "@angular/cli": ~18.2.0 "@o3r/telemetry": "workspace:^" "@schematics/angular": ~18.2.0 - eslint: ^9.0.0 + eslint: ~9.14.0 rxjs: ^7.8.1 type-fest: ^4.10.2 typescript: ~5.5.4 @@ -10194,10 +10229,10 @@ __metadata: "@xterm/xterm": "npm:^5.0.0" ag-grid-angular: "npm:~32.3.0" ag-grid-community: "npm:~32.3.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" bootstrap: "npm:5.3.3" concurrently: "npm:^8.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10270,9 +10305,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10367,11 +10402,11 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/react": "npm:^18.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" color: "npm:^4.2.3" concurrently: "npm:^8.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10448,9 +10483,9 @@ __metadata: "@types/jest": "npm:~29.5.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10539,10 +10574,10 @@ __metadata: "@yarnpkg/fslib": "npm:^3.1.0" "@yarnpkg/plugin-npm": "npm:^3.0.1" "@yarnpkg/plugin-pack": "npm:^4.0.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" chokidar: "npm:^3.5.2" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10664,9 +10699,9 @@ __metadata: "@types/minimist": "npm:^1.2.2" "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10725,9 +10760,9 @@ __metadata: "@types/pid-from-port": "npm:^1.1.0" "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10808,11 +10843,11 @@ __metadata: "@types/pixelmatch": "npm:^5.2.3" "@types/pngjs": "npm:^6.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" concurrently: "npm:^8.0.0" cpy-cli: "npm:^5.0.0" esbuild: "npm:~0.24.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -10940,9 +10975,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -11067,10 +11102,10 @@ __metadata: "@types/semver": "npm:^7.3.13" "@types/uuid": "npm:^9.0.0" "@typescript-eslint/parser": "npm:~8.12.2" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" commander: "npm:^12.0.0" cpy-cli: "npm:^5.0.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -16161,20 +16196,20 @@ __metadata: languageName: node linkType: hard -"angular-eslint@npm:~18.3.0": - version: 18.3.0 - resolution: "angular-eslint@npm:18.3.0" +"angular-eslint@npm:~18.4.0": + version: 18.4.0 + resolution: "angular-eslint@npm:18.4.0" dependencies: - "@angular-eslint/builder": "npm:18.3.0" - "@angular-eslint/eslint-plugin": "npm:18.3.0" - "@angular-eslint/eslint-plugin-template": "npm:18.3.0" - "@angular-eslint/schematics": "npm:18.3.0" - "@angular-eslint/template-parser": "npm:18.3.0" + "@angular-eslint/builder": "npm:18.4.0" + "@angular-eslint/eslint-plugin": "npm:18.4.0" + "@angular-eslint/eslint-plugin-template": "npm:18.4.0" + "@angular-eslint/schematics": "npm:18.4.0" + "@angular-eslint/template-parser": "npm:18.4.0" peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: "*" typescript-eslint: ^8.0.0 - checksum: 10/e8c14311e1e2c933b74aa3e02e8ecbc7493f8b3b103fd6ee7f07ca51200476075814f6dbd8e371bddaaf29cd0960bf52f97db956c503b31a4fa240e71634e462 + checksum: 10/ac4bb1b6920fc936551d27b82cba826f984a78ac351d4b138113faa207c0228089602894fec799ff792e21fa015365fc92f69cf3347d32501a42457c8bba2890 languageName: node linkType: hard @@ -16400,12 +16435,10 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.3.0": - version: 5.3.0 - resolution: "aria-query@npm:5.3.0" - dependencies: - dequal: "npm:^2.0.3" - checksum: 10/c3e1ed127cc6886fea4732e97dd6d3c3938e64180803acfb9df8955517c4943760746ffaf4020ce8f7ffaa7556a3b5f85c3769a1f5ca74a1288e02d042f9ae4e +"aria-query@npm:5.3.2": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: 10/b2fe9bc98bd401bc322ccb99717c1ae2aaf53ea0d468d6e7aebdc02fac736e4a99b46971ee05b783b08ade23c675b2d8b60e4a1222a95f6e27bc4d2a0bfdcc03 languageName: node linkType: hard @@ -16651,9 +16684,9 @@ __metadata: "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" "@vercel/ncc": "npm:~0.38.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" audit-types: "npm:~0.6.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0" @@ -17576,8 +17609,8 @@ __metadata: "@types/node": "npm:^20.0.0" "@typescript-eslint/parser": "npm:~8.12.2" "@vercel/ncc": "npm:~0.38.0" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0" @@ -19807,7 +19840,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0, dequal@npm:^2.0.2, dequal@npm:^2.0.3": +"dequal@npm:^2.0.0, dequal@npm:^2.0.2": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 10/6ff05a7561f33603df87c45e389c9ac0a95e3c056be3da1a0c4702149e3a7f6fe5ffbb294478687ba51a9e95f3a60e8b6b9005993acd79c292c7d15f71964b6b @@ -21303,7 +21336,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.0.2": +"eslint-scope@npm:^8.0.2, eslint-scope@npm:^8.2.0": version: 8.2.0 resolution: "eslint-scope@npm:8.2.0" dependencies: @@ -21375,27 +21408,30 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9.0.0": - version: 9.11.0 - resolution: "eslint@npm:9.11.0" +"eslint@npm:~9.14.0": + version: 9.14.0 + resolution: "eslint@npm:9.14.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" - "@eslint-community/regexpp": "npm:^4.11.0" + "@eslint-community/regexpp": "npm:^4.12.1" "@eslint/config-array": "npm:^0.18.0" + "@eslint/core": "npm:^0.7.0" "@eslint/eslintrc": "npm:^3.1.0" - "@eslint/js": "npm:9.11.0" + "@eslint/js": "npm:9.14.0" "@eslint/plugin-kit": "npm:^0.2.0" + "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.3.0" - "@nodelib/fs.walk": "npm:^1.2.8" + "@humanwhocodes/retry": "npm:^0.4.0" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" chalk: "npm:^4.0.0" cross-spawn: "npm:^7.0.2" debug: "npm:^4.3.2" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.0.2" - eslint-visitor-keys: "npm:^4.0.0" - espree: "npm:^10.1.0" + eslint-scope: "npm:^8.2.0" + eslint-visitor-keys: "npm:^4.2.0" + espree: "npm:^10.3.0" esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" @@ -21405,13 +21441,11 @@ __metadata: ignore: "npm:^5.2.0" imurmurhash: "npm:^0.1.4" is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" json-stable-stringify-without-jsonify: "npm:^1.0.1" lodash.merge: "npm:^4.6.2" minimatch: "npm:^3.1.2" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" text-table: "npm:^0.2.0" peerDependencies: jiti: "*" @@ -21420,11 +21454,11 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10/f849d82ea0fcaac414f51bd62474a1dc9b4af4c698fcb1523fc90477c3fa3b31e928e4c8fe9e553489c47729930d167534e359a6067c0243b3bb68dc7d43e2bd + checksum: 10/6ce59dda56ecff9483c6e8cd28e91138d2c43cbf08c923f731f507fd9b4aba9d72761c99882dc313a72ea915a5e380ab0b4f01e208a7a37d71490ddfd29ee063 languageName: node linkType: hard -"espree@npm:^10.0.1, espree@npm:^10.1.0": +"espree@npm:^10.0.1, espree@npm:^10.1.0, espree@npm:^10.3.0": version: 10.3.0 resolution: "espree@npm:10.3.0" dependencies: @@ -22657,8 +22691,8 @@ __metadata: "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" "@vercel/ncc": "npm:~0.38.0" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0" @@ -27826,8 +27860,8 @@ __metadata: "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" "@vercel/ncc": "npm:~0.38.0" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0" @@ -28862,10 +28896,10 @@ __metadata: "@types/vscode": "npm:^1.67.0" "@typescript-eslint/parser": "npm:~8.12.2" "@vscode/vsce": "npm:^2.16.0" - angular-eslint: "npm:~18.3.0" + angular-eslint: "npm:~18.4.0" cpy-cli: "npm:^5.0.0" esbuild: "npm:~0.24.0" - eslint: "npm:^9.0.0" + eslint: "npm:~9.14.0" eslint-import-resolver-node: "npm:^0.3.9" eslint-import-resolver-typescript: "npm:^3.6.3" eslint-plugin-import: "npm:^2.31.0" @@ -31301,8 +31335,8 @@ __metadata: "@types/semver": "npm:^7.3.13" "@typescript-eslint/parser": "npm:~8.12.2" "@vercel/ncc": "npm:~0.38.0" - angular-eslint: "npm:~18.3.0" - eslint: "npm:^9.0.0" + angular-eslint: "npm:~18.4.0" + eslint: "npm:~9.14.0" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-import-newlines: "npm:^1.4.0" eslint-plugin-jest: "npm:~28.8.0"