diff --git a/change/@ni-jasmine-parameterized-6c99369c-d30b-42ad-a468-fe1ff92ddb2c.json b/change/@ni-jasmine-parameterized-6c99369c-d30b-42ad-a468-fe1ff92ddb2c.json new file mode 100644 index 0000000000..b2469a1adb --- /dev/null +++ b/change/@ni-jasmine-parameterized-6c99369c-d30b-42ad-a468-fe1ff92ddb2c.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-937e837a-be00-4a16-903c-eeb28cb80ece.json b/change/@ni-nimble-angular-937e837a-be00-4a16-903c-eeb28cb80ece.json new file mode 100644 index 0000000000..4d6b0b6fdc --- /dev/null +++ b/change/@ni-nimble-angular-937e837a-be00-4a16-903c-eeb28cb80ece.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-e929d5b5-c2c0-4bad-806d-11da32c128a1.json b/change/@ni-nimble-components-e929d5b5-c2c0-4bad-806d-11da32c128a1.json new file mode 100644 index 0000000000..6eb3c8ff41 --- /dev/null +++ b/change/@ni-nimble-components-e929d5b5-c2c0-4bad-806d-11da32c128a1.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-e8da0210-a00f-4054-9cbf-b71956d06c73.json b/change/@ni-nimble-react-e8da0210-a00f-4054-9cbf-b71956d06c73.json new file mode 100644 index 0000000000..50a9799390 --- /dev/null +++ b/change/@ni-nimble-react-e8da0210-a00f-4054-9cbf-b71956d06c73.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-a1709922-af92-4354-abd5-8c978855ec81.json b/change/@ni-nimble-tokens-a1709922-af92-4354-abd5-8c978855ec81.json new file mode 100644 index 0000000000..ee0f64cb56 --- /dev/null +++ b/change/@ni-nimble-tokens-a1709922-af92-4354-abd5-8c978855ec81.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-b7bd1dbd-32e4-4feb-a577-b0888cc9b400.json b/change/@ni-ok-angular-b7bd1dbd-32e4-4feb-a577-b0888cc9b400.json new file mode 100644 index 0000000000..d9a6b9428c --- /dev/null +++ b/change/@ni-ok-angular-b7bd1dbd-32e4-4feb-a577-b0888cc9b400.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-46c91ea3-1caa-4928-9d60-dca9c02b5797.json b/change/@ni-ok-components-46c91ea3-1caa-4928-9d60-dca9c02b5797.json new file mode 100644 index 0000000000..9e0347b36d --- /dev/null +++ b/change/@ni-ok-components-46c91ea3-1caa-4928-9d60-dca9c02b5797.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-7a9c8a7b-7a2e-407f-ac4e-d1ef241f23fa.json b/change/@ni-ok-react-7a9c8a7b-7a2e-407f-ac4e-d1ef241f23fa.json new file mode 100644 index 0000000000..14c5d854f3 --- /dev/null +++ b/change/@ni-ok-react-7a9c8a7b-7a2e-407f-ac4e-d1ef241f23fa.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-2c887b6f-ab13-4675-ab28-e2289e1d47b6.json b/change/@ni-spright-angular-2c887b6f-ab13-4675-ab28-e2289e1d47b6.json new file mode 100644 index 0000000000..b24050715f --- /dev/null +++ b/change/@ni-spright-angular-2c887b6f-ab13-4675-ab28-e2289e1d47b6.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-1c5f0ac7-e548-406d-bb8b-7b0273c385ab.json b/change/@ni-spright-components-1c5f0ac7-e548-406d-bb8b-7b0273c385ab.json new file mode 100644 index 0000000000..507425460f --- /dev/null +++ b/change/@ni-spright-components-1c5f0ac7-e548-406d-bb8b-7b0273c385ab.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-003b5663-da8a-4258-8d7b-b06dfbf0c21c.json b/change/@ni-spright-react-003b5663-da8a-4258-8d7b-b06dfbf0c21c.json new file mode 100644 index 0000000000..81b54ee1cb --- /dev/null +++ b/change/@ni-spright-react-003b5663-da8a-4258-8d7b-b06dfbf0c21c.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-dbea0b57-91b1-4a06-b7b9-07111d48a4b4.json b/change/@ni-xliff-to-json-converter-dbea0b57-91b1-4a06-b7b9-07111d48a4b4.json new file mode 100644 index 0000000000..7696ab73f1 --- /dev/null +++ b/change/@ni-xliff-to-json-converter-dbea0b57-91b1-4a06-b7b9-07111d48a4b4.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 31dfdc9cf0..a535d2ed32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -797,7 +797,6 @@ "integrity": "sha512-NzmrXlr7GFE+cjwipY/CxBscZXNqnuK0us1mO6Z2T6MeH6m+rRcdlY/rZyKoRniyNNvuzl6vpEsfMIMmnfebrA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@angular-devkit/architect": ">= 0.1800.0 < 0.1900.0", "@angular-devkit/core": ">= 18.0.0 < 19.0.0" @@ -820,7 +819,6 @@ "integrity": "sha512-AyJbupiwTBR81P6T59v+aULEnPpZBCBxL2S5QFWfAhNCwWhcof4GihvdK2Z87yhvzDGeAzUFSWl/beJfeFa+PA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "18.4.3", "@angular-eslint/utils": "18.4.3" @@ -837,7 +835,6 @@ "integrity": "sha512-ijGlX2N01ayMXTpeQivOA31AszO8OEbu9ZQUCxnu9AyMMhxyi2q50bujRChAvN9YXQfdQtbxuajxV6+aiWb5BQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "18.4.3", "@angular-eslint/utils": "18.4.3", @@ -896,7 +893,6 @@ "integrity": "sha512-JZMPtEB8yNip3kg4WDEWQyObSo2Hwf+opq2ElYuwe85GQkGhfJSJ2CQYo4FSwd+c5MUQAqESNRg9QqGYauDsiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@angular-eslint/bundled-angular-compiler": "18.4.3", "eslint-scope": "^8.0.2" @@ -1787,7 +1783,6 @@ "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -4911,24 +4906,62 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "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.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "license": "Apache-2.0", + "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.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "license": "MIT", "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", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "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" @@ -4950,48 +4983,57 @@ "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" + }, + "node_modules/@eslint/js": { + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "license": "MIT", "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.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "license": "Apache-2.0", "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": { + "node_modules/@eslint/plugin-kit": { "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" + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } }, - "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==", + "node_modules/@esm2cjs/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@esm2cjs/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-vulgkPAkBMW4gOLurzjCQQAd0rp9Gogjl3TSkB+XxrxD+GpgG6SJIG3UedZQsAl+wQtW8h/a3m4EQjQgrA099w==", + "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/AlCalzone" } }, "node_modules/@formatjs/ecma402-abstract": { @@ -5050,19 +5092,26 @@ "tslib": "^2.8.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", + "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", + "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", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -5078,12 +5127,18 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "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", - "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", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@inquirer/checkbox": { "version": "2.5.0", @@ -5695,16 +5750,6 @@ "lhci": "src/cli.js" } }, - "node_modules/@lhci/cli/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/@lhci/cli/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -6260,41 +6305,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.3", + "resolved": "https://registry.npmjs.org/@ni/eslint-config-angular/-/eslint-config-angular-10.0.3.tgz", + "integrity": "sha512-GLvr2TDRJH7D/bRwlmDfWwdvyoGwARNyNRYD33BvHqGzTfcefvNsKphH0vRnv/ZHFUjdgevCi2HTYwpSxs9mBw==", "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.1.2", + "@ni/eslint-config-typescript": "^5.0.3", + "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.1.2", + "resolved": "https://registry.npmjs.org/@ni/eslint-config-javascript/-/eslint-config-javascript-5.1.2.tgz", + "integrity": "sha512-8abIhhJ7w1qmu11qN5k9/3IvUQsd69tzzEwWDiE3bTaQXHOTxQQDORRbilgtBc9UjRNGTVJNBctB72rKTsoOCQ==", "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.3", + "resolved": "https://registry.npmjs.org/@ni/eslint-config-typescript/-/eslint-config-typescript-5.0.3.tgz", + "integrity": "sha512-OJN60hlVF2EDAO2SwyyxJVab0bpYow0FcPnjuljPXz7aHRpLdbpStB5ICXexaIEXLD5+L9B7MGPYnL/FDVaR3w==", "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.1.2", + "eslint-plugin-import": "^2.32.0", + "typescript-eslint": "^8.45.0" } }, "node_modules/@ni/fast-colors": { @@ -6783,27 +6827,27 @@ }, "node_modules/@prettier/eslint": { "name": "prettier-eslint", - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.4.2.tgz", - "integrity": "sha512-vtJAQEkaN8fW5QKl08t7A5KCjlZuDUNeIlr9hgolMS5s3+uzbfRHDwaRnzrdqnY2YpHDmeDS/8zY0MKQHXJtaA==", + "version": "17.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-17.0.0-alpha.1.tgz", + "integrity": "sha512-9aJxE8db50HhfCHI9zoG1SYGxi2VvsHl4vQsRcm3m7GyE1xLUePpHR8ieNgf14VwLjhXC5K3WDGlV5k2+EDE/w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/parser": "^6.21.0", + "@esm2cjs/indent-string": "^5.0.0", + "@typescript-eslint/parser": "^8.32.0", "common-tags": "^1.8.2", "dlv": "^1.1.3", - "eslint": "^8.57.1", - "indent-string": "^4.0.0", + "eslint": "^9.26.0", "lodash.merge": "^4.6.2", "loglevel-colored-level-prefix": "^1.0.0", "prettier": "^3.5.3", "pretty-format": "^29.7.0", "require-relative": "^0.8.7", "tslib": "^2.8.1", - "vue-eslint-parser": "^9.4.3" + "vue-eslint-parser": "^10.1.3" }, "engines": { - "node": ">=16.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/prettier-eslint" @@ -6821,153 +6865,6 @@ } } }, - "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/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/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/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/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/@puppeteer/browsers": { "version": "2.10.13", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.10.13.tgz", @@ -8060,22 +7957,23 @@ } }, "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.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.6.1.tgz", + "integrity": "sha512-JCs+MqoXfXrRPGbGmho/zGS/jMcn3ieKl/A8YImqib76C8kjgZwq5uUFzc30lJkMvcchuRn6/v8IApLxli3Jyw==", "license": "MIT", "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.47.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": { @@ -9019,7 +8917,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": { @@ -9314,112 +9211,66 @@ } }, "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.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.0.tgz", + "integrity": "sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==", "license": "MIT", "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", + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/type-utils": "8.48.0", + "@typescript-eslint/utils": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "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 - } + "@typescript-eslint/parser": "^8.48.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/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==", + "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", "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">= 4" } }, - "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/parser": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.0.tgz", + "integrity": "sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==", "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" + "@typescript-eslint/scope-manager": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.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" - } - }, - "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", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "license": "MIT", - "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": { @@ -9444,29 +9295,16 @@ } }, "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.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", + "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", "license": "MIT", "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.48.0", + "@typescript-eslint/visitor-keys": "8.48.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", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -9490,65 +9328,27 @@ } }, "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.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.0.tgz", + "integrity": "sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/utils": "8.48.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", - "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", - "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": { @@ -9566,44 +9366,30 @@ } }, "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.48.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", + "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", + "@typescript-eslint/project-service": "8.48.0", + "@typescript-eslint/tsconfig-utils": "8.48.0", + "@typescript-eslint/types": "8.48.0", + "@typescript-eslint/visitor-keys": "8.48.0", "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "tinyglobby": "^0.2.15", + "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", - "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,51 +9440,7 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.0.tgz", - "integrity": "sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.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.48.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.0.tgz", - "integrity": "sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==", - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.48.0", - "@typescript-eslint/tsconfig-utils": "8.48.0", - "@typescript-eslint/types": "8.48.0", - "@typescript-eslint/visitor-keys": "8.48.0", - "debug": "^4.3.4", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "tinyglobby": "^0.2.15", - "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.48.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.0.tgz", "integrity": "sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==", @@ -9715,90 +9457,6 @@ "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", - "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", - "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", - "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", - "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", - "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", - "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==", - "license": "ISC" - }, "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", @@ -10556,6 +10214,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", @@ -10761,6 +10443,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" @@ -11382,24 +11065,24 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -11441,13 +11124,6 @@ "dev": true, "license": "ISC" }, - "node_modules/boolify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/boolify/-/boolify-1.0.1.tgz", - "integrity": "sha512-ma2q0Tc760dW54CdOyJjhrg/a54317o1zYADQJFgperNGKIKgAUGIcKnuMiff8z57+yGlrGNEt4lPgZfCgTJgA==", - "dev": true, - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", @@ -11753,48 +11429,13 @@ } }, "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-9.1.3.tgz", - "integrity": "sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "license": "MIT", - "dependencies": { - "camelcase": "^8.0.0", - "map-obj": "5.0.0", - "quick-lru": "^6.1.1", - "type-fest": "^4.3.2" - }, "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/caniuse-lite": { @@ -11860,6 +11501,19 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/chalk-cjs": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chalk-cjs/-/chalk-cjs-5.2.0.tgz", + "integrity": "sha512-GJ7MUEISBU0pglCMmAvpzRav0PN2ZZ33nYNOu07zoLymwY69EFwSqx+VK3wPFKi0dBCn/qgYcJmgPYbEaLynnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/chalk-template": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", @@ -12738,9 +12392,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", "engines": { @@ -12748,9 +12402,9 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, "license": "MIT" }, @@ -13695,6 +13349,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" @@ -13724,15 +13379,15 @@ } }, "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", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-accessibility-api": { @@ -14020,16 +13675,6 @@ "node": ">=10.0.0" } }, - "node_modules/engine.io/node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/engine.io/node_modules/debug": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", @@ -14468,60 +14113,63 @@ } }, "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.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "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.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@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", "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": { @@ -14672,18 +14320,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", - "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", @@ -14782,7 +14418,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", "dependencies": { "esrecurse": "^4.3.0", @@ -14835,51 +14470,6 @@ "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", @@ -15072,40 +14662,40 @@ "license": "Apache-2.0" }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.0.tgz", + "integrity": "sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==", "dev": true, "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -15135,6 +14725,23 @@ "dev": true, "license": "MIT" }, + "node_modules/express/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -15149,16 +14756,16 @@ } }, "node_modules/express/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", + "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", @@ -15173,10 +14780,10 @@ "node": ">= 0.8.0" } }, - "node_modules/express/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", "engines": { @@ -15285,6 +14892,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -15396,15 +15004,15 @@ } }, "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", "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": { @@ -15430,18 +15038,18 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -15536,54 +15144,16 @@ } }, "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", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_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" - }, - "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": { @@ -15750,6 +15320,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": { @@ -15882,19 +15453,6 @@ "node": ">= 0.4" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -16069,27 +15627,13 @@ } }, "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)", + "peer": true, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -16115,6 +15659,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", @@ -16135,6 +15680,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" @@ -16542,20 +16088,24 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-link-header": { @@ -16825,6 +16375,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", @@ -16835,6 +16386,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": { @@ -17608,15 +17160,6 @@ "node": ">=8" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -18158,7 +17701,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" @@ -20114,20 +19657,7 @@ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.4.0.tgz", "integrity": "sha512-4/gC9KVNTV6pvYg2gFeQYTW3mWaoJt7WZE5vrp1KnQDgW92JtYZnzmZT81oj/dUTqAIu0ufI2x3dkgu3bB1tYg==", "dev": true, - "license": "Unicode-DFS-2016" - }, - "node_modules/map-obj": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.0.tgz", - "integrity": "sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "Unicode-DFS-2016" }, "node_modules/markdown-it": { "version": "14.1.0", @@ -22493,6 +22023,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" @@ -23082,6 +22613,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" @@ -23138,6 +22670,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" @@ -23727,27 +23260,27 @@ } }, "node_modules/prettier-eslint": { - "version": "16.4.2", - "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.4.2.tgz", - "integrity": "sha512-vtJAQEkaN8fW5QKl08t7A5KCjlZuDUNeIlr9hgolMS5s3+uzbfRHDwaRnzrdqnY2YpHDmeDS/8zY0MKQHXJtaA==", + "version": "17.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-17.0.0-alpha.1.tgz", + "integrity": "sha512-9aJxE8db50HhfCHI9zoG1SYGxi2VvsHl4vQsRcm3m7GyE1xLUePpHR8ieNgf14VwLjhXC5K3WDGlV5k2+EDE/w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/parser": "^6.21.0", + "@esm2cjs/indent-string": "^5.0.0", + "@typescript-eslint/parser": "^8.32.0", "common-tags": "^1.8.2", "dlv": "^1.1.3", - "eslint": "^8.57.1", - "indent-string": "^4.0.0", + "eslint": "^9.26.0", "lodash.merge": "^4.6.2", "loglevel-colored-level-prefix": "^1.0.0", "prettier": "^3.5.3", "pretty-format": "^29.7.0", "require-relative": "^0.8.7", "tslib": "^2.8.1", - "vue-eslint-parser": "^9.4.3" + "vue-eslint-parser": "^10.1.3" }, "engines": { - "node": ">=16.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/prettier-eslint" @@ -23766,36 +23299,35 @@ } }, "node_modules/prettier-eslint-cli": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/prettier-eslint-cli/-/prettier-eslint-cli-8.0.1.tgz", - "integrity": "sha512-jru4JUDHzWEtM/SOxqagU7hQTVP8BVrxO2J0qNauWZuPRld6Ea2eyNaEzIGx6I+yjmOLCsjNM+vU1AJgaW1ZSQ==", + "version": "9.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/prettier-eslint-cli/-/prettier-eslint-cli-9.0.0-alpha.2.tgz", + "integrity": "sha512-LQ701IX+ZZuitIUYR8Kg7QXo32/ZE0FhBx6ZWjVX1pXNxrK4IBUzRGhy/XNPW2N+yew0okio7plYK4M+slOAiQ==", "dev": true, "license": "MIT", "dependencies": { - "@messageformat/core": "^3.2.0", - "@prettier/eslint": "npm:prettier-eslint@^16.1.0", - "arrify": "^2.0.1", - "boolify": "^1.0.1", - "camelcase-keys": "^9.1.0", - "chalk": "^4.1.2", + "@esm2cjs/indent-string": "^5.0.0", + "@messageformat/core": "^3.4.0", + "@prettier/eslint": "npm:prettier-eslint@^17.0.0-alpha.1", + "chalk-cjs": "^5.2.0", "common-tags": "^1.8.2", - "core-js": "^3.33.0", - "eslint": "^8.51.0", + "core-js": "^3.42.0", + "eslint": "^9.26.0", "find-up": "^5.0.0", - "get-stdin": "^8.0.0", - "glob": "^10.3.10", - "ignore": "^5.2.4", - "indent-string": "^4.0.0", + "glob": "^10.4.5", + "ignore": "^7.0.4", "lodash.memoize": "^4.1.2", "loglevel-colored-level-prefix": "^1.0.0", - "rxjs": "^7.8.1", + "rxjs": "^7.8.2", "yargs": "^17.7.2" }, "bin": { "prettier-eslint": "dist/index.js" }, "engines": { - "node": ">=16.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/prettier-eslint-cli" }, "peerDependencies": { "prettier-eslint": "*" @@ -23806,16 +23338,6 @@ } } }, - "node_modules/prettier-eslint-cli/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/prettier-eslint-cli/node_modules/brace-expansion": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", @@ -23847,6 +23369,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/prettier-eslint-cli/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/prettier-eslint-cli/node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -23903,153 +23435,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "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/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/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/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/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/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -24370,9 +23755,9 @@ } }, "node_modules/prosemirror-view": { - "version": "1.41.3", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.3.tgz", - "integrity": "sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==", + "version": "1.41.4", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.4.tgz", + "integrity": "sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==", "license": "MIT", "peer": true, "dependencies": { @@ -24531,13 +23916,13 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -24566,19 +23951,6 @@ ], "license": "MIT" }, - "node_modules/quick-lru": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", - "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -24600,16 +23972,16 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -25784,6 +25156,23 @@ "dev": true, "license": "MIT" }, + "node_modules/serve-static/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/serve-static/node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -25832,6 +25221,16 @@ "node": ">= 0.8" } }, + "node_modules/serve-static/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -26493,9 +25892,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", "engines": { @@ -27337,12 +26736,6 @@ } } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, "node_modules/thingies": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", @@ -27567,15 +26960,15 @@ } }, "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", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-dedent": { @@ -27785,6 +27178,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.48.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.0.tgz", + "integrity": "sha512-fcKOvQD9GUn3Xw63EgiDqhvWJ5jsyZUaekl3KVpGsDJnN46WJTe3jWxtQP9lMZm1LJNkFLlTaWAxK2vUQR+cqw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.48.0", + "@typescript-eslint/parser": "8.48.0", + "@typescript-eslint/typescript-estree": "8.48.0", + "@typescript-eslint/utils": "8.48.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", @@ -28286,9 +27703,9 @@ } }, "node_modules/vite": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.4.tgz", - "integrity": "sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz", + "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", "devOptional": true, "license": "MIT", "peer": true, @@ -28898,76 +28315,27 @@ } }, "node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.2.0.tgz", + "integrity": "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-eslint-parser/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/vue-eslint-parser/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/vue-eslint-parser/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" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/w3c-keyname": { @@ -29134,7 +28502,6 @@ "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", @@ -29577,6 +28944,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": { @@ -29838,7 +29206,8 @@ "@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.3", + "@ni/eslint-config-javascript": "^5.1.2", "@ni/fast-web-utilities": "^10.0.0", "@ni/jasmine-parameterized": "*", "@ni/nimble-tokens": "*", @@ -29912,6 +29281,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" } @@ -29952,10 +29322,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.1.2", + "@ni/eslint-config-typescript": "^5.0.3", + "eslint": "^9.36.0", + "eslint-plugin-jsdoc": "^60.7.1", + "globals": "^14.0.0" } }, "packages/jasmine-extensions": { @@ -30058,8 +29429,8 @@ "karma-webkit-launcher": "^2.6.0", "karma-webpack": "^5.0.0", "playwright": "1.54.1", - "prettier-eslint": "^16.3.0", - "prettier-eslint-cli": "^8.0.1", + "prettier-eslint": "^17.0.0-alpha.1", + "prettier-eslint-cli": "^9.0.0-alpha.2", "rollup": "^4.12.0", "rollup-plugin-sourcemaps2": "^0.5.0", "source-map-loader": "^5.0.0", @@ -30119,8 +29490,8 @@ "karma-webkit-launcher": "^2.6.0", "karma-webpack": "^5.0.0", "playwright": "1.54.1", - "prettier-eslint": "^16.3.0", - "prettier-eslint-cli": "^8.0.1", + "prettier-eslint": "^17.0.0-alpha.1", + "prettier-eslint-cli": "^9.0.0-alpha.2", "rollup": "^4.12.0", "rollup-plugin-sourcemaps2": "^0.5.0", "source-map-loader": "^5.0.0", @@ -30255,8 +29626,8 @@ "karma-webkit-launcher": "^2.6.0", "karma-webpack": "^5.0.0", "playwright": "1.54.1", - "prettier-eslint": "^16.3.0", - "prettier-eslint-cli": "^8.0.1", + "prettier-eslint": "^17.0.0-alpha.1", + "prettier-eslint-cli": "^9.0.0-alpha.2", "rollup": "^4.12.0", "rollup-plugin-sourcemaps2": "^0.5.0", "source-map-loader": "^5.0.0", @@ -30288,8 +29659,8 @@ "@storybook/cli": "^9.0.5", "@storybook/html-vite": "^9.0.5", "js-beautify": "^1.15.1", - "prettier-eslint": "^16.3.0", - "prettier-eslint-cli": "^8.0.1", + "prettier-eslint": "^17.0.0-alpha.1", + "prettier-eslint-cli": "^9.0.0-alpha.2", "react-syntax-highlighter": "^16.1.0", "remark-gfm": "^4.0.0", "rollup": "^4.12.0", @@ -30303,7 +29674,8 @@ "apache-arrow": "21.1.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..e7bb96a784 100644 --- a/packages/angular-workspace/angular.json +++ b/packages/angular-workspace/angular.json @@ -38,12 +38,14 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { - "lintFilePatterns": [ - "nimble-angular/**/*.ts", - "nimble-angular/**/*.js", - "nimble-angular/**/*.html" - ] - } + "eslintConfig": "nimble-angular/eslint.config.js", + "lintFilePatterns": [ + "nimble-angular/**/*.ts", + "nimble-angular/**/*.js", + "nimble-angular/**/*.html", + "nimble-angular/eslint.config.js" + ] + } } } }, @@ -79,12 +81,14 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { - "lintFilePatterns": [ - "ok-angular/**/*.ts", - "ok-angular/**/*.js", - "ok-angular/**/*.html" - ] - } + "eslintConfig": "ok-angular/eslint.config.js", + "lintFilePatterns": [ + "ok-angular/**/*.ts", + "ok-angular/**/*.js", + "ok-angular/**/*.html", + "ok-angular/eslint.config.js" + ] + } } } }, @@ -120,12 +124,14 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { - "lintFilePatterns": [ - "spright-angular/**/*.ts", - "spright-angular/**/*.js", - "spright-angular/**/*.html" - ] - } + "eslintConfig": "spright-angular/eslint.config.js", + "lintFilePatterns": [ + "spright-angular/**/*.ts", + "spright-angular/**/*.js", + "spright-angular/**/*.html", + "spright-angular/eslint.config.js" + ] + } } } }, @@ -246,12 +252,14 @@ "lint": { "builder": "@angular-eslint/builder:lint", "options": { - "lintFilePatterns": [ - "example-client-app/**/*.ts", - "example-client-app/**/*.js", - "example-client-app/**/*.html" - ] - } + "eslintConfig": "example-client-app/eslint.config.js", + "lintFilePatterns": [ + "example-client-app/**/*.ts", + "example-client-app/**/*.js", + "example-client-app/**/*.html", + "example-client-app/eslint.config.js" + ] + } } } } diff --git a/packages/angular-workspace/eslint.config.js b/packages/angular-workspace/eslint.config.js new file mode 100644 index 0000000000..0abef5e7d1 --- /dev/null +++ b/packages/angular-workspace/eslint.config.js @@ -0,0 +1,139 @@ +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'); +const { importNodeEsmConfig } = require('@ni/eslint-config-javascript'); + +module.exports = defineConfig([ + { + ignores: ['**/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.', + }, + ], + }, + ], + + // 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: [ + ...javascriptNimbleConfig, + ...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..a2cad3f3f2 --- /dev/null +++ b/packages/angular-workspace/example-client-app/eslint.config.js @@ -0,0 +1,43 @@ +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..5c2c9b2c0d --- /dev/null +++ b/packages/angular-workspace/nimble-angular/eslint.config.js @@ -0,0 +1,27 @@ +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..b8a47bc89c 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,6 @@ 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..9ebdfc55d3 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,6 @@ 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..f6c77dd762 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,6 @@ 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..b981eada42 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,5 @@ // 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/ok-angular/.eslintrc.js b/packages/angular-workspace/ok-angular/.eslintrc.js deleted file mode 100644 index 4ca8737457..0000000000 --- a/packages/angular-workspace/ok-angular/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - extends: '../.eslintrc.js', - overrides: [ - { - files: ['*.ts'], - parserOptions: { - project: [ - './tsconfig.lib.json', - './tsconfig.spec.json' - ], - tsconfigRootDir: __dirname - } - } - ] -}; diff --git a/packages/angular-workspace/ok-angular/eslint.config.js b/packages/angular-workspace/ok-angular/eslint.config.js new file mode 100644 index 0000000000..fa93b6bac7 --- /dev/null +++ b/packages/angular-workspace/ok-angular/eslint.config.js @@ -0,0 +1,15 @@ +const { defineConfig } = require('eslint/config'); +const baseConfig = require('../eslint.config.js'); + +module.exports = defineConfig([ + baseConfig, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.lib.json', './tsconfig.spec.json'], + tsconfigRootDir: __dirname, + }, + }, + }, +]); diff --git a/packages/angular-workspace/package.json b/packages/angular-workspace/package.json index 905882f616..8d70e1d26d 100644 --- a/packages/angular-workspace/package.json +++ b/packages/angular-workspace/package.json @@ -57,7 +57,8 @@ "@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.3", + "@ni/eslint-config-javascript": "^5.1.2", "@ni-private/jasmine-extensions": "*", "@ni/jasmine-parameterized": "*", "@ni/nimble-tokens": "*", diff --git a/packages/angular-workspace/spright-angular/.eslintrc.js b/packages/angular-workspace/spright-angular/.eslintrc.js deleted file mode 100644 index 4ca8737457..0000000000 --- a/packages/angular-workspace/spright-angular/.eslintrc.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - extends: '../.eslintrc.js', - overrides: [ - { - files: ['*.ts'], - parserOptions: { - project: [ - './tsconfig.lib.json', - './tsconfig.spec.json' - ], - tsconfigRootDir: __dirname - } - } - ] -}; diff --git a/packages/angular-workspace/spright-angular/eslint.config.js b/packages/angular-workspace/spright-angular/eslint.config.js new file mode 100644 index 0000000000..fa93b6bac7 --- /dev/null +++ b/packages/angular-workspace/spright-angular/eslint.config.js @@ -0,0 +1,15 @@ +const { defineConfig } = require('eslint/config'); +const baseConfig = require('../eslint.config.js'); + +module.exports = defineConfig([ + baseConfig, + { + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + project: ['./tsconfig.lib.json', './tsconfig.spec.json'], + 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..95841344da --- /dev/null +++ b/packages/blazor-workspace/eslint.config.js @@ -0,0 +1,43 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('@ni-private/eslint-config-nimble/javascript'); +const globals = require('globals'); + +module.exports = defineConfig([ + { + ignores: [ + '**/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..96537509c2 100644 --- a/packages/blazor-workspace/package.json +++ b/packages/blazor-workspace/package.json @@ -1,41 +1,42 @@ { - "name": "@ni-private/blazor-workspace", - "version": "1.0.0", - "private": true, - "description": "Workspace for Blazor projects", - "scripts": { - "build": "npm run generate-icons && npm run build:release && npm run build:client", - "build:release": "dotnet build -c Release /p:TreatWarningsAsErrors=true /warnaserror", - "build:client": "dotnet publish -p:BlazorEnableCompression=false -c Release Examples/Demo.Client --output dist/blazor-client-app", - "generate-icons": "npm run generate-icons:bundle && npm run generate-icons:run", - "generate-icons:bundle": "rollup --bundleConfigAsCjs --config build/generate-icons/rollup.config.js", - "generate-icons:run": "node build/generate-icons/dist/index.js", - "lint": "npm run lint:cs && npm run lint:js", - "lint:cs": "dotnet format --verify-no-changes", - "lint:js": "eslint .", - "format": "npm run format:cs && npm run format:js", - "format:cs": "dotnet format", - "format:js": "eslint . --fix", - "test": "dotnet test -c Release", - "copy-resources:nimble": "node build/copyResources.js nimble", - "copy-resources:spright": "node build/copyResources.js spright", - "copy-resources:ok": "node build/copyResources.js ok", - "update-lock-files": "dotnet restore --force-evaluate" - }, - "files": [ - "!*" - ], - "devDependencies": { - "@ni/fast-web-utilities": "^10.0.0", - "@ni-private/eslint-config-nimble": "*", - "@ni/nimble-components": "*", - "@ni/nimble-tokens": "*", - "@ni/ok-components": "*", - "@ni/spright-components": "*", - "@rollup/plugin-node-resolve": "^16.0.0", - "cross-env": "^10.1.0", - "glob": "^11.0.0", - "playwright": "1.54.1", - "rollup": "^4.12.0" - } -} + "name": "@ni-private/blazor-workspace", + "version": "1.0.0", + "private": true, + "description": "Workspace for Blazor projects", + "scripts": { + "build": "npm run generate-icons && npm run build:release && npm run build:client", + "build:release": "dotnet build -c Release /p:TreatWarningsAsErrors=true /warnaserror", + "build:client": "dotnet publish -p:BlazorEnableCompression=false -c Release Examples/Demo.Client --output dist/blazor-client-app", + "generate-icons": "npm run generate-icons:bundle && npm run generate-icons:run", + "generate-icons:bundle": "rollup --bundleConfigAsCjs --config build/generate-icons/rollup.config.js", + "generate-icons:run": "node build/generate-icons/dist/index.js", + "lint": "npm run lint:cs && npm run lint:js", + "lint:cs": "dotnet format --verify-no-changes", + "lint:js": "eslint .", + "format": "npm run format:cs && npm run format:js", + "format:cs": "dotnet format", + "format:js": "eslint . --fix", + "test": "dotnet test -c Release", + "copy-resources:nimble": "node build/copyResources.js nimble", + "copy-resources:spright": "node build/copyResources.js spright", + "copy-resources:ok": "node build/copyResources.js ok", + "update-lock-files": "dotnet restore --force-evaluate" + }, + "files": [ + "!*" + ], + "devDependencies": { + "@ni/fast-web-utilities": "^10.0.0", + "@ni-private/eslint-config-nimble": "*", + "@ni/nimble-components": "*", + "@ni/nimble-tokens": "*", + "@ni/ok-components": "*", + "@ni/spright-components": "*", + "@rollup/plugin-node-resolve": "^16.0.0", + "cross-env": "^10.1.0", + "glob": "^11.0.0", + "playwright": "1.54.1", + "rollup": "^4.12.0", + "globals": "^14.0.0" + } +} \ No newline at end of file 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..e2df3a447b 100644 --- a/packages/eslint-config-nimble/components.js +++ b/packages/eslint-config-nimble/components.js @@ -1,121 +1,122 @@ -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'); +// eslint-disable-next-line import/extensions +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 [ @@ -123,18 +124,17 @@ function restrictedFastImports() { name: '@ni/fast-foundation', importNames: ['focusVisible'], message: - 'Please use focusVisible from src/utilities/style/focus instead.' + 'Please use focusVisible from src/utilities/style/focus instead.', }, { name: '@ni/fast-foundation', importNames: ['display'], - message: - 'Please use display from src/utilities/style/display instead.' + message: 'Please use display from src/utilities/style/display instead.', }, { name: '@ni/fast-components', message: - 'It is not expected to leverage @ni/fast-components directly as they are coupled to FAST design tokens.' - } + 'It is not expected to leverage @ni/fast-components directly as they are coupled to FAST design tokens.', + }, ]; } diff --git a/packages/eslint-config-nimble/eslint.config.js b/packages/eslint-config-nimble/eslint.config.js new file mode 100644 index 0000000000..8b9b7c5a79 --- /dev/null +++ b/packages/eslint-config-nimble/eslint.config.js @@ -0,0 +1,12 @@ +const { defineConfig } = require('eslint/config'); +const javascriptNimbleConfig = require('./javascript.js'); + +module.exports = defineConfig([ + { + files: ['**/*.js'], + extends: javascriptNimbleConfig, + rules: { + 'import/no-unresolved': 'off' + } + }, +]); diff --git a/packages/eslint-config-nimble/javascript.js b/packages/eslint-config-nimble/javascript.js index f0144138d1..0ace160668 100644 --- a/packages/eslint-config-nimble/javascript.js +++ b/packages/eslint-config-nimble/javascript.js @@ -1,19 +1,32 @@ -module.exports = { - extends: '@ni/eslint-config-javascript', - parserOptions: { - ecmaVersion: 2020 +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 }, + }, + ], + }, }, - 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..68877b5d5c 100644 --- a/packages/eslint-config-nimble/package.json +++ b/packages/eslint-config-nimble/package.json @@ -1,39 +1,44 @@ { - "name": "@ni-private/eslint-config-nimble", - "version": "1.0.0", - "private": true, - "type": "commonjs", - "description": "Shared ESLint configuration for FAST web component development", - "repository": { - "type": "git", - "url": "git+https://github.com/ni/nimble.git", - "directory": "packages/eslint-config-nimble" - }, - "keywords": [ - "eslint", - "eslintconfig", - "ni", - "nimble" - ], - "author": "National Instruments", - "license": "MIT", - "scripts": { - "lint": "eslint .", - "format": "eslint . --fix" - }, - "files": ["javascript.js", "typescript.js", "components.js"], - "exports": { - "./javascript": "./javascript.js", - "./javascript.js": "./javascript.js", - "./typescript": "./typescript.js", - "./typescript.js": "./typescript.js", - "./components": "./components.js", - "./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" - } -} + "name": "@ni-private/eslint-config-nimble", + "version": "1.0.0", + "private": true, + "type": "commonjs", + "description": "Shared ESLint configuration for FAST web component development", + "repository": { + "type": "git", + "url": "git+https://github.com/ni/nimble.git", + "directory": "packages/eslint-config-nimble" + }, + "keywords": [ + "eslint", + "eslintconfig", + "ni", + "nimble" + ], + "author": "National Instruments", + "license": "MIT", + "scripts": { + "lint": "eslint .", + "format": "eslint . --fix" + }, + "files": [ + "javascript.js", + "typescript.js", + "components.js" + ], + "exports": { + "./javascript": "./javascript.js", + "./javascript.js": "./javascript.js", + "./typescript": "./typescript.js", + "./typescript.js": "./typescript.js", + "./components": "./components.js", + "./components.js": "./components.js" + }, + "peerDependencies": { + "@ni/eslint-config-javascript": "^5.1.2", + "@ni/eslint-config-typescript": "^5.0.3", + "eslint": "^9.36.0", + "eslint-plugin-jsdoc": "^60.7.1", + "globals": "^14.0.0" + } +} \ No newline at end of file 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..d6e0b68f8b --- /dev/null +++ b/packages/jasmine-extensions/eslint.config.cjs @@ -0,0 +1,28 @@ +// 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: ['**/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..c28453feb0 --- /dev/null +++ b/packages/jasmine-parameterized/eslint.config.cjs @@ -0,0 +1,26 @@ +// 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: ['**/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/.prettierrc.json b/packages/nimble-components/.prettierrc.json index d29ec5d8dc..e5decf6aa8 100644 --- a/packages/nimble-components/.prettierrc.json +++ b/packages/nimble-components/.prettierrc.json @@ -3,5 +3,6 @@ "useTabs": false, "trailingComma": "none", "singleQuote": true, - "endOfLine": "auto" + "endOfLine": "auto", + "arrowParens": "avoid" } 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/build/generate-workers/source/matrix-renderer.ts b/packages/nimble-components/build/generate-workers/source/matrix-renderer.ts index 58d0ef0d30..5e9ecd526d 100644 --- a/packages/nimble-components/build/generate-workers/source/matrix-renderer.ts +++ b/packages/nimble-components/build/generate-workers/source/matrix-renderer.ts @@ -153,8 +153,8 @@ export class MatrixRenderer { const scaledX = this.scaledColumnIndices[i]!; if ( !( - scaledX >= this.transformConfig.topLeftCanvasCorner.x - && scaledX < this.transformConfig.bottomRightCanvasCorner.x + scaledX >= this.transformConfig.topLeftCanvasCorner.x && + scaledX < this.transformConfig.bottomRightCanvasCorner.x ) ) { continue; @@ -163,9 +163,10 @@ export class MatrixRenderer { // columnIndexPositions is used to get chunks to determine the start and end index of the column, it looks something like [0, 1, 4, 9, 12] // This means that the first column has a start index of 0 and an end index of 1, the second column has a start index of 1 and an end index of 4, and so on // scaledRowIndices is used when we reach the end of the columnIndexPositions, when columnIndexPositions is [0, 1, 4, 9, 12], scaledRowIndices is 13 - const columnEndIndex = this.columnIndicesPositions[i + 1] !== undefined - ? this.columnIndicesPositions[i + 1]! - : this.scaledRowIndices.length; + const columnEndIndex = + this.columnIndicesPositions[i + 1] !== undefined + ? this.columnIndicesPositions[i + 1]! + : this.scaledRowIndices.length; for ( let columnStartIndex = this.columnIndicesPositions[i]!; columnStartIndex < columnEndIndex; @@ -174,15 +175,16 @@ export class MatrixRenderer { const scaledY = this.scaledRowIndices[columnStartIndex]!; if ( !( - scaledY >= this.transformConfig.topLeftCanvasCorner.y - && scaledY < this.transformConfig.bottomRightCanvasCorner.y + scaledY >= this.transformConfig.topLeftCanvasCorner.y && + scaledY < this.transformConfig.bottomRightCanvasCorner.y ) ) { continue; } // Fill style is temporary green for all dies, will be replaced with a color based on the value of the die in a future implementation - this.context.fillStyle = this.colors[this.colorIndices[columnStartIndex]!] - ?? this.outsideRangeDieColor; + this.context.fillStyle = + this.colors[this.colorIndices[columnStartIndex]!] ?? + this.outsideRangeDieColor; this.context.fillRect( scaledX, scaledY, @@ -204,8 +206,8 @@ export class MatrixRenderer { const scaledX = this.scaledColumnIndices[i]!; if ( !( - scaledX >= this.transformConfig.topLeftCanvasCorner.x - && scaledX < this.transformConfig.bottomRightCanvasCorner.x + scaledX >= this.transformConfig.topLeftCanvasCorner.x && + scaledX < this.transformConfig.bottomRightCanvasCorner.x ) ) { continue; @@ -214,9 +216,10 @@ export class MatrixRenderer { // columnIndexPositions is used to get chunks to determine the start and end index of the column, it looks something like [0, 1, 4, 9, 12] // This means that the first column has a start index of 0 and an end index of 1, the second column has a start index of 1 and an end index of 4, and so on // scaledRowIndices is used when we reach the end of the columnIndexPositions, when columnIndexPositions is [0, 1, 4, 9, 12], scaledRowIndices is 13 - const columnEndIndex = this.columnIndicesPositions[i + 1] !== undefined - ? this.columnIndicesPositions[i + 1]! - : this.scaledRowIndices.length; + const columnEndIndex = + this.columnIndicesPositions[i + 1] !== undefined + ? this.columnIndicesPositions[i + 1]! + : this.scaledRowIndices.length; for ( let columnStartIndex = this.columnIndicesPositions[i]!; columnStartIndex < columnEndIndex; @@ -225,8 +228,8 @@ export class MatrixRenderer { const scaledY = this.scaledRowIndices[columnStartIndex]!; if ( !( - scaledY >= this.transformConfig.topLeftCanvasCorner.y - && scaledY < this.transformConfig.bottomRightCanvasCorner.y + scaledY >= this.transformConfig.topLeftCanvasCorner.y && + scaledY < this.transformConfig.bottomRightCanvasCorner.y ) ) { continue; @@ -238,9 +241,9 @@ export class MatrixRenderer { this.context.fillText( label, scaledX + this.renderConfig.dieDimensions.width / 2, - scaledY - + this.renderConfig.dieDimensions.height / 2 - + approximateTextHeight.width / 2, + scaledY + + this.renderConfig.dieDimensions.height / 2 + + approximateTextHeight.width / 2, this.renderConfig.dieDimensions.width * this.fontSizeFactor ); } @@ -249,26 +252,26 @@ export class MatrixRenderer { private isDieInGrid(x: number, y: number): boolean { return ( - x >= this.renderConfig.gridMinX - && x <= this.renderConfig.gridMaxX - && y >= this.renderConfig.gridMinY - && y <= this.renderConfig.gridMaxY + x >= this.renderConfig.gridMinX && + x <= this.renderConfig.gridMaxX && + y >= this.renderConfig.gridMinY && + y <= this.renderConfig.gridMaxY ); } private calculateHorizontalScaledIndices(columnIndex: number): number { return ( - this.renderConfig.horizontalCoefficient * columnIndex - + this.renderConfig.horizontalConstant - + this.renderConfig.margin.left + this.renderConfig.horizontalCoefficient * columnIndex + + this.renderConfig.horizontalConstant + + this.renderConfig.margin.left ); } private calculateVerticalScaledIndices(rowIndex: number): number { return ( - this.renderConfig.verticalCoefficient * rowIndex - + this.renderConfig.verticalConstant - + this.renderConfig.margin.top + this.renderConfig.verticalCoefficient * rowIndex + + this.renderConfig.verticalConstant + + this.renderConfig.margin.top ); } diff --git a/packages/nimble-components/eslint.config.js b/packages/nimble-components/eslint.config.js new file mode 100644 index 0000000000..dcfa2ea30b --- /dev/null +++ b/packages/nimble-components/eslint.config.js @@ -0,0 +1,47 @@ +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: ['**/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 ad8fd0cd63..b10595ef2e 100644 --- a/packages/nimble-components/package.json +++ b/packages/nimble-components/package.json @@ -4,10 +4,8 @@ "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:prettier\"", "format": "npm run prettier-fix", - "eslint": "eslint .", - "eslint-fix": "eslint . --fix", "prettier": "prettier-eslint \"**/*.*\" --list-different --prettier-ignore", "prettier-fix": "prettier-eslint \"**/*.*\" --write --prettier-ignore", "pack": "npm pack", @@ -125,8 +123,8 @@ "karma-webkit-launcher": "^2.6.0", "karma-webpack": "^5.0.0", "playwright": "1.54.1", - "prettier-eslint": "^16.3.0", - "prettier-eslint-cli": "^8.0.1", + "prettier-eslint": "^17.0.0-alpha.1", + "prettier-eslint-cli": "^9.0.0-alpha.2", "rollup": "^4.12.0", "rollup-plugin-sourcemaps2": "^0.5.0", "source-map-loader": "^5.0.0", diff --git a/packages/nimble-components/src/anchor-button/index.ts b/packages/nimble-components/src/anchor-button/index.ts index 70aae51df2..995267a953 100644 --- a/packages/nimble-components/src/anchor-button/index.ts +++ b/packages/nimble-components/src/anchor-button/index.ts @@ -21,7 +21,8 @@ declare global { */ export class AnchorButton extends AnchorBase - implements ButtonPattern, ButtonAppearanceVariantPattern { + implements ButtonPattern, ButtonAppearanceVariantPattern +{ /** * @public * @remarks diff --git a/packages/nimble-components/src/anchor-menu-item/tests/anchor-menu-item.spec.ts b/packages/nimble-components/src/anchor-menu-item/tests/anchor-menu-item.spec.ts index 5e082c91ad..f6f6d0da20 100644 --- a/packages/nimble-components/src/anchor-menu-item/tests/anchor-menu-item.spec.ts +++ b/packages/nimble-components/src/anchor-menu-item/tests/anchor-menu-item.spec.ts @@ -99,12 +99,12 @@ describe('Anchor Menu Item', () => { it('should set start slot visible and end slot not visible', async () => { await connect(); expect( - getComputedStyle(element.start).display === 'none' - || getComputedStyle(element.startContainer).display === 'none' + getComputedStyle(element.start).display === 'none' || + getComputedStyle(element.startContainer).display === 'none' ).toBeFalse(); expect( - getComputedStyle(element.end).display === 'none' - || getComputedStyle(element.endContainer).display === 'none' + getComputedStyle(element.end).display === 'none' || + getComputedStyle(element.endContainer).display === 'none' ).toBeTrue(); }); }); diff --git a/packages/nimble-components/src/anchor-tabs/index.ts b/packages/nimble-components/src/anchor-tabs/index.ts index a4edf6558e..0f60069855 100644 --- a/packages/nimble-components/src/anchor-tabs/index.ts +++ b/packages/nimble-components/src/anchor-tabs/index.ts @@ -100,7 +100,8 @@ export class AnchorTabs extends FoundationElement implements TabsOwner { if (this.showScrollButtons) { tabListVisibleWidth += buttonWidth * 2; } - this.showScrollButtons = tabListVisibleWidth < this.tablist.scrollWidth; + this.showScrollButtons = + tabListVisibleWidth < this.tablist.scrollWidth; } }); } @@ -189,7 +190,8 @@ export class AnchorTabs extends FoundationElement implements TabsOwner { if (!firstFocusableTab && this.isFocusableElement(tab)) { firstFocusableTab = tab; } - const isTabStop = this.activeid === tabId && this.isFocusableElement(tab); + const isTabStop = + this.activeid === tabId && this.isFocusableElement(tab); tab.setAttribute('id', tabId); if (isActiveTab) { tab.setAttribute('aria-current', 'page'); @@ -210,8 +212,8 @@ export class AnchorTabs extends FoundationElement implements TabsOwner { }); if ( - firstFocusableTab - && (!this.activetab || !this.isFocusableElement(this.activetab)) + firstFocusableTab && + (!this.activetab || !this.isFocusableElement(this.activetab)) ) { firstFocusableTab.setAttribute('tabindex', '0'); } @@ -226,8 +228,8 @@ export class AnchorTabs extends FoundationElement implements TabsOwner { private readonly handleTabClick = (event: MouseEvent): void => { const selectedTab = event.currentTarget as HTMLElement; if ( - selectedTab.nodeType === 1 - && this.isFocusableElement(selectedTab) + selectedTab.nodeType === 1 && + this.isFocusableElement(selectedTab) ) { this.tabs.forEach((tab: HTMLElement) => { tab.setAttribute('tabindex', tab === selectedTab ? '0' : '-1'); diff --git a/packages/nimble-components/src/anchor-tabs/tests/anchor-tabs.spec.ts b/packages/nimble-components/src/anchor-tabs/tests/anchor-tabs.spec.ts index b4d7ec3146..71cb00281e 100644 --- a/packages/nimble-components/src/anchor-tabs/tests/anchor-tabs.spec.ts +++ b/packages/nimble-components/src/anchor-tabs/tests/anchor-tabs.spec.ts @@ -422,7 +422,8 @@ describe('AnchorTabs', () => { it('should scroll left when the left scroll button is clicked', async () => { await tabsPageObject.setTabsWidth(300); element.activeid = 'tab-six'; // scrolls to the last tab - const currentScrollOffset = tabsPageObject.getTabsViewScrollOffset(); + const currentScrollOffset = + tabsPageObject.getTabsViewScrollOffset(); await tabsPageObject.clickScrollLeftButton(); expect(tabsPageObject.getTabsViewScrollOffset()).toBeLessThan( currentScrollOffset @@ -444,7 +445,8 @@ describe('AnchorTabs', () => { it('should not scroll right when the right scroll button is clicked and the last tab is active', async () => { await tabsPageObject.setTabsWidth(300); element.activeid = 'tab-six'; // scrolls to the last tab - const currentScrollOffset = tabsPageObject.getTabsViewScrollOffset(); + const currentScrollOffset = + tabsPageObject.getTabsViewScrollOffset(); await tabsPageObject.clickScrollRightButton(); expect(tabsPageObject.getTabsViewScrollOffset()).toBe( currentScrollOffset diff --git a/packages/nimble-components/src/anchor-tree-item/tests/anchor-tree-item.spec.ts b/packages/nimble-components/src/anchor-tree-item/tests/anchor-tree-item.spec.ts index 7f67bf3974..a96fa4e50b 100644 --- a/packages/nimble-components/src/anchor-tree-item/tests/anchor-tree-item.spec.ts +++ b/packages/nimble-components/src/anchor-tree-item/tests/anchor-tree-item.spec.ts @@ -106,8 +106,8 @@ describe('Anchor Tree Item', () => { it('should set start slot visible', async () => { await connect(); expect( - getComputedStyle(element.start).display === 'none' - || getComputedStyle(element.startContainer).display === 'none' + getComputedStyle(element.start).display === 'none' || + getComputedStyle(element.startContainer).display === 'none' ).toBeFalse(); }); }); diff --git a/packages/nimble-components/src/anchor/tests/anchor.spec.ts b/packages/nimble-components/src/anchor/tests/anchor.spec.ts index 17cb102f06..1d2f3d5d5e 100644 --- a/packages/nimble-components/src/anchor/tests/anchor.spec.ts +++ b/packages/nimble-components/src/anchor/tests/anchor.spec.ts @@ -158,7 +158,8 @@ describe('Anchor', () => { } it('acts like value is "true"', async () => { - ({ element, connect, disconnect } = await setupWithContenteditable()); + ({ element, connect, disconnect } = + await setupWithContenteditable()); await connect(); const innerAnchor = element.shadowRoot!.querySelector('a')!; expect(innerAnchor.isContentEditable).toBeTrue(); diff --git a/packages/nimble-components/src/breadcrumb/breadcrumb.foundation.spec.ts b/packages/nimble-components/src/breadcrumb/breadcrumb.foundation.spec.ts index 2553b183b2..32d3286122 100644 --- a/packages/nimble-components/src/breadcrumb/breadcrumb.foundation.spec.ts +++ b/packages/nimble-components/src/breadcrumb/breadcrumb.foundation.spec.ts @@ -94,7 +94,8 @@ describe('Breadcrumb', () => { }); it('should set the `aria-current` on the internal, last node, anchor when `href` is passed', async () => { - const { element, connect, disconnect, item1, item2, item3 } = await setup(); + const { element, connect, disconnect, item1, item2, item3 } = + await setup(); const anchor1 = document.createElement('a'); anchor1.href = '#'; @@ -119,7 +120,8 @@ describe('Breadcrumb', () => { }); it('should remove aria-current from any prior Breadcrumb Item children with hrefs when a new node is appended', async () => { - const { element, connect, disconnect, item1, item2, item3 } = await setup(); + const { element, connect, disconnect, item1, item2, item3 } = + await setup(); item1.setAttribute('href', '#'); item2.setAttribute('href', '#'); @@ -155,7 +157,8 @@ describe('Breadcrumb', () => { }); it('should remove aria-current from any prior Breadcrumb Item children with child anchors when a new node is appended', async () => { - const { element, connect, disconnect, item1, item2, item3 } = await setup(); + const { element, connect, disconnect, item1, item2, item3 } = + await setup(); const anchor1 = document.createElement('a'); anchor1.href = '#'; diff --git a/packages/nimble-components/src/breadcrumb/index.ts b/packages/nimble-components/src/breadcrumb/index.ts index 0944874915..cf27869843 100644 --- a/packages/nimble-components/src/breadcrumb/index.ts +++ b/packages/nimble-components/src/breadcrumb/index.ts @@ -48,7 +48,8 @@ export class Breadcrumb extends FoundationBreadcrumb { if (this.showScrollButtons) { listVisibleWidth += buttonWidth * 2; } - this.showScrollButtons = listVisibleWidth < this.list.scrollWidth; + this.showScrollButtons = + listVisibleWidth < this.list.scrollWidth; } }); } diff --git a/packages/nimble-components/src/breadcrumb/testing/breadcrumb.pageobject.ts b/packages/nimble-components/src/breadcrumb/testing/breadcrumb.pageobject.ts index 9c20ba437c..cd450cc274 100644 --- a/packages/nimble-components/src/breadcrumb/testing/breadcrumb.pageobject.ts +++ b/packages/nimble-components/src/breadcrumb/testing/breadcrumb.pageobject.ts @@ -25,7 +25,8 @@ export class BreadcrumbPageObject { if (index >= this.breadcrumbElement.slottedBreadcrumbItems.length) { throw new Error(`Breadcrumb with index ${index} not found`); } - const breadcrumb = this.breadcrumbElement.slottedBreadcrumbItems[index]!; + const breadcrumb = + this.breadcrumbElement.slottedBreadcrumbItems[index]!; breadcrumb.dispatchEvent(new KeyboardEvent('keydown', { key })); await waitForUpdatesAsync(); } @@ -37,9 +38,10 @@ export class BreadcrumbPageObject { } public async clickScrollLeftButton(): Promise { - const leftButton = this.breadcrumbElement.shadowRoot!.querySelector