1
1
import { exec } from 'node:child_process' ;
2
- import { workspace , commands , window , type ExtensionContext , QuickPickItemKind , env , Uri } from 'vscode' ;
2
+ import { commands , env , type ExtensionContext , QuickPickItemKind , Uri , window , workspace } from 'vscode' ;
3
3
4
4
import { detectPackageManager } from './detectPackageManager' ;
5
5
import { DirectoryEntry } from './types' ;
6
6
import {
7
+ deduplicateSearchTokens ,
7
8
ENTRY_OPTION ,
8
9
fetchData ,
9
10
getCommandToRun ,
11
+ getCompatibilityList ,
12
+ getPlatformsList ,
10
13
KEYWORD_REGEX ,
11
14
numberFormatter ,
15
+ openListWithSearch ,
12
16
STRINGS ,
13
17
VALID_KEYWORDS_MAP ,
14
18
ValidKeyword
@@ -77,6 +81,9 @@ export async function activate(context: ExtensionContext) {
77
81
]
78
82
: [ ] ;
79
83
84
+ const platformsList = getPlatformsList ( selectedEntry ) ;
85
+ const compatibilityList = getCompatibilityList ( selectedEntry ) ;
86
+
80
87
const possibleActions = [
81
88
workspacePath && {
82
89
label : ENTRY_OPTION . INSTALL ,
@@ -106,6 +113,15 @@ export async function activate(context: ExtensionContext) {
106
113
description : selectedEntry . github . license . name
107
114
} ,
108
115
{ label : ENTRY_OPTION . VIEW_BUNDLEPHOBIA } ,
116
+ { label : 'details' , kind : QuickPickItemKind . Separator } ,
117
+ {
118
+ label : ENTRY_OPTION . PLATFORMS ,
119
+ description : platformsList . join ( ', ' )
120
+ } ,
121
+ compatibilityList . length > 0 && {
122
+ label : ENTRY_OPTION . COMPATIBILITY ,
123
+ description : compatibilityList . join ( ', ' )
124
+ } ,
109
125
...examplesActions ,
110
126
{ label : 'copy data' , kind : QuickPickItemKind . Separator } ,
111
127
{ label : ENTRY_OPTION . COPY_NAME } ,
@@ -141,7 +157,9 @@ export async function activate(context: ExtensionContext) {
141
157
break ;
142
158
}
143
159
case ENTRY_OPTION . VISIT_HOMEPAGE : {
144
- env . openExternal ( Uri . parse ( selectedEntry . github . urls . homepage ! ) ) ;
160
+ if ( selectedEntry . github . urls . homepage ) {
161
+ env . openExternal ( Uri . parse ( selectedEntry . github . urls . homepage ) ) ;
162
+ }
145
163
break ;
146
164
}
147
165
case ENTRY_OPTION . VISIT_REPO : {
@@ -152,12 +170,22 @@ export async function activate(context: ExtensionContext) {
152
170
env . openExternal ( Uri . parse ( `https://www.npmjs.com/package/${ selectedEntry . npmPkg } ` ) ) ;
153
171
break ;
154
172
}
173
+ case ENTRY_OPTION . VIEW_LICENSE : {
174
+ env . openExternal ( Uri . parse ( selectedEntry . github . license . url ) ) ;
175
+ break ;
176
+ }
155
177
case ENTRY_OPTION . VIEW_BUNDLEPHOBIA : {
156
178
env . openExternal ( Uri . parse ( `https://bundlephobia.com/package/${ selectedEntry . npmPkg } ` ) ) ;
157
179
break ;
158
180
}
159
- case ENTRY_OPTION . VIEW_LICENSE : {
160
- env . openExternal ( Uri . parse ( selectedEntry . github . license . url ) ) ;
181
+ case ENTRY_OPTION . PLATFORMS : {
182
+ const searchValue = deduplicateSearchTokens ( packagesPick . value , platformsList ) ;
183
+ await openListWithSearch ( packagesPick , searchValue ) ;
184
+ break ;
185
+ }
186
+ case ENTRY_OPTION . COMPATIBILITY : {
187
+ const searchValue = deduplicateSearchTokens ( packagesPick . value , compatibilityList ) ;
188
+ await openListWithSearch ( packagesPick , searchValue ) ;
161
189
break ;
162
190
}
163
191
case ENTRY_OPTION . COPY_NAME : {
@@ -176,14 +204,7 @@ export async function activate(context: ExtensionContext) {
176
204
break ;
177
205
}
178
206
case ENTRY_OPTION . GO_BACK : {
179
- packagesPick . placeholder = STRINGS . PLACEHOLDER_BUSY ;
180
- packagesPick . busy = true ;
181
-
182
- packagesPick . show ( ) ;
183
- packagesPick . items = await fetchData ( packagesPick . value ) ;
184
-
185
- packagesPick . placeholder = STRINGS . PLACEHOLDER ;
186
- packagesPick . busy = false ;
207
+ await openListWithSearch ( packagesPick ) ;
187
208
break ;
188
209
}
189
210
}
0 commit comments