diff --git a/app/composables/npm/useResolvedVersion.ts b/app/composables/npm/useResolvedVersion.ts index 992ce62b7..fda018525 100644 --- a/app/composables/npm/useResolvedVersion.ts +++ b/app/composables/npm/useResolvedVersion.ts @@ -4,15 +4,17 @@ export function useResolvedVersion( packageName: MaybeRefOrGetter, requestedVersion: MaybeRefOrGetter, ) { - return useFetch( - () => { + return useAsyncData( + () => `resolved-version:${toValue(packageName)}:${toValue(requestedVersion) ?? 'latest'}`, + async () => { const version = toValue(requestedVersion) - return version - ? `https://npm.antfu.dev/${toValue(packageName)}@${version}` - : `https://npm.antfu.dev/${toValue(packageName)}` - }, - { - transform: (data: ResolvedPackageVersion) => data.version, + const name = toValue(packageName) + const url = version + ? `https://npm.antfu.dev/${name}@${version}` + : `https://npm.antfu.dev/${name}` + const data = await $fetch(url) + return data.version }, + { default: () => null }, ) } diff --git a/app/pages/package/[[org]]/[name].vue b/app/pages/package/[[org]]/[name].vue index 1ded55a34..9a253d08d 100644 --- a/app/pages/package/[[org]]/[name].vue +++ b/app/pages/package/[[org]]/[name].vue @@ -194,18 +194,9 @@ const { data: skillsData } = useLazyFetch( const { data: packageAnalysis } = usePackageAnalysis(packageName, requestedVersion) const { data: moduleReplacement } = useModuleReplacement(packageName) -const { - data: resolvedVersion, - status: versionStatus, - error: versionError, -} = await useResolvedVersion(packageName, requestedVersion) - -if ( - versionStatus.value === 'error' && - versionError.value?.statusCode && - versionError.value.statusCode >= 400 && - versionError.value.statusCode < 500 -) { +const { data: resolvedVersion } = await useResolvedVersion(packageName, requestedVersion) + +if (resolvedVersion.value === null) { throw createError({ statusCode: 404, statusMessage: $t('package.not_found'), diff --git a/nuxt.config.ts b/nuxt.config.ts index e64c2a9ad..2719aea96 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -133,13 +133,10 @@ export default defineNuxtConfig({ }, }, // pages - '/package/:name': getISRConfig(60, { fallback: 'html' }), + '/package/**': getISRConfig(60, { fallback: 'html' }), '/package/:name/_payload.json': getISRConfig(60, { fallback: 'json' }), - '/package/:name/v/:version': getISRConfig(60, { fallback: 'html' }), '/package/:name/v/:version/_payload.json': getISRConfig(60, { fallback: 'json' }), - '/package/:org/:name': getISRConfig(60, { fallback: 'html' }), '/package/:org/:name/_payload.json': getISRConfig(60, { fallback: 'json' }), - '/package/:org/:name/v/:version': getISRConfig(60, { fallback: 'html' }), '/package/:org/:name/v/:version/_payload.json': getISRConfig(60, { fallback: 'json' }), // infinite cache (versioned - doesn't change) '/package-code/**': { isr: true, cache: { maxAge: 365 * 24 * 60 * 60 } },