mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-31 17:23:31 -05:00
More Azure strict nulls (#20614)
This commit is contained in:
@@ -32,7 +32,7 @@ export class AzureMonitorResourceService extends ResourceServiceBase<AzureMonito
|
||||
defaultDatabaseName: '',
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId,
|
||||
resourceGroup: resource.resourceGroup
|
||||
|
||||
@@ -33,7 +33,7 @@ export class CosmosDbMongoService extends ResourceServiceBase<DbServerGraphData,
|
||||
tenant: resource.tenantId,
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -68,6 +68,10 @@ export class AzureResourceDatabaseService implements IAzureResourceService<azure
|
||||
let serversForRg = rgMap.get(db.resourceGroup);
|
||||
if (serversForRg && !db.kind.endsWith('system') && svrIdRegExp.test(db.id)) {
|
||||
const founds = svrIdRegExp.exec(db.id);
|
||||
if (!founds) {
|
||||
console.warn(`Could not parse server name from ID ${db.id}`);
|
||||
return;
|
||||
}
|
||||
const serverName = founds[2];
|
||||
let server = combined.find(s => s.name === serverName);
|
||||
if (server) {
|
||||
@@ -80,7 +84,7 @@ export class AzureResourceDatabaseService implements IAzureResourceService<azure
|
||||
loginName: (server as SynapseWorkspaceGraphData).properties.sqlAdministratorLogin ?? (server as DbServerGraphData).properties.administratorLogin,
|
||||
subscription: {
|
||||
id: db.subscriptionId,
|
||||
name: (subscriptions.find(sub => sub.id === db.subscriptionId))?.name
|
||||
name: (subscriptions.find(sub => sub.id === db.subscriptionId))?.name || ''
|
||||
},
|
||||
tenant: db.tenantId,
|
||||
resourceGroup: db.resourceGroup
|
||||
|
||||
@@ -67,7 +67,7 @@ export class AzureResourceDatabaseServerService implements IAzureResourceService
|
||||
combinedGraphResources.forEach((res) => {
|
||||
if (!ids.has(res.id)) {
|
||||
ids.add(res.id);
|
||||
res.subscriptionName = subscriptions.find(sub => sub.id === res.subscriptionId).name;
|
||||
res.subscriptionName = subscriptions.find(sub => sub.id === res.subscriptionId)?.name;
|
||||
const converted = this.convertResource(res);
|
||||
convertedResources.push(converted);
|
||||
}
|
||||
@@ -87,7 +87,7 @@ export class AzureResourceDatabaseServerService implements IAzureResourceService
|
||||
defaultDatabaseName: 'master',
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId,
|
||||
resourceGroup: resource.resourceGroup
|
||||
|
||||
@@ -31,7 +31,7 @@ export class KustoResourceService extends ResourceServiceBase<KustoGraphData, az
|
||||
defaultDatabaseName: '',
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId,
|
||||
resourceGroup: resource.resourceGroup
|
||||
|
||||
@@ -33,7 +33,7 @@ export class MysqlFlexibleServerService extends ResourceServiceBase<DbServerGrap
|
||||
tenant: resource.tenantId,
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
resourceGroup: resource.resourceGroup
|
||||
};
|
||||
|
||||
@@ -29,7 +29,7 @@ export class PostgresServerArcService extends ResourceServiceBase<PostgresArcSer
|
||||
defaultDatabaseName: 'postgres',
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId,
|
||||
resourceGroup: resource.resourceGroup
|
||||
|
||||
@@ -32,7 +32,7 @@ export class PostgresServerService extends ResourceServiceBase<DbServerGraphData
|
||||
defaultDatabaseName: 'postgres',
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId,
|
||||
resourceGroup: resource.resourceGroup
|
||||
|
||||
@@ -19,7 +19,7 @@ export class AzureResourceGroupService extends ResourceServiceBase<DbServerGraph
|
||||
name: resource.name,
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId
|
||||
};
|
||||
|
||||
@@ -39,6 +39,9 @@ export abstract class ResourceTreeDataProviderBase<T extends azureResource.Azure
|
||||
|
||||
private async getResources(element: azureResource.IAzureResourceNode): Promise<T[]> {
|
||||
const response = await azdata.accounts.getAccountSecurityToken(element.account, element.tenantId, azdata.AzureResource.ResourceManagement);
|
||||
if (!response) {
|
||||
throw new Error(`Did not receive security token when getting resources for account ${element.account.displayInfo.displayName}`);
|
||||
}
|
||||
const credential = new msRest.TokenCredentials(response.token, response.tokenType);
|
||||
|
||||
const resources: T[] = await this._resourceService.getResources([element.subscription], credential, element.account) || <T[]>[];
|
||||
@@ -125,7 +128,7 @@ export abstract class ResourceServiceBase<T extends GraphData, U extends azureRe
|
||||
graphResources.forEach((res) => {
|
||||
if (!ids.has(res.id)) {
|
||||
ids.add(res.id);
|
||||
res.subscriptionName = subscriptions.find(sub => sub.id === res.subscriptionId).name;
|
||||
res.subscriptionName = subscriptions.find(sub => sub.id === res.subscriptionId)?.name;
|
||||
const converted = this.convertResource(res);
|
||||
convertedResources.push(converted);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ export class SqlInstanceResourceService extends ResourceServiceBase<SqlInstanceG
|
||||
defaultDatabaseName: 'master',
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId,
|
||||
resourceGroup: resource.resourceGroup
|
||||
|
||||
@@ -29,7 +29,7 @@ export class SqlInstanceArcResourceService extends ResourceServiceBase<SqlInstan
|
||||
defaultDatabaseName: 'master',
|
||||
subscription: {
|
||||
id: resource.subscriptionId,
|
||||
name: resource.subscriptionName
|
||||
name: resource.subscriptionName || ''
|
||||
},
|
||||
tenant: resource.tenantId,
|
||||
resourceGroup: resource.resourceGroup
|
||||
|
||||
@@ -60,20 +60,20 @@ export class AzureResourceResourceTreeNode extends TreeNode {
|
||||
const treeItem = this.resourceNodeWithProviderId.resourceNode.treeItem;
|
||||
|
||||
return {
|
||||
label: <any>treeItem.label,
|
||||
label: typeof treeItem.label === 'object' ? treeItem.label.label : treeItem.label || '',
|
||||
isLeaf: treeItem.collapsibleState === TreeItemCollapsibleState.None ? true : false,
|
||||
errorMessage: undefined,
|
||||
metadata: undefined,
|
||||
nodePath: this.generateNodePath(),
|
||||
nodeStatus: undefined,
|
||||
nodeType: treeItem.contextValue,
|
||||
nodeType: treeItem.contextValue || '',
|
||||
nodeSubType: undefined,
|
||||
iconType: treeItem.contextValue
|
||||
};
|
||||
}
|
||||
|
||||
public get nodePathValue(): string {
|
||||
return this.resourceNodeWithProviderId.resourceNode.treeItem.id;
|
||||
return this.resourceNodeWithProviderId.resourceNode.treeItem.id || '';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,10 +9,8 @@ import { IAzureResourceCacheService } from '../interfaces';
|
||||
|
||||
export class AzureResourceCacheService implements IAzureResourceCacheService {
|
||||
public constructor(
|
||||
context: ExtensionContext
|
||||
) {
|
||||
this._context = context;
|
||||
}
|
||||
private _context: ExtensionContext
|
||||
) { }
|
||||
|
||||
public generateKey(id: string): string {
|
||||
return `${AzureResourceCacheService.cacheKeyPrefix}.${id}`;
|
||||
@@ -26,7 +24,5 @@ export class AzureResourceCacheService implements IAzureResourceCacheService {
|
||||
await this._context.workspaceState.update(key, value);
|
||||
}
|
||||
|
||||
private _context: ExtensionContext = undefined;
|
||||
|
||||
private static readonly cacheKeyPrefix = 'azure.resource.cache';
|
||||
}
|
||||
|
||||
@@ -11,11 +11,11 @@ interface AzureResourceSelectedSubscriptionsCache {
|
||||
}
|
||||
|
||||
export class AzureResourceSubscriptionFilterService implements IAzureResourceSubscriptionFilterService {
|
||||
public constructor(
|
||||
cacheService: IAzureResourceCacheService
|
||||
) {
|
||||
this._cacheService = cacheService;
|
||||
private _cacheKey: string;
|
||||
|
||||
public constructor(
|
||||
private _cacheService: IAzureResourceCacheService
|
||||
) {
|
||||
this._cacheKey = this._cacheService.generateKey('selectedSubscriptions');
|
||||
}
|
||||
|
||||
@@ -51,7 +51,4 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
||||
filters.push(...selectedSubscriptionsCache[accountId].map((subscription) => `${accountId}/${subscription.id}/${subscription.name}`));
|
||||
}
|
||||
}
|
||||
|
||||
private _cacheService: IAzureResourceCacheService = undefined;
|
||||
private _cacheKey: string = undefined;
|
||||
}
|
||||
|
||||
@@ -36,8 +36,8 @@ export class AzureResourceSubscriptionService implements IAzureResourceSubscript
|
||||
const newSubs = await subClient.subscriptions.list();
|
||||
subscriptions.push(...newSubs.map(newSub => {
|
||||
return {
|
||||
id: newSub.subscriptionId,
|
||||
name: newSub.displayName,
|
||||
id: newSub.subscriptionId || '',
|
||||
name: newSub.displayName || '',
|
||||
tenant: tenantId
|
||||
};
|
||||
}));
|
||||
|
||||
@@ -36,7 +36,7 @@ const handleNeverUsed = async (): Promise<void> => {
|
||||
|
||||
const option = await vscode.window.showInformationMessage<TerminalMessageItem>(neverUsedString, openAzureShellButton, okButton);
|
||||
|
||||
if (option.action === TerminalOption.OPEN_SITE) {
|
||||
if (option?.action === TerminalOption.OPEN_SITE) {
|
||||
void vscode.env.openExternal(vscode.Uri.parse('https://aka.ms/AA83f8f'));
|
||||
}
|
||||
};
|
||||
@@ -50,6 +50,9 @@ export class AzureTerminalService implements IAzureTerminalService {
|
||||
|
||||
public async getOrCreateCloudConsole(account: AzureAccount, tenant: Tenant): Promise<void> {
|
||||
const token = await azdata.accounts.getAccountSecurityToken(account, tenant.id, azdata.AzureResource.MicrosoftResourceManagement);
|
||||
if (!token) {
|
||||
throw new Error('Did not receive security token when creating cloud console');
|
||||
}
|
||||
const settings: AxiosRequestConfig = {
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
@@ -76,7 +79,7 @@ export class AzureTerminalService implements IAzureTerminalService {
|
||||
|
||||
const consoleRequestUri = this.getConsoleRequestUri(metadata.settings.armResource.endpoint);
|
||||
if (preferredLocation) {
|
||||
settings.headers['x-ms-console-preferred-location'] = preferredLocation;
|
||||
settings.headers!['x-ms-console-preferred-location'] = preferredLocation;
|
||||
}
|
||||
|
||||
let provisionResult: AxiosResponse<any>;
|
||||
@@ -143,9 +146,9 @@ class AzureTerminal implements vscode.Pseudoterminal {
|
||||
private readonly writeEmitter: vscode.EventEmitter<string>;
|
||||
public readonly onDidWrite: vscode.Event<string>;
|
||||
|
||||
private socket: WS;
|
||||
private intervalTimer: NodeJS.Timer;
|
||||
private terminalDimensions: vscode.TerminalDimensions;
|
||||
private socket: WS | undefined = undefined;
|
||||
private intervalTimer: NodeJS.Timer | undefined = undefined;
|
||||
private terminalDimensions: vscode.TerminalDimensions | undefined;
|
||||
|
||||
constructor(private readonly consoleUri: string, private readonly token: string, private shell: string) {
|
||||
this.writeEmitter = new vscode.EventEmitter<string>();
|
||||
@@ -209,7 +212,7 @@ class AzureTerminal implements vscode.Pseudoterminal {
|
||||
|
||||
// Keep alives
|
||||
this.intervalTimer = setInterval(() => {
|
||||
this.socket.ping();
|
||||
this.socket?.ping();
|
||||
}, 5000);
|
||||
} catch (ex) {
|
||||
console.log(ex);
|
||||
@@ -217,10 +220,13 @@ class AzureTerminal implements vscode.Pseudoterminal {
|
||||
}
|
||||
|
||||
|
||||
private async establishTerminal(dimensions: vscode.TerminalDimensions): Promise<string> {
|
||||
private async establishTerminal(dimensions: vscode.TerminalDimensions | undefined): Promise<string | undefined> {
|
||||
let terminalResult: AxiosResponse<any>;
|
||||
try {
|
||||
terminalResult = await axios.post(`${this.consoleUri}/terminals?rows=${dimensions.rows}&cols=${dimensions.columns}&shell=${this.shell}`, undefined, {
|
||||
const url = dimensions ?
|
||||
`${this.consoleUri}/terminals?rows=${dimensions.rows}&cols=${dimensions.columns}&shell=${this.shell}`
|
||||
: `${this.consoleUri}/terminals?shell=${this.shell}`;
|
||||
terminalResult = await axios.post(url, undefined, {
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
@@ -228,7 +234,7 @@ class AzureTerminal implements vscode.Pseudoterminal {
|
||||
}
|
||||
});
|
||||
} catch (ex) {
|
||||
console.log(ex, ex.response);
|
||||
console.log(`Error establishing terminal. ${ex}, ${ex.response}`);
|
||||
await handleNeverUsed();
|
||||
return undefined;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user