@@ -97,43 +97,68 @@ async function doActivate(context: vscode.ExtensionContext, createLc: CreateLang
9797 hybridModeStatus . severity = vscode . LanguageStatusSeverity . Warning ;
9898 }
9999
100+ const item = vscode . languages . createLanguageStatusItem ( 'vue-insider' , 'vue' ) ;
100101 if ( ! context . extension . packageJSON . version . includes ( '-insider' ) ) {
101- const createLanguageStatus = ( ) => {
102- const item = vscode . languages . createLanguageStatusItem ( 'vue-upgrade' , 'vue' ) ;
103- item . text = '✨ Upgrade Vue - Official' ;
104- item . severity = vscode . LanguageStatusSeverity . Warning ;
105- item . command = {
106- title : 'Open Link' ,
107- command : 'vscode.open' ,
108- arguments : [ 'https://github.com/vuejs/language-tools/discussions/4127' ] ,
109- } ;
102+ item . text = '✨ Get Vue - Official Insiders' ;
103+ item . severity = vscode . LanguageStatusSeverity . Warning ;
104+ item . command = {
105+ title : 'More Info' ,
106+ command : 'vscode.open' ,
107+ arguments : [ 'https://github.com/vuejs/language-tools/wiki/Get-Insiders' ] ,
110108 } ;
111- const yyyymmdd = new Date ( ) . toISOString ( ) . split ( 'T' ) [ 0 ] . replace ( / - / g, '' ) ;
112- if ( context . globalState . get ( 'vue-upgrade-promote-date' ) !== yyyymmdd ) {
113- context . globalState . update ( 'vue-upgrade-promote-date' , yyyymmdd ) ;
114- let s = 10 ;
115- const upgradeStatus = vscode . window . createStatusBarItem ( vscode . StatusBarAlignment . Right , 10000 ) ;
116- const interval = setInterval ( ( ) => {
117- s -- ;
118- upgradeStatus . text = `✨ Upgrade Vue - Official (${ s } )` ;
119- if ( s <= 0 ) {
120- upgradeStatus . dispose ( ) ;
121- clearInterval ( interval ) ;
122- createLanguageStatus ( ) ;
109+ }
110+ else {
111+ const versionsUrl = 'https://cdn.jsdelivr.net/gh/vuejs/language-tools/insiders.json' ;
112+ item . text = '🚀 Vue - Official Insiders' ;
113+ item . detail = 'Installed' ;
114+ item . busy = true ;
115+ const currentVersion = context . extension . packageJSON . version ;
116+ fetch ( versionsUrl )
117+ . then ( res => res . json ( ) )
118+ . then ( ( { versions } : { versions : { version : string ; date : string ; } [ ] ; } ) => {
119+ item . command = {
120+ title : 'Select Version' ,
121+ command : 'vue-insiders.selectVersion' ,
122+ arguments : [ { versions } ] ,
123+ } ;
124+ if ( versions . length && versions [ 0 ] . version !== currentVersion ) {
125+ item . command . title = 'Update' ;
126+ item . detail = 'New version available' ;
127+ item . severity = vscode . LanguageStatusSeverity . Warning ;
123128 }
124- } , 1000 ) ;
125- upgradeStatus . text = `✨ Upgrade Vue - Official (${ s } )` ;
126- upgradeStatus . color = '#ebb549' ;
127- upgradeStatus . command = {
128- title : 'Open Link' ,
129- command : 'vscode.open' ,
130- arguments : [ 'https://github.com/vuejs/language-tools/discussions/4127' ] ,
131- } ;
132- upgradeStatus . show ( ) ;
133- }
134- else {
135- createLanguageStatus ( ) ;
136- }
129+ } )
130+ . catch ( ( ) => {
131+ item . detail = 'Failed to fetch versions' ;
132+ } )
133+ . finally ( ( ) => {
134+ item . busy = false ;
135+ } ) ;
136+ vscode . commands . registerCommand ( 'vue-insiders.selectVersion' , async ( { versions } : { versions : { version : string ; date : string ; } [ ] ; } ) => {
137+ const items = versions . map < vscode . QuickPickItem > ( version => ( {
138+ label : version . version ,
139+ description : version . date + ( version . version === currentVersion ? ' (current)' : '' ) ,
140+ } ) ) ;
141+ if ( ! items . some ( item => item . description ?. endsWith ( '(current)' ) ) ) {
142+ items . push ( {
143+ label : '' ,
144+ kind : vscode . QuickPickItemKind . Separator ,
145+ } , {
146+ label : currentVersion ,
147+ description : '(current)' ,
148+ } ) ;
149+ }
150+ const selected = await vscode . window . showQuickPick (
151+ items ,
152+ {
153+ canPickMany : false ,
154+ placeHolder : 'Select a version' ,
155+ } ) ;
156+ if ( ! selected || selected . label === currentVersion ) {
157+ return ;
158+ }
159+ const updateUrl = `https://github.com/volarjs/insiders/releases/tag/v${ selected . label } ` ;
160+ vscode . env . openExternal ( vscode . Uri . parse ( updateUrl ) ) ;
161+ } ) ;
137162 }
138163
139164 async function requestReloadVscode ( msg : string ) {
0 commit comments