diff --git a/lib/common/dispatchers.ts b/lib/common/dispatchers.ts index ac791a3224..cc877b7afd 100644 --- a/lib/common/dispatchers.ts +++ b/lib/common/dispatchers.ts @@ -6,14 +6,14 @@ import { ICommandDispatcher, ICancellationService, ISysInfo, - IFileSystem, IFutureDispatcher, IQueue, IErrors, } from "./declarations"; -import { IOptions } from "../declarations"; +import { IOptions, IPackageManager, IVersionsService } from "../declarations"; import { IInjector } from "./definitions/yok"; import { injector } from "./yok"; +import { PackageManagers } from "../constants"; export class CommandDispatcher implements ICommandDispatcher { constructor( @@ -25,7 +25,9 @@ export class CommandDispatcher implements ICommandDispatcher { private $staticConfig: Config.IStaticConfig, private $sysInfo: ISysInfo, private $options: IOptions, - private $fs: IFileSystem + private $versionsService: IVersionsService, + private $packageManager: IPackageManager, + private $terminalSpinnerService: ITerminalSpinnerService ) {} public async dispatchCommand(): Promise { @@ -99,14 +101,39 @@ export class CommandDispatcher implements ICommandDispatcher { return ""; } - private printVersion(): void { - let version = this.$staticConfig.version; - - const json = this.$fs.readJson(this.$staticConfig.pathToPackageJson); - if (json && json.buildVersion) { - version = `${version}-${json.buildVersion}`; + private async printVersion(): Promise { + this.$logger.info(this.$staticConfig.version); + + const spinner = this.$terminalSpinnerService.createSpinner(); + spinner.start("Checking for updates..."); + const nativescriptCliVersion = await this.$versionsService.getNativescriptCliVersion(); + spinner.stop(); + + const packageManagerName = await this.$packageManager.getPackageManagerName(); + let updateCommand = ""; + + switch (packageManagerName) { + case PackageManagers.npm: + updateCommand = "npm i -g nativescript"; + break; + case PackageManagers.yarn: + updateCommand = "yarn global add nativescript"; + break; + case PackageManagers.pnpm: + updateCommand = "pnpm i -g nativescript"; + break; + } + if ( + nativescriptCliVersion.currentVersion === + nativescriptCliVersion.latestVersion + ) { + // up-to-date + spinner.succeed("Up to date."); + } else { + spinner.info( + `New version of NativeScript CLI is available (${nativescriptCliVersion.latestVersion}), run '${updateCommand}' to update.` + ); } - this.$logger.info(version); } } injector.register("commandDispatcher", CommandDispatcher); diff --git a/lib/options.ts b/lib/options.ts index 8f4ff82646..eb65ff4122 100644 --- a/lib/options.ts +++ b/lib/options.ts @@ -355,7 +355,7 @@ export class Options { opts[this.getDashedOptionName(key)] = value; }); - const parsed = yargs(process.argv.slice(2)).help(false); + const parsed = yargs(process.argv.slice(2)).version(false).help(false); this.initialArgv = parsed.argv; this.argv = parsed.options(opts).argv;