mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Enable no-floating-promises for azurecore (#16946)
* Enable no-floating-promises for azurecore * few more * fix compile
This commit is contained in:
13
extensions/azurecore/.eslintrc.json
Normal file
13
extensions/azurecore/.eslintrc.json
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"parserOptions": {
|
||||||
|
"project": "./extensions/azurecore/tsconfig.json"
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"@typescript-eslint/no-floating-promises": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"ignoreVoid": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -104,7 +104,7 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
if (loginComplete) {
|
if (loginComplete) {
|
||||||
loginComplete.reject(ex);
|
loginComplete.reject(ex);
|
||||||
} else {
|
} else {
|
||||||
vscode.window.showErrorMessage(ex.getPrintableString());
|
void vscode.window.showErrorMessage(ex.getPrintableString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Logger.error(ex);
|
Logger.error(ex);
|
||||||
@@ -139,7 +139,7 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
return await this.hydrateAccount(tokenResult, this.getTokenClaims(tokenResult.token));
|
return await this.hydrateAccount(tokenResult, this.getTokenClaims(tokenResult.token));
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
if (ex instanceof AzureAuthError) {
|
if (ex instanceof AzureAuthError) {
|
||||||
vscode.window.showErrorMessage(ex.getPrintableString());
|
void vscode.window.showErrorMessage(ex.getPrintableString());
|
||||||
}
|
}
|
||||||
Logger.error(ex);
|
Logger.error(ex);
|
||||||
account.isStale = true;
|
account.isStale = true;
|
||||||
@@ -616,7 +616,7 @@ export abstract class AzureAuth implements vscode.Disposable {
|
|||||||
return this.deleteAccountCache(account);
|
return this.deleteAccountCache(account);
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
const msg = localize('azure.cacheErrrorRemove', "Error when removing your account from the cache.");
|
const msg = localize('azure.cacheErrrorRemove', "Error when removing your account from the cache.");
|
||||||
vscode.window.showErrorMessage(msg);
|
void vscode.window.showErrorMessage(msg);
|
||||||
Logger.error('Error when removing tokens.', ex);
|
Logger.error('Error when removing tokens.', ex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _getSecurityToken(account: AzureAccount, resource: azdata.AzureResource): Promise<MultiTenantTokenResponse | undefined> {
|
private async _getSecurityToken(account: AzureAccount, resource: azdata.AzureResource): Promise<MultiTenantTokenResponse | undefined> {
|
||||||
vscode.window.showInformationMessage(localize('azure.deprecatedGetSecurityToken', "A call was made to azdata.accounts.getSecurityToken, this method is deprecated and will be removed in future releases. Please use getAccountSecurityToken instead."));
|
void vscode.window.showInformationMessage(localize('azure.deprecatedGetSecurityToken', "A call was made to azdata.accounts.getSecurityToken, this method is deprecated and will be removed in future releases. Please use getAccountSecurityToken instead."));
|
||||||
const azureAccount = account as AzureAccount;
|
const azureAccount = account as AzureAccount;
|
||||||
const response: MultiTenantTokenResponse = {};
|
const response: MultiTenantTokenResponse = {};
|
||||||
for (const tenant of azureAccount.properties.tenants) {
|
for (const tenant of azureAccount.properties.tenants) {
|
||||||
@@ -147,7 +147,7 @@ export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disp
|
|||||||
|
|
||||||
if (this.authMappings.size === 0) {
|
if (this.authMappings.size === 0) {
|
||||||
Logger.log('No auth method was enabled.');
|
Logger.log('No auth method was enabled.');
|
||||||
vscode.window.showErrorMessage(noAuthAvailable);
|
void vscode.window.showErrorMessage(noAuthAvailable);
|
||||||
return { canceled: true };
|
return { canceled: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,7 +164,7 @@ export class AzureAccountProvider implements azdata.AccountProvider, vscode.Disp
|
|||||||
|
|
||||||
if (!pick) {
|
if (!pick) {
|
||||||
Logger.log('No auth method was selected.');
|
Logger.log('No auth method was selected.');
|
||||||
vscode.window.showErrorMessage(noAuthSelected);
|
void vscode.window.showErrorMessage(noAuthSelected);
|
||||||
return { canceled: true };
|
return { canceled: true };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ export class AzureAccountProviderService implements vscode.Disposable {
|
|||||||
AzureAccountProviderService.CommandClearTokenCache,
|
AzureAccountProviderService.CommandClearTokenCache,
|
||||||
() => { self._event.emit(AzureAccountProviderService.CommandClearTokenCache); }
|
() => { self._event.emit(AzureAccountProviderService.CommandClearTokenCache); }
|
||||||
));
|
));
|
||||||
this._event.on(AzureAccountProviderService.CommandClearTokenCache, () => { self.onClearTokenCache(); });
|
this._event.on(AzureAccountProviderService.CommandClearTokenCache, () => { void self.onClearTokenCache(); });
|
||||||
|
|
||||||
// 1) Get a credential provider
|
// 1) Get a credential provider
|
||||||
// 2a) Store the credential provider for use later
|
// 2a) Store the credential provider for use later
|
||||||
@@ -98,11 +98,11 @@ export class AzureAccountProviderService implements vscode.Disposable {
|
|||||||
.then(
|
.then(
|
||||||
() => {
|
() => {
|
||||||
let message = localize('clearTokenCacheSuccess', "Token cache successfully cleared");
|
let message = localize('clearTokenCacheSuccess', "Token cache successfully cleared");
|
||||||
vscode.window.showInformationMessage(`${loc.extensionName}: ${message}`);
|
void vscode.window.showInformationMessage(`${loc.extensionName}: ${message}`);
|
||||||
},
|
},
|
||||||
err => {
|
err => {
|
||||||
let message = localize('clearTokenCacheFailure', "Failed to clear token cache");
|
let message = localize('clearTokenCacheFailure', "Failed to clear token cache");
|
||||||
vscode.window.showErrorMessage(`${loc.extensionName}: ${message}: ${err}`);
|
void vscode.window.showErrorMessage(`${loc.extensionName}: ${message}: ${err}`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
const enablePreviewFeatures = vscode.workspace.getConfiguration('workbench').get('enablePreviewFeatures');
|
const enablePreviewFeatures = vscode.workspace.getConfiguration('workbench').get('enablePreviewFeatures');
|
||||||
if (!enablePreviewFeatures) {
|
if (!enablePreviewFeatures) {
|
||||||
const msg = localize('azure.cloudTerminalPreview', "You must enable preview features in order to use Azure Cloud Shell.");
|
const msg = localize('azure.cloudTerminalPreview', "You must enable preview features in order to use Azure Cloud Shell.");
|
||||||
vscode.window.showInformationMessage(msg);
|
void vscode.window.showInformationMessage(msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let azureAccount: AzureAccount | undefined;
|
let azureAccount: AzureAccount | undefined;
|
||||||
@@ -41,7 +41,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
const action = await vscode.window.showErrorMessage(localize('azure.noAccountError', "You are not currently signed into any Azure accounts, Please sign in and then try again."),
|
const action = await vscode.window.showErrorMessage(localize('azure.noAccountError', "You are not currently signed into any Azure accounts, Please sign in and then try again."),
|
||||||
signin);
|
signin);
|
||||||
if (action === signin) {
|
if (action === signin) {
|
||||||
vscode.commands.executeCommand('azure.resource.signin');
|
void vscode.commands.executeCommand('azure.resource.signin');
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (accounts.length === 1) {
|
} else if (accounts.length === 1) {
|
||||||
@@ -52,7 +52,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
placeHolder: localize('azure.pickAnAzureAccount', "Select an Azure account")
|
placeHolder: localize('azure.pickAnAzureAccount', "Select an Azure account")
|
||||||
});
|
});
|
||||||
if (!pickedAccount) {
|
if (!pickedAccount) {
|
||||||
vscode.window.showErrorMessage(localize('azure.accountNotSelectedError', "You must select an Azure account for this feature to work."));
|
void vscode.window.showErrorMessage(localize('azure.accountNotSelectedError', "You must select an Azure account for this feature to work."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
azureAccount = accounts.find(acct => acct.displayInfo.displayName === pickedAccount);
|
azureAccount = accounts.find(acct => acct.displayInfo.displayName === pickedAccount);
|
||||||
@@ -64,7 +64,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
const listOfTenants = azureAccount.properties.tenants.map(t => t.displayName);
|
const listOfTenants = azureAccount.properties.tenants.map(t => t.displayName);
|
||||||
|
|
||||||
if (listOfTenants.length === 0) {
|
if (listOfTenants.length === 0) {
|
||||||
vscode.window.showErrorMessage(localize('azure.noTenants', "A tenant is required for this feature. Your Azure subscription seems to have no tenants."));
|
void vscode.window.showErrorMessage(localize('azure.noTenants', "A tenant is required for this feature. Your Azure subscription seems to have no tenants."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
const pickedTenant = await vscode.window.showQuickPick(listOfTenants, { canPickMany: false });
|
const pickedTenant = await vscode.window.showQuickPick(listOfTenants, { canPickMany: false });
|
||||||
|
|
||||||
if (!pickedTenant) {
|
if (!pickedTenant) {
|
||||||
vscode.window.showErrorMessage(localize('azure.mustPickTenant', "You must select a tenant for this feature to work."));
|
void vscode.window.showErrorMessage(localize('azure.mustPickTenant', "You must select a tenant for this feature to work."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
await terminalService.getOrCreateCloudConsole(azureAccount, tenant);
|
await terminalService.getOrCreateCloudConsole(azureAccount, tenant);
|
||||||
} catch (ex) {
|
} catch (ex) {
|
||||||
console.error(ex);
|
console.error(ex);
|
||||||
vscode.window.showErrorMessage(ex);
|
void vscode.window.showErrorMessage(ex);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
subscriptions = await subscriptionService.getSubscriptions(account);
|
subscriptions = await subscriptionService.getSubscriptions(account);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
account.isStale = true;
|
account.isStale = true;
|
||||||
vscode.window.showErrorMessage(AzureResourceErrorMessageUtil.getErrorMessage(error));
|
void vscode.window.showErrorMessage(AzureResourceErrorMessageUtil.getErrorMessage(error));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -162,15 +162,15 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
});
|
});
|
||||||
|
|
||||||
vscode.commands.registerCommand('azure.resource.azureview.refresh', async (node?: TreeNode) => {
|
vscode.commands.registerCommand('azure.resource.azureview.refresh', async (node?: TreeNode) => {
|
||||||
await azureViewTree.refresh(node, true);
|
return azureViewTree.refresh(node, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
vscode.commands.registerCommand('azure.resource.connectiondialog.refresh', async (node?: TreeNode) => {
|
vscode.commands.registerCommand('azure.resource.connectiondialog.refresh', async (node?: TreeNode) => {
|
||||||
await connectionDialogTree.refresh(node, true);
|
return connectionDialogTree.refresh(node, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
vscode.commands.registerCommand('azure.resource.signin', async (node?: TreeNode) => {
|
vscode.commands.registerCommand('azure.resource.signin', async (node?: TreeNode) => {
|
||||||
vscode.commands.executeCommand('workbench.actions.modal.linkedAccount');
|
return vscode.commands.executeCommand('workbench.actions.modal.linkedAccount');
|
||||||
});
|
});
|
||||||
|
|
||||||
vscode.commands.registerCommand('azure.resource.connectsqlserver', async (node?: TreeNode | azdata.ObjectExplorerContext) => {
|
vscode.commands.registerCommand('azure.resource.connectsqlserver', async (node?: TreeNode | azdata.ObjectExplorerContext) => {
|
||||||
@@ -191,7 +191,7 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
|
|
||||||
const conn = await azdata.connection.openConnectionDialog(undefined, connectionProfile, { saveConnection: true, showDashboard: true });
|
const conn = await azdata.connection.openConnectionDialog(undefined, connectionProfile, { saveConnection: true, showDashboard: true });
|
||||||
if (conn) {
|
if (conn) {
|
||||||
vscode.commands.executeCommand('workbench.view.connections');
|
void vscode.commands.executeCommand('workbench.view.connections');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -205,6 +205,6 @@ export function registerAzureResourceCommands(appContext: AppContext, azureViewT
|
|||||||
}
|
}
|
||||||
|
|
||||||
const urlToOpen = `${connectionProfile.azurePortalEndpoint}//${connectionProfile.azureTenantId}/#resource/${connectionProfile.azureResourceId}`;
|
const urlToOpen = `${connectionProfile.azurePortalEndpoint}//${connectionProfile.azureTenantId}/#resource/${connectionProfile.azureResourceId}`;
|
||||||
vscode.env.openExternal(vscode.Uri.parse(urlToOpen));
|
await vscode.env.openExternal(vscode.Uri.parse(urlToOpen));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export interface IAzureResourceCacheService {
|
|||||||
|
|
||||||
get<T>(key: string): T | undefined;
|
get<T>(key: string): T | undefined;
|
||||||
|
|
||||||
update<T>(key: string, value: T): void;
|
update<T>(key: string, value: T): Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ export class AzureResourceCacheService implements IAzureResourceCacheService {
|
|||||||
return this._context.workspaceState.get(key);
|
return this._context.workspaceState.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
public update<T>(key: string, value: T): void {
|
public async update<T>(key: string, value: T): Promise<void> {
|
||||||
this._context.workspaceState.update(key, value);
|
await this._context.workspaceState.update(key, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private _context: ExtensionContext = undefined;
|
private _context: ExtensionContext = undefined;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
|||||||
|
|
||||||
selectedSubscriptionsCache[account.key.accountId] = selectedSubscriptions;
|
selectedSubscriptionsCache[account.key.accountId] = selectedSubscriptions;
|
||||||
|
|
||||||
this._cacheService.update<AzureResourceSelectedSubscriptionsCache>(this._cacheKey, { selectedSubscriptions: selectedSubscriptionsCache });
|
await this._cacheService.update<AzureResourceSelectedSubscriptionsCache>(this._cacheKey, { selectedSubscriptions: selectedSubscriptionsCache });
|
||||||
|
|
||||||
const filters: string[] = [];
|
const filters: string[] = [];
|
||||||
for (const accountId in selectedSubscriptionsCache) {
|
for (const accountId in selectedSubscriptionsCache) {
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export class AzureResourceSubscriptionService implements IAzureResourceSubscript
|
|||||||
const errorMsg = localize('azure.resource.tenantSubscriptionsError', "Failed to get subscriptions for account {0} (tenant '{1}'). {2}", account.key.accountId, tenantId, AzureResourceErrorMessageUtil.getErrorMessage(error));
|
const errorMsg = localize('azure.resource.tenantSubscriptionsError', "Failed to get subscriptions for account {0} (tenant '{1}'). {2}", account.key.accountId, tenantId, AzureResourceErrorMessageUtil.getErrorMessage(error));
|
||||||
console.warn(errorMsg);
|
console.warn(errorMsg);
|
||||||
errors.push(error);
|
errors.push(error);
|
||||||
vscode.window.showWarningMessage(errorMsg);
|
void vscode.window.showWarningMessage(errorMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!gotSubscriptions) {
|
if (!gotSubscriptions) {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ const handleNeverUsed = async (): Promise<void> => {
|
|||||||
const option = await vscode.window.showInformationMessage<TerminalMessageItem>(neverUsedString, openAzureShellButton, okButton);
|
const option = await vscode.window.showInformationMessage<TerminalMessageItem>(neverUsedString, openAzureShellButton, okButton);
|
||||||
|
|
||||||
if (option.action === TerminalOption.OPEN_SITE) {
|
if (option.action === TerminalOption.OPEN_SITE) {
|
||||||
vscode.env.openExternal(vscode.Uri.parse('https://aka.ms/AA83f8f'));
|
void vscode.env.openExternal(vscode.Uri.parse('https://aka.ms/AA83f8f'));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ export class AzureTerminalService implements IAzureTerminalService {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!shell) {
|
if (!shell) {
|
||||||
vscode.window.showErrorMessage(localize('azure.shellTypeRequired', "You must pick a shell type"));
|
void vscode.window.showErrorMessage(localize('azure.shellTypeRequired', "You must pick a shell type"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ class AzureTerminal implements vscode.Pseudoterminal {
|
|||||||
const terminalUri = terminalResult.data?.socketUri;
|
const terminalUri = terminalResult.data?.socketUri;
|
||||||
|
|
||||||
if (terminalResult.data.error) {
|
if (terminalResult.data.error) {
|
||||||
vscode.window.showErrorMessage(terminalResult.data.error.message);
|
void vscode.window.showErrorMessage(terminalResult.data.error.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!terminalUri) {
|
if (!terminalUri) {
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
|||||||
|
|
||||||
if (this._isClearingCache) {
|
if (this._isClearingCache) {
|
||||||
subscriptions = await this._subscriptionService.getSubscriptions(this.account);
|
subscriptions = await this._subscriptionService.getSubscriptions(this.account);
|
||||||
this.updateCache<azureResource.AzureResourceSubscription[]>(subscriptions);
|
await this.updateCache<azureResource.AzureResourceSubscription[]>(subscriptions);
|
||||||
this._isClearingCache = false;
|
this._isClearingCache = false;
|
||||||
} else {
|
} else {
|
||||||
subscriptions = await this.getCachedSubscriptions();
|
subscriptions = await this.getCachedSubscriptions();
|
||||||
@@ -77,7 +77,7 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
|||||||
errMsg = AzureResourceErrorMessageUtil.getErrorMessage(err);
|
errMsg = AzureResourceErrorMessageUtil.getErrorMessage(err);
|
||||||
}
|
}
|
||||||
if (!token) {
|
if (!token) {
|
||||||
vscode.window.showWarningMessage(localize('azure.unableToAccessSubscription', "Unable to access subscription {0} ({1}). Please [refresh the account](command:azure.resource.signin) to try again. {2}", s.name, s.id, errMsg));
|
void vscode.window.showWarningMessage(localize('azure.unableToAccessSubscription', "Unable to access subscription {0} ({1}). Please [refresh the account](command:azure.resource.signin) to try again. {2}", s.name, s.id, errMsg));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@@ -91,7 +91,7 @@ export class AzureResourceAccountTreeNode extends AzureResourceContainerTreeNode
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error instanceof AzureSubscriptionError) {
|
if (error instanceof AzureSubscriptionError) {
|
||||||
vscode.commands.executeCommand('azure.resource.signin');
|
void vscode.commands.executeCommand('azure.resource.signin');
|
||||||
}
|
}
|
||||||
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
return [AzureResourceMessageTreeNode.create(AzureResourceErrorMessageUtil.getErrorMessage(error), this)];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ export abstract class AzureResourceContainerTreeNodeBase extends AzureResourceTr
|
|||||||
this._cacheKey = this._cacheService.generateKey(id);
|
this._cacheKey = this._cacheService.generateKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected updateCache<T>(cache: T): void {
|
protected updateCache<T>(cache: T): Promise<void> {
|
||||||
this._cacheService.update<T>(this._cacheKey, cache);
|
return this._cacheService.update<T>(this._cacheKey, cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected getCache<T>(): T {
|
protected getCache<T>(): T {
|
||||||
|
|||||||
@@ -70,9 +70,9 @@ export class ConnectionDialogTreeProvider implements vscode.TreeDataProvider<Tre
|
|||||||
}
|
}
|
||||||
if (errorMessages.length > 0) {
|
if (errorMessages.length > 0) {
|
||||||
const showAccountsAction = localize('azure.resource.tree.treeProvider.openAccountsDialog', "Show Azure accounts");
|
const showAccountsAction = localize('azure.resource.tree.treeProvider.openAccountsDialog', "Show Azure accounts");
|
||||||
vscode.window.showErrorMessage(localize('azure.resource.tree.treeProvider.accountLoadError', "Failed to load some Azure accounts. {0}", errorMessages.join(',')), showAccountsAction).then(result => {
|
void vscode.window.showErrorMessage(localize('azure.resource.tree.treeProvider.accountLoadError', "Failed to load some Azure accounts. {0}", errorMessages.join(',')), showAccountsAction).then(result => {
|
||||||
if (result === showAccountsAction) {
|
if (result === showAccountsAction) {
|
||||||
vscode.commands.executeCommand('azure.resource.signin');
|
void vscode.commands.executeCommand('azure.resource.signin');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ export class FlatAccountTreeNode extends AzureResourceContainerTreeNodeBase {
|
|||||||
|
|
||||||
public async getChildren(): Promise<TreeNode[]> {
|
public async getChildren(): Promise<TreeNode[]> {
|
||||||
if (this._isClearingCache) {
|
if (this._isClearingCache) {
|
||||||
this._loader.start();
|
this._loader.start().catch(err => console.error('Error loading Azure FlatAccountTreeNodes ', err));
|
||||||
this._isClearingCache = false;
|
this._isClearingCache = false;
|
||||||
return [];
|
return [];
|
||||||
} else {
|
} else {
|
||||||
@@ -211,12 +211,12 @@ class FlatAccountTreeNodeLoader {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error instanceof AzureSubscriptionError) {
|
if (error instanceof AzureSubscriptionError) {
|
||||||
vscode.commands.executeCommand('azure.resource.signin');
|
void vscode.commands.executeCommand('azure.resource.signin');
|
||||||
}
|
}
|
||||||
// http status code 429 means "too many requests"
|
// http status code 429 means "too many requests"
|
||||||
// use a custom error message for azure resource graph api throttling error to make it more actionable for users.
|
// use a custom error message for azure resource graph api throttling error to make it more actionable for users.
|
||||||
const errorMessage = error?.statusCode === 429 ? localize('azure.resource.throttleerror', "Requests from this account have been throttled. To retry, please select a smaller number of subscriptions.") : AzureResourceErrorMessageUtil.getErrorMessage(error);
|
const errorMessage = error?.statusCode === 429 ? localize('azure.resource.throttleerror', "Requests from this account have been throttled. To retry, please select a smaller number of subscriptions.") : AzureResourceErrorMessageUtil.getErrorMessage(error);
|
||||||
vscode.window.showErrorMessage(localize('azure.resource.tree.loadresourceerror', "An error occurred while loading Azure resources: {0}", errorMessage));
|
void vscode.window.showErrorMessage(localize('azure.resource.tree.loadresourceerror', "An error occurred while loading Azure resources: {0}", errorMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
this._isLoading = false;
|
this._isLoading = false;
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ export class FlatAzureResourceTreeProvider implements vscode.TreeDataProvider<Tr
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (this.resourceLoader.state === LoaderState.NotStarted) {
|
if (this.resourceLoader.state === LoaderState.NotStarted) {
|
||||||
this.resourceLoader.start();
|
this.resourceLoader.start().catch(err => console.error('Error loading Azure Resources for FlatAzureResourceTreeProvider ', err));
|
||||||
return [AzureResourceMessageTreeNode.create(localize('azure.resource.tree.treeProvider.loadingLabel', "Loading ..."), undefined)];
|
return [AzureResourceMessageTreeNode.create(localize('azure.resource.tree.treeProvider.loadingLabel', "Loading ..."), undefined)];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<azurec
|
|||||||
await vscode.env.openExternal(vscode.Uri.parse(`${portalEndpoint}/#resource/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/${type}/${name}`));
|
await vscode.env.openExternal(vscode.Uri.parse(`${portalEndpoint}/#resource/subscriptions/${subscriptionId}/resourceGroups/${resourceGroup}/providers/${type}/${name}`));
|
||||||
} else {
|
} else {
|
||||||
console.log(`Missing required values - subscriptionId : ${subscriptionId} resourceGroup : ${resourceGroup} type: ${type} name: ${name}`);
|
console.log(`Missing required values - subscriptionId : ${subscriptionId} resourceGroup : ${resourceGroup} type: ${type} name: ${name}`);
|
||||||
vscode.window.showErrorMessage(loc.unableToOpenAzureLink);
|
void vscode.window.showErrorMessage(loc.unableToOpenAzureLink);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -140,7 +140,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<azurec
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
});
|
}).then(undefined, err => console.error('Error registering Azure ResourceDeployment value provider ', err));
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getSubscriptions(account?: azurecore.AzureAccount, ignoreErrors?: boolean, selectedOnly: boolean = false): Promise<azurecore.GetSubscriptionsResult> {
|
getSubscriptions(account?: azurecore.AzureAccount, ignoreErrors?: boolean, selectedOnly: boolean = false): Promise<azurecore.GetSubscriptionsResult> {
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ describe('AccountProvider.SimpleWebServer', function (): void {
|
|||||||
|
|
||||||
it('Double startup should fail', async function (): Promise<void> {
|
it('Double startup should fail', async function (): Promise<void> {
|
||||||
await server.startup();
|
await server.startup();
|
||||||
server.startup().should.be.rejected();
|
await server.startup().should.be.rejected();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('404 on unknown requests', async function (): Promise<void> {
|
it('404 on unknown requests', async function (): Promise<void> {
|
||||||
@@ -59,7 +59,7 @@ describe('AccountProvider.SimpleWebServer', function (): void {
|
|||||||
|
|
||||||
it('Server shuts off', async function (): Promise<void> {
|
it('Server shuts off', async function (): Promise<void> {
|
||||||
await server.startup();
|
await server.startup();
|
||||||
server.shutdown().should.not.be.rejected();
|
await server.shutdown().should.not.be.rejected();
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -109,7 +109,10 @@ describe('AzureResourceAccountTreeNode.info', function (): void {
|
|||||||
|
|
||||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
||||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache = mockSubscriptions);
|
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => {
|
||||||
|
mockSubscriptionCache = mockSubscriptions;
|
||||||
|
return Promise.resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(function (): void {
|
afterEach(function (): void {
|
||||||
@@ -217,7 +220,10 @@ describe('AzureResourceAccountTreeNode.getChildren', function (): void {
|
|||||||
sinon.stub(azdata.accounts, 'getAccountSecurityToken').resolves(mockToken);
|
sinon.stub(azdata.accounts, 'getAccountSecurityToken').resolves(mockToken);
|
||||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
||||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache = mockSubscriptions);
|
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => {
|
||||||
|
mockSubscriptionCache = mockSubscriptions;
|
||||||
|
return Promise.resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(function (): void {
|
afterEach(function (): void {
|
||||||
@@ -354,7 +360,11 @@ describe('AzureResourceAccountTreeNode.clearCache', function (): void {
|
|||||||
sinon.stub(azdata.accounts, 'getAccountSecurityToken').returns(Promise.resolve(mockToken));
|
sinon.stub(azdata.accounts, 'getAccountSecurityToken').returns(Promise.resolve(mockToken));
|
||||||
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
mockCacheService.setup((o) => o.generateKey(TypeMoq.It.isAnyString())).returns(() => generateGuid());
|
||||||
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
mockCacheService.setup((o) => o.get(TypeMoq.It.isAnyString())).returns(() => mockSubscriptionCache);
|
||||||
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() => mockSubscriptionCache = mockSubscriptions);
|
mockCacheService.setup((o) => o.update(TypeMoq.It.isAnyString(), TypeMoq.It.isAny())).returns(() =>
|
||||||
|
{
|
||||||
|
mockSubscriptionCache = mockSubscriptions;
|
||||||
|
return Promise.resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
afterEach(function (): void {
|
afterEach(function (): void {
|
||||||
|
|||||||
@@ -59,7 +59,7 @@
|
|||||||
"core-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js core-ci",
|
"core-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js core-ci",
|
||||||
"extensions-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci",
|
"extensions-ci": "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js extensions-ci",
|
||||||
"sqllint": "eslint --no-eslintrc -c .eslintrc.sql.ts.json --rulesdir ./build/lib/eslint --ext .ts ./src/sql",
|
"sqllint": "eslint --no-eslintrc -c .eslintrc.sql.ts.json --rulesdir ./build/lib/eslint --ext .ts ./src/sql",
|
||||||
"extensions-lint": "eslint --rulesdir ./build/lib/eslint --ext .ts ./extensions"
|
"extensions-lint": "eslint --rulesdir ./build/lib/eslint --ext .ts ./extensions/azurecore"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@angular/animations": "~4.1.3",
|
"@angular/animations": "~4.1.3",
|
||||||
|
|||||||
Reference in New Issue
Block a user