11import type { Extractor } from '#types/extractor'
22import type { HoverProvider , Position , TextDocument } from 'vscode'
3+ import { getPackageInfo } from '#utils/npm'
4+ import { extractVersion } from '#utils/version'
35import { Hover , MarkdownString } from 'vscode'
46
57export class NpmxHoverProvider < T extends Extractor > implements HoverProvider {
@@ -9,7 +11,7 @@ export class NpmxHoverProvider<T extends Extractor> implements HoverProvider {
911 this . extractor = extractor
1012 }
1113
12- provideHover ( document : TextDocument , position : Position ) {
14+ async provideHover ( document : TextDocument , position : Position ) {
1315 const root = this . extractor . parse ( document )
1416 if ( ! root )
1517 return
@@ -21,9 +23,16 @@ export class NpmxHoverProvider<T extends Extractor> implements HoverProvider {
2123
2224 const { name, version } = dep
2325 const coercedVersion = extractVersion ( version )
24- const md = new MarkdownString ( '' )
26+ const md = new MarkdownString ( '' , true )
2527 md . isTrusted = true
2628
29+ const pkg = await getPackageInfo ( name )
30+ const currentVersion = pkg . versions [ coercedVersion ]
31+ if ( currentVersion ) {
32+ if ( currentVersion . hasProvenance )
33+ md . appendMarkdown ( `[$(verified) Verified provenance](https://www.npmjs.com/package/${ name } /v/${ currentVersion . version } #provenance)\n\n` )
34+ }
35+
2736 const footer = [
2837 `**[View on npmx](https://npmx.dev/package/${ name } )**` ,
2938 `**[View docs on npmx](https://npmx.dev/docs/${ name } /v/${ coercedVersion } )**` ,
0 commit comments