From 7e3c7c14d3e7940bc310784e852082504b2760ce Mon Sep 17 00:00:00 2001 From: Fuwn Date: Thu, 29 Jan 2026 19:19:50 -0800 Subject: fix: Resolve all ESLint errors and warnings --- .eslintrc.cjs | 10 ++++++++++ src/graphql/user/resolvers.ts | 2 +- src/lib/Data/hololive.ts | 5 +++++ src/lib/Error/DotDotDot.svelte | 2 +- .../Events/AniListBadges/EasterEvent2025/EasterEgg.svelte | 1 + src/lib/Hololive/Stream.svelte | 3 ++- src/lib/Home/Root.svelte | 2 +- src/lib/Layout/Dropdown.svelte | 8 +++++--- src/lib/Layout/Popup.svelte | 4 ++-- src/lib/Lazy.svelte | 2 +- src/lib/List/Anime/AnimeListTemplate.svelte | 3 ++- src/lib/List/Anime/CleanAnimeList.svelte | 7 ++++--- src/lib/List/Manga/CleanMangaList.svelte | 2 +- src/lib/Loading/Ellipsis.svelte | 2 +- src/lib/Loading/Grid.svelte | 2 +- src/lib/Loading/Skeleton.svelte | 4 ++-- src/lib/Media/Anime/Airing/AiringTime.svelte | 2 +- src/lib/Notification/Notification.svelte | 3 ++- src/lib/Reader/Chapters/MangaDex.svelte | 15 ++++++++++++++- src/lib/Settings/Categories/RSSFeeds.svelte | 2 +- src/lib/Tools/DumpProfile.svelte | 1 - src/lib/Tools/FollowFix.svelte | 1 - src/lib/Tools/InputTemplate.svelte | 1 - src/lib/Tools/Wrapped/Tool.svelte | 2 +- src/lib/Tooltip/LinkedTooltip.svelte | 2 +- src/lib/User/BadgeWall/BadgePreview.svelte | 8 ++++---- src/lib/Utility/device.ts | 2 +- src/lib/Utility/image.ts | 2 +- src/routes/+layout.svelte | 2 +- src/routes/+page.svelte | 2 +- src/routes/completed/+page.svelte | 2 +- src/routes/events/group/[group]/+page.svelte | 4 ++-- src/routes/events/groups/+page.svelte | 2 +- src/routes/updates/+page.svelte | 2 +- src/routes/user/[user]/+page.svelte | 4 ++-- src/routes/user/[user]/badges/+page.svelte | 6 +++--- src/stores/stateBin.ts | 2 +- src/trigger/notifications.ts | 2 +- 38 files changed, 80 insertions(+), 48 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index a18e76e2..f8f4399d 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -18,6 +18,16 @@ module.exports = { es2017: true, node: true }, + rules: { + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_' + } + ] + }, overrides: [ { files: ['*.svelte'], diff --git a/src/graphql/user/resolvers.ts b/src/graphql/user/resolvers.ts index 123f4589..285c98f0 100644 --- a/src/graphql/user/resolvers.ts +++ b/src/graphql/user/resolvers.ts @@ -59,7 +59,7 @@ const auth = async (context: Context) => { const authenticatedBadgesOperation = async ( context: Context, - operation: (identity: UserIdentity, authorised: boolean) => Promise + operation: (identity: UserIdentity, authorised: boolean) => Promise ) => { const identity = await auth(context); diff --git a/src/lib/Data/hololive.ts b/src/lib/Data/hololive.ts index 1617d6d8..7bcb153a 100644 --- a/src/lib/Data/hololive.ts +++ b/src/lib/Data/hololive.ts @@ -62,7 +62,12 @@ function parseToLiveBlocks(html: string): LiveBlock[] { const dateDiv = row.querySelector('.holodule'); if (dateDiv) { date = dateDiv.textContent?.replace(/\s+/g, '') || ''; + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion date = date.match(/\d+\/\d+/)![0].replace('/', '-'); + + // const dateMatch = date.match(/\d+\/\d+/); + // + // date = dateMatch ? dateMatch[0].replace('/', '-') : ''; } const allThumbnail = row.querySelectorAll('a.thumbnail'); diff --git a/src/lib/Error/DotDotDot.svelte b/src/lib/Error/DotDotDot.svelte index 73261eba..88b46374 100644 --- a/src/lib/Error/DotDotDot.svelte +++ b/src/lib/Error/DotDotDot.svelte @@ -6,7 +6,7 @@ export let start = ''; let dots = start; - let interval: NodeJS.Timeout; + let interval: ReturnType; onMount(() => { interval = setInterval(() => { diff --git a/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte b/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte index b7391e06..0d7ab010 100644 --- a/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte +++ b/src/lib/Events/AniListBadges/EasterEvent2025/EasterEgg.svelte @@ -71,6 +71,7 @@ if (clickedEggs.length >= 3) showPopup = true; + // eslint-disable-next-line no-undef umami.track('Easter Egg Clicked', { id }); } else if (event.button === 1) { visible = true; diff --git a/src/lib/Hololive/Stream.svelte b/src/lib/Hololive/Stream.svelte index 1c55a9dd..afe400b7 100644 --- a/src/lib/Hololive/Stream.svelte +++ b/src/lib/Hololive/Stream.svelte @@ -4,8 +4,9 @@ import identity from '$stores/identity'; import locale from '$stores/locale'; import Icon from '@iconify/svelte'; + import type { LiveInfo } from '$lib/Data/hololive'; - export let live: any; + export let live: LiveInfo; export let pinStream: (streamer: string) => void; export let pinnedStreams: string[]; export let icon: string; diff --git a/src/lib/Home/Root.svelte b/src/lib/Home/Root.svelte index bc1bdea9..eb174471 100644 --- a/src/lib/Home/Root.svelte +++ b/src/lib/Home/Root.svelte @@ -2,7 +2,7 @@ import settings from '$stores/settings'; import { fly } from 'svelte/transition'; - export let data: any; + export let data: { url: string }; export let way: number; const animationDelay = 100; diff --git a/src/lib/Layout/Dropdown.svelte b/src/lib/Layout/Dropdown.svelte index b0923fb2..e7e00272 100644 --- a/src/lib/Layout/Dropdown.svelte +++ b/src/lib/Layout/Dropdown.svelte @@ -13,8 +13,8 @@ let open = false; - const handleClickOutside = (event: any) => { - if (!event.target.closest('.dropdown')) open = false; + const handleClickOutside = (event: MouseEvent) => { + if (!(event.target as HTMLElement).closest('.dropdown')) open = false; }; @@ -35,7 +35,9 @@ open = !open; }} - onkeydown={() => {}} + onkeydown={(_e) => { + // if (e.key === 'Enter' || e.key === ' ') open = !open; + }} role="button" tabindex="0" > diff --git a/src/lib/Layout/Popup.svelte b/src/lib/Layout/Popup.svelte index 1e3d7b2c..dc1557e3 100644 --- a/src/lib/Layout/Popup.svelte +++ b/src/lib/Layout/Popup.svelte @@ -12,8 +12,8 @@ export let locked = false; export let center = false; - const handleClickOutside = (event: any) => { - if (!locked && event.target.classList.contains('popup')) { + const handleClickOutside = (event: MouseEvent) => { + if (!locked && (event.target as HTMLElement).classList.contains('popup')) { show = false; onLeave(); diff --git a/src/lib/Lazy.svelte b/src/lib/Lazy.svelte index da5b09a9..fd08ed07 100644 --- a/src/lib/Lazy.svelte +++ b/src/lib/Lazy.svelte @@ -10,7 +10,7 @@ export let once = false; let element: Element; - let percent: number = 0; + let percent = 0; let visible = false; let observer: IntersectionObserver; diff --git a/src/lib/List/Anime/AnimeListTemplate.svelte b/src/lib/List/Anime/AnimeListTemplate.svelte index bcd4e806..185419de 100644 --- a/src/lib/List/Anime/AnimeListTemplate.svelte +++ b/src/lib/List/Anime/AnimeListTemplate.svelte @@ -14,6 +14,7 @@ import subsPlease from '$stores/subsPlease'; import identity from '$stores/identity'; import localforage from 'localforage'; + import type { Title } from '../mediaTitle'; export let endTime: number; export let cleanMedia: ( @@ -24,7 +25,7 @@ ) => Media[]; export let animeLists: Promise; export let user: AniListAuthorisation; - export let title: any; + export let title: Title; export let completed = false; export let plannedOnly = false; export let upcoming = false; diff --git a/src/lib/List/Anime/CleanAnimeList.svelte b/src/lib/List/Anime/CleanAnimeList.svelte index 04b1d03c..561b3b1d 100644 --- a/src/lib/List/Anime/CleanAnimeList.svelte +++ b/src/lib/List/Anime/CleanAnimeList.svelte @@ -19,9 +19,10 @@ import stateBin from '$stores/stateBin'; import localforage from 'localforage'; import MediaRoulette from '../MediaRoulette.svelte'; + import type { Title } from '../mediaTitle'; export let media: Media[]; - export let title: any; + export let title: Title; export let animeLists: Promise; export let user: AniListAuthorisation; export let endTime: number; @@ -36,7 +37,7 @@ export let limit: number | undefined = undefined; let showRoulette = false; - let keyCacher: NodeJS.Timeout; + let keyCacher: ReturnType; let totalEpisodeDueCount = media .map((anime) => { if ($settings.displayTotalEpisodes && !$settings.displayTotalDueEpisodes) return 1; @@ -60,7 +61,7 @@ new Set( media .flatMap((m) => Object.entries(m.mediaListEntry?.customLists ?? {})) - .filter(([_, value]) => value) + .filter(([_key, value]) => value) .map(([key]) => key) ) ); diff --git a/src/lib/List/Manga/CleanMangaList.svelte b/src/lib/List/Manga/CleanMangaList.svelte index f5af25fc..bba0fb08 100644 --- a/src/lib/List/Manga/CleanMangaList.svelte +++ b/src/lib/List/Manga/CleanMangaList.svelte @@ -50,7 +50,7 @@ new Set( media .flatMap((m) => Object.entries(m.mediaListEntry?.customLists ?? {})) - .filter(([_, value]) => value) + .filter(([_key, value]) => value) .map(([key]) => key) ) ); diff --git a/src/lib/Loading/Ellipsis.svelte b/src/lib/Loading/Ellipsis.svelte index d16a2a6e..dfc8bcf4 100644 --- a/src/lib/Loading/Ellipsis.svelte +++ b/src/lib/Loading/Ellipsis.svelte @@ -3,7 +3,7 @@
- {#each Array.from({ length: 4 }) as _} + {#each Array.from({ length: 4 }) as _i}
{/each}
diff --git a/src/lib/Loading/Grid.svelte b/src/lib/Loading/Grid.svelte index 233052fc..543c5e5f 100644 --- a/src/lib/Loading/Grid.svelte +++ b/src/lib/Loading/Grid.svelte @@ -3,7 +3,7 @@
- {#each Array.from({ length: 9 }) as _} + {#each Array.from({ length: 9 }) as _i}
{/each}
diff --git a/src/lib/Loading/Skeleton.svelte b/src/lib/Loading/Skeleton.svelte index 3f93d107..a0e1ab0e 100644 --- a/src/lib/Loading/Skeleton.svelte +++ b/src/lib/Loading/Skeleton.svelte @@ -12,7 +12,7 @@ {#if grid}
- {#each Array(count) as _, i} + {#each Array(count) as _item, i}
@@ -21,7 +21,7 @@ {/each}
{:else} - {#each Array(count) as _, i} + {#each Array(count) as _item, i}
; onMount(() => { const setAiringTime = () => { diff --git a/src/lib/Notification/Notification.svelte b/src/lib/Notification/Notification.svelte index ec8d5be7..864d6568 100644 --- a/src/lib/Notification/Notification.svelte +++ b/src/lib/Notification/Notification.svelte @@ -1,8 +1,9 @@
    diff --git a/src/lib/Settings/Categories/RSSFeeds.svelte b/src/lib/Settings/Categories/RSSFeeds.svelte index c8a47385..51554884 100644 --- a/src/lib/Settings/Categories/RSSFeeds.svelte +++ b/src/lib/Settings/Categories/RSSFeeds.svelte @@ -6,7 +6,7 @@ import SettingHint from '../SettingHint.svelte'; import tooltip from '$lib/Tooltip/tooltip'; - export let user: any; + export let user: { accessToken: string; refreshToken: string };