Skip to content

Commit 82ec3b3

Browse files
committed
Version class refactoring
1 parent d058e13 commit 82ec3b3

File tree

6 files changed

+55
-47
lines changed

6 files changed

+55
-47
lines changed

src/common/Version.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/main.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as vscode from 'vscode';
22
import * as child from 'child_process';
33
import * as ns from './services/NsCliService';
4-
import {ExtensionVersionInfo} from './services/ExtensionVersionInfo';
4+
import {ExtensionVersionService} from './services/ExtensionVersionService';
55
import {AnalyticsService} from './services/analytics/AnalyticsService';
66
import {ExtensionServer} from './services/ipc/ExtensionServer';
77

@@ -13,20 +13,20 @@ function performVersionsCheck(context: vscode.ExtensionContext) {
1313
}
1414
else {
1515
// Checks whether a new version of the extension is available
16-
let extensionVersionPromise: Promise<ExtensionVersionInfo> = null;
16+
let extensionVersionPromise: Promise<ExtensionVersionService> = null;
1717

1818
// Check the cache for extension version information
1919
let extensionVersion: any = context.globalState.get<any>('ExtensionVersionInfo');
2020
if (extensionVersion) {
21-
let extensionVersionInfo = new ExtensionVersionInfo(extensionVersion.latestVersionMetadata, extensionVersion.timestamp);
21+
let extensionVersionInfo = new ExtensionVersionService(extensionVersion.latestVersionMetadata, extensionVersion.timestamp);
2222
if (extensionVersionInfo.getTimestamp() > Date.now() - 24 * 60 * 60 * 1000 /* Cache the version for a day */) {
2323
extensionVersionPromise = Promise.resolve(extensionVersionInfo);
2424
}
2525
}
2626

2727
if (!extensionVersionPromise) {
2828
// Takes the slow path and checks for newer version in the VS Code Marketplace
29-
extensionVersionPromise = ExtensionVersionInfo.createFromMarketplace();
29+
extensionVersionPromise = ExtensionVersionService.createFromMarketplace();
3030
}
3131
extensionVersionPromise.then(extensionInfo => {
3232
if (extensionInfo) {

src/services/NsCliService.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import * as fs from 'fs';
33
import {EventEmitter} from 'events';
44
import * as path from 'path';
55
import * as https from 'https';
6-
import {Version} from '../common/Version';
6+
import {Version} from './version';
77
import {Logger, Handlers, Tags} from '../services/Logger';
8-
import {ExtensionVersionInfo} from './ExtensionVersionInfo';
8+
import {ExtensionVersionService} from './ExtensionVersionService';
99
import {DebugProtocol} from 'vscode-debugprotocol';
1010

1111
export enum CliVersionState {
@@ -15,11 +15,11 @@ export enum CliVersionState {
1515
}
1616

1717
export class CliVersionInfo {
18-
private static installedCliVersion: number[] = null;
18+
private static installedCliVersion: Version = null;
1919

2020
private _state: CliVersionState;
2121

22-
public static getInstalledCliVersion(): number[] {
22+
public static getInstalledCliVersion(): Version {
2323
if (this.installedCliVersion === null) {
2424
// get the currently installed CLI version
2525
let getVersionCommand: string = new CommandBuilder().appendParam('--version').buildAsString(); // tns --version
@@ -35,13 +35,13 @@ export class CliVersionInfo {
3535
}
3636

3737
constructor() {
38-
let installedCliVersion: number[] = CliVersionInfo.getInstalledCliVersion();
38+
let installedCliVersion: Version = CliVersionInfo.getInstalledCliVersion();
3939
if (installedCliVersion === null) {
4040
this._state = CliVersionState.NotExisting;
4141
}
4242
else {
43-
let minSupportedCliVersion = ExtensionVersionInfo.getMinSupportedNativeScriptVersion();
44-
this._state = Version.compareBySubminor(installedCliVersion, minSupportedCliVersion) < 0 ? CliVersionState.OlderThanSupported : CliVersionState.Compatible;
43+
let minSupportedCliVersion = ExtensionVersionService.getMinSupportedNativeScriptVersion();
44+
this._state = installedCliVersion.compareBySubminorTo(minSupportedCliVersion) < 0 ? CliVersionState.OlderThanSupported : CliVersionState.Compatible;
4545
}
4646
}
4747

@@ -58,7 +58,7 @@ export class CliVersionInfo {
5858
case CliVersionState.NotExisting:
5959
return `NativeScript CLI not found, please run 'npm -g install nativescript' to install it.`;
6060
case CliVersionState.OlderThanSupported:
61-
return `The existing NativeScript extension is compatible with NativeScript CLI v${Version.stringify(ExtensionVersionInfo.getMinSupportedNativeScriptVersion())} or greater. The currently installed NativeScript CLI is v${Version.stringify(CliVersionInfo.getInstalledCliVersion())}. You can update the NativeScript CLI by executing 'npm install -g nativescript'.`;
61+
return `The existing NativeScript extension is compatible with NativeScript CLI v${ExtensionVersionService.getMinSupportedNativeScriptVersion()} or greater. The currently installed NativeScript CLI is v${CliVersionInfo.getInstalledCliVersion()}. You can update the NativeScript CLI by executing 'npm install -g nativescript'.`;
6262
default:
6363
return null;
6464
}

src/services/analytics/AnalyticsService.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import * as os from 'os';
22
import * as vscode from 'vscode';
3-
import { Version } from '../../common/Version';
3+
import { Version } from '../version';
44
import { GUAService } from './GUAService';
55
import { TelerikAnalyticsService } from './TelerikAnalyticsService';
66
import { AnalyticsBaseInfo, OperatingSystem } from './AnalyticsBaseInfo';
7-
import { ExtensionVersionInfo } from '../ExtensionVersionInfo';
7+
import { ExtensionVersionService } from '../ExtensionVersionService';
88
import * as ns from '../NsCliService';
99

1010
export class AnalyticsService {
@@ -48,8 +48,8 @@ export class AnalyticsService {
4848
};
4949

5050
this._baseInfo = {
51-
cliVersion: Version.stringify(ns.CliVersionInfo.getInstalledCliVersion()),
52-
extensionVersion: Version.stringify(ExtensionVersionInfo.getExtensionVersion()),
51+
cliVersion: ns.CliVersionInfo.getInstalledCliVersion().toString(),
52+
extensionVersion: ExtensionVersionService.getExtensionVersion().toString(),
5353
operatingSystem: operatingSystem,
5454
userId: AnalyticsService.generateMachineId()
5555
};

src/services/ExtensionVersionInfo.ts renamed to src/services/extensionVersionService.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import {Version} from '../common/Version';
21
import * as https from 'https';
2+
import {Version} from './version';
33

4-
export class ExtensionVersionInfo {
5-
private static extensionVersion: number[] = null;
6-
private static minNativescriptCliVersion: number[] = null;
4+
export class ExtensionVersionService {
5+
private static extensionVersion: Version = null;
6+
private static minNativescriptCliVersion: Version = null;
77
private static extensionId: string = '8d837914-d8fa-45b5-965d-f76ebd6dbf5c';
88
private static marketplaceQueryResult: Promise<any> = null;
99

@@ -16,14 +16,14 @@ export class ExtensionVersionInfo {
1616
this.minNativescriptCliVersion = Version.parse(packageJson.minNativescriptCliVersion);
1717
}
1818

19-
public static getExtensionVersion(): number[] {
19+
public static getExtensionVersion(): Version {
2020
if (this.extensionVersion === null) {
2121
this.initVersionsFromPackageJson();
2222
}
2323
return this.extensionVersion;
2424
}
2525

26-
public static getMinSupportedNativeScriptVersion(): number[] {
26+
public static getMinSupportedNativeScriptVersion(): Version {
2727
if (this.minNativescriptCliVersion === null) {
2828
this.initVersionsFromPackageJson();
2929
}
@@ -33,7 +33,7 @@ export class ExtensionVersionInfo {
3333
public static getMarketplaceExtensionData(): Promise<any> {
3434
if (this.marketplaceQueryResult == null) {
3535
this.marketplaceQueryResult = new Promise<any>((resolve, reject) => {
36-
let postData: string = `{ filters: [{ criteria: [{ filterType: 4, value: "${ExtensionVersionInfo.extensionId}" }] }], flags: 262 }`;
36+
let postData: string = `{ filters: [{ criteria: [{ filterType: 4, value: "${ExtensionVersionService.extensionId}" }] }], flags: 262 }`;
3737

3838
let request = https.request({
3939
hostname: 'marketplace.visualstudio.com',
@@ -69,16 +69,16 @@ export class ExtensionVersionInfo {
6969
return this.marketplaceQueryResult;
7070
}
7171

72-
public static createFromMarketplace(): Promise<ExtensionVersionInfo> {
72+
public static createFromMarketplace(): Promise<ExtensionVersionService> {
7373
return this.getMarketplaceExtensionData()
7474
.then(marketplaceData => {
7575
let latestVersion = null;
7676
try {
77-
if (marketplaceData.results[0].extensions[0].extensionId == ExtensionVersionInfo.extensionId) {
77+
if (marketplaceData.results[0].extensions[0].extensionId == ExtensionVersionService.extensionId) {
7878
latestVersion = marketplaceData.results[0].extensions[0].versions[0];
7979
}
8080
} catch (e) { }
81-
return new ExtensionVersionInfo(latestVersion);
81+
return new ExtensionVersionService(latestVersion);
8282
});
8383
}
8484

@@ -95,7 +95,7 @@ export class ExtensionVersionInfo {
9595
if (!this.getLatestVersionMeta()) {
9696
return true;
9797
}
98-
return Version.compareBySubminor(ExtensionVersionInfo.getExtensionVersion(), Version.parse(this.getLatestVersionMeta().version)) >= 0;
98+
return ExtensionVersionService.getExtensionVersion().compareBySubminorTo(Version.parse(this.getLatestVersionMeta().version)) >= 0;
9999
}
100100

101101
public getTimestamp(): number {

src/services/version.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
export class Version {
2+
private _version: number[];
3+
4+
public static parse(versionStr: string): Version {
5+
if (versionStr === null) {
6+
return null;
7+
}
8+
let version: number[] = versionStr.split('.').map<number>((str, index, array) => parseInt(str));
9+
for(let i = version.length; i < 3; i++) {
10+
version.push(0);
11+
}
12+
return new Version(version);
13+
}
14+
15+
constructor(version: number[]) {
16+
this._version = version;
17+
}
18+
19+
public toString(): string {
20+
return `${this._version[0]}.${this._version[1]}.${this._version[2]}`;
21+
}
22+
23+
public compareBySubminorTo(other: Version): number {
24+
let v1 = this._version;
25+
let v2 = other._version;
26+
return (v1[0] - v2[0] != 0) ? (v1[0] - v2[0]) : (v1[1] - v2[1] != 0) ? v1[1] - v2[1] : v1[2] - v2[2];
27+
}
28+
}

0 commit comments

Comments
 (0)