From b0c3f34d610a7daba15bb26df6f58343a559abc3 Mon Sep 17 00:00:00 2001 From: Janos Hrubos <33330538+janoshrubos@users.noreply.github.com> Date: Thu, 7 Jan 2021 12:59:32 +0100 Subject: [PATCH 1/2] feat: version command check update --- lib/common/dispatchers.ts | 38 ++++++++++++++++++++++++++++---------- lib/options.ts | 2 +- 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/lib/common/dispatchers.ts b/lib/common/dispatchers.ts index ac791a3224..310af5ade8 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,8 @@ export class CommandDispatcher implements ICommandDispatcher { private $staticConfig: Config.IStaticConfig, private $sysInfo: ISysInfo, private $options: IOptions, - private $fs: IFileSystem + private $versionsService: IVersionsService, + private $packageManager: IPackageManager ) {} public async dispatchCommand(): Promise { @@ -99,14 +100,31 @@ 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 nativescriptCliVersion = await this.$versionsService.getNativescriptCliVersion(); + 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 + ) { + this.$logger.info( + `Newer version of NativeScript 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; From c73f26dacdc0ff226dce2ae9a4118804d896fc8c Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Tue, 26 Jan 2021 19:14:46 +0100 Subject: [PATCH 2/2] feat: show a spinner while fetching latest version --- lib/common/dispatchers.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/common/dispatchers.ts b/lib/common/dispatchers.ts index 310af5ade8..cc877b7afd 100644 --- a/lib/common/dispatchers.ts +++ b/lib/common/dispatchers.ts @@ -26,7 +26,8 @@ export class CommandDispatcher implements ICommandDispatcher { private $sysInfo: ISysInfo, private $options: IOptions, private $versionsService: IVersionsService, - private $packageManager: IPackageManager + private $packageManager: IPackageManager, + private $terminalSpinnerService: ITerminalSpinnerService ) {} public async dispatchCommand(): Promise { @@ -102,7 +103,12 @@ export class CommandDispatcher implements ICommandDispatcher { 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 = ""; @@ -118,11 +124,14 @@ export class CommandDispatcher implements ICommandDispatcher { break; } if ( - nativescriptCliVersion.currentVersion !== + nativescriptCliVersion.currentVersion === nativescriptCliVersion.latestVersion ) { - this.$logger.info( - `Newer version of NativeScript is available (${nativescriptCliVersion.latestVersion}), run '${updateCommand}' to update.` + // up-to-date + spinner.succeed("Up to date."); + } else { + spinner.info( + `New version of NativeScript CLI is available (${nativescriptCliVersion.latestVersion}), run '${updateCommand}' to update.` ); } }