From 36243a0deb9e4d73b76e69ccf153555664c9df9c Mon Sep 17 00:00:00 2001 From: Michael Thomas Date: Mon, 16 Mar 2026 12:12:30 -0400 Subject: [PATCH] chore: upgrade to eslint v9 (#2574) --- .eslintrc.js | 69 - eslint.config.mts | 95 ++ package.json | 19 +- pnpm-lock.yaml | 1106 ++++++++--------- server/api/animelist.ts | 8 +- server/api/jellyfin.ts | 2 +- server/api/plextv.ts | 4 +- server/api/pushover.ts | 4 +- server/api/rating/imdbRadarrProxy.ts | 3 +- server/api/rating/rottentomatoes.ts | 7 +- server/api/servarr/base.ts | 27 +- server/api/servarr/radarr.ts | 16 +- server/api/servarr/sonarr.ts | 25 +- server/api/tautulli.ts | 15 +- server/api/themoviedb/index.ts | 137 +- server/api/tvdb/index.ts | 2 +- server/interfaces/api/common.ts | 2 +- server/lib/imageproxy.ts | 2 +- server/lib/notifications/index.ts | 2 +- server/lib/overseerrMerge.ts | 2 +- server/routes/avatarproxy.ts | 2 +- server/routes/discover.ts | 2 +- server/routes/media.ts | 2 - server/routes/user/index.ts | 12 +- server/types/custom.d.ts | 2 +- server/utils/appDataVolume.ts | 2 +- server/utils/appVersion.ts | 4 +- src/components/BlocklistBlock/index.tsx | 4 +- .../BlocklistedTagsSelector/index.tsx | 2 +- .../Discover/CreateSlider/index.tsx | 2 +- .../Discover/DiscoverSliderEdit/index.tsx | 2 +- src/components/Discover/index.tsx | 32 +- .../IssueDetails/IssueComment/index.tsx | 2 +- src/components/IssueDetails/index.tsx | 6 +- .../IssueModal/CreateIssueModal/index.tsx | 2 +- .../UserDropdown/MiniQuotaDisplay/index.tsx | 6 +- src/components/Login/AddEmailModal.tsx | 2 +- src/components/Login/JellyfinLogin.tsx | 5 +- src/components/Login/LocalLogin.tsx | 2 +- src/components/MovieDetails/index.tsx | 4 +- .../NotificationTypeSelector/index.tsx | 2 +- src/components/RequestCard/index.tsx | 2 +- .../RequestList/RequestItem/index.tsx | 2 +- .../RequestModal/CollectionRequestModal.tsx | 2 +- .../RequestModal/MovieRequestModal.tsx | 6 +- .../RequestModal/TvRequestModal.tsx | 4 +- .../Notifications/NotificationsDiscord.tsx | 4 +- .../Notifications/NotificationsEmail.tsx | 4 +- .../NotificationsGotify/index.tsx | 4 +- .../Notifications/NotificationsNtfy/index.tsx | 4 +- .../NotificationsPushbullet/index.tsx | 4 +- .../NotificationsPushover/index.tsx | 4 +- .../NotificationsSlack/index.tsx | 4 +- .../Notifications/NotificationsTelegram.tsx | 4 +- .../NotificationsWebPush/index.tsx | 4 +- .../NotificationsWebhook/index.tsx | 6 +- .../OverrideRule/OverrideRuleModal.tsx | 4 +- src/components/Settings/RadarrModal/index.tsx | 4 +- .../Settings/SettingsJobsCache/index.tsx | 2 +- .../Settings/SettingsMain/index.tsx | 4 +- src/components/Settings/SettingsMetadata.tsx | 8 +- .../Settings/SettingsNetwork/index.tsx | 2 +- src/components/Settings/SettingsPlex.tsx | 6 +- .../Settings/SettingsUsers/index.tsx | 2 +- src/components/Settings/SonarrModal/index.tsx | 4 +- src/components/Setup/JellyfinSetup.tsx | 5 +- src/components/Setup/index.tsx | 2 +- src/components/TitleCard/index.tsx | 4 +- src/components/UserList/BulkEditModal.tsx | 2 +- .../UserList/JellyfinImportModal.tsx | 2 +- src/components/UserList/PlexImportModal.tsx | 2 +- src/components/UserList/index.tsx | 2 +- .../UserNotificationsDiscord.tsx | 2 +- .../UserNotificationsEmail.tsx | 2 +- .../UserNotificationsPushbullet.tsx | 2 +- .../UserNotificationsPushover.tsx | 2 +- .../UserNotificationsTelegram.tsx | 2 +- .../UserNotificationsWebPush/index.tsx | 8 +- .../UserSettings/UserPasswordChange/index.tsx | 2 +- .../UserSettings/UserPermissions/index.tsx | 2 +- src/i18n/extractMessages.ts | 2 +- src/pages/_app.tsx | 2 +- src/utils/pushSubscriptionHelpers.ts | 12 +- tailwind.config.js | 2 +- 84 files changed, 916 insertions(+), 883 deletions(-) delete mode 100644 .eslintrc.js create mode 100644 eslint.config.mts diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 053f62529..000000000 --- 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 000000000..d5905d4ad --- /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 ca0873c1f..30eec037a 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 77dfdd1b3..0968c0574 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 9351a9ae4..01687ddd3 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 1507f00b1..011bb5873 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 bfc75bc15..cec084c30 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 92b931300..fb6735539 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 b495e579a..0ae0a6da3 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 9b509e95b..c21739de4 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 5e18f5b49..70b1e8c78 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 75f320269..1d35778c0 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 76f1416d1..33354e1cd 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 e9cb65ade..977560a57 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 666c7a254..385203835 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 62b6c85a0..62d7a4d5a 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 d9e9490b4..fb74c1702 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 39b3e2874..2b60c3093 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 71aea8fe9..b822ae6ee 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 43b83d32c..e5f90e48f 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 17df52110..ef5238435 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 4f12ce7dc..8be3603d2 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 8bc1b8bae..de3c1b6dc 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 64766bfa0..7a8ad4071 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 f2f47c60f..279c4d6a8 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 837f7f669..6779d30cb 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 d01a08a97..d7493d22d 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 af910f2f2..c53a1c8ad 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 d0ad658e2..4bee8ac1b 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 e7162de22..8eea28653 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 219a0eed5..41425c788 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 97583d755..bfefd0989 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 3260e5b66..e41f32168 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 9f7d202cd..cc4e81421 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 5d6bc5f21..eb8d17763 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 77b1dc4e0..2326107f0 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 5b076bc3d..fe5c1281c 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 f241bb664..53c9862a6 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 f7f524527..9050c9536 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 4fa57e8e6..33a132e3f 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 e24eb9b13..57aa21e88 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 36e8ab504..156697b63 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 625243a58..a232c061c 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 af66fdda6..cbfeb89e6 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 d431065ac..3feb74034 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 09cb6165c..6267d441d 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 d6e66c73d..ad38b46f6 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 aea40a4eb..947daec60 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 461103511..9616ca83c 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 4588bdaeb..a678aa944 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 696142d2e..b474886d9 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 ded52f184..4fef68592 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 bca676598..2c8574504 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 83239977e..4462c8acb 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 6e088044b..e14b3e1ec 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 d50525be4..9ede46541 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 cc1accd2e..b484d0506 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 81c28307e..a955c1d89 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 c18feb78b..53d27c4d1 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 4944c2349..d1184dee3 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 1f2f6b72c..471647118 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 3adffd632..6cba5fe10 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 0cb1c1198..6f4463dc3 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 cd41f07fd..76f41a5a0 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 cd20bfac8..5d8cf7ebd 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 e46094198..341736e96 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 a1997160c..98ca61a2a 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 bb722b004..c1aafaf7c 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 d5f72ab95..6e7dcfe88 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 1b2b87e04..39a963d48 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 933caf29d..f93b698ce 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 7bdeef605..6e9354be4 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 01650ac0f..3c2e4bafb 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 c1196d5ac..193f0c189 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 0a18ad25b..28ed19261 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 7ab9204de..b51827535 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 7d006b676..a62ff33df 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 d534c0c26..5f995e87e 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 869b21883..d5d6ea626 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 3398ae7ea..343a5f3fa 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 9820a9c7e..1148fa186 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 6d66ff6b4..aaa80c709 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 7cf0906da..0a11d5dff 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 c017fd6f5..46c6e7a8b 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} */