This commit is contained in:
2026-02-06 23:32:08 +09:00
parent 4f09abf104
commit 9b4b2a74e0
+26 -10
View File
@@ -31,13 +31,31 @@ const prefetchWikiPageShow: Prefetcher = async (qc, url) => {
const wikiPage = await qc.fetchQuery ({ const wikiPage = await qc.fetchQuery ({
queryKey: wikiKeys.show (title, { version }), 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 ({ await qc.prefetchQuery ({
queryKey: tagsKeys.show (effectiveTitle), queryKey: tagsKeys.show (effectiveTitle),
queryFn: () => fetchTagByName (effectiveTitle) }) queryFn: async () => {
try
{
return await fetchTagByName (effectiveTitle)
}
catch
{
return null
}
} })
if (version) if (version)
return return
@@ -85,7 +103,7 @@ const prefetchPostChanges: Prefetcher = async (qc, url) => {
} }
export const routePrefetchers: { test: (u: URL) => boolean; run: Prefetcher }[] = [ export const routePrefetchers: { test: (u: URL) => boolean; run: Prefetcher }[] = [
{ test: u => u.pathname === '/' || u.pathname === '/posts', run: prefetchPostsIndex }, { test: u => u.pathname === '/' || u.pathname === '/posts', run: prefetchPostsIndex },
{ test: u => (!(['/posts/new', '/posts/changes'].includes (u.pathname)) { test: u => (!(['/posts/new', '/posts/changes'].includes (u.pathname))
&& Boolean (mPost (u.pathname))), && Boolean (mPost (u.pathname))),
@@ -94,15 +112,13 @@ export const routePrefetchers: { test: (u: URL) => boolean; run: Prefetcher }[]
{ test: u => u.pathname === '/wiki', run: prefetchWikiPagesIndex }, { test: u => u.pathname === '/wiki', run: prefetchWikiPagesIndex },
{ test: u => (!(['/wiki/new', '/wiki/changes'].includes (u.pathname)) { test: u => (!(['/wiki/new', '/wiki/changes'].includes (u.pathname))
&& Boolean (mWiki (u.pathname))), && Boolean (mWiki (u.pathname))),
run: prefetchWikiPageShow }, run: prefetchWikiPageShow }]
]
export const prefetchForURL = async (qc: QueryClient, urlLike: string): Promise<void> => { export const prefetchForURL = async (qc: QueryClient, urlLike: string): Promise<void> => {
const u = new URL (urlLike, location.origin) const u = new URL (urlLike, location.origin)
const jobs = routePrefetchers.filter (r => r.test (u)).map (r => r.run (qc, u)) const r = routePrefetchers.find (x => x.test (u))
if (jobs.length === 0) if (!(r))
return return
await r.run (qc, u)
await Promise.all (jobs)
} }