Skip to content

Commit feb8ceb

Browse files
committed
perf: cancel deduped async data handlers
1 parent 731d9a6 commit feb8ceb

3 files changed

Lines changed: 16 additions & 23 deletions

File tree

app/composables/useCachedFetch.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,10 @@ export function useCachedFetch(): CachedFetchFunction {
3434
if (import.meta.client) {
3535
return async <T = unknown>(
3636
url: string,
37-
options: {
38-
method?: string
39-
body?: unknown
40-
headers?: Record<string, string>
41-
} = {},
37+
options: Parameters<typeof $fetch>[1] = {},
4238
_ttl?: number,
4339
): Promise<CachedFetchResult<T>> => {
44-
const data = (await $fetch(url, options as Parameters<typeof $fetch>[1])) as T
40+
const data = (await $fetch<T>(url, options)) as T
4541
return { data, isStale: false, cachedAt: null }
4642
}
4743
}
@@ -59,14 +55,10 @@ export function useCachedFetch(): CachedFetchFunction {
5955
// (shouldn't happen in normal operation)
6056
return async <T = unknown>(
6157
url: string,
62-
options: {
63-
method?: string
64-
body?: unknown
65-
headers?: Record<string, string>
66-
} = {},
58+
options: Parameters<typeof $fetch>[1] = {},
6759
_ttl?: number,
6860
): Promise<CachedFetchResult<T>> => {
69-
const data = (await $fetch(url, options as Parameters<typeof $fetch>[1])) as T
61+
const data = (await $fetch<T>(url, options)) as T
7062
return { data, isStale: false, cachedAt: null }
7163
}
7264
}

app/composables/useNpmRegistry.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,11 @@ export function usePackage(
185185

186186
const asyncData = useLazyAsyncData(
187187
() => `package:${toValue(name)}:${toValue(requestedVersion) ?? ''}`,
188-
async () => {
188+
async (_nuxtApp, { signal }) => {
189189
const encodedName = encodePackageName(toValue(name))
190-
const { data: r, isStale } = await cachedFetch<Packument>(`${NPM_REGISTRY}/${encodedName}`)
190+
const { data: r, isStale } = await cachedFetch<Packument>(`${NPM_REGISTRY}/${encodedName}`, {
191+
signal,
192+
})
191193
const reqVer = toValue(requestedVersion)
192194
const pkg = transformPackument(r, reqVer)
193195
const resolvedVersion = getResolvedVersion(pkg, reqVer)
@@ -233,10 +235,11 @@ export function usePackageDownloads(
233235

234236
const asyncData = useLazyAsyncData(
235237
() => `downloads:${toValue(name)}:${toValue(period)}`,
236-
async () => {
238+
async (_nuxtApp, { signal }) => {
237239
const encodedName = encodePackageName(toValue(name))
238240
const { data, isStale } = await cachedFetch<NpmDownloadCount>(
239241
`${NPM_API}/downloads/point/${toValue(period)}/${encodedName}`,
242+
{ signal },
240243
)
241244
return { ...data, isStale }
242245
},
@@ -306,7 +309,7 @@ export function useNpmSearch(
306309

307310
const asyncData = useLazyAsyncData(
308311
() => `search:incremental:${toValue(query)}`,
309-
async () => {
312+
async (_nuxtApp, { signal }) => {
310313
const q = toValue(query)
311314
if (!q.trim()) {
312315
return emptySearchResponse
@@ -325,7 +328,7 @@ export function useNpmSearch(
325328

326329
const { data: response, isStale } = await cachedFetch<NpmSearchResponse>(
327330
`${NPM_REGISTRY}/-/v1/search?${params.toString()}`,
328-
{},
331+
{ signal },
329332
60,
330333
)
331334

@@ -509,7 +512,7 @@ export function useOrgPackages(orgName: MaybeRefOrGetter<string>) {
509512

510513
const asyncData = useLazyAsyncData(
511514
() => `org-packages:${toValue(orgName)}`,
512-
async () => {
515+
async (_nuxtApp, { signal }) => {
513516
const org = toValue(orgName)
514517
if (!org) {
515518
return emptySearchResponse
@@ -520,6 +523,7 @@ export function useOrgPackages(orgName: MaybeRefOrGetter<string>) {
520523
try {
521524
const { data } = await cachedFetch<Record<string, string>>(
522525
`${NPM_REGISTRY}/-/org/${encodeURIComponent(org)}/package`,
526+
{ signal },
523527
)
524528
packageNames = Object.keys(data)
525529
} catch (err) {
@@ -553,6 +557,7 @@ export function useOrgPackages(orgName: MaybeRefOrGetter<string>) {
553557
const encoded = encodePackageName(name)
554558
const { data: pkg } = await cachedFetch<MinimalPackument>(
555559
`${NPM_REGISTRY}/${encoded}`,
560+
{ signal },
556561
)
557562
return pkg
558563
} catch {

shared/utils/fetch-cache-config.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,6 @@ export interface CachedFetchResult<T> {
105105
*/
106106
export type CachedFetchFunction = <T = unknown>(
107107
url: string,
108-
options?: {
109-
method?: string
110-
body?: unknown
111-
headers?: Record<string, string>
112-
},
108+
options?: Parameters<typeof $fetch>[1],
113109
ttl?: number,
114110
) => Promise<CachedFetchResult<T>>

0 commit comments

Comments
 (0)