From 5b973cf534666155bdd5985a9c897c3c476a7856 Mon Sep 17 00:00:00 2001 From: Masahiko AMANO Date: Wed, 10 Jun 2026 14:49:17 +0300 Subject: [PATCH] fix(frontend): resolve svelte-check type errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - vite-mock-plugin: define the missing MockFile type and annotate the MOCK_FILES / MOCK_TRASH arrays so restore (unshift) type-checks. - categories/[id], tags/[id]: page.params.id is string | undefined under noUncheckedIndexedAccess — guard loadTags and default the TagRuleEditor tagId so the routes type-check. svelte-check now reports 0 errors. Co-Authored-By: Claude Opus 4.8 --- .../src/routes/categories/[id]/+page.svelte | 3 ++- frontend/src/routes/tags/[id]/+page.svelte | 2 +- frontend/vite-mock-plugin.ts | 20 ++++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/frontend/src/routes/categories/[id]/+page.svelte b/frontend/src/routes/categories/[id]/+page.svelte index 93d0a8c..77c9859 100644 --- a/frontend/src/routes/categories/[id]/+page.svelte +++ b/frontend/src/routes/categories/[id]/+page.svelte @@ -48,7 +48,8 @@ void loadTags(id, 0); }); - async function loadTags(id: string, startOffset: number) { + async function loadTags(id: string | undefined, startOffset: number) { + if (!id) return; tagsLoading = true; try { const params = new URLSearchParams({ diff --git a/frontend/src/routes/tags/[id]/+page.svelte b/frontend/src/routes/tags/[id]/+page.svelte index 70ec906..ab5a376 100644 --- a/frontend/src/routes/tags/[id]/+page.svelte +++ b/frontend/src/routes/tags/[id]/+page.svelte @@ -172,7 +172,7 @@

Implied tags

- (rules = r)} /> + (rules = r)} />
{/if} diff --git a/frontend/vite-mock-plugin.ts b/frontend/vite-mock-plugin.ts index f44a92b..a04f16b 100644 --- a/frontend/vite-mock-plugin.ts +++ b/frontend/vite-mock-plugin.ts @@ -114,6 +114,24 @@ function mockThumbSvg(id: string): string { `; } +type MockFile = { + id: string; + original_name: string; + mime_type: string; + mime_extension: string; + content_datetime: string; + notes: string | null; + metadata: unknown; + exif: Record; + phash: number | null; + creator_id: number; + creator_name: string; + is_public: boolean; + is_deleted: boolean; + created_at: string; + position?: number; +}; + // Trash — pre-seeded with a few deleted files const MOCK_TRASH: MockFile[] = Array.from({ length: 6 }, (_, i) => { const mimes = ['image/jpeg', 'image/png', 'image/webp']; @@ -139,7 +157,7 @@ const MOCK_TRASH: MockFile[] = Array.from({ length: 6 }, (_, i) => { }; }); -const MOCK_FILES = Array.from({ length: 75 }, (_, i) => { +const MOCK_FILES: MockFile[] = Array.from({ length: 75 }, (_, i) => { const mimes = ['image/jpeg', 'image/png', 'image/webp', 'video/mp4']; const exts = ['jpg', 'png', 'webp', 'mp4' ]; const mi = i % mimes.length;