From 48087e114ec5f368b392ae4993bd25087ab5b6b0 Mon Sep 17 00:00:00 2001 From: hawkinslabdev <59891413+hawkinslabdev@users.noreply.github.com> Date: Wed, 29 Jul 2026 09:34:52 +0200 Subject: [PATCH] fix: unblock CI by resolving type errors - clean up unused and mismatched types - align demo data with required fields - tighten type annotations to break circular inference - handle optional and undefined cases explicitly --- substash/src/components/feed/Feed.solid.tsx | 2 +- .../src/components/layout/PageShell.astro | 2 +- substash/src/lib/demo/index.ts | 3 ++- substash/src/lib/search/sync.ts | 25 ++++++++++--------- substash/src/lib/stash/types.ts | 5 +++- substash/src/pages/performers/[slug].astro | 2 +- 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/substash/src/components/feed/Feed.solid.tsx b/substash/src/components/feed/Feed.solid.tsx index cf11382..bb08d72 100644 --- a/substash/src/components/feed/Feed.solid.tsx +++ b/substash/src/components/feed/Feed.solid.tsx @@ -284,7 +284,7 @@ function FeedInner(props: Props) { ), JSON.stringify({ pages: data.pages, - pageParams: data.pageParams, + pageParams: data.pageParams as (string | null)[], savedAt: Date.now(), } satisfies FeedCache), ); diff --git a/substash/src/components/layout/PageShell.astro b/substash/src/components/layout/PageShell.astro index 748e321..1f2793a 100644 --- a/substash/src/components/layout/PageShell.astro +++ b/substash/src/components/layout/PageShell.astro @@ -103,7 +103,7 @@ const { sessionStorage.setItem(SCROLL_KEY(location.href), String(Math.round(window.scrollY))); } catch { /* quota */ } - const ev = e as TransitionBeforePreparationEvent; + const ev = e as Event & { navigationType: string; to: URL }; // Expose nav type so Feed islands can detect back-nav without depending // on astro:after-swap timing (which fires before client:only hydration). try { sessionStorage.setItem('substash:last-nav-type', ev.navigationType); } catch {} diff --git a/substash/src/lib/demo/index.ts b/substash/src/lib/demo/index.ts index 7a7934f..c3fa278 100644 --- a/substash/src/lib/demo/index.ts +++ b/substash/src/lib/demo/index.ts @@ -494,6 +494,7 @@ export const DEMO_ITEMS: ImageFeedItem[] = TOP_50_MEMES.map((meme, i) => { type: "image" as const, title, subreddit: templateId, + subredditExtracted: true, subredditDisplay: templateId.charAt(0).toUpperCase() + templateId.slice(1).replace(/-/g, " "), @@ -648,7 +649,7 @@ export function getDemoImage(id: string): StashImage | undefined { studio: item.studio ? { id: item.studio.id, name: item.studio.name } : null, performers: item.performers, tags: item.tags, - files: [{ id, path: null, basename: null, width: 800, height: 600 }], + files: [{ path: "", basename: "", width: 800, height: 600 }], visual_files: [], }; } diff --git a/substash/src/lib/search/sync.ts b/substash/src/lib/search/sync.ts index 6510d29..0eb6fe9 100644 --- a/substash/src/lib/search/sync.ts +++ b/substash/src/lib/search/sync.ts @@ -128,18 +128,19 @@ async function syncMedia(): Promise { let hasMoreImages = true; while (hasMoreScenes || hasMoreImages) { - const [scenesData, imagesData] = await Promise.all([ - hasMoreScenes - ? stashRequest(FIND_SCENES, { - filter: { page, per_page: SYNC_PAGE_SIZE, sort: "id" }, - }).catch(() => ({ findScenes: { count: 0, scenes: [] } })) - : Promise.resolve({ findScenes: { count: 0, scenes: [] } }), - hasMoreImages - ? stashRequest(FIND_IMAGES, { - filter: { page, per_page: SYNC_PAGE_SIZE, sort: "id" }, - }).catch(() => ({ findImages: { count: 0, images: [] } })) - : Promise.resolve({ findImages: { count: 0, images: [] } }), - ]); + const [scenesData, imagesData]: [FindScenesQuery, FindImagesQuery] = + await Promise.all([ + hasMoreScenes + ? stashRequest(FIND_SCENES, { + filter: { page, per_page: SYNC_PAGE_SIZE, sort: "id" }, + }).catch(() => ({ findScenes: { count: 0, scenes: [] } })) + : Promise.resolve({ findScenes: { count: 0, scenes: [] } }), + hasMoreImages + ? stashRequest(FIND_IMAGES, { + filter: { page, per_page: SYNC_PAGE_SIZE, sort: "id" }, + }).catch(() => ({ findImages: { count: 0, images: [] } })) + : Promise.resolve({ findImages: { count: 0, images: [] } }), + ]); const sceneRows: CacheRow[] = scenesData.findScenes.scenes.map((s) => { const item = sceneToFeedItem(s); diff --git a/substash/src/lib/stash/types.ts b/substash/src/lib/stash/types.ts index a579f1b..9c0080c 100644 --- a/substash/src/lib/stash/types.ts +++ b/substash/src/lib/stash/types.ts @@ -33,7 +33,6 @@ export type StashStudio = { name: string; image_path: Maybe; scene_count: Maybe; - url: Maybe; }; export type StashPerformer = { @@ -50,6 +49,8 @@ export type StashScene = { title: Maybe; date: Maybe; created_at: Maybe; + /** Only selected by FIND_SCENE, not the list queries. */ + details?: Maybe; rating100: Maybe; o_counter: Maybe; play_count: Maybe; @@ -126,6 +127,8 @@ export type StashImage = { title: Maybe; date: Maybe; created_at: Maybe; + /** Only selected by FIND_IMAGE, not the list queries. */ + details?: Maybe; rating100: Maybe; o_counter: Maybe; paths: StashImagePaths; diff --git a/substash/src/pages/performers/[slug].astro b/substash/src/pages/performers/[slug].astro index 5cf2c65..ff94f38 100644 --- a/substash/src/pages/performers/[slug].astro +++ b/substash/src/pages/performers/[slug].astro @@ -88,7 +88,7 @@ if (DEMO_MODE) { } const cursorPayload = { page: 1, perPage: 20, total: count, sort, performerId: slug }; -const displayName = performer?.name ?? slug; +const displayName = performer?.name ?? slug ?? "Performer"; ---