diff --git a/CHANGELOG.md b/CHANGELOG.md index 71a2504..20e080e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Snippets: All snippets that reference schemas updated to use `v1.0.0` schema - Commands: `dev-proxy-toolkit.config-new` now creates the configuration file in the `.devproxy` folder and creates the folder if it does not exist +- Install: Updated winget package identifiers ### Fixed: diff --git a/src/commands.ts b/src/commands.ts index 4d7a996..1f477fa 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -1,13 +1,16 @@ import * as vscode from 'vscode'; import { pluginDocs } from './constants'; -import { VersionPreference } from './enums'; -import { executeCommand, isConfigFile, openUpgradeDocumentation, upgradeDevProxyWithPackageManager, getASTNode, getRangeFromASTNode } from './helpers'; +import { + PackageManager, + VersionPreference, + } from './enums'; +import { executeCommand, getPackageIdentifier, isConfigFile, openUpgradeDocumentation, upgradeDevProxyWithPackageManager, getASTNode, getRangeFromASTNode } from './helpers'; import { isDevProxyRunning, getDevProxyExe } from './detect'; import parse from 'json-to-ast'; export const registerCommands = (context: vscode.ExtensionContext, configuration: vscode.WorkspaceConfiguration) => { const versionPreference = configuration.get('version') as VersionPreference; - const devProxyExe = getDevProxyExe(configuration.get('version') as VersionPreference); + const devProxyExe = getDevProxyExe(versionPreference); context.subscriptions.push( vscode.commands.registerCommand('dev-proxy-toolkit.install', async (platform: NodeJS.Platform) => { @@ -15,7 +18,7 @@ export const registerCommands = (context: vscode.ExtensionContext, configuration // we are on windows so we can use winget if (platform === 'win32') { - const id = versionPreference === VersionPreference.Stable ? 'Microsoft.DevProxy' : 'Microsoft.DevProxy.Beta'; + const id = getPackageIdentifier(versionPreference, PackageManager.Winget); // we first need to check if winget is installed, it is bundled with windows 11 but not windows 10 try { await executeCommand('winget --version'); @@ -38,7 +41,7 @@ export const registerCommands = (context: vscode.ExtensionContext, configuration // we are on macos so we can use brew if (platform === 'darwin') { - const id = versionPreference === VersionPreference.Stable ? 'dev-proxy' : 'dev-proxy-beta'; + const id = getPackageIdentifier(versionPreference, PackageManager.Homebrew); // check if brew is installed try { await executeCommand('brew --version'); @@ -187,7 +190,12 @@ export const registerCommands = (context: vscode.ExtensionContext, configuration // Handle Windows if (platform === 'win32') { - const packageId = versionPreference === VersionPreference.Stable ? 'Microsoft.DevProxy' : 'Microsoft.DevProxy.Beta'; + const packageId = getPackageIdentifier(versionPreference, PackageManager.Winget); + if (!packageId) { + openUpgradeDocumentation(); + return; + } + const upgradeCommand = `winget upgrade ${packageId} --silent`; const isBeta = versionPreference === VersionPreference.Beta; @@ -200,7 +208,12 @@ export const registerCommands = (context: vscode.ExtensionContext, configuration // Handle macOS if (platform === 'darwin') { - const packageId = versionPreference === VersionPreference.Stable ? 'dev-proxy' : 'dev-proxy-beta'; + const packageId = getPackageIdentifier(versionPreference, PackageManager.Homebrew); + if (!packageId) { + openUpgradeDocumentation(); + return; + } + const upgradeCommand = `brew upgrade ${packageId}`; const isBeta = versionPreference === VersionPreference.Beta; diff --git a/src/enums.ts b/src/enums.ts index bcc3f67..991bd9b 100644 --- a/src/enums.ts +++ b/src/enums.ts @@ -4,6 +4,21 @@ export enum VersionPreference { } export enum VersionExeName { - Stable = 'devproxy', - Beta = 'devproxy-beta', -} \ No newline at end of file + Stable = 'devproxy', + Beta = 'devproxy-beta', +} + +export enum WingetPackageIdentifier { + Stable = 'DevProxy.DevProxy', + Beta = 'DevProxy.DevProxy.Beta', +} + +export enum HomebrewPackageIdentifier { + Stable = 'devproxy', + Beta = 'devproxy-beta', +} + +export enum PackageManager { + Winget, + Homebrew, +} diff --git a/src/helpers.ts b/src/helpers.ts index 5185404..bf65d03 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -1,6 +1,12 @@ import * as vscode from 'vscode'; import parse from 'json-to-ast'; -import { exec, ExecOptions } from 'child_process'; +import {exec, ExecOptions} from 'child_process'; +import { + HomebrewPackageIdentifier, + PackageManager, + VersionPreference, + WingetPackageIdentifier, +} from './enums'; export const getASTNode = ( children: parse.PropertyNode[], @@ -204,3 +210,20 @@ export const openUpgradeDocumentation = () => { const url = 'https://aka.ms/devproxy/upgrade'; vscode.env.openExternal(vscode.Uri.parse(url)); }; + +export const getPackageIdentifier = ( + versionPreference: VersionPreference, + packageManager: PackageManager, +): string | undefined => { + if (packageManager === PackageManager.Homebrew) { + return versionPreference === VersionPreference.Stable + ? HomebrewPackageIdentifier.Stable + : HomebrewPackageIdentifier.Beta; + } + + if (packageManager === PackageManager.Winget) { + return versionPreference === VersionPreference.Stable + ? WingetPackageIdentifier.Stable + : WingetPackageIdentifier.Beta; + } +};