@@ -2,6 +2,7 @@ const fs = require('fs')
22const path = require ( 'path' )
33const chalk = require ( 'chalk' )
44const execa = require ( 'execa' )
5+ const semver = require ( 'semver' )
56const {
67 log,
78 done,
@@ -32,11 +33,11 @@ module.exports = class Upgrader {
3233 this . pm = new PackageManager ( { context } )
3334 }
3435
35- async upgradeAll ( ) {
36+ async upgradeAll ( includeNext ) {
3637 // TODO: should confirm for major version upgrades
3738 // for patch & minor versions, upgrade directly
3839 // for major versions, prompt before upgrading
39- const upgradable = await this . getUpgradable ( )
40+ const upgradable = await this . getUpgradable ( includeNext )
4041
4142 if ( ! upgradable . length ) {
4243 done ( 'Seems all plugins are up to date. Good work!' )
@@ -75,6 +76,10 @@ module.exports = class Upgrader {
7576 }
7677
7778 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+ }
7883 stopSpinner ( )
7984 }
8085
@@ -177,7 +182,7 @@ module.exports = class Upgrader {
177182 migrator . printExitLogs ( )
178183 }
179184
180- async getUpgradable ( ) {
185+ async getUpgradable ( includeNext ) {
181186 const upgradable = [ ]
182187
183188 // get current deps
@@ -191,9 +196,13 @@ module.exports = class Upgrader {
191196 const installed = await this . pm . getInstalledVersion ( name )
192197 const wanted = await this . pm . getRemoteVersion ( name , range )
193198
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+ }
195204
196- if ( installed !== latest ) {
205+ if ( semver . lt ( installed , latest ) ) {
197206 // always list @vue /cli-service as the first one
198207 // as it's depended by all other plugins
199208 if ( name === '@vue/cli-service' ) {
@@ -208,9 +217,9 @@ module.exports = class Upgrader {
208217 return upgradable
209218 }
210219
211- async checkForUpdates ( ) {
220+ async checkForUpdates ( includeNext ) {
212221 logWithSpinner ( 'Gathering package information...' )
213- const upgradable = await this . getUpgradable ( )
222+ const upgradable = await this . getUpgradable ( includeNext )
214223 stopSpinner ( )
215224
216225 if ( ! upgradable . length ) {
@@ -225,7 +234,7 @@ module.exports = class Upgrader {
225234 if ( ! Number . isFinite ( namePad ) ) {
226235 namePad = 30
227236 }
228- const pads = [ namePad , 12 , 12 , 12 , 0 ]
237+ const pads = [ namePad , 16 , 16 , 16 , 0 ]
229238 console . log (
230239 ' ' +
231240 [ 'Name' , 'Installed' , 'Wanted' , 'Latest' , 'Command to upgrade' ] . map (
0 commit comments