diff --git a/app/composables/useNpmRegistry.ts b/app/composables/useNpmRegistry.ts index 8b5dfba8d8..7190858390 100644 --- a/app/composables/useNpmRegistry.ts +++ b/app/composables/useNpmRegistry.ts @@ -306,6 +306,7 @@ export function useNpmSearch( () => `search:incremental:${toValue(query)}`, async (_nuxtApp, { signal }) => { const q = toValue(query) + if (!q.trim()) { return emptySearchResponse } @@ -321,6 +322,35 @@ export function useNpmSearch( // Use requested size for initial fetch params.set('size', String(opts.size ?? 25)) + if (q.length === 1) { + const encodedName = encodePackageName(q) + const [{ data: pkg, isStale }, { data: downloads }] = await Promise.all([ + cachedFetch(`${NPM_REGISTRY}/${encodedName}`, { signal }), + cachedFetch(`${NPM_API}/downloads/point/last-week/${encodedName}`, { + signal, + }), + ]) + + if (!pkg) { + return emptySearchResponse + } + + const result = packumentToSearchResult(pkg, downloads?.downloads) + + cache.value = { + query: q, + objects: [result], + total: 1, + } + + return { + objects: [result], + total: 1, + isStale, + time: new Date().toISOString(), + } + } + const { data: response, isStale } = await cachedFetch( `${NPM_REGISTRY}/-/v1/search?${params.toString()}`, { signal },