@@ -2,6 +2,7 @@ const fs = require('fs')
2
2
const path = require ( 'path' )
3
3
const chalk = require ( 'chalk' )
4
4
const execa = require ( 'execa' )
5
+ const semver = require ( 'semver' )
5
6
const {
6
7
log,
7
8
done,
@@ -32,11 +33,11 @@ module.exports = class Upgrader {
32
33
this . pm = new PackageManager ( { context } )
33
34
}
34
35
35
- async upgradeAll ( ) {
36
+ async upgradeAll ( includeNext ) {
36
37
// TODO: should confirm for major version upgrades
37
38
// for patch & minor versions, upgrade directly
38
39
// for major versions, prompt before upgrading
39
- const upgradable = await this . getUpgradable ( )
40
+ const upgradable = await this . getUpgradable ( includeNext )
40
41
41
42
if ( ! upgradable . length ) {
42
43
done ( 'Seems all plugins are up to date. Good work!' )
@@ -75,6 +76,10 @@ module.exports = class Upgrader {
75
76
}
76
77
77
78
targetVersion = await this . pm . getRemoteVersion ( packageName , targetVersion )
79
+ if ( ! options . to && options . next ) {
80
+ const next = await this . pm . getRemoteVersion ( packageName , 'next' )
81
+ targetVersion = semver . gte ( targetVersion , next ) ? targetVersion : next
82
+ }
78
83
stopSpinner ( )
79
84
}
80
85
@@ -177,7 +182,7 @@ module.exports = class Upgrader {
177
182
migrator . printExitLogs ( )
178
183
}
179
184
180
- async getUpgradable ( ) {
185
+ async getUpgradable ( includeNext ) {
181
186
const upgradable = [ ]
182
187
183
188
// get current deps
@@ -191,9 +196,13 @@ module.exports = class Upgrader {
191
196
const installed = await this . pm . getInstalledVersion ( name )
192
197
const wanted = await this . pm . getRemoteVersion ( name , range )
193
198
194
- const latest = await this . pm . getRemoteVersion ( name )
199
+ let latest = await this . pm . getRemoteVersion ( name )
200
+ if ( includeNext ) {
201
+ const next = await this . pm . getRemoteVersion ( name , 'next' )
202
+ latest = semver . gte ( latest , next ) ? latest : next
203
+ }
195
204
196
- if ( installed !== latest ) {
205
+ if ( semver . lt ( installed , latest ) ) {
197
206
// always list @vue /cli-service as the first one
198
207
// as it's depended by all other plugins
199
208
if ( name === '@vue/cli-service' ) {
@@ -208,9 +217,9 @@ module.exports = class Upgrader {
208
217
return upgradable
209
218
}
210
219
211
- async checkForUpdates ( ) {
220
+ async checkForUpdates ( includeNext ) {
212
221
logWithSpinner ( 'Gathering package information...' )
213
- const upgradable = await this . getUpgradable ( )
222
+ const upgradable = await this . getUpgradable ( includeNext )
214
223
stopSpinner ( )
215
224
216
225
if ( ! upgradable . length ) {
@@ -225,7 +234,7 @@ module.exports = class Upgrader {
225
234
if ( ! Number . isFinite ( namePad ) ) {
226
235
namePad = 30
227
236
}
228
- const pads = [ namePad , 12 , 12 , 12 , 0 ]
237
+ const pads = [ namePad , 16 , 16 , 16 , 0 ]
229
238
console . log (
230
239
' ' +
231
240
[ 'Name' , 'Installed' , 'Wanted' , 'Latest' , 'Command to upgrade' ] . map (
0 commit comments