diff --git a/src/providers/hover/npmx.ts b/src/providers/hover/npmx.ts index afd32d2..da07fe0 100644 --- a/src/providers/hover/npmx.ts +++ b/src/providers/hover/npmx.ts @@ -2,7 +2,7 @@ import type { Extractor } from '#types/extractor' import type { HoverProvider, Position, TextDocument } from 'vscode' import { SPACER } from '#constants' import { getPackageInfo } from '#utils/api/package' -import { npmPacakgeUrl, npmxDocsUrl, npmxPackageUrl } from '#utils/links' +import { jsrPackageUrl, npmPackageUrl, npmxDocsUrl, npmxPackageUrl } from '#utils/links' import { isSupportedProtocol, parseVersion } from '#utils/package' import { Hover, MarkdownString } from 'vscode' @@ -24,24 +24,45 @@ export class NpmxHoverProvider implements HoverProvider { return const parsed = parseVersion(dep.version) - if (!parsed || !isSupportedProtocol(parsed.protocol)) + if (!parsed) return const { name } = dep + const { protocol, semver } = parsed - const pkg = await getPackageInfo(name) - if (!pkg) + if (protocol === 'jsr') { + const jsrMd = new MarkdownString('', true) + const jsrUrl = jsrPackageUrl(name, semver) + + jsrMd.isTrusted = true + + const jsrPackageLink = `[$(package)${SPACER}View on jsr.io](${jsrUrl})` + const npmxWarning = '$(warning) Not on npmx' + jsrMd.appendMarkdown(`${jsrPackageLink} | ${npmxWarning}`) + + return new Hover(jsrMd) + } + + if (!isSupportedProtocol(protocol)) return + const pkg = await getPackageInfo(name) + if (!pkg) { + const errorMd = new MarkdownString('', true) + + errorMd.isTrusted = true + errorMd.appendMarkdown('$(warning) Unable to fetch package information') + + return new Hover(errorMd) + } + const md = new MarkdownString('', true) md.isTrusted = true - const { semver } = parsed - const currentVersion = pkg.versionsMeta[semver] if (currentVersion) { if (currentVersion.provenance) - md.appendMarkdown(`[$(verified)${SPACER}Verified provenance](${npmPacakgeUrl(name, semver)}#provenance)\n\n`) + md.appendMarkdown(`[$(verified)${SPACER}Verified provenance](${npmPackageUrl(name, semver)}#provenance)\n\n`) } const packageLink = `[$(package)${SPACER}View on npmx](${npmxPackageUrl(name)})` diff --git a/src/utils/links.ts b/src/utils/links.ts index 3a411fb..435d844 100644 --- a/src/utils/links.ts +++ b/src/utils/links.ts @@ -1,6 +1,6 @@ import { NPMJS_COM, NPMX_DEV } from '#constants' -export function npmPacakgeUrl(name: string, version?: string): string { +export function npmPackageUrl(name: string, version?: string): string { return version ? `${NPMJS_COM}/package/${name}/v/${version}` : `${NPMJS_COM}/package/${name}` @@ -15,3 +15,7 @@ export function npmxPackageUrl(name: string, version?: string): string { export function npmxDocsUrl(name: string, version: string): string { return `${NPMX_DEV}/docs/${name}/v/${version}` } + +export function jsrPackageUrl(name: string, version: string): string { + return `https://jsr.io/${name}@${version}` +}