Skip to content

Commit 7857416

Browse files
nitodeco9romise
andauthored
feat: show warning on pkg fetch error (#28)
* feat: show warning on pkg fetch error * feat: show jsr links * cleanup --------- Co-authored-by: Vida Xie <vida_2020@163.com>
1 parent 329c2a0 commit 7857416

2 files changed

Lines changed: 33 additions & 8 deletions

File tree

src/providers/hover/npmx.ts

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import type { Extractor } from '#types/extractor'
22
import type { HoverProvider, Position, TextDocument } from 'vscode'
33
import { SPACER } from '#constants'
44
import { getPackageInfo } from '#utils/api/package'
5-
import { npmPacakgeUrl, npmxDocsUrl, npmxPackageUrl } from '#utils/links'
5+
import { jsrPackageUrl, npmPackageUrl, npmxDocsUrl, npmxPackageUrl } from '#utils/links'
66
import { isSupportedProtocol, parseVersion } from '#utils/package'
77
import { Hover, MarkdownString } from 'vscode'
88

@@ -24,24 +24,45 @@ export class NpmxHoverProvider<T extends Extractor> implements HoverProvider {
2424
return
2525

2626
const parsed = parseVersion(dep.version)
27-
if (!parsed || !isSupportedProtocol(parsed.protocol))
27+
if (!parsed)
2828
return
2929

3030
const { name } = dep
31+
const { protocol, semver } = parsed
3132

32-
const pkg = await getPackageInfo(name)
33-
if (!pkg)
33+
if (protocol === 'jsr') {
34+
const jsrMd = new MarkdownString('', true)
35+
const jsrUrl = jsrPackageUrl(name, semver)
36+
37+
jsrMd.isTrusted = true
38+
39+
const jsrPackageLink = `[$(package)${SPACER}View on jsr.io](${jsrUrl})`
40+
const npmxWarning = '$(warning) Not on npmx'
41+
jsrMd.appendMarkdown(`${jsrPackageLink} | ${npmxWarning}`)
42+
43+
return new Hover(jsrMd)
44+
}
45+
46+
if (!isSupportedProtocol(protocol))
3447
return
3548

49+
const pkg = await getPackageInfo(name)
50+
if (!pkg) {
51+
const errorMd = new MarkdownString('', true)
52+
53+
errorMd.isTrusted = true
54+
errorMd.appendMarkdown('$(warning) Unable to fetch package information')
55+
56+
return new Hover(errorMd)
57+
}
58+
3659
const md = new MarkdownString('', true)
3760
md.isTrusted = true
3861

39-
const { semver } = parsed
40-
4162
const currentVersion = pkg.versionsMeta[semver]
4263
if (currentVersion) {
4364
if (currentVersion.provenance)
44-
md.appendMarkdown(`[$(verified)${SPACER}Verified provenance](${npmPacakgeUrl(name, semver)}#provenance)\n\n`)
65+
md.appendMarkdown(`[$(verified)${SPACER}Verified provenance](${npmPackageUrl(name, semver)}#provenance)\n\n`)
4566
}
4667

4768
const packageLink = `[$(package)${SPACER}View on npmx](${npmxPackageUrl(name)})`

src/utils/links.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NPMJS_COM, NPMX_DEV } from '#constants'
22

3-
export function npmPacakgeUrl(name: string, version?: string): string {
3+
export function npmPackageUrl(name: string, version?: string): string {
44
return version
55
? `${NPMJS_COM}/package/${name}/v/${version}`
66
: `${NPMJS_COM}/package/${name}`
@@ -15,3 +15,7 @@ export function npmxPackageUrl(name: string, version?: string): string {
1515
export function npmxDocsUrl(name: string, version: string): string {
1616
return `${NPMX_DEV}/docs/${name}/v/${version}`
1717
}
18+
19+
export function jsrPackageUrl(name: string, version: string): string {
20+
return `https://jsr.io/${name}@${version}`
21+
}

0 commit comments

Comments
 (0)