diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 053f6252..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,69 +0,0 @@ -module.exports = { - root: true, - parser: '@typescript-eslint/parser', // Specifies the ESLint parser - extends: [ - 'eslint:recommended', - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'plugin:jsx-a11y/recommended', - 'plugin:@next/next/recommended', - 'prettier', - ], - parserOptions: { - ecmaVersion: 6, - sourceType: 'module', - ecmaFeatures: { - jsx: true, - }, - }, - rules: { - '@typescript-eslint/no-explicit-any': 'warn', // disable the rule for now to replicate previous behavior - '@typescript-eslint/camelcase': 0, - '@typescript-eslint/no-use-before-define': 0, - 'jsx-a11y/no-noninteractive-tabindex': 0, - 'arrow-parens': 'off', - 'jsx-a11y/anchor-is-valid': 'off', - 'no-console': 1, - 'react-hooks/rules-of-hooks': 'error', - 'react-hooks/exhaustive-deps': 'warn', - '@typescript-eslint/explicit-function-return-type': 'off', - 'formatjs/no-offset': 'error', - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': ['error'], - '@typescript-eslint/array-type': ['error', { default: 'array' }], - 'jsx-a11y/no-onchange': 'off', - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - }, - ], - 'no-relative-import-paths/no-relative-import-paths': [ - 'error', - { allowSameFolder: true }, - ], - }, - overrides: [ - { - files: ['**/*.tsx'], - plugins: ['react'], - rules: { - 'react/prop-types': 'off', - 'react/self-closing-comp': 'error', - }, - }, - ], - plugins: ['jsx-a11y', 'react-hooks', 'formatjs', 'no-relative-import-paths'], - settings: { - react: { - pragma: 'React', - version: '16.8', - }, - }, - env: { - browser: true, - node: true, - jest: true, - es6: true, - }, - reportUnusedDisableDirectives: true, -}; diff --git a/eslint.config.mts b/eslint.config.mts new file mode 100644 index 00000000..d5905d4a --- /dev/null +++ b/eslint.config.mts @@ -0,0 +1,95 @@ +import js from '@eslint/js'; +import nextPlugin from '@next/eslint-plugin-next'; +import prettier from 'eslint-config-prettier'; +import formatjs from 'eslint-plugin-formatjs'; +import jsxA11y from 'eslint-plugin-jsx-a11y'; +import noRelativeImportPaths from 'eslint-plugin-no-relative-import-paths'; +import reactPlugin from 'eslint-plugin-react'; +import reactHooks from 'eslint-plugin-react-hooks'; +import { defineConfig, type Config } from 'eslint/config'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +type Plugin = NonNullable[string]; + +export default defineConfig( + // Global ignores + { + ignores: ['node_modules/**', '.next/**'], + }, + js.configs.recommended, + tseslint.configs.recommended, + jsxA11y.flatConfigs.recommended, + { + languageOptions: { + ecmaVersion: 2023, + sourceType: 'module', + parserOptions: { + ecmaFeatures: { jsx: true }, + }, + globals: { + ...globals.browser, + ...globals.node, + ...globals.jest, + }, + }, + settings: { + react: { + pragma: 'React', + version: '18.3', + }, + }, + plugins: { + react: reactPlugin, + 'react-hooks': reactHooks as Plugin, + formatjs, + 'no-relative-import-paths': noRelativeImportPaths, + '@next/next': nextPlugin, + }, + rules: { + ...nextPlugin.configs.recommended.rules, + + // TypeScript + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/array-type': ['error', { default: 'array' }], + '@typescript-eslint/consistent-type-imports': [ + 'error', + { prefer: 'type-imports' }, + ], + + // React + 'react/prop-types': 'off', + 'react/self-closing-comp': 'error', + + // jsx-a11y + 'jsx-a11y/no-noninteractive-tabindex': 'off', + 'jsx-a11y/anchor-is-valid': 'off', + 'jsx-a11y/no-onchange': 'off', + + // React Hooks + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + + // General + 'arrow-parens': 'off', + 'no-console': 'warn', + 'no-unused-vars': 'off', + + // Plugins + 'formatjs/no-offset': 'error', + 'no-relative-import-paths/no-relative-import-paths': [ + 'error', + { allowSameFolder: true }, + ], + }, + }, + prettier, + { + linterOptions: { + reportUnusedDisableDirectives: true, + }, + } +); diff --git a/package.json b/package.json index ca0873c1..30eec037 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,8 @@ "devDependencies": { "@commitlint/cli": "17.4.4", "@commitlint/config-conventional": "17.4.4", + "@eslint/js": "9.39.3", + "@next/eslint-plugin-next": "^16.1.6", "@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/forms": "^0.5.10", "@tailwindcss/typography": "^0.5.16", @@ -126,6 +128,7 @@ "@types/country-flag-icons": "1.2.2", "@types/csurf": "1.11.5", "@types/email-templates": "10.0.4", + "@types/eslint-plugin-jsx-a11y": "^6.10.1", "@types/express": "4.17.17", "@types/express-session": "1.18.2", "@types/lodash": "4.17.21", @@ -145,8 +148,6 @@ "@types/xml2js": "0.4.14", "@types/yamljs": "0.2.31", "@types/yup": "0.29.14", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", "autoprefixer": "^10.4.23", "baseline-browser-mapping": "^2.8.32", "commander": "^14.0.3", @@ -155,16 +156,17 @@ "cy-mobile-commands": "0.3.0", "cypress": "14.5.4", "cz-conventional-changelog": "3.3.0", - "eslint": "8.57.1", - "eslint-config-next": "^14.2.35", - "eslint-config-prettier": "8.6.0", - "eslint-plugin-formatjs": "4.9.0", + "eslint": "9.39.3", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-formatjs": "6.2.0", "eslint-plugin-jsx-a11y": "6.10.2", "eslint-plugin-no-relative-import-paths": "1.6.1", "eslint-plugin-prettier": "4.2.1", "eslint-plugin-react": "7.37.5", - "eslint-plugin-react-hooks": "4.6.0", + "eslint-plugin-react-hooks": "7.0.1", + "globals": "^17.3.0", "husky": "8.0.3", + "jiti": "^2.6.1", "lint-staged": "13.1.2", "nodemon": "3.1.11", "postcss": "^8.5.6", @@ -176,7 +178,8 @@ "ts-node": "10.9.2", "tsc-alias": "1.8.16", "tsconfig-paths": "4.2.0", - "typescript": "5.4.5" + "typescript": "5.4.5", + "typescript-eslint": "^8.56.1" }, "engines": { "node": "^22.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77dfdd1b..0968c057 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -259,6 +259,12 @@ importers: '@commitlint/config-conventional': specifier: 17.4.4 version: 17.4.4 + '@eslint/js': + specifier: 9.39.3 + version: 9.39.3 + '@next/eslint-plugin-next': + specifier: ^16.1.6 + version: 16.1.6 '@tailwindcss/aspect-ratio': specifier: ^0.4.2 version: 0.4.2(tailwindcss@3.4.19(yaml@2.8.2)) @@ -283,6 +289,9 @@ importers: '@types/email-templates': specifier: 10.0.4 version: 10.0.4(encoding@0.1.13) + '@types/eslint-plugin-jsx-a11y': + specifier: ^6.10.1 + version: 6.10.1(jiti@2.6.1) '@types/express': specifier: 4.17.17 version: 4.17.17 @@ -340,12 +349,6 @@ importers: '@types/yup': specifier: 0.29.14 version: 0.29.14 - '@typescript-eslint/eslint-plugin': - specifier: 7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': - specifier: 7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.4.5) autoprefixer: specifier: ^10.4.23 version: 10.4.23(postcss@8.5.6) @@ -371,35 +374,38 @@ importers: specifier: 3.3.0 version: 3.3.0(@types/node@22.10.5)(typescript@5.4.5) eslint: - specifier: 8.57.1 - version: 8.57.1 - eslint-config-next: - specifier: ^14.2.35 - version: 14.2.35(eslint@8.57.1)(typescript@5.4.5) + specifier: 9.39.3 + version: 9.39.3(jiti@2.6.1) eslint-config-prettier: - specifier: 8.6.0 - version: 8.6.0(eslint@8.57.1) + specifier: 10.1.8 + version: 10.1.8(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-formatjs: - specifier: 4.9.0 - version: 4.9.0(eslint@8.57.1)(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5)) + specifier: 6.2.0 + version: 6.2.0(eslint@9.39.3(jiti@2.6.1))(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5)) eslint-plugin-jsx-a11y: specifier: 6.10.2 - version: 6.10.2(eslint@8.57.1) + version: 6.10.2(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-no-relative-import-paths: specifier: 1.6.1 version: 1.6.1 eslint-plugin-prettier: specifier: 4.2.1 - version: 4.2.1(eslint-config-prettier@8.6.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.1) + version: 4.2.1(eslint-config-prettier@10.1.8(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1) eslint-plugin-react: specifier: 7.37.5 - version: 7.37.5(eslint@8.57.1) + version: 7.37.5(eslint@9.39.3(jiti@2.6.1)) eslint-plugin-react-hooks: - specifier: 4.6.0 - version: 4.6.0(eslint@8.57.1) + specifier: 7.0.1 + version: 7.0.1(eslint@9.39.3(jiti@2.6.1)) + globals: + specifier: ^17.3.0 + version: 17.4.0 husky: specifier: 8.0.3 version: 8.0.3 + jiti: + specifier: ^2.6.1 + version: 2.6.1 lint-staged: specifier: 13.1.2 version: 13.1.2(enquirer@2.4.1) @@ -436,6 +442,9 @@ importers: typescript: specifier: 5.4.5 version: 5.4.5 + typescript-eslint: + specifier: ^8.56.1 + version: 8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) packages: @@ -1391,13 +1400,33 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.21.2': + resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-helpers@0.4.2': + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.17.0': + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.39.3': + resolution: {integrity: sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.4.1': + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@floating-ui/core@1.7.3': resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} @@ -1420,24 +1449,30 @@ packages: '@formatjs/ecma402-abstract@2.3.6': resolution: {integrity: sha512-HJnTFeRM2kVFVr5gr5kH1XP6K0JcJtE7Lzvtr3FS/so5f1kpsqqqxy5JF+FRaO6H2qmcMfAUIox7AJteieRtVw==} + '@formatjs/ecma402-abstract@3.1.1': + resolution: {integrity: sha512-jhZbTwda+2tcNrs4kKvxrPLPjx8QsBCLCUgrrJ/S+G9YrGHWLhAyFMMBHJBnBoOwuLHd7L14FgYudviKaxkO2Q==} + '@formatjs/fast-memoize@2.2.0': resolution: {integrity: sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==} '@formatjs/fast-memoize@2.2.7': resolution: {integrity: sha512-Yabmi9nSvyOMrlSeGGWDiH7rf3a7sIwplbvo/dlz9WCIjzIQAfy1RMf4S0X3yG724n5Ghu2GmEl5NJIV6O9sZQ==} - '@formatjs/icu-messageformat-parser@2.3.0': - resolution: {integrity: sha512-xqtlqYAbfJDF4b6e4O828LBNOWXrFcuYadqAbYORlDRwhyJ2bH+xpUBPldZbzRGUN2mxlZ4Ykhm7jvERtmI8NQ==} + '@formatjs/fast-memoize@3.1.0': + resolution: {integrity: sha512-b5mvSWCI+XVKiz5WhnBCY3RJ4ZwfjAidU0yVlKa3d3MSgKmH1hC3tBGEAtYyN5mqL7N0G5x0BOUYyO8CEupWgg==} '@formatjs/icu-messageformat-parser@2.7.8': resolution: {integrity: sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==} - '@formatjs/icu-skeleton-parser@1.3.18': - resolution: {integrity: sha512-ND1ZkZfmLPcHjAH1sVpkpQxA+QYfOX3py3SjKWMUVGDow18gZ0WPqz3F+pJLYQMpS2LnnQ5zYR2jPVYTbRwMpg==} + '@formatjs/icu-messageformat-parser@3.5.1': + resolution: {integrity: sha512-sSDmSvmmoVQ92XqWb499KrIhv/vLisJU8ITFrx7T7NZHUmMY7EL9xgRowAosaljhqnj/5iufG24QrdzB6X3ItA==} '@formatjs/icu-skeleton-parser@1.8.2': resolution: {integrity: sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==} + '@formatjs/icu-skeleton-parser@2.1.1': + resolution: {integrity: sha512-PSFABlcNefjI6yyk8f7nyX1DC7NHmq6WaCHZLySEXBrXuLOB2f935YsnzuPjlz+ibhb9yWTdPeVX1OVcj24w2Q==} + '@formatjs/intl-displaynames@6.6.8': resolution: {integrity: sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==} @@ -1466,6 +1501,9 @@ packages: '@formatjs/intl-localematcher@0.6.2': resolution: {integrity: sha512-XOMO2Hupl0wdd172Y06h6kLpBz6Dv+J4okPLl4LPtzbr8f66WbIoy4ev98EBuZ6ZK4h5ydTN6XneT4QVpD7cdA==} + '@formatjs/intl-localematcher@0.8.1': + resolution: {integrity: sha512-xwEuwQFdtSq1UKtQnyTZWC+eHdv7Uygoa+H2k/9uzBVQjDyp9r20LNDNKedWXll7FssT3GRHvqsdJGYSUWqYFA==} + '@formatjs/intl-pluralrules@5.4.6': resolution: {integrity: sha512-2HlOq+c7KsSps829SJ3B5987coX5mzKx9NbPcNwQ07eq8FBHgB3HfMoxt5HvLsdk4oQwCjAEnocbtd+wVwZ2Kg==} @@ -1481,10 +1519,11 @@ packages: typescript: optional: true - '@formatjs/ts-transformer@3.12.0': - resolution: {integrity: sha512-/jEpXcqA6y/vdijgkxSoKGfkGR5VcClJeI8hnpJ2PBCHfrc4ywFMyoZqRAakKW3IJVttaDo7mGvBAIDxV1F4Qg==} + '@formatjs/ts-transformer@4.4.0': + resolution: {integrity: sha512-lFDp9Rbpxk5Dt8O1/I9VG5btqKbOkjT4snSa73HO1YTJ9KGeXPKA7aWVgHFXJVVq0KluhbZiCoPJVHC4ZREgxw==} + engines: {node: '>= 20.12.0'} peerDependencies: - ts-jest: '>=27' + ts-jest: ^29 peerDependenciesMeta: ts-jest: optional: true @@ -1516,18 +1555,21 @@ packages: peerDependencies: react: '>= 16 || ^19.0.0-rc' - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} + engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} '@img/sharp-darwin-arm64@0.33.4': resolution: {integrity: sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==} @@ -1983,8 +2025,8 @@ packages: '@next/env@14.2.35': resolution: {integrity: sha512-DuhvCtj4t9Gwrx80dmz2F4t/zKQ4ktN8WrMwOuVzkJfBilwAwGr6v16M5eI8yCuZ63H9TTuEU09Iu2HqkzFPVQ==} - '@next/eslint-plugin-next@14.2.35': - resolution: {integrity: sha512-Jw9A3ICz2183qSsqwi7fgq4SBPiNfmOLmTPXKvlnzstUwyvBrtySiY+8RXJweNAs9KThb1+bYhZh9XWcNOr2zQ==} + '@next/eslint-plugin-next@16.1.6': + resolution: {integrity: sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ==} '@next/swc-darwin-arm64@14.2.33': resolution: {integrity: sha512-HqYnb6pxlsshoSTubdXKu15g3iivcbsMXg4bYpjL2iS/V6aQot+iyF4BUc2qA/J/n55YtvE4PHMKWBKGCF/+wA==} @@ -2802,9 +2844,6 @@ packages: resolution: {integrity: sha512-lzD84av1ZQhYUS+jsGqJiCMaJO2dn9u+RTT9n9q6D3SaKVwWqv+7AoRKqBu19bkwyE+iFRl1ymr40QS90jVFYg==} engines: {node: '>=14.15'} - '@rushstack/eslint-patch@1.10.3': - resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} - '@seerr-team/react-tailwindcss-datepicker@1.3.4': resolution: {integrity: sha512-KZrnl6WL1lvUnAG4RZIkReJ+E0vSpOtMEuatobMqiWAa5Y+Z3d0ZcOOJWHoeRNtF19sIzzBkuLyhFNFlNtXg3A==} peerDependencies: @@ -3097,11 +3136,11 @@ packages: '@types/email-templates@10.0.4': resolution: {integrity: sha512-8O2bdGPO6RYgH2DrnFAcuV++s+8KNA5e2Erjl6UxgKRVsBH9zXu2YLrLyOBRMn2VyEYmzgF+6QQUslpVhj0y/g==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint-plugin-jsx-a11y@6.10.1': + resolution: {integrity: sha512-5RtuPVe0xz8BAhrkn2oww6Uw885atf962Q4fqZo48QdO3EQA7oCEDSXa6optgJ1ZMds3HD9ITK5bfm4AWuoXFQ==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/express-serve-static-core@4.19.5': resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} @@ -3136,12 +3175,6 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json-stable-stringify@1.0.36': - resolution: {integrity: sha512-b7bq23s4fgBB76n34m2b3RBf6M369B0Z9uRR8aHTMd8kZISRkmDEpPD8hhpYvDFzr3bJCPES96cm3Q6qRNDbQw==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/lodash@4.17.21': resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==} @@ -3175,9 +3208,6 @@ packages: '@types/node-schedule@2.1.8': resolution: {integrity: sha512-k00g6Yj/oUg/CDC+MeLHUzu0+OFxWbIqrFfDiLi6OPKxTujvpv29mHGM8GtKr7B+9Vv92FcK/8mRqi1DK5f3hA==} - '@types/node@17.0.45': - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} @@ -3187,6 +3217,9 @@ packages: '@types/node@22.10.5': resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} + '@types/node@22.19.15': + resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} + '@types/nodemailer@7.0.9': resolution: {integrity: sha512-vI8oF1M+8JvQhsId0Pc38BdUP2evenIIys7c7p+9OZXSPOH5c1dyINP1jT8xQ2xPuBUXmIC87s+91IZMDjH8Ow==} @@ -3196,8 +3229,8 @@ packages: '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/picomatch@2.3.3': - resolution: {integrity: sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==} + '@types/picomatch@4.0.2': + resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==} '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} @@ -3299,84 +3332,71 @@ packages: '@types/yup@0.29.14': resolution: {integrity: sha512-Ynb/CjHhE/Xp/4bhHmQC4U1Ox+I2OpfRYF3dnNgQqn1cHa6LK3H1wJMNPT02tSVZA6FYuXE2ITORfbnb6zBCSA==} - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.57.0': + resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser': ^8.57.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.57.0': + resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/project-service@8.57.0': + resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@5.45.0': - resolution: {integrity: sha512-QQij+u/vgskA66azc9dCmx+rev79PzX8uDHpsqSjEFtfF2gBUTRCpvYMh2gw2ghkJabNkPlSUCimsyBEQZd1DA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@8.57.0': + resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/typescript-estree@5.45.0': - resolution: {integrity: sha512-maRhLGSzqUpFcZgXxg1qc/+H0bT36lHK4APhp0AEUVrpSwXiRAomm/JGjSG+kNUio5kAa3uekCYu/47cnGn5EQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/tsconfig-utils@8.57.0': + resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.57.0': + resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.57.0': + resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.57.0': + resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@5.45.0': - resolution: {integrity: sha512-jc6Eccbn2RtQPr1s7th6jJWQHBHI6GBVQkCHoJFQ5UreaKm59Vxw+ynQUPPY2u2Amquc+7tmEoC2G52ApsGNNg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/utils@8.57.0': + resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.57.0': + resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + '@unicode/unicode-17.0.0@1.6.16': + resolution: {integrity: sha512-advq5p36zZ+PDRUpDkWcHHR++R19kx0LYB5iG3bj0KB8mYVKg0ywS996e2bXeXxDb8XdOF7KTivcx7VkYie1pg==} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} cpu: [arm] @@ -3528,6 +3548,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.16.0: resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} @@ -3651,10 +3674,6 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} @@ -3832,6 +3851,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3888,6 +3911,10 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + engines: {node: 18 || 20 || >=22} + braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} @@ -4646,10 +4673,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - doctypes@1.1.0: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} @@ -4721,9 +4744,6 @@ packages: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4755,10 +4775,6 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} - engines: {node: '>=10.13.0'} - enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -4850,66 +4866,16 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-next@14.2.35: - resolution: {integrity: sha512-BpLsv01UisH193WyT/1lpHqq5iJ/Orfz9h/NOOlAmTUq4GY349PextQ62K4XpnaM9supeiEn3TaOTeQO07gURg==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-config-prettier@8.6.0: - resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true peerDependencies: eslint: '>=7.0.0' - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} + eslint-plugin-formatjs@6.2.0: + resolution: {integrity: sha512-JftP9glJrS4qdviqTyZ0Kk14hcHB8AJn2FP2W7dsMugOIHDgra30mTvGjRMohivDIaFXnPGCAOv/AYm55BMUBQ==} peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-formatjs@4.9.0: - resolution: {integrity: sha512-U3u8TI/Mogo3sunTHDh24mc3p1zWAz/VaYjSkGhuYcLmqfkqEr3BmGUNQ8NTDvZviYHNTkhjHWuXQnUkh81grQ==} - peerDependencies: - eslint: 7 || 8 - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint: '9' eslint-plugin-jsx-a11y@6.10.2: resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} @@ -4931,11 +4897,11 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} + eslint-plugin-react-hooks@7.0.1: + resolution: {integrity: sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==} + engines: {node: '>=18'} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 eslint-plugin-react@7.37.5: resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} @@ -4943,23 +4909,35 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@9.39.3: + resolution: {integrity: sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@1.2.5: resolution: {integrity: sha512-S9VbPDU0adFErpDai3qDkjq8+G05ONtKzcyNrPKg/ZKa+tf879nX2KexNU95b31UoTJjRLInNBHHHjFPoCd7lQ==} @@ -5087,6 +5065,10 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -5133,9 +5115,9 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-stream-rotator@0.6.1: resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} @@ -5185,9 +5167,9 @@ packages: resolution: {integrity: sha512-5SM1+H2CcuJ3gGEwTiVo/+nd/hYpNj9Ch3iMDOQ58ndY+VGQ2QdvaUTkd3otjZvYnd/8LF/HkJ5cx7PBq0orCQ==} hasBin: true - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} @@ -5358,12 +5340,6 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -5398,9 +5374,13 @@ packages: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@17.4.0: + resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} + engines: {node: '>=18'} globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} @@ -5417,9 +5397,6 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - gravatar-url@3.1.0: resolution: {integrity: sha512-+lOs7Rz1A051OqdqE8Tm4lmeyVgkqH8c6ll5fv///ncdIaL+XnOFmKAB70ix1du/yj8c3EWKbP6OhKjihsBSfA==} engines: {node: '>=8'} @@ -5483,12 +5460,18 @@ packages: hermes-estree@0.23.1: resolution: {integrity: sha512-eT5MU3f5aVhTqsfIReZ6n41X5sYn4IdQL0nvz6yO+MMlPxw49aSARHLg/MSehQftyjnrE8X6bYregzSumqc6cg==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + hermes-parser@0.19.1: resolution: {integrity: sha512-Vp+bXzxYJWrpEuJ/vXxUsLnt0+y4q9zyi4zUlkLqD8FKv4LjIfOvP69R/9Lty3dCyKh0E2BU7Eypqr63/rKT/A==} hermes-parser@0.23.1: resolution: {integrity: sha512-oxl5h2DkFW83hT4DAUJorpah8ou4yvmweUzLJmmr6YV2cezduCdlil1AvU/a/xSsAFo4WUcNA4GoV5Bvq6JffA==} + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + hermes-profile-transformer@0.0.6: resolution: {integrity: sha512-cnN7bQUm65UWOy6cbGcCcZ3rpwW8Q/j4OP5aWRhEry4Z2t2aR1cjrbp0BS+KiBN0smvP1caBgAuxutvyvJILzQ==} engines: {node: '>=8'} @@ -5607,6 +5590,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + image-size@1.2.1: resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} engines: {node: '>=16.x'} @@ -5944,10 +5931,6 @@ packages: peerDependencies: react: '>=18.0' - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -6111,6 +6094,10 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + hasBin: true + joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} @@ -6177,17 +6164,13 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stable-stringify@1.1.1: - resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + json-stable-stringify@1.3.0: + resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} engines: {node: '>= 0.4'} json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -6464,9 +6447,8 @@ packages: resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} engines: {node: '>=12'} - magic-string@0.29.0: - resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==} - engines: {node: '>=12'} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} mailparser@3.7.2: resolution: {integrity: sha512-iI0p2TCcIodR1qGiRoDBBwboSSff50vQAWytM5JRggLfABa4hHYCf3YVujtuzV454xrOP352VsAPIzviqMTo4Q==} @@ -6754,9 +6736,16 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -7087,10 +7076,6 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - object.values@1.2.1: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} @@ -8559,10 +8544,6 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} @@ -8599,9 +8580,6 @@ packages: text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -8710,11 +8688,11 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.4.3: - resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} - engines: {node: '>=16'} + ts-api-utils@2.4.0: + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + engines: {node: '>=18.12'} peerDependencies: - typescript: '>=4.2.0' + typescript: '>=4.8.4' ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -8765,19 +8743,10 @@ packages: engines: {node: '>=16.20.2'} hasBin: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -8785,12 +8754,6 @@ packages: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -8809,10 +8772,6 @@ packages: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -8911,16 +8870,23 @@ packages: typeorm-aurora-data-api-driver: optional: true - typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true + typescript-eslint@8.57.0: + resolution: {integrity: sha512-W8GcigEMEeB07xEZol8oJ26rigm3+bfPHxHvwbYUlu1fUDsGuQ7Hiskx5xGW/xM4USc9Ephe3jtv7ZYPQntHeA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 + typescript: '>=4.8.4 <6.0.0' typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true + typescript@5.9.3: + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + engines: {node: '>=14.17'} + hasBin: true + ua-parser-js@1.0.40: resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} hasBin: true @@ -8959,6 +8925,9 @@ packages: undici-types@6.20.0: resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@7.18.2: resolution: {integrity: sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==} engines: {node: '>=20.18.1'} @@ -8967,9 +8936,6 @@ packages: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} - unicode-emoji-utils@1.2.0: - resolution: {integrity: sha512-djUB91p/6oYpgps4W5K/MAvM+UspoAANHSUW495BrxeLRoned3iNPEDQgrKx9LbLq93VhNz0NWvI61vcfrwYoA==} - unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} @@ -9333,6 +9299,12 @@ packages: zdog@1.1.3: resolution: {integrity: sha512-raRj6r0gPzopFm5XWBJZr/NuV4EEnT4iE+U3dp5FV5pCb588Gmm3zLIp/j9yqqcMiHH8VNQlerLTgOqL7krh6w==} + zod-validation-error@4.0.2: + resolution: {integrity: sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -10636,28 +10608,51 @@ snapshots: '@emotion/weak-memoize@0.4.0': {} - '@eslint-community/eslint-utils@4.9.1(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.3(jiti@2.6.1))': dependencies: - eslint: 8.57.1 + eslint: 9.39.3(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.21.2': dependencies: - ajv: 6.12.6 + '@eslint/object-schema': 2.1.7 debug: 4.4.3(supports-color@5.5.0) - espree: 9.6.1 - globals: 13.24.0 + minimatch: 3.1.5 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.4.2': + dependencies: + '@eslint/core': 0.17.0 + + '@eslint/core@0.17.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.5': + dependencies: + ajv: 6.14.0 + debug: 4.4.3(supports-color@5.5.0) + espree: 10.4.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.2 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.39.3': {} + + '@eslint/object-schema@2.1.7': {} + + '@eslint/plugin-kit@0.4.1': + dependencies: + '@eslint/core': 0.17.0 + levn: 0.4.1 '@floating-ui/core@1.7.3': dependencies: @@ -10689,6 +10684,13 @@ snapshots: decimal.js: 10.6.0 tslib: 2.8.1 + '@formatjs/ecma402-abstract@3.1.1': + dependencies: + '@formatjs/fast-memoize': 3.1.0 + '@formatjs/intl-localematcher': 0.8.1 + decimal.js: 10.6.0 + tslib: 2.8.1 + '@formatjs/fast-memoize@2.2.0': dependencies: tslib: 2.8.1 @@ -10697,10 +10699,8 @@ snapshots: dependencies: tslib: 2.8.1 - '@formatjs/icu-messageformat-parser@2.3.0': + '@formatjs/fast-memoize@3.1.0': dependencies: - '@formatjs/ecma402-abstract': 1.14.3 - '@formatjs/icu-skeleton-parser': 1.3.18 tslib: 2.8.1 '@formatjs/icu-messageformat-parser@2.7.8': @@ -10709,9 +10709,10 @@ snapshots: '@formatjs/icu-skeleton-parser': 1.8.2 tslib: 2.8.1 - '@formatjs/icu-skeleton-parser@1.3.18': + '@formatjs/icu-messageformat-parser@3.5.1': dependencies: - '@formatjs/ecma402-abstract': 1.14.3 + '@formatjs/ecma402-abstract': 3.1.1 + '@formatjs/icu-skeleton-parser': 2.1.1 tslib: 2.8.1 '@formatjs/icu-skeleton-parser@1.8.2': @@ -10719,6 +10720,11 @@ snapshots: '@formatjs/ecma402-abstract': 2.0.0 tslib: 2.8.1 + '@formatjs/icu-skeleton-parser@2.1.1': + dependencies: + '@formatjs/ecma402-abstract': 3.1.1 + tslib: 2.8.1 + '@formatjs/intl-displaynames@6.6.8': dependencies: '@formatjs/ecma402-abstract': 2.0.0 @@ -10764,6 +10770,11 @@ snapshots: dependencies: tslib: 2.8.1 + '@formatjs/intl-localematcher@0.8.1': + dependencies: + '@formatjs/fast-memoize': 3.1.0 + tslib: 2.8.1 + '@formatjs/intl-pluralrules@5.4.6': dependencies: '@formatjs/ecma402-abstract': 2.3.6 @@ -10787,15 +10798,13 @@ snapshots: optionalDependencies: typescript: 5.4.5 - '@formatjs/ts-transformer@3.12.0(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5))': + '@formatjs/ts-transformer@4.4.0(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5))': dependencies: - '@formatjs/icu-messageformat-parser': 2.3.0 - '@types/json-stable-stringify': 1.0.36 - '@types/node': 17.0.45 - chalk: 4.1.2 - json-stable-stringify: 1.1.1 + '@formatjs/icu-messageformat-parser': 3.5.1 + '@types/node': 22.19.15 + json-stable-stringify: 1.3.0 tslib: 2.8.1 - typescript: 4.9.5 + typescript: 5.9.3 optionalDependencies: ts-jest: 29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5) @@ -10823,17 +10832,16 @@ snapshots: dependencies: react: 18.3.1 - '@humanwhocodes/config-array@0.13.0': + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.7': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.4.3(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.4.3': {} '@img/sharp-darwin-arm64@0.33.4': optionalDependencies: @@ -11283,9 +11291,9 @@ snapshots: '@next/env@14.2.35': {} - '@next/eslint-plugin-next@14.2.35': + '@next/eslint-plugin-next@16.1.6': dependencies: - glob: 10.3.10 + fast-glob: 3.3.1 '@next/swc-darwin-arm64@14.2.33': optional: true @@ -12708,8 +12716,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@rushstack/eslint-patch@1.10.3': {} - '@seerr-team/react-tailwindcss-datepicker@1.3.4(dayjs@1.11.19)(react@18.3.1)': dependencies: dayjs: 1.11.19 @@ -13023,12 +13029,14 @@ snapshots: transitivePeerDependencies: - encoding - '@types/eslint@8.56.10': + '@types/eslint-plugin-jsx-a11y@6.10.1(jiti@2.6.1)': dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 + eslint: 9.39.3(jiti@2.6.1) + transitivePeerDependencies: + - jiti + - supports-color - '@types/estree@1.0.5': {} + '@types/estree@1.0.8': {} '@types/express-serve-static-core@4.19.5': dependencies: @@ -13073,10 +13081,6 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/json-stable-stringify@1.0.36': {} - - '@types/json5@0.0.29': {} - '@types/lodash@4.17.21': {} '@types/mdast@3.0.15': @@ -13107,8 +13111,6 @@ snapshots: dependencies: '@types/node': 22.10.5 - '@types/node@17.0.45': {} - '@types/node@18.19.130': dependencies: undici-types: 5.26.5 @@ -13119,6 +13121,10 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/node@22.19.15': + dependencies: + undici-types: 6.21.0 + '@types/nodemailer@7.0.9': dependencies: '@types/node': 22.10.5 @@ -13127,7 +13133,7 @@ snapshots: '@types/parse-json@4.0.2': {} - '@types/picomatch@2.3.3': {} + '@types/picomatch@4.0.2': {} '@types/prop-types@15.7.15': {} @@ -13233,109 +13239,101 @@ snapshots: '@types/yup@0.29.14': {} - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.1 - graphemer: 1.4.0 - ignore: 5.3.2 + '@typescript-eslint/parser': 8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/type-utils': 8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/utils': 8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.57.0 + eslint: 9.39.3(jiti@2.6.1) + ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 1.4.3(typescript@5.4.5) - optionalDependencies: + ts-api-utils: 2.4.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/parser@8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 8.57.0 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - optionalDependencies: + eslint: 9.39.3(jiti@2.6.1) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.18.0': + '@typescript-eslint/project-service@8.57.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.4.5)': - dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.4.5) + '@typescript-eslint/types': 8.57.0 debug: 4.4.3(supports-color@5.5.0) - eslint: 8.57.1 - ts-api-utils: 1.4.3(typescript@5.4.5) - optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@5.45.0': {} - - '@typescript-eslint/types@7.18.0': {} - - '@typescript-eslint/typescript-estree@5.45.0(typescript@4.9.5)': + '@typescript-eslint/scope-manager@8.57.0': dependencies: - '@typescript-eslint/types': 5.45.0 - '@typescript-eslint/visitor-keys': 5.45.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 + + '@typescript-eslint/tsconfig-utils@8.57.0(typescript@5.4.5)': + dependencies: + typescript: 5.4.5 + + '@typescript-eslint/type-utils@8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 + eslint: 9.39.3(jiti@2.6.1) + ts-api-utils: 2.4.0(typescript@5.4.5) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.57.0': {} + + '@typescript-eslint/typescript-estree@8.57.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/project-service': 8.57.0(typescript@5.4.5) + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@5.4.5) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 + debug: 4.4.3(supports-color@5.5.0) + minimatch: 10.2.4 semver: 7.7.3 - tsutils: 3.21.0(typescript@4.9.5) - optionalDependencies: - typescript: 4.9.5 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5)': - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.3(supports-color@5.5.0) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.3 - ts-api-utils: 1.4.3(typescript@5.4.5) - optionalDependencies: + tinyglobby: 0.2.15 + ts-api-utils: 2.4.0(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.4.5)': + '@typescript-eslint/utils@8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - eslint: 8.57.1 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.4.5) + eslint: 9.39.3(jiti@2.6.1) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - - typescript - '@typescript-eslint/visitor-keys@5.45.0': + '@typescript-eslint/visitor-keys@8.57.0': dependencies: - '@typescript-eslint/types': 5.45.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.57.0 + eslint-visitor-keys: 5.0.1 - '@typescript-eslint/visitor-keys@7.18.0': - dependencies: - '@typescript-eslint/types': 7.18.0 - eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.3.0': + optional: true - '@ungap/structured-clone@1.3.0': {} + '@unicode/unicode-17.0.0@1.6.16': {} '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -13450,6 +13448,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.16.0: dependencies: fast-deep-equal: 3.1.3 @@ -13562,15 +13567,6 @@ snapshots: es-object-atoms: 1.1.1 es-shim-unscopables: 1.0.2 - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.8 @@ -13811,6 +13807,8 @@ snapshots: balanced-match@1.0.2: {} + balanced-match@4.0.4: {} + base64-js@1.5.1: {} baseline-browser-mapping@2.9.18: {} @@ -13876,6 +13874,10 @@ snapshots: dependencies: balanced-match: 1.0.2 + brace-expansion@5.0.4: + dependencies: + balanced-match: 4.0.4 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -14743,10 +14745,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - doctypes@1.1.0: {} dom-helpers@5.2.1: @@ -14889,8 +14887,6 @@ snapshots: emittery@0.13.1: optional: true - emoji-regex@10.3.0: {} - emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -14915,11 +14911,6 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.17.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -15064,111 +15055,24 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@14.2.35(eslint@8.57.1)(typescript@5.4.5): + eslint-config-prettier@10.1.8(eslint@9.39.3(jiti@2.6.1)): dependencies: - '@next/eslint-plugin-next': 14.2.35 - '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) - eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) - eslint-plugin-react: 7.37.5(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.1) - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - supports-color + eslint: 9.39.3(jiti@2.6.1) - eslint-config-prettier@8.6.0(eslint@8.57.1): + eslint-plugin-formatjs@6.2.0(eslint@9.39.3(jiti@2.6.1))(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5)): dependencies: - eslint: 8.57.1 - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7(supports-color@8.1.1) - is-core-module: 2.16.1 - resolve: 1.22.11 + '@formatjs/icu-messageformat-parser': 3.5.1 + '@formatjs/ts-transformer': 4.4.0(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5)) + '@types/picomatch': 4.0.2 + '@unicode/unicode-17.0.0': 1.6.16 + eslint: 9.39.3(jiti@2.6.1) + magic-string: 0.30.21 + picomatch: 4.0.3 + tslib: 2.8.1 transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.1): - dependencies: - debug: 4.4.3(supports-color@5.5.0) - enhanced-resolve: 5.17.0 - eslint: 8.57.1 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) - fast-glob: 3.3.3 - get-tsconfig: 4.13.0 - is-core-module: 2.16.1 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): - dependencies: - debug: 3.2.7(supports-color@8.1.1) - optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.1)(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - - eslint-plugin-formatjs@4.9.0(eslint@8.57.1)(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5)): - dependencies: - '@formatjs/icu-messageformat-parser': 2.3.0 - '@formatjs/ts-transformer': 3.12.0(ts-jest@29.4.6(@babel/core@7.28.6)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.6))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.10.5)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.6.5(@swc/helpers@0.5.11))(@types/node@22.10.5)(typescript@5.4.5)))(typescript@5.4.5)) - '@types/eslint': 8.56.10 - '@types/picomatch': 2.3.3 - '@typescript-eslint/typescript-estree': 5.45.0(typescript@4.9.5) - emoji-regex: 10.3.0 - eslint: 8.57.1 - magic-string: 0.29.0 - picomatch: 2.3.1 - tslib: 2.4.0 - typescript: 4.9.5 - unicode-emoji-utils: 1.2.0 - transitivePeerDependencies: - - supports-color - ts-jest - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7(supports-color@8.1.1) - doctrine: 2.1.0 - eslint: 8.57.1 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.1) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.3(jiti@2.6.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.8 @@ -15178,7 +15082,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.57.1 + eslint: 9.39.3(jiti@2.6.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -15189,19 +15093,26 @@ snapshots: eslint-plugin-no-relative-import-paths@1.6.1: {} - eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.6.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.8.1): + eslint-plugin-prettier@4.2.1(eslint-config-prettier@10.1.8(eslint@9.39.3(jiti@2.6.1)))(eslint@9.39.3(jiti@2.6.1))(prettier@3.8.1): dependencies: - eslint: 8.57.1 + eslint: 9.39.3(jiti@2.6.1) prettier: 3.8.1 prettier-linter-helpers: 1.0.0 optionalDependencies: - eslint-config-prettier: 8.6.0(eslint@8.57.1) + eslint-config-prettier: 10.1.8(eslint@9.39.3(jiti@2.6.1)) - eslint-plugin-react-hooks@4.6.0(eslint@8.57.1): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.3(jiti@2.6.1)): dependencies: - eslint: 8.57.1 + '@babel/core': 7.28.6 + '@babel/parser': 7.28.6 + eslint: 9.39.3(jiti@2.6.1) + hermes-parser: 0.25.1 + zod: 4.3.6 + zod-validation-error: 4.0.2(zod@4.3.6) + transitivePeerDependencies: + - supports-color - eslint-plugin-react@7.37.5(eslint@8.57.1): + eslint-plugin-react@7.37.5(eslint@9.39.3(jiti@2.6.1)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -15209,7 +15120,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 8.57.1 + eslint: 9.39.3(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -15223,61 +15134,63 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-scope@7.2.2: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.2.1: {} + + eslint-visitor-keys@5.0.1: {} + + eslint@9.39.3(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.3(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint/config-array': 0.21.2 + '@eslint/config-helpers': 0.4.2 + '@eslint/core': 0.17.0 + '@eslint/eslintrc': 3.3.5 + '@eslint/js': 9.39.3 + '@eslint/plugin-kit': 0.4.1 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.3.0 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@5.5.0) - 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 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.7.0 esutils: 2.0.3 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.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.1 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.4 - strip-ansi: 6.0.1 - text-table: 0.2.0 + optionalDependencies: + jiti: 2.6.1 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.4.0: dependencies: acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.2.1 esprima@1.2.5: optional: true @@ -15474,6 +15387,14 @@ snapshots: fast-diff@1.3.0: {} + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -15516,9 +15437,9 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 file-stream-rotator@0.6.1: dependencies: @@ -15598,11 +15519,10 @@ snapshots: rc: 1.2.8 optional: true - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.3 keyv: 4.5.4 - rimraf: 3.0.2 flatted@3.3.3: {} @@ -15788,14 +15708,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.10: - dependencies: - foreground-child: 3.2.1 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - glob@10.5.0: dependencies: foreground-child: 3.2.1 @@ -15849,9 +15761,9 @@ snapshots: is-windows: 1.0.2 which: 1.3.1 - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} + + globals@17.4.0: {} globalthis@1.0.4: dependencies: @@ -15871,8 +15783,6 @@ snapshots: graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - gravatar-url@3.1.0: dependencies: md5-hex: 3.0.1 @@ -15930,6 +15840,8 @@ snapshots: hermes-estree@0.23.1: {} + hermes-estree@0.25.1: {} + hermes-parser@0.19.1: dependencies: hermes-estree: 0.19.1 @@ -15938,6 +15850,10 @@ snapshots: dependencies: hermes-estree: 0.23.1 + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + hermes-profile-transformer@0.0.6: dependencies: source-map: 0.7.6 @@ -16094,6 +16010,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + image-size@1.2.1: dependencies: queue: 6.0.2 @@ -16421,12 +16339,6 @@ snapshots: transitivePeerDependencies: - '@types/react' - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -16826,6 +16738,8 @@ snapshots: jiti@1.21.7: {} + jiti@2.6.1: {} + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 @@ -16900,19 +16814,16 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stable-stringify@1.1.1: + json-stable-stringify@1.3.0: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 json-stringify-safe@5.0.1: {} - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} jsonfile@4.0.0: @@ -17206,7 +17117,7 @@ snapshots: luxon@3.4.4: {} - magic-string@0.29.0: + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -17726,10 +17637,18 @@ snapshots: minimalistic-assert@1.0.1: {} + minimatch@10.2.4: + dependencies: + brace-expansion: 5.0.4 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.12 + minimatch@5.1.6: dependencies: brace-expansion: 2.0.2 @@ -18080,12 +17999,6 @@ snapshots: es-abstract: 1.24.0 es-object-atoms: 1.1.1 - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.0 - object.values@1.2.1: dependencies: call-bind: 1.0.8 @@ -19818,8 +19731,6 @@ snapshots: - tsx - yaml - tapable@2.2.1: {} - tar-fs@2.1.4: dependencies: chownr: 1.1.4 @@ -19868,8 +19779,6 @@ snapshots: text-hex@1.0.0: {} - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -19956,7 +19865,7 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.4.3(typescript@5.4.5): + ts-api-utils@2.4.0(typescript@5.4.5): dependencies: typescript: 5.4.5 @@ -20033,32 +19942,16 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} - - tslib@2.4.0: {} - tslib@2.8.1: {} tsscmp@1.0.6: {} - tsutils@3.21.0(typescript@4.9.5): - dependencies: - tslib: 1.14.1 - typescript: 4.9.5 - tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 @@ -20073,8 +19966,6 @@ snapshots: type-fest@0.18.1: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} @@ -20151,10 +20042,21 @@ snapshots: - babel-plugin-macros - supports-color - typescript@4.9.5: {} + typescript-eslint@8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5): + dependencies: + '@typescript-eslint/eslint-plugin': 8.57.0(@typescript-eslint/parser@8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5))(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/parser': 8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 8.57.0(typescript@5.4.5) + '@typescript-eslint/utils': 8.57.0(eslint@9.39.3(jiti@2.6.1))(typescript@5.4.5) + eslint: 9.39.3(jiti@2.6.1) + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color typescript@5.4.5: {} + typescript@5.9.3: {} + ua-parser-js@1.0.40: {} uc.micro@2.1.0: @@ -20186,14 +20088,12 @@ snapshots: undici-types@6.20.0: {} + undici-types@6.21.0: {} + undici@7.18.2: {} unicode-canonical-property-names-ecmascript@2.0.0: {} - unicode-emoji-utils@1.2.0: - dependencies: - emoji-regex: 10.3.0 - unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.0 @@ -20636,6 +20536,10 @@ snapshots: zdog@1.1.3: {} + zod-validation-error@4.0.2(zod@4.3.6): + dependencies: + zod: 4.3.6 + zod@4.3.6: {} zustand@3.7.2(react@18.3.1): diff --git a/server/api/animelist.ts b/server/api/animelist.ts index 9351a9ae..01687ddd 100644 --- a/server/api/animelist.ts +++ b/server/api/animelist.ts @@ -154,7 +154,9 @@ class AnimeListMapping { { label: 'Anime-List Sync' } ); } catch (e) { - throw new Error(`Failed to load Anime-List mappings: ${e.message}`); + throw new Error(`Failed to load Anime-List mappings: ${e.message}`, { + cause: e, + }); } }; @@ -173,7 +175,9 @@ class AnimeListMapping { response.data.pipe(writer); }); } catch (e) { - throw new Error(`Failed to download Anime-List mapping: ${e.message}`); + throw new Error(`Failed to download Anime-List mapping: ${e.message}`, { + cause: e, + }); } }; diff --git a/server/api/jellyfin.ts b/server/api/jellyfin.ts index 1507f00b..011bb587 100644 --- a/server/api/jellyfin.ts +++ b/server/api/jellyfin.ts @@ -284,7 +284,7 @@ class JellyfinAPI extends ExternalAPI { const mediaFolderResponse = await this.get(`/Library/MediaFolders`); return this.mapLibraries(mediaFolderResponse.Items); - } catch (mediaFoldersResponseError) { + } catch { // fallback to user views to get libraries // this only and maybe/depending on factors affects LDAP users try { diff --git a/server/api/plextv.ts b/server/api/plextv.ts index bfc75bc1..cec084c3 100644 --- a/server/api/plextv.ts +++ b/server/api/plextv.ts @@ -205,7 +205,7 @@ class PlexTvAPI extends ExternalAPI { label: 'Plex.tv API', errorMessage: e.message, }); - throw new Error('Invalid auth token'); + throw new Error('Invalid auth token', { cause: e }); } } @@ -221,7 +221,7 @@ class PlexTvAPI extends ExternalAPI { `Something went wrong while getting the account from plex.tv: ${e.message}`, { label: 'Plex.tv API' } ); - throw new Error('Invalid auth token'); + throw new Error('Invalid auth token', { cause: e }); } } diff --git a/server/api/pushover.ts b/server/api/pushover.ts index 92b93130..fb673553 100644 --- a/server/api/pushover.ts +++ b/server/api/pushover.ts @@ -48,7 +48,9 @@ class PushoverAPI extends ExternalAPI { return mapSounds(data.sounds); } catch (e) { - throw new Error(`[Pushover] Failed to retrieve sounds: ${e.message}`); + throw new Error(`[Pushover] Failed to retrieve sounds: ${e.message}`, { + cause: e, + }); } } } diff --git a/server/api/rating/imdbRadarrProxy.ts b/server/api/rating/imdbRadarrProxy.ts index b495e579..0ae0a6da 100644 --- a/server/api/rating/imdbRadarrProxy.ts +++ b/server/api/rating/imdbRadarrProxy.ts @@ -192,7 +192,8 @@ class IMDBRadarrProxy extends ExternalAPI { }; } catch (e) { throw new Error( - `[IMDB RADARR PROXY API] Failed to retrieve movie ratings: ${e.message}` + `[IMDB RADARR PROXY API] Failed to retrieve movie ratings: ${e.message}`, + { cause: e } ); } } diff --git a/server/api/rating/rottentomatoes.ts b/server/api/rating/rottentomatoes.ts index 9b509e95..c21739de 100644 --- a/server/api/rating/rottentomatoes.ts +++ b/server/api/rating/rottentomatoes.ts @@ -167,7 +167,8 @@ class RottenTomatoes extends ExternalAPI { }; } catch (e) { throw new Error( - `[RT API] Failed to retrieve movie ratings: ${e.message}` + `[RT API] Failed to retrieve movie ratings: ${e.message}`, + { cause: e } ); } } @@ -205,7 +206,9 @@ class RottenTomatoes extends ExternalAPI { year: Number(tvshow.releaseYear), }; } catch (e) { - throw new Error(`[RT API] Failed to retrieve tv ratings: ${e.message}`); + throw new Error(`[RT API] Failed to retrieve tv ratings: ${e.message}`, { + cause: e, + }); } } } diff --git a/server/api/servarr/base.ts b/server/api/servarr/base.ts index 5e18f5b4..70b1e8c7 100644 --- a/server/api/servarr/base.ts +++ b/server/api/servarr/base.ts @@ -121,7 +121,8 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve system status: ${e.message}` + `[${this.apiName}] Failed to retrieve system status: ${e.message}`, + { cause: e } ); } }; @@ -137,7 +138,8 @@ class ServarrBase extends ExternalAPI { return data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve profiles: ${e.message}` + `[${this.apiName}] Failed to retrieve profiles: ${e.message}`, + { cause: e } ); } }; @@ -153,7 +155,8 @@ class ServarrBase extends ExternalAPI { return data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve root folders: ${e.message}` + `[${this.apiName}] Failed to retrieve root folders: ${e.message}`, + { cause: e } ); } }; @@ -172,7 +175,8 @@ class ServarrBase extends ExternalAPI { return response.data.records; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve queue: ${e.message}` + `[${this.apiName}] Failed to retrieve queue: ${e.message}`, + { cause: e } ); } }; @@ -184,7 +188,8 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { throw new Error( - `[${this.apiName}] Failed to retrieve tags: ${e.message}` + `[${this.apiName}] Failed to retrieve tags: ${e.message}`, + { cause: e } ); } }; @@ -197,7 +202,9 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { - throw new Error(`[${this.apiName}] Failed to create tag: ${e.message}`); + throw new Error(`[${this.apiName}] Failed to create tag: ${e.message}`, { + cause: e, + }); } }; @@ -216,7 +223,9 @@ class ServarrBase extends ExternalAPI { return response.data; } catch (e) { - throw new Error(`[${this.apiName}] Failed to rename tag: ${e.message}`); + throw new Error(`[${this.apiName}] Failed to rename tag: ${e.message}`, { + cause: e, + }); } }; @@ -234,7 +243,9 @@ class ServarrBase extends ExternalAPI { ...options, }); } catch (e) { - throw new Error(`[${this.apiName}] Failed to run command: ${e.message}`); + throw new Error(`[${this.apiName}] Failed to run command: ${e.message}`, { + cause: e, + }); } } } diff --git a/server/api/servarr/radarr.ts b/server/api/servarr/radarr.ts index 75f32026..1d35778c 100644 --- a/server/api/servarr/radarr.ts +++ b/server/api/servarr/radarr.ts @@ -74,7 +74,9 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { return response.data; } catch (e) { - throw new Error(`[Radarr] Failed to retrieve movies: ${e.message}`); + throw new Error(`[Radarr] Failed to retrieve movies: ${e.message}`, { + cause: e, + }); } }; @@ -84,7 +86,9 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { return response.data; } catch (e) { - throw new Error(`[Radarr] Failed to retrieve movie: ${e.message}`); + throw new Error(`[Radarr] Failed to retrieve movie: ${e.message}`, { + cause: e, + }); } }; @@ -107,7 +111,7 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { errorMessage: e.message, tmdbId: id, }); - throw new Error('Movie not found'); + throw new Error('Movie not found', { cause: e }); } } @@ -240,7 +244,7 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { response: e?.response?.data, } ); - throw new Error('Failed to add movie to Radarr'); + throw new Error('Failed to add movie to Radarr', { cause: e }); } }; @@ -274,7 +278,9 @@ class RadarrAPI extends ServarrBase<{ movieId: number }> { }); logger.info(`[Radarr] Removed movie ${title}`); } catch (e) { - throw new Error(`[Radarr] Failed to remove movie: ${e.message}`); + throw new Error(`[Radarr] Failed to remove movie: ${e.message}`, { + cause: e, + }); } }; diff --git a/server/api/servarr/sonarr.ts b/server/api/servarr/sonarr.ts index 76f1416d..33354e1c 100644 --- a/server/api/servarr/sonarr.ts +++ b/server/api/servarr/sonarr.ts @@ -123,7 +123,9 @@ class SonarrAPI extends ServarrBase<{ return response.data; } catch (e) { - throw new Error(`[Sonarr] Failed to retrieve series: ${e.message}`); + throw new Error(`[Sonarr] Failed to retrieve series: ${e.message}`, { + cause: e, + }); } } @@ -133,7 +135,10 @@ class SonarrAPI extends ServarrBase<{ return response.data; } catch (e) { - throw new Error(`[Sonarr] Failed to retrieve series by ID: ${e.message}`); + throw new Error( + `[Sonarr] Failed to retrieve series by ID: ${e.message}`, + { cause: e } + ); } } @@ -156,7 +161,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, title, }); - throw new Error('No series found'); + throw new Error('No series found', { cause: e }); } } @@ -179,7 +184,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, tvdbId: id, }); - throw new Error('Series not found'); + throw new Error('Series not found', { cause: e }); } } @@ -303,7 +308,7 @@ class SonarrAPI extends ServarrBase<{ options, response: e?.response?.data, }); - throw new Error('Failed to add series'); + throw new Error('Failed to add series', { cause: e }); } } @@ -325,7 +330,7 @@ class SonarrAPI extends ServarrBase<{ } ); - throw new Error('Failed to get language profiles'); + throw new Error('Failed to get language profiles', { cause: e }); } } @@ -361,7 +366,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, seriesId, }); - throw new Error('Failed to get episodes'); + throw new Error('Failed to get episodes', { cause: e }); } } @@ -377,7 +382,7 @@ class SonarrAPI extends ServarrBase<{ errorMessage: e.message, episodeIds, }); - throw new Error('Failed to monitor episodes'); + throw new Error('Failed to monitor episodes', { cause: e }); } } @@ -416,7 +421,9 @@ class SonarrAPI extends ServarrBase<{ }); logger.info(`[Sonarr] Removed series ${title}`); } catch (e) { - throw new Error(`[Sonarr] Failed to remove series: ${e.message}`); + throw new Error(`[Sonarr] Failed to remove series: ${e.message}`, { + cause: e, + }); } }; diff --git a/server/api/tautulli.ts b/server/api/tautulli.ts index e9cb65ad..977560a5 100644 --- a/server/api/tautulli.ts +++ b/server/api/tautulli.ts @@ -140,7 +140,8 @@ class TautulliAPI { errorMessage: e.message, }); throw new Error( - `[Tautulli] Failed to fetch Tautulli server info: ${e.message}` + `[Tautulli] Failed to fetch Tautulli server info: ${e.message}`, + { cause: e } ); } } @@ -168,7 +169,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch media watch stats: ${e.message}` + `[Tautulli] Failed to fetch media watch stats: ${e.message}`, + { cause: e } ); } } @@ -196,7 +198,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch media watch users: ${e.message}` + `[Tautulli] Failed to fetch media watch users: ${e.message}`, + { cause: e } ); } } @@ -227,7 +230,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch user watch stats: ${e.message}` + `[Tautulli] Failed to fetch user watch stats: ${e.message}`, + { cause: e } ); } } @@ -287,7 +291,8 @@ class TautulliAPI { } ); throw new Error( - `[Tautulli] Failed to fetch user watch history: ${e.message}` + `[Tautulli] Failed to fetch user watch history: ${e.message}`, + { cause: e } ); } } diff --git a/server/api/themoviedb/index.ts b/server/api/themoviedb/index.ts index 666c7a25..38520383 100644 --- a/server/api/themoviedb/index.ts +++ b/server/api/themoviedb/index.ts @@ -162,7 +162,7 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { }); return data; - } catch (e) { + } catch { return { page: 1, results: [], @@ -191,7 +191,7 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { }); return data; - } catch (e) { + } catch { return { page: 1, results: [], @@ -220,7 +220,7 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { }); return data; - } catch (e) { + } catch { return { page: 1, results: [], @@ -244,7 +244,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch person details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch person details: ${e.message}`, { + cause: e, + }); } }; @@ -266,7 +268,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { throw new Error( - `[TMDB] Failed to fetch person combined credits: ${e.message}` + `[TMDB] Failed to fetch person combined credits: ${e.message}`, + { cause: e } ); } }; @@ -294,7 +297,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch movie details: ${e.message}`, { + cause: e, + }); } }; @@ -321,7 +326,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`, { + cause: e, + }); } }; @@ -354,7 +361,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV show details: ${e.message}`, { + cause: e, + }); } }; @@ -380,7 +389,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`, { + cause: e, + }); } } @@ -406,7 +417,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`, { + cause: e, + }); } } @@ -432,7 +445,10 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movies by keyword: ${e.message}`); + throw new Error( + `[TMDB] Failed to fetch movies by keyword: ${e.message}`, + { cause: e } + ); } } @@ -459,7 +475,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { throw new Error( - `[TMDB] Failed to fetch TV recommendations: ${e.message}` + `[TMDB] Failed to fetch TV recommendations: ${e.message}`, + { cause: e } ); } } @@ -483,7 +500,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV similar: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV similar: ${e.message}`, { + cause: e, + }); } } @@ -569,7 +588,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover movies: ${e.message}`, { + cause: e, + }); } }; @@ -655,7 +676,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch discover TV: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch discover TV: ${e.message}`, { + cause: e, + }); } }; @@ -681,7 +704,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch upcoming movies: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch upcoming movies: ${e.message}`, { + cause: e, + }); } }; @@ -708,7 +733,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`, { + cause: e, + }); } }; @@ -734,7 +761,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`, { + cause: e, + }); } }; @@ -760,7 +789,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch all trending: ${e.message}`, { + cause: e, + }); } }; @@ -792,7 +823,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to find by external ID: ${e.message}`); + throw new Error(`[TMDB] Failed to find by external ID: ${e.message}`, { + cause: e, + }); } } @@ -830,7 +863,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { throw new Error(`No movie or show returned from API for ID ${imdbId}`); } catch (e) { throw new Error( - `[TMDB] Failed to find media using external IMDb ID: ${e.message}` + `[TMDB] Failed to find media using external IMDb ID: ${e.message}`, + { cause: e } ); } } @@ -860,7 +894,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { throw new Error(`No show returned from API for ID ${tvdbId}`); } catch (e) { throw new Error( - `[TMDB] Failed to get TV show using the external TVDB ID: ${e.message}` + `[TMDB] Failed to get TV show using the external TVDB ID: ${e.message}`, + { cause: e } ); } } @@ -884,7 +919,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch collection: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch collection: ${e.message}`, { + cause: e, + }); } } @@ -900,7 +937,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return regions; } catch (e) { - throw new Error(`[TMDB] Failed to fetch countries: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch countries: ${e.message}`, { + cause: e, + }); } } @@ -916,7 +955,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return languages; } catch (e) { - throw new Error(`[TMDB] Failed to fetch langauges: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch langauges: ${e.message}`, { + cause: e, + }); } } @@ -928,7 +969,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie studio: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch movie studio: ${e.message}`, { + cause: e, + }); } } @@ -938,7 +981,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV network: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV network: ${e.message}`, { + cause: e, + }); } } @@ -989,7 +1034,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return movieGenres; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie genres: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch movie genres: ${e.message}`, { + cause: e, + }); } } @@ -1040,7 +1087,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return tvGenres; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV genres: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch TV genres: ${e.message}`, { + cause: e, + }); } } @@ -1055,7 +1104,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch movie certifications: ${e}`); + throw new Error(`[TMDB] Failed to fetch movie certifications: ${e}`, { + cause: e, + }); } }; @@ -1069,7 +1120,10 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to fetch TV certifications: ${e.message}`); + throw new Error( + `[TMDB] Failed to fetch TV certifications: ${e.message}`, + { cause: e } + ); } }; @@ -1090,7 +1144,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { if (e.response?.status === 404) { return null; } - throw new Error(`[TMDB] Failed to fetch keyword: ${e.message}`); + throw new Error(`[TMDB] Failed to fetch keyword: ${e.message}`, { + cause: e, + }); } } @@ -1115,7 +1171,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to search keyword: ${e.message}`); + throw new Error(`[TMDB] Failed to search keyword: ${e.message}`, { + cause: e, + }); } } @@ -1140,7 +1198,9 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data; } catch (e) { - throw new Error(`[TMDB] Failed to search companies: ${e.message}`); + throw new Error(`[TMDB] Failed to search companies: ${e.message}`, { + cause: e, + }); } } @@ -1163,7 +1223,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data.results; } catch (e) { throw new Error( - `[TMDB] Failed to fetch available watch regions: ${e.message}` + `[TMDB] Failed to fetch available watch regions: ${e.message}`, + { cause: e } ); } } @@ -1190,7 +1251,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data.results; } catch (e) { throw new Error( - `[TMDB] Failed to fetch movie watch providers: ${e.message}` + `[TMDB] Failed to fetch movie watch providers: ${e.message}`, + { cause: e } ); } } @@ -1217,7 +1279,8 @@ class TheMovieDb extends ExternalAPI implements TvShowProvider { return data.results; } catch (e) { throw new Error( - `[TMDB] Failed to fetch TV watch providers: ${e.message}` + `[TMDB] Failed to fetch TV watch providers: ${e.message}`, + { cause: e } ); } } diff --git a/server/api/tvdb/index.ts b/server/api/tvdb/index.ts index 62b6c85a..62d7a4d5 100644 --- a/server/api/tvdb/index.ts +++ b/server/api/tvdb/index.ts @@ -156,7 +156,7 @@ class Tvdb extends ExternalAPI implements TvShowProvider { } return tmdbTvShow; - } catch (error) { + } catch { return tmdbTvShow; } } catch (error) { diff --git a/server/interfaces/api/common.ts b/server/interfaces/api/common.ts index d9e9490b..fb74c170 100644 --- a/server/interfaces/api/common.ts +++ b/server/interfaces/api/common.ts @@ -13,7 +13,7 @@ export interface PaginatedResponse { * Get the keys of an object that are not functions */ type NonFunctionPropertyNames = { - // eslint-disable-next-line @typescript-eslint/ban-types + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type [K in keyof T]: T[K] extends Function ? never : K; }[keyof T]; diff --git a/server/lib/imageproxy.ts b/server/lib/imageproxy.ts index 39b3e287..2b60c309 100644 --- a/server/lib/imageproxy.ts +++ b/server/lib/imageproxy.ts @@ -254,7 +254,7 @@ class ImageProxy { imageBuffer: buffer, }; } - } catch (e) { + } catch { // No files. Treat as empty cache. } diff --git a/server/lib/notifications/index.ts b/server/lib/notifications/index.ts index 71aea8fe..b822ae6e 100644 --- a/server/lib/notifications/index.ts +++ b/server/lib/notifications/index.ts @@ -23,7 +23,7 @@ export const hasNotificationType = ( types: Notification | Notification[], value: number ): boolean => { - let total = 0; + let total: number; // If we are not checking any notifications, bail out and return true if (types === 0) { diff --git a/server/lib/overseerrMerge.ts b/server/lib/overseerrMerge.ts index 43b83d32..e5f90e48 100644 --- a/server/lib/overseerrMerge.ts +++ b/server/lib/overseerrMerge.ts @@ -36,7 +36,7 @@ const checkOverseerrMerge = async (): Promise => { // We have to replace Jellyseerr migrations not working with Overseerr with a custom one try { // Filter out the Jellyseerr migrations and replace them with the Seerr migration - // eslint-disable-next-line @typescript-eslint/ban-types + // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type const newMigrations: MixedList = migrations ?.filter( (migration) => diff --git a/server/routes/avatarproxy.ts b/server/routes/avatarproxy.ts index 17df5211..ef523843 100644 --- a/server/routes/avatarproxy.ts +++ b/server/routes/avatarproxy.ts @@ -61,7 +61,7 @@ export async function checkAvatarChanged( if (headResponse.status !== 200) { return { changed: false }; } - } catch (error) { + } catch { return { changed: false }; } diff --git a/server/routes/discover.ts b/server/routes/discover.ts index 4f12ce7d..8be3603d 100644 --- a/server/routes/discover.ts +++ b/server/routes/discover.ts @@ -915,7 +915,7 @@ discoverRoutes.get, WatchlistResponse>( async (req, res) => { const userRepository = getRepository(User); const itemsPerPage = 20; - const page = Number(req.query.page) ?? 1; + const page = req.query.page ? Number(req.query.page) : 1; const offset = (page - 1) * itemsPerPage; const activeUser = await userRepository.findOne({ diff --git a/server/routes/media.ts b/server/routes/media.ts index 8bc1b8ba..de3c1b6d 100644 --- a/server/routes/media.ts +++ b/server/routes/media.ts @@ -48,8 +48,6 @@ mediaRoutes.get('/', async (req, res, next) => { case 'pending': statusFilter = MediaStatus.PENDING; break; - default: - statusFilter = undefined; } let sortFilter: FindOneOptions['order'] = { diff --git a/server/routes/user/index.ts b/server/routes/user/index.ts index 64766bfa..7a8ad407 100644 --- a/server/routes/user/index.ts +++ b/server/routes/user/index.ts @@ -269,7 +269,7 @@ router.post< ); return res.status(204).send(); - } catch (e) { + } catch { logger.error('Failed to register user push subscription', { label: 'API', }); @@ -290,7 +290,7 @@ router.get<{ userId: string }>( }); return res.status(200).json(userPushSubs); - } catch (e) { + } catch { next({ status: 404, message: 'User subscriptions not found.' }); } } @@ -314,7 +314,7 @@ router.get<{ userId: string; endpoint: string }>( }); return res.status(200).json(userPushSub); - } catch (e) { + } catch { next({ status: 404, message: 'User subscription not found.' }); } } @@ -368,7 +368,7 @@ router.get<{ id: string }>('/:id', async (req, res, next) => { const isAdmin = req.user?.hasPermission(Permission.MANAGE_USERS); return res.status(200).json(user.filter(isOwnProfile || isAdmin)); - } catch (e) { + } catch { next({ status: 404, message: 'User not found.' }); } }); @@ -513,7 +513,7 @@ router.put<{ id: string }>( await userRepository.save(user); return res.status(200).json(user.filter()); - } catch (e) { + } catch { next({ status: 404, message: 'User not found.' }); } } @@ -877,7 +877,7 @@ router.get<{ id: string }, WatchlistResponse>( } const itemsPerPage = 20; - const page = Number(req.query.page) ?? 1; + const page = req.query.page ? Number(req.query.page) : 1; const offset = (page - 1) * itemsPerPage; const user = await getRepository(User).findOneOrFail({ diff --git a/server/types/custom.d.ts b/server/types/custom.d.ts index f2f47c60..279c4d6a 100644 --- a/server/types/custom.d.ts +++ b/server/types/custom.d.ts @@ -1,4 +1,4 @@ declare module '@dr.pogodin/csurf' { - import csrf = require('csurf'); + import csrf from 'csurf'; export = csrf; } diff --git a/server/utils/appDataVolume.ts b/server/utils/appDataVolume.ts index 837f7f66..6779d30c 100644 --- a/server/utils/appDataVolume.ts +++ b/server/utils/appDataVolume.ts @@ -19,7 +19,7 @@ export const appDataPermissions = (): boolean => { try { accessSync(CONFIG_PATH); return true; - } catch (err) { + } catch { return false; } }; diff --git a/server/utils/appVersion.ts b/server/utils/appVersion.ts index d01a08a9..d7493d22 100644 --- a/server/utils/appVersion.ts +++ b/server/utils/appVersion.ts @@ -6,7 +6,7 @@ const COMMIT_TAG_PATH = path.join(__dirname, '../../committag.json'); let commitTag = 'local'; if (existsSync(COMMIT_TAG_PATH)) { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports commitTag = require(COMMIT_TAG_PATH).commitTag; logger.info(`Commit Tag: ${commitTag}`); } @@ -16,7 +16,7 @@ export const getCommitTag = (): string => { }; export const getAppVersion = (): string => { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const { version } = require('../../package.json'); let finalVersion = version; diff --git a/src/components/BlocklistBlock/index.tsx b/src/components/BlocklistBlock/index.tsx index af910f2f..c53a1c8a 100644 --- a/src/components/BlocklistBlock/index.tsx +++ b/src/components/BlocklistBlock/index.tsx @@ -64,8 +64,8 @@ const BlocklistBlock = ({ }); } - onUpdate && onUpdate(); - onDelete && onDelete(); + onUpdate?.(); + onDelete?.(); setIsUpdating(false); }; diff --git a/src/components/BlocklistedTagsSelector/index.tsx b/src/components/BlocklistedTagsSelector/index.tsx index d0ad658e..4bee8ac1 100644 --- a/src/components/BlocklistedTagsSelector/index.tsx +++ b/src/components/BlocklistedTagsSelector/index.tsx @@ -276,7 +276,7 @@ const BlocklistedTagImportForm = forwardRef< label: data.name, value: data.id, }; - } catch (err) { + } catch { throw intl.formatMessage(messages.invalidKeyword, { keywordId }); } }) diff --git a/src/components/Discover/CreateSlider/index.tsx b/src/components/Discover/CreateSlider/index.tsx index e7162de2..8eea2865 100644 --- a/src/components/Discover/CreateSlider/index.tsx +++ b/src/components/Discover/CreateSlider/index.tsx @@ -341,7 +341,7 @@ const CreateSlider = ({ onCreate, slider }: CreateSliderProps) => { ); onCreate(); resetForm(); - } catch (e) { + } catch { addToast( intl.formatMessage(slider ? messages.editfail : messages.addfail), { diff --git a/src/components/Discover/DiscoverSliderEdit/index.tsx b/src/components/Discover/DiscoverSliderEdit/index.tsx index 219a0eed..41425c78 100644 --- a/src/components/Discover/DiscoverSliderEdit/index.tsx +++ b/src/components/Discover/DiscoverSliderEdit/index.tsx @@ -84,7 +84,7 @@ const DiscoverSliderEdit = ({ autoDismiss: true, }); onDelete(); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.deletefail), { appearance: 'error', autoDismiss: true, diff --git a/src/components/Discover/index.tsx b/src/components/Discover/index.tsx index 97583d75..bfefd098 100644 --- a/src/components/Discover/index.tsx +++ b/src/components/Discover/index.tsx @@ -84,7 +84,7 @@ const Discover = () => { }); setIsEditing(false); mutate(); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.updatefailed), { appearance: 'error', autoDismiss: true, @@ -102,7 +102,7 @@ const Discover = () => { }); setIsEditing(false); mutate(); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.resetfailed), { appearance: 'error', autoDismiss: true, @@ -424,19 +424,21 @@ const Discover = () => { const tempSliders = sliders.slice(); tempSliders.splice(originalPosition, 1); - hasClickedArrows - ? tempSliders.splice( - position === 'Above' ? index - 1 : index + 1, - 0, - originalItem - ) - : tempSliders.splice( - position === 'Above' && index > originalPosition - ? Math.max(index - 1, 0) - : index, - 0, - originalItem - ); + if (hasClickedArrows) { + tempSliders.splice( + position === 'Above' ? index - 1 : index + 1, + 0, + originalItem + ); + } else { + tempSliders.splice( + position === 'Above' && index > originalPosition + ? Math.max(index - 1, 0) + : index, + 0, + originalItem + ); + } setSliders(tempSliders); }} diff --git a/src/components/IssueDetails/IssueComment/index.tsx b/src/components/IssueDetails/IssueComment/index.tsx index 3260e5b6..e41f3216 100644 --- a/src/components/IssueDetails/IssueComment/index.tsx +++ b/src/components/IssueDetails/IssueComment/index.tsx @@ -51,7 +51,7 @@ const IssueComment = ({ const deleteComment = async () => { try { await axios.delete(`/api/v1/issueComment/${comment.id}`); - } catch (e) { + } catch { // something went wrong deleting the comment } finally { if (onUpdate) { diff --git a/src/components/IssueDetails/index.tsx b/src/components/IssueDetails/index.tsx index 9f7d202c..cc4e8142 100644 --- a/src/components/IssueDetails/index.tsx +++ b/src/components/IssueDetails/index.tsx @@ -131,7 +131,7 @@ const IssueDetails = () => { autoDismiss: true, }); revalidateIssue(); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toasteditdescriptionfailed), { appearance: 'error', autoDismiss: true, @@ -149,7 +149,7 @@ const IssueDetails = () => { }); revalidateIssue(); mutate('/api/v1/issue/count'); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toaststatusupdatefailed), { appearance: 'error', autoDismiss: true, @@ -167,7 +167,7 @@ const IssueDetails = () => { autoDismiss: true, }); router.push('/issues'); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastissuedeletefailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/IssueModal/CreateIssueModal/index.tsx b/src/components/IssueModal/CreateIssueModal/index.tsx index 5d6bc5f2..eb8d1776 100644 --- a/src/components/IssueModal/CreateIssueModal/index.tsx +++ b/src/components/IssueModal/CreateIssueModal/index.tsx @@ -138,7 +138,7 @@ const CreateIssueModal = ({ if (onCancel) { onCancel(); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastFailedCreate), { appearance: 'error', autoDismiss: true, diff --git a/src/components/Layout/UserDropdown/MiniQuotaDisplay/index.tsx b/src/components/Layout/UserDropdown/MiniQuotaDisplay/index.tsx index 77b1dc4e..2326107f 100644 --- a/src/components/Layout/UserDropdown/MiniQuotaDisplay/index.tsx +++ b/src/components/Layout/UserDropdown/MiniQuotaDisplay/index.tsx @@ -1,4 +1,4 @@ -import Infinity from '@app/assets/infinity.svg'; +import InfinityIcon from '@app/assets/infinity.svg'; import { SmallLoadingSpinner } from '@app/components/Common/LoadingSpinner'; import ProgressCircle from '@app/components/Common/ProgressCircle'; import defineMessages from '@app/utils/defineMessages'; @@ -56,7 +56,7 @@ const MiniQuotaDisplay = ({ userId }: MiniQuotaDisplayProps) => { ) : ( <> - + Unlimited )} @@ -82,7 +82,7 @@ const MiniQuotaDisplay = ({ userId }: MiniQuotaDisplayProps) => { ) : ( <> - + Unlimited )} diff --git a/src/components/Login/AddEmailModal.tsx b/src/components/Login/AddEmailModal.tsx index 5b076bc3..fe5c1281 100644 --- a/src/components/Login/AddEmailModal.tsx +++ b/src/components/Login/AddEmailModal.tsx @@ -70,7 +70,7 @@ const AddEmailModal: React.FC = ({ }); onSave(); - } catch (e) { + } catch { // set error here } }} diff --git a/src/components/Login/JellyfinLogin.tsx b/src/components/Login/JellyfinLogin.tsx index f241bb66..53c9862a 100644 --- a/src/components/Login/JellyfinLogin.tsx +++ b/src/components/Login/JellyfinLogin.tsx @@ -80,7 +80,7 @@ const JellyfinLogin: React.FC = ({ email: values.username, }); } catch (e) { - let errorMessage = null; + let errorMessage = messages.loginerror; switch (e?.response?.data?.message) { case ApiErrorCode.InvalidUrl: errorMessage = messages.invalidurlerror; @@ -94,9 +94,6 @@ const JellyfinLogin: React.FC = ({ case ApiErrorCode.NoAdminUser: errorMessage = messages.noadminerror; break; - default: - errorMessage = messages.loginerror; - break; } toasts.addToast( intl.formatMessage(errorMessage, mediaServerFormatValues), diff --git a/src/components/Login/LocalLogin.tsx b/src/components/Login/LocalLogin.tsx index f7f52452..9050c953 100644 --- a/src/components/Login/LocalLogin.tsx +++ b/src/components/Login/LocalLogin.tsx @@ -61,7 +61,7 @@ const LocalLogin = ({ revalidate }: LocalLoginProps) => { email: values.email, password: values.password, }); - } catch (e) { + } catch { setLoginError(intl.formatMessage(messages.loginerror)); } finally { revalidate(); diff --git a/src/components/MovieDetails/index.tsx b/src/components/MovieDetails/index.tsx index 4fa57e8e..33a132e3 100644 --- a/src/components/MovieDetails/index.tsx +++ b/src/components/MovieDetails/index.tsx @@ -344,7 +344,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => { { appearance: 'success', autoDismiss: true } ); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.watchlistError), { appearance: 'error', autoDismiss: true, @@ -371,7 +371,7 @@ const MovieDetails = ({ movie }: MovieDetailsProps) => { , { appearance: 'info', autoDismiss: true } ); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.watchlistError), { appearance: 'error', autoDismiss: true, diff --git a/src/components/NotificationTypeSelector/index.tsx b/src/components/NotificationTypeSelector/index.tsx index e24eb9b1..57aa21e8 100644 --- a/src/components/NotificationTypeSelector/index.tsx +++ b/src/components/NotificationTypeSelector/index.tsx @@ -70,7 +70,7 @@ export const hasNotificationType = ( types: Notification | Notification[], value: number ): boolean => { - let total = 0; + let total: number; // If we are not checking any notifications, bail out and return true if (types === 0) { diff --git a/src/components/RequestCard/index.tsx b/src/components/RequestCard/index.tsx index 36e8ab50..156697b6 100644 --- a/src/components/RequestCard/index.tsx +++ b/src/components/RequestCard/index.tsx @@ -283,7 +283,7 @@ const RequestCard = ({ request, onTitleData }: RequestCardProps) => { if (response) { revalidate(); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.failedretry), { autoDismiss: true, appearance: 'error', diff --git a/src/components/RequestList/RequestItem/index.tsx b/src/components/RequestList/RequestItem/index.tsx index 625243a5..a232c061 100644 --- a/src/components/RequestList/RequestItem/index.tsx +++ b/src/components/RequestList/RequestItem/index.tsx @@ -355,7 +355,7 @@ const RequestItem = ({ request, revalidateList }: RequestItemProps) => { try { const result = await axios.post(`/api/v1/request/${request.id}/retry`); revalidate(result.data); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.failedretry), { autoDismiss: true, appearance: 'error', diff --git a/src/components/RequestModal/CollectionRequestModal.tsx b/src/components/RequestModal/CollectionRequestModal.tsx index af66fdda..cbfeb89e 100644 --- a/src/components/RequestModal/CollectionRequestModal.tsx +++ b/src/components/RequestModal/CollectionRequestModal.tsx @@ -229,7 +229,7 @@ const CollectionRequestModal = ({ , { appearance: 'success', autoDismiss: true } ); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.requesterror), { appearance: 'error', autoDismiss: true, diff --git a/src/components/RequestModal/MovieRequestModal.tsx b/src/components/RequestModal/MovieRequestModal.tsx index d431065a..3feb7403 100644 --- a/src/components/RequestModal/MovieRequestModal.tsx +++ b/src/components/RequestModal/MovieRequestModal.tsx @@ -124,7 +124,7 @@ const MovieRequestModal = ({ { appearance: 'success', autoDismiss: true } ); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.requesterror), { appearance: 'error', autoDismiss: true, @@ -167,7 +167,7 @@ const MovieRequestModal = ({ { appearance: 'success', autoDismiss: true } ); } - } catch (e) { + } catch { setIsUpdating(false); } }; @@ -212,7 +212,7 @@ const MovieRequestModal = ({ if (onComplete) { onComplete(MediaStatus.PENDING); } - } catch (e) { + } catch { addToast({intl.formatMessage(messages.errorediting)}, { appearance: 'error', autoDismiss: true, diff --git a/src/components/RequestModal/TvRequestModal.tsx b/src/components/RequestModal/TvRequestModal.tsx index 09cb6165..6267d441 100644 --- a/src/components/RequestModal/TvRequestModal.tsx +++ b/src/components/RequestModal/TvRequestModal.tsx @@ -157,7 +157,7 @@ const TvRequestModal = ({ if (onComplete) { onComplete(MediaStatus.PENDING); } - } catch (e) { + } catch { addToast({intl.formatMessage(messages.errorediting)}, { appearance: 'error', autoDismiss: true, @@ -223,7 +223,7 @@ const TvRequestModal = ({ { appearance: 'success', autoDismiss: true } ); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.requesterror), { appearance: 'error', autoDismiss: true, diff --git a/src/components/Settings/Notifications/NotificationsDiscord.tsx b/src/components/Settings/Notifications/NotificationsDiscord.tsx index d6e66c73..ad38b46f 100644 --- a/src/components/Settings/Notifications/NotificationsDiscord.tsx +++ b/src/components/Settings/Notifications/NotificationsDiscord.tsx @@ -103,7 +103,7 @@ const NotificationsDiscord = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.discordsettingsfailed), { appearance: 'error', autoDismiss: true, @@ -156,7 +156,7 @@ const NotificationsDiscord = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsEmail.tsx b/src/components/Settings/Notifications/NotificationsEmail.tsx index aea40a4e..947daec6 100644 --- a/src/components/Settings/Notifications/NotificationsEmail.tsx +++ b/src/components/Settings/Notifications/NotificationsEmail.tsx @@ -175,7 +175,7 @@ const NotificationsEmail = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.emailsettingsfailed), { appearance: 'error', autoDismiss: true, @@ -226,7 +226,7 @@ const NotificationsEmail = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsGotify/index.tsx b/src/components/Settings/Notifications/NotificationsGotify/index.tsx index 46110351..9616ca83 100644 --- a/src/components/Settings/Notifications/NotificationsGotify/index.tsx +++ b/src/components/Settings/Notifications/NotificationsGotify/index.tsx @@ -109,7 +109,7 @@ const NotificationsGotify = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.gotifysettingsfailed), { appearance: 'error', autoDismiss: true, @@ -159,7 +159,7 @@ const NotificationsGotify = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsNtfy/index.tsx b/src/components/Settings/Notifications/NotificationsNtfy/index.tsx index 4588bdae..a678aa94 100644 --- a/src/components/Settings/Notifications/NotificationsNtfy/index.tsx +++ b/src/components/Settings/Notifications/NotificationsNtfy/index.tsx @@ -125,7 +125,7 @@ const NotificationsNtfy = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.ntfysettingsfailed), { appearance: 'error', autoDismiss: true, @@ -180,7 +180,7 @@ const NotificationsNtfy = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx b/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx index 696142d2..b474886d 100644 --- a/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx +++ b/src/components/Settings/Notifications/NotificationsPushbullet/index.tsx @@ -80,7 +80,7 @@ const NotificationsPushbullet = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.pushbulletSettingsFailed), { appearance: 'error', autoDismiss: true, @@ -129,7 +129,7 @@ const NotificationsPushbullet = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsPushover/index.tsx b/src/components/Settings/Notifications/NotificationsPushover/index.tsx index ded52f18..4fef6859 100644 --- a/src/components/Settings/Notifications/NotificationsPushover/index.tsx +++ b/src/components/Settings/Notifications/NotificationsPushover/index.tsx @@ -115,7 +115,7 @@ const NotificationsPushover = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.pushoversettingsfailed), { appearance: 'error', autoDismiss: true, @@ -166,7 +166,7 @@ const NotificationsPushover = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsSlack/index.tsx b/src/components/Settings/Notifications/NotificationsSlack/index.tsx index bca67659..2c857450 100644 --- a/src/components/Settings/Notifications/NotificationsSlack/index.tsx +++ b/src/components/Settings/Notifications/NotificationsSlack/index.tsx @@ -79,7 +79,7 @@ const NotificationsSlack = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.slacksettingsfailed), { appearance: 'error', autoDismiss: true, @@ -128,7 +128,7 @@ const NotificationsSlack = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsTelegram.tsx b/src/components/Settings/Notifications/NotificationsTelegram.tsx index 83239977..4462c8ac 100644 --- a/src/components/Settings/Notifications/NotificationsTelegram.tsx +++ b/src/components/Settings/Notifications/NotificationsTelegram.tsx @@ -117,7 +117,7 @@ const NotificationsTelegram = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.telegramsettingsfailed), { appearance: 'error', autoDismiss: true, @@ -169,7 +169,7 @@ const NotificationsTelegram = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsWebPush/index.tsx b/src/components/Settings/Notifications/NotificationsWebPush/index.tsx index 6e088044..e14b3e1e 100644 --- a/src/components/Settings/Notifications/NotificationsWebPush/index.tsx +++ b/src/components/Settings/Notifications/NotificationsWebPush/index.tsx @@ -70,7 +70,7 @@ const NotificationsWebPush = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.webpushsettingsfailed), { appearance: 'error', autoDismiss: true, @@ -108,7 +108,7 @@ const NotificationsWebPush = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/Notifications/NotificationsWebhook/index.tsx b/src/components/Settings/Notifications/NotificationsWebhook/index.tsx index d50525be..9ede4654 100644 --- a/src/components/Settings/Notifications/NotificationsWebhook/index.tsx +++ b/src/components/Settings/Notifications/NotificationsWebhook/index.tsx @@ -194,7 +194,7 @@ const NotificationsWebhook = () => { try { JSON.parse(value ?? ''); return true; - } catch (e) { + } catch { return false; } } @@ -242,7 +242,7 @@ const NotificationsWebhook = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.webhooksettingsfailed), { appearance: 'error', autoDismiss: true, @@ -313,7 +313,7 @@ const NotificationsWebhook = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } diff --git a/src/components/Settings/OverrideRule/OverrideRuleModal.tsx b/src/components/Settings/OverrideRule/OverrideRuleModal.tsx index cc1accd2..b484d050 100644 --- a/src/components/Settings/OverrideRule/OverrideRuleModal.tsx +++ b/src/components/Settings/OverrideRule/OverrideRuleModal.tsx @@ -108,7 +108,7 @@ const OverrideRuleModal = ({ setIsValidated(true); setTestResponse(response.data); - } catch (e) { + } catch { setIsValidated(false); } finally { setIsTesting(false); @@ -191,7 +191,7 @@ const OverrideRuleModal = ({ }); } onClose(); - } catch (e) { + } catch { // set error here } }} diff --git a/src/components/Settings/RadarrModal/index.tsx b/src/components/Settings/RadarrModal/index.tsx index 81c28307..a955c1d8 100644 --- a/src/components/Settings/RadarrModal/index.tsx +++ b/src/components/Settings/RadarrModal/index.tsx @@ -173,7 +173,7 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { autoDismiss: true, }); } - } catch (e) { + } catch { setIsValidated(false); if (initialLoad.current) { addToast(intl.formatMessage(messages.toastRadarrTestFailure), { @@ -268,7 +268,7 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { } onSave(); - } catch (e) { + } catch { // set error here } }} diff --git a/src/components/Settings/SettingsJobsCache/index.tsx b/src/components/Settings/SettingsJobsCache/index.tsx index c18feb78..53d27c4d 100644 --- a/src/components/Settings/SettingsJobsCache/index.tsx +++ b/src/components/Settings/SettingsJobsCache/index.tsx @@ -308,7 +308,7 @@ const SettingsJobs = () => { dispatch({ type: 'close' }); revalidate(); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.jobScheduleEditFailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/Settings/SettingsMain/index.tsx b/src/components/Settings/SettingsMain/index.tsx index 4944c234..d1184dee 100644 --- a/src/components/Settings/SettingsMain/index.tsx +++ b/src/components/Settings/SettingsMain/index.tsx @@ -130,7 +130,7 @@ const SettingsMain = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastApiKeyFailure), { autoDismiss: true, appearance: 'error', @@ -211,7 +211,7 @@ const SettingsMain = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastSettingsFailure), { autoDismiss: true, appearance: 'error', diff --git a/src/components/Settings/SettingsMetadata.tsx b/src/components/Settings/SettingsMetadata.tsx index 1f2f6b72..47164711 100644 --- a/src/components/Settings/SettingsMetadata.tsx +++ b/src/components/Settings/SettingsMetadata.tsx @@ -134,7 +134,7 @@ const SettingsMetadata = () => { } // In case of error without usable data - throw new Error('Failed to test connection'); + throw new Error('Failed to test connection', { cause: error }); } }; @@ -203,7 +203,7 @@ const SettingsMetadata = () => { } } - throw new Error('Failed to save Metadata settings'); + throw new Error('Failed to save Metadata settings', { cause: error }); } }; @@ -322,7 +322,7 @@ const SettingsMetadata = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast( intl.formatMessage(messages.failedToSaveMetadataSettings), { @@ -428,7 +428,7 @@ const SettingsMetadata = () => { } ); } - } catch (e) { + } catch { addToast( intl.formatMessage(messages.connectionTestFailed), { diff --git a/src/components/Settings/SettingsNetwork/index.tsx b/src/components/Settings/SettingsNetwork/index.tsx index 3adffd63..6cba5fe1 100644 --- a/src/components/Settings/SettingsNetwork/index.tsx +++ b/src/components/Settings/SettingsNetwork/index.tsx @@ -175,7 +175,7 @@ const SettingsNetwork = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastSettingsFailure), { autoDismiss: true, appearance: 'error', diff --git a/src/components/Settings/SettingsPlex.tsx b/src/components/Settings/SettingsPlex.tsx index 0cb1c119..6f4463dc 100644 --- a/src/components/Settings/SettingsPlex.tsx +++ b/src/components/Settings/SettingsPlex.tsx @@ -276,7 +276,7 @@ const SettingsPlex = ({ onComplete }: SettingsPlexProps) => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } @@ -407,7 +407,7 @@ const SettingsPlex = ({ onComplete }: SettingsPlexProps) => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { if (toastId) { removeToast(toastId); } @@ -770,7 +770,7 @@ const SettingsPlex = ({ onComplete }: SettingsPlexProps) => { appearance: 'success', } ); - } catch (e) { + } catch { addToast( intl.formatMessage(messages.toastTautulliSettingsFailure), { diff --git a/src/components/Settings/SettingsUsers/index.tsx b/src/components/Settings/SettingsUsers/index.tsx index cd41f07f..76f41a5a 100644 --- a/src/components/Settings/SettingsUsers/index.tsx +++ b/src/components/Settings/SettingsUsers/index.tsx @@ -139,7 +139,7 @@ const SettingsUsers = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastSettingsFailure), { autoDismiss: true, appearance: 'error', diff --git a/src/components/Settings/SonarrModal/index.tsx b/src/components/Settings/SonarrModal/index.tsx index cd20bfac..5d8cf7eb 100644 --- a/src/components/Settings/SonarrModal/index.tsx +++ b/src/components/Settings/SonarrModal/index.tsx @@ -183,7 +183,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { autoDismiss: true, }); } - } catch (e) { + } catch { setIsValidated(false); if (initialLoad.current) { addToast(intl.formatMessage(messages.toastSonarrTestFailure), { @@ -304,7 +304,7 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { } onSave(); - } catch (e) { + } catch { // set error here } }} diff --git a/src/components/Setup/JellyfinSetup.tsx b/src/components/Setup/JellyfinSetup.tsx index e4609419..341736e9 100644 --- a/src/components/Setup/JellyfinSetup.tsx +++ b/src/components/Setup/JellyfinSetup.tsx @@ -128,7 +128,7 @@ function JellyfinSetup({ serverType: serverType, }); } catch (e) { - let errorMessage = null; + let errorMessage = messages.loginerror; switch (e?.response?.data?.message) { case ApiErrorCode.InvalidUrl: errorMessage = messages.invalidurlerror; @@ -142,9 +142,6 @@ function JellyfinSetup({ case ApiErrorCode.NoAdminUser: errorMessage = messages.noadminerror; break; - default: - errorMessage = messages.loginerror; - break; } toasts.addToast( diff --git a/src/components/Setup/index.tsx b/src/components/Setup/index.tsx index a1997160..98ca61a2 100644 --- a/src/components/Setup/index.tsx +++ b/src/components/Setup/index.tsx @@ -90,7 +90,7 @@ const Setup = () => { ); setMediaServerSettingsComplete(hasEnabledLibraries); - } catch (e) { + } catch { toasts.addToast(intl.formatMessage(messages.librarieserror), { autoDismiss: true, appearance: 'error', diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index bb722b00..c1aafaf7 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -125,7 +125,7 @@ const TitleCard = ({ { appearance: 'success', autoDismiss: true } ); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.watchlistError), { appearance: 'error', autoDismiss: true, @@ -154,7 +154,7 @@ const TitleCard = ({ { appearance: 'info', autoDismiss: true } ); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.watchlistError), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserList/BulkEditModal.tsx b/src/components/UserList/BulkEditModal.tsx index d5f72ab9..6e7dcfe8 100644 --- a/src/components/UserList/BulkEditModal.tsx +++ b/src/components/UserList/BulkEditModal.tsx @@ -57,7 +57,7 @@ const BulkEditModal = ({ appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.userfail), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserList/JellyfinImportModal.tsx b/src/components/UserList/JellyfinImportModal.tsx index 1b2b87e0..39a963d4 100644 --- a/src/components/UserList/JellyfinImportModal.tsx +++ b/src/components/UserList/JellyfinImportModal.tsx @@ -87,7 +87,7 @@ const JellyfinImportModal: React.FC = ({ if (onComplete) { onComplete(); } - } catch (e) { + } catch { addToast( intl.formatMessage(messages.importfromJellyfinerror, { mediaServerName: diff --git a/src/components/UserList/PlexImportModal.tsx b/src/components/UserList/PlexImportModal.tsx index 933caf29..f93b698c 100644 --- a/src/components/UserList/PlexImportModal.tsx +++ b/src/components/UserList/PlexImportModal.tsx @@ -71,7 +71,7 @@ const PlexImportModal = ({ onCancel, onComplete }: PlexImportProps) => { if (onComplete) { onComplete(); } - } catch (e) { + } catch { addToast(intl.formatMessage(messages.importfromplexerror), { autoDismiss: true, appearance: 'error', diff --git a/src/components/UserList/index.tsx b/src/components/UserList/index.tsx index 7bdeef60..6e9354be 100644 --- a/src/components/UserList/index.tsx +++ b/src/components/UserList/index.tsx @@ -190,7 +190,7 @@ const UserList = () => { appearance: 'success', }); setDeleteModal({ isOpen: false, user: deleteModal.user }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.userdeleteerror), { autoDismiss: true, appearance: 'error', diff --git a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsDiscord.tsx b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsDiscord.tsx index 01650ac0..3c2e4baf 100644 --- a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsDiscord.tsx +++ b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsDiscord.tsx @@ -84,7 +84,7 @@ const UserNotificationsDiscord = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.discordsettingsfailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsEmail.tsx b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsEmail.tsx index c1196d5a..193f0c18 100644 --- a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsEmail.tsx +++ b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsEmail.tsx @@ -83,7 +83,7 @@ const UserEmailSettings = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.emailsettingsfailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushbullet.tsx b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushbullet.tsx index 0a18ad25..28ed1926 100644 --- a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushbullet.tsx +++ b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushbullet.tsx @@ -81,7 +81,7 @@ const UserPushbulletSettings = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.pushbulletsettingsfailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushover.tsx b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushover.tsx index 7ab9204d..b5182753 100644 --- a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushover.tsx +++ b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsPushover.tsx @@ -113,7 +113,7 @@ const UserPushoverSettings = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.pushoversettingsfailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsTelegram.tsx b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsTelegram.tsx index 7d006b67..a62ff33d 100644 --- a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsTelegram.tsx +++ b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsTelegram.tsx @@ -108,7 +108,7 @@ const UserTelegramSettings = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.telegramsettingsfailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsWebPush/index.tsx b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsWebPush/index.tsx index d534c0c2..5f995e87 100644 --- a/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsWebPush/index.tsx +++ b/src/components/UserProfile/UserSettings/UserNotificationSettings/UserNotificationsWebPush/index.tsx @@ -95,7 +95,7 @@ const UserWebPushSettings = () => { } else { throw new Error('Subscription failed'); } - } catch (error) { + } catch { addToast(intl.formatMessage(messages.enablingwebpusherror), { appearance: 'error', autoDismiss: true, @@ -135,7 +135,7 @@ const UserWebPushSettings = () => { autoDismiss: true, appearance: 'success', }); - } catch (error) { + } catch { addToast(intl.formatMessage(messages.disablingwebpusherror), { autoDismiss: true, appearance: 'error', @@ -157,7 +157,7 @@ const UserWebPushSettings = () => { autoDismiss: true, appearance: 'success', }); - } catch (error) { + } catch { addToast(intl.formatMessage(messages.subscriptiondeleteerror), { autoDismiss: true, appearance: 'error', @@ -272,7 +272,7 @@ const UserWebPushSettings = () => { appearance: 'success', autoDismiss: true, }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.webpushsettingsfailed), { appearance: 'error', autoDismiss: true, diff --git a/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx b/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx index 869b2188..d5d6ea62 100644 --- a/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx +++ b/src/components/UserProfile/UserSettings/UserPasswordChange/index.tsx @@ -133,7 +133,7 @@ const UserPasswordChange = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast( intl.formatMessage( data.hasPassword && user?.id === currentUser?.id diff --git a/src/components/UserProfile/UserSettings/UserPermissions/index.tsx b/src/components/UserProfile/UserSettings/UserPermissions/index.tsx index 3398ae7e..343a5f3f 100644 --- a/src/components/UserProfile/UserSettings/UserPermissions/index.tsx +++ b/src/components/UserProfile/UserSettings/UserPermissions/index.tsx @@ -92,7 +92,7 @@ const UserPermissions = () => { autoDismiss: true, appearance: 'success', }); - } catch (e) { + } catch { addToast(intl.formatMessage(messages.toastSettingsFailure), { autoDismiss: true, appearance: 'error', diff --git a/src/i18n/extractMessages.ts b/src/i18n/extractMessages.ts index 9820a9c7..1148fa18 100644 --- a/src/i18n/extractMessages.ts +++ b/src/i18n/extractMessages.ts @@ -36,7 +36,7 @@ async function extractMessages( .replace(/,$/, ''); const messagesJson = JSON.parse(`{${formattedMessages}}`); return { namespace: namespace.trim(), messages: messagesJson }; - } catch (e) { + } catch { return null; } } diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 6d66ff6b..aaa80c70 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -297,7 +297,7 @@ CoreApp.getInitialProps = async (initialProps) => { }); ctx.res.end(); } - } catch (e) { + } catch { // If there is no user, and ctx.res is set (to check if we are on the server side) // _AND_ we are not already on the login or setup route, redirect to /login with a 307 // before anything actually renders diff --git a/src/utils/pushSubscriptionHelpers.ts b/src/utils/pushSubscriptionHelpers.ts index 7cf0906d..0a11d5df 100644 --- a/src/utils/pushSubscriptionHelpers.ts +++ b/src/utils/pushSubscriptionHelpers.ts @@ -97,14 +97,16 @@ export const verifyAndResubscribePushSubscription = async ( oldEndpoint )}` ); - } catch (error) { + } catch { // Ignore errors when deleting old endpoint (it might not exist) } } return true; } catch (error) { - throw new Error(`[SW] Resubscribe failed: ${error.message}`); + throw new Error(`[SW] Resubscribe failed: ${error.message}`, { + cause: error, + }); } } @@ -151,7 +153,8 @@ export const subscribeToPushNotifications = async ( return false; } catch (error) { throw new Error( - `Issue subscribing to push notifications: ${error.message}` + `Issue subscribing to push notifications: ${error.message}`, + { cause: error } ); } }; @@ -181,7 +184,8 @@ export const unsubscribeToPushNotifications = async ( return null; } catch (error) { throw new Error( - `Issue unsubscribing to push notifications: ${error.message}` + `Issue unsubscribing to push notifications: ${error.message}`, + { cause: error } ); } }; diff --git a/tailwind.config.js b/tailwind.config.js index c017fd6f..46c6e7a8 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,4 @@ -// eslint-disable-next-line @typescript-eslint/no-var-requires +// eslint-disable-next-line @typescript-eslint/no-require-imports const defaultTheme = require('tailwindcss/defaultTheme'); /** @type {import('tailwindcss').Config} */