From 7f34462b620ca1b81a1e31457febb5fd38ff3c0a Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 15 Sep 2025 15:11:50 +0530 Subject: [PATCH 01/53] feat: update packages to eslint v9 Signed-off-by: gokulprasanth-ni --- package-lock.json | 3490 ++++++++++------- package.json | 2 +- packages/eslint-config-angular/.eslintrc.js | 3 - .../eslint-config-angular/eslint.config.js | 13 + packages/eslint-config-angular/index.js | 277 +- packages/eslint-config-angular/package.json | 83 +- .../requiring-type-checking.js | 39 +- packages/eslint-config-angular/template.js | 219 +- .../eslint-config-angular/template/options.js | 8 +- .../tools/print-available-rules.js | 42 +- .../eslint-config-javascript/.eslintrc.js | 3 - .../eslint-config-javascript/eslint.config.js | 13 + packages/eslint-config-javascript/index.js | 50 +- .../eslint-config-javascript/package.json | 7 +- .../rules/best-practices.js | 2 +- .../eslint-config-javascript/rules/errors.js | 2 +- .../eslint-config-javascript/rules/es6.js | 14 +- .../eslint-config-javascript/rules/imports.js | 14 +- .../eslint-config-javascript/rules/node.js | 6 +- .../eslint-config-javascript/rules/strict.js | 2 +- .../eslint-config-javascript/rules/style.js | 2 +- .../rules/variables.js | 2 +- .../eslint-config-playwright/.eslintrc.js | 3 - .../eslint-config-playwright/eslint.config.js | 12 + packages/eslint-config-playwright/index.js | 145 +- .../eslint-config-playwright/package.json | 75 +- .../requiring-type-checking.js | 9 +- .../tools/print-available-rules.js | 11 +- .../eslint-config-typescript/.eslintrc.js | 3 - .../eslint-config-typescript/eslint.config.js | 14 + packages/eslint-config-typescript/index.js | 449 +-- .../lib/extensions-requiring-type-checking.js | 2 +- .../lib/extensions.js | 2 +- .../eslint-config-typescript/package.json | 78 +- .../requiring-type-checking.js | 361 +- tests/angular/.eslintrc.js | 21 - .../custom-ignore-attributes/.eslintrc.js | 21 - tests/angular/eslint.config.js | 59 + tests/angular/package.json | 1 + tests/javascript/.eslintrc.js | 4 - tests/javascript/eslint.config.js | 11 + tests/javascript/package.json | 1 + .../.eslintrc.js | 25 - .../eslint.config.js | 33 + .../package.json | 1 + tests/playwright/.eslintrc.js | 15 - tests/playwright/eslint.config.js | 18 + tests/playwright/package.json | 1 + tests/print-evaluated-rules/.eslintrc.js | 4 - tests/print-evaluated-rules/eslint.config.js | 12 + tests/print-evaluated-rules/index.js | 123 +- tests/print-evaluated-rules/package.json | 3 +- .../.eslintrc.js | 14 - .../eslint.config.js | 23 + .../package.json | 1 + tests/typescript/.eslintrc.js | 4 - tests/typescript/eslint.config.js | 16 + tests/typescript/package.json | 1 + 58 files changed, 3251 insertions(+), 2618 deletions(-) delete mode 100644 packages/eslint-config-angular/.eslintrc.js create mode 100644 packages/eslint-config-angular/eslint.config.js delete mode 100644 packages/eslint-config-javascript/.eslintrc.js create mode 100644 packages/eslint-config-javascript/eslint.config.js delete mode 100644 packages/eslint-config-playwright/.eslintrc.js create mode 100644 packages/eslint-config-playwright/eslint.config.js delete mode 100644 packages/eslint-config-typescript/.eslintrc.js create mode 100644 packages/eslint-config-typescript/eslint.config.js delete mode 100644 tests/angular/.eslintrc.js delete mode 100644 tests/angular/custom-ignore-attributes/.eslintrc.js create mode 100644 tests/angular/eslint.config.js delete mode 100644 tests/javascript/.eslintrc.js create mode 100644 tests/javascript/eslint.config.js delete mode 100644 tests/playwright-requiring-type-checking/.eslintrc.js create mode 100644 tests/playwright-requiring-type-checking/eslint.config.js delete mode 100644 tests/playwright/.eslintrc.js create mode 100644 tests/playwright/eslint.config.js delete mode 100644 tests/print-evaluated-rules/.eslintrc.js create mode 100644 tests/print-evaluated-rules/eslint.config.js delete mode 100644 tests/typescript-requiring-type-checking/.eslintrc.js create mode 100644 tests/typescript-requiring-type-checking/eslint.config.js delete mode 100644 tests/typescript/.eslintrc.js create mode 100644 tests/typescript/eslint.config.js diff --git a/package-lock.json b/package-lock.json index f85a7bc..94899be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,26 +25,17 @@ "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "~4.8.2" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "peer": true, - "engines": { - "node": ">=0.10.0" + "typescript": "^5.0.0" } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.12.tgz", - "integrity": "sha512-bepVb2/GtJppYKaeW8yTGE6egmoWZ7zagFDsmBdbF+BYp+HmeoPsclARcdryBPVq68zedyTRdvhWSUTbw1AYuw==", + "version": "0.1902.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.16.tgz", + "integrity": "sha512-E5cM4D5nHmCpuQkvyYJjJ/GEfygfU5NoN1YAWRnIMLwTyC9s6ms13L/FuCfr7HqGPY8NjkOWG2517Xda03+jAw==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "19.2.16", "rxjs": "7.8.1" }, "engines": { @@ -53,10 +44,20 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@angular-devkit/core": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.12.tgz", - "integrity": "sha512-NtB6ypsaDyPE6/fqWOdfTmACs+yK5RqfH5tStEzWFeeDsIEDYKsJ06ypuRep7qTjYus5Rmttk0Ds+cFgz8JdUQ==", + "version": "19.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.16.tgz", + "integrity": "sha512-3MHfTTUMT/nSXLdhoilQATCY38XcnoJd7u7K0tLajTT7C+iNknvkzaV4g5qMA+E3yNzefcAkY7MZpgreNJuKEg==", "license": "MIT", "peer": true, "dependencies": { @@ -73,7 +74,7 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^3.5.2" + "chokidar": "^4.0.0" }, "peerDependenciesMeta": { "chokidar": { @@ -94,16 +95,26 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.12", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.12.tgz", - "integrity": "sha512-mMea9txHbnCX5lXLHlo0RAgfhFHDio45/jMsREM2PA8UtVf2S8ltXz7ZwUrUyMQRv8vaSfn4ijDstF4hDMnRgQ==", + "version": "19.2.16", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.16.tgz", + "integrity": "sha512-YO1J8H9zzb/EfKzoZFs+YU7JRYNaZVjp/H/EBSpyI8zvpSjNZzi7+P6K+/uNQyH1RQyZ9NFn8+eHygsG47qA8w==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "18.2.12", + "@angular-devkit/core": "19.2.16", "jsonc-parser": "3.3.1", - "magic-string": "0.30.11", + "magic-string": "0.30.17", "ora": "5.4.1", "rxjs": "7.8.1" }, @@ -113,15 +124,25 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@angular-eslint/builder": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-18.4.3.tgz", - "integrity": "sha512-NzmrXlr7GFE+cjwipY/CxBscZXNqnuK0us1mO6Z2T6MeH6m+rRcdlY/rZyKoRniyNNvuzl6vpEsfMIMmnfebrA==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.8.1.tgz", + "integrity": "sha512-NOMkw0xgDoDVCLkL5nkkvdd3ouDYkOGqtEmabTR7N4/kQnk1R4coOTWGCqAgMXCFdxlyjuxquDwuJ+yni81pRg==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/architect": ">= 0.1800.0 < 0.1900.0", - "@angular-devkit/core": ">= 18.0.0 < 19.0.0" + "@angular-devkit/architect": ">= 0.1900.0 < 0.2000.0", + "@angular-devkit/core": ">= 19.0.0 < 20.0.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", @@ -152,32 +173,40 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.4.3.tgz", - "integrity": "sha512-ijGlX2N01ayMXTpeQivOA31AszO8OEbu9ZQUCxnu9AyMMhxyi2q50bujRChAvN9YXQfdQtbxuajxV6+aiWb5BQ==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.8.1.tgz", + "integrity": "sha512-0ZVQldndLrDfB0tzFe/uIwvkUcakw8qGxvkEU0l7kSbv/ngNQ/qrkRi7P64otB15inIDUNZI2jtmVat52dqSfQ==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3", - "@angular-eslint/utils": "18.4.3", + "@angular-eslint/bundled-angular-compiler": "19.8.1", + "@angular-eslint/utils": "19.8.1", "aria-query": "5.3.2", "axobject-query": "4.1.0" }, "peerDependencies": { + "@angular-eslint/template-parser": "19.8.1", "@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": "*" } }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", + "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", + "license": "MIT", + "peer": true + }, "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/utils": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", - "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz", + "integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3" + "@angular-eslint/bundled-angular-compiler": "19.8.1" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -185,14 +214,38 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/@angular-eslint/utils": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", - "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", + "node_modules/@angular-eslint/schematics": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.8.1.tgz", + "integrity": "sha512-MKzfO3puOCuQFgP8XDUkEr5eaqcCQLAdYLLMcywEO/iRs1eRHL46+rkW+SjDp1cUqlxKtu+rLiTYr0T/O4fi9Q==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3" + "@angular-devkit/core": ">= 19.0.0 < 20.0.0", + "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", + "@angular-eslint/eslint-plugin": "19.8.1", + "@angular-eslint/eslint-plugin-template": "19.8.1", + "ignore": "7.0.5", + "semver": "7.7.2", + "strip-json-comments": "3.1.1" + } + }, + "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", + "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", + "license": "MIT", + "peer": true + }, + "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/eslint-plugin": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.8.1.tgz", + "integrity": "sha512-wZEBMPwD2TRhifG751hcj137EMIEaFmsxRB2EI+vfINCgPnFGSGGOHXqi8aInn9fXqHs7VbXkAzXYdBsvy1m4Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "19.8.1", + "@angular-eslint/utils": "19.8.1" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -200,26 +253,25 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/schematics": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-18.4.3.tgz", - "integrity": "sha512-D5maKn5e6n58+8n7jLFLD4g+RGPOPeDSsvPc1sqial5tEKLxAJQJS9WZ28oef3bhkob6C60D+1H0mMmEEVvyVA==", + "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/utils": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz", + "integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": ">= 18.0.0 < 19.0.0", - "@angular-devkit/schematics": ">= 18.0.0 < 19.0.0", - "@angular-eslint/eslint-plugin": "18.4.3", - "@angular-eslint/eslint-plugin-template": "18.4.3", - "ignore": "6.0.2", - "semver": "7.6.3", - "strip-json-comments": "3.1.1" + "@angular-eslint/bundled-angular-compiler": "19.8.1" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" } }, "node_modules/@angular-eslint/schematics/node_modules/ignore": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", - "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "license": "MIT", "peer": true, "engines": { @@ -227,13 +279,13 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.4.3.tgz", - "integrity": "sha512-JZMPtEB8yNip3kg4WDEWQyObSo2Hwf+opq2ElYuwe85GQkGhfJSJ2CQYo4FSwd+c5MUQAqESNRg9QqGYauDsiw==", + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.8.1.tgz", + "integrity": "sha512-pQiOg+se1AU/ncMlnJ9V6xYnMQ84qI1BGWuJpbU6A99VTXJg90scg0+T7DWmKssR1YjP5qmmBtrZfKsHEcLW/A==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3", + "@angular-eslint/bundled-angular-compiler": "19.8.1", "eslint-scope": "^8.0.2" }, "peerDependencies": { @@ -241,27 +293,32 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", - "license": "BSD-2-Clause", + "node_modules/@angular-eslint/template-parser/node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", + "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", + "license": "MIT", + "peer": true + }, + "node_modules/@angular-eslint/utils": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", + "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", + "license": "MIT", "peer": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "@angular-eslint/bundled-angular-compiler": "18.4.3" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" } }, "node_modules/@angular/core": { - "version": "18.2.13", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.13.tgz", - "integrity": "sha512-8mbWHMgO95OuFV1Ejy4oKmbe9NOJ3WazQf/f7wks8Bck7pcihd0IKhlPBNjFllbF5o+04EYSwFhEtvEgjMDClA==", + "version": "18.2.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.14.tgz", + "integrity": "sha512-BIPrCs93ZZTY9ym7yfoTgAQ5rs706yoYeAdrgc8kh/bDbM9DawxKlgeKBx2FLt09Y0YQ1bFhKVp0cV4gDEaMxQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -275,37 +332,26 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -329,25 +375,78 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "license": "MIT", "peer": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "license": "MIT", "peer": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -355,7 +454,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -365,6 +464,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -381,35 +481,75 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT", "peer": true }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.35.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz", + "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "license": "MIT", "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", + "license": "Apache-2.0", "peer": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@eslint/core": "^0.15.2", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", "peer": true, "engines": { "node": ">=12.22" @@ -419,16 +559,24 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "peer": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "license": "Apache-2.0", + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT", "peer": true }, @@ -480,6 +628,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -492,6 +641,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", "engines": { "node": ">= 8" } @@ -500,6 +650,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -509,74 +660,112 @@ } }, "node_modules/@playwright/test": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.42.1.tgz", - "integrity": "sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz", + "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright": "1.42.1" + "playwright": "1.55.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "license": "MIT", + "peer": true + }, "node_modules/@stylistic/eslint-plugin": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-3.1.0.tgz", - "integrity": "sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.3.1.tgz", + "integrity": "sha512-Ykums1VYonM0TgkD0VteVq9mrlO2FhF48MDJnPyv3MktIB2ydtuhlO0AfWm7xnW1kyf5bjOqA6xc7JjviuVTxg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/utils": "^8.13.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/types": "^8.41.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "estraverse": "^5.3.0", - "picomatch": "^4.0.2" + "picomatch": "^4.0.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": ">=8.40.0" + "eslint": ">=9.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", - "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "license": "MIT", "peer": true, - "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0" - }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/jasmine": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.9.tgz", + "integrity": "sha512-8t4HtkW4wxiPVedMpeZ63n3vlWxEIquo/zc1Tm8ElU+SqVV7+D3Na2PWaJUp179AzTragMWVwkMv7mvty0NfyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/parse-path": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/parse-path/-/parse-path-7.0.3.tgz", + "integrity": "sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", - "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz", + "integrity": "sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/project-service": "8.43.0", - "@typescript-eslint/tsconfig-utils": "8.43.0", - "@typescript-eslint/types": "8.43.0", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.43.0", + "@typescript-eslint/type-utils": "8.43.0", + "@typescript-eslint/utils": "8.43.0", "@typescript-eslint/visitor-keys": "8.43.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "engines": { @@ -587,20 +776,33 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { + "@typescript-eslint/parser": "^8.43.0", + "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": { + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", - "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.43.0.tgz", + "integrity": "sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==", "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/scope-manager": "8.43.0", "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0" + "@typescript-eslint/typescript-estree": "8.43.0", + "@typescript-eslint/visitor-keys": "8.43.0", + "debug": "^4.3.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -614,198 +816,7 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", - "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/types": "8.43.0", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/espree": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", - "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "acorn": "^8.15.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "peer": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@stylistic/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", - "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/@types/jasmine": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", - "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "peer": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/project-service": { + "node_modules/@typescript-eslint/project-service": { "version": "8.43.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==", @@ -828,31 +839,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", + "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/visitor-keys": "8.43.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -877,31 +874,28 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz", + "integrity": "sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/typescript-estree": "8.43.0", + "@typescript-eslint/utils": "8.43.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { @@ -919,52 +913,38 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "license": "BSD-2-Clause", + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", + "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/project-service": "8.43.0", + "@typescript-eslint/tsconfig-utils": "8.43.0", + "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/visitor-keys": "8.43.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "license": "MIT", "peer": true, "dependencies": { @@ -988,85 +968,53 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", + "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.43.0", + "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/typescript-estree": "8.43.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", + "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "@typescript-eslint/types": "8.43.0", + "eslint-visitor-keys": "^4.2.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "peer": true, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "peer": true - }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/acorn": { "version": "8.15.0", @@ -1085,6 +1033,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "license": "MIT", "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -1125,30 +1074,96 @@ } } }, + "node_modules/angular-eslint": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-19.8.1.tgz", + "integrity": "sha512-A6mPcVAXEDdJk7bKKBwd+1b/VA/xwpWWN2fExTGO1dkVNPz550LlgxBjEio9G7u4i+pD2aLrl6Cx6O+9o1iusQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@angular-devkit/core": ">= 19.0.0 < 20.0.0", + "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", + "@angular-eslint/builder": "19.8.1", + "@angular-eslint/eslint-plugin": "19.8.1", + "@angular-eslint/eslint-plugin-template": "19.8.1", + "@angular-eslint/schematics": "19.8.1", + "@angular-eslint/template-parser": "19.8.1", + "@typescript-eslint/types": "^8.0.0", + "@typescript-eslint/utils": "^8.0.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*", + "typescript-eslint": "^8.0.0" + } + }, + "node_modules/angular-eslint/node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", + "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", + "license": "MIT", + "peer": true + }, + "node_modules/angular-eslint/node_modules/@angular-eslint/eslint-plugin": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.8.1.tgz", + "integrity": "sha512-wZEBMPwD2TRhifG751hcj137EMIEaFmsxRB2EI+vfINCgPnFGSGGOHXqi8aInn9fXqHs7VbXkAzXYdBsvy1m4Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "19.8.1", + "@angular-eslint/utils": "19.8.1" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } + }, + "node_modules/angular-eslint/node_modules/@angular-eslint/utils": { + "version": "19.8.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz", + "integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "19.8.1" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.2", @@ -1161,13 +1176,14 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -1177,16 +1193,20 @@ } }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -1199,40 +1219,26 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz", - "integrity": "sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -1242,15 +1248,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1260,15 +1267,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1278,19 +1286,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -1299,10 +1307,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", "peer": true, "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -1327,7 +1346,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -1351,22 +1371,23 @@ "peer": true }, "node_modules/beachball": { - "version": "2.41.0", - "resolved": "https://registry.npmjs.org/beachball/-/beachball-2.41.0.tgz", - "integrity": "sha512-hp6BBAiA2UYmm9E+JWwopMK+2njAeV3r6uJR91ICi7jYnjD+DFKxJjrcaW0pb4SOikMdQITw/GfjsMUs07oJqg==", + "version": "2.55.1", + "resolved": "https://registry.npmjs.org/beachball/-/beachball-2.55.1.tgz", + "integrity": "sha512-JtZnFkr0CX68/qPsRJX6viIbkjEGbIbWjaY8TnDgk3VYuh8mpl7wEOM9Kw6Hz5Bk/tI4CbGTWvSN/n6VHM3r9A==", "dev": true, + "license": "MIT", "dependencies": { - "cosmiconfig": "^8.3.6", + "cosmiconfig": "^9.0.0", "execa": "^5.0.0", "fs-extra": "^11.1.1", "lodash": "^4.17.15", "minimatch": "^3.0.4", + "p-graph": "^1.1.2", "p-limit": "^3.0.2", "prompts": "^2.4.2", "semver": "^7.0.0", "toposort": "^2.0.2", - "uuid": "^9.0.0", - "workspace-tools": "^0.36.3", + "workspace-tools": "^0.38.2", "yargs-parser": "^21.0.0" }, "bin": { @@ -1376,47 +1397,6 @@ "node": ">=14.0.0" } }, - "node_modules/beachball/node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/beachball/node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -1430,20 +1410,22 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -1475,16 +1457,47 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", "peer": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -1497,22 +1510,26 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/cli-cursor": { @@ -1545,6 +1562,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1565,29 +1583,61 @@ } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1597,13 +1647,68 @@ "node": ">= 8" } }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", "peer": true, "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1618,6 +1723,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "license": "MIT", "peer": true }, "node_modules/defaults": { @@ -1637,6 +1743,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", "peer": true, "dependencies": { "es-define-property": "^1.0.0", @@ -1654,6 +1761,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", "peer": true, "dependencies": { "define-data-property": "^1.0.1", @@ -1671,6 +1779,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -1679,78 +1789,120 @@ } }, "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "license": "Apache-2.0", "peer": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "license": "MIT", "peer": true, "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.1", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.5", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -1759,20 +1911,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "peer": true - }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "peer": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -1781,43 +1925,64 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "peer": true, + "dependencies": { + "es-errors": "^1.3.0" + }, "engines": { "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "peer": true, "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "license": "MIT", "peer": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", "peer": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -1827,81 +1992,93 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.35.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz", + "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", + "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.35.0", + "@eslint/plugin-kit": "^0.3.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "license": "MIT", "peer": true, "dependencies": { "debug": "^3.2.7", @@ -1913,15 +2090,17 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "license": "MIT", "peer": true, "dependencies": { "debug": "^3.2.7" @@ -1939,80 +2118,78 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "license": "MIT", "peer": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "peer": true, "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "peer": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "peer": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-playwright": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.12.0.tgz", - "integrity": "sha512-KXuzQjVzca5irMT/7rvzJKsVDGbQr43oQPc8i+SLEBqmfrTxlwMwRqfv9vtZqh4hpU0jmrnA/EOfwtls+5QC1w==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-0.18.0.tgz", + "integrity": "sha512-VLvKOAaDvRTonUeI3J8plXIJQuReXjbjrgDGoNwsiydwdqk3lt+mbzgsBcxJscMJDHc9XgnLVo0nWTiaYHLGYQ==", + "license": "MIT", "peer": true, + "dependencies": { + "globals": "^13.23.0" + }, "peerDependencies": { "eslint": ">=7", - "eslint-plugin-jest": ">=24" + "eslint-plugin-jest": ">=25" }, "peerDependenciesMeta": { "eslint-plugin-jest": { @@ -2020,29 +2197,47 @@ } } }, + "node_modules/eslint-plugin-playwright/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "license": "Apache-2.0", "peer": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2052,6 +2247,7 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2064,71 +2260,11 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "peer": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", "peer": true, "dependencies": { "is-glob": "^4.0.3" @@ -2137,54 +2273,36 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT", "peer": true }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "license": "BSD-3-Clause", "peer": true, "dependencies": { "estraverse": "^5.1.0" @@ -2197,6 +2315,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "estraverse": "^5.2.0" @@ -2209,6 +2328,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=4.0" @@ -2218,6 +2338,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "license": "BSD-2-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -2228,6 +2349,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -2250,18 +2372,20 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT", "peer": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -2271,18 +2395,20 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT", "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "license": "MIT", "peer": true }, "node_modules/fast-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.5.tgz", - "integrity": "sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -2297,29 +2423,32 @@ "peer": true }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "license": "MIT", "peer": true, "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2331,6 +2460,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "license": "MIT", "peer": true, "dependencies": { "locate-path": "^6.0.0", @@ -2344,39 +2474,48 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "license": "MIT", "peer": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "license": "ISC", "peer": true }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", "peer": true, "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -2386,18 +2525,13 @@ "node": ">=14.14" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "peer": true - }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2410,21 +2544,25 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -2437,6 +2575,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2446,21 +2585,28 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "peer": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -2469,11 +2615,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2482,14 +2643,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2499,28 +2661,31 @@ } }, "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-8.1.1.tgz", + "integrity": "sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==", "dev": true, + "license": "MIT", "dependencies": { "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "parse-url": "^9.2.0" } }, "node_modules/git-url-parse": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.1.tgz", - "integrity": "sha512-PCFJyeSSdtnbfhSNRw9Wk96dDCNx+sogTe4YNXeXSJxt7xz5hvXekuRn9JX7m+Mf4OscCu8h+mtAl3+h5Fo8lQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-16.1.0.tgz", + "integrity": "sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==", "dev": true, + "license": "MIT", "dependencies": { - "git-up": "^7.0.0" + "git-up": "^8.1.0" } }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -2529,27 +2694,27 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "license": "MIT", "peer": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", "peer": true, "dependencies": { - "define-properties": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -2562,6 +2727,8 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -2578,12 +2745,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "peer": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2593,36 +2761,44 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "license": "MIT", "peer": true }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "peer": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", "peer": true, "dependencies": { "es-define-property": "^1.0.0" @@ -2632,10 +2808,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", "peer": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -2644,9 +2824,10 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -2659,6 +2840,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "peer": true, "dependencies": { "has-symbols": "^1.0.3" @@ -2671,9 +2853,10 @@ } }, "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "peer": true, "dependencies": { "function-bind": "^1.1.2" @@ -2687,6 +2870,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -2713,17 +2897,19 @@ "peer": true }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2739,49 +2925,44 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "peer": true, "engines": { "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "peer": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC", "peer": true }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", "peer": true, "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2794,28 +2975,54 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", "peer": true, "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2828,6 +3035,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -2837,24 +3045,48 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "peer": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", "peer": true, "dependencies": { - "hasown": "^2.0.0" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2867,22 +3099,60 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2900,10 +3170,24 @@ "node": ">=8" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -2916,17 +3200,20 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -2935,24 +3222,31 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, "engines": { "node": ">= 0.4" }, @@ -2961,12 +3255,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2976,10 +3271,11 @@ } }, "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", "dev": true, + "license": "MIT", "dependencies": { "protocols": "^2.0.1" } @@ -2989,6 +3285,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -2997,12 +3294,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3012,12 +3311,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", "peer": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3027,12 +3329,13 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", "peer": true, "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -3054,13 +3357,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3070,29 +3407,34 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT", "peer": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3104,13 +3446,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT", "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -3123,12 +3467,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "license": "MIT", "peer": true }, "node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "license": "MIT", "peer": true, "dependencies": { "minimist": "^1.2.0" @@ -3145,10 +3491,11 @@ "peer": true }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -3160,6 +3507,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "peer": true, "dependencies": { "json-buffer": "3.0.1" @@ -3170,6 +3518,7 @@ "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -3178,6 +3527,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "^1.2.1", @@ -3191,12 +3541,14 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "license": "MIT", "peer": true, "dependencies": { "p-locate": "^5.0.0" @@ -3212,12 +3564,14 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT", "peer": true }, "node_modules/log-symbols": { @@ -3227,122 +3581,59 @@ "license": "MIT", "peer": true, "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "license": "MIT", "peer": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT", - "peer": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { - "node": ">=8" - } - }, - "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "node": ">= 0.4" } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3353,6 +3644,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -3361,6 +3653,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3372,21 +3665,24 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "peer": true }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "license": "MIT", "peer": true }, "node_modules/npm-run-path": { @@ -3394,6 +3690,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -3402,10 +3699,14 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3414,20 +3715,24 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -3438,14 +3743,16 @@ } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3455,27 +3762,31 @@ } }, "node_modules/object.groupby": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", - "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "license": "MIT", "peer": true, "dependencies": { - "array.prototype.filter": "^1.0.3", - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0" + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3484,19 +3795,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "peer": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -3508,17 +3811,18 @@ } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "license": "MIT", "peer": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -3548,86 +3852,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "license": "MIT", "peer": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT", - "peer": true - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/p-graph": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-graph/-/p-graph-1.2.0.tgz", + "integrity": "sha512-tJcm42n9DPoTKtt/m2/KAoSSVuFrxV+p32A+58mtt8ta7sjcUBcOTS7AIPpz2miqEpVNuDYjPzs+3lM/hJWAQQ==", + "dev": true, + "license": "MIT" }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3642,6 +3896,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "license": "MIT", "peer": true, "dependencies": { "p-limit": "^3.0.2" @@ -3657,6 +3912,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -3669,6 +3925,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -3683,45 +3940,44 @@ } }, "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", "dev": true, + "license": "MIT", "dependencies": { "protocols": "^2.0.0" } }, "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-9.2.0.tgz", + "integrity": "sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==", "dev": true, + "license": "MIT", "dependencies": { + "@types/parse-path": "^7.0.0", "parse-path": "^7.0.0" + }, + "engines": { + "node": ">=14.13.0" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "peer": true, "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -3730,20 +3986,31 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT", "peer": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -3752,39 +4019,42 @@ } }, "node_modules/playwright": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.42.1.tgz", - "integrity": "sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz", + "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.42.1" + "playwright-core": "1.55.0" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.42.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.42.1.tgz", - "integrity": "sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==", + "version": "1.55.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz", + "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -3794,6 +4064,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.8.0" @@ -3804,6 +4075,7 @@ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "dev": true, + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -3813,15 +4085,17 @@ } }, "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", + "dev": true, + "license": "MIT" }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", "peer": true, "engines": { "node": ">=6" @@ -3844,7 +4118,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/readable-stream": { "version": "3.6.2", @@ -3861,16 +4136,42 @@ "node": ">= 6" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -3883,6 +4184,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3898,18 +4200,22 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", "peer": true, "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3918,6 +4224,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } @@ -3937,49 +4244,15 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "peer": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -3998,28 +4271,32 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", "peer": true, "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", - "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.5", - "get-intrinsic": "^1.2.2", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -4050,15 +4327,33 @@ "license": "MIT", "peer": true }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -4068,9 +4363,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -4080,17 +4375,18 @@ } }, "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", "peer": true, "dependencies": { - "define-data-property": "^1.1.2", + "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", + "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4100,6 +4396,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", "peer": true, "dependencies": { "define-data-property": "^1.1.4", @@ -4111,10 +4408,26 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -4126,20 +4439,79 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -4151,18 +4523,22 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4177,6 +4553,20 @@ "node": ">= 8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4191,6 +4581,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4201,14 +4592,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4218,28 +4614,37 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4249,6 +4654,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4260,6 +4666,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "license": "MIT", "peer": true, "engines": { "node": ">=4" @@ -4270,6 +4677,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4278,6 +4686,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -4287,21 +4696,23 @@ } }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "peer": true, "engines": { "node": ">= 0.4" @@ -4310,16 +4721,11 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "peer": true - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -4331,25 +4737,27 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "license": "MIT", "peer": true, "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "license": "MIT", "peer": true, "dependencies": { "@types/json5": "^0.0.29", @@ -4359,14 +4767,16 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "license": "MIT", "peer": true, "dependencies": { "prelude-ls": "^1.2.1" @@ -4379,6 +4789,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=10" @@ -4388,30 +4799,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -4421,17 +4834,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -4441,17 +4856,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", "peer": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -4461,28 +4877,57 @@ } }, "node_modules/typescript": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", - "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "license": "Apache-2.0", "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.43.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.43.0.tgz", + "integrity": "sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.43.0", + "@typescript-eslint/parser": "8.43.0", + "@typescript-eslint/typescript-estree": "8.43.0", + "@typescript-eslint/utils": "8.43.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4493,6 +4938,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -4501,6 +4947,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", "peer": true, "dependencies": { "punycode": "^2.1.0" @@ -4513,19 +4960,6 @@ "license": "MIT", "peer": true }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -4540,6 +4974,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4551,32 +4986,86 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", "peer": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", - "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", "peer": true, "dependencies": { - "available-typed-arrays": "^1.0.6", - "call-bind": "^1.0.5", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.1" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4585,15 +5074,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/workspace-tools": { - "version": "0.36.4", - "resolved": "https://registry.npmjs.org/workspace-tools/-/workspace-tools-0.36.4.tgz", - "integrity": "sha512-v0UFVvw9BjHtRu2Dau5PEJKkuG8u4jPlpXZQWjSz9XgbSutpPURqtO2P0hp3cVmQVATh8lkMFCewFgJuDnyC/w==", + "version": "0.38.4", + "resolved": "https://registry.npmjs.org/workspace-tools/-/workspace-tools-0.38.4.tgz", + "integrity": "sha512-wCei5WNlhHswuU5tPjTYy4yVd7jnavtRUNbqpiHAmWRPOJtkvUpBQZExrrgFs3h9jdx6Qf6inCDSwjqnXhf+vQ==", "dev": true, + "license": "MIT", "dependencies": { "@yarnpkg/lockfile": "^1.1.0", "fast-glob": "^3.3.1", - "git-url-parse": "^13.0.0", + "git-url-parse": "^16.0.0", "globby": "^11.0.0", "jju": "^1.4.0", "js-yaml": "^4.1.0", @@ -4604,6 +5104,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4616,46 +5117,11 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "peer": true - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } @@ -4664,6 +5130,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4681,6 +5148,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -4689,6 +5157,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -4708,12 +5177,8 @@ "version": "9.0.7", "license": "MIT", "peerDependencies": { - "@angular-eslint/builder": "^18.4.3", - "@angular-eslint/eslint-plugin": "^18.4.3", - "@angular-eslint/eslint-plugin-template": "^18.4.3", - "@angular-eslint/schematics": "^18.4.3", - "@angular-eslint/template-parser": "^18.4.3", - "@ni/eslint-config-typescript": "^4.4.4" + "@ni/eslint-config-typescript": "^4.4.4", + "angular-eslint": "^19.0.0" } }, "packages/eslint-config-javascript": { @@ -4721,9 +5186,9 @@ "version": "4.4.0", "license": "MIT", "peerDependencies": { - "@stylistic/eslint-plugin": "^3.0.0", - "eslint": "^8.57.0", - "eslint-plugin-import": "^2.29.1" + "@stylistic/eslint-plugin": "^5.0.0", + "eslint": "^9.0.0", + "eslint-plugin-import": "^2.31.1" } }, "packages/eslint-config-playwright": { @@ -4732,7 +5197,7 @@ "license": "MIT", "peerDependencies": { "@ni/eslint-config-typescript": "^4.4.4", - "eslint-plugin-playwright": "^0.12.0" + "eslint-plugin-playwright": "^0.18.0" } }, "packages/eslint-config-typescript": { @@ -4741,8 +5206,7 @@ "license": "MIT", "peerDependencies": { "@ni/eslint-config-javascript": "^4.4.0", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0" + "typescript-eslint": "^8.0.0" } }, "tests/angular": { @@ -4798,7 +5262,7 @@ "@ni/javascript-test": "*", "@ni/typescript-requiring-type-checking-test": "*", "@ni/typescript-test": "*", - "eslint": "^8.57.0" + "eslint": "^9.0.0" } }, "tests/typescript": { diff --git a/package.json b/package.json index cd039f4..a32b14a 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,6 @@ "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "~4.8.2" + "typescript": "^5.0.0" } } \ No newline at end of file diff --git a/packages/eslint-config-angular/.eslintrc.js b/packages/eslint-config-angular/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-angular/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js new file mode 100644 index 0000000..68b70b7 --- /dev/null +++ b/packages/eslint-config-angular/eslint.config.js @@ -0,0 +1,13 @@ +import javascript from '@ni/eslint-config-javascript'; + +export default [ + ...javascript, + { + files: ['**/*.js'], + rules: { + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-unresolved': 'off', + }, + }, +]; \ No newline at end of file diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index d74c684..ad34f3c 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -1,139 +1,140 @@ -module.exports = { - extends: [ - 'plugin:@angular-eslint/recommended', - 'plugin:@angular-eslint/template/process-inline-templates', - '@ni/eslint-config-typescript' - ], - rules: { - /* - Overrides to Angular recommended rules: - https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.json - */ - - '@angular-eslint/no-host-metadata-property': 'error', - - /* - '@angular-eslint/no-input-rename' rule notes: - Disallow renaming directive inputs generally. Use an inline comment to disable the rule for exceptions where the - context changes significantly, or disable the rule for files of directives that need to prefix their inputs to avoid conflicts. - */ - - /* - '@angular-eslint/no-output-rename' rule notes: - Disallow renaming directive outputs generally. Use an inline comment to disable the rule for exceptions where the - context changes significantly, or disable the rule for projects that use the dollar sign postfix for EventEmitters. - */ - - /* - Upgrade the recommended rule configuration from a warning to an error. - */ - '@angular-eslint/use-lifecycle-interface': 'error', - - // We intended to use the default from @typescript-eslint/recommended, but we adopted this override accidentally. - // See https://github.com/ni/javascript-styleguide/issues/139 - '@typescript-eslint/no-inferrable-types': [ - 'error', - { ignoreParameters: true } - ], - - /* - Overrides to Angular rules outside of the recommended configuration: - */ - - /* - Extract templates and styles into a separate files. In rare cases, allow for inline templates of a few - elements with attributes and three minimal CSS declarations. - */ - '@angular-eslint/component-max-inline-declarations': ['error', { animations: 15, styles: 15, template: 15 }], - - /* [application-prefix] */ - '@angular-eslint/component-selector': 'off', - - '@angular-eslint/contextual-decorator': 'error', - - /* - Do not require a directive to select an element or attribute exclusively, because there are valid use cases - for both. - */ - '@angular-eslint/directive-selector': 'off', - - '@angular-eslint/no-attribute-decorator': 'error', - - /* - `forwardRef` is needed for certain Dependency Injection use cases and abuse is not widespread so its use is permitted. - */ - '@angular-eslint/no-forward-ref': 'off', - - /* - We don't yet have a general naming conventions so enforcing a convention just for inputs would be inconsistent. - */ - '@angular-eslint/no-input-prefix': 'off', - - '@angular-eslint/no-lifecycle-call': 'error', - - '@angular-eslint/no-pipe-impure': 'error', - - '@angular-eslint/no-queries-metadata-property': 'error', - - /* [application-prefix] */ - '@angular-eslint/pipe-prefix': 'error', - - /* - This rule is for specific applications such as libraries that want to minimize global dependencies or parts - of an application that have specific performance goals. - */ - '@angular-eslint/prefer-on-push-component-change-detection': 'off', - - /* - While marking @Output properties as readonly does better capture the intention of how they should generally be used, - it does not appear that there is wide-spread abuse of not marking @Output properties readonly. Marking them readonly - would deviate from the style given in most Angular docs and examples so this rule is not enabled. - */ - '@angular-eslint/prefer-output-readonly': 'off', - - '@angular-eslint/relative-url-prefix': 'error', - - '@angular-eslint/runtime-localize': 'error', - - /* - Generally not expected in practice to sort NgModule metadata arrays. Projects may enable if desired. - */ - '@angular-eslint/sort-ngmodule-metadata-arrays': 'off', - - '@angular-eslint/use-component-selector': 'error', - - '@angular-eslint/use-component-view-encapsulation': 'error', - - /* - Provide root services with the application root injector in the Injectable decorator. However, NgModule - providers are frequently preferred for non-root, module scoped services in applications where tree-shaking - is usually irrelevant. Additionally, libraries commonly export services from modules in order to manage - dependencies. Consider enabling this rule for libraries to ensure proper tree-shaking when appropriate. - */ - '@angular-eslint/use-injectable-provided-in': 'off' +import typescript from '@ni/eslint-config-typescript'; +import angular from 'angular-eslint'; + +export default [ + ...angular.configs.tsRecommended, + ...typescript, + { + processor: angular.processInlineTemplates, + rules: { + /* + Overrides to Angular recommended rules: + https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.json + */ + + '@angular-eslint/no-host-metadata-property': 'error', + + /* + '@angular-eslint/no-input-rename' rule notes: + Disallow renaming directive inputs generally. Use an inline comment to disable the rule for exceptions where the + context changes significantly, or disable the rule for files of directives that need to prefix their inputs to avoid conflicts. + */ + + /* + '@angular-eslint/no-output-rename' rule notes: + Disallow renaming directive outputs generally. Use an inline comment to disable the rule for exceptions where the + context changes significantly, or disable the rule for projects that use the dollar sign postfix for EventEmitters. + */ + + /* + Upgrade the recommended rule configuration from a warning to an error. + */ + '@angular-eslint/use-lifecycle-interface': 'error', + + // We intended to use the default from @typescript-eslint/recommended, but we adopted this override accidentally. + // See https://github.com/ni/javascript-styleguide/issues/139 + '@typescript-eslint/no-inferrable-types': [ + 'error', + { ignoreParameters: true } + ], + + /* + Overrides to Angular rules outside of the recommended configuration: + */ + + /* + Extract templates and styles into a separate files. In rare cases, allow for inline templates of a few + elements with attributes and three minimal CSS declarations. + */ + '@angular-eslint/component-max-inline-declarations': ['error', { animations: 15, styles: 15, template: 15 }], + + /* [application-prefix] */ + '@angular-eslint/component-selector': 'off', + + '@angular-eslint/contextual-decorator': 'error', + + /* + Do not require a directive to select an element or attribute exclusively, because there are valid use cases + for both. + */ + '@angular-eslint/directive-selector': 'off', + + '@angular-eslint/no-attribute-decorator': 'error', + + /* + `forwardRef` is needed for certain Dependency Injection use cases and abuse is not widespread so its use is permitted. + */ + '@angular-eslint/no-forward-ref': 'off', + + /* + We don't yet have a general naming conventions so enforcing a convention just for inputs would be inconsistent. + */ + '@angular-eslint/no-input-prefix': 'off', + + '@angular-eslint/no-lifecycle-call': 'error', + + '@angular-eslint/no-pipe-impure': 'error', + + '@angular-eslint/no-queries-metadata-property': 'error', + + /* [application-prefix] */ + '@angular-eslint/pipe-prefix': 'error', + + /* + This rule is for specific applications such as libraries that want to minimize global dependencies or parts + of an application that have specific performance goals. + */ + '@angular-eslint/prefer-on-push-component-change-detection': 'off', + + /* + While marking @Output properties as readonly does better capture the intention of how they should generally be used, + it does not appear that there is wide-spread abuse of not marking @Output properties readonly. Marking them readonly + would deviate from the style given in most Angular docs and examples so this rule is not enabled. + */ + '@angular-eslint/prefer-output-readonly': 'off', + + '@angular-eslint/relative-url-prefix': 'error', + + '@angular-eslint/runtime-localize': 'error', + + /* + Generally not expected in practice to sort NgModule metadata arrays. Projects may enable if desired. + */ + '@angular-eslint/sort-ngmodule-metadata-arrays': 'off', + + '@angular-eslint/use-component-selector': 'error', + + '@angular-eslint/use-component-view-encapsulation': 'error', + + /* + Provide root services with the application root injector in the Injectable decorator. However, NgModule + providers are frequently preferred for non-root, module scoped services in applications where tree-shaking + is usually irrelevant. Additionally, libraries commonly export services from modules in order to manage + dependencies. Consider enabling this rule for libraries to ensure proper tree-shaking when appropriate. + */ + '@angular-eslint/use-injectable-provided-in': 'off' + } }, - overrides: [ - { - files: ['*.spec.ts'], - rules: { - /* - Tests often define helper components and it improves test readability if they are in the same - file as the tests. - */ - '@angular-eslint/component-max-inline-declarations': 'off', - - /* - Components defined in tests are typically only used within a single test file so don't need. - a compontent selector. - */ - '@angular-eslint/use-component-selector': 'off', - - /* - Tests often define additional classes as mocks or helper components and it improves test readability - if those are in the same file as the tests. - */ - 'max-classes-per-file': 'off' - } - }, - ] -}; + { + files: ['**/*.spec.ts'], + rules: { + /* + Tests often define helper components and it improves test readability if they are in the same + file as the tests. + */ + '@angular-eslint/component-max-inline-declarations': 'off', + + /* + Components defined in tests are typically only used within a single test file so don't need. + a compontent selector. + */ + '@angular-eslint/use-component-selector': 'off', + + /* + Tests often define additional classes as mocks or helper components and it improves test readability + if those are in the same file as the tests. + */ + 'max-classes-per-file': 'off' + } + } +]; diff --git a/packages/eslint-config-angular/package.json b/packages/eslint-config-angular/package.json index 8d81a1b..08394bb 100644 --- a/packages/eslint-config-angular/package.json +++ b/packages/eslint-config-angular/package.json @@ -1,42 +1,45 @@ { - "name": "@ni/eslint-config-angular", - "version": "9.0.7", - "description": "NI's Angular ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "**/*.js", - "!/.*.js", - "!/tools" - ], - "peerDependencies": { - "@angular-eslint/builder": "^18.4.3", - "@angular-eslint/eslint-plugin": "^18.4.3", - "@angular-eslint/eslint-plugin-template": "^18.4.3", - "@angular-eslint/schematics": "^18.4.3", - "@angular-eslint/template-parser": "^18.4.3", - "@ni/eslint-config-typescript": "^4.4.4" - } + "type": "module", + "name": "@ni/eslint-config-angular", + "version": "9.0.7", + "description": "NI's Angular ESLint Shareable Config", + "main": "index.js", + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/.*.js", + "!/tools" + ], + "peerDependencies": { + "angular-eslint": "^19.0.0", + "@ni/eslint-config-typescript": "^4.4.4" + }, + "exports": { + ".": "./index.js", + "./template": "./template.js", + "./requiring-type-checking": "./requiring-type-checking.js", + "./template/options": "./template/options.js" + } } diff --git a/packages/eslint-config-angular/requiring-type-checking.js b/packages/eslint-config-angular/requiring-type-checking.js index a36883e..4e59d0b 100644 --- a/packages/eslint-config-angular/requiring-type-checking.js +++ b/packages/eslint-config-angular/requiring-type-checking.js @@ -1,18 +1,21 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript/requiring-type-checking' - ], - parser: '@typescript-eslint/parser', - overrides: [ - { - files: ['*.spec.ts'], - rules: { - /* - Spies used by Angular application tests result in a significant number of - unbound methods so this rule is disabled for test specs in Angular projects. - */ - '@typescript-eslint/unbound-method': 'off', - } - }, - ] -}; +import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; +import typescriptPlugin from 'typescript-eslint'; + +export default [ + ...typescriptRequiringTypeChecking, + { + languageOptions: { + parser: typescriptPlugin.parser, + }, + }, + { + files: ['**/*.spec.ts'], + rules: { + /* + Spies used by Angular application tests result in a significant number of + unbound methods so this rule is disabled for test specs in Angular projects. + */ + '@typescript-eslint/unbound-method': 'off', + }, + }, +]; diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/template.js index 3a07418..2360750 100644 --- a/packages/eslint-config-angular/template.js +++ b/packages/eslint-config-angular/template.js @@ -1,111 +1,110 @@ -const { ignoreAttributes } = require('./template/options'); - -module.exports = { - extends: [ - 'plugin:@angular-eslint/template/recommended' - ], - rules: { - /* - Overrides to Angular template recommended rules: - https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/recommended.json - */ - - /* - Angular template accessibility rules: - https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/accessibility.json - */ - - /* [accessibility] */ - '@angular-eslint/template/alt-text': 'off', - - /* [accessibility] */ - '@angular-eslint/template/click-events-have-key-events': 'off', - - /* [accessibility] */ - '@angular-eslint/template/elements-content': 'off', - - /* [accessibility] */ - '@angular-eslint/template/interactive-supports-focus': 'off', - - /* [accessibility] */ - '@angular-eslint/template/label-has-associated-control': 'off', - - /* [accessibility] */ - '@angular-eslint/template/mouse-events-have-key-events': 'off', - - /* [accessibility] */ - '@angular-eslint/template/no-autofocus': 'off', - - /* [accessibility] */ - '@angular-eslint/template/no-distracting-elements': 'error', - - /* [accessibility] */ - '@angular-eslint/template/no-positive-tabindex': 'off', - - /* [accessibility] */ - '@angular-eslint/template/role-has-required-aria': 'off', - - /* [accessibility] */ - '@angular-eslint/template/table-scope': 'off', - - /* [accessibility] */ - '@angular-eslint/template/valid-aria': 'error', - - /* - Overrides to Angular rules outside of the recommended configuration: - */ - - '@angular-eslint/template/conditional-complexity': 'error', - - /* - In practice, independent paths in templates tend to be parallel rather than linear. Templates are - declarative whereas procedural code is more likely to result in cyclomatic complexity. While this rule may - be applicable to specific features, a template should not result in an error simply because it exceeds the - number of statements allotted by this rule. - */ - '@angular-eslint/template/cyclomatic-complexity': 'off', - - /* - Enable this rule by default to enforce internationalization for existing applications that are localized - and new applications in the chance that they'll need to be localized in the future. Disable this rule - if an application will never be localized. - */ - '@angular-eslint/template/i18n': [ - 'error', - { - checkId: false, - ignoreAttributes: [...ignoreAttributes.all] - } - ], - - '@angular-eslint/template/no-any': 'error', - - /* - When considering efficient bindings use memoization and pipes. Avoid heavy array iteratoration, nested - function calls, and calls into uncontrolled third-party imports. However, there are many cases where a - function call significantly improves template readability and has no impact on performance—where a 1ms - execution is imperceivable for users. - */ - '@angular-eslint/template/no-call-expression': 'off', - - '@angular-eslint/template/no-duplicate-attributes': 'error', - - /* - Providing a `trackBy` function in `ngFor` loops can improve performance in specific cases where Angular can't track references, but it's overkill to require it for every `ngFor` so this rule is disabled. - */ - '@angular-eslint/template/use-track-by-function': 'off' +import { ignoreAttributes } from '@ni/eslint-config-angular/template/options'; +import angularTemplate from 'angular-eslint'; + +export default [ + ...angularTemplate.configs.templateRecommended, + { + rules: { + /* + Overrides to Angular template recommended rules: + https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/recommended.json + */ + + /* + Angular template accessibility rules: + https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/src/configs/accessibility.json + */ + + /* [accessibility] */ + '@angular-eslint/template/alt-text': 'off', + + /* [accessibility] */ + '@angular-eslint/template/click-events-have-key-events': 'off', + + /* [accessibility] */ + '@angular-eslint/template/elements-content': 'off', + + /* [accessibility] */ + '@angular-eslint/template/interactive-supports-focus': 'off', + + /* [accessibility] */ + '@angular-eslint/template/label-has-associated-control': 'off', + + /* [accessibility] */ + '@angular-eslint/template/mouse-events-have-key-events': 'off', + + /* [accessibility] */ + '@angular-eslint/template/no-autofocus': 'off', + + /* [accessibility] */ + '@angular-eslint/template/no-distracting-elements': 'error', + + /* [accessibility] */ + '@angular-eslint/template/no-positive-tabindex': 'off', + + /* [accessibility] */ + '@angular-eslint/template/role-has-required-aria': 'off', + + /* [accessibility] */ + '@angular-eslint/template/table-scope': 'off', + + /* [accessibility] */ + '@angular-eslint/template/valid-aria': 'error', + + /* + Overrides to Angular rules outside of the recommended configuration: + */ + + '@angular-eslint/template/conditional-complexity': 'error', + + /* + In practice, independent paths in templates tend to be parallel rather than linear. Templates are + declarative whereas procedural code is more likely to result in cyclomatic complexity. While this rule may + be applicable to specific features, a template should not result in an error simply because it exceeds the + number of statements allotted by this rule. + */ + '@angular-eslint/template/cyclomatic-complexity': 'off', + + /* + Enable this rule by default to enforce internationalization for existing applications that are localized + and new applications in the chance that they'll need to be localized in the future. Disable this rule + if an application will never be localized. + */ + '@angular-eslint/template/i18n': [ + 'error', + { + checkId: false, + ignoreAttributes: [...ignoreAttributes.all] + } + ], + + '@angular-eslint/template/no-any': 'error', + + /* + When considering efficient bindings use memoization and pipes. Avoid heavy array iteratoration, nested + function calls, and calls into uncontrolled third-party imports. However, there are many cases where a + function call significantly improves template readability and has no impact on performance—where a 1ms + execution is imperceivable for users. + */ + '@angular-eslint/template/no-call-expression': 'off', + + '@angular-eslint/template/no-duplicate-attributes': 'error', + + /* + Providing a `trackBy` function in `ngFor` loops can improve performance in specific cases where Angular can't track references, but it's overkill to require it for every `ngFor` so this rule is disabled. + */ + '@angular-eslint/template/use-track-by-function': 'off' + } }, - overrides: [ - { - // Ignore inline templates in tests using the inline template naming convention - // See naming details: https://github.com/angular-eslint/angular-eslint/releases/tag/v14.0.0 - files: ['*.spec.ts*.html'], - rules: { - /* - Tests often define helper components that don't need to be marked for i18n. - */ - '@angular-eslint/template/i18n': 'off' - } - }, - ] -}; + { + // Ignore inline templates in tests using the inline template naming convention + // See naming details: https://github.com/angular-eslint/angular-eslint/releases/tag/v14.0.0 + files: ['*.spec.ts*.html'], + rules: { + /* + Tests often define helper components that don't need to be marked for i18n. + */ + '@angular-eslint/template/i18n': 'off' + } + } +]; diff --git a/packages/eslint-config-angular/template/options.js b/packages/eslint-config-angular/template/options.js index 79fd42f..f2ccb92 100644 --- a/packages/eslint-config-angular/template/options.js +++ b/packages/eslint-config-angular/template/options.js @@ -139,11 +139,7 @@ const ignoreAttributeSets = { ] }; -const ignoreAttributes = { +export const ignoreAttributes = { ...ignoreAttributeSets, all: Object.values(ignoreAttributeSets).flat() -}; - -module.exports = { - ignoreAttributes -}; +}; \ No newline at end of file diff --git a/packages/eslint-config-angular/tools/print-available-rules.js b/packages/eslint-config-angular/tools/print-available-rules.js index 503a9af..1ce8ceb 100644 --- a/packages/eslint-config-angular/tools/print-available-rules.js +++ b/packages/eslint-config-angular/tools/print-available-rules.js @@ -1,28 +1,32 @@ -const plugin = require('@angular-eslint/eslint-plugin'); -const templatePlugin = require('@angular-eslint/eslint-plugin-template'); +/* eslint-disable no-undef */ +/* eslint-disable no-console */ +import angularPlugin from 'angular-eslint'; -const isTrue = val => val !== undefined && val !== false; -const recommended = rule => isTrue(rule.meta.docs.recommended); -const print = (keys, prefix = '@angular-eslint') => { +const print = keys => { const results = {}; keys.forEach(key => { - results[`${prefix}/${key}`] = ''; + results[`${key}`] = ''; }); - global.console.log(JSON.stringify(results, null, 4)); + console.log(JSON.stringify(results, null, 4)); }; -const sortedRules = Object.keys(plugin.rules).sort(); -const sortedTemplateRules = Object.keys(templatePlugin.rules).sort(); +const getRules = (configs, configName) => { + const config = configs.find(cfg => cfg.name === configName); + return config ? Object.keys(config.rules).sort() : {}; +}; + +const angularTsRecommended = getRules(angularPlugin.configs.tsRecommended, 'angular-eslint/ts-recommended'); +const angularTemplateRecommended = getRules(angularPlugin.configs.templateRecommended, 'angular-eslint/template-recommended'); +const angularTsAll = getRules(angularPlugin.configs.tsAll, 'angular-eslint/ts-all'); +const angularTemplateAll = getRules(angularPlugin.configs.templateAll, 'angular-eslint/template-all'); -const angular = sortedRules.filter(key => !recommended(plugin.rules[key])); -const angularRecommended = sortedRules.filter(key => recommended(plugin.rules[key])); -const template = sortedTemplateRules.filter(key => !recommended(templatePlugin.rules[key])); -const templateRecommended = sortedTemplateRules.filter(key => recommended(templatePlugin.rules[key])); +const angular = angularTsAll.filter(key => !angularTsRecommended.includes(key)); +const template = angularTemplateAll.filter(key => !angularTemplateRecommended.includes(key)); -global.console.log('Angular Recommended:'); -print(angularRecommended); -global.console.log('Remaining Angular Rules:'); +console.log('Angular Recommended:'); +print(angularTsRecommended); +console.log('Remaining Angular Rules:'); print(angular); -global.console.log('Angular Template Recommended:'); -print(templateRecommended, '@angular-eslint/template'); -global.console.log('Remaining Angular Template Rules:'); +console.log('Angular Template Recommended:'); +print(angularTemplateRecommended, '@angular-eslint/template'); +console.log('Remaining Angular Template Rules:'); print(template, '@angular-eslint/template'); diff --git a/packages/eslint-config-javascript/.eslintrc.js b/packages/eslint-config-javascript/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-javascript/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js new file mode 100644 index 0000000..d64a8b4 --- /dev/null +++ b/packages/eslint-config-javascript/eslint.config.js @@ -0,0 +1,13 @@ +import javascript from '@ni/eslint-config-javascript'; + +export default [ + ...javascript, + { + files: ['**/*.js'], + rules: { + 'import/no-default-export': 'off', + 'import/extensions': 'off', + 'import/no-extraneous-dependencies': 'off', + }, + }, +]; diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index 7f61bb3..421ec2d 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -1,18 +1,32 @@ -module.exports = { - extends: [ - require.resolve('./rules/best-practices'), - require.resolve('./rules/errors'), - require.resolve('./rules/node'), - require.resolve('./rules/style'), - require.resolve('./rules/variables'), - require.resolve('./rules/es6'), - require.resolve('./rules/imports'), - require.resolve('./rules/strict'), - 'plugin:@stylistic/disable-legacy', - ], - plugins: ['@stylistic'], - parserOptions: { - ecmaVersion: 2018, - sourceType: 'module', - } -}; \ No newline at end of file +import importPlugin from 'eslint-plugin-import'; +import stylisticPlugin from '@stylistic/eslint-plugin'; +import { bestPractices } from './rules/best-practices.js'; +import { errors } from './rules/errors.js'; +import { node } from './rules/node.js'; +import { style } from './rules/style.js'; +import { variables } from './rules/variables.js'; +import { es6 } from './rules/es6.js'; +import { imports } from './rules/imports.js'; +import { strict } from './rules/strict.js'; + +export default [ + stylisticPlugin.configs['disable-legacy'], + bestPractices, + errors, + node, + style, + variables, + es6, + imports, + strict, + { + plugins: { + '@stylistic': stylisticPlugin, + import: importPlugin, + }, + languageOptions: { + ecmaVersion: 2022, + sourceType: 'module' + } + }, +]; \ No newline at end of file diff --git a/packages/eslint-config-javascript/package.json b/packages/eslint-config-javascript/package.json index 3a5744a..c5180b0 100644 --- a/packages/eslint-config-javascript/package.json +++ b/packages/eslint-config-javascript/package.json @@ -1,4 +1,5 @@ { + "type":"module", "name": "@ni/eslint-config-javascript", "version": "4.4.0", "description": "NI's JavaScript ESLint Shareable Config", @@ -31,8 +32,8 @@ "!/.*.js" ], "peerDependencies": { - "eslint": "^8.57.0", - "eslint-plugin-import": "^2.29.1", - "@stylistic/eslint-plugin": "^3.0.0" + "eslint": "^9.0.0", + "eslint-plugin-import": "^2.31.1", + "@stylistic/eslint-plugin": "^5.0.0" } } diff --git a/packages/eslint-config-javascript/rules/best-practices.js b/packages/eslint-config-javascript/rules/best-practices.js index 1a8ab52..89a049e 100644 --- a/packages/eslint-config-javascript/rules/best-practices.js +++ b/packages/eslint-config-javascript/rules/best-practices.js @@ -1,4 +1,4 @@ -module.exports = { +export const bestPractices ={ rules: { /* enforces getter/setter pairs in objects diff --git a/packages/eslint-config-javascript/rules/errors.js b/packages/eslint-config-javascript/rules/errors.js index 2b50e5f..9f15d5a 100644 --- a/packages/eslint-config-javascript/rules/errors.js +++ b/packages/eslint-config-javascript/rules/errors.js @@ -1,4 +1,4 @@ -module.exports = { +export const errors = { rules: { /* Enforce “for” loop update clause moving the counter in the right direction diff --git a/packages/eslint-config-javascript/rules/es6.js b/packages/eslint-config-javascript/rules/es6.js index 0e1a2a7..d6d92cd 100644 --- a/packages/eslint-config-javascript/rules/es6.js +++ b/packages/eslint-config-javascript/rules/es6.js @@ -1,16 +1,4 @@ -module.exports = { - env: { - es6: true - }, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: { - generators: false, - objectLiteralDuplicateProperties: false - } - }, - +export const es6 = { rules: { /* Developers should consider readability, and no braces may be preferred when unnecessary. However, this rule diff --git a/packages/eslint-config-javascript/rules/imports.js b/packages/eslint-config-javascript/rules/imports.js index 0e4c19c..866b528 100644 --- a/packages/eslint-config-javascript/rules/imports.js +++ b/packages/eslint-config-javascript/rules/imports.js @@ -1,15 +1,4 @@ -module.exports = { - env: { - es6: true - }, - parserOptions: { - ecmaVersion: 6, - sourceType: 'module' - }, - plugins: [ - 'import' - ], - +export const imports = { settings: { 'import/resolver': { node: { @@ -28,7 +17,6 @@ module.exports = { '\\.(coffee|scss|css|less|hbs|svg|json)$', ], }, - rules: { /* Static analysis: diff --git a/packages/eslint-config-javascript/rules/node.js b/packages/eslint-config-javascript/rules/node.js index eaa1406..1ef0138 100644 --- a/packages/eslint-config-javascript/rules/node.js +++ b/packages/eslint-config-javascript/rules/node.js @@ -1,8 +1,4 @@ -module.exports = { - env: { - node: true - }, - +export const node = { rules: { /* enforce return after a callback diff --git a/packages/eslint-config-javascript/rules/strict.js b/packages/eslint-config-javascript/rules/strict.js index d1101a3..793e32e 100644 --- a/packages/eslint-config-javascript/rules/strict.js +++ b/packages/eslint-config-javascript/rules/strict.js @@ -1,4 +1,4 @@ -module.exports = { +export const strict = { rules: { /* babel inserts `'use strict';` for us diff --git a/packages/eslint-config-javascript/rules/style.js b/packages/eslint-config-javascript/rules/style.js index ca60164..272a24f 100644 --- a/packages/eslint-config-javascript/rules/style.js +++ b/packages/eslint-config-javascript/rules/style.js @@ -1,4 +1,4 @@ -module.exports = { +export const style = { rules: { /* enforce line breaks after opening and before closing array brackets diff --git a/packages/eslint-config-javascript/rules/variables.js b/packages/eslint-config-javascript/rules/variables.js index 59d1164..5e8ac4b 100644 --- a/packages/eslint-config-javascript/rules/variables.js +++ b/packages/eslint-config-javascript/rules/variables.js @@ -1,4 +1,4 @@ -module.exports = { +export const variables = { rules: { /* enforce or disallow variable initializations at definition diff --git a/packages/eslint-config-playwright/.eslintrc.js b/packages/eslint-config-playwright/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-playwright/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js new file mode 100644 index 0000000..cfa57ec --- /dev/null +++ b/packages/eslint-config-playwright/eslint.config.js @@ -0,0 +1,12 @@ +import javascript from '@ni/eslint-config-javascript'; + +export default [ + ...javascript, + { + rules: { + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-unresolved': 'off', + }, + }, +]; diff --git a/packages/eslint-config-playwright/index.js b/packages/eslint-config-playwright/index.js index aa7948a..af347b8 100644 --- a/packages/eslint-config-playwright/index.js +++ b/packages/eslint-config-playwright/index.js @@ -1,82 +1,85 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript', - 'plugin:playwright/playwright-test' - ], - rules: { - /* - In UI tests it is common to have a loop that performs async operations which must be sequential. - For example, clicking on a list of elements one after another. - While there are still some cases where the rule would suggest valid improvements, they are not common - enough to justify the noise that comes from needing to suppress it. - */ - 'no-await-in-loop': 'off', +import typescript from '@ni/eslint-config-typescript'; +import playwright from 'eslint-plugin-playwright'; - /* - Playwright marks this as recommended but configures it as 'warn'. - Deeply nested describe blocks are likely an indication that test files are too complicated. - */ - 'playwright/max-nested-describe': 'error', +export default [ + ...typescript, + playwright.configs['flat/recommended'], + { + rules: { + /* + In UI tests it is common to have a loop that performs async operations which must be sequential. + For example, clicking on a list of elements one after another. + While there are still some cases where the rule would suggest valid improvements, they are not common + enough to justify the noise that comes from needing to suppress it. + */ + 'no-await-in-loop': 'off', - /* - Playwright marks this as recommended but configures it as 'warn'. - Conditional logic in tests is usually an indication that a test is attempting to cover too much, and not testing the logic it intends to. - Each branch of code executing within a conditional statement will usually be better served by a test devoted to it. - */ - 'playwright/no-conditional-in-test': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Deeply nested describe blocks are likely an indication that test files are too complicated. + */ + 'playwright/max-nested-describe': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Instead of element handles (page.$) use locators (page.locator). - */ - 'playwright/no-element-handle': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Conditional logic in tests is usually an indication that a test is attempting to cover too much, and not testing the logic it intends to. + Each branch of code executing within a conditional statement will usually be better served by a test devoted to it. + */ + 'playwright/no-conditional-in-test': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Instead of page.$eval use locators (page.locator). - */ - 'playwright/no-eval': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Instead of element handles (page.$) use locators (page.locator). + */ + 'playwright/no-element-handle': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - We should generally avoid using {"force: true"} to force Playwright to interact with an element that isn't visible. - In some cases it is necessary and this rule may be suppressed if explained with a comment. - */ - 'playwright/no-force-option': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Instead of page.$eval use locators (page.locator). + */ + 'playwright/no-eval': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Using page.pause should be reserved for debugging, not production code. - */ - 'playwright/no-page-pause': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + We should generally avoid using {"force: true"} to force Playwright to interact with an element that isn't visible. + In some cases it is necessary and this rule may be suppressed if explained with a comment. + */ + 'playwright/no-force-option': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - We allow skipped tests as a mechanism of temporarily disabling them in production. - Skipped tests should be accompanied by a comment linking to a work item that tracks re-enabling them. - */ - 'playwright/no-skipped-test': 'off', + /* + Playwright marks this as recommended but configures it as 'warn'. + Using page.pause should be reserved for debugging, not production code. + */ + 'playwright/no-page-pause': 'error', - /* - Playwright marks this as recommended but configures it as 'warn'. - Assertions are easier to read when using a dedicated matcher rather than negating the opposite matcher. - */ - 'playwright/no-useless-not': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + We allow skipped tests as a mechanism of temporarily disabling them in production. + Skipped tests should be accompanied by a comment linking to a work item that tracks re-enabling them. + */ + 'playwright/no-skipped-test': 'off', - /* - Playwright marks this as recommended but configures it as 'warn'. - Waiting for arbitrary amounts of time can cause test intermittency. Instead wait for a specific condition. - */ - 'playwright/no-wait-for-timeout': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Assertions are easier to read when using a dedicated matcher rather than negating the opposite matcher. + */ + 'playwright/no-useless-not': 'error', - /* - In order to have a better failure message, toHaveLength() should be used when asserting expectations on objects length property. - */ - 'playwright/prefer-to-have-length': 'error', + /* + Playwright marks this as recommended but configures it as 'warn'. + Waiting for arbitrary amounts of time can cause test intermittency. Instead wait for a specific condition. + */ + 'playwright/no-wait-for-timeout': 'error', - /* - Having a top-level describe block in each test file is common practice which aligns with patterns we use in Jasmine - */ - 'playwright/require-top-level-describe': 'error' - }, -}; + /* + In order to have a better failure message, toHaveLength() should be used when asserting expectations on objects length property. + */ + 'playwright/prefer-to-have-length': 'error', + + /* + Having a top-level describe block in each test file is common practice which aligns with patterns we use in Jasmine + */ + 'playwright/require-top-level-describe': 'error' + } + } +]; diff --git a/packages/eslint-config-playwright/package.json b/packages/eslint-config-playwright/package.json index 2ddc7d0..09cdc5f 100644 --- a/packages/eslint-config-playwright/package.json +++ b/packages/eslint-config-playwright/package.json @@ -1,37 +1,42 @@ { - "name": "@ni/eslint-config-playwright", - "version": "1.1.5", - "description": "NI's Playwright ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "!/.*.js" - ], - "peerDependencies": { - "@ni/eslint-config-typescript": "^4.4.4", - "eslint-plugin-playwright": "^0.12.0" - } + "type": "module", + "name": "@ni/eslint-config-playwright", + "version": "1.1.5", + "description": "NI's Playwright ESLint Shareable Config", + "main": "index.js", + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "/*.js", + "!/.*.js" + ], + "peerDependencies": { + "@ni/eslint-config-typescript": "^4.4.4", + "eslint-plugin-playwright": "^0.18.0" + }, + "exports": { + ".": "./index.js", + "./requiring-type-checking": "./requiring-type-checking.js" + } } diff --git a/packages/eslint-config-playwright/requiring-type-checking.js b/packages/eslint-config-playwright/requiring-type-checking.js index 97b401f..da60cb7 100644 --- a/packages/eslint-config-playwright/requiring-type-checking.js +++ b/packages/eslint-config-playwright/requiring-type-checking.js @@ -1,6 +1,3 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript/requiring-type-checking' - ], - parser: '@typescript-eslint/parser', -}; +import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; + +export default [...typescriptRequiringTypeChecking]; \ No newline at end of file diff --git a/packages/eslint-config-playwright/tools/print-available-rules.js b/packages/eslint-config-playwright/tools/print-available-rules.js index 5d65702..3f87c86 100644 --- a/packages/eslint-config-playwright/tools/print-available-rules.js +++ b/packages/eslint-config-playwright/tools/print-available-rules.js @@ -1,4 +1,6 @@ -const plugin = require('eslint-plugin-playwright'); +/* eslint-disable no-undef */ +/* eslint-disable no-console */ +import plugin from 'eslint-plugin-playwright'; const isTrue = val => val !== undefined && val !== false; const recommended = rule => isTrue(rule.meta.docs.recommended); @@ -7,14 +9,15 @@ const print = (keys, prefix = 'playwright') => { keys.forEach(key => { results[`${prefix}/${key}`] = ''; }); - global.console.log(JSON.stringify(results, null, 4)); + console.log(JSON.stringify(results, null, 4)); }; const sortedRules = Object.keys(plugin.rules).sort(); const playwright = sortedRules.filter(key => !recommended(plugin.rules[key])); const playwrightRecommended = sortedRules.filter(key => recommended(plugin.rules[key])); -global.console.log('Playwright Recommended:'); +console.log('Playwright Recommended:'); print(playwrightRecommended); -global.console.log('Remaining Playwright Rules:'); +console.log('Remaining Playwright Rules:'); print(playwright); + diff --git a/packages/eslint-config-typescript/.eslintrc.js b/packages/eslint-config-typescript/.eslintrc.js deleted file mode 100644 index b61604d..0000000 --- a/packages/eslint-config-typescript/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript' -}; diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js new file mode 100644 index 0000000..76d66b3 --- /dev/null +++ b/packages/eslint-config-typescript/eslint.config.js @@ -0,0 +1,14 @@ +import javascript from '@ni/eslint-config-javascript'; + +export default [ + ...javascript, + { + files: ['**/*.js'], + rules: { + 'import/no-default-export': 'off', + 'import/extensions': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-unresolved': 'off', + }, + }, +]; diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index 34c79a0..c1ce133 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -1,226 +1,231 @@ -module.exports = { - extends: [ - '@ni/eslint-config-javascript', - 'plugin:@typescript-eslint/recommended', - 'plugin:import/typescript', - './lib/extensions' - ], - parser: '@typescript-eslint/parser', - rules: { - /* - Overrides to import rules (already handled by the TypeScript compiler): - https://github.com/benmosher/eslint-plugin-import/blob/main/config/typescript.js - */ - - /* - Already enforced by TypeScript compiler. - */ - 'import/named': 'off', - - /* - Already enforced by TypeScript compiler. - */ - 'import/no-unresolved': 'off', - - /* - Overrides to TypeScript recommended rules: - https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.ts - */ - - '@typescript-eslint/explicit-module-boundary-types': 'error', - - /* - [strict-null-checks] - With `stickNullChecks` disabled, non-null assertions are discouraged (this rule is configured as 'error') - as non-null assertions do not provide additional type safety and if used inconsistently add to visual noise. - With `strictNullChecks` enabled, the non-null assertion operator (this rule configured as 'off') - is useful for asserting that a value will no longer be null and usage of operator should be allowed. - */ - '@typescript-eslint/no-non-null-assertion': 'error', - - 'valid-typeof': 'off', - - /* - Overrides to TypeScript stylistic rules: - https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic.ts - */ - - /* - Overrides to Typescript rules outside of the recommended configuration: - */ - - /* - Prefer the array straight bracket syntax over generics in all cases. - */ - '@typescript-eslint/array-type': 'error', - - '@typescript-eslint/ban-tslint-comment': 'error', - - '@typescript-eslint/class-literal-property-style': 'error', - - /* - Prefer the index signature syntax over the builtin `Record` type in all cases. - */ - '@typescript-eslint/consistent-indexed-object-style': ['error', 'index-signature'], - - '@typescript-eslint/consistent-type-assertions': 'error', - - '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], - - /* - Type imports are useful for uncommon use cases such as modules with - side-efects and file-by-file transpiling. Usage will be determined - on a case-by-case basis. - */ - '@typescript-eslint/consistent-type-imports': 'off', - - '@typescript-eslint/explicit-function-return-type': 'error', - - /* - Requiring an accessibility modifier helps when creating classes to ensure the - accessibility of a class member is intentionally decided and not relying on - the default of public accessibility. Constructors are omitted because they are - almost always public. - */ - '@typescript-eslint/explicit-member-accessibility': ['error', - { accessibility: 'explicit', overrides: { constructors: 'off' } } - ], - - /* - All interface members should be terminated with a semicolon including single line - definitions, consistent with classes. Object literal types should use commas - consistent with object literals. - */ - '@typescript-eslint/member-delimiter-style': ['error', { - overrides: { - interface: { - singleline: { - delimiter: 'semi', - requireLast: true - } - }, - typeLiteral: { - multiline: { - delimiter: 'comma', - requireLast: false +import javascript from '@ni/eslint-config-javascript'; +import typescriptPlugin from 'typescript-eslint'; +import extensions from './lib/extensions.js'; + +export default [ + ...javascript, + ...typescriptPlugin.configs.recommended, + ...extensions, + { + languageOptions: { + parser: typescriptPlugin.parser + }, + rules: { + /* + Overrides to import rules (already handled by the TypeScript compiler): + https://github.com/benmosher/eslint-plugin-import/blob/main/config/typescript.js + */ + + /* + Already enforced by TypeScript compiler. + */ + 'import/named': 'off', + + /* + Already enforced by TypeScript compiler. + */ + 'import/no-unresolved': 'off', + + /* + Overrides to TypeScript recommended rules: + https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.ts + */ + + '@typescript-eslint/explicit-module-boundary-types': 'error', + + /* + [strict-null-checks] + With `stickNullChecks` disabled, non-null assertions are discouraged (this rule is configured as 'error') + as non-null assertions do not provide additional type safety and if used inconsistently add to visual noise. + With `strictNullChecks` enabled, the non-null assertion operator (this rule configured as 'off') + is useful for asserting that a value will no longer be null and usage of operator should be allowed. + */ + '@typescript-eslint/no-non-null-assertion': 'error', + + 'valid-typeof': 'off', + + /* + Overrides to TypeScript stylistic rules: + https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic.ts + */ + + /* + Overrides to Typescript rules outside of the recommended configuration: + */ + + /* + Prefer the array straight bracket syntax over generics in all cases. + */ + '@typescript-eslint/array-type': 'error', + + '@typescript-eslint/ban-tslint-comment': 'error', + + '@typescript-eslint/class-literal-property-style': 'error', + + /* + Prefer the index signature syntax over the builtin `Record` type in all cases. + */ + '@typescript-eslint/consistent-indexed-object-style': ['error', 'index-signature'], + + '@typescript-eslint/consistent-type-assertions': 'error', + + '@typescript-eslint/consistent-type-definitions': ['error', 'interface'], + + /* + Type imports are useful for uncommon use cases such as modules with + side-efects and file-by-file transpiling. Usage will be determined + on a case-by-case basis. + */ + '@typescript-eslint/consistent-type-imports': 'off', + + '@typescript-eslint/explicit-function-return-type': 'error', + + /* + Requiring an accessibility modifier helps when creating classes to ensure the + accessibility of a class member is intentionally decided and not relying on + the default of public accessibility. Constructors are omitted because they are + almost always public. + */ + '@typescript-eslint/explicit-member-accessibility': ['error', + { accessibility: 'explicit', overrides: { constructors: 'off' } } + ], + + /* + All interface members should be terminated with a semicolon including single line + definitions, consistent with classes. Object literal types should use commas + consistent with object literals. + */ + '@typescript-eslint/member-delimiter-style': ['error', { + overrides: { + interface: { + singleline: { + delimiter: 'semi', + requireLast: true + } }, - singleline: { - delimiter: 'comma', - requireLast: false + typeLiteral: { + multiline: { + delimiter: 'comma', + requireLast: false + }, + singleline: { + delimiter: 'comma', + requireLast: false + } } } - } - }], - - /* - Group members by fields and methods and then order them by accessibility starting - with statics. Order members within these groups in a logical organization where - readability is the most important thing. Private fields that back public accessors - may be grouped with their accessor by disabling the rule with a comment. - */ - '@typescript-eslint/member-ordering': ['error', { - default: [ - 'signature', - 'public-static-field', - 'protected-static-field', - 'private-static-field', - 'static-field', - 'public-field', - 'protected-field', - 'private-field', - 'field', - 'public-constructor', - 'protected-constructor', - 'private-constructor', - 'constructor', - 'public-static-method', - 'protected-static-method', - 'private-static-method', - 'static-method', - 'public-method', - 'protected-method', - 'private-method', - 'method' - ] - }], - - /* - The stricter type checking that's possible by using property style when declaring - method signatures only has benefits in some cases of inheritance. Therefore we - prefer to align the style between interface and class definitions and to align - with other languages used by NI like C#. - */ - '@typescript-eslint/method-signature-style': 'off', - - '@typescript-eslint/no-confusing-non-null-assertion': 'error', - - /* - This rule is unnecessary because delete is banned via 'no-restricted-syntax' - */ - '@typescript-eslint/no-dynamic-delete': 'off', - - '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true, allowStaticOnly: true }], - - /* - TypeScript only supports catching `any` and `unknown` so this rule does not add - much value. With the rule no-throw-literal we enforce throwing `Error` objects, - which should be sufficient most of the time. For more type safety, consider - using type guards. - */ - '@typescript-eslint/no-implicit-any-catch': 'off', - - '@typescript-eslint/no-invalid-void-type': 'error', - - /* - Parameter properties are a nice shorthand for defining properties ingested - in the constructor. - */ - '@typescript-eslint/no-parameter-properties': 'off', - - '@typescript-eslint/no-require-imports': 'error', - - /* - Type aliases are in-use in many applications and do not seem to generally be abused - by, for example, aliasing built-in types unnecessarily. - */ - '@typescript-eslint/no-type-alias': 'off', - - '@typescript-eslint/no-unnecessary-type-constraint': 'error', - - /* - As the rule is experimental it is not enabled by default. - */ - '@typescript-eslint/no-unused-vars-experimental': 'off', - - /* - If an enum is crossing a code boundary (being serialized to JSON for example) then - you should initialize its values. But in most other cases code shouldn't care about - the values of enum items, so you can safely leave them implicit. - */ - '@typescript-eslint/prefer-enum-initializers': 'off', - - '@typescript-eslint/prefer-for-of': 'error', - - '@typescript-eslint/prefer-function-type': 'error', - - '@typescript-eslint/prefer-literal-enum-member': 'error', - - '@typescript-eslint/prefer-ts-expect-error': 'error', - - /* - Generally not expected in practice to sort union intersection members. - Projects may enable if desired. - */ - '@typescript-eslint/sort-type-union-intersection-members': 'off', - - '@typescript-eslint/type-annotation-spacing': 'error', - - /* - This rule is better enforced with the TypeScript `noImplicitAny` and - `strictPropertyInitialization` compiler options. - */ - '@typescript-eslint/typedef': 'off', - - '@typescript-eslint/unified-signatures': 'error', + }], + + /* + Group members by fields and methods and then order them by accessibility starting + with statics. Order members within these groups in a logical organization where + readability is the most important thing. Private fields that back public accessors + may be grouped with their accessor by disabling the rule with a comment. + */ + '@typescript-eslint/member-ordering': ['error', { + default: [ + 'signature', + 'public-static-field', + 'protected-static-field', + 'private-static-field', + 'static-field', + 'public-field', + 'protected-field', + 'private-field', + 'field', + 'public-constructor', + 'protected-constructor', + 'private-constructor', + 'constructor', + 'public-static-method', + 'protected-static-method', + 'private-static-method', + 'static-method', + 'public-method', + 'protected-method', + 'private-method', + 'method' + ] + }], + + /* + The stricter type checking that's possible by using property style when declaring + method signatures only has benefits in some cases of inheritance. Therefore we + prefer to align the style between interface and class definitions and to align + with other languages used by NI like C#. + */ + '@typescript-eslint/method-signature-style': 'off', + + '@typescript-eslint/no-confusing-non-null-assertion': 'error', + + /* + This rule is unnecessary because delete is banned via 'no-restricted-syntax' + */ + '@typescript-eslint/no-dynamic-delete': 'off', + + '@typescript-eslint/no-extraneous-class': ['error', { allowWithDecorator: true, allowStaticOnly: true }], + + /* + TypeScript only supports catching `any` and `unknown` so this rule does not add + much value. With the rule no-throw-literal we enforce throwing `Error` objects, + which should be sufficient most of the time. For more type safety, consider + using type guards. + */ + '@typescript-eslint/no-implicit-any-catch': 'off', + + '@typescript-eslint/no-invalid-void-type': 'error', + + /* + Parameter properties are a nice shorthand for defining properties ingested + in the constructor. + */ + '@typescript-eslint/no-parameter-properties': 'off', + + '@typescript-eslint/no-require-imports': 'error', + + /* + Type aliases are in-use in many applications and do not seem to generally be abused + by, for example, aliasing built-in types unnecessarily. + */ + '@typescript-eslint/no-type-alias': 'off', + + '@typescript-eslint/no-unnecessary-type-constraint': 'error', + + /* + As the rule is experimental it is not enabled by default. + */ + '@typescript-eslint/no-unused-vars-experimental': 'off', + + /* + If an enum is crossing a code boundary (being serialized to JSON for example) then + you should initialize its values. But in most other cases code shouldn't care about + the values of enum items, so you can safely leave them implicit. + */ + '@typescript-eslint/prefer-enum-initializers': 'off', + + '@typescript-eslint/prefer-for-of': 'error', + + '@typescript-eslint/prefer-function-type': 'error', + + '@typescript-eslint/prefer-literal-enum-member': 'error', + + '@typescript-eslint/prefer-ts-expect-error': 'error', + + /* + Generally not expected in practice to sort union intersection members. + Projects may enable if desired. + */ + '@typescript-eslint/sort-type-union-intersection-members': 'off', + + '@typescript-eslint/type-annotation-spacing': 'error', + + /* + This rule is better enforced with the TypeScript `noImplicitAny` and + `strictPropertyInitialization` compiler options. + */ + '@typescript-eslint/typedef': 'off', + + '@typescript-eslint/unified-signatures': 'error', + } } -}; +]; diff --git a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js index 427fcfa..153d732 100644 --- a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js +++ b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js @@ -1,4 +1,4 @@ -module.exports = { +export const extensionsRequiringTypeChecking = { rules: { 'dot-notation': 'off', '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], diff --git a/packages/eslint-config-typescript/lib/extensions.js b/packages/eslint-config-typescript/lib/extensions.js index b5e2e9c..da4e931 100644 --- a/packages/eslint-config-typescript/lib/extensions.js +++ b/packages/eslint-config-typescript/lib/extensions.js @@ -1,4 +1,4 @@ -module.exports = { +export const extensions = { rules: { /* The following are extension rules that replace core JavaScript rules to support diff --git a/packages/eslint-config-typescript/package.json b/packages/eslint-config-typescript/package.json index 0b51b6a..14bd487 100644 --- a/packages/eslint-config-typescript/package.json +++ b/packages/eslint-config-typescript/package.json @@ -1,39 +1,43 @@ { - "name": "@ni/eslint-config-typescript", - "version": "4.4.4", - "description": "NI's TypeScript ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "!/.*.js", - "/lib/*" - ], - "peerDependencies": { - "@ni/eslint-config-javascript": "^4.4.0", - "@typescript-eslint/parser": "^7.18.0", - "@typescript-eslint/eslint-plugin": "^7.18.0" - } + "type": "module", + "name": "@ni/eslint-config-typescript", + "version": "4.4.4", + "description": "NI's TypeScript ESLint Shareable Config", + "main": "index.js", + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "/*.js", + "!/.*.js", + "/lib/*" + ], + "peerDependencies": { + "@ni/eslint-config-javascript": "^4.4.0", + "typescript-eslint": "^8.0.0" + }, + "exports": { + ".": "./index.js", + "./requiring-type-checking": "./requiring-type-checking.js" + } } diff --git a/packages/eslint-config-typescript/requiring-type-checking.js b/packages/eslint-config-typescript/requiring-type-checking.js index 70a6cba..919de05 100644 --- a/packages/eslint-config-typescript/requiring-type-checking.js +++ b/packages/eslint-config-typescript/requiring-type-checking.js @@ -1,180 +1,185 @@ -module.exports = { - extends: [ - 'plugin:@typescript-eslint/recommended-type-checked', - 'plugin:@typescript-eslint/stylistic-type-checked', - './lib/extensions-requiring-type-checking' - ], - parser: '@typescript-eslint/parser', - rules: { - /* - Overrides to TypeScript recommended rules: - https://github.com/typescript-eslint/typescript-eslint/tree/v7.18.0/packages/eslint-plugin/src/configs/recommended-type-checked.ts - */ - - '@typescript-eslint/no-duplicate-enum-values': 'off', - '@typescript-eslint/no-duplicate-type-constituents': 'off', - '@typescript-eslint/no-loss-of-precision': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/no-unsafe-declaration-merging': 'off', - '@typescript-eslint/no-unsafe-enum-comparison': 'off', - - /* - This rule can be confusing if you're not familiar with JavaScript's rules for binding `this`, - but in our experience when it reports an error it is usually indicitave of a real bug. - - Common ways to resolve this error include: - 1. Wrapping the function with an arrow function, which establishes `this` based on the context - the function is defined in rather than where it's called from. - ``` - // Good, this will refer to the class where this code is defined - array.sort(() => this.compare()); - - // Bad, this will refer to the context where this code is invoked from - array.sort(this.compare); +import typescriptPlugin from 'typescript-eslint'; +import extensionsTypeChecked from './lib/extensions-requiring-type-checking.js'; + +export default [ + ...typescriptPlugin.configs.recommendedTypeChecked, + ...typescriptPlugin.configs.stylisticTypeChecked, + ...extensionsTypeChecked, + { + languageOptions: { + parser: typescriptPlugin.parser + }, + rules: { + /* + Overrides to TypeScript recommended rules: + https://github.com/typescript-eslint/typescript-eslint/tree/v7.18.0/packages/eslint-plugin/src/configs/recommended-type-checked.ts + */ + + '@typescript-eslint/no-duplicate-enum-values': 'off', + '@typescript-eslint/no-duplicate-type-constituents': 'off', + '@typescript-eslint/no-loss-of-precision': 'off', + '@typescript-eslint/no-redundant-type-constituents': 'off', + '@typescript-eslint/no-unsafe-declaration-merging': 'off', + '@typescript-eslint/no-unsafe-enum-comparison': 'off', + + /* + This rule can be confusing if you're not familiar with JavaScript's rules for binding `this`, + but in our experience when it reports an error it is usually indicitave of a real bug. + + Common ways to resolve this error include: + 1. Wrapping the function with an arrow function, which establishes `this` based on the context + the function is defined in rather than where it's called from. ``` - 2. For callbacks passed to `addEventListener` which need to be referenced in `removeEventListener`, - the arrow function should be stored in a variable since it must refer to the same instance of the function. - ``` - // Good - const handler = event => this.clickHandler(); - elt.addEventListener('click', handler); - elt.removeEventListener('click', handler); - - // Bad, violates this rule - elt.addEventListener('click', this.clickHandler); - elt.removeEventListener('click', this.clickHandler); - - // Bad, removeEventListener isn't removing the original handler - elt.addEventListener('click', event => this.clickHandler()); - elt.removeEventListener('click', event => this.clickHandler()); - 3. If the function doesn't use `this` to refer to an instance or other static members, you can change the function to be static and the rule will ignore it. - */ - '@typescript-eslint/unbound-method': ['error', { ignoreStatic: true }], - - /* - Overrides to TypeScript type-checked stylistic rules: - https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic-type-checked.ts - */ - - '@typescript-eslint/consistent-generic-constructors': 'off', - '@typescript-eslint/prefer-regexp-exec': 'off', - - /* - Overrides to Typescript rules outside of the recommended configuration: - */ - - /* - Most of this configuration is identitical to the default with exceptions called out in comments below - */ - '@typescript-eslint/naming-convention': [ - 'error', - // Allow properties with custom-element-names, commonly used in HTMLElementNameTagMap - { - selector: 'property', - format: null, - filter: { - // custom element regex adapted from https://html-validate.org/rules/element-name.html - regex: '^[a-z][a-z0-9\\-._]*-[a-z0-9\\-._]*$', - match: true - } - }, - // The default configuration for this rule requires that enum members - // follow the camelCase style, which doesn't match the existing convention - // within NI and the broader TS community to use PascalCase. - { - selector: 'enumMember', - format: ['PascalCase'], - }, - { - selector: 'variable', - format: ['camelCase', 'UPPER_CASE'], - leadingUnderscore: 'allow', - trailingUnderscore: 'allow', - }, - { - selector: 'typeLike', - format: ['PascalCase'], - }, - { - selector: 'import', - format: ['camelCase', 'PascalCase'], - }, - { - selector: 'default', - format: ['camelCase'], - leadingUnderscore: 'allow', - trailingUnderscore: 'allow', - }, - ], - - '@typescript-eslint/no-base-to-string': 'error', - - '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreArrowShorthand: true }], - - /* [strict-null-checks] */ - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', - - /* [strict-null-checks] */ - '@typescript-eslint/no-unnecessary-condition': 'off', - - '@typescript-eslint/no-unnecessary-qualifier': 'error', - - '@typescript-eslint/no-unnecessary-type-arguments': 'error', - - '@typescript-eslint/no-unsafe-argument': 'error', - - '@typescript-eslint/non-nullable-type-assertion-style': 'error', - - '@typescript-eslint/prefer-includes': 'error', - - /* - Both nullish coalescing (`??`) and logical OR (`||`) may be used - to provide default values in specific cases. - - Developers should choose the strictest operator for their use case: - - `??` to provide a default for nullish values (null or undefined). - - `||` to provide a default for values that are nullish or one of: empty string / boolean false. - - Logical OR checks should not be used for other falsy values such as numbers (0, -0, 0n, NaN). - */ - '@typescript-eslint/prefer-nullish-coalescing': 'off', - - '@typescript-eslint/prefer-optional-chain': 'error', - - '@typescript-eslint/prefer-readonly': 'error', - - /* - This rule requires adding `readonly` keywords to all levels of non-primitive parameters in order to prevent - any part of the parameter from being mutated. While the spirit of preferring not to mutate inputs is correct, - requiring it to be encoded via `readonly` is overly burdensome. - */ - '@typescript-eslint/prefer-readonly-parameter-types': 'off', - - '@typescript-eslint/prefer-reduce-type-parameter': 'error', - - '@typescript-eslint/prefer-return-this-type': 'error', - - '@typescript-eslint/prefer-string-starts-ends-with': 'error', - - '@typescript-eslint/promise-function-async': 'error', - - '@typescript-eslint/require-array-sort-compare': 'error', - - /* - [strict-null-checks] This rule requires the TypeScript strictNullChecks compiler flag. If strictNullChecks is enabled, disallow numbers - with the following configuration: - '@typescript-eslint/strict-boolean-expressions': ['error', { - allowNumber: false, - allowNullableBoolean: true, - allowNullableString: true, - allowNullableNumber: false - }] - */ - '@typescript-eslint/strict-boolean-expressions': 'off', - - /* - This rule is made redundant by `default-case` so it will never fire and is disabled. - */ - '@typescript-eslint/switch-exhaustiveness-check': 'off' + // Good, this will refer to the class where this code is defined + array.sort(() => this.compare()); + + // Bad, this will refer to the context where this code is invoked from + array.sort(this.compare); + ``` + 2. For callbacks passed to `addEventListener` which need to be referenced in `removeEventListener`, + the arrow function should be stored in a variable since it must refer to the same instance of the function. + ``` + // Good + const handler = event => this.clickHandler(); + elt.addEventListener('click', handler); + elt.removeEventListener('click', handler); + + // Bad, violates this rule + elt.addEventListener('click', this.clickHandler); + elt.removeEventListener('click', this.clickHandler); + + // Bad, removeEventListener isn't removing the original handler + elt.addEventListener('click', event => this.clickHandler()); + elt.removeEventListener('click', event => this.clickHandler()); + 3. If the function doesn't use `this` to refer to an instance or other static members, you can change the function to be static and the rule will ignore it. + */ + '@typescript-eslint/unbound-method': ['error', { ignoreStatic: true }], + + /* + Overrides to TypeScript type-checked stylistic rules: + https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic-type-checked.ts + */ + + '@typescript-eslint/consistent-generic-constructors': 'off', + '@typescript-eslint/prefer-regexp-exec': 'off', + + /* + Overrides to Typescript rules outside of the recommended configuration: + */ + + /* + Most of this configuration is identitical to the default with exceptions called out in comments below + */ + '@typescript-eslint/naming-convention': [ + 'error', + // Allow properties with custom-element-names, commonly used in HTMLElementNameTagMap + { + selector: 'property', + format: null, + filter: { + // custom element regex adapted from https://html-validate.org/rules/element-name.html + regex: '^[a-z][a-z0-9\\-._]*-[a-z0-9\\-._]*$', + match: true + } + }, + // The default configuration for this rule requires that enum members + // follow the camelCase style, which doesn't match the existing convention + // within NI and the broader TS community to use PascalCase. + { + selector: 'enumMember', + format: ['PascalCase'], + }, + { + selector: 'variable', + format: ['camelCase', 'UPPER_CASE'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + { + selector: 'import', + format: ['camelCase', 'PascalCase'], + }, + { + selector: 'default', + format: ['camelCase'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + }, + ], + + '@typescript-eslint/no-base-to-string': 'error', + + '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreArrowShorthand: true }], + + /* [strict-null-checks] */ + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', + + /* [strict-null-checks] */ + '@typescript-eslint/no-unnecessary-condition': 'off', + + '@typescript-eslint/no-unnecessary-qualifier': 'error', + + '@typescript-eslint/no-unnecessary-type-arguments': 'error', + + '@typescript-eslint/no-unsafe-argument': 'error', + + '@typescript-eslint/non-nullable-type-assertion-style': 'error', + + '@typescript-eslint/prefer-includes': 'error', + + /* + Both nullish coalescing (`??`) and logical OR (`||`) may be used + to provide default values in specific cases. + + Developers should choose the strictest operator for their use case: + - `??` to provide a default for nullish values (null or undefined). + - `||` to provide a default for values that are nullish or one of: empty string / boolean false. + + Logical OR checks should not be used for other falsy values such as numbers (0, -0, 0n, NaN). + */ + '@typescript-eslint/prefer-nullish-coalescing': 'off', + + '@typescript-eslint/prefer-optional-chain': 'error', + + '@typescript-eslint/prefer-readonly': 'error', + + /* + This rule requires adding `readonly` keywords to all levels of non-primitive parameters in order to prevent + any part of the parameter from being mutated. While the spirit of preferring not to mutate inputs is correct, + requiring it to be encoded via `readonly` is overly burdensome. + */ + '@typescript-eslint/prefer-readonly-parameter-types': 'off', + + '@typescript-eslint/prefer-reduce-type-parameter': 'error', + + '@typescript-eslint/prefer-return-this-type': 'error', + + '@typescript-eslint/prefer-string-starts-ends-with': 'error', + + '@typescript-eslint/promise-function-async': 'error', + + '@typescript-eslint/require-array-sort-compare': 'error', + + /* + [strict-null-checks] This rule requires the TypeScript strictNullChecks compiler flag. If strictNullChecks is enabled, disallow numbers + with the following configuration: + '@typescript-eslint/strict-boolean-expressions': ['error', { + allowNumber: false, + allowNullableBoolean: true, + allowNullableString: true, + allowNullableNumber: false + }] + */ + '@typescript-eslint/strict-boolean-expressions': 'off', + + /* + This rule is made redundant by `default-case` so it will never fire and is disabled. + */ + '@typescript-eslint/switch-exhaustiveness-check': 'off' + } } -}; +]; diff --git a/tests/angular/.eslintrc.js b/tests/angular/.eslintrc.js deleted file mode 100644 index 7177089..0000000 --- a/tests/angular/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -// Test TypeScript and templates together to process inline templates. -module.exports = { - ignorePatterns: ['*.js'], - overrides: [{ - extends: [ - '@ni/eslint-config-angular', - '@ni/eslint-config-angular/requiring-type-checking' - ], - files: ['*.ts'], - parserOptions: { - project: './tsconfig.json', - // Resolve the project relative to this file's directory. - // https://stackoverflow.com/questions/64933543/parsing-error-cannot-read-file-tsconfig-json-eslint - tsconfigRootDir: __dirname - } - }, { - extends: '@ni/eslint-config-angular/template', - files: ['*.html'] - }], - root: true -}; diff --git a/tests/angular/custom-ignore-attributes/.eslintrc.js b/tests/angular/custom-ignore-attributes/.eslintrc.js deleted file mode 100644 index f0dfcf3..0000000 --- a/tests/angular/custom-ignore-attributes/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -const {ignoreAttributes} = require('@ni/eslint-config-angular/template/options'); - -module.exports = { - overrides: [{ - files: ['*.html'], - rules: { - '@angular-eslint/template/i18n': [ - 'error', - { - checkId: false, - ignoreAttributes: [...ignoreAttributes.all, 'custom-field'] - } - ], - } - }, { - files: ['*.spec.ts*.html'], - rules: { - '@angular-eslint/template/i18n': 'off' - } - }] -}; diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js new file mode 100644 index 0000000..0f2d504 --- /dev/null +++ b/tests/angular/eslint.config.js @@ -0,0 +1,59 @@ +import { fileURLToPath } from 'url'; +import path from 'path'; + +import angular from '@ni/eslint-config-angular'; +import angularTemplate from '@ni/eslint-config-angular/template'; +import angularRequiringTypeChecking from '@ni/eslint-config-angular/requiring-type-checking'; +import { ignoreAttributes } from '@ni/eslint-config-angular/template/options'; + +import typescriptPlugin from 'typescript-eslint'; +import angularTemplatePlugin from 'angular-eslint'; +import { defineConfig } from 'eslint/config'; + +const tsconfigRootDir = path.dirname(fileURLToPath(import.meta.url)); + +export default defineConfig([ + { ignores: ['*.js'] }, + { + files: ['**/*.ts'], + extends: [...angular, ...angularRequiringTypeChecking], + languageOptions: { + parser: typescriptPlugin.parser, + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir, + }, + }, + }, + { + files: ['*.html'], + extends: [...angularTemplate], + languageOptions: { parser: angularTemplatePlugin.templateParser }, + }, + { + files: ['custom-ignore-attributes/**/*.html'], + languageOptions: { parser: angularTemplatePlugin.templateParser }, + plugins: { + '@angular-eslint/template': angularTemplatePlugin.templatePlugin, + }, + rules: { + '@angular-eslint/template/i18n': [ + 'error', + { + checkId: false, + ignoreAttributes: [...ignoreAttributes.all, 'custom-field'], + }, + ], + }, + }, + { + files: ['**/*.spec.ts*.html'], + languageOptions: { parser: angularTemplatePlugin.templateParser }, + plugins: { + '@angular-eslint/template': angularTemplatePlugin.templatePlugin, + }, + rules: { + '@angular-eslint/template/i18n': 'off', + }, + }, +]); diff --git a/tests/angular/package.json b/tests/angular/package.json index 3463583..b35c1e8 100644 --- a/tests/angular/package.json +++ b/tests/angular/package.json @@ -1,4 +1,5 @@ { + "type": "module", "name": "@ni/angular-test", "version": "1.0.0", "private": true, diff --git a/tests/javascript/.eslintrc.js b/tests/javascript/.eslintrc.js deleted file mode 100644 index dbabe91..0000000 --- a/tests/javascript/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript', - root: true -}; \ No newline at end of file diff --git a/tests/javascript/eslint.config.js b/tests/javascript/eslint.config.js new file mode 100644 index 0000000..9ff51f5 --- /dev/null +++ b/tests/javascript/eslint.config.js @@ -0,0 +1,11 @@ +import javascript from '@ni/eslint-config-javascript'; + +export default [ + ...javascript, + { + files: ['*.config.js'], + rules: { + 'import/no-default-export': 'off', + }, + }, +]; diff --git a/tests/javascript/package.json b/tests/javascript/package.json index 0788365..db9cc8f 100644 --- a/tests/javascript/package.json +++ b/tests/javascript/package.json @@ -1,4 +1,5 @@ { + "type": "module", "name": "@ni/javascript-test", "version": "1.0.0", "private": true, diff --git a/tests/playwright-requiring-type-checking/.eslintrc.js b/tests/playwright-requiring-type-checking/.eslintrc.js deleted file mode 100644 index f328aeb..0000000 --- a/tests/playwright-requiring-type-checking/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - extends: [ - '@ni/eslint-config-playwright', - '@ni/eslint-config-playwright/requiring-type-checking' - ], - ignorePatterns: ['*.js'], - parserOptions: { - project: ['./tsconfig.json'], - // Resolve the project relative to this file's directory. - // https://stackoverflow.com/questions/64933543/parsing-error-cannot-read-file-tsconfig-json-eslint - tsconfigRootDir: __dirname, - }, - root: true, - overrides: [ - { - files: [ - '*.ts', - ], - rules: { - // In this example app, all files are allowed to refer to playwright packages from devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - } - ] -}; diff --git a/tests/playwright-requiring-type-checking/eslint.config.js b/tests/playwright-requiring-type-checking/eslint.config.js new file mode 100644 index 0000000..9d63af3 --- /dev/null +++ b/tests/playwright-requiring-type-checking/eslint.config.js @@ -0,0 +1,33 @@ +import { fileURLToPath } from 'url'; +import path from 'path'; +import playwright from '@ni/eslint-config-playwright'; +import playwrightRequiringTypeChecking from '@ni/eslint-config-playwright/requiring-type-checking'; + +const tsconfigRootDir = path.dirname(fileURLToPath(import.meta.url)); + +export default [ + ...playwright, + ...playwrightRequiringTypeChecking, + { + ignores: ['*.js'], + }, + { + files: ['*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir, + }, + }, + rules: { + // In this example app, all files are allowed to refer to playwright packages from devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + }, + }, + { + files: ['*.config.js'], + rules: { + 'import/no-default-export': 'off', + }, + }, +]; \ No newline at end of file diff --git a/tests/playwright-requiring-type-checking/package.json b/tests/playwright-requiring-type-checking/package.json index 16f4d4c..63f9462 100644 --- a/tests/playwright-requiring-type-checking/package.json +++ b/tests/playwright-requiring-type-checking/package.json @@ -1,4 +1,5 @@ { + "type": "module", "name": "@ni/playwright-requiring-type-checking-test", "version": "1.0.0", "private": true, diff --git a/tests/playwright/.eslintrc.js b/tests/playwright/.eslintrc.js deleted file mode 100644 index 137406e..0000000 --- a/tests/playwright/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-playwright', - root: true, - overrides: [ - { - files: [ - '*.ts', - ], - rules: { - // In this example app, all files are allowed to refer to playwright packages from devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - } - ] -}; diff --git a/tests/playwright/eslint.config.js b/tests/playwright/eslint.config.js new file mode 100644 index 0000000..bbc51e6 --- /dev/null +++ b/tests/playwright/eslint.config.js @@ -0,0 +1,18 @@ +import playwright from '@ni/eslint-config-playwright'; + +export default [ + ...playwright, + { + files: ['*.ts'], + rules: { + // In this example app, all files are allowed to refer to playwright packages from devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + }, + }, + { + files: ['*.config.js'], + rules: { + 'import/no-default-export': 'off', + }, + }, +]; diff --git a/tests/playwright/package.json b/tests/playwright/package.json index 87bcf55..5e49a7f 100644 --- a/tests/playwright/package.json +++ b/tests/playwright/package.json @@ -1,4 +1,5 @@ { + "type": "commonjs", "name": "@ni/playwright-test", "version": "1.0.0", "private": true, diff --git a/tests/print-evaluated-rules/.eslintrc.js b/tests/print-evaluated-rules/.eslintrc.js deleted file mode 100644 index b97633f..0000000 --- a/tests/print-evaluated-rules/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-javascript', - root: true -}; diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js new file mode 100644 index 0000000..744b76f --- /dev/null +++ b/tests/print-evaluated-rules/eslint.config.js @@ -0,0 +1,12 @@ +import javascript from '@ni/eslint-config-javascript'; + +export default [ + ...javascript, + { + files: ['*.js'], + rules: { + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + }, + }, +]; \ No newline at end of file diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index e9ad36c..f87d939 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -1,30 +1,48 @@ -const { ESLint } = require('eslint'); -const angularRules = require('@ni/eslint-config-angular').rules; -const angularTemplateRules = require('@ni/eslint-config-angular/template').rules; -const fs = require('fs'); -const path = require('path'); -const yargs = require('yargs/yargs'); -const { hideBin } = require('yargs/helpers'); +/* eslint-disable no-console */ +/* eslint-disable no-undef */ +import { ESLint } from 'eslint'; +import angularRules from '@ni/eslint-config-angular'; +import angularTemplateRules from '@ni/eslint-config-angular/template'; +import fs from 'fs'; +import path from 'path'; +import yargs from 'yargs/yargs'; +import { hideBin } from 'yargs/helpers'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); (async () => { const argv = yargs(hideBin(process.argv)) .option('audit', { default: true, type: 'boolean' }) - .option('diff', { default: false, description: 'diff the evaluated rules with old rules from rules.txt', type: 'boolean' }) - .option('no-audit', { description: 'return the evaluated rules only', type: 'boolean' }) + .option('diff', { + default: false, + description: 'diff the evaluated rules with old rules from rules.txt', + type: 'boolean', + }) + .option('no-audit', { + description: 'return the evaluated rules only', + type: 'boolean', + }) .scriptName('') - .wrap(null) - .argv; + .wrap(null).argv; const hasWarn = function (config) { - return JSON.stringify(config).indexOf('"warn"') !== -1; + return JSON.stringify(config).includes('"warn"'); }; - const eslint = new ESLint(); - const configEslint = await eslint.calculateConfigForFile(require.resolve('@ni/javascript-test/index.js')); - const configTypescript = await eslint.calculateConfigForFile(require.resolve('@ni/typescript-test/index.ts')); - const configTypescriptTypechecked = await eslint.calculateConfigForFile(require.resolve('@ni/typescript-requiring-type-checking-test/index.ts')); - const configAngular = await eslint.calculateConfigForFile(require.resolve('@ni/angular-test/index.ts')); - const configAngularTemplate = await eslint.calculateConfigForFile(require.resolve('@ni/angular-test/index.html')); + const testDir = path.resolve(__dirname, '..'); + const jsPath = path.join(testDir, 'javascript', 'index.js'); + const tsPath = path.join(testDir, 'typescript', 'index.ts'); + const tsTypePath = path.join(testDir, 'typescript-requiring-type-checking', 'index.ts'); + const angularTsPath = path.join(testDir, 'angular', 'index.ts'); + const angularHtmlPath = path.join(testDir, 'angular', 'index.html'); + + const configEslint = await calculateConfigForFile(jsPath); + const configTypescript = await calculateConfigForFile(tsPath); + const configTypescriptTypechecked = await calculateConfigForFile(tsTypePath); + const configAngular = await calculateConfigForFile(angularTsPath); + const configAngularTemplate = await calculateConfigForFile(angularHtmlPath); const getRules = function () { return { @@ -59,9 +77,9 @@ const { hideBin } = require('yargs/helpers'); if (logs.length) { fs.writeFileSync(path.join(dir, 'rules-diff.txt'), logs.join('')); - global.console.log(logs.join('')); + console.log(logs.join('')); } else { - global.console.log('There were no changes.'); + console.log('There were no changes.'); } return; @@ -73,28 +91,53 @@ const { hideBin } = require('yargs/helpers'); fs.mkdirSync(dir); } fs.writeFileSync(path.join(dir, 'rules.txt'), json); - global.console.log(json); + console.log(json); return; } - const getDivergedRules = rules => ( - Object.keys(rules) - .filter(key => !key.startsWith('@angular-eslint')) - .filter(key => !configTypescript.rules[key] && !configTypescriptTypechecked.rules[key]) - .reduce((config, key) => { - config[key] = rules[key]; - return config; - }, {}) + const getDivergedRules = rules => Object.keys(rules) + .filter(key => !key.startsWith('@angular-eslint')) + .filter( + key => !configTypescript.rules[key] + && !configTypescriptTypechecked.rules[key] + ) + .reduce((config, key) => { + config[key] = rules[key]; + return config; + }, {}); + + const angularDivergedRules = getDivergedRules( + angularRules.map(cfg => cfg.rules) + ); + const angularTemplateDivergedRules = getDivergedRules( + angularTemplateRules.map(cfg => cfg.rules) + ); + const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length + || !!Object.keys(angularTemplateDivergedRules).length; + + console.log('-------- Audits:'); + console.log(`Evaluated ESLint rules has warn?: ${hasWarn(configEslint)}`); + console.log( + `Evaluated TypeScript rules has warn?: ${hasWarn(configTypescript)}` + ); + console.log( + `Evaluated TypeScript type checking rules has warn?: ${hasWarn( + configTypescriptTypechecked + )}` + ); + console.log(`Evaluated Angular rules has warn?: ${hasWarn(configAngular)}`); + console.log( + `Evaluated Angular Template rules has warn?: ${hasWarn( + configAngularTemplate + )}` ); - const angularDivergedRules = getDivergedRules(angularRules); - const angularTemplateDivergedRules = getDivergedRules(angularTemplateRules); - const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length || !!Object.keys(angularTemplateDivergedRules).length; - - global.console.log('-------- Audits:'); - global.console.log(`Evaluated ESLint rules has warn?: ${hasWarn(configEslint)}`); - global.console.log(`Evaluated TypeScript rules has warn?: ${hasWarn(configTypescript)}`); - global.console.log(`Evaluated TypeScript type checking rules has warn?: ${hasWarn(configTypescriptTypechecked)}`); - global.console.log(`Evaluated Angular rules has warn?: ${hasWarn(configAngular)}`); - global.console.log(`Evaluated Angular Template rules has warn?: ${hasWarn(configAngularTemplate)}`); - global.console.log(`Angular has diverged rules?: ${angularHasDivergedRules}`); + console.log(`Angular has diverged rules?: ${angularHasDivergedRules}`); })(); + +async function calculateConfigForFile(filePath) { + const eslint = new ESLint({ + cwd: path.resolve(filePath, '..') + }); + + return await eslint.calculateConfigForFile(filePath); +} diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index 8846c7a..5fb8786 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -1,4 +1,5 @@ { + "type": "module", "name": "@ni/print-evaluated-rules-test", "version": "1.0.0", "private": true, @@ -16,7 +17,7 @@ "@ni/javascript-test": "*", "@ni/typescript-test": "*", "@ni/typescript-requiring-type-checking-test": "*", - "eslint": "^8.57.0" + "eslint": "^9.0.0" }, "dependencies": { "yargs": "^17.7.2" diff --git a/tests/typescript-requiring-type-checking/.eslintrc.js b/tests/typescript-requiring-type-checking/.eslintrc.js deleted file mode 100644 index a907b9f..0000000 --- a/tests/typescript-requiring-type-checking/.eslintrc.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript', - '@ni/eslint-config-typescript/requiring-type-checking' - ], - ignorePatterns: ['*.js'], - parserOptions: { - project: ['./tsconfig.json'], - // Resolve the project relative to this file's directory. - // https://stackoverflow.com/questions/64933543/parsing-error-cannot-read-file-tsconfig-json-eslint - tsconfigRootDir: __dirname, - }, - root: true -}; diff --git a/tests/typescript-requiring-type-checking/eslint.config.js b/tests/typescript-requiring-type-checking/eslint.config.js new file mode 100644 index 0000000..774e9d9 --- /dev/null +++ b/tests/typescript-requiring-type-checking/eslint.config.js @@ -0,0 +1,23 @@ +import { fileURLToPath } from 'url'; +import path from 'path'; +import typescript from '@ni/eslint-config-typescript'; +import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; + +const tsconfigRootDir = path.dirname(fileURLToPath(import.meta.url)); + +export default [ + { + ignores: ['*.js'], + }, + ...typescript, + ...typescriptRequiringTypeChecking, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir, + }, + }, + }, +]; diff --git a/tests/typescript-requiring-type-checking/package.json b/tests/typescript-requiring-type-checking/package.json index 937c019..fa42018 100644 --- a/tests/typescript-requiring-type-checking/package.json +++ b/tests/typescript-requiring-type-checking/package.json @@ -1,4 +1,5 @@ { + "type": "module", "name": "@ni/typescript-requiring-type-checking-test", "version": "1.0.0", "private": true, diff --git a/tests/typescript/.eslintrc.js b/tests/typescript/.eslintrc.js deleted file mode 100644 index 2680f66..0000000 --- a/tests/typescript/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - extends: '@ni/eslint-config-typescript', - root: true -}; diff --git a/tests/typescript/eslint.config.js b/tests/typescript/eslint.config.js new file mode 100644 index 0000000..038801a --- /dev/null +++ b/tests/typescript/eslint.config.js @@ -0,0 +1,16 @@ +import { fileURLToPath } from 'url'; +import path from 'path'; +import typescript from '@ni/eslint-config-typescript'; +import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; + +import typescript from '@ni/eslint-config-typescript'; + +export default [ + ...typescript, + { + files: ['*.js'], + rules: { + 'import/no-default-export': 'off', + }, + }, +]; \ No newline at end of file diff --git a/tests/typescript/package.json b/tests/typescript/package.json index 9b3acb1..b389c04 100644 --- a/tests/typescript/package.json +++ b/tests/typescript/package.json @@ -1,4 +1,5 @@ { + "type": "module", "name": "@ni/typescript-test", "version": "1.0.0", "private": true, From ff130281ac34a68e0a9764491f9f9208868ac4da Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 15 Sep 2025 15:52:55 +0530 Subject: [PATCH 02/53] fix: issues Signed-off-by: gokulprasanth-ni --- .../eslint-config-angular/eslint.config.js | 18 +++++------ packages/eslint-config-angular/index.js | 6 ---- .../requiring-type-checking.js | 26 ++++++++-------- packages/eslint-config-javascript/index.js | 22 ++++++------- .../rules/best-practices.js | 2 +- .../eslint-config-javascript/rules/style.js | 8 +---- .../eslint-config-playwright/eslint.config.js | 16 +++++----- .../tools/print-available-rules.js | 1 - .../eslint-config-typescript/eslint.config.js | 20 ++++++------ packages/eslint-config-typescript/index.js | 4 +-- .../lib/extensions-requiring-type-checking.js | 6 ++-- .../lib/extensions.js | 4 +-- .../tools/print-available-rules.js | 31 ++++++++++--------- tests/javascript/eslint.config.js | 14 ++++----- tests/playwright/eslint.config.js | 28 ++++++++--------- tests/print-evaluated-rules/eslint.config.js | 16 +++++----- tests/typescript/eslint.config.js | 19 +++++------- 17 files changed, 112 insertions(+), 129 deletions(-) diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index 68b70b7..50b45f3 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -1,13 +1,13 @@ import javascript from '@ni/eslint-config-javascript'; export default [ - ...javascript, - { - files: ['**/*.js'], - rules: { - 'import/no-default-export': 'off', - 'import/no-extraneous-dependencies': 'off', - 'import/no-unresolved': 'off', - }, - }, + ...javascript, + { + files: ['**/*.js'], + rules: { + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-unresolved': 'off', + }, + }, ]; \ No newline at end of file diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index ad34f3c..ed9a2c6 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -7,12 +7,6 @@ export default [ { processor: angular.processInlineTemplates, rules: { - /* - Overrides to Angular recommended rules: - https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.json - */ - - '@angular-eslint/no-host-metadata-property': 'error', /* '@angular-eslint/no-input-rename' rule notes: diff --git a/packages/eslint-config-angular/requiring-type-checking.js b/packages/eslint-config-angular/requiring-type-checking.js index 4e59d0b..4cc11c1 100644 --- a/packages/eslint-config-angular/requiring-type-checking.js +++ b/packages/eslint-config-angular/requiring-type-checking.js @@ -2,20 +2,20 @@ import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requir import typescriptPlugin from 'typescript-eslint'; export default [ - ...typescriptRequiringTypeChecking, - { - languageOptions: { - parser: typescriptPlugin.parser, - }, - }, - { - files: ['**/*.spec.ts'], - rules: { - /* + ...typescriptRequiringTypeChecking, + { + languageOptions: { + parser: typescriptPlugin.parser, + }, + }, + { + files: ['**/*.spec.ts'], + rules: { + /* Spies used by Angular application tests result in a significant number of unbound methods so this rule is disabled for test specs in Angular projects. */ - '@typescript-eslint/unbound-method': 'off', - }, - }, + '@typescript-eslint/unbound-method': 'off', + }, + }, ]; diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index 421ec2d..10f9507 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -10,7 +10,7 @@ import { imports } from './rules/imports.js'; import { strict } from './rules/strict.js'; export default [ - stylisticPlugin.configs['disable-legacy'], + stylisticPlugin.configs['disable-legacy'], bestPractices, errors, node, @@ -19,14 +19,14 @@ export default [ es6, imports, strict, - { - plugins: { - '@stylistic': stylisticPlugin, - import: importPlugin, - }, - languageOptions: { - ecmaVersion: 2022, - sourceType: 'module' - } - }, + { + plugins: { + '@stylistic': stylisticPlugin, + import: importPlugin, + }, + languageOptions: { + ecmaVersion: 2022, + sourceType: 'module' + } + }, ]; \ No newline at end of file diff --git a/packages/eslint-config-javascript/rules/best-practices.js b/packages/eslint-config-javascript/rules/best-practices.js index 89a049e..609fd04 100644 --- a/packages/eslint-config-javascript/rules/best-practices.js +++ b/packages/eslint-config-javascript/rules/best-practices.js @@ -1,4 +1,4 @@ -export const bestPractices ={ +export const bestPractices = { rules: { /* enforces getter/setter pairs in objects diff --git a/packages/eslint-config-javascript/rules/style.js b/packages/eslint-config-javascript/rules/style.js index 272a24f..4c392f9 100644 --- a/packages/eslint-config-javascript/rules/style.js +++ b/packages/eslint-config-javascript/rules/style.js @@ -111,12 +111,6 @@ export const style = { */ '@stylistic/function-call-argument-newline': ['error', 'consistent'], - /* - enforce spacing between functions and their invocations - https://eslint.style/rules/func-call-spacing - */ - '@stylistic/func-call-spacing': ['error', 'never'], - /* requires function names to match the name of the variable or property to which they are assigned https://eslint.org/docs/rules/func-name-matching @@ -465,7 +459,7 @@ export const style = { deprecated in favor of func-call-spacing https://eslint.style/rules/function-call-spacing */ - '@stylistic/function-call-spacing': 'off', + '@stylistic/function-call-spacing': ['error', 'never'], /* disallow tab characters entirely diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index cfa57ec..b9af386 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -1,12 +1,12 @@ import javascript from '@ni/eslint-config-javascript'; export default [ - ...javascript, - { - rules: { - 'import/no-default-export': 'off', - 'import/no-extraneous-dependencies': 'off', - 'import/no-unresolved': 'off', - }, - }, + ...javascript, + { + rules: { + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-unresolved': 'off', + }, + }, ]; diff --git a/packages/eslint-config-playwright/tools/print-available-rules.js b/packages/eslint-config-playwright/tools/print-available-rules.js index 3f87c86..0dcedb3 100644 --- a/packages/eslint-config-playwright/tools/print-available-rules.js +++ b/packages/eslint-config-playwright/tools/print-available-rules.js @@ -20,4 +20,3 @@ console.log('Playwright Recommended:'); print(playwrightRecommended); console.log('Remaining Playwright Rules:'); print(playwright); - diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index 76d66b3..deaa474 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -1,14 +1,14 @@ import javascript from '@ni/eslint-config-javascript'; export default [ - ...javascript, - { - files: ['**/*.js'], - rules: { - 'import/no-default-export': 'off', - 'import/extensions': 'off', - 'import/no-extraneous-dependencies': 'off', - 'import/no-unresolved': 'off', - }, - }, + ...javascript, + { + files: ['**/*.js'], + rules: { + 'import/no-default-export': 'off', + 'import/extensions': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-unresolved': 'off', + }, + }, ]; diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index c1ce133..f6a907f 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -95,7 +95,7 @@ export default [ definitions, consistent with classes. Object literal types should use commas consistent with object literals. */ - '@typescript-eslint/member-delimiter-style': ['error', { + '@stylistic/member-delimiter-style': ['error', { overrides: { interface: { singleline: { @@ -217,7 +217,7 @@ export default [ */ '@typescript-eslint/sort-type-union-intersection-members': 'off', - '@typescript-eslint/type-annotation-spacing': 'error', + '@stylistic/type-annotation-spacing': 'error', /* This rule is better enforced with the TypeScript `noImplicitAny` and diff --git a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js index 153d732..6420856 100644 --- a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js +++ b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js @@ -1,4 +1,4 @@ -export const extensionsRequiringTypeChecking = { +export default [{ rules: { 'dot-notation': 'off', '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], @@ -7,7 +7,7 @@ export const extensionsRequiringTypeChecking = { '@typescript-eslint/no-implied-eval': 'error', 'no-throw-literal': 'off', - '@typescript-eslint/no-throw-literal': 'error', + '@typescript-eslint/only-throw-error': 'error', 'require-await': 'off', '@typescript-eslint/require-await': 'error', @@ -15,4 +15,4 @@ export const extensionsRequiringTypeChecking = { 'no-return-await': 'off', '@typescript-eslint/return-await': ['error', 'always'], } -}; +}]; diff --git a/packages/eslint-config-typescript/lib/extensions.js b/packages/eslint-config-typescript/lib/extensions.js index da4e931..bf6e6fc 100644 --- a/packages/eslint-config-typescript/lib/extensions.js +++ b/packages/eslint-config-typescript/lib/extensions.js @@ -1,4 +1,4 @@ -export const extensions = { +export default [{ rules: { /* The following are extension rules that replace core JavaScript rules to support @@ -75,4 +75,4 @@ export const extensions = { 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', } -}; +}]; diff --git a/packages/eslint-config-typescript/tools/print-available-rules.js b/packages/eslint-config-typescript/tools/print-available-rules.js index 7982277..f368bf8 100644 --- a/packages/eslint-config-typescript/tools/print-available-rules.js +++ b/packages/eslint-config-typescript/tools/print-available-rules.js @@ -1,22 +1,23 @@ +/* eslint-disable no-undef */ +/* eslint-disable no-console */ // eslint-plugin-import doesn't know how to resolve entry points in commonjs modules that are // declared using "export" rather than the old "main" syntax in package.json. // See https://github.com/typescript-eslint/typescript-eslint/issues/7565 // and https://github.com/import-js/eslint-plugin-import/issues/2703 -// eslint-disable-next-line import/no-unresolved -const plugin = require('@typescript-eslint/eslint-plugin'); +import typescriptPlugin from 'typescript-eslint'; const isTrue = val => val !== undefined && val !== false; -const recommended = key => isTrue(plugin.rules[key].meta.docs.recommended); -const requiresTypeChecking = key => isTrue(plugin.rules[key].meta.docs.requiresTypeChecking); -const extendsBaseRule = key => isTrue(plugin.rules[key].meta.docs.extendsBaseRule); +const recommended = key => isTrue(typescriptPlugin.plugin.rules[key].meta.docs.recommended); +const requiresTypeChecking = key => isTrue(typescriptPlugin.plugin.rules[key].meta.docs.requiresTypeChecking); +const extendsBaseRule = key => isTrue(typescriptPlugin.plugin.rules[key].meta.docs.extendsBaseRule); const print = keys => { const results = {}; keys.forEach(key => { - results[`@typescript-eslint/${key}`] = ''; + results[`typescript-eslint/${key}`] = ''; }); - global.console.log(JSON.stringify(results, null, 4)); + console.log(JSON.stringify(results, null, 4)); }; -const sortedRules = Object.keys(plugin.rules).sort(); +const sortedRules = Object.keys(typescriptPlugin.plugin.rules).sort(); const typeScriptExtensions = sortedRules .filter(key => extendsBaseRule(key)) @@ -46,16 +47,16 @@ const typeScriptRecommendedTypeChecks = sortedRules .filter(key => recommended(key)) .filter(key => requiresTypeChecking(key)); -global.console.log('TypeScript Extensions:'); +console.log('TypeScript Extensions:'); print(typeScriptExtensions); -global.console.log('TypeScript Recommended:'); +console.log('TypeScript Recommended:'); print(typeScriptRecommended); -global.console.log('Remaining TypeScript Rules:'); +console.log('Remaining TypeScript Rules:'); print(typeScript); -global.console.log('TypeScript Extensions Requiring Type Checks:'); +console.log('TypeScript Extensions Requiring Type Checks:'); print(typeScriptExtensionsRequiringTypeChecks); -global.console.log('TypeScript Recommended Requiring Type Checks:'); +console.log('TypeScript Recommended Requiring Type Checks:'); print(typeScriptRecommendedTypeChecks); -global.console.log('Remaining TypeScript Rules Requiring Type Checks:'); -print(typeScriptRequiringTypeChecks); +console.log('Remaining TypeScript Rules Requiring Type Checks:'); +print(typeScriptRequiringTypeChecks); \ No newline at end of file diff --git a/tests/javascript/eslint.config.js b/tests/javascript/eslint.config.js index 9ff51f5..c4b7464 100644 --- a/tests/javascript/eslint.config.js +++ b/tests/javascript/eslint.config.js @@ -1,11 +1,11 @@ import javascript from '@ni/eslint-config-javascript'; export default [ - ...javascript, - { - files: ['*.config.js'], - rules: { - 'import/no-default-export': 'off', - }, - }, + ...javascript, + { + files: ['*.config.js'], + rules: { + 'import/no-default-export': 'off', + }, + }, ]; diff --git a/tests/playwright/eslint.config.js b/tests/playwright/eslint.config.js index bbc51e6..8ad867e 100644 --- a/tests/playwright/eslint.config.js +++ b/tests/playwright/eslint.config.js @@ -1,18 +1,18 @@ import playwright from '@ni/eslint-config-playwright'; export default [ - ...playwright, - { - files: ['*.ts'], - rules: { - // In this example app, all files are allowed to refer to playwright packages from devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - }, - }, - { - files: ['*.config.js'], - rules: { - 'import/no-default-export': 'off', - }, - }, + ...playwright, + { + files: ['*.ts'], + rules: { + // In this example app, all files are allowed to refer to playwright packages from devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + }, + }, + { + files: ['*.config.js'], + rules: { + 'import/no-default-export': 'off', + }, + }, ]; diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js index 744b76f..20f4fce 100644 --- a/tests/print-evaluated-rules/eslint.config.js +++ b/tests/print-evaluated-rules/eslint.config.js @@ -1,12 +1,12 @@ import javascript from '@ni/eslint-config-javascript'; export default [ - ...javascript, - { - files: ['*.js'], - rules: { - 'import/no-default-export': 'off', - 'import/no-extraneous-dependencies': 'off', - }, - }, + ...javascript, + { + files: ['*.js'], + rules: { + 'import/no-default-export': 'off', + 'import/no-extraneous-dependencies': 'off', + }, + }, ]; \ No newline at end of file diff --git a/tests/typescript/eslint.config.js b/tests/typescript/eslint.config.js index 038801a..0de43fe 100644 --- a/tests/typescript/eslint.config.js +++ b/tests/typescript/eslint.config.js @@ -1,16 +1,11 @@ -import { fileURLToPath } from 'url'; -import path from 'path'; -import typescript from '@ni/eslint-config-typescript'; -import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; - import typescript from '@ni/eslint-config-typescript'; export default [ - ...typescript, - { - files: ['*.js'], - rules: { - 'import/no-default-export': 'off', - }, - }, + ...typescript, + { + files: ['*.js'], + rules: { + 'import/no-default-export': 'off', + }, + }, ]; \ No newline at end of file From 96e9cabc655cd28066e53bc9b3a86f7c3e35c982 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 15 Sep 2025 16:01:35 +0530 Subject: [PATCH 03/53] fix: test issue Signed-off-by: gokulprasanth-ni --- tests/angular/eslint.config.js | 2 +- tests/print-evaluated-rules/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index 0f2d504..1176b8a 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -56,4 +56,4 @@ export default defineConfig([ '@angular-eslint/template/i18n': 'off', }, }, -]); +]); \ No newline at end of file diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index 5fb8786..7669334 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -11,7 +11,7 @@ "print-evaluated-rules:no-audit": "node index.js --no-audit" }, "peerDependencies": { - "@angular-eslint/eslint-plugin": "^18.4.3", + "angular-eslint": "19.0.0", "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", "@ni/javascript-test": "*", From 37d08075935aefbc00f0640626fc09f1b8efb152 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 15 Sep 2025 16:04:34 +0530 Subject: [PATCH 04/53] update angular-eslint version Signed-off-by: gokulprasanth-ni --- package-lock.json | 201 +++++++++++++--------------------------------- 1 file changed, 54 insertions(+), 147 deletions(-) diff --git a/package-lock.json b/package-lock.json index 94899be..2d3331b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -135,9 +135,9 @@ } }, "node_modules/@angular-eslint/builder": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.8.1.tgz", - "integrity": "sha512-NOMkw0xgDoDVCLkL5nkkvdd3ouDYkOGqtEmabTR7N4/kQnk1R4coOTWGCqAgMXCFdxlyjuxquDwuJ+yni81pRg==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.0.0.tgz", + "integrity": "sha512-vi68ADoEKrg2SB87jwUCaVhOhWPpXyG6X8QJzg8AiYDCQY721x1l6Pdz6WZOPruWALyoIyFGFXqtuysDGqIBhw==", "license": "MIT", "peer": true, "dependencies": { @@ -150,21 +150,21 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.4.3.tgz", - "integrity": "sha512-zdrA8mR98X+U4YgHzUKmivRU+PxzwOL/j8G7eTOvBuq8GPzsP+hvak+tyxlgeGm9HsvpFj9ERHLtJ0xDUPs8fg==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.0.0.tgz", + "integrity": "sha512-q6IaiqKYcmBW/gw55tytDucguo5E48szVCLNLHUFdN98YDDsP+KM3MPWYPyZcXpusmFfIjLdr8d41PlKmyMUpg==", "license": "MIT", "peer": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.4.3.tgz", - "integrity": "sha512-AyJbupiwTBR81P6T59v+aULEnPpZBCBxL2S5QFWfAhNCwWhcof4GihvdK2Z87yhvzDGeAzUFSWl/beJfeFa+PA==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.0.0.tgz", + "integrity": "sha512-WkUnH5zmvC/cH6f8BGiRK+KebrKdGbQmhtu3IHLEyzG9U4mBiIV8XkSzhdkY3RCN8bKqhmE5C3oNBLNCtvg4QQ==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3", - "@angular-eslint/utils": "18.4.3" + "@angular-eslint/bundled-angular-compiler": "19.0.0", + "@angular-eslint/utils": "19.0.0" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -173,119 +173,71 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.8.1.tgz", - "integrity": "sha512-0ZVQldndLrDfB0tzFe/uIwvkUcakw8qGxvkEU0l7kSbv/ngNQ/qrkRi7P64otB15inIDUNZI2jtmVat52dqSfQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.0.0.tgz", + "integrity": "sha512-d2NzuAyvFo00QGBv6BLno0KZ3Ptd+UNVHpI9vwU0giaZcjVsdKbcMvMfynkvHAAwVIVw5aSLwabIjnm0rc3x3A==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.8.1", - "@angular-eslint/utils": "19.8.1", + "@angular-eslint/bundled-angular-compiler": "19.0.0", + "@angular-eslint/utils": "19.0.0", "aria-query": "5.3.2", "axobject-query": "4.1.0" }, "peerDependencies": { - "@angular-eslint/template-parser": "19.8.1", "@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": "*" } }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", - "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", - "license": "MIT", - "peer": true - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/utils": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz", - "integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.8.1" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, "node_modules/@angular-eslint/schematics": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.8.1.tgz", - "integrity": "sha512-MKzfO3puOCuQFgP8XDUkEr5eaqcCQLAdYLLMcywEO/iRs1eRHL46+rkW+SjDp1cUqlxKtu+rLiTYr0T/O4fi9Q==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.0.0.tgz", + "integrity": "sha512-fle4SMxjI+91y5eR6hVG7yhzJHAw87LudHw918hGUVn2INIAW1TTuuQNoah8kNg9I6ICIDat26IenD4nOau6Gg==", "license": "MIT", "peer": true, "dependencies": { "@angular-devkit/core": ">= 19.0.0 < 20.0.0", "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", - "@angular-eslint/eslint-plugin": "19.8.1", - "@angular-eslint/eslint-plugin-template": "19.8.1", - "ignore": "7.0.5", - "semver": "7.7.2", + "@angular-eslint/eslint-plugin": "19.0.0", + "@angular-eslint/eslint-plugin-template": "19.0.0", + "ignore": "6.0.2", + "semver": "7.6.3", "strip-json-comments": "3.1.1" } }, - "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", - "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", - "license": "MIT", - "peer": true - }, - "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/eslint-plugin": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.8.1.tgz", - "integrity": "sha512-wZEBMPwD2TRhifG751hcj137EMIEaFmsxRB2EI+vfINCgPnFGSGGOHXqi8aInn9fXqHs7VbXkAzXYdBsvy1m4Q==", + "node_modules/@angular-eslint/schematics/node_modules/ignore": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz", + "integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==", "license": "MIT", "peer": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.8.1", - "@angular-eslint/utils": "19.8.1" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" + "engines": { + "node": ">= 4" } }, - "node_modules/@angular-eslint/schematics/node_modules/@angular-eslint/utils": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz", - "integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==", - "license": "MIT", + "node_modules/@angular-eslint/schematics/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "peer": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.8.1" + "bin": { + "semver": "bin/semver.js" }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/@angular-eslint/schematics/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "license": "MIT", - "peer": true, "engines": { - "node": ">= 4" + "node": ">=10" } }, "node_modules/@angular-eslint/template-parser": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.8.1.tgz", - "integrity": "sha512-pQiOg+se1AU/ncMlnJ9V6xYnMQ84qI1BGWuJpbU6A99VTXJg90scg0+T7DWmKssR1YjP5qmmBtrZfKsHEcLW/A==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.0.0.tgz", + "integrity": "sha512-bOLMNBQbrLMujGWSda0SF8ka7snQ9Uzxie1dr5LquI104p2J4Wt90DOoaWzhNaBBwedt3WXmhSHmvvR9720kHA==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.8.1", + "@angular-eslint/bundled-angular-compiler": "19.0.0", "eslint-scope": "^8.0.2" }, "peerDependencies": { @@ -293,21 +245,14 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/template-parser/node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", - "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", - "license": "MIT", - "peer": true - }, "node_modules/@angular-eslint/utils": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", - "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.0.0.tgz", + "integrity": "sha512-PH40BmIcIr5ldr08XYnqJ8cTzJfScJjBym4SECsilBnz5fhCdTD7UEQiW4d0P78Ie8H5PxvOJx9ZE+L4WBNrTA==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "18.4.3" + "@angular-eslint/bundled-angular-compiler": "19.0.0" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -1075,19 +1020,19 @@ } }, "node_modules/angular-eslint": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-19.8.1.tgz", - "integrity": "sha512-A6mPcVAXEDdJk7bKKBwd+1b/VA/xwpWWN2fExTGO1dkVNPz550LlgxBjEio9G7u4i+pD2aLrl6Cx6O+9o1iusQ==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-19.0.0.tgz", + "integrity": "sha512-8qYxqVMoRVKlpDKuGiNMG9ZPk7ke7ZOo3IxefFsB7Fpom8iRjOnH9tD9gLeYCHZWY1qYignLdeRqYmF/rRxF1A==", "license": "MIT", "peer": true, "dependencies": { "@angular-devkit/core": ">= 19.0.0 < 20.0.0", "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", - "@angular-eslint/builder": "19.8.1", - "@angular-eslint/eslint-plugin": "19.8.1", - "@angular-eslint/eslint-plugin-template": "19.8.1", - "@angular-eslint/schematics": "19.8.1", - "@angular-eslint/template-parser": "19.8.1", + "@angular-eslint/builder": "19.0.0", + "@angular-eslint/eslint-plugin": "19.0.0", + "@angular-eslint/eslint-plugin-template": "19.0.0", + "@angular-eslint/schematics": "19.0.0", + "@angular-eslint/template-parser": "19.0.0", "@typescript-eslint/types": "^8.0.0", "@typescript-eslint/utils": "^8.0.0" }, @@ -1097,44 +1042,6 @@ "typescript-eslint": "^8.0.0" } }, - "node_modules/angular-eslint/node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.8.1.tgz", - "integrity": "sha512-WXi1YbSs7SIQo48u+fCcc5Nt14/T4QzYQPLZUnjtsUXPgQG7ZoahhcGf7PPQ+n0V3pSopHOlSHwqK+tSsYK87A==", - "license": "MIT", - "peer": true - }, - "node_modules/angular-eslint/node_modules/@angular-eslint/eslint-plugin": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.8.1.tgz", - "integrity": "sha512-wZEBMPwD2TRhifG751hcj137EMIEaFmsxRB2EI+vfINCgPnFGSGGOHXqi8aInn9fXqHs7VbXkAzXYdBsvy1m4Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.8.1", - "@angular-eslint/utils": "19.8.1" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, - "node_modules/angular-eslint/node_modules/@angular-eslint/utils": { - "version": "19.8.1", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.8.1.tgz", - "integrity": "sha512-gVDKYWmAjeTPtaYmddT/HS03fCebXJtrk8G1MouQIviZbHqLjap6TbVlzlkBigRzaF0WnFnrDduQslkJzEdceA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.8.1" - }, - "peerDependencies": { - "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": "*" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -5256,12 +5163,12 @@ "yargs": "^17.7.2" }, "peerDependencies": { - "@angular-eslint/eslint-plugin": "^18.4.3", "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", "@ni/javascript-test": "*", "@ni/typescript-requiring-type-checking-test": "*", "@ni/typescript-test": "*", + "angular-eslint": "19.0.0", "eslint": "^9.0.0" } }, From dfbed78c9ecbe4006d3c9714807c50e15456658f Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 15 Sep 2025 16:05:59 +0530 Subject: [PATCH 05/53] update to type module Signed-off-by: gokulprasanth-ni --- tests/playwright/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/playwright/package.json b/tests/playwright/package.json index 5e49a7f..ff9e599 100644 --- a/tests/playwright/package.json +++ b/tests/playwright/package.json @@ -1,5 +1,5 @@ { - "type": "commonjs", + "type": "module", "name": "@ni/playwright-test", "version": "1.0.0", "private": true, From 0168590930d79a4635a8c7b4f3fb04fd83efc409 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 15 Sep 2025 16:08:32 +0530 Subject: [PATCH 06/53] Change files --- ...onfig-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json | 7 +++++++ ...ig-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json | 7 +++++++ ...ig-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json | 7 +++++++ ...ig-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json | 7 +++++++ 4 files changed, 28 insertions(+) create mode 100644 change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json create mode 100644 change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json create mode 100644 change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json create mode 100644 change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json diff --git a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json new file mode 100644 index 0000000..7f40235 --- /dev/null +++ b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-angular to be compatible with eslint v9", + "packageName": "@ni/eslint-config-angular", + "email": "gokulprasanth.ravi@emerson.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json new file mode 100644 index 0000000..068a914 --- /dev/null +++ b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-javascript to be compatible with eslint v9", + "packageName": "@ni/eslint-config-javascript", + "email": "gokulprasanth.ravi@emerson.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json new file mode 100644 index 0000000..bc2adaa --- /dev/null +++ b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-playwright to be compatible with eslint v9", + "packageName": "@ni/eslint-config-playwright", + "email": "gokulprasanth.ravi@emerson.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json new file mode 100644 index 0000000..c49d73a --- /dev/null +++ b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json @@ -0,0 +1,7 @@ +{ + "type": "major", + "comment": "Update eslint-config-typescript to be compatible with eslint v9", + "packageName": "@ni/eslint-config-typescript", + "email": "gokulprasanth.ravi@emerson.com", + "dependentChangeType": "patch" +} From 382bacb6637e15791de0579660059a193604cf68 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 15 Sep 2025 17:29:52 +0530 Subject: [PATCH 07/53] update readme doc Signed-off-by: gokulprasanth-ni --- README.md | 120 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 273f806..7783606 100644 --- a/README.md +++ b/README.md @@ -69,80 +69,102 @@ After installing the lint configuration packages, follow the configuration instr ### JavaScript configuration -Extend `@ni/eslint-config-javascript` in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). +Spread `@ni/eslint-config-javascript` configurations in your [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): ```js -{ - extends: '@ni/eslint-config-javascript' -} +import javascript from '@ni/eslint-config-javascript'; + +export default [ + ...javascript, +]; ``` ### TypeScript configuration -Extend `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +Spread `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` configurations in the [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. ```js -{ - extends: [ - '@ni/eslint-config-typescript', - '@ni/eslint-config-typescript/requiring-type-checking' - ], - parserOptions: { - project: 'tsconfig.json' +import typescript from '@ni/eslint-config-typescript'; +import typescriptTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; + +export default [ + ...typescript, + ...typescriptTypeChecking, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: './tsconfig.json' + } + } } -} +]; ``` ### Angular configuration -ESLint support for Angular is provided by [`@angular-eslint`](https://github.com/angular-eslint/angular-eslint#readme). **It's recommended to use `@angular-eslint/schematics` to -configure ESLint for Angular projects**. +ESLint support for Angular is provided by [`angular-eslint`](https://github.com/angular-eslint/angular-eslint#readme). -1. **For single and multi-project workspaces**, [add the schematic](https://github.com/angular-eslint/angular-eslint#quick-start). Remove the `@angular-eslint`, `@typescript-eslint`, and `eslint` dependencies from `package.json`. +1. **For single and multi-project workspaces**, [add the angular-eslint](https://github.com/angular-eslint/angular-eslint#quick-start). Remove the `angular-eslint` and `eslint` dependencies from `package.json`. ```bash - ng add @angular-eslint/schematics + ng add angular-eslint ``` 2. **For multi-project workspaces**, [configure each project](https://github.com/angular-eslint/angular-eslint#adding-eslint-configuration-to-an-existing-angular-cli-project-which-has-no-existing-linter), and then enable future generated projects to be configured as well. ```bash - > ng g @angular-eslint/schematics:add-eslint-to-project - > ng config cli.schematicCollections "[\"@angular-eslint/schematics\"]" + > ng g angular-eslint:add-eslint-to-project + > ng config cli.schematicCollections "[\"angular-eslint\"]" ``` -3. Extend the NI configured rules for Angular and Angular templates in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +3. Spread the NI configured rules for Angular and Angular templates in the [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. ```js - overrides: [{ - files: ['*.ts'], - extends: [ - '@ni/eslint-config-angular', - '@ni/eslint-config-angular/requiring-type-checking' - ], - parserOptions: { - project: 'tsconfig.json' + import angular from '@ni/eslint-config-angular'; + import angularTypeChecking from '@ni/eslint-config-angular/requiring-type-checking'; + import angularTemplate from '@ni/eslint-config-angular/template'; + + export default [ + { + files: ['**/*.ts'], + extends: [ + ...angular, + ...angularTypeChecking + ], + languageOptions: { + parserOptions: { + project: './tsconfig.json' + } + } + }, + { + files: ['*.html'], + extends: [...angularTemplate] } - }, { - files: ['*.html'], - extends: ['@ni/eslint-config-angular/template'] - }] + ]; ``` 4. Evaluate the [project specific rule groups](#evaluate-project-specific-rule-groups) to manually add to your lint configuration. For Angular applications in particular, consider enabling the [`[application-prefix]`](#application-prefix) rule group. ### Playwright configuration -Extend `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +Spread `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. **Note:** The Playwright configurations extend the TypeScript configurations, so it is not necessary for an application to extend them both. However, the Playwright configurations should only be applied to directories that contain Playwright tests and utilities. ```js // This is an example .eslintrc.js in a Playwright-specific directory. // If Playwright files are mixed with other code, use an "overrides" file pattern to match only Playwright code. -{ - extends: [ - '@ni/eslint-config-playwright', - '@ni/eslint-config-playwright/requiring-type-checking' - ], - parserOptions: { - project: 'tsconfig.json' +import playwright from '@ni/eslint-config-playwright'; +import playwrightTypeChecking from '@ni/eslint-config-playwright/requiring-type-checking'; + +export default [ + ...playwright, + ...playwrightTypeChecking, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: './tsconfig.json' + } + } } -} +]; ``` ## Usage @@ -257,15 +279,17 @@ To disable a rule globally, modify the `rules` section of the [ESLint configurat } ``` -To disable a rule for a specific file pattern or directory, modify the `overrides` section of the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats): +To disable a rule for a specific file pattern or directory, update the rules section for that file pattern in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats): ```js - overrides: [{ +export default [ + // ...other configs + { files: ['*.stories.ts'], rules: { - // This rule is disabled as an example 'import/no-default-export': 'off' } - }] + } +]; ``` ### Inline disable rules that don't apply to a particular situation @@ -297,7 +321,7 @@ You can [configure a repository to prompt developers to install this extension]( } ``` -Follow the `@angular-eslint` [instructions](https://github.com/angular-eslint/angular-eslint#linting-html-files-and-inline-templates-with-the-vscode-extension-for-eslint) for linting HTML files and inline-templates with Angular. +Follow the `angular-eslint` [instructions](https://github.com/angular-eslint/angular-eslint#linting-html-files-and-inline-templates-with-the-vscode-extension-for-eslint) for linting HTML files and inline-templates with Angular. #### JetBrains WebStorm @@ -326,11 +350,11 @@ This option can be adapted for npm scripts, for example. If there are situations where the analysis time for enabling the type checked rules is an excessive burden you may consider creating a separate ESLint configuration that avoids extending the type checked rules and omits the `parserOptions.project` configuration to run in specific scenarios. -See discussion in the [performance section](https://github.com/typescript-eslint/typescript-eslint/blob/main/docs/getting-started/linting/TYPED_LINTING.md#performance) of the Getting Started - Linting with Type Information guide. +See discussion in the [performance section](https://typescript-eslint.io/troubleshooting/typed-linting/performance/) of the Getting Started - Linting with Type Information guide. ### Angular linting performance -Deviations from the `@angular-eslint schematic`, `@ni/eslint-config-angular`, and the [`parserOptions.project`](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/parser#parseroptionsproject) configurations can result in significant performance degredation. Fully manual configuration [is not recommended](https://github.com/angular-eslint/angular-eslint#going-fully-manual-not-recommended). Read `@angular-eslint`'s [section on performance](https://github.com/angular-eslint/angular-eslint#eslint-configs-and-performance) for information on addressing slow linting processes. +Deviations from the `angular-eslint`, `@ni/eslint-config-angular`, and the [`parserOptions.project`](https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/parser#parseroptionsproject) configurations can result in significant performance degredation. Read `angular-eslint`'s [section on performance](https://github.com/angular-eslint/angular-eslint/blob/v19.0.0/docs/RULES_REQUIRING_TYPE_INFORMATION.md) for information on addressing slow linting processes. ## License From 4e18ae7d5cc3c45eafabd91ec533d8ace9f22e0c Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Tue, 16 Sep 2025 12:19:14 +0530 Subject: [PATCH 08/53] update change file email Signed-off-by: gokulprasanth-ni --- ...int-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json | 2 +- ...-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json | 2 +- ...-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json | 2 +- ...-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json index 7f40235..2f64bda 100644 --- a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json +++ b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json @@ -2,6 +2,6 @@ "type": "major", "comment": "Update eslint-config-angular to be compatible with eslint v9", "packageName": "@ni/eslint-config-angular", - "email": "gokulprasanth.ravi@emerson.com", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" } diff --git a/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json index 068a914..4bf0970 100644 --- a/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json +++ b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json @@ -2,6 +2,6 @@ "type": "major", "comment": "Update eslint-config-javascript to be compatible with eslint v9", "packageName": "@ni/eslint-config-javascript", - "email": "gokulprasanth.ravi@emerson.com", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" } diff --git a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json index bc2adaa..df9815e 100644 --- a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json +++ b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json @@ -2,6 +2,6 @@ "type": "major", "comment": "Update eslint-config-playwright to be compatible with eslint v9", "packageName": "@ni/eslint-config-playwright", - "email": "gokulprasanth.ravi@emerson.com", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" } diff --git a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json index c49d73a..8a1b7a8 100644 --- a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json +++ b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json @@ -2,6 +2,6 @@ "type": "major", "comment": "Update eslint-config-typescript to be compatible with eslint v9", "packageName": "@ni/eslint-config-typescript", - "email": "gokulprasanth.ravi@emerson.com", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" } From 7a2a8c72ce2c5197f06ed77e26bad899fa3469d2 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Tue, 16 Sep 2025 13:14:38 +0530 Subject: [PATCH 09/53] update as per pr comments Signed-off-by: gokulprasanth-ni --- README.md | 8 ++++---- package.json | 2 +- packages/eslint-config-angular/index.js | 6 ++++++ packages/eslint-config-javascript/package.json | 2 +- tests/angular/eslint.config.js | 4 ++-- tests/playwright-requiring-type-checking/eslint.config.js | 4 ++-- tests/print-evaluated-rules/index.js | 8 ++++---- tests/print-evaluated-rules/package.json | 2 +- tests/typescript-requiring-type-checking/eslint.config.js | 4 ++-- 9 files changed, 23 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 7783606..48dc04e 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ After installing the lint configuration packages, follow the configuration instr ### JavaScript configuration -Spread `@ni/eslint-config-javascript` configurations in your [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): +Spread `@ni/eslint-config-javascript` configurations in your [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): ```js import javascript from '@ni/eslint-config-javascript'; @@ -81,7 +81,7 @@ export default [ ### TypeScript configuration -Spread `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` configurations in the [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. +Spread `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. ```js import typescript from '@ni/eslint-config-typescript'; @@ -114,7 +114,7 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ > ng g angular-eslint:add-eslint-to-project > ng config cli.schematicCollections "[\"angular-eslint\"]" ``` -3. Spread the NI configured rules for Angular and Angular templates in the [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +3. Spread the NI configured rules for Angular and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. ```js import angular from '@ni/eslint-config-angular'; import angularTypeChecking from '@ni/eslint-config-angular/requiring-type-checking'; @@ -143,7 +143,7 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ ### Playwright configuration -Spread `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +Spread `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. **Note:** The Playwright configurations extend the TypeScript configurations, so it is not necessary for an application to extend them both. However, the Playwright configurations should only be applied to directories that contain Playwright tests and utilities. diff --git a/package.json b/package.json index a32b14a..a51d2d3 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,6 @@ "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "^5.0.0" + "typescript": "~5.0.0" } } \ No newline at end of file diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index ed9a2c6..ad34f3c 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -7,6 +7,12 @@ export default [ { processor: angular.processInlineTemplates, rules: { + /* + Overrides to Angular recommended rules: + https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.json + */ + + '@angular-eslint/no-host-metadata-property': 'error', /* '@angular-eslint/no-input-rename' rule notes: diff --git a/packages/eslint-config-javascript/package.json b/packages/eslint-config-javascript/package.json index c5180b0..8fc4974 100644 --- a/packages/eslint-config-javascript/package.json +++ b/packages/eslint-config-javascript/package.json @@ -32,7 +32,7 @@ "!/.*.js" ], "peerDependencies": { - "eslint": "^9.0.0", + "eslint": "^9.35.0", "eslint-plugin-import": "^2.31.1", "@stylistic/eslint-plugin": "^5.0.0" } diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index 1176b8a..ecbfc08 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -10,7 +10,7 @@ import typescriptPlugin from 'typescript-eslint'; import angularTemplatePlugin from 'angular-eslint'; import { defineConfig } from 'eslint/config'; -const tsconfigRootDir = path.dirname(fileURLToPath(import.meta.url)); +const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); export default defineConfig([ { ignores: ['*.js'] }, @@ -21,7 +21,7 @@ export default defineConfig([ parser: typescriptPlugin.parser, parserOptions: { project: ['./tsconfig.json'], - tsconfigRootDir, + tsConfigRootDir, }, }, }, diff --git a/tests/playwright-requiring-type-checking/eslint.config.js b/tests/playwright-requiring-type-checking/eslint.config.js index 9d63af3..c08b66d 100644 --- a/tests/playwright-requiring-type-checking/eslint.config.js +++ b/tests/playwright-requiring-type-checking/eslint.config.js @@ -3,7 +3,7 @@ import path from 'path'; import playwright from '@ni/eslint-config-playwright'; import playwrightRequiringTypeChecking from '@ni/eslint-config-playwright/requiring-type-checking'; -const tsconfigRootDir = path.dirname(fileURLToPath(import.meta.url)); +const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); export default [ ...playwright, @@ -16,7 +16,7 @@ export default [ languageOptions: { parserOptions: { project: ['./tsconfig.json'], - tsconfigRootDir, + tsConfigRootDir, }, }, rules: { diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index f87d939..0d0d51b 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -99,7 +99,7 @@ const __dirname = path.dirname(__filename); .filter(key => !key.startsWith('@angular-eslint')) .filter( key => !configTypescript.rules[key] - && !configTypescriptTypechecked.rules[key] + && !configTypescriptTypechecked.rules[key] ) .reduce((config, key) => { config[key] = rules[key]; @@ -107,13 +107,13 @@ const __dirname = path.dirname(__filename); }, {}); const angularDivergedRules = getDivergedRules( - angularRules.map(cfg => cfg.rules) + angularRules.map(config => config.rules) ); const angularTemplateDivergedRules = getDivergedRules( - angularTemplateRules.map(cfg => cfg.rules) + angularTemplateRules.map(config => config.rules) ); const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length - || !!Object.keys(angularTemplateDivergedRules).length; + || !!Object.keys(angularTemplateDivergedRules).length; console.log('-------- Audits:'); console.log(`Evaluated ESLint rules has warn?: ${hasWarn(configEslint)}`); diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index 7669334..3a7ff3d 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -17,7 +17,7 @@ "@ni/javascript-test": "*", "@ni/typescript-test": "*", "@ni/typescript-requiring-type-checking-test": "*", - "eslint": "^9.0.0" + "eslint": "^9.35.0" }, "dependencies": { "yargs": "^17.7.2" diff --git a/tests/typescript-requiring-type-checking/eslint.config.js b/tests/typescript-requiring-type-checking/eslint.config.js index 774e9d9..b7bc53e 100644 --- a/tests/typescript-requiring-type-checking/eslint.config.js +++ b/tests/typescript-requiring-type-checking/eslint.config.js @@ -3,7 +3,7 @@ import path from 'path'; import typescript from '@ni/eslint-config-typescript'; import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; -const tsconfigRootDir = path.dirname(fileURLToPath(import.meta.url)); +const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); export default [ { @@ -16,7 +16,7 @@ export default [ languageOptions: { parserOptions: { project: ['./tsconfig.json'], - tsconfigRootDir, + tsConfigRootDir, }, }, }, From d830fa34ae00295a24f1732841819353e042faa5 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Tue, 16 Sep 2025 14:38:14 +0530 Subject: [PATCH 10/53] update angular-eslint version Signed-off-by: gokulprasanth-ni --- package-lock.json | 270 ++++++++++---------- packages/eslint-config-angular/package.json | 2 +- tests/print-evaluated-rules/package.json | 2 +- 3 files changed, 137 insertions(+), 137 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d3331b..a90814b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,17 +25,17 @@ "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "^5.0.0" + "typescript": "~5.0.0" } }, "node_modules/@angular-devkit/architect": { - "version": "0.1902.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.16.tgz", - "integrity": "sha512-E5cM4D5nHmCpuQkvyYJjJ/GEfygfU5NoN1YAWRnIMLwTyC9s6ms13L/FuCfr7HqGPY8NjkOWG2517Xda03+jAw==", + "version": "0.1802.21", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.21.tgz", + "integrity": "sha512-+Ll+xtpKwZ3iLWN/YypvnCZV/F0MVbP+/7ZpMR+Xv/uB0OmribhBVj9WGaCd9I/bGgoYBw8wBV/NFNCKkf0k3Q==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "19.2.16", + "@angular-devkit/core": "18.2.21", "rxjs": "7.8.1" }, "engines": { @@ -55,9 +55,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "19.2.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.16.tgz", - "integrity": "sha512-3MHfTTUMT/nSXLdhoilQATCY38XcnoJd7u7K0tLajTT7C+iNknvkzaV4g5qMA+E3yNzefcAkY7MZpgreNJuKEg==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.21.tgz", + "integrity": "sha512-Lno6GNbJME85wpc/uqn+wamBxvfZJZFYSH8+oAkkyjU/hk8r5+X8DuyqsKAa0m8t46zSTUsonHsQhVe5vgrZeQ==", "license": "MIT", "peer": true, "dependencies": { @@ -74,7 +74,7 @@ "yarn": ">= 1.13.0" }, "peerDependencies": { - "chokidar": "^4.0.0" + "chokidar": "^3.5.2" }, "peerDependenciesMeta": { "chokidar": { @@ -106,15 +106,15 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "19.2.16", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.16.tgz", - "integrity": "sha512-YO1J8H9zzb/EfKzoZFs+YU7JRYNaZVjp/H/EBSpyI8zvpSjNZzi7+P6K+/uNQyH1RQyZ9NFn8+eHygsG47qA8w==", + "version": "18.2.21", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.21.tgz", + "integrity": "sha512-yuC2vN4VL48JhnsaOa9J/o0Jl+cxOklRNQp5J2/ypMuRROaVCrZAPiX+ChSHh++kHYMpj8+ggNrrUwRNfMKACQ==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": "19.2.16", + "@angular-devkit/core": "18.2.21", "jsonc-parser": "3.3.1", - "magic-string": "0.30.17", + "magic-string": "0.30.11", "ora": "5.4.1", "rxjs": "7.8.1" }, @@ -135,14 +135,14 @@ } }, "node_modules/@angular-eslint/builder": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.0.0.tgz", - "integrity": "sha512-vi68ADoEKrg2SB87jwUCaVhOhWPpXyG6X8QJzg8AiYDCQY721x1l6Pdz6WZOPruWALyoIyFGFXqtuysDGqIBhw==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-18.4.3.tgz", + "integrity": "sha512-NzmrXlr7GFE+cjwipY/CxBscZXNqnuK0us1mO6Z2T6MeH6m+rRcdlY/rZyKoRniyNNvuzl6vpEsfMIMmnfebrA==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/architect": ">= 0.1900.0 < 0.2000.0", - "@angular-devkit/core": ">= 19.0.0 < 20.0.0" + "@angular-devkit/architect": ">= 0.1800.0 < 0.1900.0", + "@angular-devkit/core": ">= 18.0.0 < 19.0.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", @@ -150,21 +150,21 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.0.0.tgz", - "integrity": "sha512-q6IaiqKYcmBW/gw55tytDucguo5E48szVCLNLHUFdN98YDDsP+KM3MPWYPyZcXpusmFfIjLdr8d41PlKmyMUpg==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.4.3.tgz", + "integrity": "sha512-zdrA8mR98X+U4YgHzUKmivRU+PxzwOL/j8G7eTOvBuq8GPzsP+hvak+tyxlgeGm9HsvpFj9ERHLtJ0xDUPs8fg==", "license": "MIT", "peer": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.0.0.tgz", - "integrity": "sha512-WkUnH5zmvC/cH6f8BGiRK+KebrKdGbQmhtu3IHLEyzG9U4mBiIV8XkSzhdkY3RCN8bKqhmE5C3oNBLNCtvg4QQ==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.4.3.tgz", + "integrity": "sha512-AyJbupiwTBR81P6T59v+aULEnPpZBCBxL2S5QFWfAhNCwWhcof4GihvdK2Z87yhvzDGeAzUFSWl/beJfeFa+PA==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.0.0", - "@angular-eslint/utils": "19.0.0" + "@angular-eslint/bundled-angular-compiler": "18.4.3", + "@angular-eslint/utils": "18.4.3" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -173,14 +173,14 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.0.0.tgz", - "integrity": "sha512-d2NzuAyvFo00QGBv6BLno0KZ3Ptd+UNVHpI9vwU0giaZcjVsdKbcMvMfynkvHAAwVIVw5aSLwabIjnm0rc3x3A==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.4.3.tgz", + "integrity": "sha512-ijGlX2N01ayMXTpeQivOA31AszO8OEbu9ZQUCxnu9AyMMhxyi2q50bujRChAvN9YXQfdQtbxuajxV6+aiWb5BQ==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.0.0", - "@angular-eslint/utils": "19.0.0", + "@angular-eslint/bundled-angular-compiler": "18.4.3", + "@angular-eslint/utils": "18.4.3", "aria-query": "5.3.2", "axobject-query": "4.1.0" }, @@ -192,16 +192,16 @@ } }, "node_modules/@angular-eslint/schematics": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.0.0.tgz", - "integrity": "sha512-fle4SMxjI+91y5eR6hVG7yhzJHAw87LudHw918hGUVn2INIAW1TTuuQNoah8kNg9I6ICIDat26IenD4nOau6Gg==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-18.4.3.tgz", + "integrity": "sha512-D5maKn5e6n58+8n7jLFLD4g+RGPOPeDSsvPc1sqial5tEKLxAJQJS9WZ28oef3bhkob6C60D+1H0mMmEEVvyVA==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": ">= 19.0.0 < 20.0.0", - "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", - "@angular-eslint/eslint-plugin": "19.0.0", - "@angular-eslint/eslint-plugin-template": "19.0.0", + "@angular-devkit/core": ">= 18.0.0 < 19.0.0", + "@angular-devkit/schematics": ">= 18.0.0 < 19.0.0", + "@angular-eslint/eslint-plugin": "18.4.3", + "@angular-eslint/eslint-plugin-template": "18.4.3", "ignore": "6.0.2", "semver": "7.6.3", "strip-json-comments": "3.1.1" @@ -231,13 +231,13 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.0.0.tgz", - "integrity": "sha512-bOLMNBQbrLMujGWSda0SF8ka7snQ9Uzxie1dr5LquI104p2J4Wt90DOoaWzhNaBBwedt3WXmhSHmvvR9720kHA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.4.3.tgz", + "integrity": "sha512-JZMPtEB8yNip3kg4WDEWQyObSo2Hwf+opq2ElYuwe85GQkGhfJSJ2CQYo4FSwd+c5MUQAqESNRg9QqGYauDsiw==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.0.0", + "@angular-eslint/bundled-angular-compiler": "18.4.3", "eslint-scope": "^8.0.2" }, "peerDependencies": { @@ -246,13 +246,13 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.0.0.tgz", - "integrity": "sha512-PH40BmIcIr5ldr08XYnqJ8cTzJfScJjBym4SECsilBnz5fhCdTD7UEQiW4d0P78Ie8H5PxvOJx9ZE+L4WBNrTA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.4.3.tgz", + "integrity": "sha512-w0bJ9+ELAEiPBSTPPm9bvDngfu1d8JbzUhvs2vU+z7sIz/HMwUZT5S4naypj2kNN0gZYGYrW0lt+HIbW87zTAQ==", "license": "MIT", "peer": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "19.0.0" + "@angular-eslint/bundled-angular-compiler": "18.4.3" }, "peerDependencies": { "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", @@ -697,17 +697,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz", - "integrity": "sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.0.tgz", + "integrity": "sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==", "license": "MIT", "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/type-utils": "8.43.0", - "@typescript-eslint/utils": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", + "@typescript-eslint/scope-manager": "8.44.0", + "@typescript-eslint/type-utils": "8.44.0", + "@typescript-eslint/utils": "8.44.0", + "@typescript-eslint/visitor-keys": "8.44.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -721,7 +721,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.43.0", + "@typescript-eslint/parser": "^8.44.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -737,16 +737,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.43.0.tgz", - "integrity": "sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.0.tgz", + "integrity": "sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", + "@typescript-eslint/scope-manager": "8.44.0", + "@typescript-eslint/types": "8.44.0", + "@typescript-eslint/typescript-estree": "8.44.0", + "@typescript-eslint/visitor-keys": "8.44.0", "debug": "^4.3.4" }, "engines": { @@ -762,14 +762,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", - "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.44.0.tgz", + "integrity": "sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.43.0", - "@typescript-eslint/types": "^8.43.0", + "@typescript-eslint/tsconfig-utils": "^8.44.0", + "@typescript-eslint/types": "^8.44.0", "debug": "^4.3.4" }, "engines": { @@ -784,14 +784,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", - "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.44.0.tgz", + "integrity": "sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0" + "@typescript-eslint/types": "8.44.0", + "@typescript-eslint/visitor-keys": "8.44.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -802,9 +802,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", - "integrity": "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.0.tgz", + "integrity": "sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==", "license": "MIT", "peer": true, "engines": { @@ -819,15 +819,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz", - "integrity": "sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.44.0.tgz", + "integrity": "sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/utils": "8.43.0", + "@typescript-eslint/types": "8.44.0", + "@typescript-eslint/typescript-estree": "8.44.0", + "@typescript-eslint/utils": "8.44.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -844,9 +844,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.43.0.tgz", - "integrity": "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.0.tgz", + "integrity": "sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==", "license": "MIT", "peer": true, "engines": { @@ -858,16 +858,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", - "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.0.tgz", + "integrity": "sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/project-service": "8.43.0", - "@typescript-eslint/tsconfig-utils": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", + "@typescript-eslint/project-service": "8.44.0", + "@typescript-eslint/tsconfig-utils": "8.44.0", + "@typescript-eslint/types": "8.44.0", + "@typescript-eslint/visitor-keys": "8.44.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -913,16 +913,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", - "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.44.0.tgz", + "integrity": "sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==", "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0" + "@typescript-eslint/scope-manager": "8.44.0", + "@typescript-eslint/types": "8.44.0", + "@typescript-eslint/typescript-estree": "8.44.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -937,13 +937,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", - "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.0.tgz", + "integrity": "sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/types": "8.44.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1020,19 +1020,19 @@ } }, "node_modules/angular-eslint": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-19.0.0.tgz", - "integrity": "sha512-8qYxqVMoRVKlpDKuGiNMG9ZPk7ke7ZOo3IxefFsB7Fpom8iRjOnH9tD9gLeYCHZWY1qYignLdeRqYmF/rRxF1A==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-18.4.3.tgz", + "integrity": "sha512-0ZjLzzADGRLUhZC8ZpwSo6CE/m6QhQB/oljMJ0mEfP+lB1sy1v8PBKNsJboIcfEEgGW669Z/efVQ3df88yJLYg==", "license": "MIT", "peer": true, "dependencies": { - "@angular-devkit/core": ">= 19.0.0 < 20.0.0", - "@angular-devkit/schematics": ">= 19.0.0 < 20.0.0", - "@angular-eslint/builder": "19.0.0", - "@angular-eslint/eslint-plugin": "19.0.0", - "@angular-eslint/eslint-plugin-template": "19.0.0", - "@angular-eslint/schematics": "19.0.0", - "@angular-eslint/template-parser": "19.0.0", + "@angular-devkit/core": ">= 18.0.0 < 19.0.0", + "@angular-devkit/schematics": ">= 18.0.0 < 19.0.0", + "@angular-eslint/builder": "18.4.3", + "@angular-eslint/eslint-plugin": "18.4.3", + "@angular-eslint/eslint-plugin-template": "18.4.3", + "@angular-eslint/schematics": "18.4.3", + "@angular-eslint/template-parser": "18.4.3", "@typescript-eslint/types": "^8.0.0", "@typescript-eslint/utils": "^8.0.0" }, @@ -1740,9 +1740,9 @@ } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2418,9 +2418,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", - "integrity": "sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==", + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", "dev": true, "license": "MIT", "dependencies": { @@ -3499,9 +3499,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "license": "MIT", "peer": true, "dependencies": { @@ -4784,9 +4784,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", "license": "Apache-2.0", "peer": true, "bin": { @@ -4794,20 +4794,20 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=14.17" + "node": ">=12.20" } }, "node_modules/typescript-eslint": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.43.0.tgz", - "integrity": "sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.44.0.tgz", + "integrity": "sha512-ib7mCkYuIzYonCq9XWF5XNw+fkj2zg629PSa9KNIQ47RXFF763S5BIX4wqz1+FLPogTZoiw8KmCiRPRa8bL3qw==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.43.0", - "@typescript-eslint/parser": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0", - "@typescript-eslint/utils": "8.43.0" + "@typescript-eslint/eslint-plugin": "8.44.0", + "@typescript-eslint/parser": "8.44.0", + "@typescript-eslint/typescript-estree": "8.44.0", + "@typescript-eslint/utils": "8.44.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5085,7 +5085,7 @@ "license": "MIT", "peerDependencies": { "@ni/eslint-config-typescript": "^4.4.4", - "angular-eslint": "^19.0.0" + "angular-eslint": "^18.4.3" } }, "packages/eslint-config-javascript": { @@ -5094,7 +5094,7 @@ "license": "MIT", "peerDependencies": { "@stylistic/eslint-plugin": "^5.0.0", - "eslint": "^9.0.0", + "eslint": "^9.35.0", "eslint-plugin-import": "^2.31.1" } }, @@ -5168,8 +5168,8 @@ "@ni/javascript-test": "*", "@ni/typescript-requiring-type-checking-test": "*", "@ni/typescript-test": "*", - "angular-eslint": "19.0.0", - "eslint": "^9.0.0" + "angular-eslint": "18.4.3", + "eslint": "^9.35.0" } }, "tests/typescript": { diff --git a/packages/eslint-config-angular/package.json b/packages/eslint-config-angular/package.json index 08394bb..64352d8 100644 --- a/packages/eslint-config-angular/package.json +++ b/packages/eslint-config-angular/package.json @@ -33,7 +33,7 @@ "!/tools" ], "peerDependencies": { - "angular-eslint": "^19.0.0", + "angular-eslint": "^18.4.3", "@ni/eslint-config-typescript": "^4.4.4" }, "exports": { diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index 3a7ff3d..7b380c9 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -11,7 +11,7 @@ "print-evaluated-rules:no-audit": "node index.js --no-audit" }, "peerDependencies": { - "angular-eslint": "19.0.0", + "angular-eslint": "18.4.3", "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", "@ni/javascript-test": "*", From e52cb9d48fb671977e2325c94f26b0e4275d0e9e Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Tue, 16 Sep 2025 16:03:52 +0530 Subject: [PATCH 11/53] remove no-undef eslint comment Signed-off-by: gokulprasanth-ni --- .../eslint-config-angular/tools/print-available-rules.js | 1 - packages/eslint-config-javascript/index.js | 6 +++++- .../eslint-config-playwright/tools/print-available-rules.js | 1 - .../eslint-config-typescript/tools/print-available-rules.js | 1 - tests/print-evaluated-rules/index.js | 1 - 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/eslint-config-angular/tools/print-available-rules.js b/packages/eslint-config-angular/tools/print-available-rules.js index 1ce8ceb..895057d 100644 --- a/packages/eslint-config-angular/tools/print-available-rules.js +++ b/packages/eslint-config-angular/tools/print-available-rules.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ /* eslint-disable no-console */ import angularPlugin from 'angular-eslint'; diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index 10f9507..aecd50a 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -1,5 +1,6 @@ import importPlugin from 'eslint-plugin-import'; import stylisticPlugin from '@stylistic/eslint-plugin'; +import globals from 'globals'; import { bestPractices } from './rules/best-practices.js'; import { errors } from './rules/errors.js'; import { node } from './rules/node.js'; @@ -26,7 +27,10 @@ export default [ }, languageOptions: { ecmaVersion: 2022, - sourceType: 'module' + sourceType: 'module', + globals: { + ...globals.node + } } }, ]; \ No newline at end of file diff --git a/packages/eslint-config-playwright/tools/print-available-rules.js b/packages/eslint-config-playwright/tools/print-available-rules.js index 0dcedb3..6d588bb 100644 --- a/packages/eslint-config-playwright/tools/print-available-rules.js +++ b/packages/eslint-config-playwright/tools/print-available-rules.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ /* eslint-disable no-console */ import plugin from 'eslint-plugin-playwright'; diff --git a/packages/eslint-config-typescript/tools/print-available-rules.js b/packages/eslint-config-typescript/tools/print-available-rules.js index f368bf8..ca23567 100644 --- a/packages/eslint-config-typescript/tools/print-available-rules.js +++ b/packages/eslint-config-typescript/tools/print-available-rules.js @@ -1,4 +1,3 @@ -/* eslint-disable no-undef */ /* eslint-disable no-console */ // eslint-plugin-import doesn't know how to resolve entry points in commonjs modules that are // declared using "export" rather than the old "main" syntax in package.json. diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index 0d0d51b..d0b8b18 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -1,5 +1,4 @@ /* eslint-disable no-console */ -/* eslint-disable no-undef */ import { ESLint } from 'eslint'; import angularRules from '@ni/eslint-config-angular'; import angularTemplateRules from '@ni/eslint-config-angular/template'; From ca9199cbc99785a1c4406f5ce398e62b99bdc367 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Wed, 17 Sep 2025 17:08:20 +0530 Subject: [PATCH 12/53] fix: import resolver issue Signed-off-by: gokulprasanth-ni --- packages/eslint-config-typescript/index.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index f6a907f..7e2c762 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -1,5 +1,6 @@ import javascript from '@ni/eslint-config-javascript'; import typescriptPlugin from 'typescript-eslint'; +import importPlugin from 'eslint-plugin-import'; import extensions from './lib/extensions.js'; export default [ @@ -10,6 +11,7 @@ export default [ languageOptions: { parser: typescriptPlugin.parser }, + settings: importPlugin.flatConfigs.typescript.settings, rules: { /* Overrides to import rules (already handled by the TypeScript compiler): From df5b22c1b0e91c226c767b2ae4af7cee32e15e78 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Thu, 18 Sep 2025 14:46:11 +0530 Subject: [PATCH 13/53] address lvl 1 PR comments Signed-off-by: gokulprasanth-ni --- package-lock.json | 10 +++++----- package.json | 2 +- packages/eslint-config-javascript/rules/style.js | 3 +-- packages/eslint-config-typescript/index.js | 16 ++++++++-------- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index a90814b..fceb494 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "~5.0.0" + "typescript": "~5.4.5" } }, "node_modules/@angular-devkit/architect": { @@ -4784,9 +4784,9 @@ } }, "node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "license": "Apache-2.0", "peer": true, "bin": { @@ -4794,7 +4794,7 @@ "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/typescript-eslint": { diff --git a/package.json b/package.json index a51d2d3..692598b 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,6 @@ "beachball": "^2.41.0" }, "peerDependencies": { - "typescript": "~5.0.0" + "typescript": "~5.4.5" } } \ No newline at end of file diff --git a/packages/eslint-config-javascript/rules/style.js b/packages/eslint-config-javascript/rules/style.js index 4c392f9..453ca73 100644 --- a/packages/eslint-config-javascript/rules/style.js +++ b/packages/eslint-config-javascript/rules/style.js @@ -455,8 +455,7 @@ export const style = { ], /* - disallow space between function identifier and application - deprecated in favor of func-call-spacing + enforce spacing between functions and their invocations https://eslint.style/rules/function-call-spacing */ '@stylistic/function-call-spacing': ['error', 'never'], diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index 7e2c762..9200630 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -37,7 +37,7 @@ export default [ /* [strict-null-checks] - With `stickNullChecks` disabled, non-null assertions are discouraged (this rule is configured as 'error') + With `strictNullChecks` disabled, non-null assertions are discouraged (this rule is configured as 'error') as non-null assertions do not provide additional type safety and if used inconsistently add to visual noise. With `strictNullChecks` enabled, the non-null assertion operator (this rule configured as 'off') is useful for asserting that a value will no longer be null and usage of operator should be allowed. @@ -46,11 +46,6 @@ export default [ 'valid-typeof': 'off', - /* - Overrides to TypeScript stylistic rules: - https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic.ts - */ - /* Overrides to Typescript rules outside of the recommended configuration: */ @@ -92,6 +87,11 @@ export default [ { accessibility: 'explicit', overrides: { constructors: 'off' } } ], + /* + Overrides to TypeScript stylistic rules: + https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/flat/stylistic.ts + */ + /* All interface members should be terminated with a semicolon including single line definitions, consistent with classes. Object literal types should use commas @@ -118,6 +118,8 @@ export default [ } }], + '@stylistic/type-annotation-spacing': 'error', + /* Group members by fields and methods and then order them by accessibility starting with statics. Order members within these groups in a logical organization where @@ -219,8 +221,6 @@ export default [ */ '@typescript-eslint/sort-type-union-intersection-members': 'off', - '@stylistic/type-annotation-spacing': 'error', - /* This rule is better enforced with the TypeScript `noImplicitAny` and `strictPropertyInitialization` compiler options. From 56edf112728ec25571223f15ea61103c08462a1c Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Thu, 18 Sep 2025 19:53:53 +0530 Subject: [PATCH 14/53] address lvl2 pr comments Signed-off-by: gokulprasanth-ni --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 48dc04e..a3f3e6e 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ export default [ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/angular-eslint/angular-eslint#readme). -1. **For single and multi-project workspaces**, [add the angular-eslint](https://github.com/angular-eslint/angular-eslint#quick-start). Remove the `angular-eslint` and `eslint` dependencies from `package.json`. +1. **For single and multi-project workspaces**, [add angular-eslint](https://github.com/angular-eslint/angular-eslint#quick-start). Remove the `angular-eslint` and `eslint` dependencies from `package.json`. ```bash ng add angular-eslint ``` @@ -284,6 +284,7 @@ To disable a rule for a specific file pattern or directory, update the rules sec export default [ // ...other configs { + // This rule is disabled as an example files: ['*.stories.ts'], rules: { 'import/no-default-export': 'off' From c1a09a26cfad31ef2fff7bcb13fb54671fc72178 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Fri, 19 Sep 2025 12:05:41 +0530 Subject: [PATCH 15/53] Replace spread with export Signed-off-by: gokulprasanth-ni --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a3f3e6e..1ae88fe 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ After installing the lint configuration packages, follow the configuration instr ### JavaScript configuration -Spread `@ni/eslint-config-javascript` configurations in your [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): +Export `@ni/eslint-config-javascript` configurations in your [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): ```js import javascript from '@ni/eslint-config-javascript'; @@ -81,7 +81,7 @@ export default [ ### TypeScript configuration -Spread `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. +Export `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. ```js import typescript from '@ni/eslint-config-typescript'; @@ -114,7 +114,7 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ > ng g angular-eslint:add-eslint-to-project > ng config cli.schematicCollections "[\"angular-eslint\"]" ``` -3. Spread the NI configured rules for Angular and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +3. Export the NI configured rules for Angular and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. ```js import angular from '@ni/eslint-config-angular'; import angularTypeChecking from '@ni/eslint-config-angular/requiring-type-checking'; @@ -143,7 +143,7 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ ### Playwright configuration -Spread `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +Export `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. **Note:** The Playwright configurations extend the TypeScript configurations, so it is not necessary for an application to extend them both. However, the Playwright configurations should only be applied to directories that contain Playwright tests and utilities. From a110ff5be959e075e42a6a9e4303ecd72872ab22 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Fri, 19 Sep 2025 13:04:14 +0530 Subject: [PATCH 16/53] handle rules based on comments Signed-off-by: gokulprasanth-ni --- packages/eslint-config-typescript/index.js | 2 ++ .../eslint-config-typescript/requiring-type-checking.js | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index 9200630..cdcc7a2 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -34,6 +34,8 @@ export default [ */ '@typescript-eslint/explicit-module-boundary-types': 'error', + 'no-with': 'error', + 'no-class-assign': 'error', /* [strict-null-checks] diff --git a/packages/eslint-config-typescript/requiring-type-checking.js b/packages/eslint-config-typescript/requiring-type-checking.js index 919de05..b23ea66 100644 --- a/packages/eslint-config-typescript/requiring-type-checking.js +++ b/packages/eslint-config-typescript/requiring-type-checking.js @@ -21,6 +21,13 @@ export default [ '@typescript-eslint/no-redundant-type-constituents': 'off', '@typescript-eslint/no-unsafe-declaration-merging': 'off', '@typescript-eslint/no-unsafe-enum-comparison': 'off', + '@typescript-eslint/prefer-find': 'off', + 'prefer-promise-reject-errors': ['error', { allowEmptyReject: true }], + '@typescript-eslint/prefer-promise-reject-errors': 'off', + '@typescript-eslint/no-unsafe-unary-minus': 'off', + '@typescript-eslint/no-array-delete': 'off', + 'no-with': 'error', + 'no-class-assign': 'error', /* This rule can be confusing if you're not familiar with JavaScript's rules for binding `this`, From e2781535ee721c97af65d3b6dfcbed002c1add89 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Fri, 19 Sep 2025 14:32:51 +0530 Subject: [PATCH 17/53] update print evaluated rules Signed-off-by: gokulprasanth-ni --- tests/print-evaluated-rules/index.js | 38 ++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index d0b8b18..07ae9fc 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -45,11 +45,11 @@ const __dirname = path.dirname(__filename); const getRules = function () { return { - ...configEslint.rules, - ...configTypescript.rules, - ...configTypescriptTypechecked.rules, - ...configAngular.rules, - ...configAngularTemplate.rules + ...normalizeRulesSeverityToString(configEslint.rules), + ...normalizeRulesSeverityToString(configTypescript.rules), + ...normalizeRulesSeverityToString(configTypescriptTypechecked.rules), + ...normalizeRulesSeverityToString(configAngular.rules), + ...normalizeRulesSeverityToString(configAngularTemplate.rules) }; }; @@ -140,3 +140,31 @@ async function calculateConfigForFile(filePath) { return await eslint.calculateConfigForFile(filePath); } + +function normalizeSeverityToString(val) { + switch (val) { + case 0: + return 'off'; + case 1: + return 'warn'; + case 2: + return 'error'; + default: + return val; + } +} + +function normalizeRulesSeverityToString(rulesObj) { + const updatedRules = {}; + for (const ruleName in rulesObj) { + if (Object.prototype.hasOwnProperty.call(rulesObj, ruleName)) { + const ruleVal = rulesObj[ruleName]; + if (Array.isArray(ruleVal)) { + updatedRules[ruleName] = [normalizeSeverityToString(ruleVal[0]), ...ruleVal.slice(1)]; + } else { + updatedRules[ruleName] = normalizeSeverityToString(ruleVal); + } + } + } + return updatedRules; +} From 7196ed5f89de6cbb81f9089b0152b77ebe229916 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Fri, 19 Sep 2025 16:04:05 +0530 Subject: [PATCH 18/53] update print evaluated rules code Signed-off-by: gokulprasanth-ni --- tests/print-evaluated-rules/index.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index 07ae9fc..a8d4889 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -27,7 +27,7 @@ const __dirname = path.dirname(__filename); .wrap(null).argv; const hasWarn = function (config) { - return JSON.stringify(config).includes('"warn"'); + return JSON.stringify(normalizeRulesSeverityToString(config.rules)).indexOf('"warn"') !== -1; }; const testDir = path.resolve(__dirname, '..'); @@ -94,7 +94,7 @@ const __dirname = path.dirname(__filename); return; } - const getDivergedRules = rules => Object.keys(rules) + const getDivergedRules = rules => (Object.keys(rules) .filter(key => !key.startsWith('@angular-eslint')) .filter( key => !configTypescript.rules[key] @@ -103,14 +103,10 @@ const __dirname = path.dirname(__filename); .reduce((config, key) => { config[key] = rules[key]; return config; - }, {}); + }, {})); - const angularDivergedRules = getDivergedRules( - angularRules.map(config => config.rules) - ); - const angularTemplateDivergedRules = getDivergedRules( - angularTemplateRules.map(config => config.rules) - ); + const angularDivergedRules = getDivergedRules(Object.assign({}, ...angularRules.slice(-2).map(item => item.rules))); + const angularTemplateDivergedRules = getDivergedRules(Object.assign({}, ...angularTemplateRules.slice(-2).map(item => item.rules))); const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length || !!Object.keys(angularTemplateDivergedRules).length; From 1333caff693619bb38d119d811132a6d5787ec6a Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Sun, 21 Sep 2025 14:41:54 +0530 Subject: [PATCH 19/53] refactor: update package with named exports Signed-off-by: gokulprasanth-ni --- package-lock.json | 50 +++++-------------- .../eslint-config-angular/eslint.config.js | 8 +-- packages/eslint-config-angular/index.js | 14 ++++-- .../requiring-type-checking.js | 6 +-- packages/eslint-config-angular/template.js | 2 +- .../eslint-config-javascript/eslint.config.js | 8 +-- packages/eslint-config-javascript/index.js | 2 +- .../eslint-config-javascript/rules/imports.js | 2 +- .../eslint-config-playwright/eslint.config.js | 8 +-- packages/eslint-config-playwright/index.js | 6 +-- .../requiring-type-checking.js | 4 +- .../eslint-config-typescript/eslint.config.js | 8 +-- packages/eslint-config-typescript/index.js | 14 +++--- .../lib/extensions-requiring-type-checking.js | 2 +- .../lib/extensions.js | 2 +- .../requiring-type-checking.js | 6 +-- tests/angular/eslint.config.js | 9 ++-- tests/javascript/eslint.config.js | 9 ++-- .../README.md | 5 -- .../eslint.config.js | 33 ------------ .../index.ts | 10 ---- .../package.json | 16 ------ .../tsconfig.json | 8 --- tests/playwright/eslint.config.js | 25 ++++++---- tests/playwright/tsconfig.json | 8 +++ tests/print-evaluated-rules/eslint.config.js | 8 +-- tests/print-evaluated-rules/index.js | 8 +-- tests/print-evaluated-rules/package.json | 1 - .../CHANGELOG.json | 35 ------------- .../CHANGELOG.md | 21 -------- .../README.md | 5 -- .../eslint.config.js | 23 --------- .../index.ts | 19 ------- .../package.json | 13 ----- .../tsconfig.json | 7 --- tests/typescript/eslint.config.js | 20 ++++++-- tests/typescript/tsconfig.json | 7 +++ 37 files changed, 127 insertions(+), 305 deletions(-) delete mode 100644 tests/playwright-requiring-type-checking/README.md delete mode 100644 tests/playwright-requiring-type-checking/eslint.config.js delete mode 100644 tests/playwright-requiring-type-checking/index.ts delete mode 100644 tests/playwright-requiring-type-checking/package.json delete mode 100644 tests/playwright-requiring-type-checking/tsconfig.json create mode 100644 tests/playwright/tsconfig.json delete mode 100644 tests/typescript-requiring-type-checking/CHANGELOG.json delete mode 100644 tests/typescript-requiring-type-checking/CHANGELOG.md delete mode 100644 tests/typescript-requiring-type-checking/README.md delete mode 100644 tests/typescript-requiring-type-checking/eslint.config.js delete mode 100644 tests/typescript-requiring-type-checking/index.ts delete mode 100644 tests/typescript-requiring-type-checking/package.json delete mode 100644 tests/typescript-requiring-type-checking/tsconfig.json create mode 100644 tests/typescript/tsconfig.json diff --git a/package-lock.json b/package-lock.json index fceb494..712116a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -430,9 +430,9 @@ "peer": true }, "node_modules/@eslint/js": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.35.0.tgz", - "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.36.0.tgz", + "integrity": "sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==", "license": "MIT", "peer": true, "engines": { @@ -549,10 +549,6 @@ "resolved": "tests/javascript", "link": true }, - "node_modules/@ni/playwright-requiring-type-checking-test": { - "resolved": "tests/playwright-requiring-type-checking", - "link": true - }, "node_modules/@ni/playwright-test": { "resolved": "tests/playwright", "link": true @@ -561,10 +557,6 @@ "resolved": "tests/print-evaluated-rules", "link": true }, - "node_modules/@ni/typescript-requiring-type-checking-test": { - "resolved": "tests/typescript-requiring-type-checking", - "link": true - }, "node_modules/@ni/typescript-test": { "resolved": "tests/typescript", "link": true @@ -628,14 +620,14 @@ "peer": true }, "node_modules/@stylistic/eslint-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.3.1.tgz", - "integrity": "sha512-Ykums1VYonM0TgkD0VteVq9mrlO2FhF48MDJnPyv3MktIB2ydtuhlO0AfWm7xnW1kyf5bjOqA6xc7JjviuVTxg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.4.0.tgz", + "integrity": "sha512-UG8hdElzuBDzIbjG1QDwnYH0MQ73YLXDFHgZzB4Zh/YJfnw8XNsloVtytqzx0I2Qky9THSdpTmi8Vjn/pf/Lew==", "license": "MIT", "peer": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/types": "^8.41.0", + "@eslint-community/eslint-utils": "^4.9.0", + "@typescript-eslint/types": "^8.44.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "estraverse": "^5.3.0", @@ -1921,9 +1913,9 @@ } }, "node_modules/eslint": { - "version": "9.35.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.35.0.tgz", - "integrity": "sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==", + "version": "9.36.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.36.0.tgz", + "integrity": "sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==", "license": "MIT", "peer": true, "dependencies": { @@ -1933,7 +1925,7 @@ "@eslint/config-helpers": "^0.3.1", "@eslint/core": "^0.15.2", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.35.0", + "@eslint/js": "9.36.0", "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -5146,16 +5138,6 @@ "@ni/eslint-config-playwright": "*" } }, - "tests/playwright-requiring-type-checking": { - "name": "@ni/playwright-requiring-type-checking-test", - "version": "1.0.0", - "devDependencies": { - "@playwright/test": "^1.42.1" - }, - "peerDependencies": { - "@ni/eslint-config-playwright": "*" - } - }, "tests/print-evaluated-rules": { "name": "@ni/print-evaluated-rules-test", "version": "1.0.0", @@ -5166,7 +5148,6 @@ "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", "@ni/javascript-test": "*", - "@ni/typescript-requiring-type-checking-test": "*", "@ni/typescript-test": "*", "angular-eslint": "18.4.3", "eslint": "^9.35.0" @@ -5178,13 +5159,6 @@ "peerDependencies": { "@ni/eslint-config-typescript": "*" } - }, - "tests/typescript-requiring-type-checking": { - "name": "@ni/typescript-requiring-type-checking-test", - "version": "1.0.0", - "peerDependencies": { - "@ni/eslint-config-typescript": "*" - } } } } diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index 50b45f3..770b56d 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -1,11 +1,13 @@ -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascript, + ...javascriptConfig, + { + ignores: ['eslint.config.js'], + }, { files: ['**/*.js'], rules: { - 'import/no-default-export': 'off', 'import/no-extraneous-dependencies': 'off', 'import/no-unresolved': 'off', }, diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index ad34f3c..1a872b5 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -1,9 +1,9 @@ -import typescript from '@ni/eslint-config-typescript'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; import angular from 'angular-eslint'; -export default [ +export const angularConfig = [ ...angular.configs.tsRecommended, - ...typescript, + ...typescriptConfig, { processor: angular.processInlineTemplates, rules: { @@ -134,7 +134,13 @@ export default [ Tests often define additional classes as mocks or helper components and it improves test readability if those are in the same file as the tests. */ - 'max-classes-per-file': 'off' + 'max-classes-per-file': 'off', + + /* + Spies used by Angular application tests result in a significant number of + unbound methods so this rule is disabled for test specs in Angular projects. + */ + '@typescript-eslint/unbound-method': 'off', } } ]; diff --git a/packages/eslint-config-angular/requiring-type-checking.js b/packages/eslint-config-angular/requiring-type-checking.js index 4cc11c1..096b851 100644 --- a/packages/eslint-config-angular/requiring-type-checking.js +++ b/packages/eslint-config-angular/requiring-type-checking.js @@ -1,8 +1,8 @@ -import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; +import { typescriptRequiringTypeCheckingConfig } from '@ni/eslint-config-typescript/requiring-type-checking'; import typescriptPlugin from 'typescript-eslint'; -export default [ - ...typescriptRequiringTypeChecking, +export const angularRequiringTypeCheckingConfig = [ + ...typescriptRequiringTypeCheckingConfig, { languageOptions: { parser: typescriptPlugin.parser, diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/template.js index 2360750..e420599 100644 --- a/packages/eslint-config-angular/template.js +++ b/packages/eslint-config-angular/template.js @@ -1,7 +1,7 @@ import { ignoreAttributes } from '@ni/eslint-config-angular/template/options'; import angularTemplate from 'angular-eslint'; -export default [ +export const angularTemplateConfig = [ ...angularTemplate.configs.templateRecommended, { rules: { diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js index d64a8b4..a3bc996 100644 --- a/packages/eslint-config-javascript/eslint.config.js +++ b/packages/eslint-config-javascript/eslint.config.js @@ -1,11 +1,13 @@ -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascript, + ...javascriptConfig, + { + ignores: ['eslint.config.js'], + }, { files: ['**/*.js'], rules: { - 'import/no-default-export': 'off', 'import/extensions': 'off', 'import/no-extraneous-dependencies': 'off', }, diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index aecd50a..181d5ac 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -10,7 +10,7 @@ import { es6 } from './rules/es6.js'; import { imports } from './rules/imports.js'; import { strict } from './rules/strict.js'; -export default [ +export const javascriptConfig = [ stylisticPlugin.configs['disable-legacy'], bestPractices, errors, diff --git a/packages/eslint-config-javascript/rules/imports.js b/packages/eslint-config-javascript/rules/imports.js index 866b528..328e0f3 100644 --- a/packages/eslint-config-javascript/rules/imports.js +++ b/packages/eslint-config-javascript/rules/imports.js @@ -101,7 +101,7 @@ export const imports = { '**/protractor.conf.js', // protractor config '**/protractor.conf.*.js', // protractor config '**/karma.conf.js', // karma config - '**/.eslintrc.js' // eslint config + '**/eslint.config.js' // eslint config ], optionalDependencies: false, }], diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index b9af386..8bbb3f0 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -1,10 +1,12 @@ -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascript, + ...javascriptConfig, + { + ignores: ['eslint.config.js'], + }, { rules: { - 'import/no-default-export': 'off', 'import/no-extraneous-dependencies': 'off', 'import/no-unresolved': 'off', }, diff --git a/packages/eslint-config-playwright/index.js b/packages/eslint-config-playwright/index.js index af347b8..676ff2c 100644 --- a/packages/eslint-config-playwright/index.js +++ b/packages/eslint-config-playwright/index.js @@ -1,8 +1,8 @@ -import typescript from '@ni/eslint-config-typescript'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; import playwright from 'eslint-plugin-playwright'; -export default [ - ...typescript, +export const playwrightConfig = [ + ...typescriptConfig, playwright.configs['flat/recommended'], { rules: { diff --git a/packages/eslint-config-playwright/requiring-type-checking.js b/packages/eslint-config-playwright/requiring-type-checking.js index da60cb7..c69e1e9 100644 --- a/packages/eslint-config-playwright/requiring-type-checking.js +++ b/packages/eslint-config-playwright/requiring-type-checking.js @@ -1,3 +1,3 @@ -import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; +import { typescriptRequiringTypeCheckingConfig } from '@ni/eslint-config-typescript/requiring-type-checking'; -export default [...typescriptRequiringTypeChecking]; \ No newline at end of file +export const playwrightRequiringTypeCheckingConfig = [...typescriptRequiringTypeCheckingConfig]; \ No newline at end of file diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index deaa474..e0face4 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -1,11 +1,13 @@ -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascript, + ...javascriptConfig, + { + ignores: ['eslint.config.js'], + }, { files: ['**/*.js'], rules: { - 'import/no-default-export': 'off', 'import/extensions': 'off', 'import/no-extraneous-dependencies': 'off', 'import/no-unresolved': 'off', diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index cdcc7a2..2834715 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -1,12 +1,14 @@ -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; import typescriptPlugin from 'typescript-eslint'; import importPlugin from 'eslint-plugin-import'; -import extensions from './lib/extensions.js'; +import { extensionsConfig } from './lib/extensions.js'; +import { typescriptRequiringTypeCheckingConfig } from './requiring-type-checking.js'; -export default [ - ...javascript, +export const typescriptConfig = [ + ...javascriptConfig, ...typescriptPlugin.configs.recommended, - ...extensions, + ...extensionsConfig, + ...typescriptRequiringTypeCheckingConfig, { languageOptions: { parser: typescriptPlugin.parser @@ -34,8 +36,6 @@ export default [ */ '@typescript-eslint/explicit-module-boundary-types': 'error', - 'no-with': 'error', - 'no-class-assign': 'error', /* [strict-null-checks] diff --git a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js index 6420856..affc2ca 100644 --- a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js +++ b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js @@ -1,4 +1,4 @@ -export default [{ +export const extensionsRequiringTypeCheckingConfig = [{ rules: { 'dot-notation': 'off', '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], diff --git a/packages/eslint-config-typescript/lib/extensions.js b/packages/eslint-config-typescript/lib/extensions.js index bf6e6fc..732a2e0 100644 --- a/packages/eslint-config-typescript/lib/extensions.js +++ b/packages/eslint-config-typescript/lib/extensions.js @@ -1,4 +1,4 @@ -export default [{ +export const extensionsConfig = [{ rules: { /* The following are extension rules that replace core JavaScript rules to support diff --git a/packages/eslint-config-typescript/requiring-type-checking.js b/packages/eslint-config-typescript/requiring-type-checking.js index b23ea66..6202717 100644 --- a/packages/eslint-config-typescript/requiring-type-checking.js +++ b/packages/eslint-config-typescript/requiring-type-checking.js @@ -1,10 +1,10 @@ import typescriptPlugin from 'typescript-eslint'; -import extensionsTypeChecked from './lib/extensions-requiring-type-checking.js'; +import { extensionsRequiringTypeCheckingConfig } from './lib/extensions-requiring-type-checking.js'; -export default [ +export const typescriptRequiringTypeCheckingConfig = [ ...typescriptPlugin.configs.recommendedTypeChecked, ...typescriptPlugin.configs.stylisticTypeChecked, - ...extensionsTypeChecked, + ...extensionsRequiringTypeCheckingConfig, { languageOptions: { parser: typescriptPlugin.parser diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index ecbfc08..a50cd2e 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -1,9 +1,8 @@ import { fileURLToPath } from 'url'; import path from 'path'; -import angular from '@ni/eslint-config-angular'; -import angularTemplate from '@ni/eslint-config-angular/template'; -import angularRequiringTypeChecking from '@ni/eslint-config-angular/requiring-type-checking'; +import { angularConfig } from '@ni/eslint-config-angular'; +import { angularTemplateConfig } from '@ni/eslint-config-angular/template'; import { ignoreAttributes } from '@ni/eslint-config-angular/template/options'; import typescriptPlugin from 'typescript-eslint'; @@ -16,7 +15,7 @@ export default defineConfig([ { ignores: ['*.js'] }, { files: ['**/*.ts'], - extends: [...angular, ...angularRequiringTypeChecking], + extends: [...angularConfig], languageOptions: { parser: typescriptPlugin.parser, parserOptions: { @@ -27,7 +26,7 @@ export default defineConfig([ }, { files: ['*.html'], - extends: [...angularTemplate], + extends: [...angularTemplateConfig], languageOptions: { parser: angularTemplatePlugin.templateParser }, }, { diff --git a/tests/javascript/eslint.config.js b/tests/javascript/eslint.config.js index c4b7464..1fb9c30 100644 --- a/tests/javascript/eslint.config.js +++ b/tests/javascript/eslint.config.js @@ -1,11 +1,8 @@ -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascript, + ...javascriptConfig, { - files: ['*.config.js'], - rules: { - 'import/no-default-export': 'off', - }, + ignores: ['eslint.config.js'] }, ]; diff --git a/tests/playwright-requiring-type-checking/README.md b/tests/playwright-requiring-type-checking/README.md deleted file mode 100644 index 52fd19f..0000000 --- a/tests/playwright-requiring-type-checking/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Playwright Requiring Type Checking Smoke Test - -## Overview - -This package is an smoke test for using the Playwright requiring type checking rules in a project. See [CONTRIBUTING.md](../../CONTRIBUTING.md#smoke-tests) for more information. diff --git a/tests/playwright-requiring-type-checking/eslint.config.js b/tests/playwright-requiring-type-checking/eslint.config.js deleted file mode 100644 index c08b66d..0000000 --- a/tests/playwright-requiring-type-checking/eslint.config.js +++ /dev/null @@ -1,33 +0,0 @@ -import { fileURLToPath } from 'url'; -import path from 'path'; -import playwright from '@ni/eslint-config-playwright'; -import playwrightRequiringTypeChecking from '@ni/eslint-config-playwright/requiring-type-checking'; - -const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); - -export default [ - ...playwright, - ...playwrightRequiringTypeChecking, - { - ignores: ['*.js'], - }, - { - files: ['*.ts'], - languageOptions: { - parserOptions: { - project: ['./tsconfig.json'], - tsConfigRootDir, - }, - }, - rules: { - // In this example app, all files are allowed to refer to playwright packages from devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - }, - }, - { - files: ['*.config.js'], - rules: { - 'import/no-default-export': 'off', - }, - }, -]; \ No newline at end of file diff --git a/tests/playwright-requiring-type-checking/index.ts b/tests/playwright-requiring-type-checking/index.ts deleted file mode 100644 index 944e258..0000000 --- a/tests/playwright-requiring-type-checking/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { test, expect } from '@playwright/test'; - -test.describe('AssetDisplayPropertiesSidenavWrapperComponent', () => { - test('has title', async ({ page }) => { - await page.goto('https://playwright.dev/'); - - // Expect a title "to contain" a substring. - await expect(page).toHaveTitle(/Playwright/); - }); -}); \ No newline at end of file diff --git a/tests/playwright-requiring-type-checking/package.json b/tests/playwright-requiring-type-checking/package.json deleted file mode 100644 index 63f9462..0000000 --- a/tests/playwright-requiring-type-checking/package.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "module", - "name": "@ni/playwright-requiring-type-checking-test", - "version": "1.0.0", - "private": true, - "description": "Smoke test for Playwright requiring type checking project integration.", - "scripts": { - "test": "eslint ." - }, - "peerDependencies": { - "@ni/eslint-config-playwright": "*" - }, - "devDependencies": { - "@playwright/test": "^1.42.1" - } -} diff --git a/tests/playwright-requiring-type-checking/tsconfig.json b/tests/playwright-requiring-type-checking/tsconfig.json deleted file mode 100644 index 3f6b14e..0000000 --- a/tests/playwright-requiring-type-checking/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "files": ["./index.ts"], - "compilerOptions": { - "strictNullChecks": false, - "moduleResolution": "node", - "target": "ES2020", - }, -} diff --git a/tests/playwright/eslint.config.js b/tests/playwright/eslint.config.js index 8ad867e..d39aff4 100644 --- a/tests/playwright/eslint.config.js +++ b/tests/playwright/eslint.config.js @@ -1,18 +1,25 @@ -import playwright from '@ni/eslint-config-playwright'; +import { fileURLToPath } from 'url'; +import path from 'path'; +import { playwrightConfig } from '@ni/eslint-config-playwright'; + +const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); export default [ - ...playwright, + ...playwrightConfig, + { + ignores: ['*.js'] + }, { files: ['*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir, + }, + }, rules: { // In this example app, all files are allowed to refer to playwright packages from devDependencies 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], }, - }, - { - files: ['*.config.js'], - rules: { - 'import/no-default-export': 'off', - }, - }, + } ]; diff --git a/tests/playwright/tsconfig.json b/tests/playwright/tsconfig.json new file mode 100644 index 0000000..a48a639 --- /dev/null +++ b/tests/playwright/tsconfig.json @@ -0,0 +1,8 @@ +{ + "files": ["./index.ts"], + "compilerOptions": { + "strictNullChecks": false, + "moduleResolution": "node", + "target": "ES2020" + } +} \ No newline at end of file diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js index 20f4fce..a78bd8e 100644 --- a/tests/print-evaluated-rules/eslint.config.js +++ b/tests/print-evaluated-rules/eslint.config.js @@ -1,11 +1,13 @@ -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascript, + ...javascriptConfig, + { + ignores: ['eslint.config.js'] + }, { files: ['*.js'], rules: { - 'import/no-default-export': 'off', 'import/no-extraneous-dependencies': 'off', }, }, diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index a8d4889..39113f0 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -1,7 +1,7 @@ /* eslint-disable no-console */ import { ESLint } from 'eslint'; -import angularRules from '@ni/eslint-config-angular'; -import angularTemplateRules from '@ni/eslint-config-angular/template'; +import { angularConfig } from '@ni/eslint-config-angular'; +import { angularTemplateConfig } from '@ni/eslint-config-angular/template'; import fs from 'fs'; import path from 'path'; import yargs from 'yargs/yargs'; @@ -105,8 +105,8 @@ const __dirname = path.dirname(__filename); return config; }, {})); - const angularDivergedRules = getDivergedRules(Object.assign({}, ...angularRules.slice(-2).map(item => item.rules))); - const angularTemplateDivergedRules = getDivergedRules(Object.assign({}, ...angularTemplateRules.slice(-2).map(item => item.rules))); + const angularDivergedRules = getDivergedRules(Object.assign({}, ...angularConfig.slice(-2).map(item => item.rules))); + const angularTemplateDivergedRules = getDivergedRules(Object.assign({}, ...angularTemplateConfig.slice(-2).map(item => item.rules))); const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length || !!Object.keys(angularTemplateDivergedRules).length; diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index 7b380c9..abc427d 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -16,7 +16,6 @@ "@ni/eslint-config-angular": "*", "@ni/javascript-test": "*", "@ni/typescript-test": "*", - "@ni/typescript-requiring-type-checking-test": "*", "eslint": "^9.35.0" }, "dependencies": { diff --git a/tests/typescript-requiring-type-checking/CHANGELOG.json b/tests/typescript-requiring-type-checking/CHANGELOG.json deleted file mode 100644 index 643199e..0000000 --- a/tests/typescript-requiring-type-checking/CHANGELOG.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@ni/typescript-requiring-type-checking-test", - "entries": [ - { - "date": "Thu, 28 Oct 2021 15:59:19 GMT", - "tag": "@ni/typescript-requiring-type-checking-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-requiring-type-checking-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.2", - "commit": "772f17b65e83107fd8682087c87b9619a5c2ea38" - } - ] - } - }, - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/typescript-requiring-type-checking-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-requiring-type-checking-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/typescript-requiring-type-checking/CHANGELOG.md b/tests/typescript-requiring-type-checking/CHANGELOG.md deleted file mode 100644 index f22fbee..0000000 --- a/tests/typescript-requiring-type-checking/CHANGELOG.md +++ /dev/null @@ -1,21 +0,0 @@ -# Change Log - @ni/typescript-requiring-type-checking-test - -This log was last generated on Thu, 28 Oct 2021 15:59:19 GMT and should not be manually modified. - - - -## 1.0.0 - -Thu, 28 Oct 2021 15:59:19 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.2 - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.1 diff --git a/tests/typescript-requiring-type-checking/README.md b/tests/typescript-requiring-type-checking/README.md deleted file mode 100644 index 7083a24..0000000 --- a/tests/typescript-requiring-type-checking/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# TypeScript Requring Type Checking Smoke Test - -## Overview - -This package is an smoke test for using the TypeScript requiring type checking rules in a project. See [CONTRIBUTING.md](../../CONTRIBUTING.md#smoke-tests) for more information. diff --git a/tests/typescript-requiring-type-checking/eslint.config.js b/tests/typescript-requiring-type-checking/eslint.config.js deleted file mode 100644 index b7bc53e..0000000 --- a/tests/typescript-requiring-type-checking/eslint.config.js +++ /dev/null @@ -1,23 +0,0 @@ -import { fileURLToPath } from 'url'; -import path from 'path'; -import typescript from '@ni/eslint-config-typescript'; -import typescriptRequiringTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; - -const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); - -export default [ - { - ignores: ['*.js'], - }, - ...typescript, - ...typescriptRequiringTypeChecking, - { - files: ['**/*.ts'], - languageOptions: { - parserOptions: { - project: ['./tsconfig.json'], - tsConfigRootDir, - }, - }, - }, -]; diff --git a/tests/typescript-requiring-type-checking/index.ts b/tests/typescript-requiring-type-checking/index.ts deleted file mode 100644 index e8fea41..0000000 --- a/tests/typescript-requiring-type-checking/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -// TypeScript Smoke Test - -export class NI { - private _awesomeLevel = 1; - - public get awesome(): boolean { - return this._awesomeLevel > 0; - } - - public makeAwesomer(): void { - this._awesomeLevel += 1; - } - - public async slowAdd(a: number, b: number, timeMs: number): Promise { - return await new Promise(resolve => { - setTimeout(() => resolve(a + b), timeMs); - }); - } -} diff --git a/tests/typescript-requiring-type-checking/package.json b/tests/typescript-requiring-type-checking/package.json deleted file mode 100644 index fa42018..0000000 --- a/tests/typescript-requiring-type-checking/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "module", - "name": "@ni/typescript-requiring-type-checking-test", - "version": "1.0.0", - "private": true, - "description": "Smoke test for TypeScript projects using type checking.", - "scripts": { - "test": "eslint ." - }, - "peerDependencies": { - "@ni/eslint-config-typescript": "*" - } -} diff --git a/tests/typescript-requiring-type-checking/tsconfig.json b/tests/typescript-requiring-type-checking/tsconfig.json deleted file mode 100644 index 73a95ee..0000000 --- a/tests/typescript-requiring-type-checking/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "files": ["./index.ts"], - "compilerOptions": { - "strictNullChecks": false, - "target": "ES2020" - }, -} diff --git a/tests/typescript/eslint.config.js b/tests/typescript/eslint.config.js index 0de43fe..52b18c6 100644 --- a/tests/typescript/eslint.config.js +++ b/tests/typescript/eslint.config.js @@ -1,11 +1,21 @@ -import typescript from '@ni/eslint-config-typescript'; +import { fileURLToPath } from 'url'; +import path from 'path'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; + +const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); export default [ - ...typescript, + ...typescriptConfig, + { + ignores: ['eslint.config.js'] + }, { - files: ['*.js'], - rules: { - 'import/no-default-export': 'off', + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir, + }, }, }, ]; \ No newline at end of file diff --git a/tests/typescript/tsconfig.json b/tests/typescript/tsconfig.json new file mode 100644 index 0000000..2996d58 --- /dev/null +++ b/tests/typescript/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": ["./index.ts"], + "compilerOptions": { + "strictNullChecks": false, + "target": "ES2020" + } +} \ No newline at end of file From b7f4d3c73833f0a5f13ed1b4c3e596e7d62bb0a6 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Sun, 21 Sep 2025 16:18:36 +0530 Subject: [PATCH 20/53] update readme info Signed-off-by: gokulprasanth-ni --- README.md | 32 ++++++++----------- package-lock.json | 2 -- package.json | 2 -- .../eslint-config-angular/eslint.config.js | 1 - .../requiring-type-checking.js | 6 ---- .../eslint-config-playwright/eslint.config.js | 1 - 6 files changed, 13 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 1ae88fe..2b82694 100644 --- a/README.md +++ b/README.md @@ -72,24 +72,22 @@ After installing the lint configuration packages, follow the configuration instr Export `@ni/eslint-config-javascript` configurations in your [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): ```js -import javascript from '@ni/eslint-config-javascript'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascript, + ...javascriptConfig, ]; ``` ### TypeScript configuration -Export `@ni/eslint-config-typescript` and `@ni/eslint-config-typescript/requiring-type-checking` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. +Export `@ni/eslint-config-typescript` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. ```js -import typescript from '@ni/eslint-config-typescript'; -import typescriptTypeChecking from '@ni/eslint-config-typescript/requiring-type-checking'; +import { typescriptConfig } from '@ni/eslint-config-typescript'; export default [ - ...typescript, - ...typescriptTypeChecking, + ...typescriptConfig, { files: ['**/*.ts'], languageOptions: { @@ -116,16 +114,14 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ ``` 3. Export the NI configured rules for Angular and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. ```js - import angular from '@ni/eslint-config-angular'; - import angularTypeChecking from '@ni/eslint-config-angular/requiring-type-checking'; - import angularTemplate from '@ni/eslint-config-angular/template'; + import angularConfig from '@ni/eslint-config-angular'; + import angularTemplateConfig from '@ni/eslint-config-angular/template'; export default [ { files: ['**/*.ts'], extends: [ - ...angular, - ...angularTypeChecking + ...angularConfig ], languageOptions: { parserOptions: { @@ -135,7 +131,7 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ }, { files: ['*.html'], - extends: [...angularTemplate] + extends: [...angularTemplateConfig] } ]; ``` @@ -143,19 +139,17 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ ### Playwright configuration -Export `@ni/eslint-config-playwright` and `@ni/eslint-config-playwright/requiring-type-checking` in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +Export `@ni/eslint-config-playwright` in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. **Note:** The Playwright configurations extend the TypeScript configurations, so it is not necessary for an application to extend them both. However, the Playwright configurations should only be applied to directories that contain Playwright tests and utilities. ```js // This is an example .eslintrc.js in a Playwright-specific directory. // If Playwright files are mixed with other code, use an "overrides" file pattern to match only Playwright code. -import playwright from '@ni/eslint-config-playwright'; -import playwrightTypeChecking from '@ni/eslint-config-playwright/requiring-type-checking'; +import playwrightConfig from '@ni/eslint-config-playwright'; export default [ - ...playwright, - ...playwrightTypeChecking, + ...playwrightConfig, { files: ['**/*.ts'], languageOptions: { @@ -347,7 +341,7 @@ This option can be adapted for npm scripts, for example. ### TypeScript linting performance -`@ni/eslint-config/typescript-requiring-type-checking` includes rules that require type checking that run slower as they utilize the TypeScript compiler for type information. +`@ni/eslint-config-typescript` includes rules that require type checking that run slower as they utilize the TypeScript compiler for type information. If there are situations where the analysis time for enabling the type checked rules is an excessive burden you may consider creating a separate ESLint configuration that avoids extending the type checked rules and omits the `parserOptions.project` configuration to run in specific scenarios. diff --git a/package-lock.json b/package-lock.json index 712116a..ec765a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,10 +15,8 @@ "packages/eslint-config-playwright", "tests/javascript", "tests/typescript", - "tests/typescript-requiring-type-checking", "tests/angular", "tests/playwright", - "tests/playwright-requiring-type-checking", "tests/print-evaluated-rules" ], "devDependencies": { diff --git a/package.json b/package.json index 692598b..ab38d3b 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,8 @@ "packages/eslint-config-playwright", "tests/javascript", "tests/typescript", - "tests/typescript-requiring-type-checking", "tests/angular", "tests/playwright", - "tests/playwright-requiring-type-checking", "tests/print-evaluated-rules" ], "devDependencies": { diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index 770b56d..4059f78 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -9,7 +9,6 @@ export default [ files: ['**/*.js'], rules: { 'import/no-extraneous-dependencies': 'off', - 'import/no-unresolved': 'off', }, }, ]; \ No newline at end of file diff --git a/packages/eslint-config-angular/requiring-type-checking.js b/packages/eslint-config-angular/requiring-type-checking.js index 096b851..cb7ee04 100644 --- a/packages/eslint-config-angular/requiring-type-checking.js +++ b/packages/eslint-config-angular/requiring-type-checking.js @@ -1,13 +1,7 @@ import { typescriptRequiringTypeCheckingConfig } from '@ni/eslint-config-typescript/requiring-type-checking'; -import typescriptPlugin from 'typescript-eslint'; export const angularRequiringTypeCheckingConfig = [ ...typescriptRequiringTypeCheckingConfig, - { - languageOptions: { - parser: typescriptPlugin.parser, - }, - }, { files: ['**/*.spec.ts'], rules: { diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index 8bbb3f0..7d5ef6a 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -8,7 +8,6 @@ export default [ { rules: { 'import/no-extraneous-dependencies': 'off', - 'import/no-unresolved': 'off', }, }, ]; From be994ea368eceb6ba6d6345617f280779c30adf5 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Sun, 21 Sep 2025 16:51:58 +0530 Subject: [PATCH 21/53] add flat config migration section in readme Signed-off-by: gokulprasanth-ni --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/README.md b/README.md index 2b82694..ca9bd1f 100644 --- a/README.md +++ b/README.md @@ -295,6 +295,46 @@ The rule configuration files in this package (`index.js`, `typescript.js`, etc) ESLint offers several [ways to disable a rule for a line or file](https://eslint.org/docs/user-guide/configuring/rules#disabling-rules). Suppressions should be as targeted as possible and should include a comment explaining the suppression. +### Migrating to ESLint Flat Configuration Format + +ESLint’s [flat config format](https://eslint.org/docs/latest/use/configure/configuration-files-new) is now the recommended way to configure ESLint. If your project is still using a legacy `.eslintrc.*` file, follow these steps to migrate: + +1. **Rename your configuration file** +Replace your `.eslintrc.js` or `.eslintrc.json` with a new `eslint.config.js` file at the root of your project. + +2. **Switch to using imports** +Instead of using the `extends` property, import the configuration packages you need and export an array of configurations: + + ```js + // eslint.config.js + import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; + + export default [ + ...angularConfig, + ...angularTemplateConfig, + // Add any project-specific overrides here + ]; + ``` + + **Note:** All rules that previously required type checking are now included in the main config export for each package. You no longer need to import a separate requiring-type-checking config—just import the main config to get all rules. + +3. **Set parser options as needed** + For TypeScript and Angular projects, ensure you set `parserOptions.project` in a config block to point to your TypeScript configuration: + + ```js + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: './tsconfig.json' + } + } + } + ``` + +4. **Remove legacy config fields** + The flat config format does not use `parser`, or `plugins` at the top level. All configuration should be handled through the imported arrays and objects. + ### Recommended Development Environment Configuration Modern IDEs can be configured to provide live feedback about ESLint errors. From d6a557cc9e11f0ec625266e9971970e6c29cac36 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Sun, 21 Sep 2025 17:01:54 +0530 Subject: [PATCH 22/53] enable strict null checks by default Signed-off-by: gokulprasanth-ni --- README.md | 8 ++++---- .../requiring-type-checking.js | 20 +++++++++---------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index ca9bd1f..fb8f395 100644 --- a/README.md +++ b/README.md @@ -299,10 +299,10 @@ ESLint offers several [ways to disable a rule for a line or file](https://eslint ESLint’s [flat config format](https://eslint.org/docs/latest/use/configure/configuration-files-new) is now the recommended way to configure ESLint. If your project is still using a legacy `.eslintrc.*` file, follow these steps to migrate: -1. **Rename your configuration file** +1. **Rename your configuration file**, Replace your `.eslintrc.js` or `.eslintrc.json` with a new `eslint.config.js` file at the root of your project. -2. **Switch to using imports** +2. **Switch to using imports**, Instead of using the `extends` property, import the configuration packages you need and export an array of configurations: ```js @@ -318,7 +318,7 @@ Instead of using the `extends` property, import the configuration packages you n **Note:** All rules that previously required type checking are now included in the main config export for each package. You no longer need to import a separate requiring-type-checking config—just import the main config to get all rules. -3. **Set parser options as needed** +3. **Set parser options as needed**, For TypeScript and Angular projects, ensure you set `parserOptions.project` in a config block to point to your TypeScript configuration: ```js @@ -332,7 +332,7 @@ Instead of using the `extends` property, import the configuration packages you n } ``` -4. **Remove legacy config fields** +4. **Remove legacy config fields**, The flat config format does not use `parser`, or `plugins` at the top level. All configuration should be handled through the imported arrays and objects. ### Recommended Development Environment Configuration diff --git a/packages/eslint-config-typescript/requiring-type-checking.js b/packages/eslint-config-typescript/requiring-type-checking.js index 6202717..12531b5 100644 --- a/packages/eslint-config-typescript/requiring-type-checking.js +++ b/packages/eslint-config-typescript/requiring-type-checking.js @@ -123,10 +123,10 @@ export const typescriptRequiringTypeCheckingConfig = [ '@typescript-eslint/no-confusing-void-expression': ['error', { ignoreArrowShorthand: true }], /* [strict-null-checks] */ - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', /* [strict-null-checks] */ - '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/no-unnecessary-condition': 'error', '@typescript-eslint/no-unnecessary-qualifier': 'error', @@ -172,16 +172,14 @@ export const typescriptRequiringTypeCheckingConfig = [ '@typescript-eslint/require-array-sort-compare': 'error', /* - [strict-null-checks] This rule requires the TypeScript strictNullChecks compiler flag. If strictNullChecks is enabled, disallow numbers - with the following configuration: - '@typescript-eslint/strict-boolean-expressions': ['error', { - allowNumber: false, - allowNullableBoolean: true, - allowNullableString: true, - allowNullableNumber: false - }] + [strict-null-checks] */ - '@typescript-eslint/strict-boolean-expressions': 'off', + '@typescript-eslint/strict-boolean-expressions': ['error', { + allowNumber: false, + allowNullableBoolean: true, + allowNullableString: true, + allowNullableNumber: false + }], /* This rule is made redundant by `default-case` so it will never fire and is disabled. From 0d197d5ddbc2116e43f496e3ace5a222eaa7e1e6 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Sun, 21 Sep 2025 17:14:04 +0530 Subject: [PATCH 23/53] add comments to the newly added rules in the project's eslint.config.js Signed-off-by: gokulprasanth-ni --- .../eslint-config-angular/eslint.config.js | 21 +++++++++-------- .../eslint-config-javascript/eslint.config.js | 23 ++++++++++--------- .../eslint-config-playwright/eslint.config.js | 1 + .../eslint-config-typescript/eslint.config.js | 1 + tests/angular/tsconfig.json | 5 +++- tests/playwright/tsconfig.json | 2 +- tests/typescript/tsconfig.json | 2 +- 7 files changed, 31 insertions(+), 24 deletions(-) diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index 4059f78..f07dde4 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -1,14 +1,15 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascriptConfig, - { - ignores: ['eslint.config.js'], - }, - { - files: ['**/*.js'], - rules: { - 'import/no-extraneous-dependencies': 'off', - }, - }, + ...javascriptConfig, + { + ignores: ['eslint.config.js'], + }, + { + files: ['**/*.js'], + rules: { + // Disable this rule because some packages used in the project are not listed in devDependencies or dependencies. + 'import/no-extraneous-dependencies': 'off', + }, + }, ]; \ No newline at end of file diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js index a3bc996..ecb740a 100644 --- a/packages/eslint-config-javascript/eslint.config.js +++ b/packages/eslint-config-javascript/eslint.config.js @@ -1,15 +1,16 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascriptConfig, - { - ignores: ['eslint.config.js'], - }, - { - files: ['**/*.js'], - rules: { - 'import/extensions': 'off', - 'import/no-extraneous-dependencies': 'off', - }, - }, + ...javascriptConfig, + { + ignores: ['eslint.config.js'], + }, + { + files: ['**/*.js'], + rules: { + // Disable these rules because some packages used in the project are not listed in devDependencies or dependencies, and ES6 modules require explicit file extensions by default. + 'import/extensions': 'off', + 'import/no-extraneous-dependencies': 'off', + }, + }, ]; diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index 7d5ef6a..0944239 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -7,6 +7,7 @@ export default [ }, { rules: { + // Disable this rule because some packages used in the project are not listed in devDependencies or dependencies. 'import/no-extraneous-dependencies': 'off', }, }, diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index e0face4..cb8ace7 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -8,6 +8,7 @@ export default [ { files: ['**/*.js'], rules: { + // Disable these rules because some packages used in the project are not listed in devDependencies or dependencies, and ES6 modules require explicit file extensions by default. 'import/extensions': 'off', 'import/no-extraneous-dependencies': 'off', 'import/no-unresolved': 'off', diff --git a/tests/angular/tsconfig.json b/tests/angular/tsconfig.json index 09b71a3..6083118 100644 --- a/tests/angular/tsconfig.json +++ b/tests/angular/tsconfig.json @@ -1,6 +1,9 @@ { "compilerOptions": { - "experimentalDecorators": true + "experimentalDecorators": true, + "strictNullChecks": true, + "moduleResolution": "node", + "target": "ES2020" }, "include": ["."] } \ No newline at end of file diff --git a/tests/playwright/tsconfig.json b/tests/playwright/tsconfig.json index a48a639..2a088da 100644 --- a/tests/playwright/tsconfig.json +++ b/tests/playwright/tsconfig.json @@ -1,7 +1,7 @@ { "files": ["./index.ts"], "compilerOptions": { - "strictNullChecks": false, + "strictNullChecks": true, "moduleResolution": "node", "target": "ES2020" } diff --git a/tests/typescript/tsconfig.json b/tests/typescript/tsconfig.json index 2996d58..48a8866 100644 --- a/tests/typescript/tsconfig.json +++ b/tests/typescript/tsconfig.json @@ -1,7 +1,7 @@ { "files": ["./index.ts"], "compilerOptions": { - "strictNullChecks": false, + "strictNullChecks": true, "target": "ES2020" } } \ No newline at end of file From 706ae3d9ddb3e5da19a41178e0e041c31632a103 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Sun, 21 Sep 2025 17:20:01 +0530 Subject: [PATCH 24/53] Fix: issue Signed-off-by: gokulprasanth-ni --- tests/print-evaluated-rules/index.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index 39113f0..98db319 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -33,13 +33,11 @@ const __dirname = path.dirname(__filename); const testDir = path.resolve(__dirname, '..'); const jsPath = path.join(testDir, 'javascript', 'index.js'); const tsPath = path.join(testDir, 'typescript', 'index.ts'); - const tsTypePath = path.join(testDir, 'typescript-requiring-type-checking', 'index.ts'); const angularTsPath = path.join(testDir, 'angular', 'index.ts'); const angularHtmlPath = path.join(testDir, 'angular', 'index.html'); const configEslint = await calculateConfigForFile(jsPath); const configTypescript = await calculateConfigForFile(tsPath); - const configTypescriptTypechecked = await calculateConfigForFile(tsTypePath); const configAngular = await calculateConfigForFile(angularTsPath); const configAngularTemplate = await calculateConfigForFile(angularHtmlPath); @@ -47,7 +45,6 @@ const __dirname = path.dirname(__filename); return { ...normalizeRulesSeverityToString(configEslint.rules), ...normalizeRulesSeverityToString(configTypescript.rules), - ...normalizeRulesSeverityToString(configTypescriptTypechecked.rules), ...normalizeRulesSeverityToString(configAngular.rules), ...normalizeRulesSeverityToString(configAngularTemplate.rules) }; @@ -98,7 +95,6 @@ const __dirname = path.dirname(__filename); .filter(key => !key.startsWith('@angular-eslint')) .filter( key => !configTypescript.rules[key] - && !configTypescriptTypechecked.rules[key] ) .reduce((config, key) => { config[key] = rules[key]; @@ -115,11 +111,6 @@ const __dirname = path.dirname(__filename); console.log( `Evaluated TypeScript rules has warn?: ${hasWarn(configTypescript)}` ); - console.log( - `Evaluated TypeScript type checking rules has warn?: ${hasWarn( - configTypescriptTypechecked - )}` - ); console.log(`Evaluated Angular rules has warn?: ${hasWarn(configAngular)}`); console.log( `Evaluated Angular Template rules has warn?: ${hasWarn( From 8d0101324c65616d33145bb4b7d08888ef5e1c1e Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Mon, 22 Sep 2025 12:20:11 -0500 Subject: [PATCH 25/53] Fix 'import/no-extraneous-dependencies': 'off' --- package-lock.json | 4 +++- packages/eslint-config-angular/eslint.config.js | 2 -- packages/eslint-config-angular/template.js | 2 +- packages/eslint-config-javascript/eslint.config.js | 2 -- packages/eslint-config-javascript/package.json | 5 +++-- packages/eslint-config-playwright/eslint.config.js | 2 -- packages/eslint-config-typescript/eslint.config.js | 2 -- packages/eslint-config-typescript/package.json | 1 + tests/print-evaluated-rules/eslint.config.js | 1 - 9 files changed, 8 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec765a8..a43f28a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5085,7 +5085,8 @@ "peerDependencies": { "@stylistic/eslint-plugin": "^5.0.0", "eslint": "^9.35.0", - "eslint-plugin-import": "^2.31.1" + "eslint-plugin-import": "^2.31.1", + "globals": "^14.0.0" } }, "packages/eslint-config-playwright": { @@ -5103,6 +5104,7 @@ "license": "MIT", "peerDependencies": { "@ni/eslint-config-javascript": "^4.4.0", + "eslint-plugin-import": "^2.31.1", "typescript-eslint": "^8.0.0" } }, diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index f07dde4..eb460c7 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -8,8 +8,6 @@ export default [ { files: ['**/*.js'], rules: { - // Disable this rule because some packages used in the project are not listed in devDependencies or dependencies. - 'import/no-extraneous-dependencies': 'off', }, }, ]; \ No newline at end of file diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/template.js index e420599..e29514b 100644 --- a/packages/eslint-config-angular/template.js +++ b/packages/eslint-config-angular/template.js @@ -1,5 +1,5 @@ -import { ignoreAttributes } from '@ni/eslint-config-angular/template/options'; import angularTemplate from 'angular-eslint'; +import { ignoreAttributes } from './template/options'; export const angularTemplateConfig = [ ...angularTemplate.configs.templateRecommended, diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js index ecb740a..be7ef34 100644 --- a/packages/eslint-config-javascript/eslint.config.js +++ b/packages/eslint-config-javascript/eslint.config.js @@ -8,9 +8,7 @@ export default [ { files: ['**/*.js'], rules: { - // Disable these rules because some packages used in the project are not listed in devDependencies or dependencies, and ES6 modules require explicit file extensions by default. 'import/extensions': 'off', - 'import/no-extraneous-dependencies': 'off', }, }, ]; diff --git a/packages/eslint-config-javascript/package.json b/packages/eslint-config-javascript/package.json index 8fc4974..6b56abc 100644 --- a/packages/eslint-config-javascript/package.json +++ b/packages/eslint-config-javascript/package.json @@ -1,5 +1,5 @@ { - "type":"module", + "type": "module", "name": "@ni/eslint-config-javascript", "version": "4.4.0", "description": "NI's JavaScript ESLint Shareable Config", @@ -32,8 +32,9 @@ "!/.*.js" ], "peerDependencies": { + "@stylistic/eslint-plugin": "^5.0.0", "eslint": "^9.35.0", "eslint-plugin-import": "^2.31.1", - "@stylistic/eslint-plugin": "^5.0.0" + "globals": "^14.0.0" } } diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index 0944239..f8db579 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -7,8 +7,6 @@ export default [ }, { rules: { - // Disable this rule because some packages used in the project are not listed in devDependencies or dependencies. - 'import/no-extraneous-dependencies': 'off', }, }, ]; diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index cb8ace7..4cbf598 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -8,9 +8,7 @@ export default [ { files: ['**/*.js'], rules: { - // Disable these rules because some packages used in the project are not listed in devDependencies or dependencies, and ES6 modules require explicit file extensions by default. 'import/extensions': 'off', - 'import/no-extraneous-dependencies': 'off', 'import/no-unresolved': 'off', }, }, diff --git a/packages/eslint-config-typescript/package.json b/packages/eslint-config-typescript/package.json index 14bd487..3e86f23 100644 --- a/packages/eslint-config-typescript/package.json +++ b/packages/eslint-config-typescript/package.json @@ -34,6 +34,7 @@ ], "peerDependencies": { "@ni/eslint-config-javascript": "^4.4.0", + "eslint-plugin-import": "^2.31.1", "typescript-eslint": "^8.0.0" }, "exports": { diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js index a78bd8e..4837587 100644 --- a/tests/print-evaluated-rules/eslint.config.js +++ b/tests/print-evaluated-rules/eslint.config.js @@ -8,7 +8,6 @@ export default [ { files: ['*.js'], rules: { - 'import/no-extraneous-dependencies': 'off', }, }, ]; \ No newline at end of file From f22f19ffe9ff8a0c4feabeb710aa4ad913a26ad6 Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Mon, 22 Sep 2025 12:31:51 -0500 Subject: [PATCH 26/53] no-unresolved --- packages/eslint-config-typescript/eslint.config.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index 4cbf598..27c0a79 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -9,7 +9,16 @@ export default [ files: ['**/*.js'], rules: { 'import/extensions': 'off', - 'import/no-unresolved': 'off', + // eslint-plugin-import doesn't know how to resolve entry points in packages + // that use modern export maps in package.json. + // https://github.com/typescript-eslint/typescript-eslint/issues/7565 + // https://github.com/import-js/eslint-plugin-import/issues/2703 + 'import/no-unresolved': [ + 'error', + { + ignore: ['typescript-eslint'] + } + ], }, }, ]; From 303f23f416496af9b5dc011889941af59823cc35 Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Mon, 22 Sep 2025 12:38:04 -0500 Subject: [PATCH 27/53] Re-add test from typechecking --- tests/typescript/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/typescript/index.ts b/tests/typescript/index.ts index 6eafbbc..c1e23a7 100644 --- a/tests/typescript/index.ts +++ b/tests/typescript/index.ts @@ -14,4 +14,10 @@ export class NI { public makeAwesomer(): void { this._awesomeLevel += 1; } + + public async slowAdd(a: number, b: number, timeMs: number): Promise { + return await new Promise(resolve => { + setTimeout(() => resolve(a + b), timeMs); + }); + } } From 90d243e21756a8c360310f163b8e8e92895ec616 Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Mon, 22 Sep 2025 13:31:30 -0500 Subject: [PATCH 28/53] strictNullChecks --- README.md | 6 ++---- ...config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json | 2 +- ...fig-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json | 2 +- ...fig-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json | 2 +- packages/eslint-config-typescript/index.js | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index fb8f395..cfb4b6f 100644 --- a/README.md +++ b/README.md @@ -242,11 +242,9 @@ Tag: [`[strict-null-checks]`](https://github.com/ni/javascript-styleguide/search When `strictNullChecks` are enabled the values `null` and `undefined` are treated as distinct types by the compiler. For example, with `strictNullChecks` enabled, the value `null` could not be directly assigned to a binding of a `Cat` object, ie `const cat: Cat = null` would be a compile error. The `null` value is a distinct type and the binding would have to explicitly state that it can have a `null` value, ie `const cat: Cat | null = null;`. -`strictNullChecks` are a powerful tool for code correctness and give us a way to avoid ["The Billion Dollar Mistake"](https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/). However, it can be impractical to retrofit `strictNullChecks` configuration into an existing application and requires expanding your mental model for software development for use in new applications. +`strictNullChecks` are a powerful tool for code correctness and give us a way to avoid ["The Billion Dollar Mistake"](https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/). -As such, `strictNullChecks` are not recommended by default in order to prevent overhead of rule adoption for existing applications. - -However, we encourage new applications to leverage `strictNullChecks` for development. Enabling `strictNullChecks` is the TypeScript compiler recommendation and it is enabled by default in new Angular applications. +This style guide assumes `strictNullChecks` are enabled by default. However, it can be impractical to retrofit `strictNullChecks` configuration into an existing application and requires expanding your mental model for software development for use in new applications. To adopt this style guide in a project without `strictNullChecks`, configure every rule tagged with `[strict-null-checks]` to `off` unless specified in the rule comment. #### Accessibility diff --git a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json index 2f64bda..b37340d 100644 --- a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json +++ b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-angular to be compatible with eslint v9", + "comment": "Update eslint-config-angular to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled.", "packageName": "@ni/eslint-config-angular", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json index df9815e..bc089a7 100644 --- a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json +++ b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-playwright to be compatible with eslint v9", + "comment": "Update eslint-config-playwright to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled.", "packageName": "@ni/eslint-config-playwright", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json index 8a1b7a8..d084fdb 100644 --- a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json +++ b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-typescript to be compatible with eslint v9", + "comment": "Update eslint-config-typescript to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled.", "packageName": "@ni/eslint-config-typescript", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index 2834715..883178e 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -44,7 +44,7 @@ export const typescriptConfig = [ With `strictNullChecks` enabled, the non-null assertion operator (this rule configured as 'off') is useful for asserting that a value will no longer be null and usage of operator should be allowed. */ - '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/no-non-null-assertion': 'off', 'valid-typeof': 'off', From f6c67543cd6bcb035798cc12801dfad7796facc1 Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Mon, 22 Sep 2025 13:36:45 -0500 Subject: [PATCH 29/53] Fix test failure --- packages/eslint-config-angular/eslint.config.js | 1 + packages/eslint-config-angular/template.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index eb460c7..4d9cd33 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -8,6 +8,7 @@ export default [ { files: ['**/*.js'], rules: { + 'import/extensions': 'off' }, }, ]; \ No newline at end of file diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/template.js index e29514b..c473ef7 100644 --- a/packages/eslint-config-angular/template.js +++ b/packages/eslint-config-angular/template.js @@ -1,5 +1,5 @@ import angularTemplate from 'angular-eslint'; -import { ignoreAttributes } from './template/options'; +import { ignoreAttributes } from './template/options.js'; export const angularTemplateConfig = [ ...angularTemplate.configs.templateRecommended, From f50f6318f1db1584a3c554a691f643b885836933 Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Mon, 22 Sep 2025 15:26:13 -0500 Subject: [PATCH 30/53] README formatting --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index cfb4b6f..30017ff 100644 --- a/README.md +++ b/README.md @@ -297,10 +297,10 @@ ESLint offers several [ways to disable a rule for a line or file](https://eslint ESLint’s [flat config format](https://eslint.org/docs/latest/use/configure/configuration-files-new) is now the recommended way to configure ESLint. If your project is still using a legacy `.eslintrc.*` file, follow these steps to migrate: -1. **Rename your configuration file**, +1. **Rename your configuration file** Replace your `.eslintrc.js` or `.eslintrc.json` with a new `eslint.config.js` file at the root of your project. -2. **Switch to using imports**, +2. **Switch to using imports** Instead of using the `extends` property, import the configuration packages you need and export an array of configurations: ```js @@ -316,7 +316,7 @@ Instead of using the `extends` property, import the configuration packages you n **Note:** All rules that previously required type checking are now included in the main config export for each package. You no longer need to import a separate requiring-type-checking config—just import the main config to get all rules. -3. **Set parser options as needed**, +3. **Set parser options as needed** For TypeScript and Angular projects, ensure you set `parserOptions.project` in a config block to point to your TypeScript configuration: ```js @@ -330,7 +330,7 @@ Instead of using the `extends` property, import the configuration packages you n } ``` -4. **Remove legacy config fields**, +4. **Remove legacy config fields** The flat config format does not use `parser`, or `plugins` at the top level. All configuration should be handled through the imported arrays and objects. ### Recommended Development Environment Configuration From 1de9e262278f42822d6a55af17776692cd466147 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Tue, 23 Sep 2025 11:04:01 +0530 Subject: [PATCH 31/53] clean up Signed-off-by: gokulprasanth-ni --- packages/eslint-config-playwright/eslint.config.js | 6 +----- tests/print-evaluated-rules/eslint.config.js | 7 +------ 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index f8db579..10b2798 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -4,9 +4,5 @@ export default [ ...javascriptConfig, { ignores: ['eslint.config.js'], - }, - { - rules: { - }, - }, + } ]; diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js index 4837587..4c8b8a0 100644 --- a/tests/print-evaluated-rules/eslint.config.js +++ b/tests/print-evaluated-rules/eslint.config.js @@ -4,10 +4,5 @@ export default [ ...javascriptConfig, { ignores: ['eslint.config.js'] - }, - { - files: ['*.js'], - rules: { - }, - }, + } ]; \ No newline at end of file From c549133c5bfc781b448bdb5d9694520105dbe8e6 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Wed, 24 Sep 2025 12:25:31 +0530 Subject: [PATCH 32/53] address PR comments Signed-off-by: gokulprasanth-ni --- .../eslint-config-angular/eslint.config.js | 23 +++++++++------- packages/eslint-config-angular/package.json | 3 ++- .../eslint-config-javascript/eslint.config.js | 26 +++++++++++-------- .../eslint-config-playwright/eslint.config.js | 5 +++- .../eslint-config-playwright/package.json | 1 + .../eslint-config-typescript/eslint.config.js | 5 +++- 6 files changed, 39 insertions(+), 24 deletions(-) diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index 4d9cd33..8514522 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -1,14 +1,17 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascriptConfig, - { - ignores: ['eslint.config.js'], - }, - { - files: ['**/*.js'], - rules: { - 'import/extensions': 'off' - }, - }, + ...javascriptConfig, + { + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off' + } + }, + { + files: ['**/*.js'], + rules: { + 'import/extensions': 'off' + }, + }, ]; \ No newline at end of file diff --git a/packages/eslint-config-angular/package.json b/packages/eslint-config-angular/package.json index 64352d8..c665aac 100644 --- a/packages/eslint-config-angular/package.json +++ b/packages/eslint-config-angular/package.json @@ -34,7 +34,8 @@ ], "peerDependencies": { "angular-eslint": "^18.4.3", - "@ni/eslint-config-typescript": "^4.4.4" + "@ni/eslint-config-typescript": "^4.4.4", + "@ni/eslint-config-javascript": "^4.4.0" }, "exports": { ".": "./index.js", diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js index be7ef34..0c409f6 100644 --- a/packages/eslint-config-javascript/eslint.config.js +++ b/packages/eslint-config-javascript/eslint.config.js @@ -1,14 +1,18 @@ -import { javascriptConfig } from '@ni/eslint-config-javascript'; +// eslint-disable-next-line import/no-useless-path-segments +import { javascriptConfig } from './index.js'; export default [ - ...javascriptConfig, - { - ignores: ['eslint.config.js'], - }, - { - files: ['**/*.js'], - rules: { - 'import/extensions': 'off', - }, - }, + ...javascriptConfig, + { + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off' + } + }, + { + files: ['**/*.js'], + rules: { + 'import/extensions': 'off' + }, + }, ]; diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index 10b2798..5770262 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -3,6 +3,9 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ ...javascriptConfig, { - ignores: ['eslint.config.js'], + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off' + } } ]; diff --git a/packages/eslint-config-playwright/package.json b/packages/eslint-config-playwright/package.json index 09cdc5f..222dbf8 100644 --- a/packages/eslint-config-playwright/package.json +++ b/packages/eslint-config-playwright/package.json @@ -33,6 +33,7 @@ ], "peerDependencies": { "@ni/eslint-config-typescript": "^4.4.4", + "@ni/eslint-config-javascript": "^4.4.0", "eslint-plugin-playwright": "^0.18.0" }, "exports": { diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index 27c0a79..8bad9b6 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -3,7 +3,10 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ ...javascriptConfig, { - ignores: ['eslint.config.js'], + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off' + } }, { files: ['**/*.js'], From 22c786f59161a66931e13433c6c3e80018f23aaf Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Wed, 24 Sep 2025 12:51:35 +0530 Subject: [PATCH 33/53] update moduleResolution to node16 Signed-off-by: gokulprasanth-ni --- tests/angular/tsconfig.json | 3 ++- tests/playwright/tsconfig.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/angular/tsconfig.json b/tests/angular/tsconfig.json index 6083118..4286429 100644 --- a/tests/angular/tsconfig.json +++ b/tests/angular/tsconfig.json @@ -2,7 +2,8 @@ "compilerOptions": { "experimentalDecorators": true, "strictNullChecks": true, - "moduleResolution": "node", + "module":"node16", + "moduleResolution": "node16", "target": "ES2020" }, "include": ["."] diff --git a/tests/playwright/tsconfig.json b/tests/playwright/tsconfig.json index 2a088da..a3b73a9 100644 --- a/tests/playwright/tsconfig.json +++ b/tests/playwright/tsconfig.json @@ -2,7 +2,8 @@ "files": ["./index.ts"], "compilerOptions": { "strictNullChecks": true, - "moduleResolution": "node", + "module":"node16", + "moduleResolution": "node16", "target": "ES2020" } } \ No newline at end of file From c79ce9c6e38647d50b58f2f844e8a194b12c0534 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Wed, 24 Sep 2025 13:01:26 +0530 Subject: [PATCH 34/53] address lvl2 PR comments Signed-off-by: gokulprasanth-ni --- tests/angular/eslint.config.js | 7 ++++++- tests/javascript/eslint.config.js | 5 ++++- tests/playwright/eslint.config.js | 12 ++++++++---- tests/print-evaluated-rules/eslint.config.js | 5 ++++- tests/print-evaluated-rules/package.json | 1 + tests/typescript/eslint.config.js | 12 ++++++++---- 6 files changed, 31 insertions(+), 11 deletions(-) diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index a50cd2e..b27401a 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -12,7 +12,12 @@ import { defineConfig } from 'eslint/config'; const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); export default defineConfig([ - { ignores: ['*.js'] }, + { + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off', + } + }, { files: ['**/*.ts'], extends: [...angularConfig], diff --git a/tests/javascript/eslint.config.js b/tests/javascript/eslint.config.js index 1fb9c30..531a899 100644 --- a/tests/javascript/eslint.config.js +++ b/tests/javascript/eslint.config.js @@ -3,6 +3,9 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ ...javascriptConfig, { - ignores: ['eslint.config.js'] + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off' + } }, ]; diff --git a/tests/playwright/eslint.config.js b/tests/playwright/eslint.config.js index d39aff4..f3436a7 100644 --- a/tests/playwright/eslint.config.js +++ b/tests/playwright/eslint.config.js @@ -1,16 +1,20 @@ import { fileURLToPath } from 'url'; import path from 'path'; import { playwrightConfig } from '@ni/eslint-config-playwright'; +import { defineConfig } from 'eslint/config'; const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); -export default [ - ...playwrightConfig, +export default defineConfig([ { - ignores: ['*.js'] + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off', + } }, { files: ['*.ts'], + extends: [...playwrightConfig], languageOptions: { parserOptions: { project: ['./tsconfig.json'], @@ -22,4 +26,4 @@ export default [ 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], }, } -]; +]); diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js index 4c8b8a0..ada45e2 100644 --- a/tests/print-evaluated-rules/eslint.config.js +++ b/tests/print-evaluated-rules/eslint.config.js @@ -3,6 +3,9 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ ...javascriptConfig, { - ignores: ['eslint.config.js'] + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off' + } } ]; \ No newline at end of file diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index abc427d..7ed3e30 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -14,6 +14,7 @@ "angular-eslint": "18.4.3", "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*", "@ni/javascript-test": "*", "@ni/typescript-test": "*", "eslint": "^9.35.0" diff --git a/tests/typescript/eslint.config.js b/tests/typescript/eslint.config.js index 52b18c6..e9ca36f 100644 --- a/tests/typescript/eslint.config.js +++ b/tests/typescript/eslint.config.js @@ -1,16 +1,20 @@ import { fileURLToPath } from 'url'; import path from 'path'; import { typescriptConfig } from '@ni/eslint-config-typescript'; +import { defineConfig } from 'eslint/config'; const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); -export default [ - ...typescriptConfig, +export default defineConfig([ { - ignores: ['eslint.config.js'] + files: ['eslint.config.js'], + rules: { + 'import/no-default-export': 'off', + } }, { files: ['**/*.ts'], + extends: [...typescriptConfig], languageOptions: { parserOptions: { project: ['./tsconfig.json'], @@ -18,4 +22,4 @@ export default [ }, }, }, -]; \ No newline at end of file +]); \ No newline at end of file From 5132f428f71d2a44a9d0d637a2d81d6b6fdf61d5 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Wed, 24 Sep 2025 13:13:34 +0530 Subject: [PATCH 35/53] remove unwanted rules Signed-off-by: gokulprasanth-ni --- packages/eslint-config-typescript/index.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index 883178e..f6477e6 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -37,15 +37,6 @@ export const typescriptConfig = [ '@typescript-eslint/explicit-module-boundary-types': 'error', - /* - [strict-null-checks] - With `strictNullChecks` disabled, non-null assertions are discouraged (this rule is configured as 'error') - as non-null assertions do not provide additional type safety and if used inconsistently add to visual noise. - With `strictNullChecks` enabled, the non-null assertion operator (this rule configured as 'off') - is useful for asserting that a value will no longer be null and usage of operator should be allowed. - */ - '@typescript-eslint/no-non-null-assertion': 'off', - 'valid-typeof': 'off', /* From c48ac122ac4dbe8a36076cb93e84ca2c7624139f Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Wed, 24 Sep 2025 22:50:29 +0530 Subject: [PATCH 36/53] update README file Signed-off-by: gokulprasanth-ni --- README.md | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/README.md b/README.md index 30017ff..38d9f40 100644 --- a/README.md +++ b/README.md @@ -333,6 +333,44 @@ Instead of using the `extends` property, import the configuration packages you n 4. **Remove legacy config fields** The flat config format does not use `parser`, or `plugins` at the top level. All configuration should be handled through the imported arrays and objects. +5. **@stylistic rules** + The following rules are moved from `@typescript-eslint` to `@stylistic`. Update any project config overrides and inline suppressions to the new names: + - `@typescript-eslint/member-delimiter-style` → `@stylistic/member-delimiter-style` + - `@typescript-eslint/type-annotation-spacing` → `@stylistic/type-annotation-spacing` + + Other deprecated rules may also now reside under `@stylistic`. Search your codebase for old suppressions (e.g. `eslint-disable @typescript-eslint/...`) and rename them as needed. + +6. **Angular CLI linkage** + When using `eslint.config.js` with Angular, explicitly point the Angular workspace at the flat config. In `angular.json` (per project): + ```json + "projects": { + "my-app": { + "architect": { + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"], + "eslintConfig": "./eslint.config.js" + } + } + } + } + } + ``` + +7. **strictNullChecks** is now enabled by default. + - If your project has `strictNullChecks` enabled, remove previously overridden strictNullChecks rules. + - If your project has `strictNullChecks` disabled, disable those strictNullChecks rules to maintain previous behavior. Example: + ```js + { + files: ['**/*.ts'], + rules: { + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off' + } + } + ``` + ### Recommended Development Environment Configuration Modern IDEs can be configured to provide live feedback about ESLint errors. From 9693626d9c7fb1b34a4a509587ccfd89ea93a655 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Wed, 24 Sep 2025 23:01:12 +0530 Subject: [PATCH 37/53] update change files Signed-off-by: gokulprasanth-ni --- ...int-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json | 2 +- ...-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json | 2 +- ...-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json index b37340d..1775e05 100644 --- a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json +++ b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-angular to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled.", + "comment": "Update eslint-config-angular to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. Check 'https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format' for more information.", "packageName": "@ni/eslint-config-angular", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json index bc089a7..83b0a69 100644 --- a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json +++ b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-playwright to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled.", + "comment": "Update eslint-config-playwright to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. Check 'https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format' for more information.", "packageName": "@ni/eslint-config-playwright", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json index d084fdb..688d9a7 100644 --- a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json +++ b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-typescript to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled.", + "comment": "Update eslint-config-typescript to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. Check 'https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format' for more information.", "packageName": "@ni/eslint-config-typescript", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" From 4895a376ea6a8df2ab130864af0fc42b63a5e75d Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Fri, 26 Sep 2025 11:56:21 +0530 Subject: [PATCH 38/53] update eslint configuration in readme Signed-off-by: gokulprasanth-ni --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 38d9f40..f5e261c 100644 --- a/README.md +++ b/README.md @@ -341,7 +341,7 @@ Instead of using the `extends` property, import the configuration packages you n Other deprecated rules may also now reside under `@stylistic`. Search your codebase for old suppressions (e.g. `eslint-disable @typescript-eslint/...`) and rename them as needed. 6. **Angular CLI linkage** - When using `eslint.config.js` with Angular, explicitly point the Angular workspace at the flat config. In `angular.json` (per project): + Configure the linter in `angular.json` for each project in Angular workspaces to use the `eslint.config.js` ESLint configuration. Example: ```json "projects": { "my-app": { @@ -359,8 +359,8 @@ Instead of using the `extends` property, import the configuration packages you n ``` 7. **strictNullChecks** is now enabled by default. - - If your project has `strictNullChecks` enabled, remove previously overridden strictNullChecks rules. - - If your project has `strictNullChecks` disabled, disable those strictNullChecks rules to maintain previous behavior. Example: + - If your project has `strictNullChecks` enabled, remove previously overridden strict rules for null checks. + - If your project has `strictNullChecks` disabled, disable strict rules for null checks to maintain previous behavior. Example: ```js { files: ['**/*.ts'], From c4a9645467e53599e89c9a8510714dbd745303dd Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Mon, 29 Sep 2025 19:58:02 +0530 Subject: [PATCH 39/53] update rule Signed-off-by: gokulprasanth-ni --- packages/eslint-config-javascript/rules/variables.js | 2 +- packages/eslint-config-typescript/lib/extensions.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eslint-config-javascript/rules/variables.js b/packages/eslint-config-javascript/rules/variables.js index 5e8ac4b..370a797 100644 --- a/packages/eslint-config-javascript/rules/variables.js +++ b/packages/eslint-config-javascript/rules/variables.js @@ -67,7 +67,7 @@ export const variables = { In situations where they are required like unused callback function arguments, indicate that the unused variable is intentional by pre-pending its name with `_`. */ - 'no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', ignoreRestSiblings: true }], + 'no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', ignoreRestSiblings: true }], /* Defining classes and variables before their use can cause errors. However, placing diff --git a/packages/eslint-config-typescript/lib/extensions.js b/packages/eslint-config-typescript/lib/extensions.js index 732a2e0..31ab042 100644 --- a/packages/eslint-config-typescript/lib/extensions.js +++ b/packages/eslint-config-typescript/lib/extensions.js @@ -67,7 +67,7 @@ export const extensionsConfig = [{ }], 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', ignoreRestSiblings: true }], + '@typescript-eslint/no-unused-vars': ['error', { vars: 'all', args: 'all', argsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', ignoreRestSiblings: true }], 'no-use-before-define': 'off', '@typescript-eslint/no-use-before-define': ['error', { functions: false, classes: true, variables: true }], From d54f5527bb23323ffcf04b0b85a5c191742fd8dc Mon Sep 17 00:00:00 2001 From: rajsite Date: Mon, 29 Sep 2025 11:12:31 -0500 Subject: [PATCH 40/53] Update lockfile --- package-lock.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package-lock.json b/package-lock.json index a43f28a..0f4f12c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5074,6 +5074,7 @@ "version": "9.0.7", "license": "MIT", "peerDependencies": { + "@ni/eslint-config-javascript": "^4.4.0", "@ni/eslint-config-typescript": "^4.4.4", "angular-eslint": "^18.4.3" } @@ -5094,6 +5095,7 @@ "version": "1.1.5", "license": "MIT", "peerDependencies": { + "@ni/eslint-config-javascript": "^4.4.0", "@ni/eslint-config-typescript": "^4.4.4", "eslint-plugin-playwright": "^0.18.0" } @@ -5147,6 +5149,7 @@ "peerDependencies": { "@ni/angular-test": "*", "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*", "@ni/javascript-test": "*", "@ni/typescript-test": "*", "angular-eslint": "18.4.3", From 1d30d1766e245741ccbe917b9fa2fabb674960e0 Mon Sep 17 00:00:00 2001 From: rajsite Date: Mon, 29 Sep 2025 16:43:25 -0500 Subject: [PATCH 41/53] Use defineConfig, single entrypoint, consistent config import --- README.md | 14 +- package-lock.json | 159 +++++++++--------- .../eslint-config-angular/eslint.config.js | 23 ++- packages/eslint-config-angular/index.js | 12 +- packages/eslint-config-angular/package.json | 85 +++++----- .../requiring-type-checking.js | 15 -- packages/eslint-config-angular/template.js | 7 +- .../eslint-config-angular/template/options.js | 2 +- .../tools/print-available-rules.js | 1 - .../eslint-config-javascript/eslint.config.js | 24 +-- packages/eslint-config-javascript/index.js | 21 ++- .../eslint-config-javascript/package.json | 81 ++++----- .../rules/best-practices.js | 6 +- .../eslint-config-javascript/rules/errors.js | 6 +- .../eslint-config-javascript/rules/es6.js | 6 +- .../eslint-config-javascript/rules/imports.js | 23 ++- .../eslint-config-javascript/rules/node.js | 6 +- .../eslint-config-javascript/rules/strict.js | 6 +- .../eslint-config-javascript/rules/style.js | 6 +- .../rules/variables.js | 6 +- .../eslint-config-playwright/eslint.config.js | 15 +- packages/eslint-config-playwright/index.js | 7 +- .../eslint-config-playwright/package.json | 82 ++++----- .../requiring-type-checking.js | 3 - .../tools/print-available-rules.js | 1 - .../eslint-config-typescript/eslint.config.js | 33 ++-- packages/eslint-config-typescript/index.js | 13 +- .../lib/extensions-requiring-type-checking.js | 6 +- .../lib/extensions.js | 6 +- .../eslint-config-typescript/package.json | 85 +++++----- .../requiring-type-checking.js | 11 +- .../tools/print-available-rules.js | 5 - tests/angular/CHANGELOG.json | 50 ------ tests/angular/CHANGELOG.md | 29 ---- .../custom-ignore-attributes/index.spec.ts | 4 +- tests/angular/eslint.config.js | 99 +++++------ tests/angular/index.spec.ts | 4 +- tests/angular/package.json | 5 +- tests/javascript/CHANGELOG.json | 20 --- tests/javascript/CHANGELOG.md | 13 -- tests/javascript/eslint.config.js | 13 +- tests/javascript/package.json | 2 +- tests/playwright/eslint.config.js | 6 +- tests/playwright/package.json | 3 +- tests/print-evaluated-rules/eslint.config.js | 13 +- tests/print-evaluated-rules/package.json | 2 +- tests/typescript/CHANGELOG.json | 35 ---- tests/typescript/CHANGELOG.md | 21 --- tests/typescript/eslint.config.js | 18 +- tests/typescript/package.json | 3 +- 50 files changed, 465 insertions(+), 651 deletions(-) delete mode 100644 packages/eslint-config-angular/requiring-type-checking.js delete mode 100644 packages/eslint-config-playwright/requiring-type-checking.js delete mode 100644 tests/angular/CHANGELOG.json delete mode 100644 tests/angular/CHANGELOG.md delete mode 100644 tests/javascript/CHANGELOG.json delete mode 100644 tests/javascript/CHANGELOG.md delete mode 100644 tests/typescript/CHANGELOG.json delete mode 100644 tests/typescript/CHANGELOG.md diff --git a/README.md b/README.md index f5e261c..f1a48a0 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Export `@ni/eslint-config-javascript` configurations in your [ESLint flat config import { javascriptConfig } from '@ni/eslint-config-javascript'; export default [ - ...javascriptConfig, + javascriptConfig, ]; ``` @@ -87,7 +87,7 @@ Export `@ni/eslint-config-typescript` configurations in the [ESLint flat configu import { typescriptConfig } from '@ni/eslint-config-typescript'; export default [ - ...typescriptConfig, + typescriptConfig, { files: ['**/*.ts'], languageOptions: { @@ -121,7 +121,7 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ { files: ['**/*.ts'], extends: [ - ...angularConfig + angularConfig ], languageOptions: { parserOptions: { @@ -131,7 +131,7 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ }, { files: ['*.html'], - extends: [...angularTemplateConfig] + extends: angularTemplateConfig] } ]; ``` @@ -149,7 +149,7 @@ Export `@ni/eslint-config-playwright` in the [ESLint flat configuration](https:/ import playwrightConfig from '@ni/eslint-config-playwright'; export default [ - ...playwrightConfig, + playwrightConfig, { files: ['**/*.ts'], languageOptions: { @@ -308,8 +308,8 @@ Instead of using the `extends` property, import the configuration packages you n import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; export default [ - ...angularConfig, - ...angularTemplateConfig, + angularConfig, + angularTemplateConfig, // Add any project-specific overrides here ]; ``` diff --git a/package-lock.json b/package-lock.json index 0f4f12c..8a9cf79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -595,13 +595,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.0.tgz", - "integrity": "sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.55.1.tgz", + "integrity": "sha512-IVAh/nOJaw6W9g+RJVlIQJ6gSiER+ae6mKQ5CX1bERzQgbC1VSeBlwdvczT7pxb0GWiyrxH4TGKbMfDb4Sq/ig==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright": "1.55.0" + "playwright": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -687,17 +687,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.0.tgz", - "integrity": "sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.1.tgz", + "integrity": "sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==", "license": "MIT", "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.44.0", - "@typescript-eslint/type-utils": "8.44.0", - "@typescript-eslint/utils": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0", + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/type-utils": "8.44.1", + "@typescript-eslint/utils": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -711,7 +711,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.44.0", + "@typescript-eslint/parser": "^8.44.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -727,16 +727,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.0.tgz", - "integrity": "sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.1.tgz", + "integrity": "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.44.0", - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/typescript-estree": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0", + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4" }, "engines": { @@ -752,14 +752,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.44.0.tgz", - "integrity": "sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.44.1.tgz", + "integrity": "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.44.0", - "@typescript-eslint/types": "^8.44.0", + "@typescript-eslint/tsconfig-utils": "^8.44.1", + "@typescript-eslint/types": "^8.44.1", "debug": "^4.3.4" }, "engines": { @@ -774,14 +774,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.44.0.tgz", - "integrity": "sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.44.1.tgz", + "integrity": "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0" + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -792,9 +792,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.0.tgz", - "integrity": "sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.1.tgz", + "integrity": "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==", "license": "MIT", "peer": true, "engines": { @@ -809,15 +809,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.44.0.tgz", - "integrity": "sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.44.1.tgz", + "integrity": "sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/typescript-estree": "8.44.0", - "@typescript-eslint/utils": "8.44.0", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/utils": "8.44.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -834,9 +834,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.0.tgz", - "integrity": "sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.1.tgz", + "integrity": "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==", "license": "MIT", "peer": true, "engines": { @@ -848,16 +848,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.0.tgz", - "integrity": "sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.1.tgz", + "integrity": "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/project-service": "8.44.0", - "@typescript-eslint/tsconfig-utils": "8.44.0", - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/visitor-keys": "8.44.0", + "@typescript-eslint/project-service": "8.44.1", + "@typescript-eslint/tsconfig-utils": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/visitor-keys": "8.44.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -903,16 +903,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.44.0.tgz", - "integrity": "sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.44.1.tgz", + "integrity": "sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==", "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.44.0", - "@typescript-eslint/types": "8.44.0", - "@typescript-eslint/typescript-estree": "8.44.0" + "@typescript-eslint/scope-manager": "8.44.1", + "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -927,13 +927,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.0.tgz", - "integrity": "sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.1.tgz", + "integrity": "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.44.0", + "@typescript-eslint/types": "8.44.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -3916,13 +3916,13 @@ } }, "node_modules/playwright": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.0.tgz", - "integrity": "sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.55.1.tgz", + "integrity": "sha512-cJW4Xd/G3v5ovXtJJ52MAOclqeac9S/aGGgRzLabuF8TnIb6xHvMzKIa6JmrRzUkeXJgfL1MhukP0NK6l39h3A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.55.0" + "playwright-core": "1.55.1" }, "bin": { "playwright": "cli.js" @@ -3935,9 +3935,9 @@ } }, "node_modules/playwright-core": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.0.tgz", - "integrity": "sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==", + "version": "1.55.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.55.1.tgz", + "integrity": "sha512-Z6Mh9mkwX+zxSlHqdr5AOcJnfp+xUWLCt9uKV18fhzA8eyxUd8NUWzAjxUh55RZKSYwDGX0cfaySdhZJGMoJ+w==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4788,16 +4788,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.44.0.tgz", - "integrity": "sha512-ib7mCkYuIzYonCq9XWF5XNw+fkj2zg629PSa9KNIQ47RXFF763S5BIX4wqz1+FLPogTZoiw8KmCiRPRa8bL3qw==", + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.44.1.tgz", + "integrity": "sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.44.0", - "@typescript-eslint/parser": "8.44.0", - "@typescript-eslint/typescript-estree": "8.44.0", - "@typescript-eslint/utils": "8.44.0" + "@typescript-eslint/eslint-plugin": "8.44.1", + "@typescript-eslint/parser": "8.44.1", + "@typescript-eslint/typescript-estree": "8.44.1", + "@typescript-eslint/utils": "8.44.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5084,9 +5084,9 @@ "version": "4.4.0", "license": "MIT", "peerDependencies": { - "@stylistic/eslint-plugin": "^5.0.0", - "eslint": "^9.35.0", - "eslint-plugin-import": "^2.31.1", + "@stylistic/eslint-plugin": "^5.4.0", + "eslint": "^9.36.0", + "eslint-plugin-import": "^2.32.0", "globals": "^14.0.0" } }, @@ -5106,8 +5106,8 @@ "license": "MIT", "peerDependencies": { "@ni/eslint-config-javascript": "^4.4.0", - "eslint-plugin-import": "^2.31.1", - "typescript-eslint": "^8.0.0" + "eslint-plugin-import": "^2.32.0", + "typescript-eslint": "^8.44.1" } }, "tests/angular": { @@ -5120,7 +5120,8 @@ "@types/jasmine": "^5.1.4" }, "peerDependencies": { - "@ni/eslint-config-angular": "*" + "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*" } }, "tests/javascript": { @@ -5137,6 +5138,7 @@ "@playwright/test": "^1.42.1" }, "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-playwright": "*" } }, @@ -5160,6 +5162,7 @@ "name": "@ni/typescript-test", "version": "1.0.0", "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-typescript": "*" } } diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index 8514522..125ff7f 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -1,17 +1,14 @@ -import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { defineConfig } from 'eslint/config'; -export default [ - ...javascriptConfig, +import { javascriptConfig, nodeEsmImportConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, + nodeEsmImportConfig, { - files: ['eslint.config.js'], + files: ['tools/*.js'], rules: { - 'import/no-default-export': 'off' + 'no-console': 'off' } - }, - { - files: ['**/*.js'], - rules: { - 'import/extensions': 'off' - }, - }, -]; \ No newline at end of file + } +]); diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index 1a872b5..0bd672d 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -1,9 +1,13 @@ +import { defineConfig } from 'eslint/config'; import { typescriptConfig } from '@ni/eslint-config-typescript'; import angular from 'angular-eslint'; -export const angularConfig = [ - ...angular.configs.tsRecommended, - ...typescriptConfig, +export { angularTemplateConfig } from './template.js'; +export { ignoreAttributes } from './template/options.js'; + +export const angularConfig = defineConfig([ + angular.configs.tsRecommended, + typescriptConfig, { processor: angular.processInlineTemplates, rules: { @@ -143,4 +147,4 @@ export const angularConfig = [ '@typescript-eslint/unbound-method': 'off', } } -]; +]); diff --git a/packages/eslint-config-angular/package.json b/packages/eslint-config-angular/package.json index c665aac..b75d196 100644 --- a/packages/eslint-config-angular/package.json +++ b/packages/eslint-config-angular/package.json @@ -1,46 +1,43 @@ { - "type": "module", - "name": "@ni/eslint-config-angular", - "version": "9.0.7", - "description": "NI's Angular ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "**/*.js", - "!/.*.js", - "!/tools" - ], - "peerDependencies": { - "angular-eslint": "^18.4.3", - "@ni/eslint-config-typescript": "^4.4.4", - "@ni/eslint-config-javascript": "^4.4.0" - }, - "exports": { - ".": "./index.js", - "./template": "./template.js", - "./requiring-type-checking": "./requiring-type-checking.js", - "./template/options": "./template/options.js" - } + "name": "@ni/eslint-config-angular", + "version": "9.0.7", + "description": "NI's Angular ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "angular-eslint": "^18.4.3", + "@ni/eslint-config-typescript": "^4.4.4", + "@ni/eslint-config-javascript": "^4.4.0" + } } diff --git a/packages/eslint-config-angular/requiring-type-checking.js b/packages/eslint-config-angular/requiring-type-checking.js deleted file mode 100644 index cb7ee04..0000000 --- a/packages/eslint-config-angular/requiring-type-checking.js +++ /dev/null @@ -1,15 +0,0 @@ -import { typescriptRequiringTypeCheckingConfig } from '@ni/eslint-config-typescript/requiring-type-checking'; - -export const angularRequiringTypeCheckingConfig = [ - ...typescriptRequiringTypeCheckingConfig, - { - files: ['**/*.spec.ts'], - rules: { - /* - Spies used by Angular application tests result in a significant number of - unbound methods so this rule is disabled for test specs in Angular projects. - */ - '@typescript-eslint/unbound-method': 'off', - }, - }, -]; diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/template.js index c473ef7..f1ac5a6 100644 --- a/packages/eslint-config-angular/template.js +++ b/packages/eslint-config-angular/template.js @@ -1,8 +1,9 @@ +import { defineConfig } from 'eslint/config'; import angularTemplate from 'angular-eslint'; import { ignoreAttributes } from './template/options.js'; -export const angularTemplateConfig = [ - ...angularTemplate.configs.templateRecommended, +export const angularTemplateConfig = defineConfig([ + angularTemplate.configs.templateRecommended, { rules: { /* @@ -107,4 +108,4 @@ export const angularTemplateConfig = [ '@angular-eslint/template/i18n': 'off' } } -]; +]); diff --git a/packages/eslint-config-angular/template/options.js b/packages/eslint-config-angular/template/options.js index f2ccb92..3db567a 100644 --- a/packages/eslint-config-angular/template/options.js +++ b/packages/eslint-config-angular/template/options.js @@ -142,4 +142,4 @@ const ignoreAttributeSets = { export const ignoreAttributes = { ...ignoreAttributeSets, all: Object.values(ignoreAttributeSets).flat() -}; \ No newline at end of file +}; diff --git a/packages/eslint-config-angular/tools/print-available-rules.js b/packages/eslint-config-angular/tools/print-available-rules.js index 895057d..7debb27 100644 --- a/packages/eslint-config-angular/tools/print-available-rules.js +++ b/packages/eslint-config-angular/tools/print-available-rules.js @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import angularPlugin from 'angular-eslint'; const print = keys => { diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js index 0c409f6..011b6b3 100644 --- a/packages/eslint-config-javascript/eslint.config.js +++ b/packages/eslint-config-javascript/eslint.config.js @@ -1,18 +1,8 @@ -// eslint-disable-next-line import/no-useless-path-segments -import { javascriptConfig } from './index.js'; +import { defineConfig } from 'eslint/config'; -export default [ - ...javascriptConfig, - { - files: ['eslint.config.js'], - rules: { - 'import/no-default-export': 'off' - } - }, - { - files: ['**/*.js'], - rules: { - 'import/extensions': 'off' - }, - }, -]; +import { javascriptConfig, nodeEsmImportConfig } from './index.js'; + +export default defineConfig([ + javascriptConfig, + nodeEsmImportConfig, +]); diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index 181d5ac..b3c7ed7 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -1,3 +1,4 @@ +import { defineConfig } from 'eslint/config'; import importPlugin from 'eslint-plugin-import'; import stylisticPlugin from '@stylistic/eslint-plugin'; import globals from 'globals'; @@ -10,7 +11,7 @@ import { es6 } from './rules/es6.js'; import { imports } from './rules/imports.js'; import { strict } from './rules/strict.js'; -export const javascriptConfig = [ +export const javascriptConfig = defineConfig([ stylisticPlugin.configs['disable-legacy'], bestPractices, errors, @@ -33,4 +34,20 @@ export const javascriptConfig = [ } } }, -]; \ No newline at end of file +]); + +export const nodeEsmImportConfig = defineConfig([ + { + rules: { + // node esm resolution requires extensions + 'import/extensions': 'off', + // node esm resolution requires full path name + 'import/no-useless-path-segments': 'off', + // eslint-plugin-import doesn't know how to resolve entry points in packages + // that use modern export maps in package.json. + // https://github.com/typescript-eslint/typescript-eslint/issues/7565 + // https://github.com/import-js/eslint-plugin-import/issues/2703 + 'import/no-unresolved': 'off', + } + } +]); diff --git a/packages/eslint-config-javascript/package.json b/packages/eslint-config-javascript/package.json index 6b56abc..8650ee4 100644 --- a/packages/eslint-config-javascript/package.json +++ b/packages/eslint-config-javascript/package.json @@ -1,40 +1,43 @@ { - "type": "module", - "name": "@ni/eslint-config-javascript", - "version": "4.4.0", - "description": "NI's JavaScript ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "rules/*.js", - "!/.*.js" - ], - "peerDependencies": { - "@stylistic/eslint-plugin": "^5.0.0", - "eslint": "^9.35.0", - "eslint-plugin-import": "^2.31.1", - "globals": "^14.0.0" - } -} + "name": "@ni/eslint-config-javascript", + "version": "4.4.0", + "description": "NI's JavaScript ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "@stylistic/eslint-plugin": "^5.4.0", + "eslint": "^9.36.0", + "eslint-plugin-import": "^2.32.0", + "globals": "^14.0.0" + } +} \ No newline at end of file diff --git a/packages/eslint-config-javascript/rules/best-practices.js b/packages/eslint-config-javascript/rules/best-practices.js index 609fd04..f5c9a6c 100644 --- a/packages/eslint-config-javascript/rules/best-practices.js +++ b/packages/eslint-config-javascript/rules/best-practices.js @@ -1,4 +1,6 @@ -export const bestPractices = { +import { defineConfig } from 'eslint/config'; + +export const bestPractices = defineConfig([{ rules: { /* enforces getter/setter pairs in objects @@ -587,4 +589,4 @@ export const bestPractices = { */ yoda: 'error' } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/errors.js b/packages/eslint-config-javascript/rules/errors.js index 9f15d5a..c73e2c7 100644 --- a/packages/eslint-config-javascript/rules/errors.js +++ b/packages/eslint-config-javascript/rules/errors.js @@ -1,4 +1,6 @@ -export const errors = { +import { defineConfig } from 'eslint/config'; + +export const errors = defineConfig([{ rules: { /* Enforce “for” loop update clause moving the counter in the right direction @@ -283,4 +285,4 @@ export const errors = { */ 'valid-typeof': ['error', { requireStringLiterals: true }], } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/es6.js b/packages/eslint-config-javascript/rules/es6.js index d6d92cd..e6f0a58 100644 --- a/packages/eslint-config-javascript/rules/es6.js +++ b/packages/eslint-config-javascript/rules/es6.js @@ -1,4 +1,6 @@ -export const es6 = { +import { defineConfig } from 'eslint/config'; + +export const es6 = defineConfig([{ rules: { /* Developers should consider readability, and no braces may be preferred when unnecessary. However, this rule @@ -225,4 +227,4 @@ export const es6 = { */ '@stylistic/yield-star-spacing': ['error', 'after'] } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/imports.js b/packages/eslint-config-javascript/rules/imports.js index 328e0f3..2959578 100644 --- a/packages/eslint-config-javascript/rules/imports.js +++ b/packages/eslint-config-javascript/rules/imports.js @@ -1,4 +1,6 @@ -export const imports = { +import { defineConfig } from 'eslint/config'; + +export const imports = defineConfig([{ settings: { 'import/resolver': { node: { @@ -101,6 +103,7 @@ export const imports = { '**/protractor.conf.js', // protractor config '**/protractor.conf.*.js', // protractor config '**/karma.conf.js', // karma config + '**/.eslintrc.js', // eslint config '**/eslint.config.js' // eslint config ], optionalDependencies: false, @@ -374,5 +377,19 @@ export const imports = { https://github.com/import-js/eslint-plugin-import/blob/d5fc8b670dc8e6903dbb7b0894452f60c03089f5/docs/rules/no-empty-named-blocks.md */ 'import/no-empty-named-blocks': 'off', - }, -}; \ No newline at end of file + } +}, { + /* + Eslint configuration file specific settings + */ + files: ['eslint.config.js', 'eslint.config.mjs'], + rules: { + // eslint config files require a top-level default export + 'import/no-default-export': 'off', + // eslint-plugin-import doesn't know how to resolve entry points in packages + // that use modern export maps in package.json. + // https://github.com/typescript-eslint/typescript-eslint/issues/7565 + // https://github.com/import-js/eslint-plugin-import/issues/2703 + 'import/no-unresolved': 'off', + } +}]); diff --git a/packages/eslint-config-javascript/rules/node.js b/packages/eslint-config-javascript/rules/node.js index 1ef0138..e106243 100644 --- a/packages/eslint-config-javascript/rules/node.js +++ b/packages/eslint-config-javascript/rules/node.js @@ -1,4 +1,6 @@ -export const node = { +import { defineConfig } from 'eslint/config'; + +export const node = defineConfig([{ rules: { /* enforce return after a callback @@ -58,4 +60,4 @@ export const node = { */ 'no-sync': 'off', } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/strict.js b/packages/eslint-config-javascript/rules/strict.js index 793e32e..0277985 100644 --- a/packages/eslint-config-javascript/rules/strict.js +++ b/packages/eslint-config-javascript/rules/strict.js @@ -1,8 +1,10 @@ -export const strict = { +import { defineConfig } from 'eslint/config'; + +export const strict = defineConfig([{ rules: { /* babel inserts `'use strict';` for us */ strict: ['error', 'never'], }, -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/style.js b/packages/eslint-config-javascript/rules/style.js index 453ca73..ab7ddd7 100644 --- a/packages/eslint-config-javascript/rules/style.js +++ b/packages/eslint-config-javascript/rules/style.js @@ -1,4 +1,6 @@ -export const style = { +import { defineConfig } from 'eslint/config'; + +export const style = defineConfig([{ rules: { /* enforce line breaks after opening and before closing array brackets @@ -715,4 +717,4 @@ export const style = { */ '@stylistic/wrap-regex': 'off' } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-javascript/rules/variables.js b/packages/eslint-config-javascript/rules/variables.js index 370a797..d5ba2d8 100644 --- a/packages/eslint-config-javascript/rules/variables.js +++ b/packages/eslint-config-javascript/rules/variables.js @@ -1,4 +1,6 @@ -export const variables = { +import { defineConfig } from 'eslint/config'; + +export const variables = defineConfig([{ rules: { /* enforce or disallow variable initializations at definition @@ -76,4 +78,4 @@ export const variables = { */ 'no-use-before-define': ['error', { functions: false, classes: true, variables: true }], } -}; \ No newline at end of file +}]); diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index 5770262..125ff7f 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -1,11 +1,14 @@ -import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { defineConfig } from 'eslint/config'; -export default [ - ...javascriptConfig, +import { javascriptConfig, nodeEsmImportConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, + nodeEsmImportConfig, { - files: ['eslint.config.js'], + files: ['tools/*.js'], rules: { - 'import/no-default-export': 'off' + 'no-console': 'off' } } -]; +]); diff --git a/packages/eslint-config-playwright/index.js b/packages/eslint-config-playwright/index.js index 676ff2c..606cc32 100644 --- a/packages/eslint-config-playwright/index.js +++ b/packages/eslint-config-playwright/index.js @@ -1,8 +1,9 @@ +import { defineConfig } from 'eslint/config'; import { typescriptConfig } from '@ni/eslint-config-typescript'; import playwright from 'eslint-plugin-playwright'; -export const playwrightConfig = [ - ...typescriptConfig, +export const playwrightConfig = defineConfig([ + typescriptConfig, playwright.configs['flat/recommended'], { rules: { @@ -82,4 +83,4 @@ export const playwrightConfig = [ 'playwright/require-top-level-describe': 'error' } } -]; +]); diff --git a/packages/eslint-config-playwright/package.json b/packages/eslint-config-playwright/package.json index 222dbf8..ca751c8 100644 --- a/packages/eslint-config-playwright/package.json +++ b/packages/eslint-config-playwright/package.json @@ -1,43 +1,43 @@ { - "type": "module", - "name": "@ni/eslint-config-playwright", - "version": "1.1.5", - "description": "NI's Playwright ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "!/.*.js" - ], - "peerDependencies": { - "@ni/eslint-config-typescript": "^4.4.4", - "@ni/eslint-config-javascript": "^4.4.0", - "eslint-plugin-playwright": "^0.18.0" - }, - "exports": { - ".": "./index.js", - "./requiring-type-checking": "./requiring-type-checking.js" - } + "name": "@ni/eslint-config-playwright", + "version": "1.1.5", + "description": "NI's Playwright ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "@ni/eslint-config-typescript": "^4.4.4", + "@ni/eslint-config-javascript": "^4.4.0", + "eslint-plugin-playwright": "^0.18.0" + } } diff --git a/packages/eslint-config-playwright/requiring-type-checking.js b/packages/eslint-config-playwright/requiring-type-checking.js deleted file mode 100644 index c69e1e9..0000000 --- a/packages/eslint-config-playwright/requiring-type-checking.js +++ /dev/null @@ -1,3 +0,0 @@ -import { typescriptRequiringTypeCheckingConfig } from '@ni/eslint-config-typescript/requiring-type-checking'; - -export const playwrightRequiringTypeCheckingConfig = [...typescriptRequiringTypeCheckingConfig]; \ No newline at end of file diff --git a/packages/eslint-config-playwright/tools/print-available-rules.js b/packages/eslint-config-playwright/tools/print-available-rules.js index 6d588bb..fa61bd1 100644 --- a/packages/eslint-config-playwright/tools/print-available-rules.js +++ b/packages/eslint-config-playwright/tools/print-available-rules.js @@ -1,4 +1,3 @@ -/* eslint-disable no-console */ import plugin from 'eslint-plugin-playwright'; const isTrue = val => val !== undefined && val !== false; diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index 8bad9b6..125ff7f 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -1,27 +1,14 @@ -import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { defineConfig } from 'eslint/config'; -export default [ - ...javascriptConfig, +import { javascriptConfig, nodeEsmImportConfig } from '@ni/eslint-config-javascript'; + +export default defineConfig([ + javascriptConfig, + nodeEsmImportConfig, { - files: ['eslint.config.js'], + files: ['tools/*.js'], rules: { - 'import/no-default-export': 'off' + 'no-console': 'off' } - }, - { - files: ['**/*.js'], - rules: { - 'import/extensions': 'off', - // eslint-plugin-import doesn't know how to resolve entry points in packages - // that use modern export maps in package.json. - // https://github.com/typescript-eslint/typescript-eslint/issues/7565 - // https://github.com/import-js/eslint-plugin-import/issues/2703 - 'import/no-unresolved': [ - 'error', - { - ignore: ['typescript-eslint'] - } - ], - }, - }, -]; + } +]); diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index f6477e6..5600c4f 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -1,14 +1,15 @@ +import { defineConfig } from 'eslint/config'; import { javascriptConfig } from '@ni/eslint-config-javascript'; import typescriptPlugin from 'typescript-eslint'; import importPlugin from 'eslint-plugin-import'; import { extensionsConfig } from './lib/extensions.js'; import { typescriptRequiringTypeCheckingConfig } from './requiring-type-checking.js'; -export const typescriptConfig = [ - ...javascriptConfig, - ...typescriptPlugin.configs.recommended, - ...extensionsConfig, - ...typescriptRequiringTypeCheckingConfig, +export const typescriptConfig = defineConfig([ + javascriptConfig, + typescriptPlugin.configs.recommended, + extensionsConfig, + typescriptRequiringTypeCheckingConfig, { languageOptions: { parser: typescriptPlugin.parser @@ -223,4 +224,4 @@ export const typescriptConfig = [ '@typescript-eslint/unified-signatures': 'error', } } -]; +]); diff --git a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js index affc2ca..e74de01 100644 --- a/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js +++ b/packages/eslint-config-typescript/lib/extensions-requiring-type-checking.js @@ -1,4 +1,6 @@ -export const extensionsRequiringTypeCheckingConfig = [{ +import { defineConfig } from 'eslint/config'; + +export const extensionsRequiringTypeCheckingConfig = defineConfig([{ rules: { 'dot-notation': 'off', '@typescript-eslint/dot-notation': ['error', { allowKeywords: true }], @@ -15,4 +17,4 @@ export const extensionsRequiringTypeCheckingConfig = [{ 'no-return-await': 'off', '@typescript-eslint/return-await': ['error', 'always'], } -}]; +}]); diff --git a/packages/eslint-config-typescript/lib/extensions.js b/packages/eslint-config-typescript/lib/extensions.js index 31ab042..9ef8bf6 100644 --- a/packages/eslint-config-typescript/lib/extensions.js +++ b/packages/eslint-config-typescript/lib/extensions.js @@ -1,4 +1,6 @@ -export const extensionsConfig = [{ +import { defineConfig } from 'eslint/config'; + +export const extensionsConfig = defineConfig([{ rules: { /* The following are extension rules that replace core JavaScript rules to support @@ -75,4 +77,4 @@ export const extensionsConfig = [{ 'no-useless-constructor': 'off', '@typescript-eslint/no-useless-constructor': 'error', } -}]; +}]); diff --git a/packages/eslint-config-typescript/package.json b/packages/eslint-config-typescript/package.json index 3e86f23..edb72ed 100644 --- a/packages/eslint-config-typescript/package.json +++ b/packages/eslint-config-typescript/package.json @@ -1,44 +1,43 @@ { - "type": "module", - "name": "@ni/eslint-config-typescript", - "version": "4.4.4", - "description": "NI's TypeScript ESLint Shareable Config", - "main": "index.js", - "scripts": { - "lint": "eslint .", - "pack": "npm pack", - "print-available-rules": "node tools/print-available-rules" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/ni/javascript-styleguide.git" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni" - ], - "author": "National Instruments", - "license": "MIT", - "bugs": { - "url": "https://github.com/ni/javascript-styleguide/issues" - }, - "homepage": "https://github.com/ni/javascript-styleguide#readme", - "publishConfig": { - "access": "public" - }, - "files": [ - "/*.js", - "!/.*.js", - "/lib/*" - ], - "peerDependencies": { - "@ni/eslint-config-javascript": "^4.4.0", - "eslint-plugin-import": "^2.31.1", - "typescript-eslint": "^8.0.0" - }, - "exports": { - ".": "./index.js", - "./requiring-type-checking": "./requiring-type-checking.js" - } -} + "name": "@ni/eslint-config-typescript", + "version": "4.4.4", + "description": "NI's TypeScript ESLint Shareable Config", + "type": "module", + "main": "index.js", + "exports": { + ".": "./index.js" + }, + "scripts": { + "lint": "eslint .", + "pack": "npm pack", + "print-available-rules": "node tools/print-available-rules" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ni/javascript-styleguide.git" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni" + ], + "author": "National Instruments", + "license": "MIT", + "bugs": { + "url": "https://github.com/ni/javascript-styleguide/issues" + }, + "homepage": "https://github.com/ni/javascript-styleguide#readme", + "publishConfig": { + "access": "public" + }, + "files": [ + "**/*.js", + "!/tools/*", + "!/eslint.config.js" + ], + "peerDependencies": { + "@ni/eslint-config-javascript": "^4.4.0", + "eslint-plugin-import": "^2.32.0", + "typescript-eslint": "^8.44.1" + } +} \ No newline at end of file diff --git a/packages/eslint-config-typescript/requiring-type-checking.js b/packages/eslint-config-typescript/requiring-type-checking.js index 12531b5..59ef591 100644 --- a/packages/eslint-config-typescript/requiring-type-checking.js +++ b/packages/eslint-config-typescript/requiring-type-checking.js @@ -1,10 +1,11 @@ +import { defineConfig } from 'eslint/config'; import typescriptPlugin from 'typescript-eslint'; import { extensionsRequiringTypeCheckingConfig } from './lib/extensions-requiring-type-checking.js'; -export const typescriptRequiringTypeCheckingConfig = [ - ...typescriptPlugin.configs.recommendedTypeChecked, - ...typescriptPlugin.configs.stylisticTypeChecked, - ...extensionsRequiringTypeCheckingConfig, +export const typescriptRequiringTypeCheckingConfig = defineConfig([ + typescriptPlugin.configs.recommendedTypeChecked, + typescriptPlugin.configs.stylisticTypeChecked, + extensionsRequiringTypeCheckingConfig, { languageOptions: { parser: typescriptPlugin.parser @@ -187,4 +188,4 @@ export const typescriptRequiringTypeCheckingConfig = [ '@typescript-eslint/switch-exhaustiveness-check': 'off' } } -]; +]); diff --git a/packages/eslint-config-typescript/tools/print-available-rules.js b/packages/eslint-config-typescript/tools/print-available-rules.js index ca23567..efee6f2 100644 --- a/packages/eslint-config-typescript/tools/print-available-rules.js +++ b/packages/eslint-config-typescript/tools/print-available-rules.js @@ -1,8 +1,3 @@ -/* eslint-disable no-console */ -// eslint-plugin-import doesn't know how to resolve entry points in commonjs modules that are -// declared using "export" rather than the old "main" syntax in package.json. -// See https://github.com/typescript-eslint/typescript-eslint/issues/7565 -// and https://github.com/import-js/eslint-plugin-import/issues/2703 import typescriptPlugin from 'typescript-eslint'; const isTrue = val => val !== undefined && val !== false; diff --git a/tests/angular/CHANGELOG.json b/tests/angular/CHANGELOG.json deleted file mode 100644 index 5544358..0000000 --- a/tests/angular/CHANGELOG.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "@ni/angular-test", - "entries": [ - { - "date": "Tue, 09 Nov 2021 18:23:18 GMT", - "tag": "@ni/angular-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/angular-test", - "comment": "Bump @ni/eslint-config-angular to v3.2.0", - "commit": "e4eed9978948e04ce51a4e20c7c841e688433fc5" - } - ] - } - }, - { - "date": "Thu, 28 Oct 2021 15:59:19 GMT", - "tag": "@ni/angular-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/angular-test", - "comment": "Bump @ni/eslint-config-angular to v3.1.0", - "commit": "772f17b65e83107fd8682087c87b9619a5c2ea38" - } - ] - } - }, - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/angular-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/angular-test", - "comment": "Bump @ni/eslint-config-angular to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/angular/CHANGELOG.md b/tests/angular/CHANGELOG.md deleted file mode 100644 index 6511df2..0000000 --- a/tests/angular/CHANGELOG.md +++ /dev/null @@ -1,29 +0,0 @@ -# Change Log - @ni/angular-test - -This log was last generated on Tue, 09 Nov 2021 18:23:18 GMT and should not be manually modified. - - - -## 1.0.0 - -Tue, 09 Nov 2021 18:23:18 GMT - -### Patches - -- Bump @ni/eslint-config-angular to v3.2.0 - -## 1.0.0 - -Thu, 28 Oct 2021 15:59:19 GMT - -### Patches - -- Bump @ni/eslint-config-angular to v3.1.0 - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-angular to v3.0.1 diff --git a/tests/angular/custom-ignore-attributes/index.spec.ts b/tests/angular/custom-ignore-attributes/index.spec.ts index cde10b1..0ee29e2 100644 --- a/tests/angular/custom-ignore-attributes/index.spec.ts +++ b/tests/angular/custom-ignore-attributes/index.spec.ts @@ -12,8 +12,8 @@ class MyComponent { } describe('MyComponent', () => { - let hostComponent: MyComponent; - let fixture: ComponentFixture; + let hostComponent!: MyComponent; + let fixture!: ComponentFixture; it('should have a div', async () => { await fixture.whenStable(); diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index b27401a..b8c748f 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -1,63 +1,44 @@ -import { fileURLToPath } from 'url'; -import path from 'path'; +import { angularConfig, angularTemplateConfig, ignoreAttributes } from '@ni/eslint-config-angular'; -import { angularConfig } from '@ni/eslint-config-angular'; -import { angularTemplateConfig } from '@ni/eslint-config-angular/template'; -import { ignoreAttributes } from '@ni/eslint-config-angular/template/options'; - -import typescriptPlugin from 'typescript-eslint'; -import angularTemplatePlugin from 'angular-eslint'; import { defineConfig } from 'eslint/config'; - -const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); +import { javascriptConfig } from '@ni/eslint-config-javascript'; export default defineConfig([ - { - files: ['eslint.config.js'], - rules: { - 'import/no-default-export': 'off', - } - }, - { - files: ['**/*.ts'], - extends: [...angularConfig], - languageOptions: { - parser: typescriptPlugin.parser, - parserOptions: { - project: ['./tsconfig.json'], - tsConfigRootDir, - }, - }, - }, - { - files: ['*.html'], - extends: [...angularTemplateConfig], - languageOptions: { parser: angularTemplatePlugin.templateParser }, - }, - { - files: ['custom-ignore-attributes/**/*.html'], - languageOptions: { parser: angularTemplatePlugin.templateParser }, - plugins: { - '@angular-eslint/template': angularTemplatePlugin.templatePlugin, - }, - rules: { - '@angular-eslint/template/i18n': [ - 'error', - { - checkId: false, - ignoreAttributes: [...ignoreAttributes.all, 'custom-field'], - }, - ], - }, - }, - { - files: ['**/*.spec.ts*.html'], - languageOptions: { parser: angularTemplatePlugin.templateParser }, - plugins: { - '@angular-eslint/template': angularTemplatePlugin.templatePlugin, - }, - rules: { - '@angular-eslint/template/i18n': 'off', - }, - }, -]); \ No newline at end of file + { + files: ['**/*.js'], + extends: javascriptConfig, + }, + { + files: ['**/*.ts'], + extends: angularConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, + }, + { + files: ['**/*.html'], + extends: angularTemplateConfig, + }, + // Use only a single top-level eslint.config.js: https://eslint.org/docs/latest/use/configure/configuration-files#experimental-configuration-file-resolution + { + files: ['custom-ignore-attributes/**/*.html', '*.html'], + rules: { + '@angular-eslint/template/i18n': [ + 'error', + { + checkId: false, + ignoreAttributes: [...ignoreAttributes.all, 'custom-field'], + }, + ], + }, + }, + { + files: ['**/*.spec.ts*.html'], + rules: { + '@angular-eslint/template/i18n': 'off', + }, + }, +]); diff --git a/tests/angular/index.spec.ts b/tests/angular/index.spec.ts index ceb1fb5..5dece52 100644 --- a/tests/angular/index.spec.ts +++ b/tests/angular/index.spec.ts @@ -12,8 +12,8 @@ class MyComponent { } describe('MyComponent', () => { - let hostComponent: MyComponent; - let fixture: ComponentFixture; + let hostComponent!: MyComponent; + let fixture!: ComponentFixture; it('should have a div', async () => { await fixture.whenStable(); diff --git a/tests/angular/package.json b/tests/angular/package.json index b35c1e8..0109404 100644 --- a/tests/angular/package.json +++ b/tests/angular/package.json @@ -1,14 +1,15 @@ { - "type": "module", "name": "@ni/angular-test", "version": "1.0.0", "private": true, "description": "Smoke test for Angular project integration.", + "type": "module", "scripts": { "test": "eslint ." }, "peerDependencies": { - "@ni/eslint-config-angular": "*" + "@ni/eslint-config-angular": "*", + "@ni/eslint-config-javascript": "*" }, "dependencies": { "@angular/core": "^18.2.13" diff --git a/tests/javascript/CHANGELOG.json b/tests/javascript/CHANGELOG.json deleted file mode 100644 index 161169a..0000000 --- a/tests/javascript/CHANGELOG.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@ni/javascript-test", - "entries": [ - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/javascript-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/javascript-test", - "comment": "Bump @ni/eslint-config-javascript to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/javascript/CHANGELOG.md b/tests/javascript/CHANGELOG.md deleted file mode 100644 index cad4d35..0000000 --- a/tests/javascript/CHANGELOG.md +++ /dev/null @@ -1,13 +0,0 @@ -# Change Log - @ni/javascript-test - -This log was last generated on Wed, 29 Sep 2021 22:10:29 GMT and should not be manually modified. - - - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-javascript to v3.0.1 diff --git a/tests/javascript/eslint.config.js b/tests/javascript/eslint.config.js index 531a899..662b25b 100644 --- a/tests/javascript/eslint.config.js +++ b/tests/javascript/eslint.config.js @@ -1,11 +1,6 @@ +import { defineConfig } from 'eslint/config'; import { javascriptConfig } from '@ni/eslint-config-javascript'; -export default [ - ...javascriptConfig, - { - files: ['eslint.config.js'], - rules: { - 'import/no-default-export': 'off' - } - }, -]; +export default defineConfig([ + javascriptConfig, +]); diff --git a/tests/javascript/package.json b/tests/javascript/package.json index db9cc8f..6f00dbf 100644 --- a/tests/javascript/package.json +++ b/tests/javascript/package.json @@ -1,9 +1,9 @@ { - "type": "module", "name": "@ni/javascript-test", "version": "1.0.0", "private": true, "description": "Smoke test for JavaScript project integration.", + "type": "module", "scripts": { "test": "eslint ." }, diff --git a/tests/playwright/eslint.config.js b/tests/playwright/eslint.config.js index f3436a7..45ae080 100644 --- a/tests/playwright/eslint.config.js +++ b/tests/playwright/eslint.config.js @@ -1,20 +1,22 @@ import { fileURLToPath } from 'url'; import path from 'path'; import { playwrightConfig } from '@ni/eslint-config-playwright'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; import { defineConfig } from 'eslint/config'; const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); export default defineConfig([ { - files: ['eslint.config.js'], + files: ['**/*.js'], + extends: javascriptConfig, rules: { 'import/no-default-export': 'off', } }, { files: ['*.ts'], - extends: [...playwrightConfig], + extends: playwrightConfig, languageOptions: { parserOptions: { project: ['./tsconfig.json'], diff --git a/tests/playwright/package.json b/tests/playwright/package.json index ff9e599..07b4585 100644 --- a/tests/playwright/package.json +++ b/tests/playwright/package.json @@ -1,13 +1,14 @@ { - "type": "module", "name": "@ni/playwright-test", "version": "1.0.0", "private": true, "description": "Smoke test for Playwright project integration.", + "type": "module", "scripts": { "test": "eslint ." }, "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-playwright": "*" }, "devDependencies": { diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js index ada45e2..662b25b 100644 --- a/tests/print-evaluated-rules/eslint.config.js +++ b/tests/print-evaluated-rules/eslint.config.js @@ -1,11 +1,6 @@ +import { defineConfig } from 'eslint/config'; import { javascriptConfig } from '@ni/eslint-config-javascript'; -export default [ - ...javascriptConfig, - { - files: ['eslint.config.js'], - rules: { - 'import/no-default-export': 'off' - } - } -]; \ No newline at end of file +export default defineConfig([ + javascriptConfig, +]); diff --git a/tests/print-evaluated-rules/package.json b/tests/print-evaluated-rules/package.json index 7ed3e30..7eabb10 100644 --- a/tests/print-evaluated-rules/package.json +++ b/tests/print-evaluated-rules/package.json @@ -1,9 +1,9 @@ { - "type": "module", "name": "@ni/print-evaluated-rules-test", "version": "1.0.0", "private": true, "description": "Meta project used to analyze the integration tests.", + "type": "module", "scripts": { "lint": "eslint .", "print-evaluated-rules": "node index.js", diff --git a/tests/typescript/CHANGELOG.json b/tests/typescript/CHANGELOG.json deleted file mode 100644 index 452aa9c..0000000 --- a/tests/typescript/CHANGELOG.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "@ni/typescript-test", - "entries": [ - { - "date": "Thu, 28 Oct 2021 15:59:19 GMT", - "tag": "@ni/typescript-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.2", - "commit": "772f17b65e83107fd8682087c87b9619a5c2ea38" - } - ] - } - }, - { - "date": "Wed, 29 Sep 2021 22:10:29 GMT", - "tag": "@ni/typescript-test_v1.0.0", - "version": "1.0.0", - "comments": { - "patch": [ - { - "author": "beachball", - "package": "@ni/typescript-test", - "comment": "Bump @ni/eslint-config-typescript to v3.0.1", - "commit": "2eefa5b8f9bd3e68031cdb0e928cd97254a45ba6" - } - ] - } - } - ] -} diff --git a/tests/typescript/CHANGELOG.md b/tests/typescript/CHANGELOG.md deleted file mode 100644 index ac35821..0000000 --- a/tests/typescript/CHANGELOG.md +++ /dev/null @@ -1,21 +0,0 @@ -# Change Log - @ni/typescript-test - -This log was last generated on Thu, 28 Oct 2021 15:59:19 GMT and should not be manually modified. - - - -## 1.0.0 - -Thu, 28 Oct 2021 15:59:19 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.2 - -## 1.0.0 - -Wed, 29 Sep 2021 22:10:29 GMT - -### Patches - -- Bump @ni/eslint-config-typescript to v3.0.1 diff --git a/tests/typescript/eslint.config.js b/tests/typescript/eslint.config.js index e9ca36f..4e5e5b4 100644 --- a/tests/typescript/eslint.config.js +++ b/tests/typescript/eslint.config.js @@ -1,25 +1,17 @@ -import { fileURLToPath } from 'url'; -import path from 'path'; +import { javascriptConfig } from '@ni/eslint-config-javascript'; import { typescriptConfig } from '@ni/eslint-config-typescript'; import { defineConfig } from 'eslint/config'; -const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); - export default defineConfig([ - { - files: ['eslint.config.js'], - rules: { - 'import/no-default-export': 'off', - } - }, + javascriptConfig, { files: ['**/*.ts'], - extends: [...typescriptConfig], + extends: typescriptConfig, languageOptions: { parserOptions: { project: ['./tsconfig.json'], - tsConfigRootDir, + tsConfigRootDir: import.meta.dirname, }, }, }, -]); \ No newline at end of file +]); diff --git a/tests/typescript/package.json b/tests/typescript/package.json index b389c04..3fb0f75 100644 --- a/tests/typescript/package.json +++ b/tests/typescript/package.json @@ -1,13 +1,14 @@ { - "type": "module", "name": "@ni/typescript-test", "version": "1.0.0", "private": true, "description": "Smoke test for TypeScript project integration.", + "type": "module", "scripts": { "test": "eslint ." }, "peerDependencies": { + "@ni/eslint-config-javascript": "*", "@ni/eslint-config-typescript": "*" } } From 2f954e3d396845681a01a077489dd650a2d0dd2c Mon Sep 17 00:00:00 2001 From: rajsite Date: Mon, 29 Sep 2025 16:47:52 -0500 Subject: [PATCH 42/53] fix import --- tests/print-evaluated-rules/eslint.config.js | 6 ++++++ tests/print-evaluated-rules/index.js | 4 +--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/print-evaluated-rules/eslint.config.js b/tests/print-evaluated-rules/eslint.config.js index 662b25b..9dc3f45 100644 --- a/tests/print-evaluated-rules/eslint.config.js +++ b/tests/print-evaluated-rules/eslint.config.js @@ -3,4 +3,10 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; export default defineConfig([ javascriptConfig, + { + files: ['*.js'], + rules: { + 'no-console': 'off' + } + } ]); diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index 98db319..9e4a7a6 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -1,7 +1,5 @@ -/* eslint-disable no-console */ import { ESLint } from 'eslint'; -import { angularConfig } from '@ni/eslint-config-angular'; -import { angularTemplateConfig } from '@ni/eslint-config-angular/template'; +import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; import fs from 'fs'; import path from 'path'; import yargs from 'yargs/yargs'; From cb62b9d3742ca99b7939e3ead8ff3caef3492283 Mon Sep 17 00:00:00 2001 From: gokulprasanth-ni Date: Tue, 30 Sep 2025 10:55:30 +0530 Subject: [PATCH 43/53] update test config Signed-off-by: gokulprasanth-ni --- packages/eslint-config-angular/template.js | 2 +- tests/angular/eslint.config.js | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/template.js index f1ac5a6..6adb7fc 100644 --- a/packages/eslint-config-angular/template.js +++ b/packages/eslint-config-angular/template.js @@ -100,7 +100,7 @@ export const angularTemplateConfig = defineConfig([ { // Ignore inline templates in tests using the inline template naming convention // See naming details: https://github.com/angular-eslint/angular-eslint/releases/tag/v14.0.0 - files: ['*.spec.ts*.html'], + files: ['**/*.spec.ts*.html'], rules: { /* Tests often define helper components that don't need to be marked for i18n. diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index b8c748f..1a4b411 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -24,7 +24,8 @@ export default defineConfig([ }, // Use only a single top-level eslint.config.js: https://eslint.org/docs/latest/use/configure/configuration-files#experimental-configuration-file-resolution { - files: ['custom-ignore-attributes/**/*.html', '*.html'], + files: ['custom-ignore-attributes/**/*.html'], + ignores: ['custom-ignore-attributes/**/*.spec.ts*.html'], rules: { '@angular-eslint/template/i18n': [ 'error', @@ -35,10 +36,4 @@ export default defineConfig([ ], }, }, - { - files: ['**/*.spec.ts*.html'], - rules: { - '@angular-eslint/template/i18n': 'off', - }, - }, ]); From d033cd74b5c3e729cb83a1b7facbfacd65cd86d4 Mon Sep 17 00:00:00 2001 From: rajsite Date: Tue, 30 Sep 2025 10:56:02 -0500 Subject: [PATCH 44/53] Dedupe import node esm config --- .../eslint-config-angular/eslint.config.js | 4 ++-- .../eslint-config-javascript/eslint.config.js | 4 ++-- packages/eslint-config-javascript/index.js | 17 +-------------- .../lib/import-node-esm.js | 21 +++++++++++++++++++ .../eslint-config-javascript/rules/imports.js | 11 ++++------ .../eslint-config-playwright/eslint.config.js | 4 ++-- .../eslint-config-typescript/eslint.config.js | 4 ++-- 7 files changed, 34 insertions(+), 31 deletions(-) create mode 100644 packages/eslint-config-javascript/lib/import-node-esm.js diff --git a/packages/eslint-config-angular/eslint.config.js b/packages/eslint-config-angular/eslint.config.js index 125ff7f..47dccba 100644 --- a/packages/eslint-config-angular/eslint.config.js +++ b/packages/eslint-config-angular/eslint.config.js @@ -1,10 +1,10 @@ import { defineConfig } from 'eslint/config'; -import { javascriptConfig, nodeEsmImportConfig } from '@ni/eslint-config-javascript'; +import { javascriptConfig, importNodeEsmConfig } from '@ni/eslint-config-javascript'; export default defineConfig([ javascriptConfig, - nodeEsmImportConfig, + importNodeEsmConfig, { files: ['tools/*.js'], rules: { diff --git a/packages/eslint-config-javascript/eslint.config.js b/packages/eslint-config-javascript/eslint.config.js index 011b6b3..822adf5 100644 --- a/packages/eslint-config-javascript/eslint.config.js +++ b/packages/eslint-config-javascript/eslint.config.js @@ -1,8 +1,8 @@ import { defineConfig } from 'eslint/config'; -import { javascriptConfig, nodeEsmImportConfig } from './index.js'; +import { javascriptConfig, importNodeEsmConfig } from './index.js'; export default defineConfig([ javascriptConfig, - nodeEsmImportConfig, + importNodeEsmConfig, ]); diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index b3c7ed7..7c9cb46 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -11,6 +11,7 @@ import { es6 } from './rules/es6.js'; import { imports } from './rules/imports.js'; import { strict } from './rules/strict.js'; +export { importNodeEsmConfig } from './lib/import-node-esm.js'; export const javascriptConfig = defineConfig([ stylisticPlugin.configs['disable-legacy'], bestPractices, @@ -35,19 +36,3 @@ export const javascriptConfig = defineConfig([ } }, ]); - -export const nodeEsmImportConfig = defineConfig([ - { - rules: { - // node esm resolution requires extensions - 'import/extensions': 'off', - // node esm resolution requires full path name - 'import/no-useless-path-segments': 'off', - // eslint-plugin-import doesn't know how to resolve entry points in packages - // that use modern export maps in package.json. - // https://github.com/typescript-eslint/typescript-eslint/issues/7565 - // https://github.com/import-js/eslint-plugin-import/issues/2703 - 'import/no-unresolved': 'off', - } - } -]); diff --git a/packages/eslint-config-javascript/lib/import-node-esm.js b/packages/eslint-config-javascript/lib/import-node-esm.js new file mode 100644 index 0000000..113f03b --- /dev/null +++ b/packages/eslint-config-javascript/lib/import-node-esm.js @@ -0,0 +1,21 @@ +import { defineConfig } from 'eslint/config'; + +/** + * Configuration overrides to support node esm resolution + * See: https://nodejs.org/api/esm.html#terminology + */ +export const importNodeEsmConfig = defineConfig([ + { + rules: { + // node esm relative resolution requires extensions + 'import/extensions': 'off', + // node esm relative resolution requires full path name + 'import/no-useless-path-segments': 'off', + // eslint-plugin-import doesn't know how to resolve entry points in packages + // that use modern export maps in package.json. + // https://github.com/typescript-eslint/typescript-eslint/issues/7565 + // https://github.com/import-js/eslint-plugin-import/issues/2703 + 'import/no-unresolved': 'off', + } + } +]); diff --git a/packages/eslint-config-javascript/rules/imports.js b/packages/eslint-config-javascript/rules/imports.js index 2959578..e205078 100644 --- a/packages/eslint-config-javascript/rules/imports.js +++ b/packages/eslint-config-javascript/rules/imports.js @@ -1,4 +1,5 @@ import { defineConfig } from 'eslint/config'; +import { importNodeEsmConfig } from '../lib/import-node-esm.js'; export const imports = defineConfig([{ settings: { @@ -103,8 +104,8 @@ export const imports = defineConfig([{ '**/protractor.conf.js', // protractor config '**/protractor.conf.*.js', // protractor config '**/karma.conf.js', // karma config - '**/.eslintrc.js', // eslint config - '**/eslint.config.js' // eslint config + '**/.eslintrc.js', // legacy eslint config + '**/eslint.config.js', // eslint config ], optionalDependencies: false, }], @@ -383,13 +384,9 @@ export const imports = defineConfig([{ Eslint configuration file specific settings */ files: ['eslint.config.js', 'eslint.config.mjs'], + extends: [importNodeEsmConfig], rules: { // eslint config files require a top-level default export 'import/no-default-export': 'off', - // eslint-plugin-import doesn't know how to resolve entry points in packages - // that use modern export maps in package.json. - // https://github.com/typescript-eslint/typescript-eslint/issues/7565 - // https://github.com/import-js/eslint-plugin-import/issues/2703 - 'import/no-unresolved': 'off', } }]); diff --git a/packages/eslint-config-playwright/eslint.config.js b/packages/eslint-config-playwright/eslint.config.js index 125ff7f..47dccba 100644 --- a/packages/eslint-config-playwright/eslint.config.js +++ b/packages/eslint-config-playwright/eslint.config.js @@ -1,10 +1,10 @@ import { defineConfig } from 'eslint/config'; -import { javascriptConfig, nodeEsmImportConfig } from '@ni/eslint-config-javascript'; +import { javascriptConfig, importNodeEsmConfig } from '@ni/eslint-config-javascript'; export default defineConfig([ javascriptConfig, - nodeEsmImportConfig, + importNodeEsmConfig, { files: ['tools/*.js'], rules: { diff --git a/packages/eslint-config-typescript/eslint.config.js b/packages/eslint-config-typescript/eslint.config.js index 125ff7f..47dccba 100644 --- a/packages/eslint-config-typescript/eslint.config.js +++ b/packages/eslint-config-typescript/eslint.config.js @@ -1,10 +1,10 @@ import { defineConfig } from 'eslint/config'; -import { javascriptConfig, nodeEsmImportConfig } from '@ni/eslint-config-javascript'; +import { javascriptConfig, importNodeEsmConfig } from '@ni/eslint-config-javascript'; export default defineConfig([ javascriptConfig, - nodeEsmImportConfig, + importNodeEsmConfig, { files: ['tools/*.js'], rules: { From 0cf436d18462bfe24147e624380c348b686ccb1e Mon Sep 17 00:00:00 2001 From: rajsite Date: Tue, 30 Sep 2025 11:06:30 -0500 Subject: [PATCH 45/53] Consistent lib layout --- packages/eslint-config-angular/index.js | 4 ++-- .../options.js => lib/template-options.js} | 0 .../eslint-config-angular/{ => lib}/template.js | 2 +- packages/eslint-config-javascript/index.js | 16 ++++++++-------- .../{rules => lib}/best-practices.js | 0 .../{rules => lib}/errors.js | 0 .../{rules => lib}/es6.js | 0 .../{rules => lib}/imports.js | 0 .../{rules => lib}/node.js | 0 .../{rules => lib}/strict.js | 0 .../{rules => lib}/style.js | 0 .../{rules => lib}/variables.js | 0 packages/eslint-config-typescript/index.js | 2 +- .../{ => lib}/requiring-type-checking.js | 2 +- 14 files changed, 13 insertions(+), 13 deletions(-) rename packages/eslint-config-angular/{template/options.js => lib/template-options.js} (100%) rename packages/eslint-config-angular/{ => lib}/template.js (98%) rename packages/eslint-config-javascript/{rules => lib}/best-practices.js (100%) rename packages/eslint-config-javascript/{rules => lib}/errors.js (100%) rename packages/eslint-config-javascript/{rules => lib}/es6.js (100%) rename packages/eslint-config-javascript/{rules => lib}/imports.js (100%) rename packages/eslint-config-javascript/{rules => lib}/node.js (100%) rename packages/eslint-config-javascript/{rules => lib}/strict.js (100%) rename packages/eslint-config-javascript/{rules => lib}/style.js (100%) rename packages/eslint-config-javascript/{rules => lib}/variables.js (100%) rename packages/eslint-config-typescript/{ => lib}/requiring-type-checking.js (98%) diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index 0bd672d..017cd84 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -2,8 +2,8 @@ import { defineConfig } from 'eslint/config'; import { typescriptConfig } from '@ni/eslint-config-typescript'; import angular from 'angular-eslint'; -export { angularTemplateConfig } from './template.js'; -export { ignoreAttributes } from './template/options.js'; +export { angularTemplateConfig } from './lib/template.js'; +export { ignoreAttributes } from './lib/template-options.js'; export const angularConfig = defineConfig([ angular.configs.tsRecommended, diff --git a/packages/eslint-config-angular/template/options.js b/packages/eslint-config-angular/lib/template-options.js similarity index 100% rename from packages/eslint-config-angular/template/options.js rename to packages/eslint-config-angular/lib/template-options.js diff --git a/packages/eslint-config-angular/template.js b/packages/eslint-config-angular/lib/template.js similarity index 98% rename from packages/eslint-config-angular/template.js rename to packages/eslint-config-angular/lib/template.js index 6adb7fc..73e67f1 100644 --- a/packages/eslint-config-angular/template.js +++ b/packages/eslint-config-angular/lib/template.js @@ -1,6 +1,6 @@ import { defineConfig } from 'eslint/config'; import angularTemplate from 'angular-eslint'; -import { ignoreAttributes } from './template/options.js'; +import { ignoreAttributes } from './template-options.js'; export const angularTemplateConfig = defineConfig([ angularTemplate.configs.templateRecommended, diff --git a/packages/eslint-config-javascript/index.js b/packages/eslint-config-javascript/index.js index 7c9cb46..6536e27 100644 --- a/packages/eslint-config-javascript/index.js +++ b/packages/eslint-config-javascript/index.js @@ -2,14 +2,14 @@ import { defineConfig } from 'eslint/config'; import importPlugin from 'eslint-plugin-import'; import stylisticPlugin from '@stylistic/eslint-plugin'; import globals from 'globals'; -import { bestPractices } from './rules/best-practices.js'; -import { errors } from './rules/errors.js'; -import { node } from './rules/node.js'; -import { style } from './rules/style.js'; -import { variables } from './rules/variables.js'; -import { es6 } from './rules/es6.js'; -import { imports } from './rules/imports.js'; -import { strict } from './rules/strict.js'; +import { bestPractices } from './lib/best-practices.js'; +import { errors } from './lib/errors.js'; +import { node } from './lib/node.js'; +import { style } from './lib/style.js'; +import { variables } from './lib/variables.js'; +import { es6 } from './lib/es6.js'; +import { imports } from './lib/imports.js'; +import { strict } from './lib/strict.js'; export { importNodeEsmConfig } from './lib/import-node-esm.js'; export const javascriptConfig = defineConfig([ diff --git a/packages/eslint-config-javascript/rules/best-practices.js b/packages/eslint-config-javascript/lib/best-practices.js similarity index 100% rename from packages/eslint-config-javascript/rules/best-practices.js rename to packages/eslint-config-javascript/lib/best-practices.js diff --git a/packages/eslint-config-javascript/rules/errors.js b/packages/eslint-config-javascript/lib/errors.js similarity index 100% rename from packages/eslint-config-javascript/rules/errors.js rename to packages/eslint-config-javascript/lib/errors.js diff --git a/packages/eslint-config-javascript/rules/es6.js b/packages/eslint-config-javascript/lib/es6.js similarity index 100% rename from packages/eslint-config-javascript/rules/es6.js rename to packages/eslint-config-javascript/lib/es6.js diff --git a/packages/eslint-config-javascript/rules/imports.js b/packages/eslint-config-javascript/lib/imports.js similarity index 100% rename from packages/eslint-config-javascript/rules/imports.js rename to packages/eslint-config-javascript/lib/imports.js diff --git a/packages/eslint-config-javascript/rules/node.js b/packages/eslint-config-javascript/lib/node.js similarity index 100% rename from packages/eslint-config-javascript/rules/node.js rename to packages/eslint-config-javascript/lib/node.js diff --git a/packages/eslint-config-javascript/rules/strict.js b/packages/eslint-config-javascript/lib/strict.js similarity index 100% rename from packages/eslint-config-javascript/rules/strict.js rename to packages/eslint-config-javascript/lib/strict.js diff --git a/packages/eslint-config-javascript/rules/style.js b/packages/eslint-config-javascript/lib/style.js similarity index 100% rename from packages/eslint-config-javascript/rules/style.js rename to packages/eslint-config-javascript/lib/style.js diff --git a/packages/eslint-config-javascript/rules/variables.js b/packages/eslint-config-javascript/lib/variables.js similarity index 100% rename from packages/eslint-config-javascript/rules/variables.js rename to packages/eslint-config-javascript/lib/variables.js diff --git a/packages/eslint-config-typescript/index.js b/packages/eslint-config-typescript/index.js index 5600c4f..0e891cc 100644 --- a/packages/eslint-config-typescript/index.js +++ b/packages/eslint-config-typescript/index.js @@ -3,7 +3,7 @@ import { javascriptConfig } from '@ni/eslint-config-javascript'; import typescriptPlugin from 'typescript-eslint'; import importPlugin from 'eslint-plugin-import'; import { extensionsConfig } from './lib/extensions.js'; -import { typescriptRequiringTypeCheckingConfig } from './requiring-type-checking.js'; +import { typescriptRequiringTypeCheckingConfig } from './lib/requiring-type-checking.js'; export const typescriptConfig = defineConfig([ javascriptConfig, diff --git a/packages/eslint-config-typescript/requiring-type-checking.js b/packages/eslint-config-typescript/lib/requiring-type-checking.js similarity index 98% rename from packages/eslint-config-typescript/requiring-type-checking.js rename to packages/eslint-config-typescript/lib/requiring-type-checking.js index 59ef591..6204f6a 100644 --- a/packages/eslint-config-typescript/requiring-type-checking.js +++ b/packages/eslint-config-typescript/lib/requiring-type-checking.js @@ -1,6 +1,6 @@ import { defineConfig } from 'eslint/config'; import typescriptPlugin from 'typescript-eslint'; -import { extensionsRequiringTypeCheckingConfig } from './lib/extensions-requiring-type-checking.js'; +import { extensionsRequiringTypeCheckingConfig } from './extensions-requiring-type-checking.js'; export const typescriptRequiringTypeCheckingConfig = defineConfig([ typescriptPlugin.configs.recommendedTypeChecked, From 30d85e04d158f7d1e644600051836c49d254991d Mon Sep 17 00:00:00 2001 From: rajsite Date: Tue, 30 Sep 2025 11:07:17 -0500 Subject: [PATCH 46/53] Update copyright year --- .github/CODEOWNERS | 2 +- LICENSE | 2 +- README.md | 2 +- packages/eslint-config-angular/LICENSE | 2 +- packages/eslint-config-angular/README.md | 2 +- packages/eslint-config-javascript/LICENSE | 2 +- packages/eslint-config-javascript/README.md | 2 +- packages/eslint-config-playwright/LICENSE | 2 +- packages/eslint-config-playwright/README.md | 2 +- packages/eslint-config-typescript/LICENSE | 2 +- packages/eslint-config-typescript/README.md | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index afd51b9..3991931 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,4 +1,4 @@ -# Copyright (c) 2023 National Instruments +# Copyright (c) 2025 National Instruments # Each line is a file pattern followed by one or more owners. # More info: https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-code-owners diff --git a/LICENSE b/LICENSE index ffe640e..2cce61a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index f1a48a0..a6e60cc 100644 --- a/README.md +++ b/README.md @@ -429,4 +429,4 @@ Deviations from the `angular-eslint`, `@ni/eslint-config-angular`, and the [`par ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-angular/LICENSE b/packages/eslint-config-angular/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-angular/LICENSE +++ b/packages/eslint-config-angular/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-angular/README.md b/packages/eslint-config-angular/README.md index 9342e7c..7b69029 100644 --- a/packages/eslint-config-angular/README.md +++ b/packages/eslint-config-angular/README.md @@ -13,4 +13,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-javascript/LICENSE b/packages/eslint-config-javascript/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-javascript/LICENSE +++ b/packages/eslint-config-javascript/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-javascript/README.md b/packages/eslint-config-javascript/README.md index 643d775..04ed9f6 100644 --- a/packages/eslint-config-javascript/README.md +++ b/packages/eslint-config-javascript/README.md @@ -13,4 +13,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-playwright/LICENSE b/packages/eslint-config-playwright/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-playwright/LICENSE +++ b/packages/eslint-config-playwright/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-playwright/README.md b/packages/eslint-config-playwright/README.md index d5606c4..f404144 100644 --- a/packages/eslint-config-playwright/README.md +++ b/packages/eslint-config-playwright/README.md @@ -11,4 +11,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2022 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) diff --git a/packages/eslint-config-typescript/LICENSE b/packages/eslint-config-typescript/LICENSE index ffe640e..2cce61a 100644 --- a/packages/eslint-config-typescript/LICENSE +++ b/packages/eslint-config-typescript/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2021 National Instruments Corporation +Copyright (c) 2025 National Instruments Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/packages/eslint-config-typescript/README.md b/packages/eslint-config-typescript/README.md index 9517893..161485f 100644 --- a/packages/eslint-config-typescript/README.md +++ b/packages/eslint-config-typescript/README.md @@ -13,4 +13,4 @@ See the [ni/javascript-styleguide](https://github.com/ni/javascript-styleguide#r ## License -[MIT (c) 2021 National Instruments Corporation](./LICENSE) +[MIT (c) 2025 National Instruments Corporation](./LICENSE) From 162905b486c423384debeed7002491f13e9bdfa5 Mon Sep 17 00:00:00 2001 From: rajsite Date: Tue, 30 Sep 2025 11:17:42 -0500 Subject: [PATCH 47/53] Consistent tsconfig files --- tests/angular/custom-ignore-attributes/index.spec.ts | 2 +- tests/angular/tsconfig.json | 9 ++++++--- tests/playwright/tsconfig.json | 4 ++-- tests/typescript/tsconfig.json | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/angular/custom-ignore-attributes/index.spec.ts b/tests/angular/custom-ignore-attributes/index.spec.ts index 0ee29e2..beaed0b 100644 --- a/tests/angular/custom-ignore-attributes/index.spec.ts +++ b/tests/angular/custom-ignore-attributes/index.spec.ts @@ -7,7 +7,7 @@ import { ComponentFixture } from '@angular/core/testing'; }) class MyComponent { @Input() public attr = false; - @ViewChild('div') public div: HTMLDivElement; + @ViewChild('div') public div!: HTMLDivElement; public myMethod(): void {} } diff --git a/tests/angular/tsconfig.json b/tests/angular/tsconfig.json index 4286429..4876b74 100644 --- a/tests/angular/tsconfig.json +++ b/tests/angular/tsconfig.json @@ -1,10 +1,13 @@ { "compilerOptions": { - "experimentalDecorators": true, - "strictNullChecks": true, + "strict": true, + "target": "ES2020", "module":"node16", "moduleResolution": "node16", - "target": "ES2020" + "experimentalDecorators": true, + }, + "angularCompilerOptions": { + "strictTemplates": true }, "include": ["."] } \ No newline at end of file diff --git a/tests/playwright/tsconfig.json b/tests/playwright/tsconfig.json index a3b73a9..0b570f4 100644 --- a/tests/playwright/tsconfig.json +++ b/tests/playwright/tsconfig.json @@ -1,9 +1,9 @@ { "files": ["./index.ts"], "compilerOptions": { - "strictNullChecks": true, + "strict": true, + "target": "ES2020", "module":"node16", "moduleResolution": "node16", - "target": "ES2020" } } \ No newline at end of file diff --git a/tests/typescript/tsconfig.json b/tests/typescript/tsconfig.json index 48a8866..5a78fd9 100644 --- a/tests/typescript/tsconfig.json +++ b/tests/typescript/tsconfig.json @@ -1,7 +1,7 @@ { "files": ["./index.ts"], "compilerOptions": { - "strictNullChecks": true, + "strict": true, "target": "ES2020" } } \ No newline at end of file From 4f90a27e788762d9333290ea8cb5268459f9c382 Mon Sep 17 00:00:00 2001 From: rajsite Date: Tue, 30 Sep 2025 11:58:33 -0500 Subject: [PATCH 48/53] Consistent test eslint config --- tests/angular/eslint.config.js | 3 +-- tests/playwright/eslint.config.js | 15 ++++----------- tests/typescript/eslint.config.js | 2 +- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index 1a4b411..5d713d0 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -1,7 +1,6 @@ -import { angularConfig, angularTemplateConfig, ignoreAttributes } from '@ni/eslint-config-angular'; - import { defineConfig } from 'eslint/config'; import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { angularConfig, angularTemplateConfig, ignoreAttributes } from '@ni/eslint-config-angular'; export default defineConfig([ { diff --git a/tests/playwright/eslint.config.js b/tests/playwright/eslint.config.js index 45ae080..1f762b4 100644 --- a/tests/playwright/eslint.config.js +++ b/tests/playwright/eslint.config.js @@ -1,26 +1,19 @@ -import { fileURLToPath } from 'url'; -import path from 'path'; -import { playwrightConfig } from '@ni/eslint-config-playwright'; -import { javascriptConfig } from '@ni/eslint-config-javascript'; import { defineConfig } from 'eslint/config'; - -const tsConfigRootDir = path.dirname(fileURLToPath(import.meta.url)); +import { javascriptConfig } from '@ni/eslint-config-javascript'; +import { playwrightConfig } from '@ni/eslint-config-playwright'; export default defineConfig([ { files: ['**/*.js'], extends: javascriptConfig, - rules: { - 'import/no-default-export': 'off', - } }, { - files: ['*.ts'], + files: ['**/*.ts'], extends: playwrightConfig, languageOptions: { parserOptions: { project: ['./tsconfig.json'], - tsConfigRootDir, + tsConfigRootDir: import.meta.dirname, }, }, rules: { diff --git a/tests/typescript/eslint.config.js b/tests/typescript/eslint.config.js index 4e5e5b4..3d3c1e6 100644 --- a/tests/typescript/eslint.config.js +++ b/tests/typescript/eslint.config.js @@ -1,6 +1,6 @@ +import { defineConfig } from 'eslint/config'; import { javascriptConfig } from '@ni/eslint-config-javascript'; import { typescriptConfig } from '@ni/eslint-config-typescript'; -import { defineConfig } from 'eslint/config'; export default defineConfig([ javascriptConfig, From 45aa7a40f0bbc27ff0443c632425d4f61abdcaa4 Mon Sep 17 00:00:00 2001 From: rajsite Date: Tue, 30 Sep 2025 12:00:41 -0500 Subject: [PATCH 49/53] Align README and test examples --- README.md | 116 +++++++++++++++++++++++++----------------------------- 1 file changed, 53 insertions(+), 63 deletions(-) diff --git a/README.md b/README.md index a6e60cc..d86e5b0 100644 --- a/README.md +++ b/README.md @@ -47,56 +47,43 @@ Install the package for your corresponding language as a development dependency: Then follow the [Playwright configuration](#playwright-configuration) instructions. -With npm 7 and up the required peer dependencies will be installed automatically and you can move on to [Configuration](#configuration). - -If you are using npm 6 or lower, use the following instructions to manually install the required peer dependencies: - -Use [`npm view`](https://docs.npmjs.com/cli/view.html) to list the correct versions of each peer package to install yourself. For example, with a JavaScript project run: - -```bash -npm view @ni/eslint-config-javascript peerDependencies -``` - -Alternatively, use [`npx install-peerdeps`](https://www.npmjs.com/package/install-peerdeps) as a shortcut to install the peer packages for you. For example, with a JavaScript project run: - -```bash -npx install-peerdeps --dev @ni/eslint-config-javascript -``` - ## Configuration After installing the lint configuration packages, follow the configuration instructions for your project language: ### JavaScript configuration -Export `@ni/eslint-config-javascript` configurations in your [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): +Use `@ni/eslint-config-javascript` configurations in your [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`): ```js +import { defineConfig } from 'eslint/config'; import { javascriptConfig } from '@ni/eslint-config-javascript'; -export default [ +export default defineConfig([ javascriptConfig, -]; +]); ``` ### TypeScript configuration -Export `@ni/eslint-config-typescript` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration. +Use `@ni/eslint-config-typescript` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting). ```js +import { defineConfig } from 'eslint/config'; import { typescriptConfig } from '@ni/eslint-config-typescript'; -export default [ - typescriptConfig, +export default defineConfig([ { files: ['**/*.ts'], + extends: typescriptConfig, languageOptions: { parserOptions: { - project: './tsconfig.json' - } - } - } -]; + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, + }, +]); ``` ### Angular configuration @@ -112,53 +99,52 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ > ng g angular-eslint:add-eslint-to-project > ng config cli.schematicCollections "[\"angular-eslint\"]" ``` -3. Export the NI configured rules for Angular and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. +3. Use the NI configured rules for Angular and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting).. ```js - import angularConfig from '@ni/eslint-config-angular'; - import angularTemplateConfig from '@ni/eslint-config-angular/template'; + import { defineConfig } from 'eslint/config'; + import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; - export default [ + export default defineConfig([ { files: ['**/*.ts'], - extends: [ - angularConfig - ], + extends: angularConfig, languageOptions: { parserOptions: { - project: './tsconfig.json' - } - } + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + }, }, { - files: ['*.html'], - extends: angularTemplateConfig] + files: ['**/*.html'], + extends: angularTemplateConfig, } - ]; + ]); ``` 4. Evaluate the [project specific rule groups](#evaluate-project-specific-rule-groups) to manually add to your lint configuration. For Angular applications in particular, consider enabling the [`[application-prefix]`](#application-prefix) rule group. ### Playwright configuration -Export `@ni/eslint-config-playwright` in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration. - -**Note:** The Playwright configurations extend the TypeScript configurations, so it is not necessary for an application to extend them both. However, the Playwright configurations should only be applied to directories that contain Playwright tests and utilities. +Use `@ni/eslint-config-playwright` configurations in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting). ```js -// This is an example .eslintrc.js in a Playwright-specific directory. -// If Playwright files are mixed with other code, use an "overrides" file pattern to match only Playwright code. -import playwrightConfig from '@ni/eslint-config-playwright'; +import { defineConfig } from 'eslint/config'; +import { playwrightConfig } from '@ni/eslint-config-playwright'; -export default [ - playwrightConfig, +export default defineConfig([ { + // This files pattern should be updated to only match + // Playwright test files and not other TypeScript files files: ['**/*.ts'], + extends: playwrightConfig, languageOptions: { parserOptions: { - project: './tsconfig.json' - } + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, } } -]; +]); ``` ## Usage @@ -273,7 +259,9 @@ To disable a rule globally, modify the `rules` section of the [ESLint configurat To disable a rule for a specific file pattern or directory, update the rules section for that file pattern in the [ESLint configuration](https://eslint.org/docs/user-guide/configuring/configuration-files#configuration-file-formats): ```js -export default [ +import { defineConfig } from 'eslint/config'; + +export default defineConfig([ // ...other configs { // This rule is disabled as an example @@ -282,7 +270,7 @@ export default [ 'import/no-default-export': 'off' } } -]; +]); ``` ### Inline disable rules that don't apply to a particular situation @@ -305,13 +293,14 @@ Instead of using the `extends` property, import the configuration packages you n ```js // eslint.config.js + import { defineConfig } from 'eslint/config'; import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; - export default [ + export default defineConfig([ angularConfig, angularTemplateConfig, // Add any project-specific overrides here - ]; + ]); ``` **Note:** All rules that previously required type checking are now included in the main config export for each package. You no longer need to import a separate requiring-type-checking config—just import the main config to get all rules. @@ -320,14 +309,15 @@ Instead of using the `extends` property, import the configuration packages you n For TypeScript and Angular projects, ensure you set `parserOptions.project` in a config block to point to your TypeScript configuration: ```js - { - files: ['**/*.ts'], - languageOptions: { - parserOptions: { - project: './tsconfig.json' - } - } - } + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsConfigRootDir: import.meta.dirname, + }, + } + } ``` 4. **Remove legacy config fields** From c65ec532ba91f3d811555225b81ed699bf89a618 Mon Sep 17 00:00:00 2001 From: rajsite Date: Tue, 30 Sep 2025 12:13:03 -0500 Subject: [PATCH 50/53] Update to recent versions --- package-lock.json | 124 +++++++++--------- .../eslint-config-typescript/package.json | 2 +- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a9cf79..8b3051d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -687,17 +687,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.44.1.tgz", - "integrity": "sha512-molgphGqOBT7t4YKCSkbasmu1tb1MgrZ2szGzHbclF7PNmOkSTQVHy+2jXOSnxvR3+Xe1yySHFZoqMpz3TfQsw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", + "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", "license": "MIT", "peer": true, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.44.1", - "@typescript-eslint/type-utils": "8.44.1", - "@typescript-eslint/utils": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/type-utils": "8.45.0", + "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -711,7 +711,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.44.1", + "@typescript-eslint/parser": "^8.45.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -727,16 +727,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.44.1.tgz", - "integrity": "sha512-EHrrEsyhOhxYt8MTg4zTF+DJMuNBzWwgvvOYNj/zm1vnaD/IC5zCXFehZv94Piqa2cRFfXrTFxIvO95L7Qc/cw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", + "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.44.1", - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/typescript-estree": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4" }, "engines": { @@ -752,14 +752,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.44.1.tgz", - "integrity": "sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", + "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.44.1", - "@typescript-eslint/types": "^8.44.1", + "@typescript-eslint/tsconfig-utils": "^8.45.0", + "@typescript-eslint/types": "^8.45.0", "debug": "^4.3.4" }, "engines": { @@ -774,14 +774,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.44.1.tgz", - "integrity": "sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", + "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1" + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -792,9 +792,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.44.1.tgz", - "integrity": "sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", + "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", "license": "MIT", "peer": true, "engines": { @@ -809,15 +809,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.44.1.tgz", - "integrity": "sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", + "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/typescript-estree": "8.44.1", - "@typescript-eslint/utils": "8.44.1", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -834,9 +834,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.44.1.tgz", - "integrity": "sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", + "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", "license": "MIT", "peer": true, "engines": { @@ -848,16 +848,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.44.1.tgz", - "integrity": "sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", + "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/project-service": "8.44.1", - "@typescript-eslint/tsconfig-utils": "8.44.1", - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/visitor-keys": "8.44.1", + "@typescript-eslint/project-service": "8.45.0", + "@typescript-eslint/tsconfig-utils": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -903,16 +903,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.44.1.tgz", - "integrity": "sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", + "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", "license": "MIT", "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.44.1", - "@typescript-eslint/types": "8.44.1", - "@typescript-eslint/typescript-estree": "8.44.1" + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -927,13 +927,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.44.1.tgz", - "integrity": "sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", + "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/types": "8.44.1", + "@typescript-eslint/types": "8.45.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -4788,16 +4788,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.44.1", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.44.1.tgz", - "integrity": "sha512-0ws8uWGrUVTjEeN2OM4K1pLKHK/4NiNP/vz6ns+LjT/6sqpaYzIVFajZb1fj/IDwpsrrHb3Jy0Qm5u9CPcKaeg==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.45.0.tgz", + "integrity": "sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==", "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "8.44.1", - "@typescript-eslint/parser": "8.44.1", - "@typescript-eslint/typescript-estree": "8.44.1", - "@typescript-eslint/utils": "8.44.1" + "@typescript-eslint/eslint-plugin": "8.45.0", + "@typescript-eslint/parser": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5107,7 +5107,7 @@ "peerDependencies": { "@ni/eslint-config-javascript": "^4.4.0", "eslint-plugin-import": "^2.32.0", - "typescript-eslint": "^8.44.1" + "typescript-eslint": "^8.45.0" } }, "tests/angular": { diff --git a/packages/eslint-config-typescript/package.json b/packages/eslint-config-typescript/package.json index edb72ed..abad0a3 100644 --- a/packages/eslint-config-typescript/package.json +++ b/packages/eslint-config-typescript/package.json @@ -38,6 +38,6 @@ "peerDependencies": { "@ni/eslint-config-javascript": "^4.4.0", "eslint-plugin-import": "^2.32.0", - "typescript-eslint": "^8.44.1" + "typescript-eslint": "^8.45.0" } } \ No newline at end of file From 33c508dec0755719b0bcb499165a5a2e8eaaa3cc Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Tue, 30 Sep 2025 18:49:07 -0500 Subject: [PATCH 51/53] Rename angularConfig to angularTypescriptConfig --- README.md | 10 +++++----- packages/eslint-config-angular/index.js | 2 +- tests/angular/eslint.config.js | 4 ++-- tests/print-evaluated-rules/index.js | 4 ++-- tests/typescript/index.ts | 4 ++-- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index d86e5b0..6a97d88 100644 --- a/README.md +++ b/README.md @@ -99,15 +99,15 @@ ESLint support for Angular is provided by [`angular-eslint`](https://github.com/ > ng g angular-eslint:add-eslint-to-project > ng config cli.schematicCollections "[\"angular-eslint\"]" ``` -3. Use the NI configured rules for Angular and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting).. +3. Use the NI configured rules for Angular TypeScript code and Angular templates in the [ESLint flat configuration](https://eslint.org/docs/latest/use/configure/configuration-files-new) (`eslint.config.js`). Set the `parserOptions.project` configuration to the project's TypeScript configuration to correctly enable [linting with type information](https://typescript-eslint.io/getting-started/typed-linting).. ```js import { defineConfig } from 'eslint/config'; - import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; + import { angularTypescriptConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; export default defineConfig([ { files: ['**/*.ts'], - extends: angularConfig, + extends: angularTypescriptConfig, languageOptions: { parserOptions: { project: ['./tsconfig.json'], @@ -294,10 +294,10 @@ Instead of using the `extends` property, import the configuration packages you n ```js // eslint.config.js import { defineConfig } from 'eslint/config'; - import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; + import { angularTypescriptConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; export default defineConfig([ - angularConfig, + angularTypescriptConfig, angularTemplateConfig, // Add any project-specific overrides here ]); diff --git a/packages/eslint-config-angular/index.js b/packages/eslint-config-angular/index.js index 017cd84..42bb8b9 100644 --- a/packages/eslint-config-angular/index.js +++ b/packages/eslint-config-angular/index.js @@ -5,7 +5,7 @@ import angular from 'angular-eslint'; export { angularTemplateConfig } from './lib/template.js'; export { ignoreAttributes } from './lib/template-options.js'; -export const angularConfig = defineConfig([ +export const angularTypescriptConfig = defineConfig([ angular.configs.tsRecommended, typescriptConfig, { diff --git a/tests/angular/eslint.config.js b/tests/angular/eslint.config.js index 5d713d0..28627bc 100644 --- a/tests/angular/eslint.config.js +++ b/tests/angular/eslint.config.js @@ -1,6 +1,6 @@ import { defineConfig } from 'eslint/config'; import { javascriptConfig } from '@ni/eslint-config-javascript'; -import { angularConfig, angularTemplateConfig, ignoreAttributes } from '@ni/eslint-config-angular'; +import { angularTypescriptConfig, angularTemplateConfig, ignoreAttributes } from '@ni/eslint-config-angular'; export default defineConfig([ { @@ -9,7 +9,7 @@ export default defineConfig([ }, { files: ['**/*.ts'], - extends: angularConfig, + extends: angularTypescriptConfig, languageOptions: { parserOptions: { project: ['./tsconfig.json'], diff --git a/tests/print-evaluated-rules/index.js b/tests/print-evaluated-rules/index.js index 9e4a7a6..a17bb74 100644 --- a/tests/print-evaluated-rules/index.js +++ b/tests/print-evaluated-rules/index.js @@ -1,5 +1,5 @@ import { ESLint } from 'eslint'; -import { angularConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; +import { angularTypescriptConfig, angularTemplateConfig } from '@ni/eslint-config-angular'; import fs from 'fs'; import path from 'path'; import yargs from 'yargs/yargs'; @@ -99,7 +99,7 @@ const __dirname = path.dirname(__filename); return config; }, {})); - const angularDivergedRules = getDivergedRules(Object.assign({}, ...angularConfig.slice(-2).map(item => item.rules))); + const angularDivergedRules = getDivergedRules(Object.assign({}, ...angularTypescriptConfig.slice(-2).map(item => item.rules))); const angularTemplateDivergedRules = getDivergedRules(Object.assign({}, ...angularTemplateConfig.slice(-2).map(item => item.rules))); const angularHasDivergedRules = !!Object.keys(angularDivergedRules).length || !!Object.keys(angularTemplateDivergedRules).length; diff --git a/tests/typescript/index.ts b/tests/typescript/index.ts index c1e23a7..d1db40f 100644 --- a/tests/typescript/index.ts +++ b/tests/typescript/index.ts @@ -7,8 +7,8 @@ export class NI { this._awesomeLevel = 11; } - public get awesome(): boolean { - return this._awesomeLevel > 0; + public get Awesome(): boolean { + return this._awesomeLevel > 0; } public makeAwesomer(): void { From f8e27890daee847d16402a99da20346c1de11a9a Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Tue, 30 Sep 2025 18:56:09 -0500 Subject: [PATCH 52/53] Improve changefile message --- ...int-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json | 2 +- ...-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json | 2 +- ...-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json | 2 +- ...-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json index 1775e05..ba7ff1c 100644 --- a/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json +++ b/change/@ni-eslint-config-angular-2b894e10-2f6e-4ff2-ade2-fae0335c38d8.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-angular to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. Check 'https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format' for more information.", + "comment": "Update eslint-config-angular to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", "packageName": "@ni/eslint-config-angular", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json index 4bf0970..949c67f 100644 --- a/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json +++ b/change/@ni-eslint-config-javascript-8342b44c-c3b9-4617-ac3e-8f4c3a14962c.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-javascript to be compatible with eslint v9", + "comment": "Update eslint-config-javascript to be compatible with eslint v9. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", "packageName": "@ni/eslint-config-javascript", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json index 83b0a69..ea711a0 100644 --- a/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json +++ b/change/@ni-eslint-config-playwright-854caf08-4e79-4f67-b93a-441aa8e94aa6.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-playwright to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. Check 'https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format' for more information.", + "comment": "Update eslint-config-playwright to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", "packageName": "@ni/eslint-config-playwright", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" diff --git a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json index 688d9a7..05d2b42 100644 --- a/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json +++ b/change/@ni-eslint-config-typescript-59a461d7-a675-4c63-b3e9-5504d06ec44f.json @@ -1,6 +1,6 @@ { "type": "major", - "comment": "Update eslint-config-typescript to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. Check 'https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format' for more information.", + "comment": "Update eslint-config-typescript to be compatible with eslint v9. Change default rule configuration to assume `strictNullChecks` is enabled. See [Migration Guide](https://github.com/ni/javascript-styleguide/blob/main/README.md#migrating-to-eslint-flat-configuration-format) for more information.", "packageName": "@ni/eslint-config-typescript", "email": "131153319+gokulprasanth-ni@users.noreply.github.com", "dependentChangeType": "patch" From de23ebbf6eeb3b7519174c2647d32ee03bf08806 Mon Sep 17 00:00:00 2001 From: Jesse Attas Date: Tue, 30 Sep 2025 18:56:53 -0500 Subject: [PATCH 53/53] Revert accidental test change --- tests/typescript/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/typescript/index.ts b/tests/typescript/index.ts index d1db40f..c1e23a7 100644 --- a/tests/typescript/index.ts +++ b/tests/typescript/index.ts @@ -7,8 +7,8 @@ export class NI { this._awesomeLevel = 11; } - public get Awesome(): boolean { - return this._awesomeLevel > 0; + public get awesome(): boolean { + return this._awesomeLevel > 0; } public makeAwesomer(): void {