diff --git a/app/pages/[...package].vue b/app/pages/[...package].vue index eae34462fa..ef0e1822ba 100644 --- a/app/pages/[...package].vue +++ b/app/pages/[...package].vue @@ -473,6 +473,24 @@ defineOgImageComponent('Package', { downloads: () => (downloads.value ? formatNumber(downloads.value.downloads) : ''), license: () => pkg.value?.license ?? '', }) + +// We're using only @click because it catches touch events and enter hits +function handleClick(event: MouseEvent) { + const target = (event?.target as HTMLElement | undefined)?.closest('a') + if (!target) return + + const href = target.getAttribute('href') + if (!href) return + + const match = href.match(/^(?:https?:\/\/)?(?:www\.)?npmjs\.(?:com|org)(\/.+)$/) + if (!match || !match[1]) return + + const route = router.resolve(match[1]) + if (route) { + event.preventDefault() + router.push(route) + } +}