プリフェッチ実装(#140) #256

マージ済み
みてるぞ が 27 個のコミットを feature/140 から main へマージ 2026-02-11 13:27:28 +09:00
コミット 9b4b2a74e0 の変更だけを表示してゐます - すべてのコミットを表示
+25 -9
ファイルの表示
@@ -31,13 +31,31 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => {
const wikiPage = await qc.fetchQuery ({
queryKey: wikiKeys.show (title, { version }),
queryFn: () => fetchWikiPageByTitle (title, { version }) })
queryFn: async () => {
try
{
return await fetchWikiPageByTitle (title, { version })
}
catch
{
return null
}
} })
const effectiveTitle = wikiPage.title
const effectiveTitle = wikiPage?.title ?? title
await qc.prefetchQuery ({
queryKey: tagsKeys.show (effectiveTitle),
queryFn: () => fetchTagByName (effectiveTitle) })
queryFn: async () => {
try
{
return await fetchTagByName (effectiveTitle)
}
catch
{
return null
}
} })
if (version)
return
@@ -94,15 +112,13 @@ export const routePrefetchers: { test: (u: URL) => boolean; run: Prefetcher }[]
{ test: u => u.pathname === '/wiki', run: prefetchWikiPagesIndex },
{ test: u => (!(['/wiki/new', '/wiki/changes'].includes (u.pathname))
&& Boolean (mWiki (u.pathname))),
run: prefetchWikiPageShow },
]
run: prefetchWikiPageShow }]
export const prefetchForURL = async (qc: QueryClient, urlLike: string): Promise<void> => {
const u = new URL (urlLike, location.origin)
const jobs = routePrefetchers.filter (r => r.test (u)).map (r => r.run (qc, u))
if (jobs.length === 0)
const r = routePrefetchers.find (x => x.test (u))
if (!(r))
return
await Promise.all (jobs)
await r.run (qc, u)
}