Skip to content

Commit 87e640c

Browse files
authored
Add version preference setting. Closes #71 (#72)
Closes #71
1 parent 0fb1a5b commit 87e640c

File tree

7 files changed

+60
-23
lines changed

7 files changed

+60
-23
lines changed

package.json

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,18 @@
2525
"language": "json",
2626
"path": "./dist/snippets.json"
2727
}
28-
]
28+
],
29+
"configuration": {
30+
"title": "Dev Proxy Toolkit",
31+
"properties": {
32+
"devproxytoolkit.versionPreference": {
33+
"type": "string",
34+
"enum": ["stable", "beta"],
35+
"default": "stable",
36+
"description": "Select the preferred version to be used when installed side by side."
37+
}
38+
}
39+
}
2940
},
3041
"preview": true,
3142
"pricing": "Free",
@@ -67,4 +78,4 @@
6778
"dependencies": {
6879
"json-to-ast": "^2.1.0"
6980
}
70-
}
81+
}

src/detect.ts

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1+
import * as vscode from 'vscode';
12
import { exec } from 'child_process';
23
import { DevProxyInstall } from './types';
34
import os from 'os';
5+
import { VersionExeName, VersionPreference } from './enums';
46

5-
export const getVersion = async () => {
7+
export const getVersion = async (devProxyExe: string) => {
68
try {
7-
const version = await executeCommand(`devproxy --version`);
9+
const version = await executeCommand(`${devProxyExe} --version`);
810
return version.trim();
911
} catch (error) {
1012
return "";
@@ -25,14 +27,15 @@ export const executeCommand = async (cmd: string): Promise<string> => {
2527
});
2628
};
2729

28-
export const detectDevProxyInstall = async (): Promise<DevProxyInstall> => {
29-
const version = await getVersion();
30+
export const detectDevProxyInstall = async (versionPreference: VersionPreference): Promise<DevProxyInstall> => {
31+
const devProxyExe = getDevProxyExe(versionPreference);
32+
const version = await getVersion(devProxyExe);
3033
const isInstalled = version !== '';
3134
const isBeta = version.includes('beta');
3235
const platform = os.platform();
33-
const outdatedVersion = await getOutdatedVersion();
36+
const outdatedVersion = await getOutdatedVersion(devProxyExe);
3437
const isOutdated = isInstalled && outdatedVersion !== '';
35-
const isRunning = await isDevProxyRunning();
38+
const isRunning = await isDevProxyRunning(devProxyExe);
3639

3740
return {
3841
version,
@@ -45,25 +48,31 @@ export const detectDevProxyInstall = async (): Promise<DevProxyInstall> => {
4548
};
4649
};
4750

48-
export const getOutdatedVersion = async (): Promise<string> => {
51+
export const getOutdatedVersion = async (devProxyExe: string): Promise<string> => {
4952
try {
50-
const outdated = await executeCommand(`devproxy outdated --short`);
53+
const outdated = await executeCommand(`${devProxyExe} outdated --short`);
5154
return outdated ? outdated.trim() : '';
5255
} catch (error) {
5356
return "";
5457
}
5558
};
5659

57-
export const isDevProxyRunning = async (): Promise<boolean> => {
60+
export const isDevProxyRunning = async (devProxyExe: string): Promise<boolean> => {
5861
const platform = os.platform();
5962

6063
if (platform === 'win32') {
61-
const processId = await executeCommand('pwsh.exe -c "(Get-Process devproxy -ErrorAction SilentlyContinue).Id"');
64+
const processId = await executeCommand(`pwsh.exe -c "(Get-Process ${devProxyExe} -ErrorAction SilentlyContinue).Id"`);
6265
return processId.trim() !== '';
6366
};
6467
if (platform === 'darwin') {
65-
const processId = await executeCommand('$SHELL -c "ps -ef | grep devproxy | grep -v grep | awk \'{print $2}\'"');
68+
const processId = await executeCommand(`$SHELL -c "ps -ef | grep ${devProxyExe} | grep -v grep | awk \'{print $2}\'"`);
6669
return processId.trim() !== '';
6770
};
6871
return false;
72+
};
73+
74+
export const getDevProxyExe = (versionPreference: VersionPreference) => {
75+
return versionPreference === VersionPreference.Stable
76+
? VersionExeName.Stable
77+
: VersionExeName.Beta;
6978
};

src/enums.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export enum VersionPreference {
2+
Stable = 'stable',
3+
Beta = 'beta',
4+
}
5+
6+
export enum VersionExeName {
7+
Stable = 'devproxy',
8+
Beta = 'devproxy-beta',
9+
}

src/extension.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@ import { registerCodeLens } from './codelens';
66
import { createStatusBar, statusBarLoop, updateStatusBar } from './statusbar';
77
import { registerCodeActions } from './codeactions';
88
import { updateGlobalState } from './state';
9+
import { VersionPreference } from './enums';
910

1011
export const activate = async (context: vscode.ExtensionContext): Promise<vscode.ExtensionContext> => {
12+
const configuration = vscode.workspace.getConfiguration('devproxytoolkit');
13+
const versionPreference = configuration.get('versionPreference') as VersionPreference;
14+
1115
const statusBar = createStatusBar(context);
12-
await updateGlobalState(context);
16+
await updateGlobalState(context, versionPreference);
1317

1418
const collection = vscode.languages.createDiagnosticCollection('Dev Proxy');
1519

@@ -20,10 +24,10 @@ export const activate = async (context: vscode.ExtensionContext): Promise<vscode
2024

2125
const notification = handleStartNotification(context);
2226
processNotification(notification);
23-
27+
2428
updateStatusBar(context, statusBar);
2529

26-
setInterval(() => statusBarLoop(context, statusBar), 5000);
30+
setInterval(() => statusBarLoop(context, statusBar, versionPreference), 5000);
2731

2832
return context;
2933
};

src/state.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as vscode from 'vscode';
22
import { detectDevProxyInstall } from './detect';
3+
import { VersionPreference } from './enums';
34

4-
export const updateGlobalState = async (context: vscode.ExtensionContext) => {
5-
context.globalState.update('devProxyInstall', await detectDevProxyInstall());
5+
export const updateGlobalState = async (context: vscode.ExtensionContext, versionPreference: VersionPreference) => {
6+
context.globalState.update('devProxyInstall', await detectDevProxyInstall(versionPreference));
67
};

src/statusbar.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import * as vscode from 'vscode';
22
import { DevProxyInstall } from './types';
3-
import { isDevProxyRunning } from './detect';
3+
import { getDevProxyExe, isDevProxyRunning } from './detect';
4+
import { VersionPreference } from './enums';
45

56
export const createStatusBar = (context: vscode.ExtensionContext): vscode.StatusBarItem => {
67
const statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Right, 100);
@@ -44,9 +45,10 @@ export const handleStatusBarUpdate = (context: vscode.ExtensionContext, statusBa
4445
return statusBar;
4546
};
4647

47-
export const statusBarLoop = async (context: vscode.ExtensionContext, statusBar: vscode.StatusBarItem) => {
48-
const isRunning = await isDevProxyRunning();
48+
export const statusBarLoop = async (context: vscode.ExtensionContext, statusBar: vscode.StatusBarItem, versionPreference: VersionPreference) => {
49+
const devProxyExe = getDevProxyExe(versionPreference);
50+
const isRunning = await isDevProxyRunning(devProxyExe);
4951
const globalState = context.globalState.get<DevProxyInstall>('devProxyInstall');
5052
await context.globalState.update('devProxyInstall', { ...globalState, isRunning });
5153
updateStatusBar(context, statusBar);
52-
};
54+
};

src/test/extension.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import { handleStatusBarUpdate, statusBarLoop } from '../statusbar';
1515
import * as sinon from 'sinon';
1616
import * as detect from '../detect';
1717
import { DevProxyInstall } from '../types';
18+
import { VersionPreference } from '../enums';
1819

1920
export const testDevProxyInstall: DevProxyInstall = {
2021
isBeta: false,
@@ -507,7 +508,7 @@ suite('statusbar', () => {
507508
vscode.StatusBarAlignment.Right,
508509
100
509510
);
510-
await statusBarLoop(context, statusBar);
511+
await statusBarLoop(context, statusBar, VersionPreference.Stable);
511512

512513
const expected = '$(radio-tower) Dev Proxy 0.14.1';
513514
const actual = statusBar.text;

0 commit comments

Comments
 (0)