diff --git a/change/@ni-jasmine-parameterized-65c24422-e02e-4fad-b5c8-02fd9392e918.json b/change/@ni-jasmine-parameterized-65c24422-e02e-4fad-b5c8-02fd9392e918.json new file mode 100644 index 0000000000..b2469a1adb --- /dev/null +++ b/change/@ni-jasmine-parameterized-65c24422-e02e-4fad-b5c8-02fd9392e918.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/jasmine-parameterized", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-nimble-angular-18d1b127-e543-4e25-8529-bc5fa3c931ac.json b/change/@ni-nimble-angular-18d1b127-e543-4e25-8529-bc5fa3c931ac.json new file mode 100644 index 0000000000..4d6b0b6fdc --- /dev/null +++ b/change/@ni-nimble-angular-18d1b127-e543-4e25-8529-bc5fa3c931ac.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/nimble-angular", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-nimble-components-6a132db3-8604-461f-8c5b-11090d2d2eef.json b/change/@ni-nimble-components-6a132db3-8604-461f-8c5b-11090d2d2eef.json new file mode 100644 index 0000000000..6eb3c8ff41 --- /dev/null +++ b/change/@ni-nimble-components-6a132db3-8604-461f-8c5b-11090d2d2eef.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/nimble-components", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-nimble-react-b2693da0-1f45-41bc-96a4-79d0bebbecdc.json b/change/@ni-nimble-react-b2693da0-1f45-41bc-96a4-79d0bebbecdc.json new file mode 100644 index 0000000000..50a9799390 --- /dev/null +++ b/change/@ni-nimble-react-b2693da0-1f45-41bc-96a4-79d0bebbecdc.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/nimble-react", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-nimble-tokens-7ac41db2-b6a8-4938-b810-4ec452cbbf61.json b/change/@ni-nimble-tokens-7ac41db2-b6a8-4938-b810-4ec452cbbf61.json new file mode 100644 index 0000000000..ee0f64cb56 --- /dev/null +++ b/change/@ni-nimble-tokens-7ac41db2-b6a8-4938-b810-4ec452cbbf61.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/nimble-tokens", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-ok-angular-2f4b15c3-08ca-4a4f-a752-603d5f2fe6b2.json b/change/@ni-ok-angular-2f4b15c3-08ca-4a4f-a752-603d5f2fe6b2.json new file mode 100644 index 0000000000..d9a6b9428c --- /dev/null +++ b/change/@ni-ok-angular-2f4b15c3-08ca-4a4f-a752-603d5f2fe6b2.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/ok-angular", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-ok-components-07217f13-2df7-4d36-a3b8-ca3442e06671.json b/change/@ni-ok-components-07217f13-2df7-4d36-a3b8-ca3442e06671.json new file mode 100644 index 0000000000..9e0347b36d --- /dev/null +++ b/change/@ni-ok-components-07217f13-2df7-4d36-a3b8-ca3442e06671.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/ok-components", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-ok-react-5a17a0f5-60d0-4281-a4db-f359fc6ad458.json b/change/@ni-ok-react-5a17a0f5-60d0-4281-a4db-f359fc6ad458.json new file mode 100644 index 0000000000..14c5d854f3 --- /dev/null +++ b/change/@ni-ok-react-5a17a0f5-60d0-4281-a4db-f359fc6ad458.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/ok-react", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-spright-angular-b576ee05-bfcb-4e70-aebf-90f164024a93.json b/change/@ni-spright-angular-b576ee05-bfcb-4e70-aebf-90f164024a93.json new file mode 100644 index 0000000000..b24050715f --- /dev/null +++ b/change/@ni-spright-angular-b576ee05-bfcb-4e70-aebf-90f164024a93.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/spright-angular", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-spright-components-b204ef72-a6e0-4e88-b775-0875d142fa2f.json b/change/@ni-spright-components-b204ef72-a6e0-4e88-b775-0875d142fa2f.json new file mode 100644 index 0000000000..507425460f --- /dev/null +++ b/change/@ni-spright-components-b204ef72-a6e0-4e88-b775-0875d142fa2f.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/spright-components", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-spright-react-a6f41eb1-ba04-4cc4-b540-5881d77a2d33.json b/change/@ni-spright-react-a6f41eb1-ba04-4cc4-b540-5881d77a2d33.json new file mode 100644 index 0000000000..81b54ee1cb --- /dev/null +++ b/change/@ni-spright-react-a6f41eb1-ba04-4cc4-b540-5881d77a2d33.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/spright-react", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/change/@ni-xliff-to-json-converter-ea81ceee-5bd8-4f67-8901-24889622cadf.json b/change/@ni-xliff-to-json-converter-ea81ceee-5bd8-4f67-8901-24889622cadf.json new file mode 100644 index 0000000000..7696ab73f1 --- /dev/null +++ b/change/@ni-xliff-to-json-converter-ea81ceee-5bd8-4f67-8901-24889622cadf.json @@ -0,0 +1,7 @@ +{ + "type": "patch", + "comment": "Upgrade to ESLint v9 and update the configuration to use the flat configuration format", + "packageName": "@ni/xliff-to-json-converter", + "email": "131153319+gokulprasanth-ni@users.noreply.github.com", + "dependentChangeType": "patch" +} diff --git a/package-lock.json b/package-lock.json index f4a67dd320..c74280e0fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2827,24 +2827,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", @@ -4413,6 +4395,40 @@ "node": ">=14.17.0" } }, + "node_modules/@emnapi/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.5.0.tgz", + "integrity": "sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.5.0.tgz", + "integrity": "sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@epic-web/invariant": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", @@ -4420,9 +4436,9 @@ "license": "MIT" }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.65.2", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.65.2.tgz", - "integrity": "sha512-/rrj5oayCc7xdoQZ24Tz/+V41IDm+9ILYpTFJOZgav9vfncMNApKR0t/4d1oRXYTcyLZEcGHGOg4xBsD0Doing==", + "version": "0.67.2", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.67.2.tgz", + "integrity": "sha512-roH+w/W97L5+gXv9c9n2RrAS/KwIn/10fi7SG+gB9ZOs3pDhhpnnq8lObKCEUTWABL4JTpDXeThU3Q64VqT9UQ==", "license": "MIT", "peer": true, "dependencies": { @@ -4430,7 +4446,7 @@ "@typescript-eslint/types": "^8.45.0", "comment-parser": "1.4.1", "esquery": "^1.6.0", - "jsdoc-type-pratt-parser": "~6.1.2" + "jsdoc-type-pratt-parser": "6.3.2" }, "engines": { "node": ">=20.11.0" @@ -4893,16 +4909,58 @@ "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.4.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.0.tgz", + "integrity": "sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/core": "^0.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", + "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "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", @@ -4910,7 +4968,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" @@ -4921,6 +4979,7 @@ "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", "fast-json-stable-stringify": "^2.0.0", @@ -4932,59 +4991,59 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/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", + "node_modules/@eslint/eslintrc/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/js": { + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.37.0.tgz", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", + "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://opencollective.com/eslint" + "url": "https://eslint.org/donate" } }, - "node_modules/@eslint/eslintrc/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==", - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "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": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/eslintrc/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" - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "license": "MIT", + "node_modules/@eslint/plugin-kit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", + "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@eslint/core": "^0.16.0", + "levn": "^0.4.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@formatjs/ecma402-abstract": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.4.tgz", - "integrity": "sha512-qrycXDeaORzIqNhBOx0btnhpD1c+/qFIHAN9znofuMJX6QBwtbrmlpWfD4oiUUD2vJUOIYFA/gYtg2KAMGG7sA==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.5.tgz", + "integrity": "sha512-1HTESOq1IUa23g1lFZEGIXsfZKZOwWmB9RROwGn+xariiQnd++wwTMvlRAbZ8wtXRHFUamJPxsKcxpSzeCvFWQ==", "dev": true, "license": "MIT", "dependencies": { "@formatjs/fast-memoize": "2.2.7", - "@formatjs/intl-localematcher": "0.6.1", + "@formatjs/intl-localematcher": "0.6.2", "decimal.js": "^10.4.3", "tslib": "^2.8.0" } @@ -5000,43 +5059,68 @@ } }, "node_modules/@formatjs/icu-messageformat-parser": { - "version": "2.11.2", - "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.2.tgz", - "integrity": "sha512-AfiMi5NOSo2TQImsYAg8UYddsNJ/vUEv/HaNqiFjnI3ZFfWihUtD5QtuX6kHl8+H+d3qvnE/3HZrfzgdWpsLNA==", + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.11.3.tgz", + "integrity": "sha512-H/KfWSosaiDiOaW4nHe1Fn4Cgzm+oFQ8giTmB5RJzTBNSMmd+j2NVrvvZHAmlxJHcuOelzKBLjQ2EDcyH4NSWw==", "dev": true, "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.4", - "@formatjs/icu-skeleton-parser": "1.8.14", + "@formatjs/ecma402-abstract": "2.3.5", + "@formatjs/icu-skeleton-parser": "1.8.15", "tslib": "^2.8.0" } }, "node_modules/@formatjs/icu-skeleton-parser": { - "version": "1.8.14", - "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.14.tgz", - "integrity": "sha512-i4q4V4qslThK4Ig8SxyD76cp3+QJ3sAqr7f6q9VVfeGtxG9OhiAk3y9XF6Q41OymsKzsGQ6OQQoJNY4/lI8TcQ==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.15.tgz", + "integrity": "sha512-qNrKxWJmnWxin5U4A4Evy7C0rgRiNw3IqXu9OGuT31B8lDxBGl+OgT8kcq0ZVKK0gqA4l4SQB9x+SFAvLT5hcQ==", "dev": true, "license": "MIT", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/ecma402-abstract": "2.3.5", "tslib": "^2.8.0" } }, "node_modules/@formatjs/intl-localematcher": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.1.tgz", - "integrity": "sha512-ePEgLgVCqi2BBFnTMWPfIghu6FkbZnnBVhO2sSxvLfrdFw7wCHAHiDoM2h4NRgjbaY7+B7HgOLZGkK187pZTZg==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.6.2.tgz", + "integrity": "sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==", "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.8.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": ">=18.18.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", + "dev": true, "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", @@ -5065,8 +5149,23 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", + "dev": true, "license": "BSD-3-Clause" }, + "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/@inquirer/checkbox": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz", @@ -6154,6 +6253,19 @@ "win32" ] }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, "node_modules/@neoconfetti/react": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@neoconfetti/react/-/react-1.0.0.tgz", @@ -6211,42 +6323,40 @@ "link": true }, "node_modules/@ni/eslint-config-angular": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@ni/eslint-config-angular/-/eslint-config-angular-9.0.7.tgz", - "integrity": "sha512-cg1Rnyu1jpmZ0PgmU2HNh1fu6+R8Wfmdm+xsjuzZ8hL4zk52DUNkt+PoQputLghoF/OtVK6XxfjtTxofpQi3Zg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@ni/eslint-config-angular/-/eslint-config-angular-10.0.0.tgz", + "integrity": "sha512-3ltrnSyp26Wa8aJ2Hepm4Fygmdj0K6Co2lZ2HnT91gyZ/MXm7fx8KuphRXQBgwDdnM6wTrIhGdj1JicsC8wHYQ==", "dev": true, "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-javascript": "^5.0.0", + "@ni/eslint-config-typescript": "^5.0.0", + "angular-eslint": "^18.4.3" } }, "node_modules/@ni/eslint-config-javascript": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@ni/eslint-config-javascript/-/eslint-config-javascript-4.4.0.tgz", - "integrity": "sha512-XJ3aZ6lQHSNFQNfCa6qnVAAVd+TjowTIuYs0GIx2yC6hqEYqYY681YTcQv2OOk1cLOCAdbnZgFOCYJ0UjDAZ/Q==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@ni/eslint-config-javascript/-/eslint-config-javascript-5.0.0.tgz", + "integrity": "sha512-lnJK6UUcj5Ss/1gL3G40IRf/97tkCXDVeQGYC0d+bZrPvHANxbuIhfETiqHfyH3KBRFee3+q5jnqcpog5I1haQ==", "license": "MIT", "peer": true, "peerDependencies": { - "@stylistic/eslint-plugin": "^3.0.0", - "eslint": "^8.57.0", - "eslint-plugin-import": "^2.29.1" + "@stylistic/eslint-plugin": "^5.4.0", + "eslint": "^9.36.0", + "eslint-plugin-import": "^2.32.0", + "globals": "^14.0.0" } }, "node_modules/@ni/eslint-config-typescript": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@ni/eslint-config-typescript/-/eslint-config-typescript-4.4.4.tgz", - "integrity": "sha512-E5nYWubEDnphtC4s/X2Ozz3ubmGV+oLEd52AT/mBLbJnc1oUSDZURvHPZ5S/e/LaSohhkAFPQDMSWnN5YJlyFA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@ni/eslint-config-typescript/-/eslint-config-typescript-5.0.0.tgz", + "integrity": "sha512-pQNFoJOHxiP8rrckT+aFHn4C3miCpVHIs1/wp8Zer3566ZZ1egFQoCFYDne0ezkqtL/e6kqVsIyZ+Zf/BqEKFw==", "license": "MIT", "peer": true, "peerDependencies": { - "@ni/eslint-config-javascript": "^4.4.0", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0" + "@ni/eslint-config-javascript": "^5.0.0", + "eslint-plugin-import": "^2.32.0", + "typescript-eslint": "^8.45.0" } }, "node_modules/@ni/fast-colors": { @@ -6784,6 +6894,40 @@ } } }, + "node_modules/@prettier/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@prettier/eslint/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@prettier/eslint/node_modules/@typescript-eslint/parser": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", @@ -6874,6 +7018,22 @@ } } }, + "node_modules/@prettier/eslint/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@prettier/eslint/node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", @@ -6892,6 +7052,23 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@prettier/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@prettier/eslint/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -6902,40 +7079,271 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@prettier/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==", + "node_modules/@prettier/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "dependencies": { + "esutils": "^2.0.2" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@prettier/eslint/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/@prettier/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==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@puppeteer/browsers": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz", - "integrity": "sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==", - "dev": true, + "node_modules/@prettier/eslint/node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "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", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@prettier/eslint/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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@prettier/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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@prettier/eslint/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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@prettier/eslint/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@prettier/eslint/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@prettier/eslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "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/@prettier/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@prettier/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@prettier/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@prettier/eslint/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@prettier/eslint/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/@prettier/eslint/node_modules/type-fest": { + "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==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@puppeteer/browsers": { + "version": "2.10.10", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.10.tgz", + "integrity": "sha512-3ZG500+ZeLql8rE0hjfhkycJjDj0pI/btEh3L9IkWUYcOrgP0xCNRq3HbtbqOPbvDhFaAWD88pDFtlLv8ns8gA==", + "dev": true, "license": "Apache-2.0", "dependencies": { "debug": "^4.4.3", @@ -8024,23 +8432,24 @@ } }, "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.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": { - "@typescript-eslint/utils": "^8.13.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.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", - "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/picomatch": { @@ -8721,6 +9130,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/aria-query": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", @@ -9020,7 +9440,6 @@ "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, "license": "MIT" }, "node_modules/@types/json5": { @@ -9196,13 +9615,12 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.0.tgz", + "integrity": "sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -9217,15 +9635,26 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.9.tgz", + "integrity": "sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==", "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sockjs": { @@ -9298,117 +9727,68 @@ } }, "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==", + "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": "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", + "@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", - "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": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/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" + "@typescript-eslint/parser": "^8.45.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/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==", + "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, - "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" - }, "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "node": ">= 4" } }, "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", + "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": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@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": { - "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 - } - } - }, - "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" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { @@ -9434,31 +9814,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.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": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.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", @@ -9483,68 +9849,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.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/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@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": "^1.3.0" - }, - "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/type-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" - } - }, - "node_modules/@typescript-eslint/type-utils/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==", - "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" + "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" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { @@ -9562,46 +9888,32 @@ } }, "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.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/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@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", - "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": { @@ -9654,54 +9966,7 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "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.45.0", - "@typescript-eslint/visitor-keys": "8.45.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "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.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", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.1.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "node_modules/@typescript-eslint/visitor-keys": { "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==", @@ -9719,103 +9984,289 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/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/@typescript-eslint/utils/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/@typescript-eslint/utils/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/@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==", - "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" - }, - "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" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/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/@ungap/structured-clone": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, "license": "ISC" }, - "node_modules/@vitejs/plugin-react-swc": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", - "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==", - "dev": true, - "license": "MIT", - "dependencies": { + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true + }, + "node_modules/@vitejs/plugin-react-swc": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", + "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==", + "dev": true, + "license": "MIT", + "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.27", "@swc/core": "^1.12.11" }, @@ -10104,9 +10555,9 @@ "license": "BSD-2-Clause" }, "node_modules/@zip.js/zip.js": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.5.tgz", - "integrity": "sha512-Nh182lGMG20R3K3dmSPT1Ihv1fTq249bMn3Movp1vkbR5r4pjAJkcSkNxoGz5DNC2arr5s7SYLuw5QcJa3XtRw==", + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.8.6.tgz", + "integrity": "sha512-E7Dai2C0wsTgzgDuDAb2Cf/Z57wHJd5zp+x2+f5/silcmpDuRY4fW7SH0cCmMKqlKgHuf01BtzLqXegesE5qCg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -10314,6 +10765,30 @@ "ajv": "^8.8.2" } }, + "node_modules/angular-eslint": { + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-18.4.3.tgz", + "integrity": "sha512-0ZjLzzADGRLUhZC8ZpwSo6CE/m6QhQB/oljMJ0mEfP+lB1sy1v8PBKNsJboIcfEEgGW669Z/efVQ3df88yJLYg==", + "dev": true, + "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/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" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*", + "typescript-eslint": "^8.0.0" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -10525,6 +11000,7 @@ "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" @@ -11853,6 +12329,16 @@ "devtools-protocol": "*" } }, + "node_modules/chromium-bidi/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -13463,6 +13949,7 @@ "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" @@ -13492,15 +13979,16 @@ } }, "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/dom-accessibility-api": { @@ -14239,59 +14727,64 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.37.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.37.0.tgz", + "integrity": "sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig==", "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.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.4.0", + "@eslint/core": "^0.16.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.37.0", + "@eslint/plugin-kit": "^0.4.0", + "@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-context": { @@ -14448,19 +14941,6 @@ "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==", - "license": "Apache-2.0", - "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", @@ -14472,13 +14952,13 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "60.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.7.1.tgz", - "integrity": "sha512-JCLls7B3Tlb2YS5M6+aZqxb0gnEkr+H9/qMm5HSzynlvq3wqbxS7+4RS954EGuLrITfbaB6nmf3FyZAhOeCUEg==", + "version": "60.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-60.8.0.tgz", + "integrity": "sha512-rhN7JTbIaRHcmCdQrzDI/5750e6pIi1TKRG7VD2bzaa8K5yJqwcf8lAAKcdWiblQ+El9IEPCw5j34xOg59+I1g==", "license": "BSD-3-Clause", "peer": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.65.2", + "@es-joy/jsdoccomment": "~0.67.2", "are-docs-informative": "^0.0.2", "comment-parser": "1.4.1", "debug": "^4.4.3", @@ -14512,18 +14992,16 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-6.1.0.tgz", - "integrity": "sha512-72mucw/WLzEqGvL2vwE6fWR6geO6UbmDjz3eAb3pezxTpFzgbfyUeFKzmZKr9LhwUWMXfTVh1g0rKEJoyKNdoA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-6.1.1.tgz", + "integrity": "sha512-St9EKZzOAQF704nt2oJvAKZHjhrpg25ClQoaAlHmPZuajFldVLqRDW4VBNAS01NzeiQF0m0qhG1ZA807K6aVaQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "hermes-parser": "^0.25.1", - "zod": "^3.22.4", - "zod-validation-error": "^3.0.3" + "zod": "^3.22.4 || ^4.0.0", + "zod-validation-error": "^3.0.3 || ^4.0.0" }, "engines": { "node": ">=18" @@ -14563,7 +15041,6 @@ "version": "8.4.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", - "dev": true, "license": "BSD-2-Clause", "peer": true, "dependencies": { @@ -14595,6 +15072,7 @@ "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", "fast-json-stable-stringify": "^2.0.0", @@ -14611,6 +15089,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -14618,56 +15097,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/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==", - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/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==", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/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==", - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "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" }, @@ -14679,7 +15114,8 @@ "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" + "license": "MIT", + "peer": true }, "node_modules/esm-import-transformer": { "version": "3.0.5", @@ -15180,15 +15616,16 @@ } }, "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/filesize": { @@ -15321,54 +15758,17 @@ } }, "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" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "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" + "keyv": "^4.5.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatbuffers": { @@ -15533,6 +15933,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, "license": "ISC" }, "node_modules/fsevents": { @@ -15854,27 +16255,12 @@ } }, "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", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "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)", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -15901,6 +16287,7 @@ "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", @@ -15921,6 +16308,7 @@ "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" @@ -16139,23 +16527,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hermes-estree": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", - "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", - "dev": true, - "license": "MIT" - }, - "node_modules/hermes-parser": { - "version": "0.25.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", - "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hermes-estree": "0.25.1" - } - }, "node_modules/highlight.js": { "version": "10.7.3", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", @@ -16537,6 +16908,21 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/image-ssim": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/image-ssim/-/image-ssim-0.2.0.tgz", @@ -16597,6 +16983,7 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -16607,6 +16994,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, "node_modules/ini": { @@ -16871,15 +17259,15 @@ } }, "node_modules/intl-messageformat": { - "version": "10.7.16", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.16.tgz", - "integrity": "sha512-UmdmHUmp5CIKKjSoE10la5yfU+AYJAaiYLsodbjL4lji83JNvgOQUjGaGhGrpFCb0Uh7sl7qfP1IyILa8Z40ug==", + "version": "10.7.17", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.17.tgz", + "integrity": "sha512-0Ugaf65B2J76rb31drgNF1l6bGEDkbIiYc2Glx6jaZINHnwa5kDRGy8KXYuA+/8P4G0c9prAFhfVhQJJfzUuvQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@formatjs/ecma402-abstract": "2.3.4", + "@formatjs/ecma402-abstract": "2.3.5", "@formatjs/fast-memoize": "2.2.7", - "@formatjs/icu-messageformat-parser": "2.11.2", + "@formatjs/icu-messageformat-parser": "2.11.3", "tslib": "^2.8.0" } }, @@ -17396,6 +17784,7 @@ "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==", + "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -17947,7 +18336,7 @@ "version": "1.21.7", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", - "dev": true, + "devOptional": true, "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -18155,9 +18544,9 @@ } }, "node_modules/jsdoc-type-pratt-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-6.1.2.tgz", - "integrity": "sha512-ruy+JcplsWkqnYq1m/qokaErhEURwf/vhdTzlPNpei7RJabVWxPxGWoCPSCP0sbsz03d590hTkjLdXjyMxH0iA==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-6.3.2.tgz", + "integrity": "sha512-u5bv2XxJjwoSL4jyQ+QIrFmo7tFollOnE+BDQbxWJv/m7/kSiZ/P2+E2Y2TmYmST8EeavzFzrGoG4VstTLP5bA==", "license": "MIT", "peer": true, "engines": { @@ -18840,6 +19229,48 @@ } } }, + "node_modules/less/node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -21303,9 +21734,9 @@ } }, "node_modules/napi-postinstall": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.3.tgz", - "integrity": "sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", "license": "MIT", "peer": true, "bin": { @@ -21324,22 +21755,56 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "license": "MIT" }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, "engines": { - "node": ">= 0.6" + "node": ">= 4.4.x" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" }, "node_modules/netmask": { "version": "2.0.2", @@ -21796,9 +22261,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", "license": "MIT" }, "node_modules/node-retrieve-globals": { @@ -22226,6 +22691,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -22847,6 +23313,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -22903,6 +23370,7 @@ "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" @@ -23569,6 +24037,57 @@ } } }, + "node_modules/prettier-eslint-cli/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint-cli/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/prettier-eslint-cli/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/prettier-eslint-cli/node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -23589,6 +24108,165 @@ "balanced-match": "^1.0.0" } }, + "node_modules/prettier-eslint-cli/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-eslint-cli/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint-cli/node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "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", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint-cli/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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint-cli/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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint-cli/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==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint-cli/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/prettier-eslint-cli/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/prettier-eslint-cli/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", @@ -23610,207 +24288,593 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/prettier-eslint-cli/node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "node_modules/prettier-eslint-cli/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==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "ISC", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-eslint-cli/node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/prettier-eslint-cli/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint-cli/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/prettier-eslint-cli/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/prettier-eslint-cli/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/prettier-eslint-cli/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/prettier-eslint-cli/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/prettier-eslint-cli/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==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "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/prettier-eslint-cli/node_modules/type-fest": { + "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==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/prettier-eslint/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "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", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://opencollective.com/eslint" } }, - "node_modules/prettier-eslint-cli/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/prettier-eslint-cli/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/prettier-eslint/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==", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "brace-expansion": "^2.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/prettier-eslint-cli/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "node_modules/prettier-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==", "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=16 || 14 >=14.18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "node_modules/prettier-eslint/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==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://opencollective.com/eslint" } }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/prettier-eslint/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==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "node_modules/prettier-eslint/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==", "dev": true, "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/prettier-eslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "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": "^16.0.0 || >=18.0.0" + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/prettier-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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=10.13.0" } }, - "node_modules/prettier-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/prettier-eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "type-fest": "^0.20.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/prettier-eslint/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==", + "node_modules/prettier-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==", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/prettier-eslint/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/prettier-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==", + "node_modules/prettier-eslint/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==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=16" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/prettier-eslint/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/prettier-eslint/node_modules/type-fest": { + "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==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pretty-format": { @@ -27086,6 +28150,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, "license": "MIT" }, "node_modules/thingies": { @@ -27311,15 +28376,16 @@ } }, "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/ts-dedent": { @@ -27533,6 +28599,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "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.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" + }, + "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/typical": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", @@ -29372,6 +30462,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -29572,9 +30663,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz", + "integrity": "sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==", "dev": true, "license": "MIT", "funding": { @@ -29582,9 +30673,9 @@ } }, "node_modules/zod-validation-error": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.5.3.tgz", - "integrity": "sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", "dev": true, "license": "MIT", "engines": { @@ -29638,7 +30729,7 @@ "@lhci/cli": "^0.15.0", "@ni-private/eslint-config-nimble": "*", "@ni-private/jasmine-extensions": "*", - "@ni/eslint-config-angular": "^9.0.4", + "@ni/eslint-config-angular": "^10.0.0", "@ni/fast-web-utilities": "^10.0.0", "@ni/jasmine-parameterized": "*", "@ni/nimble-tokens": "*", @@ -29712,6 +30803,7 @@ "@rollup/plugin-node-resolve": "^16.0.0", "cross-env": "^10.1.0", "glob": "^11.0.0", + "globals": "^14.0.0", "playwright": "1.54.1", "rollup": "^4.12.0" } @@ -29752,10 +30844,11 @@ "version": "1.0.0", "license": "MIT", "peerDependencies": { - "@ni/eslint-config-javascript": "^4.3.0", - "@ni/eslint-config-typescript": "^4.4.2", - "eslint": "^8.7.0", - "eslint-plugin-jsdoc": "^60.7.1" + "@ni/eslint-config-javascript": "^5.0.0", + "@ni/eslint-config-typescript": "^5.0.0", + "eslint": "^9.36.0", + "eslint-plugin-jsdoc": "^60.7.1", + "globals": "^14.0.0" } }, "packages/jasmine-extensions": { @@ -30106,7 +31199,8 @@ "apache-arrow": "21.0.0", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-storybook": "^9.1.10", - "flatbuffers": "25.2.10" + "flatbuffers": "25.2.10", + "globals": "^14.0.0" } }, "packages/xliff-to-json-converter": { diff --git a/packages/angular-workspace/.eslintrc.js b/packages/angular-workspace/.eslintrc.js deleted file mode 100644 index 3a6898bf86..0000000000 --- a/packages/angular-workspace/.eslintrc.js +++ /dev/null @@ -1,131 +0,0 @@ -const { ignoreAttributes } = require('@ni/eslint-config-angular/template/options'); - -module.exports = { - root: true, - ignorePatterns: [ - '!**/*', - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Use package.json from angular-workspace root - 'import/no-extraneous-dependencies': ['error', { packageDir: __dirname }], - } - }, - { - files: ['*.ts'], - extends: [ - '@ni/eslint-config-angular', - '@ni/eslint-config-angular/requiring-type-checking', - '@ni-private/eslint-config-nimble/typescript' - ], - rules: { - // Use package.json from angular-workspace root - 'import/no-extraneous-dependencies': ['error', { packageDir: __dirname }], - 'no-restricted-imports': ['error', { - patterns: [{ - group: ['@ni/fast-*'], - message: 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.' - }, - { - group: [ - '@ni/*-components/**/tests', - '@ni/*-components/**/testing', - ], - message: 'Do not use test code/utilities in production code.' - }] - }], - - // Rules enabled due to strictNullChecks - // see: https://github.com/ni/javascript-styleguide/#strict-null-checks - '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', - '@typescript-eslint/no-unnecessary-condition': 'error', - '@typescript-eslint/strict-boolean-expressions': ['error', { - allowNumber: false, - allowNullableBoolean: true, - allowNullableString: true, - allowNullableNumber: false - }], - - // Nimble Angular Components follow web component naming conventions - // where the attribute and property names are different formats - '@angular-eslint/no-input-rename': 'off' - } - }, - { - // Don't require class docs on modules (they're trivial) - files: ['*.module.ts'], - rules: { - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/require-description': 'off' - } - }, - { - files: ['*.spec.ts'], - rules: { - 'no-restricted-imports': [ - 'error', { - patterns: [{ - group: ['@ni/fast-*'], - message: 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.' - }, { - group: ['@ni/nimble-components', '@ni/spright-components'], - message: 'Angular tests should not directly depend on web component packages.' - }] - } - ], - - // Jasmine createSpyObj rely on accessing unbound methods - '@typescript-eslint/unbound-method': 'off' - } - }, - { - files: ['**/testing/**'], - rules: { - 'no-restricted-imports': [ - 'error', { - patterns: [{ - group: ['@ni/fast-*'], - message: 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.' - }] - } - ] - } - }, - { - files: ['*.html'], - extends: [ - '@ni/eslint-config-angular/template' - ], - rules: { - // Enable i18n template checking for the purpose of making sure to capture updates for the lint rules - '@angular-eslint/template/i18n': [ - 'error', - { - checkText: false, - checkId: false, - ignoreAttributes: [ - // Attributes that SHOULD NOT ever be localized need to be added to ignoreAttributeSets - // See: https://github.com/ni/javascript-styleguide/blob/main/packages/eslint-config-angular/template/options.js - ...ignoreAttributes.all, - - // Attributes that SHOULD be localized in production, but we don't want to - // for tests / examples apps should be added to the following list: - 'action-menu-label', - 'aria-label', - 'button-label', - 'label', - 'placeholder', - 'text', - 'title' - ] - } - ], - } - } - ] -}; diff --git a/packages/angular-workspace/angular.json b/packages/angular-workspace/angular.json index 7a9c3ac40f..e762388f1e 100644 --- a/packages/angular-workspace/angular.json +++ b/packages/angular-workspace/angular.json @@ -38,6 +38,7 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { + "eslintConfig": "nimble-angular/eslint.config.js", "lintFilePatterns": [ "nimble-angular/**/*.ts", "nimble-angular/**/*.js", @@ -79,6 +80,7 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { + "eslintConfig": "ok-angular/eslint.config.js", "lintFilePatterns": [ "ok-angular/**/*.ts", "ok-angular/**/*.js", @@ -120,6 +122,7 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { + "eslintConfig": "spright-angular/eslint.config.js", "lintFilePatterns": [ "spright-angular/**/*.ts", "spright-angular/**/*.js", @@ -246,6 +249,7 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { + "eslintConfig": "example-client-app/eslint.config.js", "lintFilePatterns": [ "example-client-app/**/*.ts", "example-client-app/**/*.js", diff --git a/packages/angular-workspace/eslint.config.js b/packages/angular-workspace/eslint.config.js new file mode 100644 index 0000000000..482e6e288b --- /dev/null +++ b/packages/angular-workspace/eslint.config.js @@ -0,0 +1,148 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); +const { angularTypescriptConfig, angularTemplateConfig, ignoreAttributes } = require('@ni/eslint-config-angular'); +// eslint-disable-next-line import/no-extraneous-dependencies +const { importNodeEsmConfig } = require('@ni/eslint-config-javascript'); + +module.exports = defineConfig([ + { + ignores: ['!**/*', 'node_modules', '**/dist/**'], + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig, + rules: { + // Use package.json from angular-workspace root + 'import/no-extraneous-dependencies': ['error', { packageDir: __dirname }], + }, + }, + { + files: ['**/*.ts'], + extends: [...angularTypescriptConfig, ...typescriptNimbleConfig], + rules: { + // Use package.json from angular-workspace root + 'import/no-extraneous-dependencies': ['error', { packageDir: __dirname }], + 'no-restricted-imports': [ + 'error', + { + patterns: [ + { + group: ['@ni/fast-*'], + message: + 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.', + }, + { + group: [ + '@ni/*-components/**/tests', + '@ni/*-components/**/testing', + ], + message: 'Do not use test code/utilities in production code.', + }, + ], + }, + ], + + // Rules enabled due to strictNullChecks + // see: https://github.com/ni/javascript-styleguide/#strict-null-checks + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'error', + '@typescript-eslint/no-unnecessary-condition': 'error', + '@typescript-eslint/strict-boolean-expressions': [ + 'error', + { + allowNumber: false, + allowNullableBoolean: true, + allowNullableString: true, + allowNullableNumber: false, + }, + ], + + // Nimble Angular Components follow web component naming conventions + // where the attribute and property names are different formats + '@angular-eslint/no-input-rename': 'off', + }, + }, + { + // Don't require class docs on modules (they're trivial) + files: ['**/*.module.ts'], + rules: { + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-description': 'off', + }, + }, + { + files: ['**/*.spec.ts'], + rules: { + 'no-restricted-imports': [ + 'error', + { + patterns: [ + { + group: ['@ni/fast-*'], + message: + 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.', + }, + { + group: ['@ni/nimble-components', '@ni/spright-components'], + message: + 'Angular tests should not directly depend on web component packages.', + }, + ], + }, + ], + + // Jasmine createSpyObj rely on accessing unbound methods + '@typescript-eslint/unbound-method': 'off', + }, + }, + { + files: ['**/testing/**'], + rules: { + 'no-restricted-imports': [ + 'error', + { + patterns: [ + { + group: ['@ni/fast-*'], + message: + 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.', + }, + ], + }, + ], + }, + }, + { + files: ['**/*.html'], + extends: angularTemplateConfig, + rules: { + // Enable i18n template checking for the purpose of making sure to capture updates for the lint rules + '@angular-eslint/template/i18n': [ + 'error', + { + checkText: false, + checkId: false, + ignoreAttributes: [ + // Attributes that SHOULD NOT ever be localized need to be added to ignoreAttributeSets + // See: https://github.com/ni/javascript-styleguide/blob/main/packages/eslint-config-angular/template/options.js + ...ignoreAttributes.all, + + // Attributes that SHOULD be localized in production, but we don't want to + // for tests / examples apps should be added to the following list: + 'action-menu-label', + 'aria-label', + 'button-label', + 'label', + 'placeholder', + 'text', + 'title', + ], + }, + ], + }, + }, + { + files: ['**/eslint.config.js'], + extends: importNodeEsmConfig + }, +]); diff --git a/packages/angular-workspace/example-client-app/.eslintrc.js b/packages/angular-workspace/example-client-app/.eslintrc.js deleted file mode 100644 index cfa3bfa292..0000000000 --- a/packages/angular-workspace/example-client-app/.eslintrc.js +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - extends: '../.eslintrc.js', - ignorePatterns: ['/src/environments'], - overrides: [ - { - files: ['*.ts'], - parserOptions: { - project: [ - './tsconfig.app.json', - './tsconfig.spec.json' - ], - tsconfigRootDir: __dirname - }, - rules: { - 'no-restricted-imports': ['error', { - patterns: - [{ - group: ['@ni/fast-*'], - message: 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.' - }, - { - group: ['@ni/*-components'], - message: 'Client Angular applications should not directly depend on web component packages.' - }] - }], - '@angular-eslint/component-selector': [ - 'error', - { type: 'element', prefix: 'example', style: 'kebab-case' } - ], - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/require-description': 'off' - } - } - ] -}; diff --git a/packages/angular-workspace/example-client-app/eslint.config.js b/packages/angular-workspace/example-client-app/eslint.config.js new file mode 100644 index 0000000000..cb5b8c42b3 --- /dev/null +++ b/packages/angular-workspace/example-client-app/eslint.config.js @@ -0,0 +1,40 @@ +const { defineConfig } = require('eslint/config'); +const baseConfig = require('../eslint.config.js'); + +module.exports = defineConfig([ + baseConfig, + { + ignores: ['**/src/environments'], + }, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: [ + './tsconfig.app.json', + './tsconfig.spec.json' + ], + tsconfigRootDir: __dirname + }, + }, + rules: { + 'no-restricted-imports': ['error', { + patterns: + [{ + group: ['@ni/fast-*'], + message: 'Do not directly use underlying libraries of nimble. Instead rely on or add to exports of nimble packages.' + }, + { + group: ['@ni/*-components'], + message: 'Client Angular applications should not directly depend on web component packages.' + }] + }], + '@angular-eslint/component-selector': [ + 'error', + { type: 'element', prefix: 'example', style: 'kebab-case' } + ], + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-description': 'off' + } + } +]); diff --git a/packages/angular-workspace/nimble-angular/.eslintrc.js b/packages/angular-workspace/nimble-angular/.eslintrc.js deleted file mode 100644 index 62867f6b7b..0000000000 --- a/packages/angular-workspace/nimble-angular/.eslintrc.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - extends: '../.eslintrc.js', - ignorePatterns: [ - '/src/thirdparty' - ], - overrides: [ - { - files: ['*.ts'], - parserOptions: { - project: [ - './tsconfig.lib.json', - './tsconfig.spec.json' - ], - tsconfigRootDir: __dirname - } - }, - { - files: ['build/**/*.js'], - rules: { - // Logging in build scripts is useful - 'no-console': 'off', - // Rollup config files use default exports - 'import/no-default-export': 'off' - } - } - ] -}; diff --git a/packages/angular-workspace/nimble-angular/eslint.config.js b/packages/angular-workspace/nimble-angular/eslint.config.js new file mode 100644 index 0000000000..88917d54c8 --- /dev/null +++ b/packages/angular-workspace/nimble-angular/eslint.config.js @@ -0,0 +1,30 @@ +const { defineConfig } = require('eslint/config'); +const baseConfig = require('../eslint.config.js'); + +module.exports = defineConfig([ + baseConfig, + { + ignores: ['**/src/thirdparty'], + }, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: [ + './tsconfig.lib.json', + './tsconfig.spec.json' + ], + tsconfigRootDir: __dirname + } + } + }, + { + files: ['**/build/**/*.js'], + rules: { + // Logging in build scripts is useful + 'no-console': 'off', + // Rollup config files use default exports + 'import/no-default-export': 'off' + } + } +]); diff --git a/packages/angular-workspace/nimble-angular/label-provider/table/nimble-label-provider-table.directive.ts b/packages/angular-workspace/nimble-angular/label-provider/table/nimble-label-provider-table.directive.ts index f68b7d3335..e357c22921 100644 --- a/packages/angular-workspace/nimble-angular/label-provider/table/nimble-label-provider-table.directive.ts +++ b/packages/angular-workspace/nimble-angular/label-provider/table/nimble-label-provider-table.directive.ts @@ -51,7 +51,7 @@ export class NimbleLabelProviderTableDirective { } // Renaming because property should have camel casing, but attribute should not - // eslint-disable-next-line @angular-eslint/no-input-rename + @Input('collapse-all') public set collapseAll(value: string | undefined) { this.renderer.setProperty(this.elementRef.nativeElement, 'collapseAll', value); } diff --git a/packages/angular-workspace/nimble-angular/src/directives/dialog/nimble-dialog.directive.ts b/packages/angular-workspace/nimble-angular/src/directives/dialog/nimble-dialog.directive.ts index 815f3c0521..68147103fb 100644 --- a/packages/angular-workspace/nimble-angular/src/directives/dialog/nimble-dialog.directive.ts +++ b/packages/angular-workspace/nimble-angular/src/directives/dialog/nimble-dialog.directive.ts @@ -17,7 +17,7 @@ export { dialogTag }; @Directive({ selector: 'nimble-dialog' }) -// eslint-disable-next-line @typescript-eslint/no-invalid-void-type + export class NimbleDialogDirective { public get preventDismiss(): boolean { return this.elementRef.nativeElement.preventDismiss; diff --git a/packages/angular-workspace/nimble-angular/src/directives/drawer/nimble-drawer.directive.ts b/packages/angular-workspace/nimble-angular/src/directives/drawer/nimble-drawer.directive.ts index 0a82305589..795af22ce8 100644 --- a/packages/angular-workspace/nimble-angular/src/directives/drawer/nimble-drawer.directive.ts +++ b/packages/angular-workspace/nimble-angular/src/directives/drawer/nimble-drawer.directive.ts @@ -19,7 +19,7 @@ export { DrawerLocation }; @Directive({ selector: 'nimble-drawer' }) -// eslint-disable-next-line @typescript-eslint/no-invalid-void-type + export class NimbleDrawerDirective { public get location(): DrawerLocation { return this.elementRef.nativeElement.location; diff --git a/packages/angular-workspace/nimble-angular/src/testing/async-helpers.ts b/packages/angular-workspace/nimble-angular/src/testing/async-helpers.ts index 1e4831f797..3b651fd664 100644 --- a/packages/angular-workspace/nimble-angular/src/testing/async-helpers.ts +++ b/packages/angular-workspace/nimble-angular/src/testing/async-helpers.ts @@ -1,6 +1,6 @@ // This is a workaround until nimble-angular exposes `testing` entrypoints: // https://github.com/ni/nimble/issues/172#issuecomment-1529958809 -// eslint-disable-next-line no-restricted-imports + import { processUpdates, waitForUpdatesAsync as waitForUpdatesAsyncOriginal } from '@ni/nimble-components/dist/esm/testing/async-helpers'; export { processUpdates }; diff --git a/packages/angular-workspace/spright-angular/.eslintrc.js b/packages/angular-workspace/ok-angular/eslint.config.js similarity index 50% rename from packages/angular-workspace/spright-angular/.eslintrc.js rename to packages/angular-workspace/ok-angular/eslint.config.js index 4ca8737457..d17552f21f 100644 --- a/packages/angular-workspace/spright-angular/.eslintrc.js +++ b/packages/angular-workspace/ok-angular/eslint.config.js @@ -1,8 +1,11 @@ -module.exports = { - extends: '../.eslintrc.js', - overrides: [ - { - files: ['*.ts'], +const { defineConfig } = require('eslint/config'); +const baseConfig = require('../eslint.config.js'); + +module.exports = defineConfig([ + baseConfig, + { + files: ['**/*.ts'], + languageOptions: { parserOptions: { project: [ './tsconfig.lib.json', @@ -11,5 +14,5 @@ module.exports = { tsconfigRootDir: __dirname } } - ] -}; + } +]); diff --git a/packages/angular-workspace/package.json b/packages/angular-workspace/package.json index 905882f616..da774eb2fe 100644 --- a/packages/angular-workspace/package.json +++ b/packages/angular-workspace/package.json @@ -57,7 +57,7 @@ "@lhci/cli": "^0.15.0", "@ni/fast-web-utilities": "^10.0.0", "@ni-private/eslint-config-nimble": "*", - "@ni/eslint-config-angular": "^9.0.4", + "@ni/eslint-config-angular": "^10.0.0", "@ni-private/jasmine-extensions": "*", "@ni/jasmine-parameterized": "*", "@ni/nimble-tokens": "*", diff --git a/packages/angular-workspace/ok-angular/.eslintrc.js b/packages/angular-workspace/spright-angular/eslint.config.js similarity index 50% rename from packages/angular-workspace/ok-angular/.eslintrc.js rename to packages/angular-workspace/spright-angular/eslint.config.js index 4ca8737457..d17552f21f 100644 --- a/packages/angular-workspace/ok-angular/.eslintrc.js +++ b/packages/angular-workspace/spright-angular/eslint.config.js @@ -1,8 +1,11 @@ -module.exports = { - extends: '../.eslintrc.js', - overrides: [ - { - files: ['*.ts'], +const { defineConfig } = require('eslint/config'); +const baseConfig = require('../eslint.config.js'); + +module.exports = defineConfig([ + baseConfig, + { + files: ['**/*.ts'], + languageOptions: { parserOptions: { project: [ './tsconfig.lib.json', @@ -11,5 +14,5 @@ module.exports = { tsconfigRootDir: __dirname } } - ] -}; + } +]); diff --git a/packages/blazor-workspace/.eslintrc.js b/packages/blazor-workspace/.eslintrc.js deleted file mode 100644 index be38c7274a..0000000000 --- a/packages/blazor-workspace/.eslintrc.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist', - 'bin', - 'obj', - '**/wwwroot/**', - '!**/wwwroot/*.lib.module.js', - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - }, - { - files: ['build/**/*.js'], - rules: { - // Build scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - - // Okay to use console.log in build scripts - 'no-console': 'off', - - // Rollup config files use default exports - 'import/no-default-export': 'off', - - // Allow build to reference files in NimbleBlazor and SprightBlazor - 'import/no-relative-packages': 'off', - } - }, - { - files: ['build/generate-hybrid/source/*.js'], - env: { - browser: true - }, - } - ] -}; diff --git a/packages/blazor-workspace/eslint.config.js b/packages/blazor-workspace/eslint.config.js new file mode 100644 index 0000000000..bdb8bcf62b --- /dev/null +++ b/packages/blazor-workspace/eslint.config.js @@ -0,0 +1,44 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const globals = require('globals'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**', + '**/bin/**', + '**/obj/**', + '**/wwwroot/**', + '!**/wwwroot/*.lib.module.js', + ], + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig, + }, + { + files: ['**/build/**/*.js'], + rules: { + // Build scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + + // Okay to use console.log in build scripts + 'no-console': 'off', + + // Rollup config files use default exports + 'import/no-default-export': 'off', + + // Allow build to reference files in NimbleBlazor and SprightBlazor + 'import/no-relative-packages': 'off', + } + }, + { + files: ['**/build/generate-hybrid/source/*.js'], + languageOptions: { + globals: { + ...globals.browser + } + } + } +]); diff --git a/packages/blazor-workspace/package.json b/packages/blazor-workspace/package.json index 2730328ff9..186c531f5a 100644 --- a/packages/blazor-workspace/package.json +++ b/packages/blazor-workspace/package.json @@ -36,6 +36,7 @@ "cross-env": "^10.1.0", "glob": "^11.0.0", "playwright": "1.54.1", - "rollup": "^4.12.0" + "rollup": "^4.12.0", + "globals": "^14.0.0" } } diff --git a/packages/eslint-config-nimble/.eslintrc.js b/packages/eslint-config-nimble/.eslintrc.js deleted file mode 100644 index 5e594c93a6..0000000000 --- a/packages/eslint-config-nimble/.eslintrc.js +++ /dev/null @@ -1,12 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - }, - ] -}; diff --git a/packages/eslint-config-nimble/components.js b/packages/eslint-config-nimble/components.js index dd0bbd9ace..66254630e3 100644 --- a/packages/eslint-config-nimble/components.js +++ b/packages/eslint-config-nimble/components.js @@ -1,121 +1,121 @@ -module.exports = { - extends: [ - '@ni-private/eslint-config-nimble/typescript', - ], - rules: { - 'no-restricted-syntax': [ - 'error', - { - selector: 'TSEnumDeclaration', - message: - 'Use a const object instead of an enum. See other types.ts files for examples.' - } - ], +const globals = require('globals'); +const { defineConfig } = require('eslint/config'); +const typescriptNimbleConfig = require('./typescript.js'); - // Improves readability of templates to avoid return types in template expressions - '@typescript-eslint/explicit-function-return-type': [ - 'error', - { allowExpressions: true } - ], +module.exports = defineConfig([ + typescriptNimbleConfig, + { + rules: { + 'no-restricted-syntax': [ + 'error', + { + selector: 'TSEnumDeclaration', + message: + 'Use a const object instead of an enum. See other types.ts files for examples.', + }, + ], - 'no-restricted-imports': [ - 'error', - { - paths: [ - ...restrictedFastImports() - ] - } - ], + // Improves readability of templates to avoid return types in template expressions + '@typescript-eslint/explicit-function-return-type': [ + 'error', + { allowExpressions: true }, + ], + + 'no-restricted-imports': [ + 'error', + { + paths: [...restrictedFastImports()], + }, + ], + }, }, - overrides: [ - { - files: ['*.spec.ts'], - env: { - jasmine: true + { + files: ['**/*.spec.ts'], + languageOptions: { + globals: { + ...globals.jasmine, }, - rules: { - 'no-restricted-imports': [ - 'error', - { - paths: [ - ...restrictedFastImports(), - { - name: '@ni/fast-element', - importNames: ['DOM'], - message: - 'For tests, please use functions from src/testing/async-helpers instead.' - } - ] - } - ], - } }, - { - files: ['*.foundation.spec.ts'], - rules: { - 'no-restricted-imports': [ - 'error', - { - paths: [ - ...restrictedFastImports() - ] - } - ] - } + rules: { + 'no-restricted-imports': [ + 'error', + { + paths: [ + ...restrictedFastImports(), + { + name: '@ni/fast-element', + importNames: ['DOM'], + message: + 'For tests, please use functions from src/testing/async-helpers instead.', + }, + ], + }, + ], }, - { - files: ['styles.ts'], - rules: { - // Prettier and eslint conflict in how they format CSS in styles files and we prefer prettier's output - '@stylistic/indent': 'off' - } + }, + { + files: ['**/*.foundation.spec.ts'], + rules: { + 'no-restricted-imports': [ + 'error', + { + paths: [...restrictedFastImports()], + }, + ], }, - { - files: ['template.ts'], - rules: { - // Using '??' in templates does not get flagged correctly by FAST as being a volatile binding. - // See https://github.com/ni/nimble/issues/1843 for more information. - 'no-restricted-syntax': [ - 'error', - { selector: "LogicalExpression[operator='??']" } - ], - // Neither prettier or eslint handle indent well in template files - '@stylistic/indent': 'off' - } + }, + { + files: ['**/styles.ts'], + rules: { + // Prettier and eslint conflict in how they format CSS in styles files and we prefer prettier's output + '@stylistic/indent': 'off', }, - { - // Instead of enums, this repo uses const objects and type unions which should live in types.ts - files: ['types.ts'], - rules: { - // The const object and type union should have the same name - '@typescript-eslint/no-redeclare': 'off', - // Enum-like variables should use PascalCase and values should use camelCase - // Also allow camelCase variables for things like attribute strings - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'objectLiteralProperty', - format: ['camelCase'] - }, - { - selector: 'variable', - format: ['camelCase', 'PascalCase'] - }, - { - selector: 'typeLike', - format: ['PascalCase'] - }, - { - selector: 'default', - format: ['camelCase'], - leadingUnderscore: 'allow', - trailingUnderscore: 'allow' - } - ] - } - } - ] -}; + }, + { + files: ['**/template.ts'], + rules: { + // Using '??' in templates does not get flagged correctly by FAST as being a volatile binding. + // See https://github.com/ni/nimble/issues/1843 for more information. + 'no-restricted-syntax': [ + 'error', + { selector: "LogicalExpression[operator='??']" }, + ], + // Neither prettier or eslint handle indent well in template files + '@stylistic/indent': 'off', + }, + }, + { + // Instead of enums, this repo uses const objects and type unions which should live in types.ts + files: ['**/types.ts'], + rules: { + // The const object and type union should have the same name + '@typescript-eslint/no-redeclare': 'off', + // Enum-like variables should use PascalCase and values should use camelCase + // Also allow camelCase variables for things like attribute strings + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'objectLiteralProperty', + format: ['camelCase'], + }, + { + selector: 'variable', + format: ['camelCase', 'PascalCase'], + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + { + selector: 'default', + format: ['camelCase'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + }, + ], + }, + }, +]); function restrictedFastImports() { return [ diff --git a/packages/eslint-config-nimble/eslint.config.js b/packages/eslint-config-nimble/eslint.config.js new file mode 100644 index 0000000000..c786be65fb --- /dev/null +++ b/packages/eslint-config-nimble/eslint.config.js @@ -0,0 +1,13 @@ +const { defineConfig } = require('eslint/config'); +const { importNodeEsmConfig } = require('@ni/eslint-config-javascript'); +const javascriptNimbleConfig = require('./javascript.js'); + +module.exports = defineConfig([ + { + ignores: ['node_modules'] + }, + { + files: ['**/*.js'], + extends: [...javascriptNimbleConfig, ...importNodeEsmConfig] + } +]); diff --git a/packages/eslint-config-nimble/javascript.js b/packages/eslint-config-nimble/javascript.js index f0144138d1..97cf06e021 100644 --- a/packages/eslint-config-nimble/javascript.js +++ b/packages/eslint-config-nimble/javascript.js @@ -1,19 +1,21 @@ -module.exports = { - extends: '@ni/eslint-config-javascript', - parserOptions: { - ecmaVersion: 2020 - }, - rules: { - // This rule's configuration is based on the NI javascript styleguide: - // https://github.com/ni/javascript-styleguide/blob/a1a6abd7adca7d9acd002705101b351d695b2442/packages/eslint-config-javascript/index.js - // The only difference is that we're increasing the value of minProperties (from 6) so - // that eslint doesn't introduce line breaks where prettier doesn't. If eslint introduces - // line breaks, they will be unix-style, which will cause pointless diffs in git. - '@stylistic/object-curly-newline': ['error', { - ObjectExpression: { minProperties: 1000, multiline: true, consistent: true }, - ObjectPattern: { minProperties: 1000, multiline: true, consistent: true }, - ImportDeclaration: { consistent: true }, - ExportDeclaration: { consistent: true } - }], - }, -}; +const { defineConfig } = require('eslint/config'); +const { javascriptConfig } = require('@ni/eslint-config-javascript'); + +module.exports = defineConfig([ + javascriptConfig, + { + rules: { + // This rule's configuration is based on the NI javascript styleguide: + // https://github.com/ni/javascript-styleguide/blob/a1a6abd7adca7d9acd002705101b351d695b2442/packages/eslint-config-javascript/index.js + // The only difference is that we're increasing the value of minProperties (from 6) so + // that eslint doesn't introduce line breaks where prettier doesn't. If eslint introduces + // line breaks, they will be unix-style, which will cause pointless diffs in git. + '@stylistic/object-curly-newline': ['error', { + ObjectExpression: { minProperties: 1000, multiline: true, consistent: true }, + ObjectPattern: { minProperties: 1000, multiline: true, consistent: true }, + ImportDeclaration: { consistent: true }, + ExportDeclaration: { consistent: true } + }], + }, + } +]); diff --git a/packages/eslint-config-nimble/package.json b/packages/eslint-config-nimble/package.json index feda12474c..eb426a8c06 100644 --- a/packages/eslint-config-nimble/package.json +++ b/packages/eslint-config-nimble/package.json @@ -31,9 +31,10 @@ "./components.js": "./components.js" }, "peerDependencies": { - "@ni/eslint-config-javascript": "^4.3.0", - "@ni/eslint-config-typescript": "^4.4.2", - "eslint": "^8.7.0", - "eslint-plugin-jsdoc": "^60.7.1" + "@ni/eslint-config-javascript": "^5.0.0", + "@ni/eslint-config-typescript": "^5.0.0", + "eslint": "^9.36.0", + "eslint-plugin-jsdoc": "^60.7.1", + "globals": "^14.0.0" } } diff --git a/packages/eslint-config-nimble/typescript.js b/packages/eslint-config-nimble/typescript.js index f2b2a22a18..82605ef094 100644 --- a/packages/eslint-config-nimble/typescript.js +++ b/packages/eslint-config-nimble/typescript.js @@ -1,65 +1,76 @@ -module.exports = { - extends: [ - '@ni/eslint-config-typescript', - '@ni/eslint-config-typescript/requiring-type-checking' - ], - parserOptions: { - ecmaVersion: 2020 - }, - plugins: ['jsdoc'], - rules: { - // Require non-empty JSDoc comment on class declarations - 'jsdoc/require-jsdoc': [ - 'error', - { - publicOnly: false, - require: { - ClassDeclaration: true, - FunctionDeclaration: false - } - } - ], - 'jsdoc/require-description': [ - 'error', - { contexts: ['ClassDeclaration'] } - ], +const { defineConfig } = require('eslint/config'); +const { typescriptConfig } = require('@ni/eslint-config-typescript'); +const jsdoc = require('eslint-plugin-jsdoc'); +const globals = require('globals'); + +module.exports = defineConfig([ + typescriptConfig, + { + plugins: { + jsdoc, + }, + rules: { + // Require non-empty JSDoc comment on class declarations + 'jsdoc/require-jsdoc': [ + 'error', + { + publicOnly: false, + require: { + ClassDeclaration: true, + FunctionDeclaration: false, + }, + }, + ], + 'jsdoc/require-description': [ + 'error', + { contexts: ['ClassDeclaration'] }, + ], - // Rules enabled due to strictNullChecks - // see: https://github.com/ni/javascript-styleguide/#strict-null-checks - '@typescript-eslint/no-non-null-assertion': 'off', + // Rules enabled due to strictNullChecks + // see: https://github.com/ni/javascript-styleguide/#strict-null-checks + '@typescript-eslint/no-non-null-assertion': 'off', - // This rule's configuration is based on the NI javascript styleguide: - // https://github.com/ni/javascript-styleguide/blob/a1a6abd7adca7d9acd002705101b351d695b2442/packages/eslint-config-javascript/index.js - // The only difference is that we're increasing the value of minProperties (from 6) so - // that eslint doesn't introduce line breaks where prettier doesn't. If eslint introduces - // line breaks, they will be unix-style, which will cause pointless diffs in git. - '@stylistic/object-curly-newline': ['error', { - ObjectExpression: { minProperties: 1000, multiline: true, consistent: true }, - ObjectPattern: { minProperties: 1000, multiline: true, consistent: true }, - ImportDeclaration: { consistent: true }, - ExportDeclaration: { consistent: true } - }], + // This rule's configuration is based on the NI javascript styleguide: + // https://github.com/ni/javascript-styleguide/blob/a1a6abd7adca7d9acd002705101b351d695b2442/packages/eslint-config-javascript/index.js + // The only difference is that we're increasing the value of minProperties (from 6) so + // that eslint doesn't introduce line breaks where prettier doesn't. If eslint introduces + // line breaks, they will be unix-style, which will cause pointless diffs in git. + '@stylistic/object-curly-newline': [ + 'error', + { + ObjectExpression: { + minProperties: 1000, + multiline: true, + consistent: true, + }, + ObjectPattern: { + minProperties: 1000, + multiline: true, + consistent: true, + }, + ImportDeclaration: { consistent: true }, + ExportDeclaration: { consistent: true }, + }, + ], + }, }, - overrides: [ - { - files: ['*.spec.ts'], - env: { - jasmine: true + { + files: ['**/*.spec.ts'], + languageOptions: { + globals: { + ...globals.jasmine, }, - rules: { - // Classes defined in test code aren't part of the public API so don't need docs - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/require-description': 'off', + }, + rules: { + // Classes defined in test code aren't part of the public API so don't need docs + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-description': 'off', - // test files will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': [ - 'error', - { devDependencies: true } - ], + // test files will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - // It's common to define helper classes for tests and it's more readable to do this in the same file - 'max-classes-per-file': 'off' - } - } - ] -}; + // It's common to define helper classes for tests and it's more readable to do this in the same file + 'max-classes-per-file': 'off', + }, + }, +]); diff --git a/packages/jasmine-extensions/.eslintrc.cjs b/packages/jasmine-extensions/.eslintrc.cjs deleted file mode 100644 index 592793add8..0000000000 --- a/packages/jasmine-extensions/.eslintrc.cjs +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname - } - } - ], -}; diff --git a/packages/jasmine-extensions/eslint.config.cjs b/packages/jasmine-extensions/eslint.config.cjs new file mode 100644 index 0000000000..f98c1421a8 --- /dev/null +++ b/packages/jasmine-extensions/eslint.config.cjs @@ -0,0 +1,31 @@ +// eslint-disable-next-line import/no-unresolved +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ] + }, + { + files: ['**/*.js', '**/*.cjs'], + extends: javascriptNimbleConfig, + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + } + }, + { + files: ['**/*.ts'], + extends: typescriptNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/packages/jasmine-parameterized/.eslintrc.cjs b/packages/jasmine-parameterized/.eslintrc.cjs deleted file mode 100644 index 592793add8..0000000000 --- a/packages/jasmine-parameterized/.eslintrc.cjs +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname - } - } - ], -}; diff --git a/packages/jasmine-parameterized/eslint.config.cjs b/packages/jasmine-parameterized/eslint.config.cjs new file mode 100644 index 0000000000..c1cf3f95f2 --- /dev/null +++ b/packages/jasmine-parameterized/eslint.config.cjs @@ -0,0 +1,29 @@ +// eslint-disable-next-line import/no-unresolved +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ] + }, + { + files: ['*.js', '*.cjs'], + extends: javascriptNimbleConfig, + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + } + }, + { + files: ['*.ts'], + extends: typescriptNimbleConfig, + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + } + } +]); diff --git a/packages/nimble-components/.eslintrc.js b/packages/nimble-components/.eslintrc.js deleted file mode 100644 index dedfab75e2..0000000000 --- a/packages/nimble-components/.eslintrc.js +++ /dev/null @@ -1,32 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist', - 'src/icons', - 'src/wafer-map/workers' - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'] - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/components'], - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname - }, - }, - { - files: ['build/**/*.js'], - rules: { - // Build scripts should give verbose logging - 'no-console': 'off', - // Rollup config files use default exports - 'import/no-default-export': 'off', - }, - } - ] -}; diff --git a/packages/nimble-components/build/generate-workers/.eslintrc.js b/packages/nimble-components/build/generate-workers/.eslintrc.js deleted file mode 100644 index 8d441ca1f5..0000000000 --- a/packages/nimble-components/build/generate-workers/.eslintrc.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - overrides: [ - { - files: ['*.ts'], - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname - }, - } - ] -}; diff --git a/packages/nimble-components/eslint.config.js b/packages/nimble-components/eslint.config.js new file mode 100644 index 0000000000..cd4523d133 --- /dev/null +++ b/packages/nimble-components/eslint.config.js @@ -0,0 +1,52 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const componentsNimbleConfig = require('@ni-private/eslint-config-nimble/components'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**', + '**/src/icons', + '**/src/wafer-map/workers' + ] + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig + }, + { + files: ['**/*.ts'], + extends: componentsNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + } + }, + rules: { + // Disable strict null checks + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off', + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off' + } + }, + { + files: ['**/build/**/*.js'], + rules: { + // Build scripts should give verbose logging + 'no-console': 'off', + // Rollup config files use default exports + 'import/no-default-export': 'off' + } + }, + { + files: ['**/build/generate-workers/**/*.ts'], + languageOptions: { + parserOptions: { + project: './build/generate-workers/tsconfig.json', + tsconfigRootDir: __dirname + } + } + } +]); diff --git a/packages/nimble-components/package.json b/packages/nimble-components/package.json index 4fd82ebd83..78cce4a3d8 100644 --- a/packages/nimble-components/package.json +++ b/packages/nimble-components/package.json @@ -4,7 +4,7 @@ "description": "Styled web components for the NI Nimble Design System", "scripts": { "build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run bundle-components && npm run generate-scss", - "lint-concurrent": "concurrently --pad-prefix --timings --group \"npm:eslint\" \"npm:prettier\"", + "lint-concurrent": "concurrently --pad-prefix --timings --group \"npm:eslint\"", "format": "npm run prettier-fix", "eslint": "eslint .", "eslint-fix": "eslint . --fix", diff --git a/packages/nimble-components/src/anchor/types.ts b/packages/nimble-components/src/anchor/types.ts index cf5f4417af..3e89e37da1 100644 --- a/packages/nimble-components/src/anchor/types.ts +++ b/packages/nimble-components/src/anchor/types.ts @@ -6,5 +6,4 @@ export const AnchorAppearance = { default: undefined, prominent: 'prominent' } as const; -export type AnchorAppearance = - (typeof AnchorAppearance)[keyof typeof AnchorAppearance]; +export type AnchorAppearance = (typeof AnchorAppearance)[keyof typeof AnchorAppearance]; diff --git a/packages/nimble-components/src/banner/index.ts b/packages/nimble-components/src/banner/index.ts index 5075d0aae5..9a24092863 100644 --- a/packages/nimble-components/src/banner/index.ts +++ b/packages/nimble-components/src/banner/index.ts @@ -70,7 +70,7 @@ export class Banner extends FoundationElement { } } -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface Banner extends ARIAGlobalStatesAndProperties {} applyMixins(Banner, ARIAGlobalStatesAndProperties); diff --git a/packages/nimble-components/src/banner/types.ts b/packages/nimble-components/src/banner/types.ts index 54d7142889..aeb30c5633 100644 --- a/packages/nimble-components/src/banner/types.ts +++ b/packages/nimble-components/src/banner/types.ts @@ -9,8 +9,7 @@ export const BannerSeverity = { information: 'information' } as const; -export type BannerSeverity = - (typeof BannerSeverity)[keyof typeof BannerSeverity]; +export type BannerSeverity = (typeof BannerSeverity)[keyof typeof BannerSeverity]; /** * The type of the detail associated with the `toggle` diff --git a/packages/nimble-components/src/breadcrumb/types.ts b/packages/nimble-components/src/breadcrumb/types.ts index e9bed6fcac..805f53ebb7 100644 --- a/packages/nimble-components/src/breadcrumb/types.ts +++ b/packages/nimble-components/src/breadcrumb/types.ts @@ -6,5 +6,4 @@ export const BreadcrumbAppearance = { default: undefined, prominent: 'prominent' } as const; -export type BreadcrumbAppearance = - (typeof BreadcrumbAppearance)[keyof typeof BreadcrumbAppearance]; +export type BreadcrumbAppearance = (typeof BreadcrumbAppearance)[keyof typeof BreadcrumbAppearance]; diff --git a/packages/nimble-components/src/combobox/models/combobox-form-associated.ts b/packages/nimble-components/src/combobox/models/combobox-form-associated.ts index eb841622e4..4048612a65 100644 --- a/packages/nimble-components/src/combobox/models/combobox-form-associated.ts +++ b/packages/nimble-components/src/combobox/models/combobox-form-associated.ts @@ -4,7 +4,7 @@ import { FormAssociated, ListboxElement } from '@ni/fast-foundation'; // eslint-disable-next-line jsdoc/require-jsdoc class Combobox extends ListboxElement {} -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Combobox extends FormAssociated {} /** diff --git a/packages/nimble-components/src/combobox/tests/types.ts b/packages/nimble-components/src/combobox/tests/types.ts index 18ccc7da6a..465025f579 100644 --- a/packages/nimble-components/src/combobox/tests/types.ts +++ b/packages/nimble-components/src/combobox/tests/types.ts @@ -3,5 +3,4 @@ export const ExampleOptionsType = { wideOptions: 'WideOptions', manyOptions: 'ManyOptions' } as const; -export type ExampleOptionsType = - (typeof ExampleOptionsType)[keyof typeof ExampleOptionsType]; +export type ExampleOptionsType = (typeof ExampleOptionsType)[keyof typeof ExampleOptionsType]; diff --git a/packages/nimble-components/src/dialog/index.ts b/packages/nimble-components/src/dialog/index.ts index 45ba0e5512..5878c177bd 100644 --- a/packages/nimble-components/src/dialog/index.ts +++ b/packages/nimble-components/src/dialog/index.ts @@ -20,7 +20,6 @@ declare global { /** * A nimble-styled dialog. */ -// eslint-disable-next-line @typescript-eslint/no-invalid-void-type export class Dialog extends FoundationElement { // We want the member to match the name of the constant // eslint-disable-next-line @typescript-eslint/naming-convention @@ -146,7 +145,7 @@ export class Dialog extends FoundationElement { } } -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface Dialog extends ARIAGlobalStatesAndProperties {} applyMixins(Dialog, ARIAGlobalStatesAndProperties); diff --git a/packages/nimble-components/src/dialog/tests/dialog.spec.ts b/packages/nimble-components/src/dialog/tests/dialog.spec.ts index 65927bd060..6c5d002b43 100644 --- a/packages/nimble-components/src/dialog/tests/dialog.spec.ts +++ b/packages/nimble-components/src/dialog/tests/dialog.spec.ts @@ -4,7 +4,6 @@ import { Dialog, dialogTag, UserDismissed } from '..'; import { waitForUpdatesAsync } from '../../testing/async-helpers'; import { buttonTag } from '../../button'; -// eslint-disable-next-line @typescript-eslint/no-invalid-void-type async function setup( preventDismiss = false ): Promise>> { diff --git a/packages/nimble-components/src/drawer/index.ts b/packages/nimble-components/src/drawer/index.ts index 34d7b9437d..abb599ec85 100644 --- a/packages/nimble-components/src/drawer/index.ts +++ b/packages/nimble-components/src/drawer/index.ts @@ -23,7 +23,6 @@ declare global { * Drawer control. Shows content in a panel on the left / right side of the screen, * which animates to be visible with a slide-in / slide-out animation. */ -// eslint-disable-next-line @typescript-eslint/no-invalid-void-type export class Drawer extends FoundationElement { // We want the member to match the name of the constant // eslint-disable-next-line @typescript-eslint/naming-convention @@ -164,7 +163,7 @@ export class Drawer extends FoundationElement { } } -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface Drawer extends ARIAGlobalStatesAndProperties {} applyMixins(Drawer, ARIAGlobalStatesAndProperties); diff --git a/packages/nimble-components/src/drawer/tests/drawer.spec.ts b/packages/nimble-components/src/drawer/tests/drawer.spec.ts index f2f6d9678d..70dbbf8509 100644 --- a/packages/nimble-components/src/drawer/tests/drawer.spec.ts +++ b/packages/nimble-components/src/drawer/tests/drawer.spec.ts @@ -9,7 +9,6 @@ import { } from '../../testing/async-helpers'; import { buttonTag } from '../../button'; -// eslint-disable-next-line @typescript-eslint/no-invalid-void-type async function setup( preventDismiss = false ): Promise>> { diff --git a/packages/nimble-components/src/drawer/tests/types.ts b/packages/nimble-components/src/drawer/tests/types.ts index 47b1ecbf06..eb881baddf 100644 --- a/packages/nimble-components/src/drawer/tests/types.ts +++ b/packages/nimble-components/src/drawer/tests/types.ts @@ -2,8 +2,7 @@ export const ExampleContentType = { simpleTextContent: 'SimpleTextContent', headerContentFooter: 'HeaderContentFooter' } as const; -export type ExampleContentType = - (typeof ExampleContentType)[keyof typeof ExampleContentType]; +export type ExampleContentType = (typeof ExampleContentType)[keyof typeof ExampleContentType]; export const DrawerWidthOptions = { default: 'Default', @@ -11,5 +10,4 @@ export const DrawerWidthOptions = { medium500: 'Medium500', fitContent: 'FitContent' } as const; -export type DrawerWidthOptions = - (typeof DrawerWidthOptions)[keyof typeof DrawerWidthOptions]; +export type DrawerWidthOptions = (typeof DrawerWidthOptions)[keyof typeof DrawerWidthOptions]; diff --git a/packages/nimble-components/src/drawer/types.ts b/packages/nimble-components/src/drawer/types.ts index 5f5f6b01a2..f65a7f5573 100644 --- a/packages/nimble-components/src/drawer/types.ts +++ b/packages/nimble-components/src/drawer/types.ts @@ -2,5 +2,4 @@ export const DrawerLocation = { left: 'left', right: 'right' } as const; -export type DrawerLocation = - (typeof DrawerLocation)[keyof typeof DrawerLocation]; +export type DrawerLocation = (typeof DrawerLocation)[keyof typeof DrawerLocation]; diff --git a/packages/nimble-components/src/mapping/icon/index.ts b/packages/nimble-components/src/mapping/icon/index.ts index 629018a16f..ea25eac650 100644 --- a/packages/nimble-components/src/mapping/icon/index.ts +++ b/packages/nimble-components/src/mapping/icon/index.ts @@ -49,7 +49,7 @@ export class MappingIcon extends Mapping { // Clear the current resolution while waiting for async resolution this.resolvedIcon = undefined; await customElements.whenDefined(icon); - } catch (ex) { + } catch (_ex) { // If any error (i.e. invalid custom element name) don't continue // Don't update the resolvedIcon as it was already set to undefined before async resolution // (in case other async resolutions were started) diff --git a/packages/nimble-components/src/menu-button/types.ts b/packages/nimble-components/src/menu-button/types.ts index 4d2371dee1..3d918509b7 100644 --- a/packages/nimble-components/src/menu-button/types.ts +++ b/packages/nimble-components/src/menu-button/types.ts @@ -15,8 +15,7 @@ export const MenuButtonPosition = { below: 'below', auto: 'auto' } as const; -export type MenuButtonPosition = - (typeof MenuButtonPosition)[keyof typeof MenuButtonPosition]; +export type MenuButtonPosition = (typeof MenuButtonPosition)[keyof typeof MenuButtonPosition]; /** * The type of the detail associated with the `toggle` and `beforetoggle` diff --git a/packages/nimble-components/src/number-field/types.ts b/packages/nimble-components/src/number-field/types.ts index 823b15fd4e..f5a2617480 100644 --- a/packages/nimble-components/src/number-field/types.ts +++ b/packages/nimble-components/src/number-field/types.ts @@ -8,5 +8,4 @@ export const NumberFieldAppearance = { frameless: 'frameless' } as const; -export type NumberFieldAppearance = - (typeof NumberFieldAppearance)[keyof typeof NumberFieldAppearance]; +export type NumberFieldAppearance = (typeof NumberFieldAppearance)[keyof typeof NumberFieldAppearance]; diff --git a/packages/nimble-components/src/patterns/button/types.ts b/packages/nimble-components/src/patterns/button/types.ts index d3d1b64bb2..c1cf08a918 100644 --- a/packages/nimble-components/src/patterns/button/types.ts +++ b/packages/nimble-components/src/patterns/button/types.ts @@ -40,8 +40,7 @@ export const ButtonAppearance = { ghost: 'ghost', block: 'block' } as const; -export type ButtonAppearance = - (typeof ButtonAppearance)[keyof typeof ButtonAppearance]; +export type ButtonAppearance = (typeof ButtonAppearance)[keyof typeof ButtonAppearance]; /** * Types of button appearance variants. @@ -52,5 +51,4 @@ export const ButtonAppearanceVariant = { primary: 'primary', accent: 'accent' } as const; -export type ButtonAppearanceVariant = - (typeof ButtonAppearanceVariant)[keyof typeof ButtonAppearanceVariant]; +export type ButtonAppearanceVariant = (typeof ButtonAppearanceVariant)[keyof typeof ButtonAppearanceVariant]; diff --git a/packages/nimble-components/src/patterns/dropdown/types.ts b/packages/nimble-components/src/patterns/dropdown/types.ts index 4e64f1d7ce..9ac859d1ab 100644 --- a/packages/nimble-components/src/patterns/dropdown/types.ts +++ b/packages/nimble-components/src/patterns/dropdown/types.ts @@ -13,8 +13,7 @@ export const DropdownPosition = { above: 'above', below: 'below' } as const; -export type DropdownPosition = - (typeof DropdownPosition)[keyof typeof DropdownPosition]; +export type DropdownPosition = (typeof DropdownPosition)[keyof typeof DropdownPosition]; export const DropdownAppearance = { underline: 'underline', @@ -22,8 +21,7 @@ export const DropdownAppearance = { block: 'block', frameless: 'frameless' } as const; -export type DropdownAppearance = - (typeof DropdownAppearance)[keyof typeof DropdownAppearance]; +export type DropdownAppearance = (typeof DropdownAppearance)[keyof typeof DropdownAppearance]; /** * @internal diff --git a/packages/nimble-components/src/rich-text-mention/base/models/mention-validator.ts b/packages/nimble-components/src/rich-text-mention/base/models/mention-validator.ts index c4a75c0d2f..ae7416c3a3 100644 --- a/packages/nimble-components/src/rich-text-mention/base/models/mention-validator.ts +++ b/packages/nimble-components/src/rich-text-mention/base/models/mention-validator.ts @@ -4,7 +4,7 @@ import { type ValidityObject } from '../../../utilities/models/validator'; -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface RichTextMentionValidity extends ValidityObject {} type FlagNames = T extends readonly (infer U)[] ? U : never; @@ -122,7 +122,7 @@ export class RichTextMentionValidator< // eslint-disable-next-line no-new new URL(url); return false; - } catch (error) { + } catch (_error) { return true; } } @@ -133,7 +133,7 @@ export class RichTextMentionValidator< // eslint-disable-next-line no-new new RegExp(pattern); return false; - } catch (error) { + } catch (_error) { return true; } } diff --git a/packages/nimble-components/src/rich-text/editor/index.ts b/packages/nimble-components/src/rich-text/editor/index.ts index f5891c0f86..bb889e8ea3 100644 --- a/packages/nimble-components/src/rich-text/editor/index.ts +++ b/packages/nimble-components/src/rich-text/editor/index.ts @@ -717,7 +717,7 @@ export class RichTextEditor extends mixinErrorPattern(RichText) { } } -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface RichTextEditor extends ARIAGlobalStatesAndProperties {} applyMixins(RichTextEditor, ARIAGlobalStatesAndProperties); diff --git a/packages/nimble-components/src/rich-text/editor/testing/types.ts b/packages/nimble-components/src/rich-text/editor/testing/types.ts index b250073b75..2186f919ba 100644 --- a/packages/nimble-components/src/rich-text/editor/testing/types.ts +++ b/packages/nimble-components/src/rich-text/editor/testing/types.ts @@ -19,11 +19,9 @@ export const ArrowKeyButton = { left: keyArrowLeft, right: keyArrowRight } as const; -export type ArrowKeyButton = - (typeof ArrowKeyButton)[keyof typeof ArrowKeyButton]; +export type ArrowKeyButton = (typeof ArrowKeyButton)[keyof typeof ArrowKeyButton]; -export type LabelProvider = - | 'toggleBold' +export type LabelProvider = | 'toggleBold' | 'toggleItalics' | 'toggleBulletedList' | 'toggleNumberedList'; diff --git a/packages/nimble-components/src/rich-text/editor/types.ts b/packages/nimble-components/src/rich-text/editor/types.ts index c48728c9e0..b2c5c440d1 100644 --- a/packages/nimble-components/src/rich-text/editor/types.ts +++ b/packages/nimble-components/src/rich-text/editor/types.ts @@ -9,8 +9,7 @@ export const TipTapNodeName = { numberedList: 'orderedList' } as const; -export type TipTapNodeName = - (typeof TipTapNodeName)[keyof typeof TipTapNodeName]; +export type TipTapNodeName = (typeof TipTapNodeName)[keyof typeof TipTapNodeName]; export interface MentionExtensionConfig { name: string; diff --git a/packages/nimble-components/src/select/models/select-form-associated.ts b/packages/nimble-components/src/select/models/select-form-associated.ts index 3b64020cd8..f7f05ee29c 100644 --- a/packages/nimble-components/src/select/models/select-form-associated.ts +++ b/packages/nimble-components/src/select/models/select-form-associated.ts @@ -4,7 +4,7 @@ import { FormAssociated, ListboxElement } from '@ni/fast-foundation'; // eslint-disable-next-line jsdoc/require-jsdoc class Select extends ListboxElement {} -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type interface Select extends FormAssociated {} /** diff --git a/packages/nimble-components/src/select/tests/select.spec.ts b/packages/nimble-components/src/select/tests/select.spec.ts index c8de8547e9..858614ca35 100644 --- a/packages/nimble-components/src/select/tests/select.spec.ts +++ b/packages/nimble-components/src/select/tests/select.spec.ts @@ -29,8 +29,7 @@ type SelectFilterInputEventHandler = ( type CustomEventHandler = (evt: CustomEvent) => void; -type OptionInitialState = - | 'selected' +type OptionInitialState = | 'selected' | 'disabled' | 'disabled selected' | 'disabled hidden' diff --git a/packages/nimble-components/src/spinner/types.ts b/packages/nimble-components/src/spinner/types.ts index 585a2d72d8..92fd5521f5 100644 --- a/packages/nimble-components/src/spinner/types.ts +++ b/packages/nimble-components/src/spinner/types.ts @@ -6,5 +6,4 @@ export const SpinnerAppearance = { default: undefined, accent: 'accent' } as const; -export type SpinnerAppearance = - (typeof SpinnerAppearance)[keyof typeof SpinnerAppearance]; +export type SpinnerAppearance = (typeof SpinnerAppearance)[keyof typeof SpinnerAppearance]; diff --git a/packages/nimble-components/src/table-column/base/cell-view/template.ts b/packages/nimble-components/src/table-column/base/cell-view/template.ts index eb0a0e7af3..2e5e3d4d98 100644 --- a/packages/nimble-components/src/table-column/base/cell-view/template.ts +++ b/packages/nimble-components/src/table-column/base/cell-view/template.ts @@ -7,7 +7,7 @@ const validateCellViewTemplate = (cellViewTag: string): void => { let instance; try { instance = document.createElement(cellViewTag); - } catch (ex) { + } catch (_ex) { // Swallow construction error to report a better one } if (!(instance instanceof TableCellView)) { diff --git a/packages/nimble-components/src/table-column/base/group-header-view/template.ts b/packages/nimble-components/src/table-column/base/group-header-view/template.ts index 0ea2ba90f2..6e360c4879 100644 --- a/packages/nimble-components/src/table-column/base/group-header-view/template.ts +++ b/packages/nimble-components/src/table-column/base/group-header-view/template.ts @@ -6,7 +6,7 @@ const validateGroupHeaderViewTemplate = (groupHeaderViewTag: string): void => { let instance; try { instance = document.createElement(groupHeaderViewTag); - } catch (ex) { + } catch (_ex) { // Swallow construction error to report a better one } if (!(instance instanceof TableGroupHeaderView)) { diff --git a/packages/nimble-components/src/table-column/base/tests/types.ts b/packages/nimble-components/src/table-column/base/tests/types.ts index 1c575126ac..b0a131a84f 100644 --- a/packages/nimble-components/src/table-column/base/tests/types.ts +++ b/packages/nimble-components/src/table-column/base/tests/types.ts @@ -7,8 +7,7 @@ export const ExampleSortType = { firstColumnAscendingSecondColumnDisabled: 'FirstColumnAscendingSecondColumnDisabled' } as const; -export type ExampleSortType = - (typeof ExampleSortType)[keyof typeof ExampleSortType]; +export type ExampleSortType = (typeof ExampleSortType)[keyof typeof ExampleSortType]; export const ExampleGroupType = { none: 'None', @@ -17,15 +16,13 @@ export const ExampleGroupType = { firstThenLastName: 'FirstThenLastName', lastThenFirstName: 'LastThenFirstName' } as const; -export type ExampleGroupType = - (typeof ExampleGroupType)[keyof typeof ExampleGroupType]; +export type ExampleGroupType = (typeof ExampleGroupType)[keyof typeof ExampleGroupType]; export const ExampleGroupingDisabledType = { firstName: 'FirstName', lastName: 'LastName' } as const; -export type ExampleGroupingDisabledType = - (typeof ExampleGroupingDisabledType)[keyof typeof ExampleGroupingDisabledType]; +export type ExampleGroupingDisabledType = (typeof ExampleGroupingDisabledType)[keyof typeof ExampleGroupingDisabledType]; export const ExampleColumnFractionalWidthType = { default: 'Default', @@ -33,5 +30,4 @@ export const ExampleColumnFractionalWidthType = { firstColumTwiceSize: 'FirstColumnTwiceSize', thirdColumnHalfFourthColumnTwice: 'ThirdColumnHalfFourthColumnTwice' } as const; -export type ExampleColumnFractionalWidthType = - (typeof ExampleColumnFractionalWidthType)[keyof typeof ExampleColumnFractionalWidthType]; +export type ExampleColumnFractionalWidthType = (typeof ExampleColumnFractionalWidthType)[keyof typeof ExampleColumnFractionalWidthType]; diff --git a/packages/nimble-components/src/table-column/base/types.ts b/packages/nimble-components/src/table-column/base/types.ts index c7ebb215bc..7afd26183a 100644 --- a/packages/nimble-components/src/table-column/base/types.ts +++ b/packages/nimble-components/src/table-column/base/types.ts @@ -5,7 +5,7 @@ import type { ValidityObject } from '../../utilities/models/validator'; * An object whose fields are defined by a particular TableColumn, which is used by the column's * cellTemplate implementation. */ -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface TableCellRecord extends TableRecord {} export interface TableCellState< @@ -38,10 +38,9 @@ export const TableColumnSortOperation = { */ localeAwareCaseSensitive: 'localeAwareCaseSensitive' } as const; -export type TableColumnSortOperation = - (typeof TableColumnSortOperation)[keyof typeof TableColumnSortOperation]; +export type TableColumnSortOperation = (typeof TableColumnSortOperation)[keyof typeof TableColumnSortOperation]; -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface TableColumnValidity extends ValidityObject {} const columnIconSize = 16; // `iconSize` token diff --git a/packages/nimble-components/src/table-column/date-text/index.ts b/packages/nimble-components/src/table-column/date-text/index.ts index 80b44b06e0..89eae4ea3e 100644 --- a/packages/nimble-components/src/table-column/date-text/index.ts +++ b/packages/nimble-components/src/table-column/date-text/index.ts @@ -255,7 +255,7 @@ export class TableColumnDateText extends mixinTextBase( } try { return new Intl.DateTimeFormat(lang.getValueFor(this), options); - } catch (e) { + } catch (_e) { return undefined; } } diff --git a/packages/nimble-components/src/table-column/date-text/models/format-helper.ts b/packages/nimble-components/src/table-column/date-text/models/format-helper.ts index be0ba0eab4..6d5d047a3c 100644 --- a/packages/nimble-components/src/table-column/date-text/models/format-helper.ts +++ b/packages/nimble-components/src/table-column/date-text/models/format-helper.ts @@ -7,7 +7,7 @@ export function formatNumericDate( if (typeof date === 'number') { try { return formatter.format(date); - } catch (e) { + } catch (_e) { return ''; } } else { diff --git a/packages/nimble-components/src/table-column/date-text/types.ts b/packages/nimble-components/src/table-column/date-text/types.ts index d8f7e1c39d..51c8649d80 100644 --- a/packages/nimble-components/src/table-column/date-text/types.ts +++ b/packages/nimble-components/src/table-column/date-text/types.ts @@ -5,11 +5,9 @@ export const DateTextFormat = { default: undefined, custom: 'custom' } as const; -export type DateTextFormat = - (typeof DateTextFormat)[keyof typeof DateTextFormat]; +export type DateTextFormat = (typeof DateTextFormat)[keyof typeof DateTextFormat]; -export type LocaleMatcherAlgorithm = - Intl.DateTimeFormatOptions['localeMatcher']; +export type LocaleMatcherAlgorithm = Intl.DateTimeFormatOptions['localeMatcher']; export type WeekdayFormat = Intl.DateTimeFormatOptions['weekday']; export type EraFormat = Intl.DateTimeFormatOptions['era']; export type YearFormat = Intl.DateTimeFormatOptions['year']; @@ -19,8 +17,7 @@ export type HourFormat = Intl.DateTimeFormatOptions['hour']; export type MinuteFormat = Intl.DateTimeFormatOptions['minute']; export type SecondFormat = Intl.DateTimeFormatOptions['second']; export type TimeZoneNameFormat = Intl.DateTimeFormatOptions['timeZoneName']; -export type FormatMatcherAlgorithm = - Intl.DateTimeFormatOptions['formatMatcher']; +export type FormatMatcherAlgorithm = Intl.DateTimeFormatOptions['formatMatcher']; export type DayPeriodFormat = Intl.DateTimeFormatOptions['dayPeriod']; export type DateStyle = Intl.DateTimeFormatOptions['dateStyle']; export type TimeStyle = Intl.DateTimeFormatOptions['timeStyle']; diff --git a/packages/nimble-components/src/table-column/enum-base/index.ts b/packages/nimble-components/src/table-column/enum-base/index.ts index e56a279ea3..8c8ef0ea04 100644 --- a/packages/nimble-components/src/table-column/enum-base/index.ts +++ b/packages/nimble-components/src/table-column/enum-base/index.ts @@ -19,8 +19,7 @@ import { resolveKeyWithType } from './models/mapping-key-resolver'; import type { TableColumnEnumBaseValidator } from './models/table-column-enum-base-validator'; import type { TableColumnTextBaseColumnConfig } from '../text-base/cell-view'; -export type TableColumnEnumCellRecord = - | TableStringField<'value'> +export type TableColumnEnumCellRecord = | TableStringField<'value'> | TableBooleanField<'value'> | TableNumberField<'value'>; export type MappingConfigs = Map; diff --git a/packages/nimble-components/src/table-column/enum-base/types.ts b/packages/nimble-components/src/table-column/enum-base/types.ts index 6159447ebc..e5d7b53397 100644 --- a/packages/nimble-components/src/table-column/enum-base/types.ts +++ b/packages/nimble-components/src/table-column/enum-base/types.ts @@ -7,5 +7,4 @@ export const MappingKeyType = { number: 'number', boolean: 'boolean' } as const; -export type MappingKeyType = - (typeof MappingKeyType)[keyof typeof MappingKeyType]; +export type MappingKeyType = (typeof MappingKeyType)[keyof typeof MappingKeyType]; diff --git a/packages/nimble-components/src/table-column/mapping/types.ts b/packages/nimble-components/src/table-column/mapping/types.ts index 6b8502a416..098a43bb06 100644 --- a/packages/nimble-components/src/table-column/mapping/types.ts +++ b/packages/nimble-components/src/table-column/mapping/types.ts @@ -5,5 +5,4 @@ export const TableColumnMappingWidthMode = { default: undefined, iconSize: 'icon-size' } as const; -export type TableColumnMappingWidthMode = - (typeof TableColumnMappingWidthMode)[keyof typeof TableColumnMappingWidthMode]; +export type TableColumnMappingWidthMode = (typeof TableColumnMappingWidthMode)[keyof typeof TableColumnMappingWidthMode]; diff --git a/packages/nimble-components/src/table-column/menu-button/tests/table-column-menu-button.spec.ts b/packages/nimble-components/src/table-column/menu-button/tests/table-column-menu-button.spec.ts index 24f63f1dcd..e05ea41583 100644 --- a/packages/nimble-components/src/table-column/menu-button/tests/table-column-menu-button.spec.ts +++ b/packages/nimble-components/src/table-column/menu-button/tests/table-column-menu-button.spec.ts @@ -500,11 +500,11 @@ describe('TableColumnMenuButton', () => { async function openMenuAndListenForColumnToggleEvents( menuButtonToOpen: MenuButtonPageObject ): Promise<{ - column1BeforeToggleEmitCount: number, - column1ToggleEmitCount: number, - column2BeforeToggleEmitCount: number, - column2ToggleEmitCount: number - }> { + column1BeforeToggleEmitCount: number, + column1ToggleEmitCount: number, + column2BeforeToggleEmitCount: number, + column2ToggleEmitCount: number + }> { const column1BeforeToggleSpy = jasmine.createSpy(); elementReferences.column1.addEventListener( 'menu-button-column-beforetoggle', diff --git a/packages/nimble-components/src/table-column/mixins/custom-sort-order.ts b/packages/nimble-components/src/table-column/mixins/custom-sort-order.ts index bd93ca979d..9c1bbdceb6 100644 --- a/packages/nimble-components/src/table-column/mixins/custom-sort-order.ts +++ b/packages/nimble-components/src/table-column/mixins/custom-sort-order.ts @@ -101,7 +101,7 @@ export function mixinCustomSortOrderColumnAPI< } attr({ attribute: 'sort-by-field-name' })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + CustomSortOrderColumn.prototype, 'sortByFieldName' ); diff --git a/packages/nimble-components/src/table-column/mixins/fractional-width-column.ts b/packages/nimble-components/src/table-column/mixins/fractional-width-column.ts index 878591775d..5b0d412ba1 100644 --- a/packages/nimble-components/src/table-column/mixins/fractional-width-column.ts +++ b/packages/nimble-components/src/table-column/mixins/fractional-width-column.ts @@ -32,12 +32,12 @@ export function mixinFractionalWidthColumnAPI< } attr({ attribute: 'fractional-width', converter: nullableNumberConverter })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + FractionalWidthColumn.prototype, 'fractionalWidth' ); attr({ attribute: 'min-pixel-width', converter: nullableNumberConverter })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + FractionalWidthColumn.prototype, 'minPixelWidth' ); diff --git a/packages/nimble-components/src/table-column/mixins/groupable-column.ts b/packages/nimble-components/src/table-column/mixins/groupable-column.ts index a74783bca7..5d6851a895 100644 --- a/packages/nimble-components/src/table-column/mixins/groupable-column.ts +++ b/packages/nimble-components/src/table-column/mixins/groupable-column.ts @@ -30,12 +30,12 @@ export function mixinGroupableColumnAPI< } } attr({ attribute: 'grouping-disabled', mode: 'boolean' })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + GroupableColumn.prototype, 'groupingDisabled' ); attr({ attribute: 'group-index', converter: nullableNumberConverter })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + GroupableColumn.prototype, 'groupIndex' ); diff --git a/packages/nimble-components/src/table-column/mixins/placeholder.ts b/packages/nimble-components/src/table-column/mixins/placeholder.ts index e0d3e974a7..f091d26837 100644 --- a/packages/nimble-components/src/table-column/mixins/placeholder.ts +++ b/packages/nimble-components/src/table-column/mixins/placeholder.ts @@ -24,7 +24,7 @@ export function mixinColumnWithPlaceholderAPI< public abstract placeholderChanged(): void; } attr({ attribute: 'placeholder' })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + ColumnWithPlaceholder.prototype, 'placeholder' ); diff --git a/packages/nimble-components/src/table-column/mixins/sortable-column.ts b/packages/nimble-components/src/table-column/mixins/sortable-column.ts index 7c49d1fa4e..a13c3c5f99 100644 --- a/packages/nimble-components/src/table-column/mixins/sortable-column.ts +++ b/packages/nimble-components/src/table-column/mixins/sortable-column.ts @@ -51,17 +51,17 @@ export function mixinSortableColumnAPI< } } attr({ attribute: 'sorting-disabled', mode: 'boolean' })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + SortableColumn.prototype, 'sortingDisabled' ); attr({ attribute: 'sort-index', converter: nullableNumberConverter })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + SortableColumn.prototype, 'sortIndex' ); attr({ attribute: 'sort-direction' })( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + SortableColumn.prototype, 'sortDirection' ); diff --git a/packages/nimble-components/src/table-column/number-text/models/number-text-unit-format.ts b/packages/nimble-components/src/table-column/number-text/models/number-text-unit-format.ts index 3b9cb18429..e0774316d4 100644 --- a/packages/nimble-components/src/table-column/number-text/models/number-text-unit-format.ts +++ b/packages/nimble-components/src/table-column/number-text/models/number-text-unit-format.ts @@ -12,8 +12,8 @@ export interface NumberTextUnitFormatOptions extends UnitFormatOptions { decimalDigits?: number; decimalMaximumDigits?: number; } -type ResolvedNumberTextUnitFormatOptions = NumberTextUnitFormatOptions & - Required; +type ResolvedNumberTextUnitFormatOptions = NumberTextUnitFormatOptions + & Required; /** * Format for numbers (with optional units) in a number-text table column. diff --git a/packages/nimble-components/src/table-column/number-text/types.ts b/packages/nimble-components/src/table-column/number-text/types.ts index a8d9261465..b12f8305c1 100644 --- a/packages/nimble-components/src/table-column/number-text/types.ts +++ b/packages/nimble-components/src/table-column/number-text/types.ts @@ -5,8 +5,7 @@ export const NumberTextFormat = { default: undefined, decimal: 'decimal' } as const; -export type NumberTextFormat = - (typeof NumberTextFormat)[keyof typeof NumberTextFormat]; +export type NumberTextFormat = (typeof NumberTextFormat)[keyof typeof NumberTextFormat]; /** * The aligment of the value in the number-text table column. @@ -17,5 +16,4 @@ export const NumberTextAlignment = { left: 'left', right: 'right' } as const; -export type NumberTextAlignment = - (typeof NumberTextAlignment)[keyof typeof NumberTextAlignment]; +export type NumberTextAlignment = (typeof NumberTextAlignment)[keyof typeof NumberTextAlignment]; diff --git a/packages/nimble-components/src/table-column/text-base/group-header-view/index.ts b/packages/nimble-components/src/table-column/text-base/group-header-view/index.ts index ca232eee21..9321319db4 100644 --- a/packages/nimble-components/src/table-column/text-base/group-header-view/index.ts +++ b/packages/nimble-components/src/table-column/text-base/group-header-view/index.ts @@ -31,18 +31,18 @@ export abstract class TableColumnTextGroupHeaderViewBase< private readonly noValuePlaceholderLabelSubscriber: DesignTokenSubscriber< typeof tableGroupRowPlaceholderNoValueLabel > = { - handleChange: () => { - this.applyPlaceholderTextIfNeeded(); - } - }; + handleChange: () => { + this.applyPlaceholderTextIfNeeded(); + } + }; private readonly emptyPlaceholderLabelSubscriber: DesignTokenSubscriber< typeof tableGroupRowPlaceholderEmptyLabel > = { - handleChange: () => { - this.applyPlaceholderTextIfNeeded(); - } - }; + handleChange: () => { + this.applyPlaceholderTextIfNeeded(); + } + }; public override connectedCallback(): void { super.connectedCallback(); diff --git a/packages/nimble-components/src/table-column/text-base/index.ts b/packages/nimble-components/src/table-column/text-base/index.ts index c42768a586..bcfd905369 100644 --- a/packages/nimble-components/src/table-column/text-base/index.ts +++ b/packages/nimble-components/src/table-column/text-base/index.ts @@ -30,7 +30,7 @@ type TableColumnBaseConstructor< ...args: any[] ) => TableColumnTextBase; -// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type, @typescript-eslint/no-explicit-any +// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/explicit-function-return-type export function mixinTextBase< TBase extends TableColumnBaseConstructor, TColumnConfig, diff --git a/packages/nimble-components/src/table-column/text/index.ts b/packages/nimble-components/src/table-column/text/index.ts index 77b4f02c92..8957385b8d 100644 --- a/packages/nimble-components/src/table-column/text/index.ts +++ b/packages/nimble-components/src/table-column/text/index.ts @@ -13,7 +13,7 @@ import { TableColumnTextValidator } from './models/table-column-text-validator'; export type TableColumnTextCellRecord = TableStringField<'value'>; -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface TableColumnTextColumnConfig extends TableColumnTextBaseColumnConfig {} diff --git a/packages/nimble-components/src/table/components/row/index.ts b/packages/nimble-components/src/table/components/row/index.ts index 52e47ed220..24ab729312 100644 --- a/packages/nimble-components/src/table/components/row/index.ts +++ b/packages/nimble-components/src/table/components/row/index.ts @@ -35,7 +35,7 @@ declare global { } /** Represents a single row (element) in the Table's data */ -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type export interface TableDataRecord extends TableRecord {} /** diff --git a/packages/nimble-components/src/table/index.ts b/packages/nimble-components/src/table/index.ts index c326521555..a551e67627 100644 --- a/packages/nimble-components/src/table/index.ts +++ b/packages/nimble-components/src/table/index.ts @@ -290,18 +290,18 @@ export class Table< private readonly borderWidthSubscriber: DesignTokenSubscriber< typeof borderWidth > = { - handleChange: () => { - this.updateRowHeight(); - } - }; + handleChange: () => { + this.updateRowHeight(); + } + }; private readonly controlHeightSubscriber: DesignTokenSubscriber< typeof controlHeight > = { - handleChange: () => { - this.updateRowHeight(); - } - }; + handleChange: () => { + this.updateRowHeight(); + } + }; private actionMenuSlots: string[] = []; @@ -1322,9 +1322,9 @@ export class Table< private calculateTanStackRowIdFunction(): | (( - originalRow: TableNode, - index: number, - parent?: TanStackRow> + originalRow: TableNode, + index: number, + parent?: TanStackRow> ) => string) | undefined { return this.idFieldName === null || this.idFieldName === undefined diff --git a/packages/nimble-components/src/table/tests/table-delegated-events.spec.ts b/packages/nimble-components/src/table/tests/table-delegated-events.spec.ts index 1c433dc027..243d9bc268 100644 --- a/packages/nimble-components/src/table/tests/table-delegated-events.spec.ts +++ b/packages/nimble-components/src/table/tests/table-delegated-events.spec.ts @@ -22,7 +22,7 @@ const columnName = uniqueElementName(); @customElement({ name: columnName }) -// eslint-disable-next-line @typescript-eslint/no-unused-vars + class TestTableColumn extends TableColumn { protected override getColumnInternalsOptions(): ColumnInternalsOptions { return { diff --git a/packages/nimble-components/src/table/tests/table-keyboard-navigation.spec.ts b/packages/nimble-components/src/table/tests/table-keyboard-navigation.spec.ts index 23fc12e027..79e6934138 100644 --- a/packages/nimble-components/src/table/tests/table-keyboard-navigation.spec.ts +++ b/packages/nimble-components/src/table/tests/table-keyboard-navigation.spec.ts @@ -1238,7 +1238,7 @@ describe('Table keyboard navigation', () => { name: interactiveCellViewName, template: html`Test` }) - // eslint-disable-next-line @typescript-eslint/no-unused-vars + class TestInteractiveCellView extends TableCellView { @observable public spanElement!: HTMLSpanElement; diff --git a/packages/nimble-components/src/table/tests/table.spec.ts b/packages/nimble-components/src/table/tests/table.spec.ts index 47c8ef7603..4779ecb095 100644 --- a/packages/nimble-components/src/table/tests/table.spec.ts +++ b/packages/nimble-components/src/table/tests/table.spec.ts @@ -697,7 +697,7 @@ describe('Table', () => { >${x => x.text}` }) - // eslint-disable-next-line @typescript-eslint/no-unused-vars + class TestFocusableCellView extends TableColumnTextCellView { public override get tabbableChildren(): HTMLElement[] { return [this.shadowRoot!.firstElementChild as HTMLElement]; diff --git a/packages/nimble-components/src/table/tests/types.ts b/packages/nimble-components/src/table/tests/types.ts index 630b657a68..36c9ebd9f5 100644 --- a/packages/nimble-components/src/table/tests/types.ts +++ b/packages/nimble-components/src/table/tests/types.ts @@ -3,5 +3,4 @@ export const ExampleDataType = { largeDataSet: 'LargeDataSet', hierarchicalDataSet: 'HierarchicalDataSet' } as const; -export type ExampleDataType = - (typeof ExampleDataType)[keyof typeof ExampleDataType]; +export type ExampleDataType = (typeof ExampleDataType)[keyof typeof ExampleDataType]; diff --git a/packages/nimble-components/src/table/types.ts b/packages/nimble-components/src/table/types.ts index 66051684b0..d1d650db97 100644 --- a/packages/nimble-components/src/table/types.ts +++ b/packages/nimble-components/src/table/types.ts @@ -101,8 +101,7 @@ export const TableRecordDelayedHierarchyState = { canLoadChildren: 'can-load-children', loadingChildren: 'loading-children' } as const; -export type TableRecordDelayedHierarchyState = - (typeof TableRecordDelayedHierarchyState)[keyof typeof TableRecordDelayedHierarchyState]; +export type TableRecordDelayedHierarchyState = (typeof TableRecordDelayedHierarchyState)[keyof typeof TableRecordDelayedHierarchyState]; export interface TableActionMenuToggleEventDetail { newState: boolean; @@ -119,8 +118,7 @@ export const TableColumnSortDirection = { ascending: 'ascending', descending: 'descending' } as const; -export type TableColumnSortDirection = - (typeof TableColumnSortDirection)[keyof typeof TableColumnSortDirection]; +export type TableColumnSortDirection = (typeof TableColumnSortDirection)[keyof typeof TableColumnSortDirection]; /** * The selection modes of rows in the table. @@ -130,8 +128,7 @@ export const TableRowSelectionMode = { single: 'single', multiple: 'multiple' } as const; -export type TableRowSelectionMode = - (typeof TableRowSelectionMode)[keyof typeof TableRowSelectionMode]; +export type TableRowSelectionMode = (typeof TableRowSelectionMode)[keyof typeof TableRowSelectionMode]; /** * @internal @@ -143,8 +140,7 @@ export const TableRowSelectionState = { selected: 'selected', partiallySelected: 'partially-selected' } as const; -export type TableRowSelectionState = - (typeof TableRowSelectionState)[keyof typeof TableRowSelectionState]; +export type TableRowSelectionState = (typeof TableRowSelectionState)[keyof typeof TableRowSelectionState]; /** * @internal @@ -227,8 +223,7 @@ export const TableColumnAlignment = { left: 'left', right: 'right' } as const; -export type TableColumnAlignment = - (typeof TableColumnAlignment)[keyof typeof TableColumnAlignment]; +export type TableColumnAlignment = (typeof TableColumnAlignment)[keyof typeof TableColumnAlignment]; /** * Table keyboard focus types @@ -243,8 +238,7 @@ export const TableFocusType = { cellActionMenu: 'cellActionMenu', cellContent: 'cellContent' } as const; -export type TableFocusType = - (typeof TableFocusType)[keyof typeof TableFocusType]; +export type TableFocusType = (typeof TableFocusType)[keyof typeof TableFocusType]; /** * @internal diff --git a/packages/nimble-components/src/text-area/types.ts b/packages/nimble-components/src/text-area/types.ts index 3a4f5c8f10..1a96de66f0 100644 --- a/packages/nimble-components/src/text-area/types.ts +++ b/packages/nimble-components/src/text-area/types.ts @@ -6,5 +6,4 @@ export const TextAreaAppearance = { outline: 'outline', block: 'block' } as const; -export type TextAreaAppearance = - (typeof TextAreaAppearance)[keyof typeof TextAreaAppearance]; +export type TextAreaAppearance = (typeof TextAreaAppearance)[keyof typeof TextAreaAppearance]; diff --git a/packages/nimble-components/src/text-field/types.ts b/packages/nimble-components/src/text-field/types.ts index bf4c7d6f98..30a5ef7248 100644 --- a/packages/nimble-components/src/text-field/types.ts +++ b/packages/nimble-components/src/text-field/types.ts @@ -15,5 +15,4 @@ export const TextFieldAppearance = { frameless: 'frameless' } as const; -export type TextFieldAppearance = - (typeof TextFieldAppearance)[keyof typeof TextFieldAppearance]; +export type TextFieldAppearance = (typeof TextFieldAppearance)[keyof typeof TextFieldAppearance]; diff --git a/packages/nimble-components/src/theme-provider/design-tokens.ts b/packages/nimble-components/src/theme-provider/design-tokens.ts index 7614bbe095..bf67202555 100644 --- a/packages/nimble-components/src/theme-provider/design-tokens.ts +++ b/packages/nimble-components/src/theme-provider/design-tokens.ts @@ -1046,14 +1046,14 @@ function createFontTokens( size: string, lineHeight: string ): readonly [ - CSSDesignToken, - CSSDesignToken, - CSSDesignToken, - CSSDesignToken, - CSSDesignToken, - CSSDesignToken, - CSSDesignToken - ] { + CSSDesignToken, + CSSDesignToken, + CSSDesignToken, + CSSDesignToken, + CSSDesignToken, + CSSDesignToken, + CSSDesignToken +] { if ( fontTokenName === '' || family === '' diff --git a/packages/nimble-components/src/theme-provider/index.ts b/packages/nimble-components/src/theme-provider/index.ts index dc1d589156..0aa0793351 100644 --- a/packages/nimble-components/src/theme-provider/index.ts +++ b/packages/nimble-components/src/theme-provider/index.ts @@ -25,7 +25,7 @@ function isValidLang(value: string): boolean { // eslint-disable-next-line no-new new Intl.Locale(value); return true; - } catch (e) { + } catch (_e) { return false; } } diff --git a/packages/nimble-components/src/theme-provider/tests/types.ts b/packages/nimble-components/src/theme-provider/tests/types.ts index e1afcd356d..8f415e0709 100644 --- a/packages/nimble-components/src/theme-provider/tests/types.ts +++ b/packages/nimble-components/src/theme-provider/tests/types.ts @@ -2,5 +2,4 @@ export const PropertyFormat = { scss: 'SCSS', css: 'CSS' } as const; -export type PropertyFormat = - (typeof PropertyFormat)[keyof typeof PropertyFormat]; +export type PropertyFormat = (typeof PropertyFormat)[keyof typeof PropertyFormat]; diff --git a/packages/nimble-components/src/tooltip/types.ts b/packages/nimble-components/src/tooltip/types.ts index 28c11e38da..e7eabcaaba 100644 --- a/packages/nimble-components/src/tooltip/types.ts +++ b/packages/nimble-components/src/tooltip/types.ts @@ -8,5 +8,4 @@ export const TooltipSeverity = { information: 'information' } as const; -export type TooltipSeverity = - (typeof TooltipSeverity)[keyof typeof TooltipSeverity]; +export type TooltipSeverity = (typeof TooltipSeverity)[keyof typeof TooltipSeverity]; diff --git a/packages/nimble-components/src/tree-view/types.ts b/packages/nimble-components/src/tree-view/types.ts index 2854079141..88b14d1aaa 100644 --- a/packages/nimble-components/src/tree-view/types.ts +++ b/packages/nimble-components/src/tree-view/types.ts @@ -6,5 +6,4 @@ export const TreeViewSelectionMode = { leavesOnly: 'leaves-only', none: 'none' } as const; -export type TreeViewSelectionMode = - (typeof TreeViewSelectionMode)[keyof typeof TreeViewSelectionMode]; +export type TreeViewSelectionMode = (typeof TreeViewSelectionMode)[keyof typeof TreeViewSelectionMode]; diff --git a/packages/nimble-components/src/utilities/style/tests/types.ts b/packages/nimble-components/src/utilities/style/tests/types.ts index 3e6d027381..f76039206c 100644 --- a/packages/nimble-components/src/utilities/style/tests/types.ts +++ b/packages/nimble-components/src/utilities/style/tests/types.ts @@ -3,5 +3,4 @@ export const TestAppearance = { awesome: 'awesome', best: 'best' } as const; -export type TestAppearance = - (typeof TestAppearance)[keyof typeof TestAppearance]; +export type TestAppearance = (typeof TestAppearance)[keyof typeof TestAppearance]; diff --git a/packages/nimble-components/src/utilities/unit-format/default-unit-format.ts b/packages/nimble-components/src/utilities/unit-format/default-unit-format.ts index e4abc8d59c..d2c1022dbb 100644 --- a/packages/nimble-components/src/utilities/unit-format/default-unit-format.ts +++ b/packages/nimble-components/src/utilities/unit-format/default-unit-format.ts @@ -9,7 +9,7 @@ import { passthroughUnitScale } from './unit-scale/passthrough-unit-scale'; const signDisplay = 'negative' as Intl.NumberFormatOptions['signDisplay']; // Allow consistent pattern for defining Options and ResolvedOptions -// eslint-disable-next-line @typescript-eslint/no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-object-type interface DefaultUnitFormatOptions extends UnitFormatOptions {} type ResolvedDefaultUnitFormatOptions = Required; diff --git a/packages/nimble-components/src/wafer-map/types.ts b/packages/nimble-components/src/wafer-map/types.ts index 76c8031150..125599de39 100644 --- a/packages/nimble-components/src/wafer-map/types.ts +++ b/packages/nimble-components/src/wafer-map/types.ts @@ -7,8 +7,7 @@ export const WaferMapOriginLocation = { topRight: 'top-right' } as const; -export type WaferMapOriginLocation = - (typeof WaferMapOriginLocation)[keyof typeof WaferMapOriginLocation]; +export type WaferMapOriginLocation = (typeof WaferMapOriginLocation)[keyof typeof WaferMapOriginLocation]; export const WaferMapOrientation = { top: 'top', @@ -17,24 +16,21 @@ export const WaferMapOrientation = { right: 'right' } as const; -export type WaferMapOrientation = - (typeof WaferMapOrientation)[keyof typeof WaferMapOrientation]; +export type WaferMapOrientation = (typeof WaferMapOrientation)[keyof typeof WaferMapOrientation]; export const HoverDieOpacity = { show: 'show', hide: 'hide' } as const; -export type HoverDieOpacity = - (typeof HoverDieOpacity)[keyof typeof HoverDieOpacity]; +export type HoverDieOpacity = (typeof HoverDieOpacity)[keyof typeof HoverDieOpacity]; export const WaferMapColorScaleMode = { linear: 'linear', ordinal: 'ordinal' } as const; -export type WaferMapColorScaleMode = - (typeof WaferMapColorScaleMode)[keyof typeof WaferMapColorScaleMode]; +export type WaferMapColorScaleMode = (typeof WaferMapColorScaleMode)[keyof typeof WaferMapColorScaleMode]; export interface WaferMapDie { value: string; diff --git a/packages/nimble-tokens/.eslintrc.cjs b/packages/nimble-tokens/.eslintrc.cjs deleted file mode 100644 index ff1dc6da51..0000000000 --- a/packages/nimble-tokens/.eslintrc.cjs +++ /dev/null @@ -1,43 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist', - 'dist/styledictionary/*', - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - parserOptions: { - ecmaVersion: '2022' - }, - }, - { - files: ['*.js'], - rules: { - 'import/extensions': ['error', - 'always', - { - ignorePackages: true, - } - ], - 'import/no-unresolved': ['error', - { - ignore: ['^style-dictionary$'], - } - ], - } - }, - { - files: ['source/styledictionary/*.cjs'], - rules: { - // Build scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - - // Okay to use console.log in build scripts - 'no-console': 'off', - } - } - ] -}; diff --git a/packages/nimble-tokens/build/.eslintrc.cjs b/packages/nimble-tokens/build/.eslintrc.cjs deleted file mode 100644 index b23c491b6b..0000000000 --- a/packages/nimble-tokens/build/.eslintrc.cjs +++ /dev/null @@ -1,9 +0,0 @@ -module.exports = { - rules: { - // Build scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - - // Okay to use console.log in build scripts - 'no-console': 'off', - } -}; diff --git a/packages/nimble-tokens/eslint.config.cjs b/packages/nimble-tokens/eslint.config.cjs new file mode 100644 index 0000000000..73df2ff4fc --- /dev/null +++ b/packages/nimble-tokens/eslint.config.cjs @@ -0,0 +1,52 @@ +// eslint-disable-next-line import/no-unresolved +const { defineConfig } = require('eslint/config'); +// eslint-disable-next-line import/no-extraneous-dependencies +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); + +module.exports = defineConfig([ + { + ignores: ['node_modules', '**/dist', '**/dist/styledictionary/*'], + }, + { + files: ['**/*.js', '**/*.cjs'], + extends: javascriptNimbleConfig, + }, + { + files: ['**/*.js'], + rules: { + 'import/extensions': [ + 'error', + 'always', + { + ignorePackages: true, + }, + ], + 'import/no-unresolved': [ + 'error', + { + ignore: ['^style-dictionary$'], + }, + ], + }, + }, + { + files: ['**/source/styledictionary/*.cjs'], + rules: { + // Build scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + + // Okay to use console.log in build scripts + 'no-console': 'off', + }, + }, + { + files: ['**/build/**'], + rules: { + // Build scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + + // Okay to use console.log in build scripts + 'no-console': 'off', + }, + }, +]); diff --git a/packages/ok-components/.eslintrc.js b/packages/ok-components/.eslintrc.js deleted file mode 100644 index e7975e347e..0000000000 --- a/packages/ok-components/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'] - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/components'], - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname - }, - } - ] -}; diff --git a/packages/ok-components/eslint.config.js b/packages/ok-components/eslint.config.js new file mode 100644 index 0000000000..ad97b0b8d4 --- /dev/null +++ b/packages/ok-components/eslint.config.js @@ -0,0 +1,26 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const componentsNimbleConfig = require('@ni-private/eslint-config-nimble/components'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ], + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig + }, + { + files: ['**/*.ts'], + extends: componentsNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + }, + } + } +]); diff --git a/packages/ok-components/package.json b/packages/ok-components/package.json index 92fc62639a..10bcb21746 100644 --- a/packages/ok-components/package.json +++ b/packages/ok-components/package.json @@ -4,7 +4,7 @@ "description": "NI Ok Components", "scripts": { "build": "npm run build-components && npm run bundle-components", - "lint": "npm run eslint && npm run prettier", + "lint": "npm run eslint", "format": "npm run prettier-fix", "eslint": "eslint .", "eslint-fix": "eslint . --fix", diff --git a/packages/performance/.eslintrc.cjs b/packages/performance/.eslintrc.cjs deleted file mode 100644 index f099995eb9..0000000000 --- a/packages/performance/.eslintrc.cjs +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname - } - }, - { - files: ['vite.config.js'], - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - } - ] -}; diff --git a/packages/performance/eslint.config.cjs b/packages/performance/eslint.config.cjs new file mode 100644 index 0000000000..b546f7445d --- /dev/null +++ b/packages/performance/eslint.config.cjs @@ -0,0 +1,34 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ], + }, + { + files: ['**/*.js', '**/*.cjs'], + extends: javascriptNimbleConfig, + }, + { + files: ['**/*.ts'], + extends: typescriptNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + } + } + }, + { + files: ['**/vite.config.js', '**/eslint.config.cjs'], + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + 'import/no-unresolved': 'off' + } + } +]); diff --git a/packages/react-workspace/nimble-react/.eslintrc.cjs b/packages/react-workspace/nimble-react/.eslintrc.cjs deleted file mode 100644 index 335e99eeb4..0000000000 --- a/packages/react-workspace/nimble-react/.eslintrc.cjs +++ /dev/null @@ -1,44 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - }, - { - files: ['build/**/*.js'], - rules: { - // Build scripts should give verbose logging - 'no-console': 'off', - // Rollup config files use default exports - 'import/no-default-export': 'off', - }, - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname - }, - rules: { - // The React components should use PascalCase - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'variable', - format: ['camelCase', 'PascalCase'] - }, - ], - } - } - ], -}; diff --git a/packages/react-workspace/nimble-react/eslint.config.js b/packages/react-workspace/nimble-react/eslint.config.js new file mode 100644 index 0000000000..c5aff535f3 --- /dev/null +++ b/packages/react-workspace/nimble-react/eslint.config.js @@ -0,0 +1,49 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ], + }, + { + files: ['**/*.js', '**/*.cjs'], + extends: javascriptNimbleConfig, + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + } + }, + { + files: ['**/build/**/*.js'], + rules: { + // Build scripts should give verbose logging + 'no-console': 'off', + // Rollup config files use default exports + 'import/no-default-export': 'off', + }, + }, + { + files: ['**/*.ts'], + extends: typescriptNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + }, + }, + rules: { + // The React components should use PascalCase + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'variable', + format: ['camelCase', 'PascalCase'] + }, + ], + } + } +]); diff --git a/packages/react-workspace/ok-react/.eslintrc.cjs b/packages/react-workspace/ok-react/.eslintrc.cjs deleted file mode 100644 index 9cfa73621c..0000000000 --- a/packages/react-workspace/ok-react/.eslintrc.cjs +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname - }, - rules: { - // The React components should use PascalCase - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'variable', - format: ['camelCase', 'PascalCase'] - }, - ], - } - } - ], -}; diff --git a/packages/react-workspace/ok-react/eslint.config.js b/packages/react-workspace/ok-react/eslint.config.js new file mode 100644 index 0000000000..a4f042a644 --- /dev/null +++ b/packages/react-workspace/ok-react/eslint.config.js @@ -0,0 +1,40 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ], + }, + { + files: ['**/*.js', '**/*.cjs'], + extends: javascriptNimbleConfig, + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + } + }, + { + files: ['**/*.ts'], + extends: typescriptNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + } + }, + rules: { + // The React components should use PascalCase + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'variable', + format: ['camelCase', 'PascalCase'] + }, + ], + } + } +]); diff --git a/packages/react-workspace/react-client-app/.eslintrc.cjs b/packages/react-workspace/react-client-app/.eslintrc.cjs deleted file mode 100644 index 6dd6710fb3..0000000000 --- a/packages/react-workspace/react-client-app/.eslintrc.cjs +++ /dev/null @@ -1,58 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - }, - { - files: ['*.ts', '*.tsx'], - extends: [ - '@ni-private/eslint-config-nimble/typescript', - 'plugin:react-hooks/recommended', - ], - plugins: [ - 'react-hooks', - 'react-refresh' - ], - parserOptions: { - project: 'tsconfig.app.json', - tsconfigRootDir: __dirname - }, - rules: { - // The React components should use PascalCase - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'variable', - format: ['camelCase', 'PascalCase'] - }, - ], - 'react-refresh/only-export-components': [ - 'error', - { allowConstantExport: true }, - ], - } - }, - { - files: ['vite.config.ts'], - parserOptions: { - project: 'tsconfig.node.json', - tsconfigRootDir: __dirname - }, - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - 'import/no-default-export': 'off', - } - }, - ], -}; diff --git a/packages/react-workspace/react-client-app/eslint.config.cjs b/packages/react-workspace/react-client-app/eslint.config.cjs new file mode 100644 index 0000000000..85ca81a838 --- /dev/null +++ b/packages/react-workspace/react-client-app/eslint.config.cjs @@ -0,0 +1,74 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); +const reactHooks = require('eslint-plugin-react-hooks'); +const reactRefresh = require('eslint-plugin-react-refresh'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ], + }, + { + files: ['**/*.js', '**/*.cjs'], + extends: javascriptNimbleConfig, + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + } + }, + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { + 'react-refresh': reactRefresh + }, + extends: [ + ...typescriptNimbleConfig, + reactHooks.configs['recommended-latest'], + ], + languageOptions: { + parserOptions: { + project: './tsconfig.app.json', + tsconfigRootDir: __dirname + }, + }, + rules: { + // The React components should use PascalCase + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'variable', + format: ['camelCase', 'PascalCase'] + }, + ], + 'react-refresh/only-export-components': [ + 'error', + { allowConstantExport: true }, + ], + '@typescript-eslint/strict-boolean-expressions': 'off', + } + }, + { + files: ['**/vite.config.ts'], + languageOptions: { + parserOptions: { + project: './tsconfig.node.json', + tsconfigRootDir: __dirname + }, + }, + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + 'import/no-default-export': 'off', + } + }, + { + files: ['**/eslint.config.cjs'], + rules: { + 'import/no-unresolved': 'off', + 'import/no-extraneous-dependencies': 'off' + } + } +]); diff --git a/packages/react-workspace/spright-react/.eslintrc.cjs b/packages/react-workspace/spright-react/.eslintrc.cjs deleted file mode 100644 index 9cfa73621c..0000000000 --- a/packages/react-workspace/spright-react/.eslintrc.cjs +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js', '*.cjs'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Configuration scripts will not be in published package and are allowed to use devDependencies - 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], - } - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname - }, - rules: { - // The React components should use PascalCase - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'variable', - format: ['camelCase', 'PascalCase'] - }, - ], - } - } - ], -}; diff --git a/packages/react-workspace/spright-react/eslint.config.js b/packages/react-workspace/spright-react/eslint.config.js new file mode 100644 index 0000000000..a9c141d6b5 --- /dev/null +++ b/packages/react-workspace/spright-react/eslint.config.js @@ -0,0 +1,40 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ] + }, + { + files: ['**/*.js', '**/*.cjs'], + extends: javascriptNimbleConfig, + rules: { + // Configuration scripts will not be in published package and are allowed to use devDependencies + 'import/no-extraneous-dependencies': ['error', { devDependencies: true }], + } + }, + { + files: ['**/*.ts'], + extends: typescriptNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + } + }, + rules: { + // The React components should use PascalCase + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'variable', + format: ['camelCase', 'PascalCase'] + }, + ], + } + } +]); diff --git a/packages/site/.eslintrc.js b/packages/site/.eslintrc.js deleted file mode 100644 index 19548e64b7..0000000000 --- a/packages/site/.eslintrc.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist', - // Force inclusion of config dot file - '!.eleventy.js', - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: ['./tsconfig.json'], - tsconfigRootDir: __dirname - }, - } - ] -}; diff --git a/packages/site/eslint.config.js b/packages/site/eslint.config.js new file mode 100644 index 0000000000..ee5093d963 --- /dev/null +++ b/packages/site/eslint.config.js @@ -0,0 +1,28 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**', + // Force inclusion of config dot file + '!**/*.eleventy.js', + ], + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig, + }, + { + files: ['**/*.ts'], + extends: typescriptNimbleConfig, + languageOptions: { + parserOptions: { + project: ['./tsconfig.json'], + tsconfigRootDir: __dirname, + }, + }, + }, +]); diff --git a/packages/spright-components/.eslintrc.js b/packages/spright-components/.eslintrc.js deleted file mode 100644 index e7975e347e..0000000000 --- a/packages/spright-components/.eslintrc.js +++ /dev/null @@ -1,21 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'] - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/components'], - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname - }, - } - ] -}; diff --git a/packages/spright-components/eslint.config.js b/packages/spright-components/eslint.config.js new file mode 100644 index 0000000000..dd5bce3f86 --- /dev/null +++ b/packages/spright-components/eslint.config.js @@ -0,0 +1,29 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const componentsNimbleConfig = require('@ni-private/eslint-config-nimble/components'); + +module.exports = defineConfig([ + { + ignores: ['node_modules', '**/dist/**'] + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig + }, + { + files: ['**/*.ts'], + extends: componentsNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + } + }, + rules: { + // Disable strict null checks + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off', + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off' + } + } +]); diff --git a/packages/spright-components/package.json b/packages/spright-components/package.json index d000065d0f..8a27f48699 100644 --- a/packages/spright-components/package.json +++ b/packages/spright-components/package.json @@ -4,7 +4,7 @@ "description": "NI Spright Components", "scripts": { "build": "npm run build-components && npm run bundle-components", - "lint": "npm run eslint && npm run prettier", + "lint": "npm run eslint", "format": "npm run prettier-fix", "eslint": "eslint .", "eslint-fix": "eslint . --fix", diff --git a/packages/spright-components/src/chat/conversation/types.ts b/packages/spright-components/src/chat/conversation/types.ts index c191383b17..a9ed83aeb2 100644 --- a/packages/spright-components/src/chat/conversation/types.ts +++ b/packages/spright-components/src/chat/conversation/types.ts @@ -7,5 +7,4 @@ export const ChatConversationAppearance = { overlay: 'overlay' } as const; -export type ChatConversationAppearance = - (typeof ChatConversationAppearance)[keyof typeof ChatConversationAppearance]; +export type ChatConversationAppearance = (typeof ChatConversationAppearance)[keyof typeof ChatConversationAppearance]; diff --git a/packages/spright-components/src/chat/message/types.ts b/packages/spright-components/src/chat/message/types.ts index e332d86832..f4f93e0ba8 100644 --- a/packages/spright-components/src/chat/message/types.ts +++ b/packages/spright-components/src/chat/message/types.ts @@ -8,5 +8,4 @@ export const ChatMessageType = { inbound: 'inbound' } as const; -export type ChatMessageType = - (typeof ChatMessageType)[keyof typeof ChatMessageType]; +export type ChatMessageType = (typeof ChatMessageType)[keyof typeof ChatMessageType]; diff --git a/packages/storybook/.eslintrc.js b/packages/storybook/.eslintrc.js deleted file mode 100644 index a75c8cf55c..0000000000 --- a/packages/storybook/.eslintrc.js +++ /dev/null @@ -1,72 +0,0 @@ -module.exports = { - settings: { - // Configure the `eslint-import-resolver-typescript` package to resolve `import/no-unresolved` eslint errors in JS files - // Per https://iifx.dev/en/articles/322441446 - 'import/resolver': { - typescript: {} // this loads /tsconfig.json to eslint - } - }, - root: true, - ignorePatterns: [ - 'node_modules', - 'dist', - // Force inclusion of storybook dot file hidden folder - '!/.storybook', - '/.storybook/blocks/StoryLayout.tsx', - 'src/nimble/icons' - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'], - rules: { - // Storybook tends to rely on default exports in plugins - 'import/no-default-export': 'off', - - // Storybook is not a published package and is allowed to use devDependencies - 'import/no-extraneous-dependencies': [ - 'error', - { devDependencies: true } - ] - } - }, - { - files: ['*.ts', '*.tsx'], - extends: [ - '@ni-private/eslint-config-nimble/components', - 'plugin:storybook/recommended' - ], - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname - }, - rules: { - // Storybook tends to rely on default exports in plugins - 'import/no-default-export': 'off', - - // Storybook is not a published package and is allowed to use devDependencies - 'import/no-extraneous-dependencies': [ - 'error', - { devDependencies: true } - ], - - // Disables a rule from storybook recommended we have not followed - // No reason we couldn't other than low ROI - 'storybook/prefer-pascal-case': 'off' - } - }, - { - files: ['build/**/*.js'], - rules: { - // Build scripts should give verbose logging - 'no-console': 'off' - } - }, - { - files: ['.storybook/*.js'], - env: { - browser: true - } - } - ] -}; diff --git a/packages/storybook/eslint.config.js b/packages/storybook/eslint.config.js new file mode 100644 index 0000000000..1a079da387 --- /dev/null +++ b/packages/storybook/eslint.config.js @@ -0,0 +1,87 @@ +// eslint-disable-next-line import/no-extraneous-dependencies +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const componentsNimbleConfig = require('@ni-private/eslint-config-nimble/components'); +const globals = require('globals'); +const storybook = require('eslint-plugin-storybook'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**', + // Force inclusion of storybook dot file hidden folder + '!**/.storybook', + '**/.storybook/blocks/StoryLayout.tsx', + '**/src/nimble/icons' + ] + }, + { + settings: { + // Configure the `eslint-import-resolver-typescript` package to resolve `import/no-unresolved` eslint errors in JS files + // Per https://iifx.dev/en/articles/322441446 + 'import/resolver': { + typescript: {} // this loads /tsconfig.json to eslint + } + } + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig, + rules: { + // Storybook tends to rely on default exports in plugins + 'import/no-default-export': 'off', + + // Storybook is not a published package and is allowed to use devDependencies + 'import/no-extraneous-dependencies': [ + 'error', + { devDependencies: true } + ] + } + }, + { + files: ['**/*.ts', '**/*.tsx'], + extends: [ + ...componentsNimbleConfig, + ...storybook.configs['flat/recommended'] + ], + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsConfigRootDir: __dirname + } + }, + rules: { + // Storybook tends to rely on default exports in plugins + 'import/no-default-export': 'off', + + // Storybook is not a published package and is allowed to use devDependencies + 'import/no-extraneous-dependencies': [ + 'error', + { devDependencies: true } + ], + + // Disables a rule from storybook recommended we have not followed + // No reason we couldn't other than low ROI + 'storybook/prefer-pascal-case': 'off', + '@typescript-eslint/no-unnecessary-boolean-literal-compare': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/strict-boolean-expressions': 'off' + } + }, + { + files: ['**/build/**/*.js'], + rules: { + // Build scripts should give verbose logging + 'no-console': 'off' + } + }, + { + files: ['**/.storybook/*.js'], + languageOptions: { + globals: { + ...globals.browser + } + } + } +]); diff --git a/packages/storybook/package.json b/packages/storybook/package.json index 014a93a2da..61650a5c7a 100644 --- a/packages/storybook/package.json +++ b/packages/storybook/package.json @@ -6,7 +6,7 @@ "scripts": { "build": "storybook build -o dist/storybook --webpack-stats-json", "start": "storybook dev --quiet -p 6006", - "lint": "npm run eslint && npm run prettier", + "lint": "npm run eslint", "format": "npm run prettier-fix", "eslint": "eslint .", "eslint-fix": "eslint . --fix", @@ -49,6 +49,7 @@ "apache-arrow": "21.0.0", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-storybook": "^9.1.10", - "flatbuffers": "25.2.10" + "flatbuffers": "25.2.10", + "globals": "^14.0.0" } } diff --git a/packages/storybook/src/docs/types.ts b/packages/storybook/src/docs/types.ts index fc097937a4..9ebc8a2664 100644 --- a/packages/storybook/src/docs/types.ts +++ b/packages/storybook/src/docs/types.ts @@ -4,5 +4,4 @@ export const ComponentFrameworkStatus = { incubating: 'incubating', doesNotExist: 'does_not_exist' } as const; -export type ComponentFrameworkStatus = - (typeof ComponentFrameworkStatus)[keyof typeof ComponentFrameworkStatus]; +export type ComponentFrameworkStatus = (typeof ComponentFrameworkStatus)[keyof typeof ComponentFrameworkStatus]; diff --git a/packages/storybook/src/nimble/breadcrumb/types.ts b/packages/storybook/src/nimble/breadcrumb/types.ts index ac1d2d4280..f3433c0442 100644 --- a/packages/storybook/src/nimble/breadcrumb/types.ts +++ b/packages/storybook/src/nimble/breadcrumb/types.ts @@ -3,5 +3,4 @@ export const ExampleBreadcrumbItemsType = { many: 'many', wide: 'wide' } as const; -export type ExampleBreadcrumbItemsType = - (typeof ExampleBreadcrumbItemsType)[keyof typeof ExampleBreadcrumbItemsType]; +export type ExampleBreadcrumbItemsType = (typeof ExampleBreadcrumbItemsType)[keyof typeof ExampleBreadcrumbItemsType]; diff --git a/packages/storybook/src/nimble/combobox/combobox-opened-matrix.stories.ts b/packages/storybook/src/nimble/combobox/combobox-opened-matrix.stories.ts index cfb7646400..f91c70b7a9 100644 --- a/packages/storybook/src/nimble/combobox/combobox-opened-matrix.stories.ts +++ b/packages/storybook/src/nimble/combobox/combobox-opened-matrix.stories.ts @@ -16,7 +16,7 @@ const metadata: Meta = { }; export default metadata; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const positionStates = Object.values(DropdownPosition); type PositionState = (typeof positionStates)[number]; diff --git a/packages/storybook/src/nimble/dialog/types.ts b/packages/storybook/src/nimble/dialog/types.ts index 853f20fec3..6dccd3adc6 100644 --- a/packages/storybook/src/nimble/dialog/types.ts +++ b/packages/storybook/src/nimble/dialog/types.ts @@ -2,19 +2,16 @@ export const ExampleContentType = { shortContent: 'ShortContent', longContent: 'LongContent' } as const; -export type ExampleContentType = - (typeof ExampleContentType)[keyof typeof ExampleContentType]; +export type ExampleContentType = (typeof ExampleContentType)[keyof typeof ExampleContentType]; export const ExampleFooterContentType = { text: 'text', buttons: 'buttons' } as const; -export type ExampleFooterContentType = - (typeof ExampleFooterContentType)[keyof typeof ExampleFooterContentType]; +export type ExampleFooterContentType = (typeof ExampleFooterContentType)[keyof typeof ExampleFooterContentType]; export const DialogSizeOptions = { smallGrowable: 'Small growable', largeFixed: 'Large growable' } as const; -export type DialogSizeOptions = - (typeof DialogSizeOptions)[keyof typeof DialogSizeOptions]; +export type DialogSizeOptions = (typeof DialogSizeOptions)[keyof typeof DialogSizeOptions]; diff --git a/packages/storybook/src/nimble/patterns/tabs/types.ts b/packages/storybook/src/nimble/patterns/tabs/types.ts index 52261e472a..55effb2caa 100644 --- a/packages/storybook/src/nimble/patterns/tabs/types.ts +++ b/packages/storybook/src/nimble/patterns/tabs/types.ts @@ -4,5 +4,4 @@ export const ExampleTabsType = { manyTabs: 'ManyTabs', wideTabs: 'WideTabs' } as const; -export type ExampleTabsType = - (typeof ExampleTabsType)[keyof typeof ExampleTabsType]; +export type ExampleTabsType = (typeof ExampleTabsType)[keyof typeof ExampleTabsType]; diff --git a/packages/storybook/src/nimble/rich-text/editor/rich-text-editor.stories.ts b/packages/storybook/src/nimble/rich-text/editor/rich-text-editor.stories.ts index 68f5a97832..c3b59af95e 100644 --- a/packages/storybook/src/nimble/rich-text/editor/rich-text-editor.stories.ts +++ b/packages/storybook/src/nimble/rich-text/editor/rich-text-editor.stories.ts @@ -27,7 +27,6 @@ import { validityDescription } from '../../../utilities/storybook'; -// eslint-disable-next-line @typescript-eslint/no-empty-interface interface RichTextEditorArgs extends LabelUserArgs { data: ExampleDataType; mentionData: MentionDataType; diff --git a/packages/storybook/src/nimble/select/select-opened-matrix.stories.ts b/packages/storybook/src/nimble/select/select-opened-matrix.stories.ts index 0ca3178ee1..1bf3fbc533 100644 --- a/packages/storybook/src/nimble/select/select-opened-matrix.stories.ts +++ b/packages/storybook/src/nimble/select/select-opened-matrix.stories.ts @@ -18,22 +18,22 @@ const metadata: Meta = { }; export default metadata; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const positionStates = Object.values(DropdownPosition); type PositionState = (typeof positionStates)[number]; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const filterModeStates = Object.values(FilterMode); type FilterModeState = (typeof filterModeStates)[number]; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const loadingVisibleStates = [false, true] as const; type LoadingVisibleState = (typeof loadingVisibleStates)[number]; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const placeholderStates = [false, true] as const; type PlaceholderState = (typeof placeholderStates)[number]; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const groupedStates = [false, true] as const; type GroupedState = (typeof groupedStates)[number]; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const optionsOutsideGroupStates = [false, true] as const; type OptionsOutsideGroupState = (typeof optionsOutsideGroupStates)[number]; diff --git a/packages/storybook/src/nimble/select/types.ts b/packages/storybook/src/nimble/select/types.ts index 3c0b1e9310..97167d422a 100644 --- a/packages/storybook/src/nimble/select/types.ts +++ b/packages/storybook/src/nimble/select/types.ts @@ -5,5 +5,4 @@ export const ExampleOptionsType = { manyOptions: 'ManyOptions', groupedOptions: 'GroupedOptions' } as const; -export type ExampleOptionsType = - (typeof ExampleOptionsType)[keyof typeof ExampleOptionsType]; +export type ExampleOptionsType = (typeof ExampleOptionsType)[keyof typeof ExampleOptionsType]; diff --git a/packages/storybook/src/nimble/table-column/base/table-column-stories-utils.ts b/packages/storybook/src/nimble/table-column/base/table-column-stories-utils.ts index bcc9e4fec1..ac8df93d48 100644 --- a/packages/storybook/src/nimble/table-column/base/table-column-stories-utils.ts +++ b/packages/storybook/src/nimble/table-column/base/table-column-stories-utils.ts @@ -31,10 +31,10 @@ export const sharedTableArgTypes = { export const sharedTableArgs = ( data: readonly TableRecord[] ): { - selectionMode: keyof typeof TableRowSelectionMode, - tableRef: undefined, - updateData: (x: SharedTableArgs) => void - } => { + selectionMode: keyof typeof TableRowSelectionMode, + tableRef: undefined, + updateData: (x: SharedTableArgs) => void +} => { return { selectionMode: 'none', tableRef: undefined, diff --git a/packages/storybook/src/nimble/table/table-matrix.stories.ts b/packages/storybook/src/nimble/table/table-matrix.stories.ts index 7abd216d3c..c987fa6cbe 100644 --- a/packages/storybook/src/nimble/table/table-matrix.stories.ts +++ b/packages/storybook/src/nimble/table/table-matrix.stories.ts @@ -82,7 +82,7 @@ const data = [ parentId: '' } ] as const; - +// eslint-disable-next-line @typescript-eslint/no-unused-vars const selectionModeStates = Object.values(TableRowSelectionMode); type SelectionModeState = (typeof selectionModeStates)[number]; diff --git a/packages/storybook/src/utilities/matrix.ts b/packages/storybook/src/utilities/matrix.ts index 73d7b8803d..7f8639d633 100644 --- a/packages/storybook/src/utilities/matrix.ts +++ b/packages/storybook/src/utilities/matrix.ts @@ -46,7 +46,7 @@ export function cartesianProduct( // TypeScript and ESLint disagree about whether this can be null or undefined. // This was the only type strangeness noticed after the storybook build was changed // to rely on component source directly so the workaround was allowed. - // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + const currentDimension = currentDimensionOrUndefined!; for (const currentState of currentDimension) { recurseDimensions(remainingDimensions, ...states, currentState); diff --git a/packages/xliff-to-json-converter/.eslintrc.js b/packages/xliff-to-json-converter/.eslintrc.js deleted file mode 100644 index ea90de3163..0000000000 --- a/packages/xliff-to-json-converter/.eslintrc.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - root: true, - ignorePatterns: [ - 'node_modules', - 'dist' - ], - overrides: [ - { - files: ['*.js'], - extends: ['@ni-private/eslint-config-nimble/javascript'] - }, - { - files: ['*.ts'], - extends: ['@ni-private/eslint-config-nimble/typescript'], - parserOptions: { - project: 'tsconfig.json', - tsconfigRootDir: __dirname - }, - rules: { - // This is a command line app so printing to console to show progress is desirable - 'no-console': 'off', - }, - } - ] -}; diff --git a/packages/xliff-to-json-converter/eslint.config.js b/packages/xliff-to-json-converter/eslint.config.js new file mode 100644 index 0000000000..a28f1630df --- /dev/null +++ b/packages/xliff-to-json-converter/eslint.config.js @@ -0,0 +1,30 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const typescriptNimbleConfig = require('@ni-private/eslint-config-nimble/typescript'); + +module.exports = defineConfig([ + { + ignores: [ + 'node_modules', + '**/dist/**' + ], + }, + { + files: ['**/*.js'], + extends: javascriptNimbleConfig + }, + { + files: ['**/*.ts'], + extends: typescriptNimbleConfig, + languageOptions: { + parserOptions: { + project: './tsconfig.json', + tsconfigRootDir: __dirname + }, + }, + rules: { + // This is a command line app so printing to console to show progress is desirable + 'no-console': 'off', + }, + } +]); diff --git a/packages/xliff-to-json-converter/src/xliff.d.ts b/packages/xliff-to-json-converter/src/xliff.d.ts index 46c044b6cf..d91551a5d4 100644 --- a/packages/xliff-to-json-converter/src/xliff.d.ts +++ b/packages/xliff-to-json-converter/src/xliff.d.ts @@ -6,7 +6,6 @@ declare module 'xliff' { // eslint-disable-next-line @typescript-eslint/naming-convention readonly Standalone: { readonly id: string, - // eslint-disable-next-line @typescript-eslint/naming-convention readonly 'equiv-text': string }; }