aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-03-01 16:13:28 -0800
committerFuwn <[email protected]>2026-03-01 16:13:45 -0800
commit8510a4b87bd493d4451072c2e6b4fec6596d29c3 (patch)
tree1a627753dd136d46ac3d7c098d72a43c8e73d66f /src
parentchore(biome): enable svelte formatting (diff)
downloaddue.moe-8510a4b87bd493d4451072c2e6b4fec6596d29c3.tar.xz
due.moe-8510a4b87bd493d4451072c2e6b4fec6596d29c3.zip
chore(biome): enable svelte linting
Diffstat (limited to 'src')
-rw-r--r--src/lib/Landing.svelte4
-rw-r--r--src/lib/List/Anime/AnimeListTemplate.svelte4
-rw-r--r--src/lib/List/Anime/CompletedAnimeList.svelte7
-rw-r--r--src/lib/List/Anime/DueAnimeList.svelte5
-rw-r--r--src/lib/List/Manga/CleanMangaList.svelte4
-rw-r--r--src/lib/List/Manga/MangaListTemplate.svelte8
-rw-r--r--src/lib/Schedule/Days.svelte4
-rw-r--r--src/lib/Tools/Birthdays.svelte12
-rw-r--r--src/lib/Tools/BirthdaysTemplate.svelte6
-rw-r--r--src/lib/Tools/UmaMusumeBirthdays.svelte4
-rw-r--r--src/lib/Tools/Wrapped/Tool.svelte59
-rw-r--r--src/lib/User/BadgeWall/AWC.svelte30
-rw-r--r--src/routes/schedule/+page.svelte4
-rw-r--r--src/routes/tools/[tool]/+page.svelte2
14 files changed, 83 insertions, 70 deletions
diff --git a/src/lib/Landing.svelte b/src/lib/Landing.svelte
index bddd16df..51167432 100644
--- a/src/lib/Landing.svelte
+++ b/src/lib/Landing.svelte
@@ -41,7 +41,9 @@ onMount(() => {
{ threshold: 0.1 }
);
- document.querySelectorAll('.landing-section').forEach((el) => intersectionObserver.observe(el));
+ document.querySelectorAll('.landing-section').forEach((el) => {
+ intersectionObserver.observe(el);
+ });
calculateLimit();
diff --git a/src/lib/List/Anime/AnimeListTemplate.svelte b/src/lib/List/Anime/AnimeListTemplate.svelte
index cb1d0fcd..8f2846c6 100644
--- a/src/lib/List/Anime/AnimeListTemplate.svelte
+++ b/src/lib/List/Anime/AnimeListTemplate.svelte
@@ -3,7 +3,7 @@
import type { AniListAuthorisation } from '$lib/Data/AniList/identity';
import type { Media } from '$lib/Data/AniList/media';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import settings from '$stores/settings';
import CleanAnimeList from './CleanAnimeList.svelte';
import ListTitle from '../ListTitle.svelte';
@@ -100,6 +100,6 @@ onMount(async () => {
{:catch}
<ListTitle time={0} count={-1337} {title} />
- <Error />
+ <RateLimitedError />
{/await}
{/if}
diff --git a/src/lib/List/Anime/CompletedAnimeList.svelte b/src/lib/List/Anime/CompletedAnimeList.svelte
index 240d386d..e308a230 100644
--- a/src/lib/List/Anime/CompletedAnimeList.svelte
+++ b/src/lib/List/Anime/CompletedAnimeList.svelte
@@ -68,8 +68,8 @@ const cleanMedia = (anime: Media[]) => {
const outdatedCompletedAnime = anime.filter(
(media: Media) =>
media.status === 'FINISHED' &&
- (media.mediaListEntry || { status: 'DROPPED' }).status != 'DROPPED' &&
- (media.mediaListEntry || { status: 'DROPPED' }).status !=
+ (media.mediaListEntry || { status: 'DROPPED' }).status !== 'DROPPED' &&
+ (media.mediaListEntry || { status: 'DROPPED' }).status !==
($settings.displayPausedMedia ? '' : 'PAUSED') &&
(media.mediaListEntry || { progress: 0 }).progress >= ($settings.displayNotStarted ? 0 : 1)
);
@@ -100,6 +100,9 @@ const cleanMedia = (anime: Media[]) => {
case 'time_remaining':
return (a.nextAiringEpisode?.airingAt || 9999) - (b.nextAiringEpisode?.airingAt || 9999);
+
+ default:
+ return 0;
}
});
diff --git a/src/lib/List/Anime/DueAnimeList.svelte b/src/lib/List/Anime/DueAnimeList.svelte
index e19bcd0c..69b84b8f 100644
--- a/src/lib/List/Anime/DueAnimeList.svelte
+++ b/src/lib/List/Anime/DueAnimeList.svelte
@@ -62,7 +62,7 @@ const cleanMedia = (anime: Media[], displayUnresolved: boolean, subsPlease: Subs
// Releasing media
(media: Media) =>
media.status === 'RELEASING' &&
- (media.mediaListEntry || { status: 'DROPPED' }).status !=
+ (media.mediaListEntry || { status: 'DROPPED' }).status !==
($settings.displayPausedMedia ? '' : 'PAUSED') &&
(media.mediaListEntry || { progress: 0 }).progress >=
($settings.displayNotStarted === true ? 0 : 1) &&
@@ -107,6 +107,9 @@ const cleanMedia = (anime: Media[], displayUnresolved: boolean, subsPlease: Subs
case 'time_remaining':
return (a.nextAiringEpisode?.airingAt || 9999) - (b.nextAiringEpisode?.airingAt || 9999);
+
+ default:
+ return 0;
}
});
diff --git a/src/lib/List/Manga/CleanMangaList.svelte b/src/lib/List/Manga/CleanMangaList.svelte
index 8964c15e..428c45f2 100644
--- a/src/lib/List/Manga/CleanMangaList.svelte
+++ b/src/lib/List/Manga/CleanMangaList.svelte
@@ -1,7 +1,7 @@
<script lang="ts">
import Spacer from '$lib/Layout/Spacer.svelte';
import type { Media } from '$lib/Data/AniList/media';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import { volumeCount } from '$lib/Media/Manga/volumes';
import settings from '$stores/settings';
import ListTitle from '../ListTitle.svelte';
@@ -120,7 +120,7 @@ const increment = (manga: Media) => {
<a href="https://due.moe">due.moe</a>'s manga data source is currently unavailable. Please
check back later.
{:else}
- <Error />
+ <RateLimitedError />
{/if}
{:else}
<Skeleton card={false} count={1} height="0.9rem" list />
diff --git a/src/lib/List/Manga/MangaListTemplate.svelte b/src/lib/List/Manga/MangaListTemplate.svelte
index 740a1341..0b967cb2 100644
--- a/src/lib/List/Manga/MangaListTemplate.svelte
+++ b/src/lib/List/Manga/MangaListTemplate.svelte
@@ -10,7 +10,7 @@ import { database } from '$lib/Database/IDB/chapters';
import settings from '$stores/settings';
import lastPruneTimes from '$stores/lastPruneTimes';
import ListTitle from '../ListTitle.svelte';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import CleanMangaList from './CleanMangaList.svelte';
import { incrementMediaProgress } from '$lib/Media/Anime/cache';
import { addNotification } from '$lib/Notification/store';
@@ -199,7 +199,9 @@ const cleanMedia = async (manga: Media[], displayUnresolved: boolean, force: boo
if (progress < 100) progress += progressStep;
}
- finalMedia.forEach((m: Media, i) => (m.episodes = chapterCounts[i] || -1337));
+ finalMedia.forEach((m: Media, i) => {
+ m.episodes = chapterCounts[i] || -1337;
+ });
if (!displayUnresolved) finalMedia = finalMedia.filter((m: Media) => m.episodes !== -1337);
@@ -404,6 +406,6 @@ const cleanCache = () => {
/>
{/if}
- <Error list={false} />
+ <RateLimitedError list={false} />
{/await}
{/await}
diff --git a/src/lib/Schedule/Days.svelte b/src/lib/Schedule/Days.svelte
index 416c0cce..6a2b2da6 100644
--- a/src/lib/Schedule/Days.svelte
+++ b/src/lib/Schedule/Days.svelte
@@ -16,7 +16,7 @@ import anime from '$stores/anime';
import lastPruneTimes from '$stores/lastPruneTimes';
import Message from '$lib/Loading/Message.svelte';
import Skeleton from '$lib/Loading/Skeleton.svelte';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
export let subsPlease: SubsPlease;
export let scheduledMedia: Partial<Media[]>;
@@ -195,7 +195,7 @@ const episode = (media: Media, weekday: string) => {
</details>
{/each}
{:catch}
- <Error type="Media lists" loginSessionError={false} card list={false} />
+ <RateLimitedError type="Media lists" loginSessionError={false} card list={false} />
{/await}
<style>
diff --git a/src/lib/Tools/Birthdays.svelte b/src/lib/Tools/Birthdays.svelte
index 6c81a233..49d72cfa 100644
--- a/src/lib/Tools/Birthdays.svelte
+++ b/src/lib/Tools/Birthdays.svelte
@@ -3,7 +3,7 @@ import { browser } from '$app/environment';
import { page } from '$app/stores';
import { ACDBBirthdays, type ACDBBirthday } from '$lib/Data/Birthday/secondary';
import { aniSearchBirthdays, type aniSearchBirthday } from '$lib/Data/Birthday/primary';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import { onMount } from 'svelte';
import { clearAllParameters, parseOrDefault } from '../Utility/parameters';
import Skeleton from '$lib/Loading/Skeleton.svelte';
@@ -90,10 +90,10 @@ const combineBirthdaySources = (
return Array.from(nameMap.values());
};
-const resolveBirthdays = async (
+async function resolveBirthdays(
month: number,
day: number
-): Promise<{ birthdays: Birthday[]; allSourcesFailed: boolean }> => {
+): Promise<{ birthdays: Birthday[]; allSourcesFailed: boolean }> {
const [acdbResult, aniSearchResult] = await Promise.allSettled([
ACDBBirthdays(month, day),
browser ? aniSearchBirthdays(month, day) : Promise.resolve([])
@@ -105,7 +105,7 @@ const resolveBirthdays = async (
birthdays: combineBirthdaySources(acdb, aniSearch),
allSourcesFailed: acdbResult.status === 'rejected' && aniSearchResult.status === 'rejected'
};
-};
+}
</script>
{#await birthdays}
@@ -114,7 +114,7 @@ const resolveBirthdays = async (
<Skeleton grid={true} count={100} width="150px" height="170px" />
{:then resolved}
{#if resolved.allSourcesFailed}
- <Error type="Character" card />
+ <RateLimitedError type="Character" card />
{:else}
<p>
<select bind:value={month}>
@@ -158,7 +158,7 @@ const resolveBirthdays = async (
</div>
{/if}
{:catch}
- <Error type="Character" card />
+ <RateLimitedError type="Character" card />
{/await}
<style lang="scss">
diff --git a/src/lib/Tools/BirthdaysTemplate.svelte b/src/lib/Tools/BirthdaysTemplate.svelte
index 0ec937c4..17763908 100644
--- a/src/lib/Tools/BirthdaysTemplate.svelte
+++ b/src/lib/Tools/BirthdaysTemplate.svelte
@@ -5,7 +5,7 @@ import { onMount } from 'svelte';
import { clearAllParameters, parseOrDefault } from '../Utility/parameters';
import Message from '$lib/Loading/Message.svelte';
import locale from '$stores/locale';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import Skeleton from '$lib/Loading/Skeleton.svelte';
export let remoteURL: string;
@@ -95,10 +95,10 @@ onMount(() => clearAllParameters(['month', 'day']));
</div>
{/if}
{:catch}
- <Error type="Character" card />
+ <RateLimitedError type="Character" card />
{/await}
{:catch}
- <Error type="Character" card />
+ <RateLimitedError type="Character" card />
{/await}
<style lang="scss">
diff --git a/src/lib/Tools/UmaMusumeBirthdays.svelte b/src/lib/Tools/UmaMusumeBirthdays.svelte
index cc8c1513..7d49cfaa 100644
--- a/src/lib/Tools/UmaMusumeBirthdays.svelte
+++ b/src/lib/Tools/UmaMusumeBirthdays.svelte
@@ -1,7 +1,7 @@
<script lang="ts">
import { browser } from '$app/environment';
import { page } from '$app/stores';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import { onMount } from 'svelte';
import { clearAllParameters, parseOrDefault } from '../Utility/parameters';
import Skeleton from '$lib/Loading/Skeleton.svelte';
@@ -117,7 +117,7 @@ onMount(() => {
<Skeleton grid={true} count={100} width="150px" height="170px" />
{/if}
{:catch}
- <Error type="Character" card />
+ <RateLimitedError type="Character" card />
{/await}
<style lang="scss">
diff --git a/src/lib/Tools/Wrapped/Tool.svelte b/src/lib/Tools/Wrapped/Tool.svelte
index 3f13b483..7ce50ac3 100644
--- a/src/lib/Tools/Wrapped/Tool.svelte
+++ b/src/lib/Tools/Wrapped/Tool.svelte
@@ -14,7 +14,7 @@ import { Type, mediaListCollection, type Media } from '$lib/Data/AniList/media';
import anime from '$stores/anime';
import lastPruneTimes from '$stores/lastPruneTimes';
import manga from '$stores/manga';
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import { domToBlob } from 'modern-screenshot';
import { browser } from '$app/environment';
import { page } from '$app/stores';
@@ -87,6 +87,7 @@ let lastUseFullActivityHistory = useFullActivityHistory;
let lastDisableLoopingActivityCounter = disableLoopingActivityCounter;
let lastStartDateFilter: Date | null = startDateFilter;
let lastEndDateFilter: Date | null = endDateFilter;
+const touch = (...values: unknown[]) => values;
$: {
if (browser && mounted) {
@@ -136,32 +137,32 @@ $: {
}
$: {
- includeMusic = includeMusic;
- includeSpecials = includeSpecials;
- includeRepeats = includeRepeats;
- disableActivityHistory = disableActivityHistory;
- highestRatedMediaPercentage = highestRatedMediaPercentage;
- highestRatedGenreTagPercentage = highestRatedGenreTagPercentage;
- topGenresTags = topGenresTags;
- genreTagsSort = genreTagsSort;
- mediaSort = mediaSort;
- includeMovies = includeMovies;
- includeOVAs = includeOVAs;
- selectedYear = selectedYear;
- includeOngoingMediaFromPreviousYears = includeOngoingMediaFromPreviousYears;
- excludeUnratedUnwatched = excludeUnratedUnwatched;
+ touch(
+ includeMusic,
+ includeSpecials,
+ includeRepeats,
+ disableActivityHistory,
+ highestRatedMediaPercentage,
+ highestRatedGenreTagPercentage,
+ topGenresTags,
+ genreTagsSort,
+ mediaSort,
+ includeMovies,
+ includeOVAs,
+ selectedYear,
+ includeOngoingMediaFromPreviousYears,
+ excludeUnratedUnwatched
+ );
if (shouldFetchData) update().then(updateWidth).catch(updateWidth);
}
$: {
- animeList = animeList;
- mangaList = mangaList;
- highestRatedCount = highestRatedCount;
+ touch(animeList, mangaList, highestRatedCount);
new Promise((resolve) => setTimeout(resolve, 1)).then(updateWidth);
}
$: {
- genreTagCount = genreTagCount;
+ touch(genreTagCount);
if (animeList && mangaList)
topMedia = tops(
@@ -174,7 +175,7 @@ $: {
new Promise((resolve) => setTimeout(resolve, 1)).then(updateWidth);
}
$: {
- excludedKeywords = excludedKeywords;
+ touch(excludedKeywords);
if (excludedKeywords.length > 0 && animeList !== undefined && mangaList !== undefined) {
animeList = originalAnimeList;
@@ -216,7 +217,7 @@ $: mangaMostTitle = (() => {
}
})();
-const updateWidth = () => {
+function updateWidth() {
if (!browser) return;
const wrappedContainer = document.querySelector('#wrapped') as HTMLElement;
@@ -263,7 +264,7 @@ const updateWidth = () => {
reset();
reset();
-};
+}
onMount(async () => {
clearAllParameters([
@@ -407,7 +408,7 @@ const dummyActivities: ActivityHistoryEntry[] = [];
const dummyAnimeList: Media[] = [createDummyMedia('ANIME')];
const dummyMangaList: Media[] = [createDummyMedia('MANGA')];
-const update = async () => {
+async function update() {
if ($userIdentity.id === -1) return;
let rawAnimeList = await mediaListCollection(
@@ -601,7 +602,7 @@ const update = async () => {
}
for (const media of calculatedMangaList) chapters += media.mediaListEntry?.progress || 0;
-};
+}
/* eslint-disable @typescript-eslint/no-explicit-any */
// const year = (statistic: { startYears: any }) =>
@@ -684,7 +685,7 @@ const submitExcludedKeywords = () => {
.filter((k) => k.length > 0);
};
-const excludeKeywords = (media: Media[]) => {
+function excludeKeywords(media: Media[]) {
if (excludedKeywords.length <= 0) return media;
return media.filter((m) => {
@@ -696,7 +697,7 @@ const excludeKeywords = (media: Media[]) => {
return true;
});
-};
+}
const pruneFullYear = async () => {
await database.activities.bulkDelete((await database.activities.toArray()).map((m) => m.page));
@@ -814,10 +815,10 @@ const pruneFullYear = async () => {
</div>
</div>
{:catch}
- <Error type="User" card list={false} />
+ <RateLimitedError type="User" card list={false} />
{/await}
{:catch}
- <Error
+ <RateLimitedError
card
type={`${useFullActivityHistory ? 'Full-year activity' : 'Activity'} history`}
loginSessionError={!useFullActivityHistory}
@@ -830,7 +831,7 @@ const pruneFullYear = async () => {
your local activity history database.
</p>
{/if}
- </Error>
+ </RateLimitedError>
{/await}
{/key}
{:else}
diff --git a/src/lib/User/BadgeWall/AWC.svelte b/src/lib/User/BadgeWall/AWC.svelte
index 52eb670a..6d8dcf76 100644
--- a/src/lib/User/BadgeWall/AWC.svelte
+++ b/src/lib/User/BadgeWall/AWC.svelte
@@ -14,17 +14,17 @@ export let preferences: Preferences;
const awcBadgesGrouped = (awcResponse: string): AWCBadgesGroup[] => {
return Array.from(
new DOMParser().parseFromString(awcResponse, 'text/html').querySelectorAll('.container')
- )
- .map((c) => {
- const container = c as HTMLDivElement;
- const header = container.querySelector('.container-header') as HTMLDivElement;
+ ).flatMap((c) => {
+ const container = c as HTMLDivElement;
+ const header = container.querySelector('.container-header') as HTMLDivElement;
- if (!header) return;
+ if (!header) return [];
- if (!['Anime', 'Manga', 'Special'].includes(header.innerText)) return;
+ if (!['Anime', 'Manga', 'Special'].includes(header.innerText)) return [];
- if (header.innerText === 'Special') {
- return {
+ if (header.innerText === 'Special') {
+ return [
+ {
group: header.innerText,
badges: Array.from(container.querySelectorAll('.badge-display img')).map((b) => {
const badge = b as HTMLImageElement;
@@ -37,10 +37,12 @@ const awcBadgesGrouped = (awcResponse: string): AWCBadgesGroup[] => {
: badge.src
};
})
- };
- }
+ }
+ ];
+ }
- return {
+ return [
+ {
group: header.innerText,
badges: Array.from(container.querySelectorAll('.badge-display a')).map((b) => {
const badge = b as HTMLAnchorElement;
@@ -54,9 +56,9 @@ const awcBadgesGrouped = (awcResponse: string): AWCBadgesGroup[] => {
: image.src
};
})
- };
- })
- .filter((b) => b !== undefined) as AWCBadgesGroup[];
+ }
+ ];
+ }) as AWCBadgesGroup[];
};
</script>
diff --git a/src/routes/schedule/+page.svelte b/src/routes/schedule/+page.svelte
index 59e086ce..ff83d895 100644
--- a/src/routes/schedule/+page.svelte
+++ b/src/routes/schedule/+page.svelte
@@ -1,5 +1,5 @@
<script lang="ts">
-import Error from '$lib/Error/RateLimited.svelte';
+import RateLimitedError from '$lib/Error/RateLimited.svelte';
import { onMount } from 'svelte';
import { parseOrDefault } from '$lib/Utility/parameters';
import { browser } from '$app/environment';
@@ -74,7 +74,7 @@ onMount(async () => {
<Skeleton grid={true} count={7} height="15em" width="49.5%" />
{/if}
{:catch}
- <Error type="Media" loginSessionError={false} card list={false} />
+ <RateLimitedError type="Media" loginSessionError={false} card list={false} />
{/await}
{/if}
diff --git a/src/routes/tools/[tool]/+page.svelte b/src/routes/tools/[tool]/+page.svelte
index 6cae8433..f106d5b2 100644
--- a/src/routes/tools/[tool]/+page.svelte
+++ b/src/routes/tools/[tool]/+page.svelte
@@ -31,7 +31,7 @@ onMount(() => {
$: suggestion = closest(tool, Object.keys(tools));
-$: if (tool == 'girls') goto(root('/girls'));
+$: if (tool === 'girls') goto(root('/girls'));
</script>
<Picker bind:tool />