diff --git a/extensions/sql-database-projects/src/common/constants.ts b/extensions/sql-database-projects/src/common/constants.ts index 6b4eb800d1..e9a1830222 100644 --- a/extensions/sql-database-projects/src/common/constants.ts +++ b/extensions/sql-database-projects/src/common/constants.ts @@ -227,8 +227,7 @@ export const browseButtonText = localize('browseButtonText', "Browse folder"); export const selectFolderStructure = localize('selectFolderStructure', "Select folder structure"); export const folderStructureLabel = localize('folderStructureLabel', "Folder structure"); export const WorkspaceFileExtension = '.code-workspace'; -export const browseEllipsis = localize('browseEllipsis', "Browse..."); -export const browseEllipsisWithIcon = `$(folder) ${browseEllipsis}`; +export const browseEllipsisWithIcon = `$(folder) ${localize('browseEllipsis', "Browse...")}`; export const selectProjectLocation = localize('selectProjectLocation', "Select project location"); export const ProjectParentDirectoryNotExistError = (location: string): string => { return localize('dataworkspace.projectParentDirectoryNotExistError', "The selected project location '{0}' does not exist or is not a directory.", location); }; export const ProjectDirectoryAlreadyExistError = (projectName: string, location: string): string => { return localize('dataworkspace.projectDirectoryAlreadyExistError', "There is already a directory named '{0}' in the selected location: '{1}'.", projectName, location); }; @@ -423,9 +422,12 @@ export enum DatabaseProjectItemType { // AutoRest export const autorestPostDeploymentScriptName = 'PostDeploymentScript.sql'; -export const nodeButNotAutorestFound = localize('nodeButNotAutorestFound', "Autorest tool not found in system path, but found Node.js. Running via npx. Please execute 'npm install autorest -g' to install permanently."); +export const nodeButNotAutorestFound = localize('nodeButNotAutorestFound', "Autorest tool not found in system path, but found Node.js. Prompting user for how to proceed. Execute 'npm install autorest -g' to install permanently and avoid this message."); export const nodeNotFound = localize('nodeNotFound', "Neither Autorest nor Node.js (npx) found in system path. Please install Node.js for Autorest generation to work."); export const nodeButNotAutorestFoundPrompt = localize('nodeButNotAutorestFoundPrompt', "Autorest is not installed. To proceed, choose whether to run Autorest from a temporary location via 'npx' or install Autorest globally then run."); +export const userSelectionInstallGlobally = localize('userSelectionInstallGlobally', "User selected to install autorest gloablly. Installing now..."); +export const userSelectionRunNpx = localize('userSelectionRunNpx', "User selected to run via npx."); +export const userSelectionCancelled = localize('userSelectionCancelled', "User has cancelled selection for how to run autorest."); export const installGlobally = localize('installGlobally', "Install globally"); export const runViaNpx = localize('runViaNpx', "Run via npx"); diff --git a/extensions/sql-database-projects/src/controllers/projectController.ts b/extensions/sql-database-projects/src/controllers/projectController.ts index cefcad7b73..de2c02190f 100644 --- a/extensions/sql-database-projects/src/controllers/projectController.ts +++ b/extensions/sql-database-projects/src/controllers/projectController.ts @@ -834,7 +834,7 @@ export class ProjectsController { public async selectAutorestSpecFile(): Promise { let quickpickSelection = await vscode.window.showQuickPick( - [constants.browseEllipsis], + [constants.browseEllipsisWithIcon], { title: constants.selectSpecFile, ignoreFocusOut: true }); if (!quickpickSelection) { return; diff --git a/extensions/sql-database-projects/src/tools/autorestHelper.ts b/extensions/sql-database-projects/src/tools/autorestHelper.ts index 3ecd9b50ad..f42331847b 100644 --- a/extensions/sql-database-projects/src/tools/autorestHelper.ts +++ b/extensions/sql-database-projects/src/tools/autorestHelper.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; -import { DoNotAskAgain, Install, nodeButNotAutorestFound, nodeNotFound, nodeButNotAutorestFoundPrompt, runViaNpx, installGlobally } from '../common/constants'; +import * as constants from '../common/constants'; import * as utils from '../common/utils'; import * as semver from 'semver'; import { DBProjectConfigurationKey } from './netcoreTool'; @@ -45,19 +45,24 @@ export class AutorestHelper extends ShellExecutionHelper { if (await utils.detectCommandInstallation(autorestCommand)) { return autorestCommand; } + else if (await utils.detectCommandInstallation(npxCommand)) { + this._outputChannel.appendLine(constants.nodeButNotAutorestFound); + const response = await vscode.window.showInformationMessage(constants.nodeButNotAutorestFoundPrompt, constants.installGlobally, constants.runViaNpx); - if (await utils.detectCommandInstallation(npxCommand)) { - this._outputChannel.appendLine(nodeButNotAutorestFound); - - const response = await vscode.window.showInformationMessage(nodeButNotAutorestFoundPrompt, installGlobally, runViaNpx); - - if (response === installGlobally) { + if (response === constants.installGlobally) { + this._outputChannel.appendLine(constants.userSelectionInstallGlobally); await this.runStreamedCommand('npm install autorest -g', this._outputChannel); return autorestCommand; - } else if (response === runViaNpx) { + } else if (response === constants.runViaNpx) { + this._outputChannel.appendLine(constants.userSelectionRunNpx); return `${npxCommand} ${autorestCommand}`; + } else { + this._outputChannel.appendLine(constants.userSelectionCancelled); } } + else { + this._outputChannel.appendLine(constants.nodeNotFound); + } return undefined; } @@ -75,18 +80,17 @@ export class AutorestHelper extends ShellExecutionHelper { // unable to find autorest or npx if (vscode.workspace.getConfiguration(DBProjectConfigurationKey)[nodejsDoNotAskAgainKey] !== true) { - this._outputChannel.appendLine(nodeNotFound); return; // user doesn't want to be prompted about installing it } // prompt user to install Node.js - const result = await vscode.window.showErrorMessage(nodeNotFound, DoNotAskAgain, Install); + const result = await vscode.window.showErrorMessage(constants.nodeNotFound, constants.DoNotAskAgain, constants.Install); - if (result === Install) { + if (result === constants.Install) { //open install link const nodejsInstallationUrl = 'https://nodejs.dev/download'; await vscode.env.openExternal(vscode.Uri.parse(nodejsInstallationUrl)); - } else if (result === DoNotAskAgain) { + } else if (result === constants.DoNotAskAgain) { const config = vscode.workspace.getConfiguration(DBProjectConfigurationKey); await config.update(nodejsDoNotAskAgainKey, true, vscode.ConfigurationTarget.Global); }