From 3a41a2b1d609205dba532c5d7fc207f76a2ddb7f Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 11:05:31 +0200 Subject: [PATCH 01/81] Version bump to `v0.3.2-alpha` --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index ffef3bfc8..b3abca134 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-documentdb", - "version": "0.3.1", + "version": "0.3.2-alpha", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-documentdb", - "version": "0.3.1", + "version": "0.3.2-alpha", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@azure/arm-compute": "^22.4.0", diff --git a/package.json b/package.json index 32a727d80..0c9e044ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vscode-documentdb", - "version": "0.3.1", + "version": "0.3.2-alpha", "aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "publisher": "ms-azuretools", "displayName": "DocumentDB for VS Code", From 231dd7d377a1caa73539fe4415b4dfdaece97d05 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 13:51:25 +0200 Subject: [PATCH 02/81] feat: improved nonNull* code, added optional `details` field --- src/utils/nonNull.ts | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/utils/nonNull.ts b/src/utils/nonNull.ts index fc40ecab1..931379c27 100644 --- a/src/utils/nonNull.ts +++ b/src/utils/nonNull.ts @@ -9,26 +9,38 @@ import * as l10n from '@vscode/l10n'; * Retrieves a property by name from an object and checks that it's not null and not undefined. It is strongly typed * for the property and will give a compile error if the given name is not a property of the source. */ +// NOTE: when calling these helpers from source files in this open-source repo, prefer passing a +// short file identifier (for example a repo-relative path) via the optional +// `details` parameter — it makes debugging and issue triage much easier for external contributors. export function nonNullProp( - source: TSource, + sourceObj: TSource, name: TKey, message?: string, + details?: string, ): NonNullable { - const value: NonNullable = >source[name]; + const value: NonNullable = >sourceObj[name]; if (message) { - return nonNullValue(value, `${name}, ${message}`); + return nonNullValue(value, `${name}, ${message}`, details); } - return nonNullValue(value, name); + return nonNullValue(value, name, details); } /** * Validates that a given value is not null and not undefined. */ -export function nonNullValue(value: T | undefined | null, propertyNameOrMessage?: string): T { +/** + * Validates that a given value is not null and not undefined. + * + * @param value The value to check. + * @param propertyNameOrMessage Optional property name or human message. + * @param details Optional short context (file name or identifier). Recommended for open-source issue triage. + */ +export function nonNullValue(value: T | undefined | null, propertyNameOrMessage?: string, details?: string): T { if (value === undefined || value === null) { throw new Error( l10n.t('Internal error: Expected value to be neither null nor undefined') + - (propertyNameOrMessage ? `: ${propertyNameOrMessage}` : ''), + (propertyNameOrMessage ? `: ${propertyNameOrMessage}` : '') + + (details ? ` (${details})` : ''), ); } @@ -38,11 +50,23 @@ export function nonNullValue(value: T | undefined | null, propertyNameOrMessa /** * Validates that a given string is not null, undefined, nor empty */ -export function nonNullOrEmptyValue(value: string | undefined, propertyNameOrMessage?: string): string { +/** + * Validates that a given string is not null, undefined, nor empty + * + * @param value The string to check. + * @param propertyNameOrMessage Optional property name or human message. + * @param details Optional short context (file name or identifier). Recommended for open-source issue triage. + */ +export function nonNullOrEmptyValue( + value: string | undefined, + propertyNameOrMessage?: string, + details?: string, +): string { if (!value) { throw new Error( l10n.t('Internal error: Expected value to be neither null, undefined, nor empty') + - (propertyNameOrMessage ? `: ${propertyNameOrMessage}` : ''), + (propertyNameOrMessage ? `: ${propertyNameOrMessage}` : '') + + (details ? ` (${details})` : ''), ); } From 441105723da8ad70f8e9693df56921bca24c725b Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 14:34:28 +0200 Subject: [PATCH 03/81] chore: improved nonNull* calls with more debug information --- .../chooseDataMigrationExtension.ts | 7 +++++-- src/commands/createCollection/createCollection.ts | 9 +++++++-- src/commands/createDatabase/createDatabase.ts | 5 +++-- src/commands/newLocalConnection/ExecuteStep.ts | 4 +++- src/commands/renameConnection/ExecuteStep.ts | 2 +- src/commands/updateConnectionString/ExecuteStep.ts | 6 +++++- src/documentdb/auth/NativeAuthHandler.ts | 3 ++- src/documentdb/scrapbook/ShellScriptRunner.ts | 12 +++++++++--- src/documentdb/scrapbook/mongoConnectionStrings.ts | 3 ++- .../discovery-tree/vm/AzureVMResourceItem.ts | 9 ++++----- .../documentdb/DocumentDBResourceItem.ts | 10 +++++++--- src/tree/api/createGenericElementWithContext.ts | 7 ++++--- src/tree/workspace-view/documentdb/ClusterItem.ts | 13 +++++++------ src/utils/workspacUtils.ts | 5 ++++- src/vscodeUriHandler.ts | 7 ++++--- 15 files changed, 67 insertions(+), 35 deletions(-) diff --git a/src/commands/chooseDataMigrationExtension/chooseDataMigrationExtension.ts b/src/commands/chooseDataMigrationExtension/chooseDataMigrationExtension.ts index 55be2ca9c..350102d26 100644 --- a/src/commands/chooseDataMigrationExtension/chooseDataMigrationExtension.ts +++ b/src/commands/chooseDataMigrationExtension/chooseDataMigrationExtension.ts @@ -3,13 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { nonNullValue, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { type IActionContext } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import { QuickPickItemKind, type QuickPickItem } from 'vscode'; import { CredentialCache } from '../../documentdb/CredentialCache'; import { DocumentDBConnectionString } from '../../documentdb/utils/DocumentDBConnectionString'; import { MigrationService } from '../../services/migrationServices'; import { type ClusterItemBase } from '../../tree/documentdb/ClusterItemBase'; +import { nonNullValue } from '../../utils/nonNull'; import { openUrl } from '../../utils/openUrl'; export async function chooseDataMigrationExtension(context: IActionContext, node: ClusterItemBase) { @@ -72,7 +73,9 @@ export async function chooseDataMigrationExtension(context: IActionContext, node // } if (migrationProviders.some((provider) => provider.id === selectedItem.id)) { - const selectedProvider = MigrationService.getProvider(nonNullValue(selectedItem.id, 'selectedItem.id')); + const selectedProvider = MigrationService.getProvider( + nonNullValue(selectedItem.id, 'selectedItem.id', 'chooseDataMigrationExtension.ts'), + ); if (selectedProvider) { context.telemetry.properties.migrationProvider = selectedProvider.id; diff --git a/src/commands/createCollection/createCollection.ts b/src/commands/createCollection/createCollection.ts index 030db4a8c..d7e3b9c00 100644 --- a/src/commands/createCollection/createCollection.ts +++ b/src/commands/createCollection/createCollection.ts @@ -3,10 +3,11 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AzureWizard, nonNullValue, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { AzureWizard, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import { type DatabaseItem } from '../../tree/documentdb/DatabaseItem'; import { showConfirmationAsInSettings } from '../../utils/dialogs/showConfirmation'; +import { nonNullValue } from '../../utils/nonNull'; import { CollectionNameStep } from './CollectionNameStep'; import { type CreateCollectionWizardContext } from './CreateCollectionWizardContext'; import { ExecuteStep } from './ExecuteStep'; @@ -35,7 +36,11 @@ export async function createCollection(context: IActionContext, node: DatabaseIt await wizard.prompt(); await wizard.execute(); - const newCollectionName = nonNullValue(wizardContext.newCollectionName); + const newCollectionName = nonNullValue( + wizardContext.newCollectionName, + 'wizardContext.newCollectionName', + 'createCollection.ts', + ); showConfirmationAsInSettings( l10n.t('The "{newCollectionName}" collection has been created.', { newCollectionName }), ); diff --git a/src/commands/createDatabase/createDatabase.ts b/src/commands/createDatabase/createDatabase.ts index 2f4376053..b369423c5 100644 --- a/src/commands/createDatabase/createDatabase.ts +++ b/src/commands/createDatabase/createDatabase.ts @@ -3,11 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { AzureWizard, type IActionContext, nonNullValue } from '@microsoft/vscode-azext-utils'; +import { AzureWizard, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import { CredentialCache } from '../../documentdb/CredentialCache'; import { type ClusterItemBase } from '../../tree/documentdb/ClusterItemBase'; import { showConfirmationAsInSettings } from '../../utils/dialogs/showConfirmation'; +import { nonNullValue } from '../../utils/nonNull'; import { type CreateDatabaseWizardContext } from './CreateDatabaseWizardContext'; import { DatabaseNameStep } from './DatabaseNameStep'; import { ExecuteStep } from './ExecuteStep'; @@ -53,6 +54,6 @@ async function createMongoDatabase(context: IActionContext, node: ClusterItemBas await wizard.prompt(); await wizard.execute(); - const newDatabaseName = nonNullValue(wizardContext.databaseName); + const newDatabaseName = nonNullValue(wizardContext.databaseName, 'wizardContext.databaseName', 'createDatabase.ts'); showConfirmationAsInSettings(l10n.t('The "{name}" database has been created.', { name: newDatabaseName })); } diff --git a/src/commands/newLocalConnection/ExecuteStep.ts b/src/commands/newLocalConnection/ExecuteStep.ts index 8d42dbe6b..dfa343f79 100644 --- a/src/commands/newLocalConnection/ExecuteStep.ts +++ b/src/commands/newLocalConnection/ExecuteStep.ts @@ -146,7 +146,9 @@ export class ExecuteStep extends AzureWizardExecuteStep { try { connection.secrets = { ...connection.secrets, - connectionString: nonNullValue(context.newConnectionString?.toString(), 'newConnectionString'), + connectionString: nonNullValue( + context.newConnectionString?.toString(), + 'context.newConnectionString', + 'ExecuteStep.ts', + ), }; await ConnectionStorageService.save(resourceType, connection, true); diff --git a/src/documentdb/auth/NativeAuthHandler.ts b/src/documentdb/auth/NativeAuthHandler.ts index f5427ad67..c9ae7d457 100644 --- a/src/documentdb/auth/NativeAuthHandler.ts +++ b/src/documentdb/auth/NativeAuthHandler.ts @@ -30,7 +30,8 @@ export class NativeAuthHandler implements AuthHandler { return Promise.resolve({ connectionString: nonNullValue( this.clusterCredentials.connectionStringWithPassword, - 'connectionStringWithPassword', + 'clusterCredentials.connectionStringWithPassword', + 'NativeAuthHandler.ts', ), options, }); diff --git a/src/documentdb/scrapbook/ShellScriptRunner.ts b/src/documentdb/scrapbook/ShellScriptRunner.ts index 6cef1b48a..61972a432 100644 --- a/src/documentdb/scrapbook/ShellScriptRunner.ts +++ b/src/documentdb/scrapbook/ShellScriptRunner.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { nonNullValue, parseError, UserCancelledError, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { parseError, UserCancelledError, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import * as fs from 'node:fs/promises'; import * as os from 'os'; @@ -14,6 +14,7 @@ import * as cpUtils from '../../utils/cp'; import { type EmulatorConfiguration } from '../../utils/emulatorConfiguration'; import { pathExists } from '../../utils/fs/pathExists'; import { InteractiveChildProcess } from '../../utils/InteractiveChildProcess'; +import { nonNullValue } from '../../utils/nonNull'; import { randomUtils } from '../../utils/randomUtils'; import { getBatchSizeSetting } from '../../utils/workspacUtils'; import { wrapError } from '../../utils/wrapError'; @@ -147,7 +148,13 @@ export class ShellScriptRunner extends vscode.Disposable { } ShellScriptRunner._cachedShellPathOrCmd = shellPath; - const timeout = 1000 * nonNullValue(config.get(ext.settingsKeys.shellTimeout), 'mongoShellTimeout'); + const timeout = + 1000 * + nonNullValue( + config.get(ext.settingsKeys.shellTimeout), + 'config.get(ext.settingsKeys.shellTimeout)', + 'ShellScriptRunner.ts', + ); return ShellScriptRunner.createShellProcessHelper( shellPath, shellArgs, @@ -347,7 +354,6 @@ export class ShellScriptRunner extends vscode.Disposable { openFile, ); if (response === openFile) { - // eslint-disable-next-line no-constant-condition while (true) { const newPath: vscode.Uri[] = await context.ui.showOpenDialog({ filters: { 'Executable Files': [process.platform === 'win32' ? 'exe' : ''] }, diff --git a/src/documentdb/scrapbook/mongoConnectionStrings.ts b/src/documentdb/scrapbook/mongoConnectionStrings.ts index d24d52276..26166f8e0 100644 --- a/src/documentdb/scrapbook/mongoConnectionStrings.ts +++ b/src/documentdb/scrapbook/mongoConnectionStrings.ts @@ -28,7 +28,8 @@ export function getDatabaseNameFromConnectionString(connectionString: string): s try { const [, , databaseName] = nonNullValue( connectionString.match(mongoConnectionStringRegExp), - 'databaseNameMatch', + 'connectionString.match(mongoConnectionStringRegExp)', + 'mongoConnectionStrings.ts', ); return databaseName; } catch { diff --git a/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts b/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts index cd2016807..d0bae560a 100644 --- a/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts +++ b/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts @@ -6,8 +6,6 @@ import { AzureWizard, callWithTelemetryAndErrorHandling, - nonNullProp, - nonNullValue, UserCancelledError, type IActionContext, } from '@microsoft/vscode-azext-utils'; @@ -26,6 +24,7 @@ import { ProvideUserNameStep } from '../../../../documentdb/wizards/authenticate import { ext } from '../../../../extensionVariables'; import { ClusterItemBase, type ClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; +import { nonNullProp, nonNullValue } from '../../../../utils/nonNull'; // Define a model for VM, similar to ClusterModel but for VM properties export interface VirtualMachineModel extends ClusterModel { @@ -171,10 +170,10 @@ export class AzureVMResourceItem extends ClusterItemBase { // Construct the final connection string with user-provided credentials const connectionString = (await this.getCredentials())?.connectionString; - context.valuesToMask.push(nonNullValue(connectionString, 'connectionString')); + context.valuesToMask.push(nonNullValue(connectionString, 'connectionString', 'AzureVMResourceItem.ts')); const finalConnectionString = new DocumentDBConnectionString( - nonNullValue(connectionString, 'connectionString'), + nonNullValue(connectionString, 'connectionString', 'AzureVMResourceItem.ts'), ); maskSensitiveValuesInTelemetry(context, finalConnectionString); @@ -191,7 +190,7 @@ export class AzureVMResourceItem extends ClusterItemBase { return null; } - context.valuesToMask.push(nonNullProp(wizardContext, 'password')); + context.valuesToMask.push(nonNullProp(wizardContext, 'password', undefined, 'AzureVMResourceItem.ts')); finalConnectionString.username = wizardContext.selectedUserName; diff --git a/src/plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem.ts b/src/plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem.ts index 1e2509cd8..3346fafd0 100644 --- a/src/plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem.ts +++ b/src/plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem.ts @@ -7,7 +7,6 @@ import { type MongoCluster } from '@azure/arm-mongocluster'; import { AzureWizard, callWithTelemetryAndErrorHandling, - nonNullValue, UserCancelledError, type IActionContext, } from '@microsoft/vscode-azext-utils'; @@ -25,6 +24,7 @@ import { ProvideUserNameStep } from '../../../../documentdb/wizards/authenticate import { ext } from '../../../../extensionVariables'; import { ClusterItemBase, type ClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; +import { nonNullValue } from '../../../../utils/nonNull'; import { extractCredentialsFromCluster, getClusterInformationFromAzure } from '../../utils/clusterHelpers'; export class DocumentDBResourceItem extends ClusterItemBase { @@ -116,8 +116,12 @@ export class DocumentDBResourceItem extends ClusterItemBase { // Cache credentials and attempt connection CredentialCache.setAuthCredentials( this.id, - nonNullValue(wizardContext.selectedAuthMethod, 'authMethod'), - nonNullValue(credentials.connectionString), + nonNullValue( + wizardContext.selectedAuthMethod, + 'wizardContext.selectedAuthMethod', + 'DocumentDBResourceItem.ts', + ), + nonNullValue(credentials.connectionString, 'credentials.connectionString', 'DocumentDBResourceItem.ts'), wizardContext.selectedUserName, wizardContext.password, ); diff --git a/src/tree/api/createGenericElementWithContext.ts b/src/tree/api/createGenericElementWithContext.ts index 382446cc4..ce92ba8f1 100644 --- a/src/tree/api/createGenericElementWithContext.ts +++ b/src/tree/api/createGenericElementWithContext.ts @@ -3,8 +3,9 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { nonNullValue, type GenericElementOptions } from '@microsoft/vscode-azext-utils'; +import { type GenericElementOptions } from '@microsoft/vscode-azext-utils'; import { type TreeItem } from 'vscode'; +import { nonNullValue } from '../../utils/nonNull'; import { type TreeElement } from '../TreeElement'; import { type TreeElementWithContextValue } from '../TreeElementWithContextValue'; @@ -13,8 +14,8 @@ export function createGenericElementWithContext( ): TreeElement & TreeElementWithContextValue { let commandArgs = options.commandArgs; const item = { - id: nonNullValue(options.id, 'options.id'), - contextValue: nonNullValue(options.contextValue, 'options.contextValue'), + id: nonNullValue(options.id, 'options.id', 'createGenericElementWithContext.ts'), + contextValue: nonNullValue(options.contextValue, 'options.contextValue', 'createGenericElementWithContext.ts'), getTreeItem(): TreeItem { return { diff --git a/src/tree/workspace-view/documentdb/ClusterItem.ts b/src/tree/workspace-view/documentdb/ClusterItem.ts index 95bc11680..046b2e1db 100644 --- a/src/tree/workspace-view/documentdb/ClusterItem.ts +++ b/src/tree/workspace-view/documentdb/ClusterItem.ts @@ -6,8 +6,6 @@ import { AzureWizard, callWithTelemetryAndErrorHandling, - nonNullProp, - nonNullValue, UserCancelledError, type IActionContext, } from '@microsoft/vscode-azext-utils'; @@ -19,6 +17,7 @@ import { type AuthenticateWizardContext } from '../../../documentdb/wizards/auth import { ProvidePasswordStep } from '../../../documentdb/wizards/authenticate/ProvidePasswordStep'; import { ProvideUserNameStep } from '../../../documentdb/wizards/authenticate/ProvideUsernameStep'; import { ext } from '../../../extensionVariables'; +import { nonNullProp, nonNullValue } from '../../../utils/nonNull'; import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; import { type AttachedClusterModel } from '../../documentdb/ClusterModel'; import { type TreeElementWithStorageId } from '../../TreeElementWithStorageId'; @@ -63,7 +62,9 @@ export class ClusterItem extends ClusterItemBase implements TreeElementWithStora let clustersClient: ClustersClient; - const connectionString = new DocumentDBConnectionString(nonNullValue(this.cluster.connectionString)); + const connectionString = new DocumentDBConnectionString( + nonNullValue(this.cluster.connectionString, 'cluster.connectionString', 'ClusterItem.ts'), + ); let username: string | undefined = connectionString.username; let password: string | undefined = connectionString.password; @@ -87,10 +88,10 @@ export class ClusterItem extends ClusterItemBase implements TreeElementWithStora return null; } - context.valuesToMask.push(nonNullProp(wizardContext, 'password')); + context.valuesToMask.push(nonNullProp(wizardContext, 'password', undefined, 'ClusterItem.ts')); - username = nonNullProp(wizardContext, 'selectedUserName'); - password = nonNullProp(wizardContext, 'password'); + username = nonNullProp(wizardContext, 'selectedUserName', undefined, 'ClusterItem.ts'); + password = nonNullProp(wizardContext, 'password', undefined, 'ClusterItem.ts'); } ext.outputChannel.append(l10n.t('Connecting to the cluster as "{username}"…', { username })); diff --git a/src/utils/workspacUtils.ts b/src/utils/workspacUtils.ts index ab0ceb885..6d45dc066 100644 --- a/src/utils/workspacUtils.ts +++ b/src/utils/workspacUtils.ts @@ -16,5 +16,8 @@ export function getRootPath(): string | undefined { export function getBatchSizeSetting(): number { const config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration(); - return nonNullValue(config.get(ext.settingsKeys.batchSize), 'batchSize'); + return nonNullValue( + config.get(ext.settingsKeys.batchSize), + 'config.get(ext.settingsKeys.batchSize)', + ); } diff --git a/src/vscodeUriHandler.ts b/src/vscodeUriHandler.ts index c5ed18126..406e9b096 100644 --- a/src/vscodeUriHandler.ts +++ b/src/vscodeUriHandler.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { callWithTelemetryAndErrorHandling, nonNullValue, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; import { openCollectionViewInternal } from './commands/openCollectionView/openCollectionView'; @@ -16,6 +16,7 @@ import { revealInConnectionsView, waitForConnectionsViewReady, } from './tree/connections-view/connectionsViewHelpers'; +import { nonNullValue } from './utils/nonNull'; import { generateDocumentDBStorageId } from './utils/storageUtils'; // #region Type Definitions @@ -450,7 +451,7 @@ async function openDedicatedView( return openCollectionViewInternal(context, { clusterId: clusterId, - databaseName: nonNullValue(database, 'database'), - collectionName: nonNullValue(collection, 'collection'), + databaseName: nonNullValue(database, 'database', 'vscodeUriHandler.ts'), + collectionName: nonNullValue(collection, 'collection', 'vscodeUriHandler.ts'), }); } From 0ef5a2cbe7afdf5d27faf56fb4f8668dd0f3e276 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 15:00:19 +0200 Subject: [PATCH 04/81] Introduced ESLint rules for import monitorin of 'nonNull'-functions --- eslint.config.mjs | 15 ++++++- extension.bundle.ts | 1 + .../importDocuments/importDocuments.ts | 12 ++++- .../discovery-tree/AzureSubscriptionItem.ts | 5 ++- .../mongo-ru/MongoRUResourceItem.ts | 15 ++++++- .../MongoVCoreBranchDataProvider.ts | 45 +++++++++++-------- .../mongo-vcore/MongoVCoreResourceItem.ts | 17 ++++--- .../connections-view/DocumentDBClusterItem.ts | 9 +++- 8 files changed, 86 insertions(+), 33 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 59dd815b3..bf8126660 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -52,7 +52,20 @@ export default ts.config( 'no-case-declarations': 'error', 'no-constant-condition': 'error', 'no-inner-declarations': 'error', - 'no-restricted-imports': ['error', { patterns: ['**/*/extension.bundle'] }], + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + name: '@microsoft/vscode-azext-utils', + importNames: ['nonNullValue', 'nonNullProp', 'nonNullOrEmptyValue'], + message: + "Do not import nonNull helpers from '@microsoft/vscode-azext-utils'. Use the local 'src/utils/nonNull' instead.", + }, + ], + patterns: ['**/*/extension.bundle'], + }, + ], 'no-unused-vars': ['error', { argsIgnorePattern: '^_' }], 'no-useless-escape': 'error', 'license-header/header': [ diff --git a/extension.bundle.ts b/extension.bundle.ts index 8a13ba230..547308d19 100644 --- a/extension.bundle.ts +++ b/extension.bundle.ts @@ -19,6 +19,7 @@ export { ObjectId } from 'bson'; // The tests should import '../extension.bundle.ts'. At design-time they live in tests/ and so will pick up this file (extension.bundle.ts). // At runtime the tests live in dist/tests and will therefore pick up the main webpack bundle at dist/extension.bundle.js. export { AzureAccountTreeItemBase, createAzureClient } from '@microsoft/vscode-azext-azureutils'; +// eslint-disable-next-line no-restricted-imports -- bundle intentionally re-exports many helpers for tests; nonNull helpers are provided locally in this repo export * from '@microsoft/vscode-azext-utils'; export { isWindows, wellKnownEmulatorPassword } from './src/constants'; export { connectToClient, isCosmosEmulatorConnectionString } from './src/documentdb/scrapbook/connectToClient'; diff --git a/src/commands/importDocuments/importDocuments.ts b/src/commands/importDocuments/importDocuments.ts index 79acd0468..2a1e0866c 100644 --- a/src/commands/importDocuments/importDocuments.ts +++ b/src/commands/importDocuments/importDocuments.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { nonNullProp, parseError, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { parseError, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import { EJSON, type Document } from 'bson'; import * as fs from 'node:fs/promises'; @@ -17,6 +17,7 @@ import { import { ext } from '../../extensionVariables'; import { CollectionItem } from '../../tree/documentdb/CollectionItem'; import { BufferErrorCode, createMongoDbBuffer, type DocumentBuffer } from '../../utils/documentBuffer'; +import { nonNullProp } from '../../utils/nonNull'; import { getRootPath } from '../../utils/workspacUtils'; export async function importDocuments( @@ -114,7 +115,14 @@ export async function importDocumentsWithProgress(selectedItem: CollectionItem, let count = 0; let buffer: DocumentBuffer | undefined; if (selectedItem instanceof CollectionItem) { - const hosts = getHostsFromConnectionString(nonNullProp(selectedItem.cluster, 'connectionString')); + const hosts = getHostsFromConnectionString( + nonNullProp( + selectedItem.cluster, + 'connectionString', + 'selectedItem.cluster.connectionString', + 'importDocuments.ts', + ), + ); const isRuResource = hasDomainSuffix(AzureDomains.RU, ...hosts); if (isRuResource) { diff --git a/src/plugins/service-azure/discovery-tree/AzureSubscriptionItem.ts b/src/plugins/service-azure/discovery-tree/AzureSubscriptionItem.ts index 0ca266d5e..f4a4d4c6d 100644 --- a/src/plugins/service-azure/discovery-tree/AzureSubscriptionItem.ts +++ b/src/plugins/service-azure/discovery-tree/AzureSubscriptionItem.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; -import { callWithTelemetryAndErrorHandling, nonNullProp, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as vscode from 'vscode'; import { MongoClustersExperience } from '../../../DocumentDBExperiences'; @@ -13,6 +13,7 @@ import { type TreeElement } from '../../../tree/TreeElement'; import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithContextValue'; import { type ClusterModel } from '../../../tree/documentdb/ClusterModel'; import { createResourceManagementClient } from '../../../utils/azureClients'; +import { nonNullProp } from '../../../utils/nonNull'; import { DocumentDBResourceItem } from './documentdb/DocumentDBResourceItem'; export interface AzureSubscriptionModel { @@ -45,7 +46,7 @@ export class AzureSubscriptionItem implements TreeElement, TreeElementWithContex return accounts .sort((a, b) => (a.name || '').localeCompare(b.name || '')) .map((account) => { - const resourceId = nonNullProp(account, 'id'); + const resourceId = nonNullProp(account, 'id', 'account.id', 'AzureSubscriptionItem.ts'); const clusterInfo: ClusterModel = { ...account, diff --git a/src/tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem.ts b/src/tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem.ts index cf2abb420..9ac608193 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { callWithTelemetryAndErrorHandling, nonNullProp, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; @@ -12,6 +12,7 @@ import { CredentialCache } from '../../../../documentdb/CredentialCache'; import { DocumentDBConnectionString } from '../../../../documentdb/utils/DocumentDBConnectionString'; import { ext } from '../../../../extensionVariables'; import { createCosmosDBManagementClient } from '../../../../utils/azureClients'; +import { nonNullProp } from '../../../../utils/nonNull'; import { ClusterItemBase, type ClusterCredentials } from '../../../documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../documentdb/ClusterModel'; @@ -41,7 +42,17 @@ export class MongoRUResourceItem extends ClusterItemBase { ); const connectionString: URL = new URL( - nonNullProp(nonNullProp(connectionStringsInfo, 'connectionStrings')[0], 'connectionString'), + nonNullProp( + nonNullProp( + connectionStringsInfo, + 'connectionStrings', + 'connectionStringsInfo.connectionStrings', + 'MongoRUResourceItem.ts', + )[0], + 'connectionString', + 'connectionStringsInfo.connectionStrings[0].connectionString', + 'MongoRUResourceItem.ts', + ), ); // for any Mongo connectionString, append this query param because the Cosmos Mongo API v3.6 doesn't support retrywrites diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider.ts index a10e91b2e..4be7965c7 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider.ts @@ -5,10 +5,11 @@ import { type GenericResource } from '@azure/arm-resources'; import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; -import { callWithTelemetryAndErrorHandling, nonNullProp, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import { API, MongoClustersExperience } from '../../../../DocumentDBExperiences'; import { createMongoClustersManagementClient } from '../../../../utils/azureClients'; +import { nonNullProp } from '../../../../utils/nonNull'; import { BaseCachedBranchDataProvider } from '../../../BaseCachedBranchDataProvider'; import { type ClusterModel } from '../../../documentdb/ClusterModel'; import { type TreeElement } from '../../../TreeElement'; @@ -98,24 +99,32 @@ export class MongoVCoreBranchDataProvider extends BaseCachedBranchDataProvider { - this.detailsCache.set(nonNullProp(mongoClusterAccount, 'id'), { - dbExperience: MongoClustersExperience, - id: mongoClusterAccount.id!, - name: mongoClusterAccount.name!, - resourceGroup: getResourceGroupFromId(mongoClusterAccount.id!), - - location: mongoClusterAccount.location, - serverVersion: mongoClusterAccount.properties?.serverVersion, - - systemData: { - createdAt: mongoClusterAccount.systemData?.createdAt, + this.detailsCache.set( + nonNullProp( + mongoClusterAccount, + 'id', + 'mongoClusterAccount.id', + 'MongoVCoreBranchDataProvider.ts', + ), + { + dbExperience: MongoClustersExperience, + id: mongoClusterAccount.id!, + name: mongoClusterAccount.name!, + resourceGroup: getResourceGroupFromId(mongoClusterAccount.id!), + + location: mongoClusterAccount.location, + serverVersion: mongoClusterAccount.properties?.serverVersion, + + systemData: { + createdAt: mongoClusterAccount.systemData?.createdAt, + }, + + sku: mongoClusterAccount.properties?.compute?.tier, + diskSize: mongoClusterAccount.properties?.storage?.sizeGb, + nodeCount: mongoClusterAccount.properties?.sharding?.shardCount, + enableHa: mongoClusterAccount.properties?.highAvailability?.targetMode !== 'Disabled', }, - - sku: mongoClusterAccount.properties?.compute?.tier, - diskSize: mongoClusterAccount.properties?.storage?.sizeGb, - nodeCount: mongoClusterAccount.properties?.sharding?.shardCount, - enableHa: mongoClusterAccount.properties?.highAvailability?.targetMode !== 'Disabled', - }); + ); }); } catch (e) { console.debug({ ...context, ...subscription }); diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts index fece4cac5..d193bd8c5 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts @@ -6,8 +6,6 @@ import { AzureWizard, callWithTelemetryAndErrorHandling, - nonNullProp, - nonNullValue, UserCancelledError, type IActionContext, } from '@microsoft/vscode-azext-utils'; @@ -23,6 +21,7 @@ import { ProvidePasswordStep } from '../../../../documentdb/wizards/authenticate import { ProvideUserNameStep } from '../../../../documentdb/wizards/authenticate/ProvideUsernameStep'; import { ext } from '../../../../extensionVariables'; import { createMongoClustersManagementClient } from '../../../../utils/azureClients'; +import { nonNullProp, nonNullValue } from '../../../../utils/nonNull'; import { ClusterItemBase, type ClusterCredentials } from '../../../documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../documentdb/ClusterModel'; @@ -118,14 +117,20 @@ export class MongoVCoreResourceItem extends ClusterItemBase { return null; } - context.valuesToMask.push(nonNullProp(wizardContext, 'password')); + context.valuesToMask.push( + nonNullProp(wizardContext, 'password', 'wizardContext.password', 'MongoVCoreResourceItem.ts'), + ); // Cache the credentials CredentialCache.setCredentials( this.id, - nonNullValue(clusterInformation.properties.connectionString), - nonNullProp(wizardContext, 'selectedUserName'), - nonNullProp(wizardContext, 'password'), + nonNullValue( + clusterInformation.properties.connectionString, + 'clusterInformation.properties.connectionString', + 'MongoVCoreResourceItem.ts', + ), + nonNullProp(wizardContext, 'selectedUserName', undefined, 'MongoVCoreResourceItem.ts'), + nonNullProp(wizardContext, 'password', undefined, 'MongoVCoreResourceItem.ts'), // here, emulatorConfiguration is not set, as it's a resource item from Azure resources, not a workspace item, therefore, no emulator support needed ); diff --git a/src/tree/connections-view/DocumentDBClusterItem.ts b/src/tree/connections-view/DocumentDBClusterItem.ts index 4365c3aaf..cda50be24 100644 --- a/src/tree/connections-view/DocumentDBClusterItem.ts +++ b/src/tree/connections-view/DocumentDBClusterItem.ts @@ -6,12 +6,12 @@ import { AzureWizard, callWithTelemetryAndErrorHandling, - nonNullProp, UserCancelledError, type IActionContext, } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; +import { nonNullProp } from '../../utils/nonNull'; import { authMethodFromString, AuthMethodId, authMethodsFromString } from '../../documentdb/auth/AuthMethod'; import { ClustersClient } from '../../documentdb/ClustersClient'; @@ -130,7 +130,12 @@ export class DocumentDBClusterItem extends ClusterItemBase implements TreeElemen username = wizardContext.selectedUserName; password = wizardContext.password; - authMethod = nonNullProp(wizardContext, 'selectedAuthMethod'); + authMethod = nonNullProp( + wizardContext, + 'selectedAuthMethod', + 'wizardContext.selectedAuthMethod', + 'DocumentDBClusterItem.ts', + ); if (wizardContext.saveCredentials) { ext.outputChannel.append( From b405794a6b8271befa46a73217f9cf8f0b87ec25 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 15:10:49 +0200 Subject: [PATCH 05/81] nonNull.ts now requires message and details --- src/documentdb/scrapbook/ScrapbookHelpers.ts | 29 ++++++++++++++----- .../discovery-tree/vm/AzureVMResourceItem.ts | 4 ++- .../mongo-vcore/MongoVCoreResourceItem.ts | 9 ++++-- .../workspace-view/documentdb/ClusterItem.ts | 15 +++++++--- src/utils/nonNull.ts | 17 ++++------- src/utils/workspacUtils.ts | 1 + 6 files changed, 49 insertions(+), 26 deletions(-) diff --git a/src/documentdb/scrapbook/ScrapbookHelpers.ts b/src/documentdb/scrapbook/ScrapbookHelpers.ts index 5846771f0..b2bca937e 100644 --- a/src/documentdb/scrapbook/ScrapbookHelpers.ts +++ b/src/documentdb/scrapbook/ScrapbookHelpers.ts @@ -107,7 +107,7 @@ class FindMongoCommandsVisitor extends MongoVisitor { public visitCommand(ctx: mongoParser.CommandContext): MongoCommand[] { const funcCallCount: number = filterType(ctx.children, mongoParser.FunctionCallContext).length; - const stop = nonNullProp(ctx, 'stop'); + const stop = nonNullProp(ctx, 'stop', 'ctx.stop', 'ScrapbookHelpers.ts'); this.commands.push({ range: new vscode.Range( ctx.start.line - 1, @@ -146,7 +146,7 @@ class FindMongoCommandsVisitor extends MongoVisitor { const argAsObject = this.contextToObject(ctx); const argText = EJSON.stringify(argAsObject); - nonNullProp(lastCommand, 'arguments').push(argText); + nonNullProp(lastCommand, 'arguments', 'lastCommand.arguments', 'ScrapbookHelpers.ts').push(argText); const escapeHandled = this.deduplicateEscapesForRegex(argText); let ejsonParsed = {}; try { @@ -157,7 +157,12 @@ class FindMongoCommandsVisitor extends MongoVisitor { const parsedError: IParsedError = parseError(error); this.addErrorToCommand(parsedError.message, ctx); } - nonNullProp(lastCommand, 'argumentObjects').push(ejsonParsed); + nonNullProp( + lastCommand, + 'argumentObjects', + 'lastCommand.argumentObjects', + 'ScrapbookHelpers.ts', + ).push(ejsonParsed); } } } catch (error) { @@ -178,7 +183,7 @@ class FindMongoCommandsVisitor extends MongoVisitor { return {}; } // In a well formed expression, Argument and propertyValue tokens should have exactly one child, from their definitions in mongo.g4 - const child: ParseTree = nonNullProp(ctx, 'children')[0]; + const child: ParseTree = nonNullProp(ctx, 'children', 'ctx.children', 'ScrapbookHelpers.ts')[0]; if (child instanceof mongoParser.LiteralContext) { return this.literalContextToObject(child, ctx); } else if (child instanceof mongoParser.ObjectLiteralContext) { @@ -235,7 +240,12 @@ class FindMongoCommandsVisitor extends MongoVisitor { mongoParser.PropertyAssignmentContext, ); for (const propertyAssignment of propertyAssignments) { - const propertyAssignmentChildren = nonNullProp(propertyAssignment, 'children'); + const propertyAssignmentChildren = nonNullProp( + propertyAssignment, + 'children', + 'propertyAssignment.children', + 'ScrapbookHelpers.ts', + ); const propertyName = propertyAssignmentChildren[0]; const propertyValue = propertyAssignmentChildren[2]; parsedObject[stripQuotes(propertyName.text)] = this.contextToObject(propertyValue); @@ -261,10 +271,15 @@ class FindMongoCommandsVisitor extends MongoVisitor { // eslint-disable-next-line @typescript-eslint/no-wrapper-object-types ): Object { const functionTokens = child.children; - const constructorCall: TerminalNode = nonNullValue(findType(functionTokens, TerminalNode), 'constructorCall'); + const constructorCall: TerminalNode = nonNullValue( + findType(functionTokens, TerminalNode), + 'constructorCall', + 'ScrapbookHelpers.ts', + ); const argumentsToken: mongoParser.ArgumentsContext = nonNullValue( findType(functionTokens, mongoParser.ArgumentsContext), 'argumentsToken', + 'ScrapbookHelpers.ts', ); if (!(argumentsToken._CLOSED_PARENTHESIS && argumentsToken._OPEN_PARENTHESIS)) { //argumentsToken does not have '(' or ')' @@ -418,7 +433,7 @@ class FindMongoCommandsVisitor extends MongoVisitor { ): void { const command = this.commands[this.commands.length - 1]; command.errors = command.errors || []; - const stop = nonNullProp(ctx, 'stop'); + const stop = nonNullProp(ctx, 'stop', 'ctx.stop', 'ScrapbookHelpers.ts'); const currentErrorDesc: ErrorDescription = { message: errorMessage, range: new vscode.Range( diff --git a/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts b/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts index d0bae560a..30ffd04d9 100644 --- a/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts +++ b/src/plugins/service-azure-vm/discovery-tree/vm/AzureVMResourceItem.ts @@ -190,7 +190,9 @@ export class AzureVMResourceItem extends ClusterItemBase { return null; } - context.valuesToMask.push(nonNullProp(wizardContext, 'password', undefined, 'AzureVMResourceItem.ts')); + context.valuesToMask.push( + nonNullProp(wizardContext, 'password', 'wizardContext.password', 'AzureVMResourceItem.ts'), + ); finalConnectionString.username = wizardContext.selectedUserName; diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts index d193bd8c5..0a47319ba 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts @@ -129,8 +129,13 @@ export class MongoVCoreResourceItem extends ClusterItemBase { 'clusterInformation.properties.connectionString', 'MongoVCoreResourceItem.ts', ), - nonNullProp(wizardContext, 'selectedUserName', undefined, 'MongoVCoreResourceItem.ts'), - nonNullProp(wizardContext, 'password', undefined, 'MongoVCoreResourceItem.ts'), + nonNullProp( + wizardContext, + 'selectedUserName', + 'wizardContext.selectedUserName', + 'MongoVCoreResourceItem.ts', + ), + nonNullProp(wizardContext, 'password', 'wizardContext.password', 'MongoVCoreResourceItem.ts'), // here, emulatorConfiguration is not set, as it's a resource item from Azure resources, not a workspace item, therefore, no emulator support needed ); diff --git a/src/tree/workspace-view/documentdb/ClusterItem.ts b/src/tree/workspace-view/documentdb/ClusterItem.ts index 046b2e1db..79147c195 100644 --- a/src/tree/workspace-view/documentdb/ClusterItem.ts +++ b/src/tree/workspace-view/documentdb/ClusterItem.ts @@ -88,10 +88,17 @@ export class ClusterItem extends ClusterItemBase implements TreeElementWithStora return null; } - context.valuesToMask.push(nonNullProp(wizardContext, 'password', undefined, 'ClusterItem.ts')); - - username = nonNullProp(wizardContext, 'selectedUserName', undefined, 'ClusterItem.ts'); - password = nonNullProp(wizardContext, 'password', undefined, 'ClusterItem.ts'); + context.valuesToMask.push( + nonNullProp(wizardContext, 'password', 'wizardContext.password', 'ClusterItem.ts'), + ); + + username = nonNullProp( + wizardContext, + 'selectedUserName', + 'wizardContext.selectedUserName', + 'ClusterItem.ts', + ); + password = nonNullProp(wizardContext, 'password', 'wizardContext.password', 'ClusterItem.ts'); } ext.outputChannel.append(l10n.t('Connecting to the cluster as "{username}"…', { username })); diff --git a/src/utils/nonNull.ts b/src/utils/nonNull.ts index 931379c27..3e660c886 100644 --- a/src/utils/nonNull.ts +++ b/src/utils/nonNull.ts @@ -15,14 +15,11 @@ import * as l10n from '@vscode/l10n'; export function nonNullProp( sourceObj: TSource, name: TKey, - message?: string, - details?: string, + message: string, + details: string, ): NonNullable { const value: NonNullable = >sourceObj[name]; - if (message) { - return nonNullValue(value, `${name}, ${message}`, details); - } - return nonNullValue(value, name, details); + return nonNullValue(value, `${name}, ${message}`, details); } /** @@ -35,7 +32,7 @@ export function nonNullProp( * @param propertyNameOrMessage Optional property name or human message. * @param details Optional short context (file name or identifier). Recommended for open-source issue triage. */ -export function nonNullValue(value: T | undefined | null, propertyNameOrMessage?: string, details?: string): T { +export function nonNullValue(value: T | undefined | null, propertyNameOrMessage: string, details: string): T { if (value === undefined || value === null) { throw new Error( l10n.t('Internal error: Expected value to be neither null nor undefined') + @@ -57,11 +54,7 @@ export function nonNullValue(value: T | undefined | null, propertyNameOrMessa * @param propertyNameOrMessage Optional property name or human message. * @param details Optional short context (file name or identifier). Recommended for open-source issue triage. */ -export function nonNullOrEmptyValue( - value: string | undefined, - propertyNameOrMessage?: string, - details?: string, -): string { +export function nonNullOrEmptyValue(value: string | undefined, propertyNameOrMessage: string, details: string): string { if (!value) { throw new Error( l10n.t('Internal error: Expected value to be neither null, undefined, nor empty') + diff --git a/src/utils/workspacUtils.ts b/src/utils/workspacUtils.ts index 6d45dc066..5141e904f 100644 --- a/src/utils/workspacUtils.ts +++ b/src/utils/workspacUtils.ts @@ -19,5 +19,6 @@ export function getBatchSizeSetting(): number { return nonNullValue( config.get(ext.settingsKeys.batchSize), 'config.get(ext.settingsKeys.batchSize)', + 'workspacUtils.ts', ); } From c32eff0a6c3aad2da6d62c0e60934c41ad4d1c1d Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 15:16:18 +0200 Subject: [PATCH 06/81] Added comments for code maintainers. --- src/utils/nonNull.ts | 64 +++++++++++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 19 deletions(-) diff --git a/src/utils/nonNull.ts b/src/utils/nonNull.ts index 3e660c886..0a1f0cf94 100644 --- a/src/utils/nonNull.ts +++ b/src/utils/nonNull.ts @@ -6,12 +6,34 @@ import * as l10n from '@vscode/l10n'; /** - * Retrieves a property by name from an object and checks that it's not null and not undefined. It is strongly typed - * for the property and will give a compile error if the given name is not a property of the source. + * NOTE: These helpers append a short context string to thrown errors to help with triage. + * + * Parameter guidelines: + * - `message` (required): A short, human-friendly identifier for the value being checked. + * Use the actual member access or assignment LHS from your code: + * - Member access: 'selectedItem.cluster.connectionString' + * - Wizard context property: 'wizardContext.password' + * - Local variable or expression: 'connectionString.match(...)' + * + * - `details` (required): A short file identifier using the actual file base name from your code. + * Since this is an open source project, use real file names like 'ExecuteStep.ts', 'ConnectionItem.ts', etc. + * Keep it short and inline (do not create a constant). + * + * Example usage with actual code references: + * nonNullProp(selectedItem.cluster, 'connectionString', 'selectedItem.cluster.connectionString', 'ExecuteStep.ts') + */ + +/** + * Retrieves a property by name from an object and asserts it's not null or undefined. + * Provides compile-time type checking for the property name. + * + * @param sourceObj - The object to read the property from + * @param name - The property name (compile-time checked) + * @param message - Short identifier describing the checked value (prefer member-access or LHS) + * @param details - Short file identifier (file base name) used to help triage runtime errors + * @returns The non-null property value + * @throws Error with message format: ", (details)" when value is missing */ -// NOTE: when calling these helpers from source files in this open-source repo, prefer passing a -// short file identifier (for example a repo-relative path) via the optional -// `details` parameter — it makes debugging and issue triage much easier for external contributors. export function nonNullProp( sourceObj: TSource, name: TKey, @@ -23,14 +45,19 @@ export function nonNullProp( } /** - * Validates that a given value is not null and not undefined. - */ -/** - * Validates that a given value is not null and not undefined. + * Validates that a given value is not null or undefined. * - * @param value The value to check. - * @param propertyNameOrMessage Optional property name or human message. - * @param details Optional short context (file name or identifier). Recommended for open-source issue triage. + * @param value - The value to check + * @param propertyNameOrMessage - Property name or short human message describing the value + * (prefer member-access or the LHS of the assignment) + * @param details - Short file identifier (file base name) used to assist with triage + * @returns The validated non-null value + * @throws Error when value is null or undefined + * + * @example + * ```typescript + * nonNullValue(someVar, 'connectionString', 'ExecuteStep.ts') + * ``` */ export function nonNullValue(value: T | undefined | null, propertyNameOrMessage: string, details: string): T { if (value === undefined || value === null) { @@ -45,14 +72,13 @@ export function nonNullValue(value: T | undefined | null, propertyNameOrMessa } /** - * Validates that a given string is not null, undefined, nor empty - */ -/** - * Validates that a given string is not null, undefined, nor empty + * Validates that a given string is not null, undefined, or empty. * - * @param value The string to check. - * @param propertyNameOrMessage Optional property name or human message. - * @param details Optional short context (file name or identifier). Recommended for open-source issue triage. + * @param value - The string to check + * @param propertyNameOrMessage - Property name or message describing the value (e.g. 'database') + * @param details - Short file identifier (file base name) to help triage issues + * @returns The validated non-empty string + * @throws Error when value is null, undefined, or empty string */ export function nonNullOrEmptyValue(value: string | undefined, propertyNameOrMessage: string, details: string): string { if (!value) { From 2616a0177f9c4d6e22a5317241d351b5387cb96f Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 15:21:35 +0200 Subject: [PATCH 07/81] updated copilot instructions with nonNull info --- .github/copilot-instructions.md | 67 +++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 6f8332db3..a8fd8e834 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -68,6 +68,7 @@ This document provides comprehensive guidelines and context for GitHub Copilot t - Use l10n for any user-facing strings with `vscode.l10n.t()`. - Use `npm run prettier-fix` to format your code before committing. - Use `npm run lint` to check for linting errors. +- Use `npm run build` to ensure the project builds successfully (do not use `npm run compile`). - Use `npm run l10n` to update localization files in case you change any user-facing strings. - Ensure TypeScript compilation passes without errors. @@ -422,3 +423,69 @@ const message = vscode.l10n.t( - Ensure compatibility with Node.js version specified in `.nvmrc`. - Follow the project's ESLint configuration for consistent code style. - Use webpack for bundling and ensure proper tree-shaking. + +--- + +## Null Safety with nonNull Helpers + +**Always use the nonNull utility functions** from `src/utils/nonNull.ts` instead of manual null checks for better error reporting and debugging. + +#### Available Functions + +- **`nonNullProp()`**: Extract and validate object properties +- **`nonNullValue()`**: Validate any value is not null/undefined +- **`nonNullOrEmptyValue()`**: Validate strings are not null/undefined/empty + +#### Parameter Guidelines + +Both `message` and `details` parameters are **required** for all nonNull functions: + +- **`message`**: Use the actual member access or assignment LHS from your code. Since this is open source, use real variable names: + - Member access: `'selectedItem.cluster.connectionString'` + - Wizard context: `'wizardContext.password'` + - Local variables: `'connectionString.match(...)'` + +- **`details`**: Use the actual file base name where the code is located: + - Examples: `'ExecuteStep.ts'`, `'ConnectionItem.ts'`, `'DatabaseTreeItem.ts'` + - Keep it short, use the actual file name, don't create constants + +#### Usage Examples + +```typescript +// ✅ Good - Property extraction with validation +const connectionString = nonNullProp( + selectedItem.cluster, + 'connectionString', + 'selectedItem.cluster.connectionString', + 'ExecuteStep.ts', +); + +// ✅ Good - Value validation +const validatedConnection = nonNullValue(await getConnection(id), 'getConnection(id)', 'ConnectionManager.ts'); + +// ✅ Good - String validation (not empty) +const databaseName = nonNullOrEmptyValue( + wizardContext.databaseName, + 'wizardContext.databaseName', + 'CreateDatabaseStep.ts', +); + +// ✅ Good - Manual null check for user-facing validation +if (!userInput.connectionString) { + void vscode.window.showErrorMessage(vscode.l10n.t('Connection string is required')); + return; +} + +// ❌ Bad - Manual null checks for internal validation (use nonNull helpers instead) +if (!selectedItem.cluster.connectionString) { + throw new Error('Connection string is required'); // This should use nonNullProp +} + +// ❌ Bad - Generic parameter values +const value = nonNullValue(data, 'some value', 'file.ts'); +``` + +**When to use each approach:** + +- **Use nonNull helpers**: For internal validation where you expect the value to exist (programming errors) +- **Use manual checks**: For user-facing validation with localized error messages shown to users From 8afcc137d687d8296b4930f288d549b0e5971b3d Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 25 Aug 2025 15:37:22 +0200 Subject: [PATCH 08/81] wip: github actions resilience --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 2aedc58f8..879da1ee7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -60,7 +60,7 @@ jobs: ${{ runner.os }}-node- - name: 📦 Install Dependencies (npm ci) - run: npm ci + run: npm ci --verbose - name: 🌐 Check Localization Files run: npm run l10n:check From f7bf9783aec99ca2e67a076af2d5f3beb0094a9a Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Tue, 26 Aug 2025 14:50:32 +0200 Subject: [PATCH 09/81] config: launch configurations for aure resources integration --- .vscode/launch.json | 76 ++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 45 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index cd5908a07..995f5b142 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -3,36 +3,7 @@ "version": "0.2.0", "configurations": [ { - "name": "Launch Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceFolder}"], - "outFiles": ["${workspaceFolder}/out/**/*.js"], - "preLaunchTask": "${defaultBuildTask}", - "env": { - "DEBUGTELEMETRY": "true", // set this to "verbose" to see telemetry events in debug console - "NODE_DEBUG": "" - } - }, - { - "name": "Launch Extension + Host", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "--extensionDevelopmentPath=${workspaceFolder}/../vscode-azureresourcegroups" - ], - "outFiles": ["${workspaceFolder}/out/**/*.js"], - "preLaunchTask": "${defaultBuildTask}", - "env": { - "DEBUGTELEMETRY": "verbose", // set this to "true" to suppress telemetry events in debug console - "NODE_DEBUG": "" - } - }, - { - "name": "Launch Extension (webpack)", + "name": "Defaut: Launch Extension (webpack)", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", @@ -64,7 +35,7 @@ } }, { - "name": "Launch Extension + Host (webpack)", + "name": "Launch Extension + AzureResources (webpack)", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", @@ -74,11 +45,23 @@ "--extensionDevelopmentPath=${workspaceFolder}/../vscode-azureresourcegroups" ], "outFiles": ["${workspaceFolder}/dist/**/*.js", "${workspaceFolder}/../vscode-azureresourcegroups/out/**/*.js"], + "preLaunchTask": "Watch", + "autoAttachChildProcesses": true, + "debugWebWorkerHost": true, + "debugWebviews": false, + "trace": true, + "sourceMaps": true, + "pauseForSourceMap": true, + "skipFiles": ["**/node_modules/**"], + "smartStep": true, + "sourceMapRenames": true, + "rendererDebugOptions": { + "webRoot": "${workspaceFolder}" + }, "resolveSourceMapLocations": ["${workspaceFolder}/dist/**", "!**/node_modules/**"], "sourceMapPathOverrides": { "./*": "${workspaceFolder}/*" }, - "preLaunchTask": "Watch", "env": { "DEBUGTELEMETRY": "verbose", // set this to "true" to suppress telemetry events in debug console "NODE_DEBUG": "", @@ -86,19 +69,22 @@ "DEVSERVER": "true", "STOP_ON_ENTRY": "false" // stop on entry is not allowed for "type": "extensionHost", therefore, it's emulated here (review main.ts) }, - "debugWebWorkerHost": true, - "rendererDebugOptions": { - "pauseForSourceMap": true, - "sourceMapRenames": true, - "sourceMaps": true, - "webRoot": "${workspaceFolder}/src/webviews/" - }, - "skipFiles": ["**/node_modules/**"], - "smartStep": true, - "sourceMapRenames": true, - "sourceMaps": true, - "pauseForSourceMap": true, - "trace": true + }, + { + "name": "Launch Extension + Host", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionDevelopmentPath=${workspaceFolder}/../vscode-azureresourcegroups" + ], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "${defaultBuildTask}", + "env": { + "DEBUGTELEMETRY": "verbose", // set this to "true" to suppress telemetry events in debug console + "NODE_DEBUG": "" + } }, { "name": "Launch Tests", From f84ccea2929bfc78ed015e065a355f48dfdde050 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Wed, 27 Aug 2025 08:53:02 +0200 Subject: [PATCH 10/81] feat: activating Azure Cosmos DB for MongoDB (vCore) branch data provider (wip) --- src/documentdb/ClustersExtension.ts | 19 +- src/documentdb/Views.ts | 5 +- src/documentdb/activationConditions.ts | 6 +- src/extensionVariables.ts | 9 +- .../mongo-vcore/VCoreBranchDataProvider.ts | 249 ++++++++++++++++++ .../DiscoveryBranchDataProvider.ts | 6 +- 6 files changed, 278 insertions(+), 16 deletions(-) create mode 100644 src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index 167e56026..68ac98e0a 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -15,7 +15,8 @@ import { registerCommand, registerCommandWithTreeNodeUnwrapping, } from '@microsoft/vscode-azext-utils'; -import { AzExtResourceType } from '@microsoft/vscode-azureresources-api'; +import { type AzureResourcesExtensionApiWithActivity } from '@microsoft/vscode-azext-utils/activity'; +import { AzExtResourceType, getAzureResourcesExtensionApi } from '@microsoft/vscode-azureresources-api'; import * as vscode from 'vscode'; import { addConnectionFromRegistry } from '../commands/addConnectionFromRegistry/addConnectionFromRegistry'; import { addDiscoveryRegistry } from '../commands/addDiscoveryRegistry/addDiscoveryRegistry'; @@ -47,7 +48,7 @@ import { ext } from '../extensionVariables'; import { AzureVMDiscoveryProvider } from '../plugins/service-azure-vm/AzureVMDiscoveryProvider'; import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryProvider'; import { DiscoveryService } from '../services/discoveryServices'; -import { MongoVCoreBranchDataProvider } from '../tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider'; +import { VCoreBranchDataProvider } from '../tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider'; import { ConnectionsBranchDataProvider } from '../tree/connections-view/ConnectionsBranchDataProvider'; import { DiscoveryBranchDataProvider } from '../tree/discovery-view/DiscoveryBranchDataProvider'; import { WorkspaceResourceType } from '../tree/workspace-api/SharedWorkspaceResourceProvider'; @@ -104,15 +105,21 @@ export class ClustersExtension implements vscode.Disposable { // TODO: Implement https://github.com/microsoft/vscode-documentdb/issues/30 // for staged hand-over from Azure Databases to this DocumentDB extension - // eslint-disable-next-line no-constant-condition, no-constant-binary-expression - if (false && enableMongoVCoreSupport()) { + if (enableMongoVCoreSupport() || enableWorkspaceSupport()) { + ext.rgApiV2 = (await getAzureResourcesExtensionApi( + ext.context, + '2.0.0', + )) as AzureResourcesExtensionApiWithActivity; + } + + if (enableMongoVCoreSupport()) { // on purpose, transition is still in progress activateContext.telemetry.properties.enabledVCore = 'true'; - ext.mongoVCoreBranchDataProvider = new MongoVCoreBranchDataProvider(); + ext.azureResourcesVCoreBranchDataProvider = new VCoreBranchDataProvider(); ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( AzExtResourceType.MongoClusters, - ext.mongoVCoreBranchDataProvider, + ext.azureResourcesVCoreBranchDataProvider, ); } diff --git a/src/documentdb/Views.ts b/src/documentdb/Views.ts index fe2a5b170..6f0895dd3 100644 --- a/src/documentdb/Views.ts +++ b/src/documentdb/Views.ts @@ -4,8 +4,9 @@ *--------------------------------------------------------------------------------------------*/ export enum Views { - ConnectionsView = 'connectionsView', - DiscoveryView = 'discoveryView', + ConnectionsView = 'connectionsView', // do not change this value + DiscoveryView = 'discoveryView', // do not change this value + AzureResourcesView = 'azureResourcesView', /** * Note to future maintainers: do not modify these string constants. diff --git a/src/documentdb/activationConditions.ts b/src/documentdb/activationConditions.ts index 453d6689d..59f445fda 100644 --- a/src/documentdb/activationConditions.ts +++ b/src/documentdb/activationConditions.ts @@ -15,7 +15,7 @@ import { extensions } from 'vscode'; */ const AZURE_DATABASES_WORKSPACE_HANDOVER_VERSION = '10.25.3'; // This is the version that stops supporting documentdb workspaces -const AZURE_DATABASES_VCORE_HANDOVER_VERSION = '10.26.0'; // This is the version that stops supporting vCore Azure Resources +const AZURE_DATABASES_VCORE_HANDOVER_VERSION = '11.0.0'; // This is the version that stops supporting vCore Azure Resources const AZURE_DATABASES_RU_HANDOVER_VERSION = '10.26.0'; // This is the version that stops supporting RU Azure Resources let cachedAzureDatabasesVersion: semver.SemVer | null | undefined = undefined; @@ -66,7 +66,7 @@ export function enableWorkspaceSupport(): boolean { export function enableMongoVCoreSupport(): boolean { const azureDatabasesVersion = getAzureDatabasesVersion(); if (!azureDatabasesVersion) { - return false; + return true; } return semver.gte(azureDatabasesVersion, AZURE_DATABASES_VCORE_HANDOVER_VERSION); } @@ -79,7 +79,7 @@ export function enableMongoVCoreSupport(): boolean { export function enableMongoRUSupport(): boolean { const azureDatabasesVersion = getAzureDatabasesVersion(); if (!azureDatabasesVersion) { - return false; + return true; } return semver.gte(azureDatabasesVersion, AZURE_DATABASES_RU_HANDOVER_VERSION); } diff --git a/src/extensionVariables.ts b/src/extensionVariables.ts index 0ad211868..099146b9c 100644 --- a/src/extensionVariables.ts +++ b/src/extensionVariables.ts @@ -8,7 +8,7 @@ import { type AzureResourcesExtensionApiWithActivity } from '@microsoft/vscode-a import type * as vscode from 'vscode'; import { type DatabasesFileSystem } from './DatabasesFileSystem'; import { type MongoDBLanguageClient } from './documentdb/scrapbook/languageClient'; -import { type MongoVCoreBranchDataProvider } from './tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider'; +import { type VCoreBranchDataProvider } from './tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider'; import { type ConnectionsBranchDataProvider } from './tree/connections-view/ConnectionsBranchDataProvider'; import { type DiscoveryBranchDataProvider } from './tree/discovery-view/DiscoveryBranchDataProvider'; import { type TreeElement } from './tree/TreeElement'; @@ -33,8 +33,11 @@ export namespace ext { export let state: TreeElementStateManager; - // used for the resources tree - export let mongoVCoreBranchDataProvider: MongoVCoreBranchDataProvider; + // Azure Resources Extension integration + // > Azure Resources Extension: "Resources View" + export let azureResourcesVCoreBranchDataProvider: VCoreBranchDataProvider; + + // > Azure Resources Extension: "Workspace View" // used for the workspace: these are the dedicated providers export let mongoClustersWorkspaceBranchDataProvider: ClustersWorkspaceBranchDataProvider; export let mongoClusterWorkspaceBranchDataResource: AccountsItem; diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts new file mode 100644 index 000000000..0dcb67453 --- /dev/null +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts @@ -0,0 +1,249 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; + +import { + callWithTelemetryAndErrorHandling, + createContextValue, + type IActionContext, +} from '@microsoft/vscode-azext-utils'; +import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; +import { Views } from '../../../../documentdb/Views'; +import { ext } from '../../../../extensionVariables'; +import { type ExtendedTreeDataProvider } from '../../../ExtendedTreeDataProvider'; +import { type ExtTreeElementBase, type TreeElement } from '../../../TreeElement'; +import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../../TreeElementWithContextValue'; +import { isTreeElementWithRetryChildren } from '../../../TreeElementWithRetryChildren'; +import { TreeParentCache } from '../../../TreeParentCache'; + +// export type MongoVCoreResource = AzureResource & +// GenericResource & { +// readonly raw: GenericResource; // Resource object from Azure SDK +// }; + +export class VCoreBranchDataProvider + extends vscode.Disposable + implements BranchDataProvider, ExtendedTreeDataProvider +{ + /** + * Cache for tracking parent-child relationships to support the getParent method. + */ + private readonly parentCache = new TreeParentCache(); + + /** + * Caches nodes whose getChildren() call has failed. + * + * This cache prevents repeated attempts to fetch children for nodes that have previously failed, + * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary + * repeated calls until the error state is explicitly cleared. + * + * Key: Node ID (parent) + * Value: Array of TreeElement representing the failed children (usually an error node) + */ + private readonly errorNodeCache = new Map(); + + private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter< + void | TreeElement | TreeElement[] | null | undefined + >(); + + /** + * From vscode.TreeDataProvider: + * + * An optional event to signal that an element or root has changed. + * This will trigger the view to update the changed element/root and its children recursively (if shown). + * To signal that root has changed, do not pass any argument or pass `undefined` or `null`. + */ + get onDidChangeTreeData(): vscode.Event { + return this.onDidChangeTreeDataEmitter.event; + } + + /** + * Removes a node's error state from the failed node cache. + * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. + * If not reset, the cached error children will always be returned for this node. + * @param nodeId The ID of the node to clear from the failed node cache. + */ + resetNodeErrorState(nodeId: string): void { + this.errorNodeCache.delete(nodeId); + } + + constructor() { + super(() => { + this.onDidChangeTreeDataEmitter.dispose(); + }); + } + + async getChildren(element: TreeElement): Promise { + return await callWithTelemetryAndErrorHandling('getChildren', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'documentdb'; + + // 1. Check if we have a cached error for this element + // + // This prevents repeated attempts to fetch children for nodes that have previously failed + // (e.g., due to invalid credentials or connection issues). + if (element.id && this.errorNodeCache.has(element.id)) { + context.telemetry.properties.usedCachedErrorNode = 'true'; + return this.errorNodeCache.get(element.id); + } + + context.telemetry.properties.parentNodeContext = (await element.getTreeItem()).contextValue; + + // 2. Fetch the children of the current element + const children = await element.getChildren?.(); + context.telemetry.measurements.childrenCount = children?.length ?? 0; + + // 3. Check if the returned children contain an error node + // This means the operation failed (eg. authentication) + if (isTreeElementWithRetryChildren(element) && element.hasRetryNode(children)) { + // Optional: append helpful nodes to the error node + // Here is an example: + // children?.push( + // createGenericElementWithContext({ + // contextValue: 'error', + // id: `${element.id}/updateCredentials`, + // label: vscode.l10n.t('Click here to update credentials'), + // iconPath: new vscode.ThemeIcon('key'), + // commandId: 'vscode-documentdb.command.connectionsView.updateCredentials', + // commandArgs: [element], + // }), + // ); + + // Store the error node(s) in our cache for future refreshes + this.errorNodeCache.set(element.id, children ?? []); + context.telemetry.properties.cachedErrorNode = 'true'; + } + + return children?.map((child) => { + if (child.id) { + if (isTreeElementWithContextValue(child)) { + this.appendContextValue(child, Views.AzureResourcesView); + this.appendContextValue(child, 'documentdbBranch'); + } + + // Register parent-child relationship in the cache + if (element.id && child.id) { + this.parentCache.registerRelationship(element, child); + } + + return ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as TreeElement; + } + return child; + }); + }); + } + + /** + * Gets the parent of a tree element. Required for TreeView.reveal functionality. + * + * @param element The element for which to find the parent + * @returns The parent element, or undefined if the element is a root item + */ + getParent(element: TreeElement): TreeElement | null | undefined { + return this.parentCache.getParent(element); + } + + /** + * Finds a node in the tree by its ID. + * + * @param id The ID of the node to find + * @returns A Promise that resolves to the found node or undefined if not found + */ + async findNodeById(id: string): Promise { + return this.parentCache.findNodeById(id, async (element) => { + if (!element.getChildren) { + return undefined; + } + return element.getChildren(); + }); + } + + /** + * Refreshes the tree data. + * This will trigger the view to update the changed element/root and its children recursively (if shown). + * + * @param element The element to refresh. If not provided, the entire tree will be refreshed. + * + * Note: This implementation handles both current and stale element references. + * If a stale reference is provided but has an ID, it will attempt to find the current + * reference in the tree before refreshing. + */ + refresh(element?: TreeElement): void { + if (element?.id) { + // We have an element with an ID + + // Handle potential stale reference issue: + // VS Code's TreeView API relies on object identity (reference equality), + // not just ID equality. Find the current reference before clearing the cache. + void this.findAndRefreshCurrentElement(element); + } else { + // No element or no ID, refresh the entire tree + this.parentCache.clear(); + this.onDidChangeTreeDataEmitter.fire(element); + } + } + + /** + * Helper method to find the current instance of an element by ID and refresh it. + * This addresses the issue where stale references won't properly refresh the tree. + * + * @param element Potentially stale element reference + */ + private async findAndRefreshCurrentElement(element: TreeElement): Promise { + try { + // First try to find the current instance with this ID + const currentElement = await this.findNodeById(element.id!); + + // AFTER finding the element, update the cache: + // 1. Clear the cache for this ID to remove any stale references + // (drops the element and its children) + this.parentCache.clear(element.id!); + // 2. Re-register the node (but not its children) + if (currentElement?.id) { + this.parentCache.registerNode(currentElement); + } + + if (currentElement) { + // We found the current instance, use it for refresh + this.onDidChangeTreeDataEmitter.fire(currentElement); + } else { + // Current instance not found, fallback to using the provided element + // This may not work if it's truly a stale reference, but we've tried our best + this.onDidChangeTreeDataEmitter.fire(element); + } + } catch (error) { + // If anything goes wrong during the lookup, still attempt the refresh with the original element + // and clear the cache for this ID + console.log(`Error finding current element for refresh: ${error}`); + this.parentCache.clear(element.id!); + this.onDidChangeTreeDataEmitter.fire(element); + } + } + + getResourceItem(_element: AzureResource): ExtTreeElementBase | Thenable { + throw new Error('Method not implemented.'); + } + + async getTreeItem(element: TreeElement): Promise { + /** + * Note that due to caching done by the TreeElementStateManager, + * changes to the TreeItem added here might get lost + */ + return element.getTreeItem(); + } + + appendContextValue(treeItem: TreeElementWithContextValue, contextValueToAppend: string): void { + // all items returned from this view need that context value assigned + const contextValues: string[] = [contextValueToAppend]; + + // keep original contextValues if any + if (treeItem.contextValue) { + contextValues.push(treeItem.contextValue); + } + + treeItem.contextValue = createContextValue(contextValues); + } +} diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index 3128dd6ce..64dbac7e3 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -287,8 +287,10 @@ export class DiscoveryBranchDataProvider extends vscode.Disposable implements Ex } async getTreeItem(element: TreeElement): Promise { - /** note that due to caching done by the TreeElementStateManager, - * changes to the TreeItem added here might get lost */ + /** + * Note that due to caching done by the TreeElementStateManager, + * changes to the TreeItem added here might get lost + */ return element.getTreeItem(); } From 60b21772b9bd3f81afc2a72e372485559baa7d1e Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Wed, 27 Aug 2025 09:51:32 +0200 Subject: [PATCH 11/81] feat: activating Azure Cosmos DB for MongoDB (vCore) branch data provider (wip) --- .../mongo-vcore/VCoreBranchDataProvider.ts | 26 ++- .../mongo-vcore/VCoreResourceItem.ts | 204 ++++++++++++++++++ 2 files changed, 222 insertions(+), 8 deletions(-) create mode 100644 src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts index 0dcb67453..ce3eeff9c 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts @@ -11,15 +11,18 @@ import { type IActionContext, } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; +import { MongoClustersExperience } from '../../../../DocumentDBExperiences'; import { Views } from '../../../../documentdb/Views'; import { ext } from '../../../../extensionVariables'; import { type ExtendedTreeDataProvider } from '../../../ExtendedTreeDataProvider'; -import { type ExtTreeElementBase, type TreeElement } from '../../../TreeElement'; +import { type TreeElement } from '../../../TreeElement'; import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../../TreeElementWithContextValue'; import { isTreeElementWithRetryChildren } from '../../../TreeElementWithRetryChildren'; import { TreeParentCache } from '../../../TreeParentCache'; +import { type ClusterModel } from '../../../documentdb/ClusterModel'; +import { VCoreResourceItem } from './VCoreResourceItem'; -// export type MongoVCoreResource = AzureResource & +// export type VCoreResource = AzureResource & // GenericResource & { // readonly raw: GenericResource; // Resource object from Azure SDK // }; @@ -120,8 +123,7 @@ export class VCoreBranchDataProvider return children?.map((child) => { if (child.id) { if (isTreeElementWithContextValue(child)) { - this.appendContextValue(child, Views.AzureResourcesView); - this.appendContextValue(child, 'documentdbBranch'); + this.appendContextValues(child, Views.AzureResourcesView, 'documentdbBranch'); } // Register parent-child relationship in the cache @@ -223,8 +225,16 @@ export class VCoreBranchDataProvider } } - getResourceItem(_element: AzureResource): ExtTreeElementBase | Thenable { - throw new Error('Method not implemented.'); + getResourceItem(resource: AzureResource): TreeElement | Thenable { + // 1. extract the basic info from the element (subscription, resource group, etc., provided by Azure Resources) + const clusterInfo: ClusterModel = { + ...resource, + dbExperience: MongoClustersExperience, + } as ClusterModel; + + const clusterItem = new VCoreResourceItem(resource.subscription, clusterInfo); + + return clusterItem; } async getTreeItem(element: TreeElement): Promise { @@ -235,9 +245,9 @@ export class VCoreBranchDataProvider return element.getTreeItem(); } - appendContextValue(treeItem: TreeElementWithContextValue, contextValueToAppend: string): void { + appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { // all items returned from this view need that context value assigned - const contextValues: string[] = [contextValueToAppend]; + const contextValues: string[] = contextValuesToAppend; // keep original contextValues if any if (treeItem.contextValue) { diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts new file mode 100644 index 000000000..b832ac3fb --- /dev/null +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts @@ -0,0 +1,204 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type MongoCluster } from '@azure/arm-mongocluster'; +import { + AzureWizard, + callWithTelemetryAndErrorHandling, + nonNullValue, + UserCancelledError, + type IActionContext, +} from '@microsoft/vscode-azext-utils'; +import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; +import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; +import { AuthMethodId } from '../../../../documentdb/auth/AuthMethod'; +import { ClustersClient } from '../../../../documentdb/ClustersClient'; +import { CredentialCache } from '../../../../documentdb/CredentialCache'; +import { Views } from '../../../../documentdb/Views'; +import { type AuthenticateWizardContext } from '../../../../documentdb/wizards/authenticate/AuthenticateWizardContext'; +import { ChooseAuthMethodStep } from '../../../../documentdb/wizards/authenticate/ChooseAuthMethodStep'; +import { ProvidePasswordStep } from '../../../../documentdb/wizards/authenticate/ProvidePasswordStep'; +import { ProvideUserNameStep } from '../../../../documentdb/wizards/authenticate/ProvideUsernameStep'; +import { ext } from '../../../../extensionVariables'; +import { + extractCredentialsFromCluster, + getClusterInformationFromAzure, +} from '../../../../plugins/service-azure/utils/clusterHelpers'; +import { ClusterItemBase, type ClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; +import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; + +export class VCoreResourceItem extends ClusterItemBase { + iconPath = vscode.Uri.joinPath( + ext.context.extensionUri, + 'resources', + 'from_node_modules', + '@microsoft', + 'vscode-azext-azureutils', + 'resources', + 'azureIcons', + 'MongoClusters.svg', + ); + + constructor( + readonly subscription: AzureSubscription, + cluster: ClusterModel, + ) { + super(cluster); + } + + public async getCredentials(): Promise { + return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + + // Retrieve and validate cluster information (throws if invalid) + const clusterInformation = await getClusterInformationFromAzure( + context, + this.subscription, + this.cluster.resourceGroup!, + this.cluster.name, + ); + + return extractCredentialsFromCluster(context, clusterInformation); + }); + } + + /** + * Retrieves and validates cluster information from Azure. + */ + private async getClusterInformation(context: IActionContext): Promise { + return getClusterInformationFromAzure( + context, + this.subscription, + this.cluster.resourceGroup!, + this.cluster.name, + ); + } + + /** + * Authenticates and connects to the MongoDB cluster. + * @param context The action context. + * @returns An instance of ClustersClient if successful; otherwise, null. + */ + protected async authenticateAndConnect(): Promise { + const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + + ext.outputChannel.appendLine( + l10n.t('Attempting to authenticate with "{cluster}"…', { + cluster: this.cluster.name, + }), + ); + + // Get and validate cluster information + const clusterInformation = await this.getClusterInformation(context); + const credentials = extractCredentialsFromCluster(context, clusterInformation); + + // Prepare wizard context + const wizardContext: AuthenticateWizardContext = { + ...context, + adminUserName: credentials.connectionUser, + resourceName: this.cluster.name, + availableAuthMethods: credentials.availableAuthMethods, + }; + + // Prompt for credentials + const credentialsProvided = await this.promptForCredentials(wizardContext); + if (!credentialsProvided) { + return null; + } + + if (wizardContext.password) { + context.valuesToMask.push(wizardContext.password); + } + + // Cache credentials and attempt connection + CredentialCache.setAuthCredentials( + this.id, + nonNullValue(wizardContext.selectedAuthMethod, 'authMethod'), + nonNullValue(credentials.connectionString), + wizardContext.selectedUserName, + wizardContext.password, + ); + + switch (wizardContext.selectedAuthMethod) { + case AuthMethodId.MicrosoftEntraID: + ext.outputChannel.append(l10n.t('Connecting to the cluster using Entra ID…')); + break; + default: + ext.outputChannel.append( + l10n.t('Connecting to the cluster as "{username}"…', { + username: wizardContext.selectedUserName ?? '', + }), + ); + } + + try { + const clustersClient = await ClustersClient.getClient(this.id); + + ext.outputChannel.appendLine( + l10n.t('Connected to the cluster "{cluster}".', { + cluster: this.cluster.name, + }), + ); + + return clustersClient; + } catch (error) { + ext.outputChannel.appendLine(l10n.t('Error: {error}', { error: (error as Error).message })); + + void vscode.window.showErrorMessage( + l10n.t('Failed to connect to "{cluster}"', { cluster: this.cluster.name }), + { + modal: true, + detail: + l10n.t('Revisit connection details and try again.') + + '\n\n' + + l10n.t('Error: {error}', { error: (error as Error).message }), + }, + ); + + // Clean up failed connection + await ClustersClient.deleteClient(this.id); + CredentialCache.deleteCredentials(this.id); + + return null; + } + }); + + return result ?? null; + } + + /** + * Prompts the user for credentials using a wizard. + * + * @param wizardContext The wizard context. + * @returns True if the wizard completed successfully; false if the user canceled or an error occurred. + */ + private async promptForCredentials(wizardContext: AuthenticateWizardContext): Promise { + const wizard = new AzureWizard(wizardContext, { + promptSteps: [new ChooseAuthMethodStep(), new ProvideUserNameStep(), new ProvidePasswordStep()], + title: l10n.t('Authenticate to connect with your DocumentDB cluster'), + showLoadingPrompt: true, + }); + + // Prompt the user for credentials + await callWithTelemetryAndErrorHandling('connect.promptForCredentials', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + + context.errorHandling.rethrow = true; + context.errorHandling.suppressDisplay = false; + try { + await wizard.prompt(); // This will prompt the user; results are stored in wizardContext + } catch (error) { + if (error instanceof UserCancelledError) { + wizardContext.aborted = true; + } + } + }); + + // Return true if the wizard completed successfully; false otherwise + return !wizardContext.aborted; + } +} From e74c17c4bc87f689f88711187c2ab9b3f2834fa9 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Wed, 27 Aug 2025 21:44:37 +0200 Subject: [PATCH 12/81] fix: npm run lint fix / incorrect nonNullValue import --- .../documentdb/mongo-vcore/VCoreResourceItem.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts index b832ac3fb..8fb7cd423 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts @@ -7,7 +7,6 @@ import { type MongoCluster } from '@azure/arm-mongocluster'; import { AzureWizard, callWithTelemetryAndErrorHandling, - nonNullValue, UserCancelledError, type IActionContext, } from '@microsoft/vscode-azext-utils'; @@ -29,6 +28,7 @@ import { } from '../../../../plugins/service-azure/utils/clusterHelpers'; import { ClusterItemBase, type ClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; +import { nonNullValue } from '../../../../utils/nonNull'; export class VCoreResourceItem extends ClusterItemBase { iconPath = vscode.Uri.joinPath( @@ -117,8 +117,12 @@ export class VCoreResourceItem extends ClusterItemBase { // Cache credentials and attempt connection CredentialCache.setAuthCredentials( this.id, - nonNullValue(wizardContext.selectedAuthMethod, 'authMethod'), - nonNullValue(credentials.connectionString), + nonNullValue( + wizardContext.selectedAuthMethod, + 'wizardContext.selectedAuthMethod', + 'VCoreResourceItem.ts', + ), + nonNullValue(credentials.connectionString, 'credentials.connectionString', 'VCoreResourceItem.ts'), wizardContext.selectedUserName, wizardContext.password, ); From b68c8519bce6aa7578606b44826417b95294d293 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 28 Aug 2025 12:54:35 +0200 Subject: [PATCH 13/81] arm-cosmosdb dependency update --- package-lock.json | 32 ++++++++++---------------------- package.json | 2 +- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3abca134..9d58b04aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@azure/arm-compute": "^22.4.0", - "@azure/arm-cosmosdb": "16.0.0-beta.7", + "@azure/arm-cosmosdb": "16.3.0", "@azure/arm-mongocluster": "1.1.0-beta.1", "@azure/arm-network": "^33.5.0", "@azure/arm-resources": "~6.1.0", @@ -236,35 +236,23 @@ } }, "node_modules/@azure/arm-cosmosdb": { - "version": "16.0.0-beta.7", - "resolved": "https://registry.npmjs.org/@azure/arm-cosmosdb/-/arm-cosmosdb-16.0.0-beta.7.tgz", - "integrity": "sha512-zITOTNZu9Fj8FvCdylN+Lwlei866nVJlYYZDLd+pHltDrgKdNOhyw1xdrs+GYZiKJmURQRwunpW1xPi3UoFg7w==", + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/@azure/arm-cosmosdb/-/arm-cosmosdb-16.3.0.tgz", + "integrity": "sha512-Yix2dqg2jI2nh8Eh69jagvlpjZYVaQ2nm5QuinVTd0NTJdcWAC3Ok8drlDmcJJ2T6MdLE0HsF6ftnADNl2PXMA==", "license": "MIT", "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.6.0", - "@azure/core-client": "^1.7.0", + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", "@azure/core-lro": "^2.5.4", - "@azure/core-paging": "^1.2.0", - "@azure/core-rest-pipeline": "^1.14.0", - "tslib": "^2.2.0" + "@azure/core-paging": "^1.6.2", + "@azure/core-rest-pipeline": "^1.19.0", + "tslib": "^2.8.1" }, "engines": { "node": ">=18.0.0" } }, - "node_modules/@azure/arm-cosmosdb/node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "license": "MIT", - "dependencies": { - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@azure/arm-mongocluster": { "version": "1.1.0-beta.1", "resolved": "https://registry.npmjs.org/@azure/arm-mongocluster/-/arm-mongocluster-1.1.0-beta.1.tgz", diff --git a/package.json b/package.json index 0c9e044ee..ead331ec7 100644 --- a/package.json +++ b/package.json @@ -145,7 +145,7 @@ }, "dependencies": { "@azure/arm-compute": "^22.4.0", - "@azure/arm-cosmosdb": "16.0.0-beta.7", + "@azure/arm-cosmosdb": "16.3.0", "@azure/arm-mongocluster": "1.1.0-beta.1", "@azure/arm-network": "^33.5.0", "@azure/arm-resources": "~6.1.0", From 765805e1282e8ca641b1ed41eac9f788fcf897dd Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 28 Aug 2025 12:55:48 +0200 Subject: [PATCH 14/81] feat: activating Azure Cosmos DB for MongoDB (RU) branch data provider (wip) --- l10n/bundle.l10n.json | 1 + src/documentdb/ClustersExtension.ts | 29 +- src/extensionVariables.ts | 2 + .../mongo-ru/RUBranchDataProvider.ts | 258 ++++++++++++++++++ .../documentdb/mongo-ru/RUCoreResourceItem.ts | 210 ++++++++++++++ .../mongo-vcore/VCoreResourceItem.ts | 3 + 6 files changed, 491 insertions(+), 12 deletions(-) create mode 100644 src/tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider.ts create mode 100644 src/tree/azure-resources-view/documentdb/mongo-ru/RUCoreResourceItem.ts diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index a9aee7cdf..df1a74661 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -52,6 +52,7 @@ "Authenticate using a username and password": "Authenticate using a username and password", "Authenticate using Microsoft Entra ID (Azure AD)": "Authenticate using Microsoft Entra ID (Azure AD)", "Authentication configuration is missing for \"{cluster}\".": "Authentication configuration is missing for \"{cluster}\".", + "Authentication data (primary connection string) is missing for \"{cluster}\".": "Authentication data (primary connection string) is missing for \"{cluster}\".", "Authentication data (properties.connectionString) is missing for \"{cluster}\".": "Authentication data (properties.connectionString) is missing for \"{cluster}\".", "Authentication is required to run this action.": "Authentication is required to run this action.", "Authentication is required to use this migration provider.": "Authentication is required to use this migration provider.", diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index 68ac98e0a..09f6d8346 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -48,11 +48,10 @@ import { ext } from '../extensionVariables'; import { AzureVMDiscoveryProvider } from '../plugins/service-azure-vm/AzureVMDiscoveryProvider'; import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryProvider'; import { DiscoveryService } from '../services/discoveryServices'; +import { RUBranchDataProvider } from '../tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider'; import { VCoreBranchDataProvider } from '../tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider'; import { ConnectionsBranchDataProvider } from '../tree/connections-view/ConnectionsBranchDataProvider'; import { DiscoveryBranchDataProvider } from '../tree/discovery-view/DiscoveryBranchDataProvider'; -import { WorkspaceResourceType } from '../tree/workspace-api/SharedWorkspaceResourceProvider'; -import { ClustersWorkspaceBranchDataProvider } from '../tree/workspace-view/documentdb/ClustersWorkbenchBranchDataProvider'; import { registerCommandWithModalErrors, registerCommandWithTreeNodeUnwrappingAndModalErrors, @@ -121,20 +120,26 @@ export class ClustersExtension implements vscode.Disposable { AzExtResourceType.MongoClusters, ext.azureResourcesVCoreBranchDataProvider, ); - } - - // eslint-disable-next-line no-constant-condition, no-constant-binary-expression - if (false && enableWorkspaceSupport()) { - // on purpose, transition is still in progress - activateContext.telemetry.properties.enabledWorkspace = 'true'; - ext.mongoClustersWorkspaceBranchDataProvider = new ClustersWorkspaceBranchDataProvider(); - ext.rgApiV2.resources.registerWorkspaceResourceBranchDataProvider( - WorkspaceResourceType.MongoClusters, - ext.mongoClustersWorkspaceBranchDataProvider, + ext.azureResourcesRUBranchDataProvider = new RUBranchDataProvider(); + ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( + AzExtResourceType.AzureCosmosDbForMongoDbRu, + ext.azureResourcesRUBranchDataProvider, ); } + // // eslint-disable-next-line no-constant-condition, no-constant-binary-expression + // if (false && enableWorkspaceSupport()) { + // // on purpose, transition is still in progress + // activateContext.telemetry.properties.enabledWorkspace = 'true'; + + // ext.mongoClustersWorkspaceBranchDataProvider = new ClustersWorkspaceBranchDataProvider(); + // ext.rgApiV2.resources.registerWorkspaceResourceBranchDataProvider( + // WorkspaceResourceType.MongoClusters, + // ext.mongoClustersWorkspaceBranchDataProvider, + // ); + // } + this.registerDiscoveryServices(activateContext); this.registerConnectionsTree(activateContext); this.registerDiscoveryTree(activateContext); diff --git a/src/extensionVariables.ts b/src/extensionVariables.ts index 099146b9c..22592ba6c 100644 --- a/src/extensionVariables.ts +++ b/src/extensionVariables.ts @@ -8,6 +8,7 @@ import { type AzureResourcesExtensionApiWithActivity } from '@microsoft/vscode-a import type * as vscode from 'vscode'; import { type DatabasesFileSystem } from './DatabasesFileSystem'; import { type MongoDBLanguageClient } from './documentdb/scrapbook/languageClient'; +import { type RUBranchDataProvider } from './tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider'; import { type VCoreBranchDataProvider } from './tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider'; import { type ConnectionsBranchDataProvider } from './tree/connections-view/ConnectionsBranchDataProvider'; import { type DiscoveryBranchDataProvider } from './tree/discovery-view/DiscoveryBranchDataProvider'; @@ -36,6 +37,7 @@ export namespace ext { // Azure Resources Extension integration // > Azure Resources Extension: "Resources View" export let azureResourcesVCoreBranchDataProvider: VCoreBranchDataProvider; + export let azureResourcesRUBranchDataProvider: RUBranchDataProvider; // > Azure Resources Extension: "Workspace View" // used for the workspace: these are the dedicated providers diff --git a/src/tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider.ts new file mode 100644 index 000000000..b7bc8c388 --- /dev/null +++ b/src/tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider.ts @@ -0,0 +1,258 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; + +import { + callWithTelemetryAndErrorHandling, + createContextValue, + type IActionContext, +} from '@microsoft/vscode-azext-utils'; +import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; +import { MongoClustersExperience } from '../../../../DocumentDBExperiences'; +import { Views } from '../../../../documentdb/Views'; +import { ext } from '../../../../extensionVariables'; +import { type ExtendedTreeDataProvider } from '../../../ExtendedTreeDataProvider'; +import { type TreeElement } from '../../../TreeElement'; +import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../../TreeElementWithContextValue'; +import { isTreeElementWithRetryChildren } from '../../../TreeElementWithRetryChildren'; +import { TreeParentCache } from '../../../TreeParentCache'; +import { type ClusterModel } from '../../../documentdb/ClusterModel'; +import { RUResourceItem } from './RUCoreResourceItem'; + +// export type VCoreResource = AzureResource & +// GenericResource & { +// readonly raw: GenericResource; // Resource object from Azure SDK +// }; + +export class RUBranchDataProvider + extends vscode.Disposable + implements BranchDataProvider, ExtendedTreeDataProvider +{ + /** + * Cache for tracking parent-child relationships to support the getParent method. + */ + private readonly parentCache = new TreeParentCache(); + + /** + * Caches nodes whose getChildren() call has failed. + * + * This cache prevents repeated attempts to fetch children for nodes that have previously failed, + * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary + * repeated calls until the error state is explicitly cleared. + * + * Key: Node ID (parent) + * Value: Array of TreeElement representing the failed children (usually an error node) + */ + private readonly errorNodeCache = new Map(); + + private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter< + void | TreeElement | TreeElement[] | null | undefined + >(); + + /** + * From vscode.TreeDataProvider: + * + * An optional event to signal that an element or root has changed. + * This will trigger the view to update the changed element/root and its children recursively (if shown). + * To signal that root has changed, do not pass any argument or pass `undefined` or `null`. + */ + get onDidChangeTreeData(): vscode.Event { + return this.onDidChangeTreeDataEmitter.event; + } + + /** + * Removes a node's error state from the failed node cache. + * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. + * If not reset, the cached error children will always be returned for this node. + * @param nodeId The ID of the node to clear from the failed node cache. + */ + resetNodeErrorState(nodeId: string): void { + this.errorNodeCache.delete(nodeId); + } + + constructor() { + super(() => { + this.onDidChangeTreeDataEmitter.dispose(); + }); + } + + async getChildren(element: TreeElement): Promise { + return await callWithTelemetryAndErrorHandling('getChildren', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'ru'; + + // 1. Check if we have a cached error for this element + // + // This prevents repeated attempts to fetch children for nodes that have previously failed + // (e.g., due to invalid credentials or connection issues). + if (element.id && this.errorNodeCache.has(element.id)) { + context.telemetry.properties.usedCachedErrorNode = 'true'; + return this.errorNodeCache.get(element.id); + } + + context.telemetry.properties.parentNodeContext = (await element.getTreeItem()).contextValue; + + // 2. Fetch the children of the current element + const children = await element.getChildren?.(); + context.telemetry.measurements.childrenCount = children?.length ?? 0; + + // 3. Check if the returned children contain an error node + // This means the operation failed (eg. authentication) + if (isTreeElementWithRetryChildren(element) && element.hasRetryNode(children)) { + // Optional: append helpful nodes to the error node + // Here is an example: + // children?.push( + // createGenericElementWithContext({ + // contextValue: 'error', + // id: `${element.id}/updateCredentials`, + // label: vscode.l10n.t('Click here to update credentials'), + // iconPath: new vscode.ThemeIcon('key'), + // commandId: 'vscode-documentdb.command.connectionsView.updateCredentials', + // commandArgs: [element], + // }), + // ); + + // Store the error node(s) in our cache for future refreshes + this.errorNodeCache.set(element.id, children ?? []); + context.telemetry.properties.cachedErrorNode = 'true'; + } + + return children?.map((child) => { + if (child.id) { + if (isTreeElementWithContextValue(child)) { + this.appendContextValues(child, Views.AzureResourcesView, 'documentdbBranch'); + } + + // Register parent-child relationship in the cache + if (element.id && child.id) { + this.parentCache.registerRelationship(element, child); + } + + return ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as TreeElement; + } + return child; + }); + }); + } + + /** + * Gets the parent of a tree element. Required for TreeView.reveal functionality. + * + * @param element The element for which to find the parent + * @returns The parent element, or undefined if the element is a root item + */ + getParent(element: TreeElement): TreeElement | null | undefined { + return this.parentCache.getParent(element); + } + + /** + * Finds a node in the tree by its ID. + * + * @param id The ID of the node to find + * @returns A Promise that resolves to the found node or undefined if not found + */ + async findNodeById(id: string): Promise { + return this.parentCache.findNodeById(id, async (element) => { + if (!element.getChildren) { + return undefined; + } + return element.getChildren(); + }); + } + + /** + * Refreshes the tree data. + * This will trigger the view to update the changed element/root and its children recursively (if shown). + * + * @param element The element to refresh. If not provided, the entire tree will be refreshed. + * + * Note: This implementation handles both current and stale element references. + * If a stale reference is provided but has an ID, it will attempt to find the current + * reference in the tree before refreshing. + */ + refresh(element?: TreeElement): void { + if (element?.id) { + // We have an element with an ID + + // Handle potential stale reference issue: + // VS Code's TreeView API relies on object identity (reference equality), + // not just ID equality. Find the current reference before clearing the cache. + void this.findAndRefreshCurrentElement(element); + } else { + // No element or no ID, refresh the entire tree + this.parentCache.clear(); + this.onDidChangeTreeDataEmitter.fire(element); + } + } + + /** + * Helper method to find the current instance of an element by ID and refresh it. + * This addresses the issue where stale references won't properly refresh the tree. + * + * @param element Potentially stale element reference + */ + private async findAndRefreshCurrentElement(element: TreeElement): Promise { + try { + // First try to find the current instance with this ID + const currentElement = await this.findNodeById(element.id!); + + // AFTER finding the element, update the cache: + // 1. Clear the cache for this ID to remove any stale references + // (drops the element and its children) + this.parentCache.clear(element.id!); + // 2. Re-register the node (but not its children) + if (currentElement?.id) { + this.parentCache.registerNode(currentElement); + } + + if (currentElement) { + // We found the current instance, use it for refresh + this.onDidChangeTreeDataEmitter.fire(currentElement); + } else { + // Current instance not found, fallback to using the provided element + // This may not work if it's truly a stale reference, but we've tried our best + this.onDidChangeTreeDataEmitter.fire(element); + } + } catch (error) { + // If anything goes wrong during the lookup, still attempt the refresh with the original element + // and clear the cache for this ID + console.log(`Error finding current element for refresh: ${error}`); + this.parentCache.clear(element.id!); + this.onDidChangeTreeDataEmitter.fire(element); + } + } + + getResourceItem(resource: AzureResource): TreeElement | Thenable { + const clusterInfo: ClusterModel = { + ...resource, + dbExperience: MongoClustersExperience, + } as ClusterModel; + + const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); + + return clusterItem; + } + + async getTreeItem(element: TreeElement): Promise { + /** + * Note that due to caching done by the TreeElementStateManager, + * changes to the TreeItem added here might get lost + */ + return element.getTreeItem(); + } + + appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { + // all items returned from this view need that context value assigned + const contextValues: string[] = contextValuesToAppend; + + // keep original contextValues if any + if (treeItem.contextValue) { + contextValues.push(treeItem.contextValue); + } + + treeItem.contextValue = createContextValue(contextValues); + } +} diff --git a/src/tree/azure-resources-view/documentdb/mongo-ru/RUCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/mongo-ru/RUCoreResourceItem.ts new file mode 100644 index 000000000..eb2b12bca --- /dev/null +++ b/src/tree/azure-resources-view/documentdb/mongo-ru/RUCoreResourceItem.ts @@ -0,0 +1,210 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; +import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; +import { AuthMethodId } from '../../../../documentdb/auth/AuthMethod'; +import { ClustersClient } from '../../../../documentdb/ClustersClient'; +import { CredentialCache } from '../../../../documentdb/CredentialCache'; +import { maskSensitiveValuesInTelemetry } from '../../../../documentdb/utils/connectionStringHelpers'; +import { DocumentDBConnectionString } from '../../../../documentdb/utils/DocumentDBConnectionString'; +import { Views } from '../../../../documentdb/Views'; +import { ext } from '../../../../extensionVariables'; +import { createCosmosDBManagementClient } from '../../../../utils/azureClients'; +import { nonNullValue } from '../../../../utils/nonNull'; +import { ClusterItemBase, type ClusterCredentials } from '../../../documentdb/ClusterItemBase'; +import { type ClusterModel } from '../../../documentdb/ClusterModel'; + +export class RUResourceItem extends ClusterItemBase { + iconPath = vscode.Uri.joinPath( + ext.context.extensionUri, + 'resources', + 'from_node_modules', + '@microsoft', + 'vscode-azext-azureutils', + 'resources', + 'azureIcons', + 'MongoClusters.svg', + ); + + constructor( + readonly subscription: AzureSubscription, + cluster: ClusterModel, + ) { + super(cluster); + } + + public async getCredentials(): Promise { + return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'ru'; + + const credentials = await this.getRUClusterCredentialsFromAzure( + context, + this.subscription, + this.cluster.resourceGroup!, + this.cluster.name, + ); + + return credentials; + }); + } + + /** + * Authenticates and connects to the Azure Cosmos DB for MongoDB (RU) cluster. + * No authentication prompt as we're accessing the cluster with the default credentials. + * + * @param context The action context. + * @returns An instance of ClustersClient if successful; otherwise, null. + */ + protected async authenticateAndConnect(): Promise { + const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'ru'; + + ext.outputChannel.appendLine( + l10n.t('Attempting to authenticate with "{cluster}"…', { + cluster: this.cluster.name, + }), + ); + + const credentials = await this.getRUClusterCredentialsFromAzure( + context, + this.subscription, + this.cluster.resourceGroup!, + this.cluster.name, + ); + + // Cache credentials and attempt connection + CredentialCache.setAuthCredentials( + this.id, + credentials.selectedAuthMethod!, + nonNullValue(credentials.connectionString, 'credentials.connectionString', 'VCoreResourceItem.ts'), + credentials.connectionUser, + credentials.connectionPassword, + ); + + ext.outputChannel.append( + l10n.t('Connecting to the cluster as "{username}"…', { + username: credentials.connectionUser ?? '', + }), + ); + + try { + const clustersClient = await ClustersClient.getClient(this.id); + + ext.outputChannel.appendLine( + l10n.t('Connected to the cluster "{cluster}".', { + cluster: this.cluster.name, + }), + ); + + return clustersClient; + } catch (error) { + ext.outputChannel.appendLine(l10n.t('Error: {error}', { error: (error as Error).message })); + + void vscode.window.showErrorMessage( + l10n.t('Failed to connect to "{cluster}"', { cluster: this.cluster.name }), + { + modal: true, + detail: + l10n.t('Revisit connection details and try again.') + + '\n\n' + + l10n.t('Error: {error}', { error: (error as Error).message }), + }, + ); + + // Clean up failed connection + await ClustersClient.deleteClient(this.id); + CredentialCache.deleteCredentials(this.id); + + return null; + } + }); + + return result ?? null; + } + + async getRUClusterCredentialsFromAzure( + context: IActionContext, + subscription: AzureSubscription, + resourceGroup: string, + clusterName: string, + ): Promise { + // subscription comes from different azure packages in callers; cast here intentionally + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any + const managementClient = await createCosmosDBManagementClient(context, subscription as any); + + // Leaving this for future maintainers in case cluster information is needed + // (becomes relevant once/when/if new authentication methods are added) + // const clusterInformation = await managementClient.databaseAccounts.get(resourceGroup, clusterName); + + const connectionStringsList = await managementClient.databaseAccounts.listConnectionStrings( + resourceGroup as string, + clusterName, + ); + + /** + * databaseAccounts.listConnectionStrings returns an array of (typically 4) connection string objects: + * + * interface DatabaseAccountConnectionString { + * readonly connectionString?: string; + * readonly description?: string; + * readonly keyKind?: Kind; + * readonly type?: Type; + * } + * + * Today we're interested in the one where "keyKind" is "Primary", but this might change in the future. + * Other known values: + * - Primary + * - Secondary + * - PrimaryReadonly + * - SecondaryReadonly + */ + + // More efficient approach + const primaryConnectionString = connectionStringsList?.connectionStrings?.find( + (cs) => cs.keyKind?.toLowerCase() === 'primary', + )?.connectionString; + + // Validate connection string's presence + if (!primaryConnectionString) { + context.telemetry.properties.error = 'missing-connection-string'; + throw new Error( + l10n.t('Authentication data (primary connection string) is missing for "{cluster}".', { + cluster: clusterName, + }), + ); + } + + context.valuesToMask.push(primaryConnectionString); + + const parsedCS = new DocumentDBConnectionString(primaryConnectionString); + maskSensitiveValuesInTelemetry(context, parsedCS); + + const username = parsedCS.username; + const password = parsedCS.password; + // do not keep secrets in the connection string + parsedCS.username = ''; + parsedCS.password = ''; + + // the connection string received sometimes contains an 'appName' entry + // with a value that's not escaped, let's just remove it as we don't use + // it here anyway. + parsedCS.searchParams.delete('appName'); + + const clusterCredentials: ClusterCredentials = { + connectionString: parsedCS.toString(), + connectionUser: username, + connectionPassword: password, + availableAuthMethods: [AuthMethodId.NativeAuth], + selectedAuthMethod: AuthMethodId.NativeAuth, + }; + + return clusterCredentials; + } +} diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts index 8fb7cd423..2fc16fec6 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts @@ -52,6 +52,7 @@ export class VCoreResourceItem extends ClusterItemBase { public async getCredentials(): Promise { return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'documentdb'; // Retrieve and validate cluster information (throws if invalid) const clusterInformation = await getClusterInformationFromAzure( @@ -85,6 +86,7 @@ export class VCoreResourceItem extends ClusterItemBase { protected async authenticateAndConnect(): Promise { const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'documentdb'; ext.outputChannel.appendLine( l10n.t('Attempting to authenticate with "{cluster}"…', { @@ -190,6 +192,7 @@ export class VCoreResourceItem extends ClusterItemBase { // Prompt the user for credentials await callWithTelemetryAndErrorHandling('connect.promptForCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'documentdb'; context.errorHandling.rethrow = true; context.errorHandling.suppressDisplay = false; From 10c7631c7dbcd01e0bf067005cdf145c02f3f4ca Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 28 Aug 2025 13:24:54 +0200 Subject: [PATCH 15/81] Dynamic Azure Resources branch data provider registration --- src/documentdb/ClustersExtension.ts | 83 ++++++++++++++++------------- 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index 09f6d8346..3414eebf3 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -56,7 +56,6 @@ import { registerCommandWithModalErrors, registerCommandWithTreeNodeUnwrappingAndModalErrors, } from '../utils/commandErrorHandling'; -import { enableMongoVCoreSupport, enableWorkspaceSupport } from './activationConditions'; import { registerScrapbookCommands } from './scrapbook/registerScrapbookCommands'; import { Views } from './Views'; @@ -95,51 +94,59 @@ export class ClustersExtension implements vscode.Disposable { ext.context.subscriptions.push(treeView); } - async activateClustersSupport(): Promise { - await callWithTelemetryAndErrorHandling( - 'clustersExtension.activate', - async (activateContext: IActionContext) => { - activateContext.telemetry.properties.isActivationEvent = 'true'; + async registerAzureResourcesIntegration(activateContext: IActionContext): Promise { + // Dynamic registration so this file compiles when the enum members aren't present + // This is how we detect whether the update to Azure Resources has been deployed - // TODO: Implement https://github.com/microsoft/vscode-documentdb/issues/30 - // for staged hand-over from Azure Databases to this DocumentDB extension + const ruResourceType = (AzExtResourceType as unknown as Record)['AzureCosmosDbForMongoDbRu']; + const documentDbResourceType = (AzExtResourceType as unknown as Record)['MongoClusters']; - if (enableMongoVCoreSupport() || enableWorkspaceSupport()) { - ext.rgApiV2 = (await getAzureResourcesExtensionApi( - ext.context, - '2.0.0', - )) as AzureResourcesExtensionApiWithActivity; - } + if (!ruResourceType || !documentDbResourceType) { + activateContext.telemetry.properties.skippedAzureResourcesActivation = 'true'; + console.log( + 'Azure resource types not available in this environment; skipping Azure Resources provider registration.', + ); - if (enableMongoVCoreSupport()) { - // on purpose, transition is still in progress - activateContext.telemetry.properties.enabledVCore = 'true'; + return; + } - ext.azureResourcesVCoreBranchDataProvider = new VCoreBranchDataProvider(); - ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( - AzExtResourceType.MongoClusters, - ext.azureResourcesVCoreBranchDataProvider, - ); + ext.rgApiV2 = (await getAzureResourcesExtensionApi( + ext.context, + '2.0.0', + )) as AzureResourcesExtensionApiWithActivity; - ext.azureResourcesRUBranchDataProvider = new RUBranchDataProvider(); - ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( - AzExtResourceType.AzureCosmosDbForMongoDbRu, - ext.azureResourcesRUBranchDataProvider, - ); - } + ext.azureResourcesVCoreBranchDataProvider = new VCoreBranchDataProvider(); + ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( + documentDbResourceType as unknown as AzExtResourceType, + ext.azureResourcesVCoreBranchDataProvider, + ); - // // eslint-disable-next-line no-constant-condition, no-constant-binary-expression - // if (false && enableWorkspaceSupport()) { - // // on purpose, transition is still in progress - // activateContext.telemetry.properties.enabledWorkspace = 'true'; + ext.azureResourcesRUBranchDataProvider = new RUBranchDataProvider(); + ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( + ruResourceType as unknown as AzExtResourceType, + ext.azureResourcesRUBranchDataProvider, + ); - // ext.mongoClustersWorkspaceBranchDataProvider = new ClustersWorkspaceBranchDataProvider(); - // ext.rgApiV2.resources.registerWorkspaceResourceBranchDataProvider( - // WorkspaceResourceType.MongoClusters, - // ext.mongoClustersWorkspaceBranchDataProvider, - // ); - // } + // // eslint-disable-next-line no-constant-condition, no-constant-binary-expression + // if (false && enableWorkspaceSupport()) { + // // on purpose, transition is still in progress + // activateContext.telemetry.properties.enabledWorkspace = 'true'; + + // ext.mongoClustersWorkspaceBranchDataProvider = new ClustersWorkspaceBranchDataProvider(); + // ext.rgApiV2.resources.registerWorkspaceResourceBranchDataProvider( + // WorkspaceResourceType.MongoClusters, + // ext.mongoClustersWorkspaceBranchDataProvider, + // ); + // } + } + + async activateClustersSupport(): Promise { + await callWithTelemetryAndErrorHandling( + 'clustersExtension.activate', + async (activateContext: IActionContext) => { + activateContext.telemetry.properties.isActivationEvent = 'true'; + await this.registerAzureResourcesIntegration(activateContext); this.registerDiscoveryServices(activateContext); this.registerConnectionsTree(activateContext); this.registerDiscoveryTree(activateContext); From e55eb86e1d3846edab30ac03ccf8871116067dc6 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 28 Aug 2025 14:02:08 +0200 Subject: [PATCH 16/81] refactor: simplified tree/azure-resources-view file structure --- src/commands/launchShell/launchShell.ts | 4 +-- src/documentdb/ClustersExtension.ts | 4 +-- src/extensionVariables.ts | 4 +-- .../MongoVCoreBranchDataProvider.ts | 12 ++++----- .../MongoVCoreResourceItem.ts | 24 ++++++++--------- .../VCoreBranchDataProvider.ts | 18 ++++++------- .../{mongo-vcore => }/VCoreResourceItem.ts | 26 +++++++++---------- .../mongo-ru/MongoRUResourceItem.ts | 16 ++++++------ .../mongo-ru/RUBranchDataProvider.ts | 18 ++++++------- .../mongo-ru/RUCoreResourceItem.ts | 22 ++++++++-------- 10 files changed, 74 insertions(+), 74 deletions(-) rename src/tree/azure-resources-view/documentdb/{mongo-vcore => }/MongoVCoreBranchDataProvider.ts (93%) rename src/tree/azure-resources-view/documentdb/{mongo-vcore => }/MongoVCoreResourceItem.ts (90%) rename src/tree/azure-resources-view/documentdb/{mongo-vcore => }/VCoreBranchDataProvider.ts (94%) rename src/tree/azure-resources-view/documentdb/{mongo-vcore => }/VCoreResourceItem.ts (88%) rename src/tree/azure-resources-view/{documentdb => }/mongo-ru/MongoRUResourceItem.ts (91%) rename src/tree/azure-resources-view/{documentdb => }/mongo-ru/RUBranchDataProvider.ts (94%) rename src/tree/azure-resources-view/{documentdb => }/mongo-ru/RUCoreResourceItem.ts (91%) diff --git a/src/commands/launchShell/launchShell.ts b/src/commands/launchShell/launchShell.ts index c1a3a701c..3b0b30bbf 100644 --- a/src/commands/launchShell/launchShell.ts +++ b/src/commands/launchShell/launchShell.ts @@ -12,8 +12,8 @@ import { ClustersClient } from '../../documentdb/ClustersClient'; import { maskSensitiveValuesInTelemetry } from '../../documentdb/utils/connectionStringHelpers'; import { DocumentDBConnectionString } from '../../documentdb/utils/DocumentDBConnectionString'; import { ext } from '../../extensionVariables'; -import { MongoRUResourceItem } from '../../tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem'; -import { MongoVCoreResourceItem } from '../../tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem'; +import { MongoVCoreResourceItem } from '../../tree/azure-resources-view/documentdb/MongoVCoreResourceItem'; +import { MongoRUResourceItem } from '../../tree/azure-resources-view/mongo-ru/MongoRUResourceItem'; import { ClusterItemBase } from '../../tree/documentdb/ClusterItemBase'; import { type CollectionItem } from '../../tree/documentdb/CollectionItem'; import { type DatabaseItem } from '../../tree/documentdb/DatabaseItem'; diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index 3414eebf3..2bd40439b 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -48,8 +48,8 @@ import { ext } from '../extensionVariables'; import { AzureVMDiscoveryProvider } from '../plugins/service-azure-vm/AzureVMDiscoveryProvider'; import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryProvider'; import { DiscoveryService } from '../services/discoveryServices'; -import { RUBranchDataProvider } from '../tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider'; -import { VCoreBranchDataProvider } from '../tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider'; +import { VCoreBranchDataProvider } from '../tree/azure-resources-view/documentdb/VCoreBranchDataProvider'; +import { RUBranchDataProvider } from '../tree/azure-resources-view/mongo-ru/RUBranchDataProvider'; import { ConnectionsBranchDataProvider } from '../tree/connections-view/ConnectionsBranchDataProvider'; import { DiscoveryBranchDataProvider } from '../tree/discovery-view/DiscoveryBranchDataProvider'; import { diff --git a/src/extensionVariables.ts b/src/extensionVariables.ts index 22592ba6c..646f6077a 100644 --- a/src/extensionVariables.ts +++ b/src/extensionVariables.ts @@ -8,8 +8,8 @@ import { type AzureResourcesExtensionApiWithActivity } from '@microsoft/vscode-a import type * as vscode from 'vscode'; import { type DatabasesFileSystem } from './DatabasesFileSystem'; import { type MongoDBLanguageClient } from './documentdb/scrapbook/languageClient'; -import { type RUBranchDataProvider } from './tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider'; -import { type VCoreBranchDataProvider } from './tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider'; +import { type VCoreBranchDataProvider } from './tree/azure-resources-view/documentdb/VCoreBranchDataProvider'; +import { type RUBranchDataProvider } from './tree/azure-resources-view/mongo-ru/RUBranchDataProvider'; import { type ConnectionsBranchDataProvider } from './tree/connections-view/ConnectionsBranchDataProvider'; import { type DiscoveryBranchDataProvider } from './tree/discovery-view/DiscoveryBranchDataProvider'; import { type TreeElement } from './tree/TreeElement'; diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/MongoVCoreBranchDataProvider.ts similarity index 93% rename from src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider.ts rename to src/tree/azure-resources-view/documentdb/MongoVCoreBranchDataProvider.ts index 4be7965c7..1feed0b8e 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/MongoVCoreBranchDataProvider.ts @@ -7,12 +7,12 @@ import { type GenericResource } from '@azure/arm-resources'; import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type AzureSubscription } from '@microsoft/vscode-azureresources-api'; -import { API, MongoClustersExperience } from '../../../../DocumentDBExperiences'; -import { createMongoClustersManagementClient } from '../../../../utils/azureClients'; -import { nonNullProp } from '../../../../utils/nonNull'; -import { BaseCachedBranchDataProvider } from '../../../BaseCachedBranchDataProvider'; -import { type ClusterModel } from '../../../documentdb/ClusterModel'; -import { type TreeElement } from '../../../TreeElement'; +import { API, MongoClustersExperience } from '../../../DocumentDBExperiences'; +import { createMongoClustersManagementClient } from '../../../utils/azureClients'; +import { nonNullProp } from '../../../utils/nonNull'; +import { BaseCachedBranchDataProvider } from '../../BaseCachedBranchDataProvider'; +import { type ClusterModel } from '../../documentdb/ClusterModel'; +import { type TreeElement } from '../../TreeElement'; import { MongoVCoreResourceItem } from './MongoVCoreResourceItem'; export type MongoVCoreResource = AzureResource & diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/MongoVCoreResourceItem.ts similarity index 90% rename from src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts rename to src/tree/azure-resources-view/documentdb/MongoVCoreResourceItem.ts index 0a47319ba..eefb7ab6d 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/MongoVCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/MongoVCoreResourceItem.ts @@ -12,18 +12,18 @@ import { import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { ClustersClient } from '../../../../documentdb/ClustersClient'; -import { CredentialCache } from '../../../../documentdb/CredentialCache'; -import { maskSensitiveValuesInTelemetry } from '../../../../documentdb/utils/connectionStringHelpers'; -import { DocumentDBConnectionString } from '../../../../documentdb/utils/DocumentDBConnectionString'; -import { type AuthenticateWizardContext } from '../../../../documentdb/wizards/authenticate/AuthenticateWizardContext'; -import { ProvidePasswordStep } from '../../../../documentdb/wizards/authenticate/ProvidePasswordStep'; -import { ProvideUserNameStep } from '../../../../documentdb/wizards/authenticate/ProvideUsernameStep'; -import { ext } from '../../../../extensionVariables'; -import { createMongoClustersManagementClient } from '../../../../utils/azureClients'; -import { nonNullProp, nonNullValue } from '../../../../utils/nonNull'; -import { ClusterItemBase, type ClusterCredentials } from '../../../documentdb/ClusterItemBase'; -import { type ClusterModel } from '../../../documentdb/ClusterModel'; +import { ClustersClient } from '../../../documentdb/ClustersClient'; +import { CredentialCache } from '../../../documentdb/CredentialCache'; +import { maskSensitiveValuesInTelemetry } from '../../../documentdb/utils/connectionStringHelpers'; +import { DocumentDBConnectionString } from '../../../documentdb/utils/DocumentDBConnectionString'; +import { type AuthenticateWizardContext } from '../../../documentdb/wizards/authenticate/AuthenticateWizardContext'; +import { ProvidePasswordStep } from '../../../documentdb/wizards/authenticate/ProvidePasswordStep'; +import { ProvideUserNameStep } from '../../../documentdb/wizards/authenticate/ProvideUsernameStep'; +import { ext } from '../../../extensionVariables'; +import { createMongoClustersManagementClient } from '../../../utils/azureClients'; +import { nonNullProp, nonNullValue } from '../../../utils/nonNull'; +import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; +import { type ClusterModel } from '../../documentdb/ClusterModel'; export class MongoVCoreResourceItem extends ClusterItemBase { public getCredentials(): Promise { diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts similarity index 94% rename from src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts rename to src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index ce3eeff9c..9dd071d0a 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -11,15 +11,15 @@ import { type IActionContext, } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; -import { MongoClustersExperience } from '../../../../DocumentDBExperiences'; -import { Views } from '../../../../documentdb/Views'; -import { ext } from '../../../../extensionVariables'; -import { type ExtendedTreeDataProvider } from '../../../ExtendedTreeDataProvider'; -import { type TreeElement } from '../../../TreeElement'; -import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../../TreeElementWithContextValue'; -import { isTreeElementWithRetryChildren } from '../../../TreeElementWithRetryChildren'; -import { TreeParentCache } from '../../../TreeParentCache'; -import { type ClusterModel } from '../../../documentdb/ClusterModel'; +import { MongoClustersExperience } from '../../../DocumentDBExperiences'; +import { Views } from '../../../documentdb/Views'; +import { ext } from '../../../extensionVariables'; +import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; +import { type TreeElement } from '../../TreeElement'; +import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; +import { isTreeElementWithRetryChildren } from '../../TreeElementWithRetryChildren'; +import { TreeParentCache } from '../../TreeParentCache'; +import { type ClusterModel } from '../../documentdb/ClusterModel'; import { VCoreResourceItem } from './VCoreResourceItem'; // export type VCoreResource = AzureResource & diff --git a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts similarity index 88% rename from src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts rename to src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts index 2fc16fec6..856fef9a3 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-vcore/VCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts @@ -13,22 +13,22 @@ import { import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { AuthMethodId } from '../../../../documentdb/auth/AuthMethod'; -import { ClustersClient } from '../../../../documentdb/ClustersClient'; -import { CredentialCache } from '../../../../documentdb/CredentialCache'; -import { Views } from '../../../../documentdb/Views'; -import { type AuthenticateWizardContext } from '../../../../documentdb/wizards/authenticate/AuthenticateWizardContext'; -import { ChooseAuthMethodStep } from '../../../../documentdb/wizards/authenticate/ChooseAuthMethodStep'; -import { ProvidePasswordStep } from '../../../../documentdb/wizards/authenticate/ProvidePasswordStep'; -import { ProvideUserNameStep } from '../../../../documentdb/wizards/authenticate/ProvideUsernameStep'; -import { ext } from '../../../../extensionVariables'; +import { AuthMethodId } from '../../../documentdb/auth/AuthMethod'; +import { ClustersClient } from '../../../documentdb/ClustersClient'; +import { CredentialCache } from '../../../documentdb/CredentialCache'; +import { Views } from '../../../documentdb/Views'; +import { type AuthenticateWizardContext } from '../../../documentdb/wizards/authenticate/AuthenticateWizardContext'; +import { ChooseAuthMethodStep } from '../../../documentdb/wizards/authenticate/ChooseAuthMethodStep'; +import { ProvidePasswordStep } from '../../../documentdb/wizards/authenticate/ProvidePasswordStep'; +import { ProvideUserNameStep } from '../../../documentdb/wizards/authenticate/ProvideUsernameStep'; +import { ext } from '../../../extensionVariables'; import { extractCredentialsFromCluster, getClusterInformationFromAzure, -} from '../../../../plugins/service-azure/utils/clusterHelpers'; -import { ClusterItemBase, type ClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; -import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; -import { nonNullValue } from '../../../../utils/nonNull'; +} from '../../../plugins/service-azure/utils/clusterHelpers'; +import { nonNullValue } from '../../../utils/nonNull'; +import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; +import { type ClusterModel } from '../../documentdb/ClusterModel'; export class VCoreResourceItem extends ClusterItemBase { iconPath = vscode.Uri.joinPath( diff --git a/src/tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem.ts b/src/tree/azure-resources-view/mongo-ru/MongoRUResourceItem.ts similarity index 91% rename from src/tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem.ts rename to src/tree/azure-resources-view/mongo-ru/MongoRUResourceItem.ts index 9ac608193..2d41b247b 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-ru/MongoRUResourceItem.ts +++ b/src/tree/azure-resources-view/mongo-ru/MongoRUResourceItem.ts @@ -7,14 +7,14 @@ import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microso import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { ClustersClient } from '../../../../documentdb/ClustersClient'; -import { CredentialCache } from '../../../../documentdb/CredentialCache'; -import { DocumentDBConnectionString } from '../../../../documentdb/utils/DocumentDBConnectionString'; -import { ext } from '../../../../extensionVariables'; -import { createCosmosDBManagementClient } from '../../../../utils/azureClients'; -import { nonNullProp } from '../../../../utils/nonNull'; -import { ClusterItemBase, type ClusterCredentials } from '../../../documentdb/ClusterItemBase'; -import { type ClusterModel } from '../../../documentdb/ClusterModel'; +import { ClustersClient } from '../../../documentdb/ClustersClient'; +import { CredentialCache } from '../../../documentdb/CredentialCache'; +import { DocumentDBConnectionString } from '../../../documentdb/utils/DocumentDBConnectionString'; +import { ext } from '../../../extensionVariables'; +import { createCosmosDBManagementClient } from '../../../utils/azureClients'; +import { nonNullProp } from '../../../utils/nonNull'; +import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; +import { type ClusterModel } from '../../documentdb/ClusterModel'; export class MongoRUResourceItem extends ClusterItemBase { public getCredentials(): Promise { diff --git a/src/tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts similarity index 94% rename from src/tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider.ts rename to src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index b7bc8c388..4b41e438c 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -11,15 +11,15 @@ import { type IActionContext, } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; -import { MongoClustersExperience } from '../../../../DocumentDBExperiences'; -import { Views } from '../../../../documentdb/Views'; -import { ext } from '../../../../extensionVariables'; -import { type ExtendedTreeDataProvider } from '../../../ExtendedTreeDataProvider'; -import { type TreeElement } from '../../../TreeElement'; -import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../../TreeElementWithContextValue'; -import { isTreeElementWithRetryChildren } from '../../../TreeElementWithRetryChildren'; -import { TreeParentCache } from '../../../TreeParentCache'; -import { type ClusterModel } from '../../../documentdb/ClusterModel'; +import { MongoClustersExperience } from '../../../DocumentDBExperiences'; +import { Views } from '../../../documentdb/Views'; +import { ext } from '../../../extensionVariables'; +import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; +import { type TreeElement } from '../../TreeElement'; +import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; +import { isTreeElementWithRetryChildren } from '../../TreeElementWithRetryChildren'; +import { TreeParentCache } from '../../TreeParentCache'; +import { type ClusterModel } from '../../documentdb/ClusterModel'; import { RUResourceItem } from './RUCoreResourceItem'; // export type VCoreResource = AzureResource & diff --git a/src/tree/azure-resources-view/documentdb/mongo-ru/RUCoreResourceItem.ts b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts similarity index 91% rename from src/tree/azure-resources-view/documentdb/mongo-ru/RUCoreResourceItem.ts rename to src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts index eb2b12bca..8cb469a37 100644 --- a/src/tree/azure-resources-view/documentdb/mongo-ru/RUCoreResourceItem.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts @@ -7,17 +7,17 @@ import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microso import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { AuthMethodId } from '../../../../documentdb/auth/AuthMethod'; -import { ClustersClient } from '../../../../documentdb/ClustersClient'; -import { CredentialCache } from '../../../../documentdb/CredentialCache'; -import { maskSensitiveValuesInTelemetry } from '../../../../documentdb/utils/connectionStringHelpers'; -import { DocumentDBConnectionString } from '../../../../documentdb/utils/DocumentDBConnectionString'; -import { Views } from '../../../../documentdb/Views'; -import { ext } from '../../../../extensionVariables'; -import { createCosmosDBManagementClient } from '../../../../utils/azureClients'; -import { nonNullValue } from '../../../../utils/nonNull'; -import { ClusterItemBase, type ClusterCredentials } from '../../../documentdb/ClusterItemBase'; -import { type ClusterModel } from '../../../documentdb/ClusterModel'; +import { AuthMethodId } from '../../../documentdb/auth/AuthMethod'; +import { ClustersClient } from '../../../documentdb/ClustersClient'; +import { CredentialCache } from '../../../documentdb/CredentialCache'; +import { maskSensitiveValuesInTelemetry } from '../../../documentdb/utils/connectionStringHelpers'; +import { DocumentDBConnectionString } from '../../../documentdb/utils/DocumentDBConnectionString'; +import { Views } from '../../../documentdb/Views'; +import { ext } from '../../../extensionVariables'; +import { createCosmosDBManagementClient } from '../../../utils/azureClients'; +import { nonNullValue } from '../../../utils/nonNull'; +import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; +import { type ClusterModel } from '../../documentdb/ClusterModel'; export class RUResourceItem extends ClusterItemBase { iconPath = vscode.Uri.joinPath( From 3682057d62799d5e244427b02b8ea91b1d678aa3 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 28 Aug 2025 15:50:38 +0200 Subject: [PATCH 17/81] wip: resource metadata loading for vCore --- .../documentdb/VCoreBranchDataProvider.ts | 155 ++++++++++++++++-- 1 file changed, 141 insertions(+), 14 deletions(-) diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 9dd071d0a..56aa53aec 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -5,15 +5,22 @@ import * as vscode from 'vscode'; +import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; import { callWithTelemetryAndErrorHandling, createContextValue, type IActionContext, } from '@microsoft/vscode-azext-utils'; -import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; -import { MongoClustersExperience } from '../../../DocumentDBExperiences'; +import { + type AzureResource, + type AzureSubscription, + type BranchDataProvider, +} from '@microsoft/vscode-azureresources-api'; +import { API, MongoClustersExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; import { ext } from '../../../extensionVariables'; +import { createMongoClustersManagementClient } from '../../../utils/azureClients'; +import { nonNullProp } from '../../../utils/nonNull'; import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; import { type TreeElement } from '../../TreeElement'; import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; @@ -22,15 +29,15 @@ import { TreeParentCache } from '../../TreeParentCache'; import { type ClusterModel } from '../../documentdb/ClusterModel'; import { VCoreResourceItem } from './VCoreResourceItem'; -// export type VCoreResource = AzureResource & -// GenericResource & { -// readonly raw: GenericResource; // Resource object from Azure SDK -// }; - export class VCoreBranchDataProvider extends vscode.Disposable implements BranchDataProvider, ExtendedTreeDataProvider { + // these three properties support lazy detail information loading + private detailsCacheUpdateRequested = false; // Current arm-mongoclusters beta fails on detail loading + private detailsCache: Map = new Map(); + private itemsToUpdateInfo: Map = new Map(); + /** * Cache for tracking parent-child relationships to support the getParent method. */ @@ -226,15 +233,51 @@ export class VCoreBranchDataProvider } getResourceItem(resource: AzureResource): TreeElement | Thenable { - // 1. extract the basic info from the element (subscription, resource group, etc., provided by Azure Resources) - const clusterInfo: ClusterModel = { - ...resource, - dbExperience: MongoClustersExperience, - } as ClusterModel; + return callWithTelemetryAndErrorHandling('getResourceItem', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'documentdb'; - const clusterItem = new VCoreResourceItem(resource.subscription, clusterInfo); + if (this.detailsCacheUpdateRequested) { + void this.updateMetadataCache(context, resource.subscription, 1000 * 60 * 5).then(() => { + /** + * Instances of MongoClusterItem were stored in the itemsToUpdateInfo map, + * so that when the cache is updated, the items can be refreshed. + * I had to keep all of them in the map becasuse refresh requires the actual MongoClusterItem instance. + */ + this.itemsToUpdateInfo.forEach((value: VCoreResourceItem) => { + value.cluster = { + ...value.cluster, + ...this.detailsCache.get(value.cluster.id), + }; + this.refresh(value); + }); + + this.itemsToUpdateInfo.clear(); + }); + } - return clusterItem; + // 1. extract the basic info from the element (subscription, resource group, etc., provided by Azure Resources) + let clusterInfo: ClusterModel = { + ...resource, + dbExperience: MongoClustersExperience, + } as ClusterModel; + + // 2. lookup the details in the cache, on subsequent refreshes, the details will be available in the cache + if (this.detailsCache.has(clusterInfo.id)) { + clusterInfo = { + ...clusterInfo, + ...this.detailsCache.get(clusterInfo.id), + }; + } + + const clusterItem = new VCoreResourceItem(resource.subscription, clusterInfo); + ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); + + // 3. store the item in the update queue, so that when the cache is updated, the item can be refreshed + this.itemsToUpdateInfo.set(clusterItem.id, clusterItem); + + return clusterItem; + }) as TreeElement | Thenable; // Cast to ensure correct type; } async getTreeItem(element: TreeElement): Promise { @@ -256,4 +299,88 @@ export class VCoreBranchDataProvider treeItem.contextValue = createContextValue(contextValues); } + + async updateMetadataCache( + _context: IActionContext, + subscription: AzureSubscription, + cacheDuration: number, + ): Promise { + return callWithTelemetryAndErrorHandling( + 'getResourceItem.updateMetadataCache', + async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'documentdb'; + + try { + context.telemetry.properties.experience = API.MongoClusters; + console.debug( + 'Loading metadata cache for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + + this.detailsCacheUpdateRequested = false; + + setTimeout(() => { + this.detailsCache.clear(); + this.detailsCacheUpdateRequested = true; + console.debug( + 'Cleared metadata cache for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + }, cacheDuration); // clear cache when the it expires + + // subscription comes from different azure packages in callers; cast here intentionally + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument + const managementClient = await createMongoClustersManagementClient(context, subscription as any); + const accounts = await uiUtils.listAllIterator(managementClient.mongoClusters.list()); + + console.debug( + 'Loaded metadata for %s/%s: %d entries', + context.telemetry.properties.view, + context.telemetry.properties.branch, + accounts.length, + ); + + accounts.map((mongoClusterAccount) => { + this.detailsCache.set( + nonNullProp( + mongoClusterAccount, + 'id', + 'mongoClusterAccount.id', + 'MongoVCoreBranchDataProvider.ts', + ), + { + dbExperience: MongoClustersExperience, + id: mongoClusterAccount.id!, + name: mongoClusterAccount.name!, + resourceGroup: getResourceGroupFromId(mongoClusterAccount.id!), + + location: mongoClusterAccount.location, + serverVersion: mongoClusterAccount.properties?.serverVersion, + + systemData: { + createdAt: mongoClusterAccount.systemData?.createdAt, + }, + + sku: mongoClusterAccount.properties?.compute?.tier, + diskSize: mongoClusterAccount.properties?.storage?.sizeGb, + nodeCount: mongoClusterAccount.properties?.sharding?.shardCount, + enableHa: mongoClusterAccount.properties?.highAvailability?.targetMode !== 'Disabled', + }, + ); + }); + } catch (e) { + console.debug( + 'Failed to load metadata for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + console.debug({ ...context, ...subscription }); + throw e; + } + }, + ); + } } From 87aad5a8b0cbbbee77299eec54dd2f584aed3e61 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 28 Aug 2025 16:05:18 +0200 Subject: [PATCH 18/81] removed obsolete code (old vcore branch data provider) --- l10n/bundle.l10n.json | 2 - src/commands/launchShell/launchShell.ts | 6 +- .../MongoVCoreBranchDataProvider.ts | 136 ----------- .../documentdb/MongoVCoreResourceItem.ts | 216 ------------------ .../mongo-ru/MongoRUResourceItem.ts | 139 ----------- 5 files changed, 3 insertions(+), 496 deletions(-) delete mode 100644 src/tree/azure-resources-view/documentdb/MongoVCoreBranchDataProvider.ts delete mode 100644 src/tree/azure-resources-view/documentdb/MongoVCoreResourceItem.ts delete mode 100644 src/tree/azure-resources-view/mongo-ru/MongoRUResourceItem.ts diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index df1a74661..3bfae1ada 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -91,14 +91,12 @@ "Configure TLS/SSL Security": "Configure TLS/SSL Security", "Connect to a database": "Connect to a database", "Connected to \"{cluster}\" as \"{username}\"": "Connected to \"{cluster}\" as \"{username}\"", - "Connected to \"{cluster}\" as \"{username}\".": "Connected to \"{cluster}\" as \"{username}\".", "Connected to \"{name}\"": "Connected to \"{name}\"", "Connected to the cluster \"{cluster}\".": "Connected to the cluster \"{cluster}\".", "Connecting to the cluster as \"{username}\"…": "Connecting to the cluster as \"{username}\"…", "Connecting to the cluster using Entra ID…": "Connecting to the cluster using Entra ID…", "Connection String": "Connection String", "Connection string is not set": "Connection string is not set", - "Connection string not found.": "Connection string not found.", "Connection updated successfully.": "Connection updated successfully.", "CosmosDB Accounts": "CosmosDB Accounts", "Could not find {0}": "Could not find {0}", diff --git a/src/commands/launchShell/launchShell.ts b/src/commands/launchShell/launchShell.ts index 3b0b30bbf..bfb4ea8e1 100644 --- a/src/commands/launchShell/launchShell.ts +++ b/src/commands/launchShell/launchShell.ts @@ -12,8 +12,8 @@ import { ClustersClient } from '../../documentdb/ClustersClient'; import { maskSensitiveValuesInTelemetry } from '../../documentdb/utils/connectionStringHelpers'; import { DocumentDBConnectionString } from '../../documentdb/utils/DocumentDBConnectionString'; import { ext } from '../../extensionVariables'; -import { MongoVCoreResourceItem } from '../../tree/azure-resources-view/documentdb/MongoVCoreResourceItem'; -import { MongoRUResourceItem } from '../../tree/azure-resources-view/mongo-ru/MongoRUResourceItem'; +import { VCoreResourceItem } from '../../tree/azure-resources-view/documentdb/VCoreResourceItem'; +import { RUResourceItem } from '../../tree/azure-resources-view/mongo-ru/RUCoreResourceItem'; import { ClusterItemBase } from '../../tree/documentdb/ClusterItemBase'; import { type CollectionItem } from '../../tree/documentdb/CollectionItem'; import { type DatabaseItem } from '../../tree/documentdb/DatabaseItem'; @@ -195,7 +195,7 @@ export async function launchShell( // Determine if TLS certificate validation should be disabled // This only applies to emulator connections with security disabled - const isRegularCloudAccount = node instanceof MongoVCoreResourceItem || node instanceof MongoRUResourceItem; + const isRegularCloudAccount = node instanceof VCoreResourceItem || node instanceof RUResourceItem; const isEmulatorWithSecurityDisabled = !isRegularCloudAccount && node.cluster.emulatorConfiguration && diff --git a/src/tree/azure-resources-view/documentdb/MongoVCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/MongoVCoreBranchDataProvider.ts deleted file mode 100644 index 1feed0b8e..000000000 --- a/src/tree/azure-resources-view/documentdb/MongoVCoreBranchDataProvider.ts +++ /dev/null @@ -1,136 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { type GenericResource } from '@azure/arm-resources'; -import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; -import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; -import { type AzureResource, type AzureSubscription } from '@microsoft/vscode-azureresources-api'; -import { API, MongoClustersExperience } from '../../../DocumentDBExperiences'; -import { createMongoClustersManagementClient } from '../../../utils/azureClients'; -import { nonNullProp } from '../../../utils/nonNull'; -import { BaseCachedBranchDataProvider } from '../../BaseCachedBranchDataProvider'; -import { type ClusterModel } from '../../documentdb/ClusterModel'; -import { type TreeElement } from '../../TreeElement'; -import { MongoVCoreResourceItem } from './MongoVCoreResourceItem'; - -export type MongoVCoreResource = AzureResource & - GenericResource & { - readonly raw: GenericResource; // Resource object from Azure SDK - }; - -export class MongoVCoreBranchDataProvider extends BaseCachedBranchDataProvider { - protected get contextValue(): string { - return 'mongoVCore.azure'; - } - - private detailsCacheUpdateRequested = true; - private detailsCache: Map = new Map(); - private itemsToUpdateInfo: Map = new Map(); - - protected createResourceItem(context: IActionContext, resource: MongoVCoreResource): TreeElement | undefined { - // TODO: ClusterModel does not implement TreeElementWithExperience as other models do - // and the base class will check isTreeElementWithExperience to set this property. - // Since ClusterModel has a dbExperience property which is theoretically the same but named differently - // set the experience to the API.MongoClusters explicitly here. - context.telemetry.properties.experience = API.MongoClusters; - - if (this.detailsCacheUpdateRequested) { - void this.updateResourceCache(context, resource.subscription, 1000 * 60 * 5).then(() => { - /** - * Instances of MongoClusterItem were stored in the itemsToUpdateInfo map, - * so that when the cache is updated, the items can be refreshed. - * I had to keep all of them in the map becasuse refresh requires the actual MongoClusterItem instance. - */ - this.itemsToUpdateInfo.forEach((value: MongoVCoreResourceItem) => { - value.cluster = { - ...value.cluster, - ...this.detailsCache.get(value.cluster.id), - }; - this.refresh(value); - }); - - this.itemsToUpdateInfo.clear(); - }); - } - - // 1. extract the basic info from the element (subscription, resource group, etc., provided by Azure Resources) - let clusterInfo: ClusterModel = { - ...resource, - dbExperience: MongoClustersExperience, - } as ClusterModel; - - // 2. lookup the details in the cache, on subsequent refreshes, the details will be available in the cache - if (this.detailsCache.has(clusterInfo.id)) { - clusterInfo = { - ...clusterInfo, - ...this.detailsCache.get(clusterInfo.id), - }; - } - - const clusterItem = new MongoVCoreResourceItem(resource.subscription, clusterInfo); - - // 3. store the item in the update queue, so that when the cache is updated, the item can be refreshed - this.itemsToUpdateInfo.set(clusterItem.id, clusterItem); - - return clusterItem; - } - - async updateResourceCache( - _context: IActionContext, - subscription: AzureSubscription, - cacheDuration: number, - ): Promise { - return callWithTelemetryAndErrorHandling( - 'resolveResource.updatingResourceCache', - async (context: IActionContext) => { - try { - context.telemetry.properties.experience = API.MongoClusters; - - this.detailsCacheUpdateRequested = false; - - setTimeout(() => { - this.detailsCache.clear(); - this.detailsCacheUpdateRequested = true; - }, cacheDuration); // clear cache after 5 minutes == keep cache for 5 minutes 1000 * 60 * 5 - - const client = await createMongoClustersManagementClient(_context, subscription); - const accounts = await uiUtils.listAllIterator(client.mongoClusters.list()); - - accounts.map((mongoClusterAccount) => { - this.detailsCache.set( - nonNullProp( - mongoClusterAccount, - 'id', - 'mongoClusterAccount.id', - 'MongoVCoreBranchDataProvider.ts', - ), - { - dbExperience: MongoClustersExperience, - id: mongoClusterAccount.id!, - name: mongoClusterAccount.name!, - resourceGroup: getResourceGroupFromId(mongoClusterAccount.id!), - - location: mongoClusterAccount.location, - serverVersion: mongoClusterAccount.properties?.serverVersion, - - systemData: { - createdAt: mongoClusterAccount.systemData?.createdAt, - }, - - sku: mongoClusterAccount.properties?.compute?.tier, - diskSize: mongoClusterAccount.properties?.storage?.sizeGb, - nodeCount: mongoClusterAccount.properties?.sharding?.shardCount, - enableHa: mongoClusterAccount.properties?.highAvailability?.targetMode !== 'Disabled', - }, - ); - }); - } catch (e) { - console.debug({ ...context, ...subscription }); - throw e; - } - }, - ); - } -} diff --git a/src/tree/azure-resources-view/documentdb/MongoVCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/MongoVCoreResourceItem.ts deleted file mode 100644 index eefb7ab6d..000000000 --- a/src/tree/azure-resources-view/documentdb/MongoVCoreResourceItem.ts +++ /dev/null @@ -1,216 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { - AzureWizard, - callWithTelemetryAndErrorHandling, - UserCancelledError, - type IActionContext, -} from '@microsoft/vscode-azext-utils'; -import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; -import * as l10n from '@vscode/l10n'; -import * as vscode from 'vscode'; -import { ClustersClient } from '../../../documentdb/ClustersClient'; -import { CredentialCache } from '../../../documentdb/CredentialCache'; -import { maskSensitiveValuesInTelemetry } from '../../../documentdb/utils/connectionStringHelpers'; -import { DocumentDBConnectionString } from '../../../documentdb/utils/DocumentDBConnectionString'; -import { type AuthenticateWizardContext } from '../../../documentdb/wizards/authenticate/AuthenticateWizardContext'; -import { ProvidePasswordStep } from '../../../documentdb/wizards/authenticate/ProvidePasswordStep'; -import { ProvideUserNameStep } from '../../../documentdb/wizards/authenticate/ProvideUsernameStep'; -import { ext } from '../../../extensionVariables'; -import { createMongoClustersManagementClient } from '../../../utils/azureClients'; -import { nonNullProp, nonNullValue } from '../../../utils/nonNull'; -import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; -import { type ClusterModel } from '../../documentdb/ClusterModel'; - -export class MongoVCoreResourceItem extends ClusterItemBase { - public getCredentials(): Promise { - throw new Error('Method not implemented.'); - } - constructor( - readonly subscription: AzureSubscription, - cluster: ClusterModel, - ) { - super(cluster); - } - - public async getConnectionString(): Promise { - return callWithTelemetryAndErrorHandling( - 'documentDB.mongoClusters.getConnectionString', - async (context: IActionContext) => { - // Create a client to interact with the MongoDB vCore management API and read the cluster details - const managementClient = await createMongoClustersManagementClient(context, this.subscription); - - const clusterInformation = await managementClient.mongoClusters.get( - this.cluster.resourceGroup!, - this.cluster.name, - ); - - if (!clusterInformation.properties?.connectionString) { - return undefined; - } - - context.valuesToMask.push(clusterInformation.properties.connectionString); - const connectionString = new DocumentDBConnectionString(clusterInformation.properties.connectionString); - maskSensitiveValuesInTelemetry(context, connectionString); - - if (clusterInformation.properties?.administrator?.userName) { - context.valuesToMask.push(clusterInformation.properties.administrator.userName); - connectionString.username = clusterInformation.properties.administrator.userName; - } - - /** - * The connection string returned from Azure does not include the actual password. - * Instead, it contains a placeholder. We explicitly set the password to an empty string here. - */ - connectionString.password = ''; - - return connectionString.toString(); - }, - ); - } - - /** - * Authenticates and connects to the MongoDB cluster. - * @param context The action context. - * @returns An instance of ClustersClient if successful; otherwise, null. - */ - protected async authenticateAndConnect(): Promise { - const result = await callWithTelemetryAndErrorHandling( - 'documentDB.mongoClusters.connect', - async (context: IActionContext) => { - ext.outputChannel.appendLine( - l10n.t('Attempting to authenticate with "{cluster}"…', { - cluster: this.cluster.name, - }), - ); - - // Create a client to interact with the MongoDB vCore management API and read the cluster details - const managementClient = await createMongoClustersManagementClient(context, this.subscription); - const clusterInformation = await managementClient.mongoClusters.get( - this.cluster.resourceGroup!, - this.cluster.name, - ); - - if (!clusterInformation.properties?.connectionString) { - return undefined; - } - - context.valuesToMask.push(clusterInformation.properties.connectionString); - if (clusterInformation.properties?.administrator?.userName) { - context.valuesToMask.push(clusterInformation.properties.administrator.userName); - } - - const wizardContext: AuthenticateWizardContext = { - ...context, - adminUserName: clusterInformation.properties?.administrator?.userName, - resourceName: this.cluster.name, - }; - - // Prompt the user for credentials - const credentialsProvided = await this.promptForCredentials(wizardContext); - - // If the wizard was aborted or failed, return null - if (!credentialsProvided) { - return null; - } - - context.valuesToMask.push( - nonNullProp(wizardContext, 'password', 'wizardContext.password', 'MongoVCoreResourceItem.ts'), - ); - - // Cache the credentials - CredentialCache.setCredentials( - this.id, - nonNullValue( - clusterInformation.properties.connectionString, - 'clusterInformation.properties.connectionString', - 'MongoVCoreResourceItem.ts', - ), - nonNullProp( - wizardContext, - 'selectedUserName', - 'wizardContext.selectedUserName', - 'MongoVCoreResourceItem.ts', - ), - nonNullProp(wizardContext, 'password', 'wizardContext.password', 'MongoVCoreResourceItem.ts'), - // here, emulatorConfiguration is not set, as it's a resource item from Azure resources, not a workspace item, therefore, no emulator support needed - ); - - ext.outputChannel.append( - l10n.t('Connecting to the cluster as "{username}"…', { - username: wizardContext.selectedUserName ?? '', - }), - ); - - // Attempt to create the client with the provided credentials - let clustersClient: ClustersClient; - try { - clustersClient = await ClustersClient.getClient(this.id).catch((error: Error) => { - ext.outputChannel.appendLine(l10n.t('Error: {error}', { error: error.message })); - - void vscode.window.showErrorMessage( - l10n.t('Failed to connect to "{cluster}"', { cluster: this.cluster.name }), - { - modal: true, - detail: - l10n.t('Revisit connection details and try again.') + - '\n\n' + - l10n.t('Error: {error}', { error: error.message }), - }, - ); - - throw error; - }); - } catch { - // If connection fails, remove cached credentials - await ClustersClient.deleteClient(this.id); - CredentialCache.deleteCredentials(this.id); - - // Return null to indicate failure - return null; - } - - ext.outputChannel.appendLine( - l10n.t('Connected to "{cluster}" as "{username}".', { - cluster: this.cluster.name, - username: wizardContext.selectedUserName ?? '', - }), - ); - - return clustersClient; - }, - ); - - return result ?? null; - } - - /** - * Prompts the user for credentials using a wizard. - * - * @param wizardContext The wizard context. - * @returns True if the wizard completed successfully; false if the user canceled or an error occurred. - */ - private async promptForCredentials(wizardContext: AuthenticateWizardContext): Promise { - const wizard = new AzureWizard(wizardContext, { - promptSteps: [new ProvideUserNameStep(), new ProvidePasswordStep()], - title: l10n.t('Authenticate to connect with your MongoDB cluster'), - showLoadingPrompt: true, - }); - - // Prompt the user for credentials - - try { - await wizard.prompt(); // This will prompt the user; results are stored in wizardContext - } catch (error) { - if (error instanceof UserCancelledError) { - wizardContext.aborted = true; - } - } - - // Return true if the wizard completed successfully; false otherwise - return !wizardContext.aborted; - } -} diff --git a/src/tree/azure-resources-view/mongo-ru/MongoRUResourceItem.ts b/src/tree/azure-resources-view/mongo-ru/MongoRUResourceItem.ts deleted file mode 100644 index 2d41b247b..000000000 --- a/src/tree/azure-resources-view/mongo-ru/MongoRUResourceItem.ts +++ /dev/null @@ -1,139 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; -import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; -import * as l10n from '@vscode/l10n'; -import * as vscode from 'vscode'; -import { ClustersClient } from '../../../documentdb/ClustersClient'; -import { CredentialCache } from '../../../documentdb/CredentialCache'; -import { DocumentDBConnectionString } from '../../../documentdb/utils/DocumentDBConnectionString'; -import { ext } from '../../../extensionVariables'; -import { createCosmosDBManagementClient } from '../../../utils/azureClients'; -import { nonNullProp } from '../../../utils/nonNull'; -import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; -import { type ClusterModel } from '../../documentdb/ClusterModel'; - -export class MongoRUResourceItem extends ClusterItemBase { - public getCredentials(): Promise { - throw new Error('Method not implemented.'); - } - constructor( - readonly subscription: AzureSubscription, - mongoCluster: ClusterModel, - ) { - super(mongoCluster); - } - - public async getConnectionString(): Promise { - return callWithTelemetryAndErrorHandling( - 'documentDB.mongoClusters.getConnectionString', - async (context: IActionContext) => { - // Create a client to interact with the MongoDB vCore management API and read the cluster details - const managementClient = await createCosmosDBManagementClient( - context, - this.subscription as AzureSubscription, - ); - const connectionStringsInfo = await managementClient.databaseAccounts.listConnectionStrings( - this.cluster.resourceGroup as string, - this.cluster.name, - ); - - const connectionString: URL = new URL( - nonNullProp( - nonNullProp( - connectionStringsInfo, - 'connectionStrings', - 'connectionStringsInfo.connectionStrings', - 'MongoRUResourceItem.ts', - )[0], - 'connectionString', - 'connectionStringsInfo.connectionStrings[0].connectionString', - 'MongoRUResourceItem.ts', - ), - ); - - // for any Mongo connectionString, append this query param because the Cosmos Mongo API v3.6 doesn't support retrywrites - // but the newer node.js drivers started breaking this - const searchParam: string = 'retrywrites'; - if (!connectionString.searchParams.has(searchParam)) { - connectionString.searchParams.set(searchParam, 'false'); - } - - const cString = connectionString.toString(); - context.valuesToMask.push(cString); - - return cString; - }, - ); - } - - /** - * Authenticates and connects to the MongoDB cluster. - * @param context The action context. - * @returns An instance of ClustersClient if successful; otherwise, null. - */ - protected async authenticateAndConnect(): Promise { - const result = await callWithTelemetryAndErrorHandling( - 'documentDB.mongoClusters.connect', - async (context: IActionContext) => { - ext.outputChannel.appendLine( - l10n.t('Attempting to authenticate with "{cluster}"…', { - cluster: this.cluster.name, - }), - ); - - if (this.subscription) { - this.cluster.connectionString = await this.getConnectionString(); - } - - if (!this.cluster.connectionString) { - throw new Error(l10n.t('Connection string not found.')); - } - - context.valuesToMask.push(this.cluster.connectionString); - - const cString = new DocumentDBConnectionString(this.cluster.connectionString); - - // // Azure MongoDB accounts need to have the name passed in for private endpoints - // mongoClient = await connectToMongoClient( - // this.account.connectionString, - // this.databaseAccount ? nonNullProp(this.databaseAccount, 'name') : appendExtensionUserAgent(), - // ); - - //TODO: simplify the api for CrednetialCache to accept full connection strings with credentials - const username: string | undefined = cString.username; - const password: string | undefined = cString.password; - CredentialCache.setCredentials(this.id, cString.toString(), username, password); - - const mongoClient = await ClustersClient.getClient(this.id).catch(async (error) => { - console.error(error); - // If connection fails, remove cached credentials, as they might be invalid - await ClustersClient.deleteClient(this.id); - CredentialCache.deleteCredentials(this.id); - return null; - }); - - return mongoClient; - }, - ); - - return result ?? null; - } - - /** - * Returns the tree item representation of the cluster. - * @returns The TreeItem object. - */ - getTreeItem(): vscode.TreeItem { - return { - id: this.id, - contextValue: this.contextValue, - label: this.cluster.name, - description: `(${this.experience.shortName})`, - collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, - }; - } -} From d9c44fe153588598ec711313cddf34211fc66139 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 28 Aug 2025 16:44:01 +0200 Subject: [PATCH 19/81] wip: placeholder for extended cluster info for RU --- .../mongo-ru/RUBranchDataProvider.ts | 140 +++++++++++++++++- .../mongo-ru/RUCoreResourceItem.ts | 2 + 2 files changed, 134 insertions(+), 8 deletions(-) diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 4b41e438c..387ab4d4d 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -5,15 +5,22 @@ import * as vscode from 'vscode'; +import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; import { callWithTelemetryAndErrorHandling, createContextValue, type IActionContext, } from '@microsoft/vscode-azext-utils'; -import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; -import { MongoClustersExperience } from '../../../DocumentDBExperiences'; +import { + type AzureResource, + type AzureSubscription, + type BranchDataProvider, +} from '@microsoft/vscode-azureresources-api'; +import { MongoClustersExperience, MongoExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; import { ext } from '../../../extensionVariables'; +import { createCosmosDBManagementClient } from '../../../utils/azureClients'; +import { nonNullProp } from '../../../utils/nonNull'; import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; import { type TreeElement } from '../../TreeElement'; import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; @@ -31,6 +38,11 @@ export class RUBranchDataProvider extends vscode.Disposable implements BranchDataProvider, ExtendedTreeDataProvider { + // these three properties support lazy detail information loading + private detailsCacheUpdateRequested = false; // this is just a "wip" and low prio disabled for this iteration + private detailsCache: Map = new Map(); + private itemsToUpdateInfo: Map = new Map(); + /** * Cache for tracking parent-child relationships to support the getParent method. */ @@ -226,14 +238,51 @@ export class RUBranchDataProvider } getResourceItem(resource: AzureResource): TreeElement | Thenable { - const clusterInfo: ClusterModel = { - ...resource, - dbExperience: MongoClustersExperience, - } as ClusterModel; + return callWithTelemetryAndErrorHandling('getResourceItem', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'ru'; - const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); + if (this.detailsCacheUpdateRequested) { + void this.updateMetadataCache(context, resource.subscription, 1000 * 60 * 5).then(() => { + /** + * Instances of MongoClusterItem were stored in the itemsToUpdateInfo map, + * so that when the cache is updated, the items can be refreshed. + * I had to keep all of them in the map becasuse refresh requires the actual MongoClusterItem instance. + */ + this.itemsToUpdateInfo.forEach((value: RUResourceItem) => { + value.cluster = { + ...value.cluster, + ...this.detailsCache.get(value.cluster.id), + }; + this.refresh(value); + }); + + this.itemsToUpdateInfo.clear(); + }); + } + + let clusterInfo: ClusterModel = { + ...resource, + dbExperience: MongoClustersExperience, + } as ClusterModel; + + // 2. lookup the details in the cache, on subsequent refreshes, the details will be available in the cache + if (this.detailsCache.has(clusterInfo.id)) { + clusterInfo = { + ...clusterInfo, + ...this.detailsCache.get(clusterInfo.id), + }; + } - return clusterItem; + const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); + + // 3. store the item in the update queue, so that when the cache is updated, the item can be refreshed + this.itemsToUpdateInfo.set(clusterItem.id, clusterItem); + + ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); + + return clusterItem; + }) as TreeElement | Thenable; // Cast to ensure correct type; } async getTreeItem(element: TreeElement): Promise { @@ -255,4 +304,79 @@ export class RUBranchDataProvider treeItem.contextValue = createContextValue(contextValues); } + + async updateMetadataCache( + _context: IActionContext, + subscription: AzureSubscription, + cacheDuration: number, + ): Promise { + return callWithTelemetryAndErrorHandling( + 'getResourceItem.updateMetadataCache', + async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureResourcesView; + context.telemetry.properties.branch = 'documentdb'; + + try { + console.debug( + 'Loading metadata cache for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + + this.detailsCacheUpdateRequested = false; + + setTimeout(() => { + this.detailsCache.clear(); + this.detailsCacheUpdateRequested = true; + console.debug( + 'Cleared metadata cache for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + }, cacheDuration); // clear cache when the it expires + + // subscription comes from different azure packages in callers; cast here intentionally + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument + const managementClient = await createCosmosDBManagementClient(context, subscription as any); + + let accounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); + accounts = accounts.filter((account) => account.kind === 'MongoDB'); // ignore non-ru accounts + + console.debug( + 'Loaded metadata for %s/%s: %d entries', + context.telemetry.properties.view, + context.telemetry.properties.branch, + accounts.length, + ); + + accounts.map((mongoClusterAccount) => { + this.detailsCache.set( + nonNullProp(mongoClusterAccount, 'id', 'mongoClusterAccount.id', 'RUBranchDataProvider.ts'), + { + dbExperience: MongoExperience, + id: mongoClusterAccount.id!, + name: mongoClusterAccount.name!, + resourceGroup: getResourceGroupFromId(mongoClusterAccount.id!), + + location: mongoClusterAccount.location, + serverVersion: mongoClusterAccount?.apiProperties?.serverVersion, + + systemData: { + createdAt: mongoClusterAccount.systemData?.createdAt, + }, + }, + ); + }); + } catch (e) { + console.debug( + 'Failed to load metadata for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + console.debug({ ...context, ...subscription }); + throw e; + } + }, + ); + } } diff --git a/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts index 8cb469a37..0b09078e6 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts @@ -38,6 +38,8 @@ export class RUResourceItem extends ClusterItemBase { super(cluster); } + protected descriptionOverride: string | undefined = this.cluster.serverVersion; + public async getCredentials(): Promise { return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.AzureResourcesView; From b3cfafb5930cb1385fd9cd9016a1e4457cf2537d Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 08:57:02 +0200 Subject: [PATCH 20/81] fix: resource item cache misses likely due to hardcoded provider strings in the different SDKs --- .../mongo-ru/RUBranchDataProvider.ts | 30 ++++++++++++++----- src/utils/CaseInsensitiveMap.ts | 22 ++++++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 src/utils/CaseInsensitiveMap.ts diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 387ab4d4d..b124c585f 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -16,9 +16,10 @@ import { type AzureSubscription, type BranchDataProvider, } from '@microsoft/vscode-azureresources-api'; -import { MongoClustersExperience, MongoExperience } from '../../../DocumentDBExperiences'; +import { MongoExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; import { ext } from '../../../extensionVariables'; +import { CaseInsensitiveMap } from '../../../utils/CaseInsensitiveMap'; import { createCosmosDBManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; @@ -39,9 +40,25 @@ export class RUBranchDataProvider implements BranchDataProvider, ExtendedTreeDataProvider { // these three properties support lazy detail information loading - private detailsCacheUpdateRequested = false; // this is just a "wip" and low prio disabled for this iteration - private detailsCache: Map = new Map(); - private itemsToUpdateInfo: Map = new Map(); + private detailsCacheUpdateRequested = true; // this is just a "wip" and low prio disabled for this iteration + + /** + * A case-insensitive map is used for the details cache to address inconsistencies in Azure resource ID casing. + * + * The resource ID for the same Azure resource can vary in casing depending on the source. + * For instance, the Azure Resources extension (likely using `@azure/arm-resources`) may provide an ID + * with a different casing than the ID retrieved from the dedicated `@azure/arm-cosmosdb` client, which is + * used to populate this cache. This discrepancy is likely due to hardcoded provider strings in the different SDKs. + * + * Example of differing IDs for the same resource (look for Document>>DB<< and Document>>Db<<): + * - From Azure Resources extension: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDb/databaseAccounts/account-name` + * - From `@azure/arm-cosmosdb`: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDB/databaseAccounts/account-name` + * + * To ensure reliable lookups regardless of the source, we normalize the keys by using a case-insensitive map, + * which internally converts all keys to lowercase. + */ + private detailsCache: Map = new CaseInsensitiveMap(); + private itemsToUpdateInfo: Map = new CaseInsensitiveMap(); /** * Cache for tracking parent-child relationships to support the getParent method. @@ -263,7 +280,7 @@ export class RUBranchDataProvider let clusterInfo: ClusterModel = { ...resource, - dbExperience: MongoClustersExperience, + dbExperience: MongoExperience, } as ClusterModel; // 2. lookup the details in the cache, on subsequent refreshes, the details will be available in the cache @@ -275,12 +292,11 @@ export class RUBranchDataProvider } const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); + ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); // 3. store the item in the update queue, so that when the cache is updated, the item can be refreshed this.itemsToUpdateInfo.set(clusterItem.id, clusterItem); - ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); - return clusterItem; }) as TreeElement | Thenable; // Cast to ensure correct type; } diff --git a/src/utils/CaseInsensitiveMap.ts b/src/utils/CaseInsensitiveMap.ts new file mode 100644 index 000000000..e3491da9c --- /dev/null +++ b/src/utils/CaseInsensitiveMap.ts @@ -0,0 +1,22 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export class CaseInsensitiveMap extends Map { + set(key: string, value: V): this { + return super.set(key.toLowerCase(), value); + } + + get(key: string): V | undefined { + return super.get(key.toLowerCase()); + } + + has(key: string): boolean { + return super.has(key.toLowerCase()); + } + + delete(key: string): boolean { + return super.delete(key.toLowerCase()); + } +} From 46e5af06bd2d266a19121427a5e499d4f8691257 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 09:44:54 +0200 Subject: [PATCH 21/81] feat: updated tree node info of RU clusters --- .../mongo-ru/RUBranchDataProvider.ts | 43 ++++++++++++------- .../mongo-ru/RUCoreResourceItem.ts | 2 - src/tree/documentdb/ClusterItemBase.ts | 3 +- src/tree/documentdb/ClusterModel.ts | 1 + 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index b124c585f..1eea77f6f 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -271,6 +271,11 @@ export class RUBranchDataProvider ...value.cluster, ...this.detailsCache.get(value.cluster.id), }; + + if (value.cluster.serverVersion) { + value.descriptionOverride = `v${value.cluster.serverVersion}`; + } + this.refresh(value); }); @@ -365,23 +370,29 @@ export class RUBranchDataProvider accounts.length, ); - accounts.map((mongoClusterAccount) => { - this.detailsCache.set( - nonNullProp(mongoClusterAccount, 'id', 'mongoClusterAccount.id', 'RUBranchDataProvider.ts'), - { - dbExperience: MongoExperience, - id: mongoClusterAccount.id!, - name: mongoClusterAccount.name!, - resourceGroup: getResourceGroupFromId(mongoClusterAccount.id!), - - location: mongoClusterAccount.location, - serverVersion: mongoClusterAccount?.apiProperties?.serverVersion, - - systemData: { - createdAt: mongoClusterAccount.systemData?.createdAt, - }, + accounts.map((ruAccount) => { + this.detailsCache.set(nonNullProp(ruAccount, 'id', 'ruAccount.id', 'RUBranchDataProvider.ts'), { + dbExperience: MongoExperience, + id: ruAccount.id!, + name: ruAccount.name!, + resourceGroup: getResourceGroupFromId(ruAccount.id!), + + location: ruAccount.location, + serverVersion: ruAccount?.apiProperties?.serverVersion, + + systemData: { + createdAt: ruAccount.systemData?.createdAt, }, - ); + ...{ + capabilities: + ruAccount.capabilities && ruAccount.capabilities.length > 0 + ? ruAccount.capabilities + .map((cap) => cap.name) + .filter((name) => name !== undefined) + .join(', ') + : undefined, + }, + }); }); } catch (e) { console.debug( diff --git a/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts index 0b09078e6..8cb469a37 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts @@ -38,8 +38,6 @@ export class RUResourceItem extends ClusterItemBase { super(cluster); } - protected descriptionOverride: string | undefined = this.cluster.serverVersion; - public async getCredentials(): Promise { return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.AzureResourcesView; diff --git a/src/tree/documentdb/ClusterItemBase.ts b/src/tree/documentdb/ClusterItemBase.ts index b26959b62..147a91138 100644 --- a/src/tree/documentdb/ClusterItemBase.ts +++ b/src/tree/documentdb/ClusterItemBase.ts @@ -48,7 +48,7 @@ export abstract class ClusterItemBase public readonly experience: Experience; public contextValue: string = 'treeItem.mongoCluster'; - protected descriptionOverride?: string; + public descriptionOverride?: string; protected tooltipOverride?: string | vscode.MarkdownString; protected iconPath?: @@ -204,6 +204,7 @@ export abstract class ClusterItemBase : '') + (this.cluster.nodeCount ? `- Node Count: **${this.cluster.nodeCount}**\n\n` : '') + (this.cluster.serverVersion ? `- Server Version: **${this.cluster.serverVersion}**\n` : '') + + (this.cluster.capabilities ? `- Capabilities: **${this.cluster.capabilities}**\n` : '') + (this.cluster.systemData?.createdAt ? `---\n- Created Date: **${this.cluster.systemData.createdAt.toLocaleString()}**\n` : ''), diff --git a/src/tree/documentdb/ClusterModel.ts b/src/tree/documentdb/ClusterModel.ts index a1b517fa3..3c6859941 100644 --- a/src/tree/documentdb/ClusterModel.ts +++ b/src/tree/documentdb/ClusterModel.ts @@ -46,6 +46,7 @@ interface ResourceModelInUse extends Resource { connectionString?: string; location?: string; + capabilities?: string; serverVersion?: string; systemData?: { createdAt?: Date; From 3c31e3513fc665181f482adbf0861bd14a63abb7 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 11:12:49 +0200 Subject: [PATCH 22/81] fix: resource item cache misses likely due to hardcoded provider strings in the different SDKs --- .../documentdb/VCoreBranchDataProvider.ts | 50 ++++++++++++------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 56aa53aec..33535de17 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -19,6 +19,7 @@ import { import { API, MongoClustersExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; import { ext } from '../../../extensionVariables'; +import { CaseInsensitiveMap } from '../../../utils/CaseInsensitiveMap'; import { createMongoClustersManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; @@ -35,8 +36,24 @@ export class VCoreBranchDataProvider { // these three properties support lazy detail information loading private detailsCacheUpdateRequested = false; // Current arm-mongoclusters beta fails on detail loading - private detailsCache: Map = new Map(); - private itemsToUpdateInfo: Map = new Map(); + + /** + * A case-insensitive map is used for the details cache to address inconsistencies in Azure resource ID casing. + * + * The resource ID for the same Azure resource can vary in casing depending on the source. + * For instance, the Azure Resources extension (likely using `@azure/arm-resources`) may provide an ID + * with a different casing than the ID retrieved from the dedicated client, which is + * used to populate this cache. This discrepancy is likely due to hardcoded provider strings in the different SDKs. + * + * Example of differing IDs for the same resource (look for Document>>DB<< and Document>>Db<<): + * - From Azure Resources extension: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDb/databaseAccounts/account-name` + * - From `@azure/arm-cosmosdb`: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDB/databaseAccounts/account-name` + * + * To ensure reliable lookups regardless of the source, we normalize the keys by using a case-insensitive map, + * which internally converts all keys to lowercase. + */ + private detailsCache: CaseInsensitiveMap = new CaseInsensitiveMap(); + private itemsToUpdateInfo: CaseInsensitiveMap = new CaseInsensitiveMap(); /** * Cache for tracking parent-child relationships to support the getParent method. @@ -343,31 +360,26 @@ export class VCoreBranchDataProvider accounts.length, ); - accounts.map((mongoClusterAccount) => { + accounts.map((vCoreAccount) => { this.detailsCache.set( - nonNullProp( - mongoClusterAccount, - 'id', - 'mongoClusterAccount.id', - 'MongoVCoreBranchDataProvider.ts', - ), + nonNullProp(vCoreAccount, 'id', 'vCoreAccount.id', 'VCoreBranchDataProvider.ts'), { dbExperience: MongoClustersExperience, - id: mongoClusterAccount.id!, - name: mongoClusterAccount.name!, - resourceGroup: getResourceGroupFromId(mongoClusterAccount.id!), + id: vCoreAccount.id!, + name: vCoreAccount.name!, + resourceGroup: getResourceGroupFromId(vCoreAccount.id!), - location: mongoClusterAccount.location, - serverVersion: mongoClusterAccount.properties?.serverVersion, + location: vCoreAccount.location, + serverVersion: vCoreAccount.properties?.serverVersion, systemData: { - createdAt: mongoClusterAccount.systemData?.createdAt, + createdAt: vCoreAccount.systemData?.createdAt, }, - sku: mongoClusterAccount.properties?.compute?.tier, - diskSize: mongoClusterAccount.properties?.storage?.sizeGb, - nodeCount: mongoClusterAccount.properties?.sharding?.shardCount, - enableHa: mongoClusterAccount.properties?.highAvailability?.targetMode !== 'Disabled', + sku: vCoreAccount.properties?.compute?.tier, + diskSize: vCoreAccount.properties?.storage?.sizeGb, + nodeCount: vCoreAccount.properties?.sharding?.shardCount, + enableHa: vCoreAccount.properties?.highAvailability?.targetMode !== 'Disabled', }, ); }); From 659b9b5b54a53a98628c5c6fc7a8e25efaa5a2e7 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 12:16:10 +0200 Subject: [PATCH 23/81] feat: Lazy Metadata Loading extracted to a deciated class --- .../documentdb/VCoreBranchDataProvider.ts | 194 +++++--------- .../mongo-ru/RUBranchDataProvider.ts | 205 +++++---------- src/utils/LazyMetadataLoader.ts | 244 ++++++++++++++++++ 3 files changed, 380 insertions(+), 263 deletions(-) create mode 100644 src/utils/LazyMetadataLoader.ts diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 33535de17..179bfa3e0 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -11,15 +11,12 @@ import { createContextValue, type IActionContext, } from '@microsoft/vscode-azext-utils'; -import { - type AzureResource, - type AzureSubscription, - type BranchDataProvider, -} from '@microsoft/vscode-azureresources-api'; -import { API, MongoClustersExperience } from '../../../DocumentDBExperiences'; +import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; +import { MongoClustersExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; import { ext } from '../../../extensionVariables'; import { CaseInsensitiveMap } from '../../../utils/CaseInsensitiveMap'; +import { LazyMetadataLoader } from '../../../utils/LazyMetadataLoader'; import { createMongoClustersManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; @@ -34,26 +31,58 @@ export class VCoreBranchDataProvider extends vscode.Disposable implements BranchDataProvider, ExtendedTreeDataProvider { - // these three properties support lazy detail information loading - private detailsCacheUpdateRequested = false; // Current arm-mongoclusters beta fails on detail loading - /** - * A case-insensitive map is used for the details cache to address inconsistencies in Azure resource ID casing. - * - * The resource ID for the same Azure resource can vary in casing depending on the source. - * For instance, the Azure Resources extension (likely using `@azure/arm-resources`) may provide an ID - * with a different casing than the ID retrieved from the dedicated client, which is - * used to populate this cache. This discrepancy is likely due to hardcoded provider strings in the different SDKs. - * - * Example of differing IDs for the same resource (look for Document>>DB<< and Document>>Db<<): - * - From Azure Resources extension: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDb/databaseAccounts/account-name` - * - From `@azure/arm-cosmosdb`: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDB/databaseAccounts/account-name` - * - * To ensure reliable lookups regardless of the source, we normalize the keys by using a case-insensitive map, - * which internally converts all keys to lowercase. + * Helper for managing lazy metadata loading with proper caching and item updates. + * This replaces the manual cache management that was previously done with + * detailsCacheUpdateRequested, detailsCache, and itemsToUpdateInfo properties. */ - private detailsCache: CaseInsensitiveMap = new CaseInsensitiveMap(); - private itemsToUpdateInfo: CaseInsensitiveMap = new CaseInsensitiveMap(); + private readonly metadataLoader = new LazyMetadataLoader({ + cacheDuration: 5 * 60 * 1000, // 5 minutes + loadMetadata: async (subscription, context) => { + console.debug( + 'Loading metadata cache for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument + const managementClient = await createMongoClustersManagementClient(context, subscription as any); + const accounts = await uiUtils.listAllIterator(managementClient.mongoClusters.list()); + + console.debug( + 'Loaded metadata for %s/%s: %d entries', + context.telemetry.properties.view, + context.telemetry.properties.branch, + accounts.length, + ); + + const cache = new CaseInsensitiveMap(); + accounts.forEach((documentDbAccount) => { + cache.set(nonNullProp(documentDbAccount, 'id', 'vCoreAccount.id', 'VCoreBranchDataProvider.ts'), { + dbExperience: MongoClustersExperience, + id: documentDbAccount.id!, + name: documentDbAccount.name!, + resourceGroup: getResourceGroupFromId(documentDbAccount.id!), + location: documentDbAccount.location, + serverVersion: documentDbAccount.properties?.serverVersion, + systemData: { + createdAt: documentDbAccount.systemData?.createdAt, + }, + sku: documentDbAccount.properties?.compute?.tier, + diskSize: documentDbAccount.properties?.storage?.sizeGb, + nodeCount: documentDbAccount.properties?.sharding?.shardCount, + enableHa: documentDbAccount.properties?.highAvailability?.targetMode !== 'Disabled', + }); + }); + return cache; + }, + updateItem: (item, metadata) => { + if (metadata) { + item.cluster = { ...item.cluster, ...metadata }; + } + }, + refreshCallback: (item) => this.refresh(item), + }); /** * Cache for tracking parent-child relationships to support the getParent method. @@ -100,6 +129,7 @@ export class VCoreBranchDataProvider constructor() { super(() => { this.onDidChangeTreeDataEmitter.dispose(); + this.metadataLoader.dispose(); }); } @@ -254,44 +284,29 @@ export class VCoreBranchDataProvider context.telemetry.properties.view = Views.AzureResourcesView; context.telemetry.properties.branch = 'documentdb'; - if (this.detailsCacheUpdateRequested) { - void this.updateMetadataCache(context, resource.subscription, 1000 * 60 * 5).then(() => { - /** - * Instances of MongoClusterItem were stored in the itemsToUpdateInfo map, - * so that when the cache is updated, the items can be refreshed. - * I had to keep all of them in the map becasuse refresh requires the actual MongoClusterItem instance. - */ - this.itemsToUpdateInfo.forEach((value: VCoreResourceItem) => { - value.cluster = { - ...value.cluster, - ...this.detailsCache.get(value.cluster.id), - }; - this.refresh(value); - }); - - this.itemsToUpdateInfo.clear(); - }); + // Trigger cache loading if needed + if (this.metadataLoader.needsCacheUpdate) { + void this.metadataLoader.loadCacheAndRefreshItems(resource.subscription, context); } - // 1. extract the basic info from the element (subscription, resource group, etc., provided by Azure Resources) + // Get metadata from cache (may be undefined if not yet loaded) + const cachedMetadata = this.metadataLoader.getCachedMetadata(resource.id); + let clusterInfo: ClusterModel = { ...resource, dbExperience: MongoClustersExperience, } as ClusterModel; - // 2. lookup the details in the cache, on subsequent refreshes, the details will be available in the cache - if (this.detailsCache.has(clusterInfo.id)) { - clusterInfo = { - ...clusterInfo, - ...this.detailsCache.get(clusterInfo.id), - }; + // Merge with cached metadata if available + if (cachedMetadata) { + clusterInfo = { ...clusterInfo, ...cachedMetadata }; } const clusterItem = new VCoreResourceItem(resource.subscription, clusterInfo); ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); - // 3. store the item in the update queue, so that when the cache is updated, the item can be refreshed - this.itemsToUpdateInfo.set(clusterItem.id, clusterItem); + // Register item for refresh when cache loading completes + this.metadataLoader.addItemForRefresh(resource.id, clusterItem); return clusterItem; }) as TreeElement | Thenable; // Cast to ensure correct type; @@ -316,83 +331,4 @@ export class VCoreBranchDataProvider treeItem.contextValue = createContextValue(contextValues); } - - async updateMetadataCache( - _context: IActionContext, - subscription: AzureSubscription, - cacheDuration: number, - ): Promise { - return callWithTelemetryAndErrorHandling( - 'getResourceItem.updateMetadataCache', - async (context: IActionContext) => { - context.telemetry.properties.view = Views.AzureResourcesView; - context.telemetry.properties.branch = 'documentdb'; - - try { - context.telemetry.properties.experience = API.MongoClusters; - console.debug( - 'Loading metadata cache for %s/%s', - context.telemetry.properties.view, - context.telemetry.properties.branch, - ); - - this.detailsCacheUpdateRequested = false; - - setTimeout(() => { - this.detailsCache.clear(); - this.detailsCacheUpdateRequested = true; - console.debug( - 'Cleared metadata cache for %s/%s', - context.telemetry.properties.view, - context.telemetry.properties.branch, - ); - }, cacheDuration); // clear cache when the it expires - - // subscription comes from different azure packages in callers; cast here intentionally - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument - const managementClient = await createMongoClustersManagementClient(context, subscription as any); - const accounts = await uiUtils.listAllIterator(managementClient.mongoClusters.list()); - - console.debug( - 'Loaded metadata for %s/%s: %d entries', - context.telemetry.properties.view, - context.telemetry.properties.branch, - accounts.length, - ); - - accounts.map((vCoreAccount) => { - this.detailsCache.set( - nonNullProp(vCoreAccount, 'id', 'vCoreAccount.id', 'VCoreBranchDataProvider.ts'), - { - dbExperience: MongoClustersExperience, - id: vCoreAccount.id!, - name: vCoreAccount.name!, - resourceGroup: getResourceGroupFromId(vCoreAccount.id!), - - location: vCoreAccount.location, - serverVersion: vCoreAccount.properties?.serverVersion, - - systemData: { - createdAt: vCoreAccount.systemData?.createdAt, - }, - - sku: vCoreAccount.properties?.compute?.tier, - diskSize: vCoreAccount.properties?.storage?.sizeGb, - nodeCount: vCoreAccount.properties?.sharding?.shardCount, - enableHa: vCoreAccount.properties?.highAvailability?.targetMode !== 'Disabled', - }, - ); - }); - } catch (e) { - console.debug( - 'Failed to load metadata for %s/%s', - context.telemetry.properties.view, - context.telemetry.properties.branch, - ); - console.debug({ ...context, ...subscription }); - throw e; - } - }, - ); - } } diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 1eea77f6f..9d04a4544 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -11,15 +11,12 @@ import { createContextValue, type IActionContext, } from '@microsoft/vscode-azext-utils'; -import { - type AzureResource, - type AzureSubscription, - type BranchDataProvider, -} from '@microsoft/vscode-azureresources-api'; +import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; import { MongoExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; import { ext } from '../../../extensionVariables'; import { CaseInsensitiveMap } from '../../../utils/CaseInsensitiveMap'; +import { LazyMetadataLoader } from '../../../utils/LazyMetadataLoader'; import { createCosmosDBManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; @@ -39,26 +36,65 @@ export class RUBranchDataProvider extends vscode.Disposable implements BranchDataProvider, ExtendedTreeDataProvider { - // these three properties support lazy detail information loading - private detailsCacheUpdateRequested = true; // this is just a "wip" and low prio disabled for this iteration - /** - * A case-insensitive map is used for the details cache to address inconsistencies in Azure resource ID casing. - * - * The resource ID for the same Azure resource can vary in casing depending on the source. - * For instance, the Azure Resources extension (likely using `@azure/arm-resources`) may provide an ID - * with a different casing than the ID retrieved from the dedicated `@azure/arm-cosmosdb` client, which is - * used to populate this cache. This discrepancy is likely due to hardcoded provider strings in the different SDKs. - * - * Example of differing IDs for the same resource (look for Document>>DB<< and Document>>Db<<): - * - From Azure Resources extension: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDb/databaseAccounts/account-name` - * - From `@azure/arm-cosmosdb`: `/subscriptions/sub-id/resourceGroups/rg-name/providers/Microsoft.DocumentDB/databaseAccounts/account-name` - * - * To ensure reliable lookups regardless of the source, we normalize the keys by using a case-insensitive map, - * which internally converts all keys to lowercase. + * Helper for managing lazy metadata loading with proper caching and item updates. + * This replaces the manual cache management that was previously done with + * detailsCacheUpdateRequested, detailsCache, and itemsToUpdateInfo properties. */ - private detailsCache: Map = new CaseInsensitiveMap(); - private itemsToUpdateInfo: Map = new CaseInsensitiveMap(); + private readonly metadataLoader = new LazyMetadataLoader({ + cacheDuration: 5 * 60 * 1000, // 5 minutes + loadMetadata: async (subscription, context) => { + console.debug( + 'Loading metadata cache for %s/%s', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument + const managementClient = await createCosmosDBManagementClient(context, subscription as any); + let ruAccounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); + ruAccounts = ruAccounts.filter((account) => account.kind === 'MongoDB'); // ignore non-ru accounts + + console.debug( + 'Loaded metadata for %s/%s: %d entries', + context.telemetry.properties.view, + context.telemetry.properties.branch, + ruAccounts.length, + ); + + const cache = new CaseInsensitiveMap(); + ruAccounts.forEach((ruAccount) => { + cache.set(nonNullProp(ruAccount, 'id', 'ruAccount.id', 'RUBranchDataProvider.ts'), { + dbExperience: MongoExperience, + id: ruAccount.id!, + name: ruAccount.name!, + resourceGroup: getResourceGroupFromId(ruAccount.id!), + location: ruAccount.location, + serverVersion: ruAccount?.apiProperties?.serverVersion, + systemData: { + createdAt: ruAccount.systemData?.createdAt, + }, + capabilities: + ruAccount.capabilities && ruAccount.capabilities.length > 0 + ? ruAccount.capabilities + .map((cap) => cap.name) + .filter((name) => name !== undefined) + .join(', ') + : undefined, + }); + }); + return cache; + }, + updateItem: (item, metadata) => { + if (metadata) { + item.cluster = { ...item.cluster, ...metadata }; + if (item.cluster.serverVersion) { + item.descriptionOverride = `v${item.cluster.serverVersion}`; + } + } + }, + refreshCallback: (item) => this.refresh(item), + }); /** * Cache for tracking parent-child relationships to support the getParent method. @@ -105,6 +141,7 @@ export class RUBranchDataProvider constructor() { super(() => { this.onDidChangeTreeDataEmitter.dispose(); + this.metadataLoader.dispose(); }); } @@ -259,48 +296,29 @@ export class RUBranchDataProvider context.telemetry.properties.view = Views.AzureResourcesView; context.telemetry.properties.branch = 'ru'; - if (this.detailsCacheUpdateRequested) { - void this.updateMetadataCache(context, resource.subscription, 1000 * 60 * 5).then(() => { - /** - * Instances of MongoClusterItem were stored in the itemsToUpdateInfo map, - * so that when the cache is updated, the items can be refreshed. - * I had to keep all of them in the map becasuse refresh requires the actual MongoClusterItem instance. - */ - this.itemsToUpdateInfo.forEach((value: RUResourceItem) => { - value.cluster = { - ...value.cluster, - ...this.detailsCache.get(value.cluster.id), - }; - - if (value.cluster.serverVersion) { - value.descriptionOverride = `v${value.cluster.serverVersion}`; - } - - this.refresh(value); - }); - - this.itemsToUpdateInfo.clear(); - }); + // Trigger cache loading if needed + if (this.metadataLoader.needsCacheUpdate) { + void this.metadataLoader.loadCacheAndRefreshItems(resource.subscription, context); } + // Get metadata from cache (may be undefined if not yet loaded) + const cachedMetadata = this.metadataLoader.getCachedMetadata(resource.id); + let clusterInfo: ClusterModel = { ...resource, dbExperience: MongoExperience, } as ClusterModel; - // 2. lookup the details in the cache, on subsequent refreshes, the details will be available in the cache - if (this.detailsCache.has(clusterInfo.id)) { - clusterInfo = { - ...clusterInfo, - ...this.detailsCache.get(clusterInfo.id), - }; + // Merge with cached metadata if available + if (cachedMetadata) { + clusterInfo = { ...clusterInfo, ...cachedMetadata }; } const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); - // 3. store the item in the update queue, so that when the cache is updated, the item can be refreshed - this.itemsToUpdateInfo.set(clusterItem.id, clusterItem); + // Register item for refresh when cache loading completes + this.metadataLoader.addItemForRefresh(resource.id, clusterItem); return clusterItem; }) as TreeElement | Thenable; // Cast to ensure correct type; @@ -325,85 +343,4 @@ export class RUBranchDataProvider treeItem.contextValue = createContextValue(contextValues); } - - async updateMetadataCache( - _context: IActionContext, - subscription: AzureSubscription, - cacheDuration: number, - ): Promise { - return callWithTelemetryAndErrorHandling( - 'getResourceItem.updateMetadataCache', - async (context: IActionContext) => { - context.telemetry.properties.view = Views.AzureResourcesView; - context.telemetry.properties.branch = 'documentdb'; - - try { - console.debug( - 'Loading metadata cache for %s/%s', - context.telemetry.properties.view, - context.telemetry.properties.branch, - ); - - this.detailsCacheUpdateRequested = false; - - setTimeout(() => { - this.detailsCache.clear(); - this.detailsCacheUpdateRequested = true; - console.debug( - 'Cleared metadata cache for %s/%s', - context.telemetry.properties.view, - context.telemetry.properties.branch, - ); - }, cacheDuration); // clear cache when the it expires - - // subscription comes from different azure packages in callers; cast here intentionally - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument - const managementClient = await createCosmosDBManagementClient(context, subscription as any); - - let accounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); - accounts = accounts.filter((account) => account.kind === 'MongoDB'); // ignore non-ru accounts - - console.debug( - 'Loaded metadata for %s/%s: %d entries', - context.telemetry.properties.view, - context.telemetry.properties.branch, - accounts.length, - ); - - accounts.map((ruAccount) => { - this.detailsCache.set(nonNullProp(ruAccount, 'id', 'ruAccount.id', 'RUBranchDataProvider.ts'), { - dbExperience: MongoExperience, - id: ruAccount.id!, - name: ruAccount.name!, - resourceGroup: getResourceGroupFromId(ruAccount.id!), - - location: ruAccount.location, - serverVersion: ruAccount?.apiProperties?.serverVersion, - - systemData: { - createdAt: ruAccount.systemData?.createdAt, - }, - ...{ - capabilities: - ruAccount.capabilities && ruAccount.capabilities.length > 0 - ? ruAccount.capabilities - .map((cap) => cap.name) - .filter((name) => name !== undefined) - .join(', ') - : undefined, - }, - }); - }); - } catch (e) { - console.debug( - 'Failed to load metadata for %s/%s', - context.telemetry.properties.view, - context.telemetry.properties.branch, - ); - console.debug({ ...context, ...subscription }); - throw e; - } - }, - ); - } } diff --git a/src/utils/LazyMetadataLoader.ts b/src/utils/LazyMetadataLoader.ts new file mode 100644 index 000000000..0001f0e85 --- /dev/null +++ b/src/utils/LazyMetadataLoader.ts @@ -0,0 +1,244 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type IActionContext } from '@microsoft/vscode-azext-utils'; +import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; + +import { CaseInsensitiveMap } from './CaseInsensitiveMap'; + +/** + * Configuration interface for the LazyMetadataLoader. + * + * @template TMetadata The type of metadata being cached (e.g., ClusterModel) + * @template TItem The type of resource items that will be updated (e.g., RUResourceItem, VCoreResourceItem) + */ +export interface LazyMetadataLoaderConfig { + /** Duration in milliseconds for how long the cache should remain valid */ + readonly cacheDuration: number; + + /** + * Function to load metadata from the Azure API. + * Should return a Map where keys are resource IDs and values are metadata objects. + */ + readonly loadMetadata: ( + subscription: AzureSubscription, + context: IActionContext, + ) => Promise>; + + /** + * Function to update a resource item with new metadata. + * This is called when the cache is refreshed and items need to be updated. + */ + readonly updateItem: (item: TItem, metadata: TMetadata | undefined) => void; + + /** + * Callback function to refresh the item in the tree view. + * This is typically the refresh method from the tree data provider. + */ + readonly refreshCallback: (item: TItem) => void; +} + +/** + * LazyMetadataLoader is a helper class that manages lazy loading of detailed metadata for Azure resources. + * + * ## Purpose + * This class exists to address a common pattern in tree data providers where: + * 1. Initial resource information comes from the Azure Resources extension (basic info only) + * 2. Detailed metadata needs to be loaded separately using dedicated Azure SDK clients + * 3. Resource items need to be updated once the detailed metadata becomes available + * 4. Cache needs to be managed with proper expiration and cleanup + * + * ## The Problem It Solves + * Without this helper, each BranchDataProvider would need to implement: + * - A flag to track if cache update has been requested + * - A cache to store the detailed metadata + * - A map to track items that need updating after cache refresh + * - Cache expiration logic with setTimeout + * - Coordination between cache loading and item updates + * + * ## How It Works + * 1. Caller checks `needsCacheUpdate` to determine if background loading should be triggered + * 2. Resource items are registered via `addItemForRefresh()` to be updated when metadata loads + * 3. When `loadCacheAndRefreshItems()` completes, all registered items are updated and refreshed + * 4. Cache automatically expires after the configured duration + * + * ## Usage Example + * ```typescript + * private readonly metadataLoader = new LazyMetadataLoader({ + * cacheDuration: 5 * 60 * 1000, // 5 minutes + * loadMetadata: async (subscription, context) => { + * const client = await createCosmosDBManagementClient(context, subscription); + * const accounts = await client.databaseAccounts.list(); + * const cache = new CaseInsensitiveMap(); + * accounts.forEach(account => cache.set(account.id!, transformToClusterModel(account))); + * return cache; + * }, + * updateItem: (item, metadata) => { + * item.cluster = { ...item.cluster, ...metadata }; + * }, + * refreshCallback: (item) => this.refresh(item), + * }); + * + * // In getResourceItem(): + * if (this.metadataLoader.needsCacheUpdate) { + * void this.metadataLoader.loadCacheAndRefreshItems(resource.subscription, context); + * } + * const metadata = this.metadataLoader.getCachedMetadata(resource.id); + * const item = new RUResourceItem(subscription, { ...resource, ...metadata }); + * this.metadataLoader.addItemForRefresh(resource.id, item); + * ``` + * + * @template TMetadata The type of metadata being cached + * @template TItem The type of resource items that will be updated + */ +export class LazyMetadataLoader { + private readonly config: LazyMetadataLoaderConfig; + + /** Flag to track if cache update is needed */ + private cacheUpdateNeeded = true; + + /** + * Cache for storing detailed metadata. + * Uses CaseInsensitiveMap to handle Azure resource ID casing inconsistencies. + */ + private readonly metadataCache = new CaseInsensitiveMap(); + + /** + * Map of items that need to be refreshed when cache loading completes. + * Uses CaseInsensitiveMap to handle Azure resource ID casing inconsistencies. + */ + private readonly itemsToRefresh = new CaseInsensitiveMap(); + + /** Timer ID for cache expiration */ + private cacheExpirationTimer: NodeJS.Timeout | undefined; + + constructor(config: LazyMetadataLoaderConfig) { + this.config = config; + } + + /** + * Gets cached metadata for a resource. + * Returns undefined if metadata is not yet available in cache. + * + * @param resourceId The Azure resource ID + * @returns The cached metadata if available, undefined otherwise + */ + getCachedMetadata(resourceId: string): TMetadata | undefined { + return this.metadataCache.get(resourceId); + } + + /** + * Adds a resource item to be refreshed when the cache loading completes. + * Items added here will have their metadata updated and UI refreshed once + * the background cache loading finishes. + * + * @param resourceId The Azure resource ID + * @param item The resource item that should be updated when metadata becomes available + */ + addItemForRefresh(resourceId: string, item: TItem): void { + this.itemsToRefresh.set(resourceId, item); + } + + /** + * Loads metadata from Azure and refreshes all registered items. + * This method should be called by the BranchDataProvider when it has access to + * subscription and context information. + * + * @param subscription The Azure subscription + * @param context The action context for telemetry and error handling + */ + async loadCacheAndRefreshItems(subscription: AzureSubscription, context: IActionContext): Promise { + try { + // Mark cache update as no longer needed to prevent multiple concurrent loads + this.cacheUpdateNeeded = false; + + // Load metadata using the provided function + const newMetadata = await this.config.loadMetadata(subscription, context); + + // Update the cache + this.metadataCache.clear(); + newMetadata.forEach((metadata, resourceId) => { + this.metadataCache.set(resourceId, metadata); + }); + + // Update and refresh all registered items + this.itemsToRefresh.forEach((item, resourceId) => { + const metadata = this.metadataCache.get(resourceId); + this.config.updateItem(item, metadata); + this.config.refreshCallback(item); + }); + + // Clear the items to refresh map + this.itemsToRefresh.clear(); + + // Set up cache expiration + this.setupCacheExpiration(); + } catch (error) { + console.error('Failed to load metadata cache:', error); + + // ensure we don't attempt to refresh again. + // This lazy metadata support is non-essential, so we can safely ignore errors and ignore the results. + this.cacheUpdateNeeded = false; + throw error; + } + } + + /** + * Clears all cached data and resets the loader state. + * Useful when subscription changes or manual cache invalidation is needed. + */ + clearCache(): void { + this.metadataCache.clear(); + this.itemsToRefresh.clear(); + this.cacheUpdateNeeded = true; + + if (this.cacheExpirationTimer) { + clearTimeout(this.cacheExpirationTimer); + this.cacheExpirationTimer = undefined; + } + } + + /** + * Sets up automatic cache expiration using setTimeout. + */ + private setupCacheExpiration(): void { + // Clear any existing timer + if (this.cacheExpirationTimer) { + clearTimeout(this.cacheExpirationTimer); + } + + // Set up new expiration timer + this.cacheExpirationTimer = setTimeout(() => { + this.metadataCache.clear(); + this.cacheUpdateNeeded = true; + this.cacheExpirationTimer = undefined; + console.debug('Metadata cache expired and cleared'); + }, this.config.cacheDuration); + } + + /** + * Checks if cache loading is needed. + * Useful for conditional logic in the calling code. + */ + get needsCacheUpdate(): boolean { + return this.cacheUpdateNeeded; + } + + /** + * Gets the current size of the metadata cache. + * Useful for debugging and telemetry. + */ + get cacheSize(): number { + return this.metadataCache.size; + } + + /** + * Disposes the loader and cleans up resources. + * Should be called when the loader is no longer needed. + */ + dispose(): void { + this.clearCache(); + } +} From 9a64d7c7bc31ec49910cb321eccda0a91f61d8d0 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 12:53:17 +0200 Subject: [PATCH 24/81] fix: description override on ru items wasn't always set --- .../azure-resources-view/mongo-ru/RUBranchDataProvider.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 9d04a4544..fce1dd527 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -317,6 +317,10 @@ export class RUBranchDataProvider const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); + if (cachedMetadata?.serverVersion) { + clusterItem.descriptionOverride = `v${cachedMetadata.serverVersion}`; + } + // Register item for refresh when cache loading completes this.metadataLoader.addItemForRefresh(resource.id, clusterItem); From 2d68c3e8b56cdb7d1cc09bccacc04bb33dfc0a50 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 14:07:41 +0200 Subject: [PATCH 25/81] simplifying context value formats and improving when clauses in the package.json --- package.json | 54 +++++++++---------- src/DocumentDBExperiences.ts | 2 +- .../documentdb/VCoreBranchDataProvider.ts | 6 ++- .../mongo-ru/RUBranchDataProvider.ts | 5 +- .../ConnectionsBranchDataProvider.ts | 8 +-- .../LocalEmulators/LocalEmulatorsItem.ts | 2 +- .../NewEmulatorConnectionItemCV.ts | 2 +- .../connections-view/NewConnectionItemCV.ts | 2 +- .../DiscoveryBranchDataProvider.ts | 9 ++-- src/tree/documentdb/ClusterItemBase.ts | 12 ++--- src/tree/documentdb/CollectionItem.ts | 4 +- src/tree/documentdb/DatabaseItem.ts | 6 +-- src/tree/documentdb/DocumentsItem.ts | 4 +- src/tree/documentdb/IndexItem.ts | 4 +- src/tree/documentdb/IndexesItem.ts | 4 +- .../LocalEmulators/LocalEmulatorsItem.ts | 2 +- .../NewEmulatorConnectionItem.ts | 2 +- .../documentdb/NewConnectionItem.ts | 2 +- src/utils/pickItem/pickAppResource.ts | 2 +- 19 files changed, 67 insertions(+), 65 deletions(-) diff --git a/package.json b/package.json index ead331ec7..fa286925b 100644 --- a/package.json +++ b/package.json @@ -455,13 +455,13 @@ { "//": "[Database] Scrapbook: New Scrapbook", "command": "vscode-documentdb.command.scrapbook.new", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]database(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@1" }, { "//": "[Database] Scrapbook: Connect", "command": "vscode-documentdb.command.scrapbook.connect", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]database(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@2" } ], @@ -469,13 +469,13 @@ { "//": "[Collection] Mongo DB|Cluster Scrapbook New", "command": "vscode-documentdb.command.scrapbook.new", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@1" }, { "//": "[Collection] Scrapbook / Connect", "command": "vscode-documentdb.command.scrapbook.connect", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@2" } ], @@ -515,23 +515,23 @@ "view/item/context": [ { "command": "vscode-documentdb.command.connectionsView.updateConnectionString", - "when": "view == connectionsView && viewItem =~ /treeitem[.]mongoCluster(?![a-z.\\/])/i", + "when": "view == connectionsView && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "0@2" }, { "command": "vscode-documentdb.command.connectionsView.updateCredentials", - "when": "view == connectionsView && viewItem =~ /treeitem[.]mongoCluster(?![a-z.\\/])/i", + "when": "view == connectionsView && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "0@3" }, { "command": "vscode-documentdb.command.connectionsView.renameConnection", - "when": "view == connectionsView && viewItem =~ /treeitem[.]mongoCluster(?![a-z.\\/])/i", + "when": "view == connectionsView && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "0@4" }, { "//": "Remove Connection...", "command": "vscode-documentdb.command.connectionsView.removeConnection", - "when": "view == connectionsView && viewItem =~ /treeitem[.]mongoCluster(?![a-z.\\/])/i", + "when": "view == connectionsView && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "0@5" }, { @@ -541,12 +541,12 @@ }, { "command": "vscode-documentdb.command.discoveryView.addConnectionToConnectionsView", - "when": "view == discoveryView && viewItem =~ /treeItem.*mongoCluster/i", + "when": "view == discoveryView && viewItem =~ /\\btreeitem_.documentdbcluster\\b/i", "group": "0@1" }, { "command": "vscode-documentdb.command.discoveryView.addConnectionToConnectionsView", - "when": "view == discoveryView && viewItem =~ /treeItem.*mongoCluster/i", + "when": "view == discoveryView && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "inline" }, { @@ -572,103 +572,103 @@ { "//": "Create database", "command": "vscode-documentdb.command.createDatabase", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.](mongoCluster|account)(?![a-z.\\/])/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_(documentdbcluster|account)\\b/i", "group": "1@1" }, { "//": "Copy connection string", "command": "vscode-documentdb.command.copyConnectionString", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.](mongoCluster|account)(?![a-z.\\/])/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView|Workspace)/ && viewItem =~ /\\btreeitem_(documentdbcluster|account)\\b/i", "group": "0@1" }, { "//": "[Account] Mongo DB|Cluster Launch Shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]mongoCluster(?![a-z.\\/])/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "2@2" }, { "//": "[Database] Create collection", "command": "vscode-documentdb.command.createCollection", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]database(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@1" }, { "//": "[Database] Delete database", "command": "vscode-documentdb.command.dropDatabase", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]database(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@2" }, { "//": "[Database] Mongo DB|Cluster Launch Shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]database(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "2@1" }, { "//": "[Database] Mongo DB|Cluster Scrapbook Submenu", "submenu": "documentDB.submenus.mongo.database.scrapbook", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]database(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "2@2" }, { "//": "[Collection] Mongo DB|Cluster Open collection", "command": "vscode-documentdb.command.containerView.open", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@1" }, { "//": "[Collection] Create document", "command": "vscode-documentdb.command.createDocument", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@2" }, { "//": "[Collection] Import Documents", "command": "vscode-documentdb.command.importDocuments", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "2@1" }, { "//": "[Collection] Export documents", "command": "vscode-documentdb.command.exportDocuments", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "2@2" }, { "//": "[Collection] Data Migration", "command": "vscode-documentdb.command.chooseDataMigrationExtension", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]mongoCluster(?![a-z.\\/])/i && migrationProvidersAvailable", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i && migrationProvidersAvailable", "group": "1@2" }, { "//": "[Collection] Drop collection", "command": "vscode-documentdb.command.dropCollection", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "3@1" }, { "//": "[Collection] Launch shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "4@1" }, { "//": "[Collection] Mongo DB|Cluster Scrapbook Submenu", "submenu": "documentDB.submenus.mongo.collection.scrapbook", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]collection(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "4@2" }, { "//": "[Collection/Documents] Mongo DB|Cluster Open collection", "command": "vscode-documentdb.command.containerView.open", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /treeitem[.]documents(?![a-z.\\/])/i && viewItem =~ /experience[.](mongocluster|mongodb)/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documents\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", "group": "1@1" }, { "//": "[TreeItem] Refresh Item (cluster, database, collection, documents, indexes)", "command": "vscode-documentdb.command.refresh", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem[.](mongoCluster|database|collection|documents|indexes|index)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_(documentdbcluster|database|collection|documents|indexes|index)\\b/i", "group": "zheLastGroup@1" }, { diff --git a/src/DocumentDBExperiences.ts b/src/DocumentDBExperiences.ts index 67985a3a6..ec95c3d02 100644 --- a/src/DocumentDBExperiences.ts +++ b/src/DocumentDBExperiences.ts @@ -6,7 +6,7 @@ export enum API { MongoDB = 'MongoDB', MongoClusters = 'MongoClusters', - DocumentDB = 'DocumentDB', // This the entry for new API (DocumentDB). + DocumentDB = 'DocumentDB', } export function getExperienceFromApi(api: API): Experience { diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 179bfa3e0..df1aee7a4 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -177,7 +177,7 @@ export class VCoreBranchDataProvider return children?.map((child) => { if (child.id) { if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, Views.AzureResourcesView, 'documentdbBranch'); + this.appendContextValues(child, Views.AzureResourcesView, 'documentDbBranch'); } // Register parent-child relationship in the cache @@ -305,6 +305,10 @@ export class VCoreBranchDataProvider const clusterItem = new VCoreResourceItem(resource.subscription, clusterInfo); ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); + if (isTreeElementWithContextValue(clusterItem)) { + this.appendContextValues(clusterItem, Views.AzureResourcesView, 'documentDbBranch'); + } + // Register item for refresh when cache loading completes this.metadataLoader.addItemForRefresh(resource.id, clusterItem); diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index fce1dd527..eee4ad4b3 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -189,7 +189,7 @@ export class RUBranchDataProvider return children?.map((child) => { if (child.id) { if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, Views.AzureResourcesView, 'documentdbBranch'); + this.appendContextValues(child, Views.AzureResourcesView, 'ruBranch'); } // Register parent-child relationship in the cache @@ -316,6 +316,9 @@ export class RUBranchDataProvider const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); + if (isTreeElementWithContextValue(clusterItem)) { + this.appendContextValues(clusterItem, Views.AzureResourcesView, 'ruBranch'); + } if (cachedMetadata?.serverVersion) { clusterItem.descriptionOverride = `v${cachedMetadata.serverVersion}`; diff --git a/src/tree/connections-view/ConnectionsBranchDataProvider.ts b/src/tree/connections-view/ConnectionsBranchDataProvider.ts index 6296a4e50..8e7c915fb 100644 --- a/src/tree/connections-view/ConnectionsBranchDataProvider.ts +++ b/src/tree/connections-view/ConnectionsBranchDataProvider.ts @@ -78,9 +78,9 @@ export class ConnectionsBranchDataProvider extends vscode.Disposable implements }); } - appendContextValue(treeItem: TreeElementWithContextValue, contextValueToAppend: string): void { + appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { // all items returned from this view need that context value assigned - const contextValues: string[] = [contextValueToAppend]; + const contextValues: string[] = contextValuesToAppend; // keep original contextValues if any if (treeItem.contextValue) { @@ -120,7 +120,7 @@ export class ConnectionsBranchDataProvider extends vscode.Disposable implements // Now process and add each root item to the cache for (const item of rootItems) { if (isTreeElementWithContextValue(item)) { - this.appendContextValue(item, Views.ConnectionsView); + this.appendContextValues(item, Views.ConnectionsView); } // Add root items to the cache @@ -169,7 +169,7 @@ export class ConnectionsBranchDataProvider extends vscode.Disposable implements return children?.map((child) => { if (child.id) { if (isTreeElementWithContextValue(child)) { - this.appendContextValue(child, Views.ConnectionsView); + this.appendContextValues(child, Views.ConnectionsView); } // Register parent-child relationship in the cache diff --git a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts index 86c150ad0..13c3fa442 100644 --- a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts +++ b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts @@ -23,7 +23,7 @@ import { NewEmulatorConnectionItemCV } from './NewEmulatorConnectionItemCV'; export class LocalEmulatorsItem implements TreeElement, TreeElementWithContextValue { public readonly id: string; - public contextValue: string = 'treeItem.LocalEmulators'; + public contextValue: string = 'treeItem_LocalEmulators'; constructor(public readonly parentId: string) { this.id = `${parentId}/localEmulators`; diff --git a/src/tree/connections-view/LocalEmulators/NewEmulatorConnectionItemCV.ts b/src/tree/connections-view/LocalEmulators/NewEmulatorConnectionItemCV.ts index d7818df5a..9bdbe9676 100644 --- a/src/tree/connections-view/LocalEmulators/NewEmulatorConnectionItemCV.ts +++ b/src/tree/connections-view/LocalEmulators/NewEmulatorConnectionItemCV.ts @@ -10,7 +10,7 @@ import { type TreeElementWithContextValue } from '../../TreeElementWithContextVa export class NewEmulatorConnectionItemCV implements TreeElement, TreeElementWithContextValue { public readonly id: string; - public contextValue: string = 'treeItem.newEmulatorConnection'; + public contextValue: string = 'treeItem_newEmulatorConnection'; constructor(public readonly parentId: string) { this.id = `${parentId}/newEmulatorConnection`; diff --git a/src/tree/connections-view/NewConnectionItemCV.ts b/src/tree/connections-view/NewConnectionItemCV.ts index b65f47305..ee0df0722 100644 --- a/src/tree/connections-view/NewConnectionItemCV.ts +++ b/src/tree/connections-view/NewConnectionItemCV.ts @@ -13,7 +13,7 @@ import { type TreeElementWithContextValue } from '../TreeElementWithContextValue */ export class NewConnectionItemCV implements TreeElement, TreeElementWithContextValue { public readonly id: string; - public contextValue: string = 'treeItem.newConnection'; + public contextValue: string = 'treeItem_newConnection'; constructor(public readonly parentId: string) { this.id = `${parentId}/newConnection`; diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index 64dbac7e3..57db55fa9 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -132,9 +132,9 @@ export class DiscoveryBranchDataProvider extends vscode.Disposable implements Ex }); } - appendContextValue(treeItem: TreeElementWithContextValue, contextValueToAppend: string): void { + appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { // all items returned from this view need that context value assigned - const contextValues: string[] = [contextValueToAppend]; + const contextValues: string[] = contextValuesToAppend; // keep original contextValues if any if (treeItem.contextValue) { @@ -179,8 +179,7 @@ export class DiscoveryBranchDataProvider extends vscode.Disposable implements Ex const rootItem = discoveryProvider.getDiscoveryTreeRootItem(Views.DiscoveryView); if (isTreeElementWithContextValue(rootItem)) { - this.appendContextValue(rootItem, Views.DiscoveryView); - this.appendContextValue(rootItem, 'rootItem'); + this.appendContextValues(rootItem, Views.DiscoveryView, 'rootItem'); } // Wrap the root item with state handling for refresh support @@ -252,7 +251,7 @@ export class DiscoveryBranchDataProvider extends vscode.Disposable implements Ex // Wrap each child with state handling for refresh support return children.map((child) => { if (isTreeElementWithContextValue(child)) { - this.appendContextValue(child, Views.DiscoveryView); + this.appendContextValues(child, Views.DiscoveryView); } const wrappedChild = ext.state.wrapItemInStateHandling(child, () => diff --git a/src/tree/documentdb/ClusterItemBase.ts b/src/tree/documentdb/ClusterItemBase.ts index 147a91138..5dd6fbbde 100644 --- a/src/tree/documentdb/ClusterItemBase.ts +++ b/src/tree/documentdb/ClusterItemBase.ts @@ -46,7 +46,7 @@ export abstract class ClusterItemBase { public readonly id: string; public readonly experience: Experience; - public contextValue: string = 'treeItem.mongoCluster'; + public contextValue: string = 'treeItem_documentdbcluster'; public descriptionOverride?: string; protected tooltipOverride?: string | vscode.MarkdownString; @@ -71,7 +71,7 @@ export abstract class ClusterItemBase protected constructor(public cluster: ClusterModel) { this.id = cluster.id ?? ''; this.experience = cluster.dbExperience; - this.experienceContextValue = `experience.${this.experience.api}`; + this.experienceContextValue = `experience_${this.experience.api}`; this.contextValue = createContextValue([this.contextValue, this.experienceContextValue]); } @@ -144,7 +144,7 @@ export abstract class ClusterItemBase if (databases.length === 0) { return [ createGenericElement({ - contextValue: createContextValue(['treeItem.no-databases', this.experienceContextValue]), + contextValue: createContextValue(['treeItem_no-databases', this.experienceContextValue]), id: `${this.id}/no-databases`, label: l10n.t('Create Database…'), iconPath: new vscode.ThemeIcon('plus'), @@ -183,11 +183,7 @@ export abstract class ClusterItemBase id: this.id, contextValue: this.contextValue, label: this.cluster.name, - description: this.descriptionOverride - ? this.descriptionOverride - : this.cluster.sku !== undefined - ? `(${this.cluster.sku})` - : false, + description: this.contextValue, iconPath: this.iconPath ?? undefined, tooltip: this.tooltipOverride ? this.tooltipOverride diff --git a/src/tree/documentdb/CollectionItem.ts b/src/tree/documentdb/CollectionItem.ts index c277440c9..fcec32a84 100644 --- a/src/tree/documentdb/CollectionItem.ts +++ b/src/tree/documentdb/CollectionItem.ts @@ -17,7 +17,7 @@ import { IndexesItem } from './IndexesItem'; export class CollectionItem implements TreeElement, TreeElementWithExperience, TreeElementWithContextValue { public readonly id: string; public readonly experience: Experience; - public contextValue: string = 'treeItem.collection'; + public contextValue: string = 'treeItem_collection'; private readonly experienceContextValue: string = ''; @@ -28,7 +28,7 @@ export class CollectionItem implements TreeElement, TreeElementWithExperience, T ) { this.id = `${cluster.id}/${databaseInfo.name}/${collectionInfo.name}`; this.experience = cluster.dbExperience; - this.experienceContextValue = `experience.${this.experience.api}`; + this.experienceContextValue = `experience_${this.experience.api}`; this.contextValue = createContextValue([this.contextValue, this.experienceContextValue]); } diff --git a/src/tree/documentdb/DatabaseItem.ts b/src/tree/documentdb/DatabaseItem.ts index 6e933e2ae..5bdf437d8 100644 --- a/src/tree/documentdb/DatabaseItem.ts +++ b/src/tree/documentdb/DatabaseItem.ts @@ -17,7 +17,7 @@ import { CollectionItem } from './CollectionItem'; export class DatabaseItem implements TreeElement, TreeElementWithExperience, TreeElementWithContextValue { public readonly id: string; public readonly experience: Experience; - public contextValue: string = 'treeItem.database'; + public contextValue: string = 'treeItem_database'; private readonly experienceContextValue: string = ''; @@ -27,7 +27,7 @@ export class DatabaseItem implements TreeElement, TreeElementWithExperience, Tre ) { this.id = `${cluster.id}/${databaseInfo.name}`; this.experience = cluster.dbExperience; - this.experienceContextValue = `experience.${this.experience?.api}`; + this.experienceContextValue = `experience_${this.experience?.api}`; this.contextValue = createContextValue([this.contextValue, this.experienceContextValue]); } @@ -39,7 +39,7 @@ export class DatabaseItem implements TreeElement, TreeElementWithExperience, Tre // no databases in there: return [ createGenericElement({ - contextValue: createContextValue(['treeItem.no-collections', this.experienceContextValue]), + contextValue: createContextValue(['treeItem_no-collections', this.experienceContextValue]), id: `${this.id}/no-collections`, label: l10n.t('Create Collection…'), iconPath: new vscode.ThemeIcon('plus'), diff --git a/src/tree/documentdb/DocumentsItem.ts b/src/tree/documentdb/DocumentsItem.ts index bada889a5..43f04b23e 100644 --- a/src/tree/documentdb/DocumentsItem.ts +++ b/src/tree/documentdb/DocumentsItem.ts @@ -17,7 +17,7 @@ import { type CollectionItem } from './CollectionItem'; export class DocumentsItem implements TreeElement, TreeElementWithExperience, TreeElementWithContextValue { public readonly id: string; public readonly experience: Experience; - public contextValue: string = 'treeItem.documents'; + public contextValue: string = 'treeItem_documents'; private readonly experienceContextValue: string = ''; @@ -38,7 +38,7 @@ export class DocumentsItem implements TreeElement, TreeElementWithExperience, Tr ) { this.id = `${cluster.id}/${databaseInfo.name}/${collectionInfo.name}/documents`; this.experience = cluster.dbExperience; - this.experienceContextValue = `experience.${this.experience.api}`; + this.experienceContextValue = `experience_${this.experience.api}`; this.contextValue = createContextValue([this.contextValue, this.experienceContextValue]); } diff --git a/src/tree/documentdb/IndexItem.ts b/src/tree/documentdb/IndexItem.ts index 32b986687..ffc389594 100644 --- a/src/tree/documentdb/IndexItem.ts +++ b/src/tree/documentdb/IndexItem.ts @@ -15,7 +15,7 @@ import { type ClusterModel } from './ClusterModel'; export class IndexItem implements TreeElement, TreeElementWithExperience, TreeElementWithContextValue { public readonly id: string; public readonly experience: Experience; - public contextValue: string = 'treeItem.index'; + public contextValue: string = 'treeItem_index'; private readonly experienceContextValue: string = ''; @@ -27,7 +27,7 @@ export class IndexItem implements TreeElement, TreeElementWithExperience, TreeEl ) { this.id = `${cluster.id}/${databaseInfo.name}/${collectionInfo.name}/indexes/${indexInfo.name}`; this.experience = cluster.dbExperience; - this.experienceContextValue = `experience.${this.experience.api}`; + this.experienceContextValue = `experience_${this.experience.api}`; this.contextValue = createContextValue([this.contextValue, this.experienceContextValue]); } diff --git a/src/tree/documentdb/IndexesItem.ts b/src/tree/documentdb/IndexesItem.ts index 19112b8a6..2308ea2d1 100644 --- a/src/tree/documentdb/IndexesItem.ts +++ b/src/tree/documentdb/IndexesItem.ts @@ -17,7 +17,7 @@ import { IndexItem } from './IndexItem'; export class IndexesItem implements TreeElement, TreeElementWithExperience, TreeElementWithContextValue { public readonly id: string; public readonly experience: Experience; - public contextValue: string = 'treeItem.indexes'; + public contextValue: string = 'treeItem_indexes'; private readonly experienceContextValue: string = ''; @@ -28,7 +28,7 @@ export class IndexesItem implements TreeElement, TreeElementWithExperience, Tree ) { this.id = `${cluster.id}/${databaseInfo.name}/${collectionInfo.name}/indexes`; this.experience = cluster.dbExperience; - this.experienceContextValue = `experience.${this.experience.api}`; + this.experienceContextValue = `experience_${this.experience.api}`; this.contextValue = createContextValue([this.contextValue, this.experienceContextValue]); } diff --git a/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts b/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts index 5f56c9c00..80553e044 100644 --- a/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts +++ b/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts @@ -18,7 +18,7 @@ import { NewEmulatorConnectionItem } from './NewEmulatorConnectionItem'; export class LocalEmulatorsItem implements TreeElement, TreeElementWithContextValue { public readonly id: string; - public readonly contextValue: string = 'treeItem.newConnection'; + public readonly contextValue: string = 'treeItem_newConnection'; constructor(public readonly parentId: string) { this.id = `${parentId}/localEmulators`; diff --git a/src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts b/src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts index 8ec0d3ed2..096fadf52 100644 --- a/src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts +++ b/src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts @@ -10,7 +10,7 @@ import { type TreeElementWithContextValue } from '../../../TreeElementWithContex export class NewEmulatorConnectionItem implements TreeElement, TreeElementWithContextValue { public readonly id: string; - public readonly contextValue: string = 'treeItem.newConnection'; + public readonly contextValue: string = 'treeItem_newConnection'; constructor(public readonly parentId: string) { this.id = `${parentId}/newEmulatorConnection`; diff --git a/src/tree/workspace-view/documentdb/NewConnectionItem.ts b/src/tree/workspace-view/documentdb/NewConnectionItem.ts index afc9c9ab3..4a8d0a459 100644 --- a/src/tree/workspace-view/documentdb/NewConnectionItem.ts +++ b/src/tree/workspace-view/documentdb/NewConnectionItem.ts @@ -10,7 +10,7 @@ import { type TreeElementWithContextValue } from '../../TreeElementWithContextVa export class NewConnectionItem implements TreeElement, TreeElementWithContextValue { public readonly id: string; - public readonly contextValue: string = 'treeItem.newConnection'; + public readonly contextValue: string = 'treeItem_newConnection'; constructor(public readonly parentId: string) { this.id = `${parentId}/newConnection`; diff --git a/src/utils/pickItem/pickAppResource.ts b/src/utils/pickItem/pickAppResource.ts index 473eb4c41..25c3cf40b 100644 --- a/src/utils/pickItem/pickAppResource.ts +++ b/src/utils/pickItem/pickAppResource.ts @@ -86,7 +86,7 @@ export async function pickWorkspaceResource( ): Promise { options ??= { type: [WorkspaceResourceType.AttachedAccounts, WorkspaceResourceType.MongoClusters], - expectedChildContextValue: ['treeItem.account', 'treeItem.mongoCluster'], + expectedChildContextValue: ['treeItem_account', 'treeItem_documentdbcluster'], }; const types = Array.isArray(options.type) ? options.type : [options.type]; From 2c6daf55ce80a3dbb8ff07cb9b6cfdce560acb5b Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 14:21:06 +0200 Subject: [PATCH 26/81] chore: updated experience naming to improve maintainability --- package.json | 32 +++++++++---------- src/DocumentDBExperiences.ts | 30 +++++++---------- .../newConnection/PromptConnectionModeStep.ts | 4 +-- .../newLocalConnection/ExecuteStep.ts | 5 ++- .../newLocalConnection/PromptPortStep.ts | 4 +-- .../newLocalConnection/newLocalConnection.ts | 2 +- .../discovery-tree/AzureSubscriptionItem.ts | 4 +-- .../discovery-tree/AzureSubscriptionItem.ts | 4 +-- .../documentdb/VCoreBranchDataProvider.ts | 6 ++-- .../mongo-ru/RUBranchDataProvider.ts | 6 ++-- .../ConnectionsBranchDataProvider.ts | 4 +-- .../LocalEmulators/LocalEmulatorsItem.ts | 4 +-- .../workspace-view/documentdb/AccountsItem.ts | 6 ++-- .../LocalEmulators/LocalEmulatorsItem.ts | 4 +-- src/utils/emulatorUtils.ts | 2 +- src/vscodeUriHandler.ts | 2 +- .../collectionViewController.ts | 4 +-- .../documentView/documentsViewController.ts | 11 ++----- 18 files changed, 59 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index fa286925b..d0d27207a 100644 --- a/package.json +++ b/package.json @@ -455,13 +455,13 @@ { "//": "[Database] Scrapbook: New Scrapbook", "command": "vscode-documentdb.command.scrapbook.new", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Database] Scrapbook: Connect", "command": "vscode-documentdb.command.scrapbook.connect", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" } ], @@ -469,13 +469,13 @@ { "//": "[Collection] Mongo DB|Cluster Scrapbook New", "command": "vscode-documentdb.command.scrapbook.new", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Collection] Scrapbook / Connect", "command": "vscode-documentdb.command.scrapbook.connect", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" } ], @@ -590,49 +590,49 @@ { "//": "[Database] Create collection", "command": "vscode-documentdb.command.createCollection", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Database] Delete database", "command": "vscode-documentdb.command.dropDatabase", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" }, { "//": "[Database] Mongo DB|Cluster Launch Shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@1" }, { "//": "[Database] Mongo DB|Cluster Scrapbook Submenu", "submenu": "documentDB.submenus.mongo.database.scrapbook", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@2" }, { "//": "[Collection] Mongo DB|Cluster Open collection", "command": "vscode-documentdb.command.containerView.open", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Collection] Create document", "command": "vscode-documentdb.command.createDocument", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" }, { "//": "[Collection] Import Documents", "command": "vscode-documentdb.command.importDocuments", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@1" }, { "//": "[Collection] Export documents", "command": "vscode-documentdb.command.exportDocuments", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@2" }, { @@ -644,25 +644,25 @@ { "//": "[Collection] Drop collection", "command": "vscode-documentdb.command.dropCollection", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "3@1" }, { "//": "[Collection] Launch shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "4@1" }, { "//": "[Collection] Mongo DB|Cluster Scrapbook Submenu", "submenu": "documentDB.submenus.mongo.collection.scrapbook", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "4@2" }, { "//": "[Collection/Documents] Mongo DB|Cluster Open collection", "command": "vscode-documentdb.command.containerView.open", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documents\\b/i && viewItem =~ /\\bexperience_(mongoClusters|mongodb)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documents\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { diff --git a/src/DocumentDBExperiences.ts b/src/DocumentDBExperiences.ts index ec95c3d02..812b2753a 100644 --- a/src/DocumentDBExperiences.ts +++ b/src/DocumentDBExperiences.ts @@ -4,9 +4,8 @@ *--------------------------------------------------------------------------------------------*/ export enum API { - MongoDB = 'MongoDB', - MongoClusters = 'MongoClusters', - DocumentDB = 'DocumentDB', + CosmosDBMongoRU = 'mongoRU', + DocumentDB = 'documentDB', } export function getExperienceFromApi(api: API): Experience { @@ -34,6 +33,14 @@ export interface Experience { tag?: string; } +export const CosmosDBMongoRUExperience: Experience = { + api: API.CosmosDBMongoRU, + longName: 'Azure Cosmos DB for MongoDB (RU)', + shortName: 'MongoDB (RU)', + telemetryName: 'mongoru', + tag: 'Azure Cosmos DB for MongoDB (RU)', +} as const; + export const DocumentDBExperience: Experience = { api: API.DocumentDB, longName: 'DocumentDB', @@ -42,22 +49,7 @@ export const DocumentDBExperience: Experience = { tag: 'DocumentDB', } as const; -export const MongoExperience: Experience = { - api: API.MongoDB, - longName: 'Cosmos DB for MongoDB', - shortName: 'MongoDB', - telemetryName: 'mongo', - tag: 'Azure Cosmos DB for MongoDB (RU)', -} as const; - -export const MongoClustersExperience: Experience = { - api: API.MongoClusters, - longName: 'Azure Cosmos DB for MongoDB (vCore)', - shortName: 'MongoDB (vCore)', - telemetryName: 'mongoClusters', -} as const; - -const experiencesArray: Experience[] = [MongoClustersExperience, DocumentDBExperience, MongoExperience]; +const experiencesArray: Experience[] = [DocumentDBExperience, CosmosDBMongoRUExperience]; const experiencesMap = new Map( experiencesArray.map((info: Experience): [API, Experience] => [info.api, info]), ); diff --git a/src/commands/newConnection/PromptConnectionModeStep.ts b/src/commands/newConnection/PromptConnectionModeStep.ts index 70628b604..0a8a059c9 100644 --- a/src/commands/newConnection/PromptConnectionModeStep.ts +++ b/src/commands/newConnection/PromptConnectionModeStep.ts @@ -5,7 +5,7 @@ import { AzureWizardPromptStep, type IWizardOptions } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; -import { MongoClustersExperience } from '../../DocumentDBExperiences'; +import { DocumentDBExperience } from '../../DocumentDBExperiences'; import { ExecuteStep } from './ExecuteStep'; import { ConnectionMode, type NewConnectionWizardContext } from './NewConnectionWizardContext'; import { PromptAuthMethodStep } from './PromptAuthMethodStep'; @@ -40,7 +40,7 @@ export class PromptConnectionModeStep extends AzureWizardPromptStep { @@ -17,7 +17,7 @@ export class PromptPortStep extends AzureWizardPromptStep(); accounts.forEach((documentDbAccount) => { cache.set(nonNullProp(documentDbAccount, 'id', 'vCoreAccount.id', 'VCoreBranchDataProvider.ts'), { - dbExperience: MongoClustersExperience, + dbExperience: DocumentDBExperience, id: documentDbAccount.id!, name: documentDbAccount.name!, resourceGroup: getResourceGroupFromId(documentDbAccount.id!), @@ -294,7 +294,7 @@ export class VCoreBranchDataProvider let clusterInfo: ClusterModel = { ...resource, - dbExperience: MongoClustersExperience, + dbExperience: DocumentDBExperience, } as ClusterModel; // Merge with cached metadata if available diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index eee4ad4b3..fefe84014 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -12,7 +12,7 @@ import { type IActionContext, } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; -import { MongoExperience } from '../../../DocumentDBExperiences'; +import { CosmosDBMongoRUExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; import { ext } from '../../../extensionVariables'; import { CaseInsensitiveMap } from '../../../utils/CaseInsensitiveMap'; @@ -65,7 +65,7 @@ export class RUBranchDataProvider const cache = new CaseInsensitiveMap(); ruAccounts.forEach((ruAccount) => { cache.set(nonNullProp(ruAccount, 'id', 'ruAccount.id', 'RUBranchDataProvider.ts'), { - dbExperience: MongoExperience, + dbExperience: CosmosDBMongoRUExperience, id: ruAccount.id!, name: ruAccount.name!, resourceGroup: getResourceGroupFromId(ruAccount.id!), @@ -306,7 +306,7 @@ export class RUBranchDataProvider let clusterInfo: ClusterModel = { ...resource, - dbExperience: MongoExperience, + dbExperience: CosmosDBMongoRUExperience, } as ClusterModel; // Merge with cached metadata if available diff --git a/src/tree/connections-view/ConnectionsBranchDataProvider.ts b/src/tree/connections-view/ConnectionsBranchDataProvider.ts index 8e7c915fb..8b1485384 100644 --- a/src/tree/connections-view/ConnectionsBranchDataProvider.ts +++ b/src/tree/connections-view/ConnectionsBranchDataProvider.ts @@ -10,7 +10,7 @@ import { } from '@microsoft/vscode-azext-utils'; import * as vscode from 'vscode'; import { Views } from '../../documentdb/Views'; -import { MongoClustersExperience } from '../../DocumentDBExperiences'; +import { DocumentDBExperience } from '../../DocumentDBExperiences'; import { ext } from '../../extensionVariables'; import { ConnectionStorageService, ConnectionType, type ConnectionItem } from '../../services/connectionStorageService'; import { createGenericElementWithContext } from '../api/createGenericElementWithContext'; @@ -208,7 +208,7 @@ export class ConnectionsBranchDataProvider extends vscode.Disposable implements id: `${parentId}/${connection.id}`, storageId: connection.id, name: connection.name, - dbExperience: MongoClustersExperience, + dbExperience: DocumentDBExperience, connectionString: connection?.secrets?.connectionString ?? undefined, }; diff --git a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts index 13c3fa442..f5a8ec4b3 100644 --- a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts +++ b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts @@ -8,7 +8,7 @@ import * as vscode from 'vscode'; import path from 'path'; import { getResourcesPath, type IThemedIconPath } from '../../../constants'; -import { MongoClustersExperience } from '../../../DocumentDBExperiences'; +import { DocumentDBExperience } from '../../../DocumentDBExperiences'; import { ConnectionStorageService, ConnectionType, @@ -43,7 +43,7 @@ export class LocalEmulatorsItem implements TreeElement, TreeElementWithContextVa id: `${this.id}/${connection.id}`, storageId: connection.id, name: connection.name, - dbExperience: MongoClustersExperience, + dbExperience: DocumentDBExperience, connectionString: connection?.secrets?.connectionString, emulatorConfiguration: emulatorConfiguration, }; diff --git a/src/tree/workspace-view/documentdb/AccountsItem.ts b/src/tree/workspace-view/documentdb/AccountsItem.ts index a22e3e573..303ff96b6 100644 --- a/src/tree/workspace-view/documentdb/AccountsItem.ts +++ b/src/tree/workspace-view/documentdb/AccountsItem.ts @@ -5,7 +5,7 @@ import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; -import { MongoClustersExperience, type Experience } from '../../../DocumentDBExperiences'; +import { DocumentDBExperience, type Experience } from '../../../DocumentDBExperiences'; import { StorageNames, StorageService } from '../../../services/storageService'; import { generateDocumentDBStorageId } from '../../../utils/storageUtils'; // Import the new utility function import { type AttachedClusterModel } from '../../documentdb/ClusterModel'; @@ -22,7 +22,7 @@ export class AccountsItem implements TreeElement, TreeElementWithExperience { constructor() { this.id = `${WorkspaceResourceType.MongoClusters}`; - this.experience = MongoClustersExperience; + this.experience = DocumentDBExperience; } async getChildren(): Promise { @@ -95,7 +95,7 @@ export class AccountsItem implements TreeElement, TreeElementWithExperience { id: `${this.id}/${item.id}`, // To enable TreeView.reveal, we need to have a unique nested id storageId: item.id, name: item.name, - dbExperience: MongoClustersExperience, + dbExperience: DocumentDBExperience, connectionString: item?.secrets?.[0] ?? undefined, }; diff --git a/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts b/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts index 80553e044..75ac9c87b 100644 --- a/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts +++ b/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts @@ -6,7 +6,7 @@ import * as l10n from '@vscode/l10n'; import * as vscode from 'vscode'; import { getThemeAgnosticIconPath } from '../../../../constants'; -import { MongoClustersExperience } from '../../../../DocumentDBExperiences'; +import { DocumentDBExperience } from '../../../../DocumentDBExperiences'; import { StorageNames, StorageService } from '../../../../services/storageService'; import { type EmulatorConfiguration } from '../../../../utils/emulatorConfiguration'; import { type AttachedClusterModel } from '../../../documentdb/ClusterModel'; @@ -43,7 +43,7 @@ export class LocalEmulatorsItem implements TreeElement, TreeElementWithContextVa id: `${this.id}/${id}`, // To enable TreeView.reveal, we need to have a unique nested id storageId: id, name, - dbExperience: MongoClustersExperience, + dbExperience: DocumentDBExperience, connectionString: secrets?.[0], emulatorConfiguration: emulatorConfiguration, }; diff --git a/src/utils/emulatorUtils.ts b/src/utils/emulatorUtils.ts index 69cb40c12..fb01b46fb 100644 --- a/src/utils/emulatorUtils.ts +++ b/src/utils/emulatorUtils.ts @@ -31,7 +31,7 @@ export function getEmulatorItemLabelForApi(api: API, port: string | number | und const experience = getExperienceFromApi(api); let label = l10n.t('{experienceName} Emulator', { experienceName: experience.shortName }); - if (experience.api === API.MongoDB || experience.api === API.MongoClusters) { + if (experience.api === API.CosmosDBMongoRU || experience.api === API.DocumentDB) { label = l10n.t('MongoDB Emulator'); } diff --git a/src/vscodeUriHandler.ts b/src/vscodeUriHandler.ts index 406e9b096..792e14c14 100644 --- a/src/vscodeUriHandler.ts +++ b/src/vscodeUriHandler.ts @@ -171,7 +171,7 @@ async function handleConnectionStringRequest( name: newConnectionLabel, // Connection strings handled by this handler are MongoDB-style, so mark the API accordingly. properties: { - api: API.MongoDB, + api: API.CosmosDBMongoRU, emulatorConfiguration: { isEmulator, disableEmulatorSecurity: !!disableEmulatorSecurity }, availableAuthMethods: [], }, diff --git a/src/webviews/documentdb/collectionView/collectionViewController.ts b/src/webviews/documentdb/collectionView/collectionViewController.ts index 0f8484e42..5c25d2c73 100644 --- a/src/webviews/documentdb/collectionView/collectionViewController.ts +++ b/src/webviews/documentdb/collectionView/collectionViewController.ts @@ -22,10 +22,10 @@ export class CollectionViewController extends WebviewController Date: Fri, 29 Aug 2025 14:44:31 +0200 Subject: [PATCH 27/81] removed obsolete treeitem_account value from tree item context --- package.json | 4 ++-- .../documentdb/VCoreBranchDataProvider.ts | 4 ++-- .../azure-resources-view/mongo-ru/RUBranchDataProvider.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index d0d27207a..3b6aefcd5 100644 --- a/package.json +++ b/package.json @@ -572,13 +572,13 @@ { "//": "Create database", "command": "vscode-documentdb.command.createDatabase", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_(documentdbcluster|account)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "1@1" }, { "//": "Copy connection string", "command": "vscode-documentdb.command.copyConnectionString", - "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView|Workspace)/ && viewItem =~ /\\btreeitem_(documentdbcluster|account)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView|Workspace)/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "0@1" }, { diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 21e577fbe..4e127f67d 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -177,7 +177,7 @@ export class VCoreBranchDataProvider return children?.map((child) => { if (child.id) { if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, Views.AzureResourcesView, 'documentDbBranch'); + this.appendContextValues(child, 'documentDbBranch'); } // Register parent-child relationship in the cache @@ -306,7 +306,7 @@ export class VCoreBranchDataProvider ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); if (isTreeElementWithContextValue(clusterItem)) { - this.appendContextValues(clusterItem, Views.AzureResourcesView, 'documentDbBranch'); + this.appendContextValues(clusterItem, 'documentDbBranch'); } // Register item for refresh when cache loading completes diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index fefe84014..927d7c03e 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -189,7 +189,7 @@ export class RUBranchDataProvider return children?.map((child) => { if (child.id) { if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, Views.AzureResourcesView, 'ruBranch'); + this.appendContextValues(child, 'ruBranch'); } // Register parent-child relationship in the cache @@ -317,7 +317,7 @@ export class RUBranchDataProvider const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); if (isTreeElementWithContextValue(clusterItem)) { - this.appendContextValues(clusterItem, Views.AzureResourcesView, 'ruBranch'); + this.appendContextValues(clusterItem, 'ruBranch'); } if (cachedMetadata?.serverVersion) { From 1988ca4fcfe1526d330caf667bd44f088e79ab16 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 14:56:14 +0200 Subject: [PATCH 28/81] feat: enabled context menu commands in Azure Resources views --- package.json | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 3b6aefcd5..944e0e57e 100644 --- a/package.json +++ b/package.json @@ -572,103 +572,103 @@ { "//": "Create database", "command": "vscode-documentdb.command.createDatabase", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "1@1" }, { "//": "Copy connection string", "command": "vscode-documentdb.command.copyConnectionString", - "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView|Workspace)/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "0@1" }, { "//": "[Account] Mongo DB|Cluster Launch Shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "2@2" }, { "//": "[Database] Create collection", "command": "vscode-documentdb.command.createCollection", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Database] Delete database", "command": "vscode-documentdb.command.dropDatabase", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" }, { "//": "[Database] Mongo DB|Cluster Launch Shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@1" }, { "//": "[Database] Mongo DB|Cluster Scrapbook Submenu", "submenu": "documentDB.submenus.mongo.database.scrapbook", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@2" }, { "//": "[Collection] Mongo DB|Cluster Open collection", "command": "vscode-documentdb.command.containerView.open", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Collection] Create document", "command": "vscode-documentdb.command.createDocument", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" }, { "//": "[Collection] Import Documents", "command": "vscode-documentdb.command.importDocuments", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@1" }, { "//": "[Collection] Export documents", "command": "vscode-documentdb.command.exportDocuments", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "2@2" }, { "//": "[Collection] Data Migration", "command": "vscode-documentdb.command.chooseDataMigrationExtension", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i && migrationProvidersAvailable", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i && migrationProvidersAvailable", "group": "1@2" }, { "//": "[Collection] Drop collection", "command": "vscode-documentdb.command.dropCollection", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "3@1" }, { "//": "[Collection] Launch shell", "command": "vscode-documentdb.command.launchShell", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "4@1" }, { "//": "[Collection] Mongo DB|Cluster Scrapbook Submenu", "submenu": "documentDB.submenus.mongo.collection.scrapbook", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "4@2" }, { "//": "[Collection/Documents] Mongo DB|Cluster Open collection", "command": "vscode-documentdb.command.containerView.open", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_documents\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_documents\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[TreeItem] Refresh Item (cluster, database, collection, documents, indexes)", "command": "vscode-documentdb.command.refresh", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_(documentdbcluster|database|collection|documents|indexes|index)\\b/i", + "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_(documentdbcluster|database|collection|documents|indexes|index)\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "zheLastGroup@1" }, { From 74f343124978816d6814c5fafbe557537fc54046 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 15:09:48 +0200 Subject: [PATCH 29/81] fix: incorrect context menu filter on 'addConnectionToConnectionsView' Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 944e0e57e..c05132721 100644 --- a/package.json +++ b/package.json @@ -541,7 +541,7 @@ }, { "command": "vscode-documentdb.command.discoveryView.addConnectionToConnectionsView", - "when": "view == discoveryView && viewItem =~ /\\btreeitem_.documentdbcluster\\b/i", + "when": "view == discoveryView && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", "group": "0@1" }, { From 22db7447197b50aa7d2b1ecf77a7fc661ff39491 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 20:26:54 +0200 Subject: [PATCH 30/81] chore: refactoring --- ...ataProvider.ts => RemoveMeBaseCachedBranchDataProvider.ts} | 4 ++-- .../documentdb/ClustersWorkbenchBranchDataProvider.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename src/tree/{BaseCachedBranchDataProvider.ts => RemoveMeBaseCachedBranchDataProvider.ts} (99%) diff --git a/src/tree/BaseCachedBranchDataProvider.ts b/src/tree/RemoveMeBaseCachedBranchDataProvider.ts similarity index 99% rename from src/tree/BaseCachedBranchDataProvider.ts rename to src/tree/RemoveMeBaseCachedBranchDataProvider.ts index 78e268c6c..74397dc66 100644 --- a/src/tree/BaseCachedBranchDataProvider.ts +++ b/src/tree/RemoveMeBaseCachedBranchDataProvider.ts @@ -48,7 +48,7 @@ import { isTreeElementWithExperience } from './TreeElementWithExperience'; * @extends vscode.Disposable * @implements {BranchDataProvider} */ -export abstract class BaseCachedBranchDataProvider +export abstract class RemoveMeBaseCachedBranchDataProvider extends vscode.Disposable implements BranchDataProvider { @@ -365,7 +365,7 @@ export abstract class BaseCachedBranchDataProvider + extends RemoveMeBaseCachedBranchDataProvider implements WorkspaceResourceBranchDataProvider { protected get contextValue(): string { From c361c3edd85a471d9c7d87315a270fe5b4ef128c Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 29 Aug 2025 22:01:46 +0200 Subject: [PATCH 31/81] chore: refactoring branch data providers --- src/tree/BaseExtendedTreeDataProvider.ts | 262 ++++++++++++++++++ src/tree/api/appendContextValues.ts | 45 +++ .../documentdb/VCoreBranchDataProvider.ts | 172 +----------- .../mongo-ru/RUBranchDataProvider.ts | 172 +----------- .../ConnectionsBranchDataProvider.ts | 151 +--------- .../DiscoveryBranchDataProvider.ts | 167 +---------- 6 files changed, 331 insertions(+), 638 deletions(-) create mode 100644 src/tree/BaseExtendedTreeDataProvider.ts create mode 100644 src/tree/api/appendContextValues.ts diff --git a/src/tree/BaseExtendedTreeDataProvider.ts b/src/tree/BaseExtendedTreeDataProvider.ts new file mode 100644 index 000000000..b2e773254 --- /dev/null +++ b/src/tree/BaseExtendedTreeDataProvider.ts @@ -0,0 +1,262 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import { dispose } from '../utils/vscodeUtils'; +import { appendContextValues as appendContextValuesUtil } from './api/appendContextValues'; +import { type ExtendedTreeDataProvider } from './ExtendedTreeDataProvider'; +import { type TreeElement } from './TreeElement'; +import { type TreeElementWithContextValue } from './TreeElementWithContextValue'; +import { TreeParentCache } from './TreeParentCache'; + +/** + * Base implementation of the ExtendedTreeDataProvider interface that provides + * parent-child relationship caching and error node handling. + * + * ## Caching Mechanism + * + * This class implements caching at two levels: + * 1. **Parent-child relationship caching via TreeParentCache** for efficient tree navigation: + * - Enables getParent method required for TreeView.reveal() functionality + * - Provides findNodeById for programmatic tree navigation and selection + * - Tracks hierarchical relationships for fast parent lookups + * + * 2. **Error node caching** to prevent repeated attempts to fetch children that previously failed: + * - Stores failed nodes (e.g., due to invalid credentials or connection issues) + * - Returns cached error children on subsequent calls until explicitly cleared + * - Improves user experience by avoiding repeated failed network requests + * + * ## Error Handling + * + * The error node handling system ensures that: + * - Failed nodes don't trigger repeated connection attempts + * - Users can explicitly retry by using the resetNodeErrorState method or refresh commands + * - Error state is tracked per node ID for granular control + * - Cached error nodes are returned immediately without new network calls + * + * ## Refresh Logic + * + * The refresh mechanism handles both current and stale element references: + * - VS Code's TreeView API relies on object identity (reference equality), not just ID equality + * - findAndRefreshCurrentElement method finds current instance by ID before refreshing + * - Cache is selectively cleared to remove stale references while preserving other nodes + * - Fallback handling ensures refresh attempts even if current instance lookup fails + * + * ## Implementation Notes + * + * When extending this class, implementers should: + * - Override getChildren() to provide the actual tree structure + * - Call super.refresh() when tree structure changes need to propagate + * - Use the errorNodeCache for handling failed node states in getChildren implementation + * - Register parent-child relationships using parentCache.registerRelationship() + * - Use appendContextValues() helper for consistent context value management + * + * @template T The tree element type that extends TreeElement + */ +export abstract class BaseExtendedTreeDataProvider + extends vscode.Disposable + implements ExtendedTreeDataProvider +{ + /** + * Cache for tracking parent-child relationships to support the getParent method. + * + * This cache enables: + * - Efficient implementation of tree.reveal() functionality to navigate to specific nodes + * - Finding nodes by ID without traversing the entire tree each time + * - Proper cleanup when refreshing parts of the tree + */ + protected readonly parentCache = new TreeParentCache(); + + /** + * Caches nodes whose getChildren() call has failed. + * + * This cache prevents repeated attempts to fetch children for nodes that have previously failed, + * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary + * repeated calls until the error state is explicitly cleared. + * + * Key: Node ID (parent) + * Value: Array of TreeElement representing the failed children (usually an error node) + */ + protected readonly errorNodeCache = new Map(); + + /** + * Event emitter for notifying VS Code when tree data changes. + * + * From vscode.TreeDataProvider: + * An optional event to signal that an element or root has changed. + * This will trigger the view to update the changed element/root and its children recursively (if shown). + * To signal that root has changed, do not pass any argument or pass `undefined` or `null`. + */ + private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter(); + + /** + * Collection of disposable resources that should be cleaned up when this provider is disposed. + * Derived classes can add their own disposables to this array. + */ + protected readonly disposables: vscode.Disposable[] = []; + + /** + * Event fired when tree data changes. Required by vscode.TreeDataProvider. + */ + get onDidChangeTreeData(): vscode.Event { + return this.onDidChangeTreeDataEmitter.event; + } + + constructor() { + super(() => this.dispose()); + } + + /** + * Gets the parent of a tree element. Required for TreeView.reveal functionality. + * + * @param element The element for which to find the parent + * @returns The parent element, or undefined if the element is a root item + */ + getParent(element: T): T | null | undefined { + return this.parentCache.getParent(element); + } + + /** + * Gets the tree item representation for VS Code. Required by vscode.TreeDataProvider. + * + * Note: Due to caching done by the TreeElementStateManager, + * changes to the TreeItem added here might get lost. + * + * @param element The tree element to convert to a tree item + * @returns Promise resolving to the tree item representation + */ + async getTreeItem(element: T): Promise { + return element.getTreeItem(); + } + + /** + * Removes a node's error state from the failed node cache. + * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. + * If not reset, the cached error children will always be returned for this node. + * + * @param nodeId The ID of the node to clear from the failed node cache. + */ + resetNodeErrorState(nodeId: string): void { + this.errorNodeCache.delete(nodeId); + } + + /** + * Finds a node in the tree by its ID. + * + * Note: By default, this method only searches in the nodes that are known, i.e., nodes that have been processed + * by the data provider. Hidden nodes, such as those that haven't been expanded and their children, + * will not be discovered. However, if `enableRecursiveSearch` is set to `true`, the method will perform + * a more intensive search by automatically expanding nodes as needed. This can be time-consuming for + * large trees or deeply nested structures. + * + * @param id The ID of the node to find + * @param enableRecursiveSearch Optional boolean to enable a deeper search with automatic node expansion + * @returns A Promise that resolves to the found node or undefined if not found + */ + async findNodeById(id: string, enableRecursiveSearch?: boolean): Promise { + if (enableRecursiveSearch) { + // Pass this.getChildren as the second parameter to enable recursive search + return this.parentCache.findNodeById( + id, + this.getChildren.bind(this) as (element: T) => Promise, + ); + } else { + // If recursive search is not enabled, we only search in the known nodes + return this.parentCache.findNodeById(id); + } + } + + /** + * Refreshes the tree data. + * This will trigger the view to update the changed element/root and its children recursively (if shown). + * + * @param element The element to refresh. If not provided, the entire tree will be refreshed. + * + * Note: This implementation handles both current and stale element references. + * If a stale reference is provided but has an ID, it will attempt to find the current + * reference in the tree before refreshing. + */ + refresh(element?: T): void { + if (element?.id) { + // We have an element with an ID + + // Handle potential stale reference issue: + // VS Code's TreeView API relies on object identity (reference equality), + // not just ID equality. Find the current reference before clearing the cache. + void this.findAndRefreshCurrentElement(element); + } else { + // No element or no ID, refresh the entire tree + this.parentCache.clear(); + this.onDidChangeTreeDataEmitter.fire(element); + } + } + + /** + * Helper method to find the current instance of an element by ID and refresh it. + * This addresses the issue where stale references won't properly refresh the tree. + * + * @param element Potentially stale element reference + */ + protected async findAndRefreshCurrentElement(element: T): Promise { + try { + // First try to find the current instance with this ID + const currentElement = await this.findNodeById(element.id!); + + // AFTER finding the element, update the cache: + // 1. Clear the cache for this ID to remove any stale references + // (drops the element and its children) + this.parentCache.clear(element.id!); + // 2. Re-register the node (but not its children) + if (currentElement?.id) { + this.parentCache.registerNode(currentElement); + } + + if (currentElement) { + // We found the current instance, use it for refresh + this.onDidChangeTreeDataEmitter.fire(currentElement); + } else { + // Current instance not found, fallback to using the provided element + // This may not work if it's truly a stale reference, but we've tried our best + this.onDidChangeTreeDataEmitter.fire(element); + } + } catch (error) { + // If anything goes wrong during the lookup, still attempt the refresh with the original element + // and clear the cache for this ID + console.log(`Error finding current element for refresh: ${error}`); + this.parentCache.clear(element.id!); + this.onDidChangeTreeDataEmitter.fire(element); + } + } + + /** + * Helper method for appending context values to tree items. + * + * This method provides a consistent way for derived classes to add context values + * to tree elements, ensuring proper formatting and preservation of existing values. + * + * @param treeItem The tree item to modify + * @param contextValuesToAppend The context values to append + */ + protected appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { + appendContextValuesUtil(treeItem, ...contextValuesToAppend); + } + + /** + * Disposes of all resources held by this provider. + * This includes the event emitter and any disposables registered by derived classes. + */ + dispose(): void { + this.onDidChangeTreeDataEmitter.dispose(); + dispose(this.disposables); + } + + /** + * Abstract method that must be implemented by derived classes to provide the actual tree structure. + * + * @param element The parent element for which to get children, or undefined for root elements + * @returns Promise resolving to an array of child elements, null, or undefined + */ + abstract getChildren(element?: T): Promise; +} diff --git a/src/tree/api/appendContextValues.ts b/src/tree/api/appendContextValues.ts new file mode 100644 index 000000000..2f24f4cce --- /dev/null +++ b/src/tree/api/appendContextValues.ts @@ -0,0 +1,45 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { createContextValue } from '@microsoft/vscode-azext-utils'; +import { type TreeElementWithContextValue } from '../TreeElementWithContextValue'; + +/** + * Appends context values to a tree item's contextValue property. + * + * This utility function standardizes how context values are combined across all tree providers. + * It ensures that existing context values are preserved while new ones are added, and uses + * the proper context value creation mechanism from the Azure Extensions utils. + * + * ## Usage Pattern + * + * This function is typically used in tree data providers when processing tree elements + * to ensure they have the correct context values for VS Code's context menu system: + * + * ```typescript + * if (isTreeElementWithContextValue(child)) { + * appendContextValues(child, 'branchSpecificValue', Views.CurrentView); + * } + * ``` + * + * ## Context Value Handling + * + * - New context values are added to the beginning of the context value list + * - Existing context values are preserved and appended to the end + * - The final context value is created using createContextValue for proper formatting + * + * @param treeItem The tree item to modify + * @param contextValuesToAppend The context values to append (order matters) + */ +export function appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { + const contextValues: string[] = contextValuesToAppend; + + // Keep original contextValues if any + if (treeItem.contextValue) { + contextValues.push(treeItem.contextValue); + } + + treeItem.contextValue = createContextValue(contextValues); +} diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 4e127f67d..29a9f73c2 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -3,14 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; - import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; -import { - callWithTelemetryAndErrorHandling, - createContextValue, - type IActionContext, -} from '@microsoft/vscode-azext-utils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; import { DocumentDBExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; @@ -19,17 +13,16 @@ import { CaseInsensitiveMap } from '../../../utils/CaseInsensitiveMap'; import { LazyMetadataLoader } from '../../../utils/LazyMetadataLoader'; import { createMongoClustersManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; -import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; +import { BaseExtendedTreeDataProvider } from '../../BaseExtendedTreeDataProvider'; import { type TreeElement } from '../../TreeElement'; -import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; +import { isTreeElementWithContextValue } from '../../TreeElementWithContextValue'; import { isTreeElementWithRetryChildren } from '../../TreeElementWithRetryChildren'; -import { TreeParentCache } from '../../TreeParentCache'; import { type ClusterModel } from '../../documentdb/ClusterModel'; import { VCoreResourceItem } from './VCoreResourceItem'; export class VCoreBranchDataProvider - extends vscode.Disposable - implements BranchDataProvider, ExtendedTreeDataProvider + extends BaseExtendedTreeDataProvider + implements BranchDataProvider { /** * Helper for managing lazy metadata loading with proper caching and item updates. @@ -84,53 +77,9 @@ export class VCoreBranchDataProvider refreshCallback: (item) => this.refresh(item), }); - /** - * Cache for tracking parent-child relationships to support the getParent method. - */ - private readonly parentCache = new TreeParentCache(); - - /** - * Caches nodes whose getChildren() call has failed. - * - * This cache prevents repeated attempts to fetch children for nodes that have previously failed, - * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary - * repeated calls until the error state is explicitly cleared. - * - * Key: Node ID (parent) - * Value: Array of TreeElement representing the failed children (usually an error node) - */ - private readonly errorNodeCache = new Map(); - - private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter< - void | TreeElement | TreeElement[] | null | undefined - >(); - - /** - * From vscode.TreeDataProvider: - * - * An optional event to signal that an element or root has changed. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * To signal that root has changed, do not pass any argument or pass `undefined` or `null`. - */ - get onDidChangeTreeData(): vscode.Event { - return this.onDidChangeTreeDataEmitter.event; - } - - /** - * Removes a node's error state from the failed node cache. - * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. - * If not reset, the cached error children will always be returned for this node. - * @param nodeId The ID of the node to clear from the failed node cache. - */ - resetNodeErrorState(nodeId: string): void { - this.errorNodeCache.delete(nodeId); - } - constructor() { - super(() => { - this.onDidChangeTreeDataEmitter.dispose(); - this.metadataLoader.dispose(); - }); + super(); + this.disposables.push(this.metadataLoader); } async getChildren(element: TreeElement): Promise { @@ -192,93 +141,6 @@ export class VCoreBranchDataProvider }); } - /** - * Gets the parent of a tree element. Required for TreeView.reveal functionality. - * - * @param element The element for which to find the parent - * @returns The parent element, or undefined if the element is a root item - */ - getParent(element: TreeElement): TreeElement | null | undefined { - return this.parentCache.getParent(element); - } - - /** - * Finds a node in the tree by its ID. - * - * @param id The ID of the node to find - * @returns A Promise that resolves to the found node or undefined if not found - */ - async findNodeById(id: string): Promise { - return this.parentCache.findNodeById(id, async (element) => { - if (!element.getChildren) { - return undefined; - } - return element.getChildren(); - }); - } - - /** - * Refreshes the tree data. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * - * @param element The element to refresh. If not provided, the entire tree will be refreshed. - * - * Note: This implementation handles both current and stale element references. - * If a stale reference is provided but has an ID, it will attempt to find the current - * reference in the tree before refreshing. - */ - refresh(element?: TreeElement): void { - if (element?.id) { - // We have an element with an ID - - // Handle potential stale reference issue: - // VS Code's TreeView API relies on object identity (reference equality), - // not just ID equality. Find the current reference before clearing the cache. - void this.findAndRefreshCurrentElement(element); - } else { - // No element or no ID, refresh the entire tree - this.parentCache.clear(); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - - /** - * Helper method to find the current instance of an element by ID and refresh it. - * This addresses the issue where stale references won't properly refresh the tree. - * - * @param element Potentially stale element reference - */ - private async findAndRefreshCurrentElement(element: TreeElement): Promise { - try { - // First try to find the current instance with this ID - const currentElement = await this.findNodeById(element.id!); - - // AFTER finding the element, update the cache: - // 1. Clear the cache for this ID to remove any stale references - // (drops the element and its children) - this.parentCache.clear(element.id!); - // 2. Re-register the node (but not its children) - if (currentElement?.id) { - this.parentCache.registerNode(currentElement); - } - - if (currentElement) { - // We found the current instance, use it for refresh - this.onDidChangeTreeDataEmitter.fire(currentElement); - } else { - // Current instance not found, fallback to using the provided element - // This may not work if it's truly a stale reference, but we've tried our best - this.onDidChangeTreeDataEmitter.fire(element); - } - } catch (error) { - // If anything goes wrong during the lookup, still attempt the refresh with the original element - // and clear the cache for this ID - console.log(`Error finding current element for refresh: ${error}`); - this.parentCache.clear(element.id!); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - getResourceItem(resource: AzureResource): TreeElement | Thenable { return callWithTelemetryAndErrorHandling('getResourceItem', async (context: IActionContext) => { context.telemetry.properties.view = Views.AzureResourcesView; @@ -315,24 +177,4 @@ export class VCoreBranchDataProvider return clusterItem; }) as TreeElement | Thenable; // Cast to ensure correct type; } - - async getTreeItem(element: TreeElement): Promise { - /** - * Note that due to caching done by the TreeElementStateManager, - * changes to the TreeItem added here might get lost - */ - return element.getTreeItem(); - } - - appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { - // all items returned from this view need that context value assigned - const contextValues: string[] = contextValuesToAppend; - - // keep original contextValues if any - if (treeItem.contextValue) { - contextValues.push(treeItem.contextValue); - } - - treeItem.contextValue = createContextValue(contextValues); - } } diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 927d7c03e..82a4ff41d 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -3,14 +3,8 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import * as vscode from 'vscode'; - import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; -import { - callWithTelemetryAndErrorHandling, - createContextValue, - type IActionContext, -} from '@microsoft/vscode-azext-utils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureResource, type BranchDataProvider } from '@microsoft/vscode-azureresources-api'; import { CosmosDBMongoRUExperience } from '../../../DocumentDBExperiences'; import { Views } from '../../../documentdb/Views'; @@ -19,11 +13,10 @@ import { CaseInsensitiveMap } from '../../../utils/CaseInsensitiveMap'; import { LazyMetadataLoader } from '../../../utils/LazyMetadataLoader'; import { createCosmosDBManagementClient } from '../../../utils/azureClients'; import { nonNullProp } from '../../../utils/nonNull'; -import { type ExtendedTreeDataProvider } from '../../ExtendedTreeDataProvider'; +import { BaseExtendedTreeDataProvider } from '../../BaseExtendedTreeDataProvider'; import { type TreeElement } from '../../TreeElement'; -import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; +import { isTreeElementWithContextValue } from '../../TreeElementWithContextValue'; import { isTreeElementWithRetryChildren } from '../../TreeElementWithRetryChildren'; -import { TreeParentCache } from '../../TreeParentCache'; import { type ClusterModel } from '../../documentdb/ClusterModel'; import { RUResourceItem } from './RUCoreResourceItem'; @@ -33,8 +26,8 @@ import { RUResourceItem } from './RUCoreResourceItem'; // }; export class RUBranchDataProvider - extends vscode.Disposable - implements BranchDataProvider, ExtendedTreeDataProvider + extends BaseExtendedTreeDataProvider + implements BranchDataProvider { /** * Helper for managing lazy metadata loading with proper caching and item updates. @@ -96,53 +89,9 @@ export class RUBranchDataProvider refreshCallback: (item) => this.refresh(item), }); - /** - * Cache for tracking parent-child relationships to support the getParent method. - */ - private readonly parentCache = new TreeParentCache(); - - /** - * Caches nodes whose getChildren() call has failed. - * - * This cache prevents repeated attempts to fetch children for nodes that have previously failed, - * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary - * repeated calls until the error state is explicitly cleared. - * - * Key: Node ID (parent) - * Value: Array of TreeElement representing the failed children (usually an error node) - */ - private readonly errorNodeCache = new Map(); - - private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter< - void | TreeElement | TreeElement[] | null | undefined - >(); - - /** - * From vscode.TreeDataProvider: - * - * An optional event to signal that an element or root has changed. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * To signal that root has changed, do not pass any argument or pass `undefined` or `null`. - */ - get onDidChangeTreeData(): vscode.Event { - return this.onDidChangeTreeDataEmitter.event; - } - - /** - * Removes a node's error state from the failed node cache. - * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. - * If not reset, the cached error children will always be returned for this node. - * @param nodeId The ID of the node to clear from the failed node cache. - */ - resetNodeErrorState(nodeId: string): void { - this.errorNodeCache.delete(nodeId); - } - constructor() { - super(() => { - this.onDidChangeTreeDataEmitter.dispose(); - this.metadataLoader.dispose(); - }); + super(); + this.disposables.push(this.metadataLoader); } async getChildren(element: TreeElement): Promise { @@ -204,93 +153,6 @@ export class RUBranchDataProvider }); } - /** - * Gets the parent of a tree element. Required for TreeView.reveal functionality. - * - * @param element The element for which to find the parent - * @returns The parent element, or undefined if the element is a root item - */ - getParent(element: TreeElement): TreeElement | null | undefined { - return this.parentCache.getParent(element); - } - - /** - * Finds a node in the tree by its ID. - * - * @param id The ID of the node to find - * @returns A Promise that resolves to the found node or undefined if not found - */ - async findNodeById(id: string): Promise { - return this.parentCache.findNodeById(id, async (element) => { - if (!element.getChildren) { - return undefined; - } - return element.getChildren(); - }); - } - - /** - * Refreshes the tree data. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * - * @param element The element to refresh. If not provided, the entire tree will be refreshed. - * - * Note: This implementation handles both current and stale element references. - * If a stale reference is provided but has an ID, it will attempt to find the current - * reference in the tree before refreshing. - */ - refresh(element?: TreeElement): void { - if (element?.id) { - // We have an element with an ID - - // Handle potential stale reference issue: - // VS Code's TreeView API relies on object identity (reference equality), - // not just ID equality. Find the current reference before clearing the cache. - void this.findAndRefreshCurrentElement(element); - } else { - // No element or no ID, refresh the entire tree - this.parentCache.clear(); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - - /** - * Helper method to find the current instance of an element by ID and refresh it. - * This addresses the issue where stale references won't properly refresh the tree. - * - * @param element Potentially stale element reference - */ - private async findAndRefreshCurrentElement(element: TreeElement): Promise { - try { - // First try to find the current instance with this ID - const currentElement = await this.findNodeById(element.id!); - - // AFTER finding the element, update the cache: - // 1. Clear the cache for this ID to remove any stale references - // (drops the element and its children) - this.parentCache.clear(element.id!); - // 2. Re-register the node (but not its children) - if (currentElement?.id) { - this.parentCache.registerNode(currentElement); - } - - if (currentElement) { - // We found the current instance, use it for refresh - this.onDidChangeTreeDataEmitter.fire(currentElement); - } else { - // Current instance not found, fallback to using the provided element - // This may not work if it's truly a stale reference, but we've tried our best - this.onDidChangeTreeDataEmitter.fire(element); - } - } catch (error) { - // If anything goes wrong during the lookup, still attempt the refresh with the original element - // and clear the cache for this ID - console.log(`Error finding current element for refresh: ${error}`); - this.parentCache.clear(element.id!); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - getResourceItem(resource: AzureResource): TreeElement | Thenable { return callWithTelemetryAndErrorHandling('getResourceItem', async (context: IActionContext) => { context.telemetry.properties.view = Views.AzureResourcesView; @@ -330,24 +192,4 @@ export class RUBranchDataProvider return clusterItem; }) as TreeElement | Thenable; // Cast to ensure correct type; } - - async getTreeItem(element: TreeElement): Promise { - /** - * Note that due to caching done by the TreeElementStateManager, - * changes to the TreeItem added here might get lost - */ - return element.getTreeItem(); - } - - appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { - // all items returned from this view need that context value assigned - const contextValues: string[] = contextValuesToAppend; - - // keep original contextValues if any - if (treeItem.contextValue) { - contextValues.push(treeItem.contextValue); - } - - treeItem.contextValue = createContextValue(contextValues); - } } diff --git a/src/tree/connections-view/ConnectionsBranchDataProvider.ts b/src/tree/connections-view/ConnectionsBranchDataProvider.ts index 8b1485384..aef05240e 100644 --- a/src/tree/connections-view/ConnectionsBranchDataProvider.ts +++ b/src/tree/connections-view/ConnectionsBranchDataProvider.ts @@ -3,23 +3,18 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { - callWithTelemetryAndErrorHandling, - createContextValue, - type IActionContext, -} from '@microsoft/vscode-azext-utils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as vscode from 'vscode'; import { Views } from '../../documentdb/Views'; import { DocumentDBExperience } from '../../DocumentDBExperiences'; import { ext } from '../../extensionVariables'; import { ConnectionStorageService, ConnectionType, type ConnectionItem } from '../../services/connectionStorageService'; import { createGenericElementWithContext } from '../api/createGenericElementWithContext'; +import { BaseExtendedTreeDataProvider } from '../BaseExtendedTreeDataProvider'; import { type ClusterModelWithStorage } from '../documentdb/ClusterModel'; -import { type ExtendedTreeDataProvider } from '../ExtendedTreeDataProvider'; import { type TreeElement } from '../TreeElement'; -import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../TreeElementWithContextValue'; +import { isTreeElementWithContextValue } from '../TreeElementWithContextValue'; import { isTreeElementWithRetryChildren } from '../TreeElementWithRetryChildren'; -import { TreeParentCache } from '../TreeParentCache'; import { DocumentDBClusterItem } from './DocumentDBClusterItem'; import { LocalEmulatorsItem } from './LocalEmulators/LocalEmulatorsItem'; import { NewConnectionItemCV } from './NewConnectionItemCV'; @@ -43,61 +38,9 @@ import { NewConnectionItemCV } from './NewConnectionItemCV'; * - Child-parent relationships are registered with registerRelationship during getChildren * - The cache is selectively cleared during refresh operations */ -export class ConnectionsBranchDataProvider extends vscode.Disposable implements ExtendedTreeDataProvider { - private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter< - void | TreeElement | TreeElement[] | null | undefined - >(); - private readonly parentCache = new TreeParentCache(); - - /** - * Caches nodes whose getChildren() call has failed. - * - * This cache prevents repeated attempts to fetch children for nodes that have previously failed, - * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary - * repeated calls until the error state is explicitly cleared. - * - * Key: Node ID (parent) - * Value: Array of TreeElement representing the failed children (usually an error node) - */ - private readonly errorNodeCache = new Map(); - - /** - * From vscode.TreeDataProvider: - * - * An optional event to signal that an element or root has changed. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * To signal that root has changed, do not pass any argument or pass `undefined` or `null`. - */ - get onDidChangeTreeData(): vscode.Event { - return this.onDidChangeTreeDataEmitter.event; - } - +export class ConnectionsBranchDataProvider extends BaseExtendedTreeDataProvider { constructor() { - super(() => { - this.onDidChangeTreeDataEmitter.dispose(); - }); - } - - appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { - // all items returned from this view need that context value assigned - const contextValues: string[] = contextValuesToAppend; - - // keep original contextValues if any - if (treeItem.contextValue) { - contextValues.push(treeItem.contextValue); - } - - treeItem.contextValue = createContextValue(contextValues); - } - - /** - * Removes a node's error state from the failed node cache. - * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. - * If not reset, the cached error children will always be returned for this node. - * @param nodeId The ID of the node to clear from the failed node cache. - */ - resetNodeErrorState(nodeId: string): void { - this.errorNodeCache.delete(nodeId); + super(); } async getChildren(element?: TreeElement): Promise { @@ -221,88 +164,4 @@ export class ConnectionsBranchDataProvider extends vscode.Disposable implements (item) => ext.state.wrapItemInStateHandling(item, () => this.refresh(item)) as TreeElement, ); } - - async getTreeItem(element: TreeElement): Promise { - return element.getTreeItem(); - } - - /** - * Refreshes the tree data. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * - * @param element The element to refresh. If not provided, the entire tree will be refreshed. - * - * Note: This implementation handles both current and stale element references. - * If a stale reference is provided but has an ID, it will attempt to find the current - * reference in the tree before refreshing. - */ - refresh(element?: TreeElement): void { - if (element?.id) { - // We have an element with an ID - - // Handle potential stale reference issue: - // VS Code's TreeView API relies on object identity (reference equality), - // not just ID equality. Find the current reference before clearing the cache. - void this.findAndRefreshCurrentElement(element); - } else { - // No element or no ID, refresh the entire tree - this.parentCache.clear(); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - - /** - * Helper method to find the current instance of an element by ID and refresh it. - * This addresses the issue where stale references won't properly refresh the tree. - * - * @param element Potentially stale element reference - */ - private async findAndRefreshCurrentElement(element: TreeElement): Promise { - try { - // First try to find the current instance with this ID - const currentElement = await this.findNodeById(element.id!); - - // AFTER finding the element, update the cache: - // 1. Clear the cache for this ID to remove any stale references - // (drops the element and its children) - this.parentCache.clear(element.id!); - // 2. Re-register the node (but not its children) - if (currentElement?.id) { - this.parentCache.registerNode(currentElement); - } - - if (currentElement) { - // We found the current instance, use it for refresh - this.onDidChangeTreeDataEmitter.fire(currentElement); - } else { - // Current instance not found, fallback to using the provided element - // This may not work if it's truly a stale reference, but we've tried our best - this.onDidChangeTreeDataEmitter.fire(element); - } - } catch (error) { - // If anything goes wrong during the lookup, still attempt the refresh with the original element - // and clear the cache for this ID - console.log(`Error finding current element for refresh: ${error}`); - this.parentCache.clear(element.id!); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - - // Implement getParent using the cache - getParent(element: TreeElement): TreeElement | null | undefined { - return this.parentCache.getParent(element); - } - - async findNodeById(id: string, enableRecursiveSearch?: boolean): Promise { - if (enableRecursiveSearch) { - // Pass this.getChildren as the second parameter to enable recursive search - return this.parentCache.findNodeById( - id, - this.getChildren.bind(this) as (element: TreeElement) => Promise, - ); - } else { - // If recursive search is not enabled, we only search in the known nodes - return this.parentCache.findNodeById(id); - } - } } diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index 57db55fa9..40a7913a2 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -3,20 +3,14 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { - callWithTelemetryAndErrorHandling, - createContextValue, - type IActionContext, -} from '@microsoft/vscode-azext-utils'; -import * as vscode from 'vscode'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { Views } from '../../documentdb/Views'; import { ext } from '../../extensionVariables'; import { DiscoveryService } from '../../services/discoveryServices'; -import { type ExtendedTreeDataProvider } from '../ExtendedTreeDataProvider'; +import { BaseExtendedTreeDataProvider } from '../BaseExtendedTreeDataProvider'; import { type TreeElement } from '../TreeElement'; -import { isTreeElementWithContextValue, type TreeElementWithContextValue } from '../TreeElementWithContextValue'; +import { isTreeElementWithContextValue } from '../TreeElementWithContextValue'; import { isTreeElementWithRetryChildren } from '../TreeElementWithRetryChildren'; -import { TreeParentCache } from '../TreeParentCache'; /** * Tree data provider for the Discovery view. @@ -44,7 +38,7 @@ import { TreeParentCache } from '../TreeParentCache'; * (getChildrenPromises) provides efficient tree operations even for slow-loading discovery * sources that may involve network requests. */ -export class DiscoveryBranchDataProvider extends vscode.Disposable implements ExtendedTreeDataProvider { +export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider { /** * Tracks the current root items in the tree. * @@ -66,52 +60,8 @@ export class DiscoveryBranchDataProvider extends vscode.Disposable implements Ex */ private getChildrenPromises = new Map>(); - /** - * Caches nodes whose getChildren() call has failed. - * - * This cache prevents repeated attempts to fetch children for nodes that have previously failed, - * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary - * repeated calls until the error state is explicitly cleared. - * - * Key: Node ID (parent) - * Value: Array of TreeElement representing the failed children (usually an error node) - */ - private readonly errorNodeCache = new Map(); - - /** - * Cache for tracking parent-child relationships to support the getParent method. - */ - private readonly parentCache = new TreeParentCache(); - - private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter< - void | TreeElement | TreeElement[] | null | undefined - >(); - - /** - * From vscode.TreeDataProvider: - * - * An optional event to signal that an element or root has changed. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * To signal that root has changed, do not pass any argument or pass `undefined` or `null`. - */ - get onDidChangeTreeData(): vscode.Event { - return this.onDidChangeTreeDataEmitter.event; - } - - /** - * Removes a node's error state from the failed node cache. - * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. - * If not reset, the cached error children will always be returned for this node. - * @param nodeId The ID of the node to clear from the failed node cache. - */ - resetNodeErrorState(nodeId: string): void { - this.errorNodeCache.delete(nodeId); - } - constructor() { - super(() => { - this.onDidChangeTreeDataEmitter.dispose(); - }); + super(); } async getChildren(element: TreeElement): Promise { @@ -132,18 +82,6 @@ export class DiscoveryBranchDataProvider extends vscode.Disposable implements Ex }); } - appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { - // all items returned from this view need that context value assigned - const contextValues: string[] = contextValuesToAppend; - - // keep original contextValues if any - if (treeItem.contextValue) { - contextValues.push(treeItem.contextValue); - } - - treeItem.contextValue = createContextValue(contextValues); - } - /** * Helper to get root items for the tree. * Root items here are all the regiestered and enabled discovery providers. @@ -284,99 +222,4 @@ export class DiscoveryBranchDataProvider extends vscode.Disposable implements Ex // If the element does not have children, return null return null; } - - async getTreeItem(element: TreeElement): Promise { - /** - * Note that due to caching done by the TreeElementStateManager, - * changes to the TreeItem added here might get lost - */ - return element.getTreeItem(); - } - - /** - * Refreshes the tree data. - * This will trigger the view to update the changed element/root and its children recursively (if shown). - * - * @param element The element to refresh. If not provided, the entire tree will be refreshed. - * - * Note: This implementation handles both current and stale element references. - * If a stale reference is provided but has an ID, it will attempt to find the current - * reference in the tree before refreshing. - */ - refresh(element?: TreeElement): void { - if (element?.id) { - // We have an element with an ID - - // Handle potential stale reference issue: - // VS Code's TreeView API relies on object identity (reference equality), - // not just ID equality. Find the current reference before clearing the cache. - void this.findAndRefreshCurrentElement(element); - } else { - // No element or no ID, refresh the entire tree - this.parentCache.clear(); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - - /** - * Helper method to find the current instance of an element by ID and refresh it. - * This addresses the issue where stale references won't properly refresh the tree. - * - * @param element Potentially stale element reference - */ - private async findAndRefreshCurrentElement(element: TreeElement): Promise { - try { - // First try to find the current instance with this ID - const currentElement = await this.findNodeById(element.id!); - - // AFTER finding the element, update the cache: - // 1. Clear the cache for this ID to remove any stale references - // (drops the element and its children) - this.parentCache.clear(element.id!); - // 2. Re-register the node (but not its children) - if (currentElement?.id) { - this.parentCache.registerNode(currentElement); - } - - if (currentElement) { - // We found the current instance, use it for refresh - this.onDidChangeTreeDataEmitter.fire(currentElement); - } else { - // Current instance not found, fallback to using the provided element - // This may not work if it's truly a stale reference, but we've tried our best - this.onDidChangeTreeDataEmitter.fire(element); - } - } catch (error) { - // If anything goes wrong during the lookup, still attempt the refresh with the original element - // and clear the cache for this ID - console.log(`Error finding current element for refresh: ${error}`); - this.parentCache.clear(element.id!); - this.onDidChangeTreeDataEmitter.fire(element); - } - } - - /** - * Gets the parent of a tree element. Required for TreeView.reveal functionality. - * - * @param element The element for which to find the parent - * @returns The parent element, or undefined if the element is a root item - */ - getParent(element: TreeElement): TreeElement | null | undefined { - return this.parentCache.getParent(element); - } - - /** - * Finds a node in the tree by its ID. - * - * @param id The ID of the node to find - * @returns A Promise that resolves to the found node or undefined if not found - */ - async findNodeById(id: string): Promise { - return this.parentCache.findNodeById(id, async (element) => { - if (!element.getChildren) { - return undefined; - } - return element.getChildren(); - }); - } } From a843dc34cc922aa34a580328551ee7a725019498 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Sat, 30 Aug 2025 11:06:00 +0200 Subject: [PATCH 32/81] chore: refactoring branch data providers --- src/tree/BaseExtendedTreeDataProvider.ts | 165 +++++++++++++++++- .../documentdb/VCoreBranchDataProvider.ts | 60 ++----- .../mongo-ru/RUBranchDataProvider.ts | 60 ++----- .../ConnectionsBranchDataProvider.ts | 70 +++----- .../DiscoveryBranchDataProvider.ts | 6 +- 5 files changed, 203 insertions(+), 158 deletions(-) diff --git a/src/tree/BaseExtendedTreeDataProvider.ts b/src/tree/BaseExtendedTreeDataProvider.ts index b2e773254..bace3352a 100644 --- a/src/tree/BaseExtendedTreeDataProvider.ts +++ b/src/tree/BaseExtendedTreeDataProvider.ts @@ -3,12 +3,15 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { type IActionContext } from '@microsoft/vscode-azext-utils'; import * as vscode from 'vscode'; +import { ext } from '../extensionVariables'; import { dispose } from '../utils/vscodeUtils'; import { appendContextValues as appendContextValuesUtil } from './api/appendContextValues'; import { type ExtendedTreeDataProvider } from './ExtendedTreeDataProvider'; import { type TreeElement } from './TreeElement'; -import { type TreeElementWithContextValue } from './TreeElementWithContextValue'; +import { isTreeElementWithContextValue, type TreeElementWithContextValue } from './TreeElementWithContextValue'; +import { isTreeElementWithRetryChildren } from './TreeElementWithRetryChildren'; import { TreeParentCache } from './TreeParentCache'; /** @@ -49,7 +52,7 @@ import { TreeParentCache } from './TreeParentCache'; * When extending this class, implementers should: * - Override getChildren() to provide the actual tree structure * - Call super.refresh() when tree structure changes need to propagate - * - Use the errorNodeCache for handling failed node states in getChildren implementation + * - Use the failedChildrenCache for handling failed node states in getChildren implementation * - Register parent-child relationships using parentCache.registerRelationship() * - Use appendContextValues() helper for consistent context value management * @@ -70,16 +73,16 @@ export abstract class BaseExtendedTreeDataProvider protected readonly parentCache = new TreeParentCache(); /** - * Caches nodes whose getChildren() call has failed. + * Caches the full set of children for nodes that failed to load properly. * * This cache prevents repeated attempts to fetch children for nodes that have previously failed, - * such as when a user enters invalid credentials. By storing the failed nodes, we avoid unnecessary + * such as when a user enters invalid credentials. By storing the failed children, we avoid unnecessary * repeated calls until the error state is explicitly cleared. * * Key: Node ID (parent) - * Value: Array of TreeElement representing the failed children (usually an error node) + * Value: Array of TreeElement representing the failed children (usually includes an error node) */ - protected readonly errorNodeCache = new Map(); + protected readonly failedChildrenCache = new Map(); /** * Event emitter for notifying VS Code when tree data changes. @@ -132,14 +135,14 @@ export abstract class BaseExtendedTreeDataProvider } /** - * Removes a node's error state from the failed node cache. + * Removes a node's error state from the failed children cache. * This allows the node to be refreshed and its children to be re-fetched on the next refresh call. * If not reset, the cached error children will always be returned for this node. * - * @param nodeId The ID of the node to clear from the failed node cache. + * @param nodeId The ID of the node to clear from the failed children cache. */ resetNodeErrorState(nodeId: string): void { - this.errorNodeCache.delete(nodeId); + this.failedChildrenCache.delete(nodeId); } /** @@ -243,6 +246,150 @@ export abstract class BaseExtendedTreeDataProvider appendContextValuesUtil(treeItem, ...contextValuesToAppend); } + /** + * Wraps element's getChildren call with error caching, child processing, and state handling. + * + * This method provides a complete workflow for fetching and processing tree children: + * 1. Error state caching to prevent repeated failures + * 2. Child fetching with proper error detection + * 3. Helper node creation for error recovery + * 4. Context value appending for UI features + * 5. Parent-child relationship registration for navigation + * 6. State handling wrapping for proper updates + * + * @param element The tree element to get children for + * @param context The action context for telemetry + * @param childrenFetchFunc Function to call to fetch children + * @param options Configuration options for error handling and child processing + * @returns Processed children array, or null/undefined if none + * + * @example + * // Basic usage with full child processing: + * const children = await this.wrapGetChildrenWithErrorAndStateHandling( + * element, + * context, + * async () => element.getChildren?.(), + * { contextValue: Views.ConnectionsView } + * ); + * return children; // Already fully processed + * + * @example + * // With helper nodes (Connections provider): + * const children = await this.wrapGetChildrenWithErrorAndStateHandling( + * element, + * context, + * async () => element.getChildren?.(), + * { + * contextValue: Views.ConnectionsView, + * createHelperNodes: (el) => [ + * createGenericElementWithContext({ + * contextValue: 'error', + * id: `${el.id}/updateCredentials`, + * label: vscode.l10n.t('Click here to update credentials'), + * iconPath: new vscode.ThemeIcon('key'), + * commandId: 'vscode-documentdb.command.connectionsView.updateCredentials', + * commandArgs: [el], + * }) as TreeElement, + * ] + * } + * ); + * return children; // Already fully processed + */ + protected async wrapGetChildrenWithErrorAndStateHandling( + element: T, + context: IActionContext, + childrenFetchFunc: () => Promise, + options: { + detectErrorState?: (element: T, children: T[] | null | undefined) => boolean; + createHelperNodes?: (element: T) => T[]; + contextValue?: string; // For automatic context value appending + } = {}, + ): Promise { + // 1. Check if we have cached error children for this element + // + // This prevents repeated attempts to fetch children for nodes that have previously failed + // (e.g., due to invalid credentials or connection issues). + if (element.id && this.failedChildrenCache.has(element.id)) { + context.telemetry.properties.usedCachedErrorNode = 'true'; + return this.failedChildrenCache.get(element.id); + } + + // 2. Fetch the children of the current element + const children = await childrenFetchFunc(); + context.telemetry.measurements.childrenCount = children?.length ?? 0; + + // 3. Check if the returned children contain an error node + // This means the operation failed (e.g., authentication) + const hasError = options.detectErrorState + ? options.detectErrorState(element, children) + : isTreeElementWithRetryChildren(element) && element.hasRetryNode(children); + + if (hasError && element.id) { + // 4. Optionally create helper nodes to provide user-friendly error recovery actions + if (options.createHelperNodes) { + const helperNodes = options.createHelperNodes(element); + children?.push(...helperNodes); + } + + // 5. Store the complete error state (error nodes + helper nodes) in our cache for future refreshes + this.failedChildrenCache.set(element.id, children ?? []); + context.telemetry.properties.cachedErrorNode = 'true'; + } + + // 6. Process children when contextValue is provided (automatic child processing) + if (options.contextValue && children) { + return children.map((child) => { + if (child.id) { + if (isTreeElementWithContextValue(child)) { + this.appendContextValues(child, options.contextValue!); + } + + // Register parent-child relationship in the cache + if (element.id && child.id) { + this.parentCache.registerRelationship(element, child); + } + + return ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as T; + } + return child; + }); + } + + return children; + } + + /** + * Wraps element's getChildren call with error caching to prevent repeated failures. + * + * This method standardizes the error handling pattern used across all tree data providers, + * implementing a consistent approach to: + * + * 1. **Error State Caching**: Checks for cached error states to prevent repeated failed attempts + * 2. **Children Fetching**: Calls the provided function to fetch children from the element + * 3. **Error Detection**: Uses configurable logic to detect when children contain error states + * 4. **Helper Node Creation**: Optionally creates helper action nodes for user-friendly error recovery + * 5. **Telemetry Tracking**: Sets telemetry properties to track caching behavior and error states + * + * @deprecated Use wrapGetChildrenWithErrorAndStateHandling instead for enhanced functionality + * @param element The tree element to get children for + * @param context The action context for telemetry + * @param childrenFetchFunc Function to call to fetch children - typically () => element.getChildren?.() + * @param options Configuration options for error detection and helper nodes + * @returns Promise resolving to the children array, including any error nodes and helper nodes + */ + protected async wrapGetChildrenWithErrorHandling( + element: T, + context: IActionContext, + childrenFetchFunc: () => Promise, + options: { + detectErrorState?: (element: T, children: T[] | null | undefined) => boolean; + createHelperNodes?: (element: T) => T[]; + } = {}, + ): Promise { + // Delegate to the enhanced method without child processing + return this.wrapGetChildrenWithErrorAndStateHandling(element, context, childrenFetchFunc, options); + } + /** * Disposes of all resources held by this provider. * This includes the event emitter and any disposables registered by derived classes. diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 29a9f73c2..6458cec42 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -16,7 +16,6 @@ import { nonNullProp } from '../../../utils/nonNull'; import { BaseExtendedTreeDataProvider } from '../../BaseExtendedTreeDataProvider'; import { type TreeElement } from '../../TreeElement'; import { isTreeElementWithContextValue } from '../../TreeElementWithContextValue'; -import { isTreeElementWithRetryChildren } from '../../TreeElementWithRetryChildren'; import { type ClusterModel } from '../../documentdb/ClusterModel'; import { VCoreResourceItem } from './VCoreResourceItem'; @@ -87,57 +86,20 @@ export class VCoreBranchDataProvider context.telemetry.properties.view = Views.AzureResourcesView; context.telemetry.properties.branch = 'documentdb'; - // 1. Check if we have a cached error for this element - // - // This prevents repeated attempts to fetch children for nodes that have previously failed - // (e.g., due to invalid credentials or connection issues). - if (element.id && this.errorNodeCache.has(element.id)) { - context.telemetry.properties.usedCachedErrorNode = 'true'; - return this.errorNodeCache.get(element.id); - } - context.telemetry.properties.parentNodeContext = (await element.getTreeItem()).contextValue; - // 2. Fetch the children of the current element - const children = await element.getChildren?.(); - context.telemetry.measurements.childrenCount = children?.length ?? 0; - - // 3. Check if the returned children contain an error node - // This means the operation failed (eg. authentication) - if (isTreeElementWithRetryChildren(element) && element.hasRetryNode(children)) { - // Optional: append helpful nodes to the error node - // Here is an example: - // children?.push( - // createGenericElementWithContext({ - // contextValue: 'error', - // id: `${element.id}/updateCredentials`, - // label: vscode.l10n.t('Click here to update credentials'), - // iconPath: new vscode.ThemeIcon('key'), - // commandId: 'vscode-documentdb.command.connectionsView.updateCredentials', - // commandArgs: [element], - // }), - // ); - - // Store the error node(s) in our cache for future refreshes - this.errorNodeCache.set(element.id, children ?? []); - context.telemetry.properties.cachedErrorNode = 'true'; - } - - return children?.map((child) => { - if (child.id) { - if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, 'documentDbBranch'); - } - - // Register parent-child relationship in the cache - if (element.id && child.id) { - this.parentCache.registerRelationship(element, child); - } + // Use the enhanced method with the contextValue parameter + const children = await this.wrapGetChildrenWithErrorAndStateHandling( + element, + context, + async () => element.getChildren?.(), + { + contextValue: 'documentDbBranch', // This enables automatic child processing + }, + ); - return ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as TreeElement; - } - return child; - }); + // Return the processed children directly - no additional processing needed + return children; }); } diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 82a4ff41d..cc18a32a3 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -16,7 +16,6 @@ import { nonNullProp } from '../../../utils/nonNull'; import { BaseExtendedTreeDataProvider } from '../../BaseExtendedTreeDataProvider'; import { type TreeElement } from '../../TreeElement'; import { isTreeElementWithContextValue } from '../../TreeElementWithContextValue'; -import { isTreeElementWithRetryChildren } from '../../TreeElementWithRetryChildren'; import { type ClusterModel } from '../../documentdb/ClusterModel'; import { RUResourceItem } from './RUCoreResourceItem'; @@ -99,57 +98,20 @@ export class RUBranchDataProvider context.telemetry.properties.view = Views.AzureResourcesView; context.telemetry.properties.branch = 'ru'; - // 1. Check if we have a cached error for this element - // - // This prevents repeated attempts to fetch children for nodes that have previously failed - // (e.g., due to invalid credentials or connection issues). - if (element.id && this.errorNodeCache.has(element.id)) { - context.telemetry.properties.usedCachedErrorNode = 'true'; - return this.errorNodeCache.get(element.id); - } - context.telemetry.properties.parentNodeContext = (await element.getTreeItem()).contextValue; - // 2. Fetch the children of the current element - const children = await element.getChildren?.(); - context.telemetry.measurements.childrenCount = children?.length ?? 0; - - // 3. Check if the returned children contain an error node - // This means the operation failed (eg. authentication) - if (isTreeElementWithRetryChildren(element) && element.hasRetryNode(children)) { - // Optional: append helpful nodes to the error node - // Here is an example: - // children?.push( - // createGenericElementWithContext({ - // contextValue: 'error', - // id: `${element.id}/updateCredentials`, - // label: vscode.l10n.t('Click here to update credentials'), - // iconPath: new vscode.ThemeIcon('key'), - // commandId: 'vscode-documentdb.command.connectionsView.updateCredentials', - // commandArgs: [element], - // }), - // ); - - // Store the error node(s) in our cache for future refreshes - this.errorNodeCache.set(element.id, children ?? []); - context.telemetry.properties.cachedErrorNode = 'true'; - } - - return children?.map((child) => { - if (child.id) { - if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, 'ruBranch'); - } - - // Register parent-child relationship in the cache - if (element.id && child.id) { - this.parentCache.registerRelationship(element, child); - } + // Use the enhanced method with the contextValue parameter + const children = await this.wrapGetChildrenWithErrorAndStateHandling( + element, + context, + async () => element.getChildren?.(), + { + contextValue: 'ruBranch', // This enables automatic child processing + }, + ); - return ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as TreeElement; - } - return child; - }); + // Return the processed children directly - no additional processing needed + return children; }); } diff --git a/src/tree/connections-view/ConnectionsBranchDataProvider.ts b/src/tree/connections-view/ConnectionsBranchDataProvider.ts index aef05240e..1f49cd3d5 100644 --- a/src/tree/connections-view/ConnectionsBranchDataProvider.ts +++ b/src/tree/connections-view/ConnectionsBranchDataProvider.ts @@ -14,7 +14,6 @@ import { BaseExtendedTreeDataProvider } from '../BaseExtendedTreeDataProvider'; import { type ClusterModelWithStorage } from '../documentdb/ClusterModel'; import { type TreeElement } from '../TreeElement'; import { isTreeElementWithContextValue } from '../TreeElementWithContextValue'; -import { isTreeElementWithRetryChildren } from '../TreeElementWithRetryChildren'; import { DocumentDBClusterItem } from './DocumentDBClusterItem'; import { LocalEmulatorsItem } from './LocalEmulators/LocalEmulatorsItem'; import { NewConnectionItemCV } from './NewConnectionItemCV'; @@ -75,55 +74,30 @@ export class ConnectionsBranchDataProvider extends BaseExtendedTreeDataProvider< return rootItems; } - // 1. Check if we have a cached error for this element - // - // This prevents repeated attempts to fetch children for nodes that have previously failed - // (e.g., due to invalid credentials or connection issues). - if (element.id && this.errorNodeCache.has(element.id)) { - context.telemetry.properties.usedCachedErrorNode = 'true'; - return this.errorNodeCache.get(element.id); - } - context.telemetry.properties.parentNodeContext = (await element.getTreeItem()).contextValue; - // 2. Fetch the children of the current element - const children = await element.getChildren?.(); - context.telemetry.measurements.childrenCount = children?.length ?? 0; - - // 3. Check if the returned children contain an error node - // This means the operation failed (eg. authentication) - if (isTreeElementWithRetryChildren(element) && element.hasRetryNode(children)) { - // append helpful nodes to the error node - children?.push( - createGenericElementWithContext({ - contextValue: 'error', - id: `${element.id}/updateCredentials`, - label: vscode.l10n.t('Click here to update credentials'), - iconPath: new vscode.ThemeIcon('key'), - commandId: 'vscode-documentdb.command.connectionsView.updateCredentials', - commandArgs: [element], - }), - ); - // Store the error node(s) in our cache for future refreshes - this.errorNodeCache.set(element.id, children ?? []); - context.telemetry.properties.cachedErrorNode = 'true'; - } - - return children?.map((child) => { - if (child.id) { - if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, Views.ConnectionsView); - } - - // Register parent-child relationship in the cache - if (element.id && child.id) { - this.parentCache.registerRelationship(element, child); - } - - return ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as TreeElement; - } - return child; - }); + // Use the enhanced method with the contextValue parameter + const children = await this.wrapGetChildrenWithErrorAndStateHandling( + element, + context, + async () => element.getChildren?.(), + { + contextValue: Views.ConnectionsView, // This enables automatic child processing + createHelperNodes: (el) => [ + createGenericElementWithContext({ + contextValue: 'error', + id: `${el.id}/updateCredentials`, + label: vscode.l10n.t('Click here to update credentials'), + iconPath: new vscode.ThemeIcon('key'), + commandId: 'vscode-documentdb.command.connectionsView.updateCredentials', + commandArgs: [el], + }) as TreeElement, + ], + }, + ); + + // Return the processed children directly - no additional processing needed + return children; }); } diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index 40a7913a2..b24e1feb1 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -163,9 +163,9 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider Date: Sun, 31 Aug 2025 07:58:02 +0200 Subject: [PATCH 33/81] chore: refactoring branch data providers --- src/tree/BaseExtendedTreeDataProvider.ts | 143 +++++++++++++----- .../ConnectionsBranchDataProvider.ts | 6 +- .../DiscoveryBranchDataProvider.ts | 6 +- 3 files changed, 114 insertions(+), 41 deletions(-) diff --git a/src/tree/BaseExtendedTreeDataProvider.ts b/src/tree/BaseExtendedTreeDataProvider.ts index bace3352a..7b216c946 100644 --- a/src/tree/BaseExtendedTreeDataProvider.ts +++ b/src/tree/BaseExtendedTreeDataProvider.ts @@ -16,45 +16,82 @@ import { TreeParentCache } from './TreeParentCache'; /** * Base implementation of the ExtendedTreeDataProvider interface that provides - * parent-child relationship caching and error node handling. + * parent-child relationship caching, error handling, and state management. * - * ## Caching Mechanism + * ## Key Features * - * This class implements caching at two levels: - * 1. **Parent-child relationship caching via TreeParentCache** for efficient tree navigation: - * - Enables getParent method required for TreeView.reveal() functionality - * - Provides findNodeById for programmatic tree navigation and selection - * - Tracks hierarchical relationships for fast parent lookups + * 1. **Tree Navigation** + * - Efficient parent-child relationship tracking for TreeView.reveal() functionality + * - Node lookup by ID for programmatic navigation + * - Refresh handling that maintains proper object identity * - * 2. **Error node caching** to prevent repeated attempts to fetch children that previously failed: - * - Stores failed nodes (e.g., due to invalid credentials or connection issues) - * - Returns cached error children on subsequent calls until explicitly cleared - * - Improves user experience by avoiding repeated failed network requests + * 2. **Error Management** + * - Automatic caching of failed operations to prevent repeated connection attempts + * - Recovery mechanisms with helper action nodes + * - Granular error state reset capabilities * - * ## Error Handling + * 3. **State Processing** + * - Automatic context value propagation for UI integration + * - Consistent state handling wrapper application + * - Parent-child relationship registration * - * The error node handling system ensures that: - * - Failed nodes don't trigger repeated connection attempts - * - Users can explicitly retry by using the resetNodeErrorState method or refresh commands - * - Error state is tracked per node ID for granular control - * - Cached error nodes are returned immediately without new network calls + * ## Implementation Guide * - * ## Refresh Logic + * When extending this class, implementers should: * - * The refresh mechanism handles both current and stale element references: - * - VS Code's TreeView API relies on object identity (reference equality), not just ID equality - * - findAndRefreshCurrentElement method finds current instance by ID before refreshing - * - Cache is selectively cleared to remove stale references while preserving other nodes - * - Fallback handling ensures refresh attempts even if current instance lookup fails + * 1. **Implement getChildren()** + * ```typescript + * async getChildren(element?: TreeElement): Promise { + * return callWithTelemetryAndErrorHandling('getChildren', async (context: IActionContext) => { + * // Handle root elements specially + * if (!element) { + * // Clear the parent cache when refreshing at root level + * this.clearParentCache(); + * // Initialize root items + * return rootItems; + * } * - * ## Implementation Notes + * // For child elements, use the helper method + * return this.wrapGetChildrenWithErrorAndStateHandling( + * element, + * context, + * async () => element.getChildren?.(), + * { contextValue: 'yourViewName' } + * ); + * }); + * } + * ``` * - * When extending this class, implementers should: - * - Override getChildren() to provide the actual tree structure - * - Call super.refresh() when tree structure changes need to propagate - * - Use the failedChildrenCache for handling failed node states in getChildren implementation - * - Register parent-child relationships using parentCache.registerRelationship() - * - Use appendContextValues() helper for consistent context value management + * 2. **Use refresh() for tree updates** + * ```typescript + * // Refresh a specific node + * this.refresh(element); + * + * // Refresh the entire tree + * this.refresh(); + * ``` + * + * 3. **Reset error states when needed** + * ```typescript + * // Clear error state for a specific node + * this.resetNodeErrorState(nodeId); + * ``` + * + * 4. **Use cache management helpers** + * ```typescript + * // Clear the parent cache (typically at root level) + * this.clearParentCache(); + * + * // Register a node in the cache + * this.registerNodeInCache(node); + * + * // Register a parent-child relationship + * this.registerRelationshipInCache(parentNode, childNode); + * ``` + * + * The primary pattern is to use `wrapGetChildrenWithErrorAndStateHandling()` which provides + * a complete workflow for fetching and processing tree children, including error handling, + * parent-child relationship registration, and state management. * * @template T The tree element type that extends TreeElement */ @@ -69,8 +106,13 @@ export abstract class BaseExtendedTreeDataProvider * - Efficient implementation of tree.reveal() functionality to navigate to specific nodes * - Finding nodes by ID without traversing the entire tree each time * - Proper cleanup when refreshing parts of the tree + * + * Note: Do not access this cache directly. Use the provided helper methods: + * - clearParentCache(): Clear the entire cache + * - registerNodeInCache(): Register a node in the cache + * - registerRelationshipInCache(): Register a parent-child relationship */ - protected readonly parentCache = new TreeParentCache(); + private readonly parentCache = new TreeParentCache(); /** * Caches the full set of children for nodes that failed to load properly. @@ -111,6 +153,39 @@ export abstract class BaseExtendedTreeDataProvider super(() => this.dispose()); } + /** + * Clears the parent-child relationship cache. + * + * This should be called when refreshing at the root level to ensure clean state + * and prevent stale relationships from affecting tree navigation. + */ + protected clearParentCache(): void { + this.parentCache.clear(); + } + + /** + * Registers a node in the parent cache. + * + * @param node The node to register + */ + protected registerNodeInCache(node: T): void { + if (node.id) { + this.parentCache.registerNode(node); + } + } + + /** + * Registers a parent-child relationship in the cache. + * + * @param parent The parent node + * @param child The child node + */ + protected registerRelationshipInCache(parent: T, child: T): void { + if (parent.id && child.id) { + this.parentCache.registerRelationship(parent, child); + } + } + /** * Gets the parent of a tree element. Required for TreeView.reveal functionality. * @@ -191,7 +266,7 @@ export abstract class BaseExtendedTreeDataProvider void this.findAndRefreshCurrentElement(element); } else { // No element or no ID, refresh the entire tree - this.parentCache.clear(); + this.clearParentCache(); this.onDidChangeTreeDataEmitter.fire(element); } } @@ -213,7 +288,7 @@ export abstract class BaseExtendedTreeDataProvider this.parentCache.clear(element.id!); // 2. Re-register the node (but not its children) if (currentElement?.id) { - this.parentCache.registerNode(currentElement); + this.registerNodeInCache(currentElement); } if (currentElement) { @@ -346,7 +421,7 @@ export abstract class BaseExtendedTreeDataProvider // Register parent-child relationship in the cache if (element.id && child.id) { - this.parentCache.registerRelationship(element, child); + this.registerRelationshipInCache(element, child); } return ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as T; diff --git a/src/tree/connections-view/ConnectionsBranchDataProvider.ts b/src/tree/connections-view/ConnectionsBranchDataProvider.ts index 1f49cd3d5..95c706540 100644 --- a/src/tree/connections-view/ConnectionsBranchDataProvider.ts +++ b/src/tree/connections-view/ConnectionsBranchDataProvider.ts @@ -50,7 +50,7 @@ export class ConnectionsBranchDataProvider extends BaseExtendedTreeDataProvider< context.telemetry.properties.parentNodeContext = 'root'; // For root-level items, we should clear any existing cache first - this.parentCache.clear(); + this.clearParentCache(); const rootItems = await this.getRootItems(Views.ConnectionsView); if (!rootItems) { @@ -66,9 +66,7 @@ export class ConnectionsBranchDataProvider extends BaseExtendedTreeDataProvider< } // Add root items to the cache - if (item.id) { - this.parentCache.registerNode(item); - } + this.registerNodeInCache(item); } return rootItems; diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index b24e1feb1..631f9cf98 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -92,7 +92,7 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider(); // Clear the parent cache when retrieving root items - this.parentCache.clear(); + this.clearParentCache(); // Get the list of active discovery provider IDs from global state const activeDiscoveryProviderIds = ext.context.globalState.get('activeDiscoveryProviderIds', []); @@ -130,7 +130,7 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider Date: Sun, 31 Aug 2025 08:09:42 +0200 Subject: [PATCH 34/81] chore: refactoring branch data providers --- src/tree/BaseExtendedTreeDataProvider.ts | 12 +++++-- src/tree/api/appendContextValues.ts | 45 ------------------------ 2 files changed, 9 insertions(+), 48 deletions(-) delete mode 100644 src/tree/api/appendContextValues.ts diff --git a/src/tree/BaseExtendedTreeDataProvider.ts b/src/tree/BaseExtendedTreeDataProvider.ts index 7b216c946..5191c3122 100644 --- a/src/tree/BaseExtendedTreeDataProvider.ts +++ b/src/tree/BaseExtendedTreeDataProvider.ts @@ -3,11 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { type IActionContext } from '@microsoft/vscode-azext-utils'; +import { createContextValue, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as vscode from 'vscode'; import { ext } from '../extensionVariables'; import { dispose } from '../utils/vscodeUtils'; -import { appendContextValues as appendContextValuesUtil } from './api/appendContextValues'; import { type ExtendedTreeDataProvider } from './ExtendedTreeDataProvider'; import { type TreeElement } from './TreeElement'; import { isTreeElementWithContextValue, type TreeElementWithContextValue } from './TreeElementWithContextValue'; @@ -318,7 +317,14 @@ export abstract class BaseExtendedTreeDataProvider * @param contextValuesToAppend The context values to append */ protected appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { - appendContextValuesUtil(treeItem, ...contextValuesToAppend); + const contextValues: string[] = contextValuesToAppend; + + // Keep original contextValues if any + if (treeItem.contextValue) { + contextValues.push(treeItem.contextValue); + } + + treeItem.contextValue = createContextValue(contextValues); } /** diff --git a/src/tree/api/appendContextValues.ts b/src/tree/api/appendContextValues.ts deleted file mode 100644 index 2f24f4cce..000000000 --- a/src/tree/api/appendContextValues.ts +++ /dev/null @@ -1,45 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { createContextValue } from '@microsoft/vscode-azext-utils'; -import { type TreeElementWithContextValue } from '../TreeElementWithContextValue'; - -/** - * Appends context values to a tree item's contextValue property. - * - * This utility function standardizes how context values are combined across all tree providers. - * It ensures that existing context values are preserved while new ones are added, and uses - * the proper context value creation mechanism from the Azure Extensions utils. - * - * ## Usage Pattern - * - * This function is typically used in tree data providers when processing tree elements - * to ensure they have the correct context values for VS Code's context menu system: - * - * ```typescript - * if (isTreeElementWithContextValue(child)) { - * appendContextValues(child, 'branchSpecificValue', Views.CurrentView); - * } - * ``` - * - * ## Context Value Handling - * - * - New context values are added to the beginning of the context value list - * - Existing context values are preserved and appended to the end - * - The final context value is created using createContextValue for proper formatting - * - * @param treeItem The tree item to modify - * @param contextValuesToAppend The context values to append (order matters) - */ -export function appendContextValues(treeItem: TreeElementWithContextValue, ...contextValuesToAppend: string[]): void { - const contextValues: string[] = contextValuesToAppend; - - // Keep original contextValues if any - if (treeItem.contextValue) { - contextValues.push(treeItem.contextValue); - } - - treeItem.contextValue = createContextValue(contextValues); -} From 0d6def610720c2aadc43e046dbb6caef19288591 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Sun, 31 Aug 2025 08:31:04 +0200 Subject: [PATCH 35/81] chore: refactoring branch data providers --- src/tree/BaseExtendedTreeDataProvider.ts | 25 +++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/tree/BaseExtendedTreeDataProvider.ts b/src/tree/BaseExtendedTreeDataProvider.ts index 5191c3122..5d5cac0b8 100644 --- a/src/tree/BaseExtendedTreeDataProvider.ts +++ b/src/tree/BaseExtendedTreeDataProvider.ts @@ -55,7 +55,7 @@ import { TreeParentCache } from './TreeParentCache'; * element, * context, * async () => element.getChildren?.(), - * { contextValue: 'yourViewName' } + * { contextValue: 'yourViewName' } // Single string or string[] supported * ); * }); * } @@ -345,7 +345,7 @@ export abstract class BaseExtendedTreeDataProvider * @returns Processed children array, or null/undefined if none * * @example - * // Basic usage with full child processing: + * // Basic usage with single context value: * const children = await this.wrapGetChildrenWithErrorAndStateHandling( * element, * context, @@ -355,13 +355,23 @@ export abstract class BaseExtendedTreeDataProvider * return children; // Already fully processed * * @example + * // Using an array of context values: + * const children = await this.wrapGetChildrenWithErrorAndStateHandling( + * element, + * context, + * async () => element.getChildren?.(), + * { contextValue: [Views.AzureResourcesView, 'vCoreBranch'] } + * ); + * return children; // Already fully processed with multiple context values + * + * @example * // With helper nodes (Connections provider): * const children = await this.wrapGetChildrenWithErrorAndStateHandling( * element, * context, * async () => element.getChildren?.(), * { - * contextValue: Views.ConnectionsView, + * contextValue: [Views.ConnectionsView, 'anotherValue'], * createHelperNodes: (el) => [ * createGenericElementWithContext({ * contextValue: 'error', @@ -383,7 +393,7 @@ export abstract class BaseExtendedTreeDataProvider options: { detectErrorState?: (element: T, children: T[] | null | undefined) => boolean; createHelperNodes?: (element: T) => T[]; - contextValue?: string; // For automatic context value appending + contextValue?: string | string[]; // For automatic context value appending - single or multiple values } = {}, ): Promise { // 1. Check if we have cached error children for this element @@ -422,7 +432,12 @@ export abstract class BaseExtendedTreeDataProvider return children.map((child) => { if (child.id) { if (isTreeElementWithContextValue(child)) { - this.appendContextValues(child, options.contextValue!); + const contextValues = Array.isArray(options.contextValue) + ? options.contextValue + : options.contextValue !== undefined + ? [options.contextValue] + : []; + this.appendContextValues(child, ...contextValues); } // Register parent-child relationship in the cache From 93ab5355fcfd127f8099f0f7c2c327e381a600cd Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 1 Sep 2025 09:39:40 +0200 Subject: [PATCH 36/81] simplified 'description' handling for tree items (cluster level) --- .../azure-resources-view/mongo-ru/RUBranchDataProvider.ts | 7 ------- src/tree/documentdb/ClusterItemBase.ts | 8 +++++++- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index cc18a32a3..80ea2b7bb 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -80,9 +80,6 @@ export class RUBranchDataProvider updateItem: (item, metadata) => { if (metadata) { item.cluster = { ...item.cluster, ...metadata }; - if (item.cluster.serverVersion) { - item.descriptionOverride = `v${item.cluster.serverVersion}`; - } } }, refreshCallback: (item) => this.refresh(item), @@ -144,10 +141,6 @@ export class RUBranchDataProvider this.appendContextValues(clusterItem, 'ruBranch'); } - if (cachedMetadata?.serverVersion) { - clusterItem.descriptionOverride = `v${cachedMetadata.serverVersion}`; - } - // Register item for refresh when cache loading completes this.metadataLoader.addItemForRefresh(resource.id, clusterItem); diff --git a/src/tree/documentdb/ClusterItemBase.ts b/src/tree/documentdb/ClusterItemBase.ts index 5dd6fbbde..7d83aecc1 100644 --- a/src/tree/documentdb/ClusterItemBase.ts +++ b/src/tree/documentdb/ClusterItemBase.ts @@ -183,7 +183,13 @@ export abstract class ClusterItemBase id: this.id, contextValue: this.contextValue, label: this.cluster.name, - description: this.contextValue, + description: this.descriptionOverride + ? this.descriptionOverride + : this.cluster.sku !== undefined + ? `(${this.cluster.sku})` + : this.cluster.serverVersion !== undefined + ? `v${this.cluster.serverVersion}` + : false, iconPath: this.iconPath ?? undefined, tooltip: this.tooltipOverride ? this.tooltipOverride From b6febcee6e3d3272d6d38e34c3dc07437fc98712 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 1 Sep 2025 09:48:24 +0200 Subject: [PATCH 37/81] fix: not able to explore RU clusters in Azure Resources integration --- src/documentdb/CredentialCache.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/documentdb/CredentialCache.ts b/src/documentdb/CredentialCache.ts index 05832cfcd..5a865ca24 100644 --- a/src/documentdb/CredentialCache.ts +++ b/src/documentdb/CredentialCache.ts @@ -3,6 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { CaseInsensitiveMap } from '../utils/CaseInsensitiveMap'; import { type EmulatorConfiguration } from '../utils/emulatorConfiguration'; import { type AuthMethodId } from './auth/AuthMethod'; import { addAuthenticationDataToConnectionString } from './utils/connectionStringHelpers'; @@ -21,7 +22,8 @@ export interface ClustersCredentials { export class CredentialCache { // the id of the cluster === the tree item id -> cluster credentials - private static _store: Map = new Map(); + // Some SDKs for azure differ the case on some resources ("DocumentDb" vs "DocumentDB") + private static _store: CaseInsensitiveMap = new CaseInsensitiveMap(); public static getConnectionStringWithPassword(mongoClusterId: string): string { return CredentialCache._store.get(mongoClusterId)?.connectionStringWithPassword as string; From d668bc1718e0144b1acd98024c4ffaa33e70abeb Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 1 Sep 2025 13:21:33 +0200 Subject: [PATCH 38/81] feat: save connections from the Azure Resources view --- package.json | 16 ++++++++++ .../addConnectionFromRegistry.ts | 31 +++++++++++++++++-- src/documentdb/ClustersExtension.ts | 5 +++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c05132721..b606a8ccd 100644 --- a/package.json +++ b/package.json @@ -341,6 +341,13 @@ "title": "Learn More", "icon": "$(info)" }, + { + "//": "[ResourcesView] Save To DocumentDB Connections", + "category": "DocumentDB", + "command": "vscode-documentdb.command.azureResourcesView.addConnectionToConnectionsView", + "title": "Add To Connections In The \"DocumentDB View\"", + "icon": "$(save)" + }, { "//": "Refresh a Tree Item", "category": "DocumentDB", @@ -569,6 +576,11 @@ "when": "view == discoveryView && viewItem =~ /\\benableFilterCommand\\b/i", "group": "inline" }, + { + "command": "vscode-documentdb.command.azureResourcesView.addConnectionToConnectionsView", + "when": "view =~ /azureResourceGroups|azureFocusView/ && viewItem =~ /\\btreeitem_documentdbcluster\\b/i", + "group": "inline" + }, { "//": "Create database", "command": "vscode-documentdb.command.createDatabase", @@ -716,6 +728,10 @@ "command": "vscode-documentdb.command.discoveryView.learnMoreAboutProvider", "when": "never" }, + { + "command": "vscode-documentdb.command.azureResourcesView.addConnectionToConnectionsView", + "when": "never" + }, { "command": "vscode-documentdb.command.copyConnectionString", "when": "never" diff --git a/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts b/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts index 18b51b582..d954518aa 100644 --- a/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts +++ b/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts @@ -10,22 +10,45 @@ import { DocumentDBConnectionString } from '../../documentdb/utils/DocumentDBCon import { Views } from '../../documentdb/Views'; import { API } from '../../DocumentDBExperiences'; import { ext } from '../../extensionVariables'; -import { type DocumentDBResourceItem } from '../../plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem'; import { ConnectionStorageService, ConnectionType, type ConnectionItem } from '../../services/connectionStorageService'; import { revealConnectionsViewElement } from '../../tree/api/revealConnectionsViewElement'; import { buildConnectionsViewTreePath, waitForConnectionsViewReady, } from '../../tree/connections-view/connectionsViewHelpers'; +import { type ClusterItemBase } from '../../tree/documentdb/ClusterItemBase'; import { UserFacingError } from '../../utils/commandErrorHandling'; import { showConfirmationAsInSettings } from '../../utils/dialogs/showConfirmation'; import { generateDocumentDBStorageId } from '../../utils/storageUtils'; -export async function addConnectionFromRegistry(context: IActionContext, node: DocumentDBResourceItem): Promise { +export async function addConnectionFromRegistry(context: IActionContext, node: ClusterItemBase): Promise { if (!node) { throw new Error(l10n.t('No node selected.')); } + // FYI: As of Sept 2025 this command is used in two views: the discovery view and the azure resources view + const sourceViewId = + node.contextValue.includes('documentDbBranch') || node.contextValue.includes('ruBranch') + ? Views.AzureResourcesView + : Views.DiscoveryView; + + if (sourceViewId === Views.AzureResourcesView) { + // Show a modal dialog informing the user that the details will be saved for future use + const continueButton = l10n.t('Yes, continue'); + const message = l10n.t( + 'This connection will be added to the "Connections View" in the "DocumentDB for VS Code" extension.\n' + + 'The "Connections View" will be opened once the import completes.\n' + + '\n' + + 'Do you want to continue?', + ); + + const result = await vscode.window.showInformationMessage(message, { modal: true }, continueButton); + + if (result !== continueButton) { + return; // User cancelled + } + } + return vscode.window.withProgress( { location: { viewId: Views.ConnectionsView }, @@ -59,6 +82,10 @@ export async function addConnectionFromRegistry(context: IActionContext, node: D if (existingDuplicateConnection) { // Reveal the existing duplicate connection + await vscode.commands.executeCommand(`connectionsView.focus`); + ext.connectionsBranchDataProvider.refresh(); + await waitForConnectionsViewReady(context); + const connectionPath = buildConnectionsViewTreePath(existingDuplicateConnection.id, false); await revealConnectionsViewElement(context, connectionPath, { select: true, diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index 2bd40439b..c927a13fe 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -215,6 +215,11 @@ export class ClustersExtension implements vscode.Disposable { addConnectionFromRegistry, ); + registerCommandWithTreeNodeUnwrappingAndModalErrors( + 'vscode-documentdb.command.azureResourcesView.addConnectionToConnectionsView', + addConnectionFromRegistry, + ); + registerCommand('vscode-documentdb.command.discoveryView.refresh', (context: IActionContext) => { return refreshView(context, Views.DiscoveryView); }); From 58f0d56c81cb314a2bccc6b73319a3773ac7cea7 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 1 Sep 2025 15:39:06 +0200 Subject: [PATCH 39/81] feat: azure resources workspace data provider to support user migration from 'azure databases' extension --- l10n/bundle.l10n.json | 12 +- .../newLocalConnection/newLocalConnection.ts | 12 +- .../removeConnection/removeConnection.ts | 47 +--- src/commands/revealView/revealView.ts | 21 ++ src/documentdb/ClustersExtension.ts | 23 +- src/documentdb/Views.ts | 1 + src/extensionVariables.ts | 9 +- .../ClustersWorkbenchBranchDataProvider.ts | 58 +++++ .../DocumentDbAccountsItem.ts | 35 +++ .../DocumentDbWorkspaceResourceProvider.ts | 27 +++ .../SwitchToDocumentDbItem.ts | 43 ++++ .../SharedWorkspaceResourceProvider.ts | 135 ----------- .../workspace-view/documentdb/AccountsItem.ts | 117 --------- .../workspace-view/documentdb/ClusterItem.ts | 223 ------------------ .../ClustersWorkbenchBranchDataProvider.ts | 34 --- .../LocalEmulators/LocalEmulatorsItem.ts | 68 ------ .../NewEmulatorConnectionItem.ts | 32 --- .../documentdb/NewConnectionItem.ts | 32 --- src/utils/pickItem/pickAppResource.ts | 128 ---------- 19 files changed, 220 insertions(+), 837 deletions(-) create mode 100644 src/commands/revealView/revealView.ts create mode 100644 src/tree/azure-workspace-view/ClustersWorkbenchBranchDataProvider.ts create mode 100644 src/tree/azure-workspace-view/DocumentDbAccountsItem.ts create mode 100644 src/tree/azure-workspace-view/DocumentDbWorkspaceResourceProvider.ts create mode 100644 src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts delete mode 100644 src/tree/workspace-api/SharedWorkspaceResourceProvider.ts delete mode 100644 src/tree/workspace-view/documentdb/AccountsItem.ts delete mode 100644 src/tree/workspace-view/documentdb/ClusterItem.ts delete mode 100644 src/tree/workspace-view/documentdb/ClustersWorkbenchBranchDataProvider.ts delete mode 100644 src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts delete mode 100644 src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts delete mode 100644 src/tree/workspace-view/documentdb/NewConnectionItem.ts delete mode 100644 src/utils/pickItem/pickAppResource.ts diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 3bfae1ada..ff16c9153 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -46,7 +46,6 @@ "API: Registered new migration provider: \"{providerId}\" - \"{providerLabel}\"": "API: Registered new migration provider: \"{providerId}\" - \"{providerLabel}\"", "Are you sure?": "Are you sure?", "Attempting to authenticate with \"{cluster}\"…": "Attempting to authenticate with \"{cluster}\"…", - "Attempting to authenticate with {cluster}": "Attempting to authenticate with {cluster}", "Authenticate to connect with your DocumentDB cluster": "Authenticate to connect with your DocumentDB cluster", "Authenticate to connect with your MongoDB cluster": "Authenticate to connect with your MongoDB cluster", "Authenticate using a username and password": "Authenticate using a username and password", @@ -90,7 +89,6 @@ "Configure Azure VM Discovery Filters": "Configure Azure VM Discovery Filters", "Configure TLS/SSL Security": "Configure TLS/SSL Security", "Connect to a database": "Connect to a database", - "Connected to \"{cluster}\" as \"{username}\"": "Connected to \"{cluster}\" as \"{username}\"", "Connected to \"{name}\"": "Connected to \"{name}\"", "Connected to the cluster \"{cluster}\".": "Connected to the cluster \"{cluster}\".", "Connecting to the cluster as \"{username}\"…": "Connecting to the cluster as \"{username}\"…", @@ -98,7 +96,7 @@ "Connection String": "Connection String", "Connection string is not set": "Connection string is not set", "Connection updated successfully.": "Connection updated successfully.", - "CosmosDB Accounts": "CosmosDB Accounts", + "Connections have moved": "Connections have moved", "Could not find {0}": "Could not find {0}", "Could not find the Azure Resource Groups extension": "Could not find the Azure Resource Groups extension", "Could not find unique name for new file.": "Could not find unique name for new file.", @@ -135,6 +133,7 @@ "Do not save credentials.": "Do not save credentials.", "Document must be an object.": "Document must be an object.", "Document must be an object. Skipping…": "Document must be an object. Skipping…", + "DocumentDB and MongoDB Accounts": "DocumentDB and MongoDB Accounts", "DocumentDB Local": "DocumentDB Local", "Documents": "Documents", "Does this occur consistently? ": "Does this occur consistently? ", @@ -211,7 +210,6 @@ "Failed to store secrets for key {0}:": "Failed to store secrets for key {0}:", "Failed to update the connection.": "Failed to update the connection.", "Failed with code \"{0}\".": "Failed with code \"{0}\".", - "failed.": "failed.", "Find Query": "Find Query", "Finished importing": "Finished importing", "Go back.": "Go back.", @@ -251,7 +249,6 @@ "Invalid connection type selected.": "Invalid connection type selected.", "Invalid document ID: {0}": "Invalid document ID: {0}", "Invalid semver \"{0}\".": "Invalid semver \"{0}\".", - "Invalid workspace resource ID: {0}": "Invalid workspace resource ID: {0}", "JSON View": "JSON View", "Learn more": "Learn more", "Learn more about {0}.": "Learn more about {0}.", @@ -273,18 +270,14 @@ "Loading subscriptions…": "Loading subscriptions…", "Loading Virtual Machines…": "Loading Virtual Machines…", "Loading...": "Loading...", - "Local Emulators": "Local Emulators", "Location": "Location", "Mongo Shell connected.": "Mongo Shell connected.", "Mongo Shell Error: {error}": "Mongo Shell Error: {error}", - "MongoDB Accounts": "MongoDB Accounts", - "MongoDB Cluster Accounts": "MongoDB Cluster Accounts", "MongoDB Emulator": "MongoDB Emulator", "New Connection": "New Connection", "New connection has been added to your DocumentDB Connections.": "New connection has been added to your DocumentDB Connections.", "New connection has been added.": "New connection has been added.", "New Connection…": "New Connection…", - "New Emulator Connection…": "New Emulator Connection…", "New Local Connection": "New Local Connection", "New Local Connection…": "New Local Connection…", "No": "No", @@ -381,6 +374,7 @@ "Successfully created storage account \"{0}\".": "Successfully created storage account \"{0}\".", "Successfully created user assigned identity \"{0}\".": "Successfully created user assigned identity \"{0}\".", "Sure!": "Sure!", + "Switch to the new \"Connections View\"…": "Switch to the new \"Connections View\"…", "Table View": "Table View", "Tag can only contain alphanumeric characters, underscores, periods, and hyphens.": "Tag can only contain alphanumeric characters, underscores, periods, and hyphens.", "Tag cannot be empty.": "Tag cannot be empty.", diff --git a/src/commands/newLocalConnection/newLocalConnection.ts b/src/commands/newLocalConnection/newLocalConnection.ts index 98edf21d9..4bb99f9e9 100644 --- a/src/commands/newLocalConnection/newLocalConnection.ts +++ b/src/commands/newLocalConnection/newLocalConnection.ts @@ -14,7 +14,6 @@ import * as vscode from 'vscode'; import { API } from '../../DocumentDBExperiences'; import { ext } from '../../extensionVariables'; import { NewEmulatorConnectionItemCV } from '../../tree/connections-view/LocalEmulators/NewEmulatorConnectionItemCV'; -import { NewEmulatorConnectionItem } from '../../tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem'; import { ExecuteStep } from './ExecuteStep'; import { PromptMongoRUEmulatorConnectionStringStep } from './mongo-ru/PromptMongoRUEmulatorConnectionStringStep'; import { PromptMongoRUEmulatorSecurityStep } from './mongo-ru/PromptMongoRUEmulatorSecurityStep'; @@ -24,10 +23,7 @@ import { PromptPasswordStep } from './PromptPasswordStep'; import { PromptPortStep } from './PromptPortStep'; import { PromptUsernameStep } from './PromptUsernameStep'; -export async function newLocalConnection( - context: IActionContext, - node: NewEmulatorConnectionItem | NewEmulatorConnectionItemCV, -) { +export async function newLocalConnection(context: IActionContext, node: NewEmulatorConnectionItemCV) { const portString = vscode.workspace.getConfiguration().get(ext.settingsKeys.localPort); const portNumber = Number(portString); @@ -41,13 +37,11 @@ export async function newLocalConnection( const steps: AzureWizardPromptStep[] = []; const executeSteps: AzureWizardExecuteStep[] = []; - if (node instanceof NewEmulatorConnectionItem || node instanceof NewEmulatorConnectionItemCV) { + if (node instanceof NewEmulatorConnectionItemCV) { title = l10n.t('New Local Connection'); - const api = node instanceof NewEmulatorConnectionItemCV ? API.DocumentDB : API.CosmosDBMongoRU; - steps.push( - new PromptConnectionTypeStep(api), + new PromptConnectionTypeStep(API.DocumentDB), new PromptMongoRUEmulatorConnectionStringStep(), new PromptPortStep(), new PromptUsernameStep(), diff --git a/src/commands/removeConnection/removeConnection.ts b/src/commands/removeConnection/removeConnection.ts index 0166ee991..493187c35 100644 --- a/src/commands/removeConnection/removeConnection.ts +++ b/src/commands/removeConnection/removeConnection.ts @@ -8,18 +8,11 @@ import * as l10n from '@vscode/l10n'; import { CredentialCache } from '../../documentdb/CredentialCache'; import { ext } from '../../extensionVariables'; import { ConnectionStorageService, ConnectionType } from '../../services/connectionStorageService'; -import { StorageNames, StorageService } from '../../services/storageService'; -import { DocumentDBClusterItem } from '../../tree/connections-view/DocumentDBClusterItem'; -import { ClusterItemBase } from '../../tree/documentdb/ClusterItemBase'; -import { WorkspaceResourceType } from '../../tree/workspace-api/SharedWorkspaceResourceProvider'; -import { type ClusterItem } from '../../tree/workspace-view/documentdb/ClusterItem'; +import { type DocumentDBClusterItem } from '../../tree/connections-view/DocumentDBClusterItem'; import { getConfirmationAsInSettings } from '../../utils/dialogs/getConfirmation'; import { showConfirmationAsInSettings } from '../../utils/dialogs/showConfirmation'; -export async function removeAzureConnection( - context: IActionContext, - node: ClusterItem | DocumentDBClusterItem, -): Promise { +export async function removeAzureConnection(context: IActionContext, node: DocumentDBClusterItem): Promise { if (!node) { throw new Error(l10n.t('No node selected.')); } @@ -27,10 +20,7 @@ export async function removeAzureConnection( await removeConnection(context, node); } -export async function removeConnection( - context: IActionContext, - node: ClusterItem | DocumentDBClusterItem, -): Promise { +export async function removeConnection(context: IActionContext, node: DocumentDBClusterItem): Promise { context.telemetry.properties.experience = node.experience.api; const confirmed = await getConfirmationAsInSettings( l10n.t('Are you sure?'), @@ -46,29 +36,18 @@ export async function removeConnection( // continue with deletion - if (node instanceof DocumentDBClusterItem) { - await ext.state.showDeleting(node.id, async () => { - if ((node as DocumentDBClusterItem).cluster.emulatorConfiguration?.isEmulator) { - await ConnectionStorageService.delete(ConnectionType.Emulators, node.storageId); - } else { - await ConnectionStorageService.delete(ConnectionType.Clusters, node.storageId); - } - }); + await ext.state.showDeleting(node.id, async () => { + if ((node as DocumentDBClusterItem).cluster.emulatorConfiguration?.isEmulator) { + await ConnectionStorageService.delete(ConnectionType.Emulators, node.storageId); + } else { + await ConnectionStorageService.delete(ConnectionType.Clusters, node.storageId); + } + }); - // delete cached credentials from memory - CredentialCache.deleteCredentials(node.id); + // delete cached credentials from memory + CredentialCache.deleteCredentials(node.id); - ext.connectionsBranchDataProvider.refresh(); - } else if (node instanceof ClusterItemBase) { - await ext.state.showDeleting(node.id, async () => { - await StorageService.get(StorageNames.Workspace).delete( - WorkspaceResourceType.MongoClusters, - node.storageId, - ); - }); - - ext.mongoClustersWorkspaceBranchDataProvider.refresh(); - } + ext.connectionsBranchDataProvider.refresh(); showConfirmationAsInSettings(l10n.t('The selected connection has been removed.')); } diff --git a/src/commands/revealView/revealView.ts b/src/commands/revealView/revealView.ts new file mode 100644 index 000000000..5a1024b78 --- /dev/null +++ b/src/commands/revealView/revealView.ts @@ -0,0 +1,21 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type IActionContext } from '@microsoft/vscode-azext-utils'; +import { commands } from 'vscode'; +import { Views } from '../../documentdb/Views'; + +export async function revealView(_context: IActionContext, view: Views): Promise { + switch (view) { + case Views.ConnectionsView: + await commands.executeCommand(`connectionsView.focus`); + break; + case Views.DiscoveryView: + await commands.executeCommand(`discoveryView.focus`); + break; + default: + throw new Error(`Unsupported view: ${view}`); + } +} diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index c927a13fe..9204cf334 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -42,6 +42,7 @@ import { removeConnection } from '../commands/removeConnection/removeConnection' import { removeDiscoveryRegistry } from '../commands/removeDiscoveryRegistry/removeDiscoveryRegistry'; import { renameConnection } from '../commands/renameConnection/renameConnection'; import { retryAuthentication } from '../commands/retryAuthentication/retryAuthentication'; +import { revealView } from '../commands/revealView/revealView'; import { updateConnectionString } from '../commands/updateConnectionString/updateConnectionString'; import { updateCredentials } from '../commands/updateCredentials/updateCredentials'; import { ext } from '../extensionVariables'; @@ -50,6 +51,8 @@ import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryP import { DiscoveryService } from '../services/discoveryServices'; import { VCoreBranchDataProvider } from '../tree/azure-resources-view/documentdb/VCoreBranchDataProvider'; import { RUBranchDataProvider } from '../tree/azure-resources-view/mongo-ru/RUBranchDataProvider'; +import { ClustersWorkspaceBranchDataProvider } from '../tree/azure-workspace-view/ClustersWorkbenchBranchDataProvider'; +import { DocumentDbWorkspaceResourceProvider } from '../tree/azure-workspace-view/DocumentDbWorkspaceResourceProvider'; import { ConnectionsBranchDataProvider } from '../tree/connections-view/ConnectionsBranchDataProvider'; import { DiscoveryBranchDataProvider } from '../tree/discovery-view/DiscoveryBranchDataProvider'; import { @@ -127,17 +130,14 @@ export class ClustersExtension implements vscode.Disposable { ext.azureResourcesRUBranchDataProvider, ); - // // eslint-disable-next-line no-constant-condition, no-constant-binary-expression - // if (false && enableWorkspaceSupport()) { - // // on purpose, transition is still in progress - // activateContext.telemetry.properties.enabledWorkspace = 'true'; - - // ext.mongoClustersWorkspaceBranchDataProvider = new ClustersWorkspaceBranchDataProvider(); - // ext.rgApiV2.resources.registerWorkspaceResourceBranchDataProvider( - // WorkspaceResourceType.MongoClusters, - // ext.mongoClustersWorkspaceBranchDataProvider, - // ); - // } + ext.azureResourcesWorkspaceResourceProvider = new DocumentDbWorkspaceResourceProvider(); + ext.rgApiV2.resources.registerWorkspaceResourceProvider(ext.azureResourcesWorkspaceResourceProvider); + + ext.azureResourcesWorkspaceBranchDataProvider = new ClustersWorkspaceBranchDataProvider(); + ext.rgApiV2.resources.registerWorkspaceResourceBranchDataProvider( + 'vscode.documentdb.workspace.documentdb-accounts-resourceType', + ext.azureResourcesWorkspaceBranchDataProvider, + ); } async activateClustersSupport(): Promise { @@ -256,6 +256,7 @@ export class ClustersExtension implements vscode.Disposable { registerCommand('vscode-documentdb.command.internal.documentView.open', openDocumentView); registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.internal.retry', retryAuthentication); + registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.internal.revealView', revealView); registerCommandWithTreeNodeUnwrapping('vscode-documentdb.command.launchShell', launchShell); diff --git a/src/documentdb/Views.ts b/src/documentdb/Views.ts index 6f0895dd3..7e95735ec 100644 --- a/src/documentdb/Views.ts +++ b/src/documentdb/Views.ts @@ -7,6 +7,7 @@ export enum Views { ConnectionsView = 'connectionsView', // do not change this value DiscoveryView = 'discoveryView', // do not change this value AzureResourcesView = 'azureResourcesView', + AzureWorkspaceView = 'azureWorkspaceView', /** * Note to future maintainers: do not modify these string constants. diff --git a/src/extensionVariables.ts b/src/extensionVariables.ts index 646f6077a..67ce815a7 100644 --- a/src/extensionVariables.ts +++ b/src/extensionVariables.ts @@ -10,11 +10,11 @@ import { type DatabasesFileSystem } from './DatabasesFileSystem'; import { type MongoDBLanguageClient } from './documentdb/scrapbook/languageClient'; import { type VCoreBranchDataProvider } from './tree/azure-resources-view/documentdb/VCoreBranchDataProvider'; import { type RUBranchDataProvider } from './tree/azure-resources-view/mongo-ru/RUBranchDataProvider'; +import { type ClustersWorkspaceBranchDataProvider } from './tree/azure-workspace-view/ClustersWorkbenchBranchDataProvider'; +import { type DocumentDbWorkspaceResourceProvider } from './tree/azure-workspace-view/DocumentDbWorkspaceResourceProvider'; import { type ConnectionsBranchDataProvider } from './tree/connections-view/ConnectionsBranchDataProvider'; import { type DiscoveryBranchDataProvider } from './tree/discovery-view/DiscoveryBranchDataProvider'; import { type TreeElement } from './tree/TreeElement'; -import { type AccountsItem } from './tree/workspace-view/documentdb/AccountsItem'; -import { type ClustersWorkspaceBranchDataProvider } from './tree/workspace-view/documentdb/ClustersWorkbenchBranchDataProvider'; /** * Namespace for common variables used throughout the extension. They must be initialized in the activate() method of extension.ts @@ -40,9 +40,8 @@ export namespace ext { export let azureResourcesRUBranchDataProvider: RUBranchDataProvider; // > Azure Resources Extension: "Workspace View" - // used for the workspace: these are the dedicated providers - export let mongoClustersWorkspaceBranchDataProvider: ClustersWorkspaceBranchDataProvider; - export let mongoClusterWorkspaceBranchDataResource: AccountsItem; + export let azureResourcesWorkspaceResourceProvider: DocumentDbWorkspaceResourceProvider; + export let azureResourcesWorkspaceBranchDataProvider: ClustersWorkspaceBranchDataProvider; /** * This is the access point for the connections tree branch data provider. diff --git a/src/tree/azure-workspace-view/ClustersWorkbenchBranchDataProvider.ts b/src/tree/azure-workspace-view/ClustersWorkbenchBranchDataProvider.ts new file mode 100644 index 000000000..2c8f5879e --- /dev/null +++ b/src/tree/azure-workspace-view/ClustersWorkbenchBranchDataProvider.ts @@ -0,0 +1,58 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { type WorkspaceResource, type WorkspaceResourceBranchDataProvider } from '@microsoft/vscode-azureresources-api'; +import { Views } from '../../documentdb/Views'; +import { ext } from '../../extensionVariables'; +import { BaseExtendedTreeDataProvider } from '../BaseExtendedTreeDataProvider'; +import { type TreeElement } from '../TreeElement'; +import { isTreeElementWithContextValue } from '../TreeElementWithContextValue'; +import { DocumentDbAccountsItem } from './DocumentDbAccountsItem'; + +export class ClustersWorkspaceBranchDataProvider + extends BaseExtendedTreeDataProvider + implements WorkspaceResourceBranchDataProvider +{ + getResourceItem(_element: WorkspaceResource): TreeElement | Thenable { + return callWithTelemetryAndErrorHandling('getResourceItem', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureWorkspaceView; + + return new DocumentDbAccountsItem(); + }) as unknown as TreeElement; + } + + async getChildren(element: TreeElement): Promise { + return await callWithTelemetryAndErrorHandling('getChildren', async (context: IActionContext) => { + context.telemetry.properties.view = Views.AzureWorkspaceView; + + const children = element.getChildren ? await element.getChildren() : []; + + if (!children) { + return []; + } + + // Wrap each child with state handling for refresh support + const wrappedChildren = children.map((child) => { + if (isTreeElementWithContextValue(child)) { + this.appendContextValues(child, Views.AzureWorkspaceView); + } + + const wrappedChild = ext.state.wrapItemInStateHandling(child, () => this.refresh(child)) as TreeElement; + + // Register parent-child relationship in the cache + // Note: The check for `typeof wrappedChild.id === 'string'` is necessary because `wrapItemInStateHandling` + // can process temporary nodes that don't have an `id` property, which would otherwise cause a runtime error. + if (element.id && typeof wrappedChild.id === 'string') { + this.registerRelationshipInCache(element, wrappedChild); + } + + return wrappedChild; + }) as TreeElement[]; + + return wrappedChildren; + }); + } +} diff --git a/src/tree/azure-workspace-view/DocumentDbAccountsItem.ts b/src/tree/azure-workspace-view/DocumentDbAccountsItem.ts new file mode 100644 index 000000000..28807cba6 --- /dev/null +++ b/src/tree/azure-workspace-view/DocumentDbAccountsItem.ts @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; +import { DocumentDBExperience, type Experience } from '../../DocumentDBExperiences'; +import { type TreeElement } from '../TreeElement'; +import { type TreeElementWithExperience } from '../TreeElementWithExperience'; +import { SwitchToDocumentDbItem } from './SwitchToDocumentDbItem'; + +export class DocumentDbAccountsItem implements TreeElement, TreeElementWithExperience { + public readonly id: string; + public readonly experience: Experience; + + constructor() { + this.id = 'vscode.documentdb.workspace.accounts'; + this.experience = DocumentDBExperience; + } + + async getChildren(): Promise { + return [new SwitchToDocumentDbItem(this.id)]; + } + + getTreeItem(): vscode.TreeItem { + return { + id: this.id, + contextValue: 'vscode.cosmosdb.workspace.mongoclusters.accounts', + label: l10n.t('DocumentDB and MongoDB Accounts'), + iconPath: new vscode.ThemeIcon('link'), + collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, + }; + } +} diff --git a/src/tree/azure-workspace-view/DocumentDbWorkspaceResourceProvider.ts b/src/tree/azure-workspace-view/DocumentDbWorkspaceResourceProvider.ts new file mode 100644 index 000000000..60942c1c3 --- /dev/null +++ b/src/tree/azure-workspace-view/DocumentDbWorkspaceResourceProvider.ts @@ -0,0 +1,27 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type WorkspaceResource, type WorkspaceResourceProvider } from '@microsoft/vscode-azureresources-api'; +import { l10n, type ProviderResult } from 'vscode'; + +/** + * This class serves as the entry point for the workspace resources view. + * It implements the `WorkspaceResourceProvider` interface to provide resources + * that will be displayed in the workspace. + * + * In this implementation, we register the resource type we want to support, + * which in this case is `DocumentDB and MongoDB Accounts` Entry. + */ +export class DocumentDbWorkspaceResourceProvider implements WorkspaceResourceProvider { + getResources(): ProviderResult { + return [ + { + resourceType: 'vscode.documentdb.workspace.documentdb-accounts-resourceType', + id: 'vscode.documentdb.workspace.accounts', + name: l10n.t('DocumentDB and MongoDB Accounts'), // this name will be displayed in the workspace view, when no WorkspaceResourceBranchDataProvider is registered + }, + ]; + } +} diff --git a/src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts b/src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts new file mode 100644 index 000000000..c51263a82 --- /dev/null +++ b/src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts @@ -0,0 +1,43 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; +import { Views } from '../../documentdb/Views'; +import { type TreeElement } from '../TreeElement'; +import { type TreeElementWithContextValue } from '../TreeElementWithContextValue'; + +export class SwitchToDocumentDbItem implements TreeElement, TreeElementWithContextValue { + public readonly id: string; + public readonly contextValue: string = 'treeItem_activateDocumentDbView'; + + constructor(public readonly parentId: string) { + this.id = `${parentId}/activateDocumentDbView`; + } + + public getTreeItem(): vscode.TreeItem { + const tooltip = new vscode.MarkdownString( + l10n.t( + 'The "MongoDB Connections" functionality has moved from the "Azure Databases" to the "DocumentDB for VS Code" extension.\n\n' + + 'Your connections have been migrated to the new view.\n\n' + + 'Click to switch to the new extension view.', + ), + ); + + return { + id: this.id, + contextValue: this.contextValue, + label: l10n.t('Switch to the new "Connections View"…'), + description: l10n.t('Connections have moved'), + tooltip, + iconPath: new vscode.ThemeIcon('arrow-swap'), + command: { + command: 'vscode-documentdb.command.internal.revealView', + title: '', + arguments: [Views.ConnectionsView], + }, + }; + } +} diff --git a/src/tree/workspace-api/SharedWorkspaceResourceProvider.ts b/src/tree/workspace-api/SharedWorkspaceResourceProvider.ts deleted file mode 100644 index 39cc3fc2f..000000000 --- a/src/tree/workspace-api/SharedWorkspaceResourceProvider.ts +++ /dev/null @@ -1,135 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -/* eslint-disable */ -import { type TreeElementWithId } from '@microsoft/vscode-azext-utils'; -import { type WorkspaceResource, type WorkspaceResourceProvider } from '@microsoft/vscode-azureresources-api'; -import * as l10n from '@vscode/l10n'; -import type * as vscode from 'vscode'; - -/** - * Enum representing the types of resources that can be registered in the workspace. - * - * This enum is used to define the types of resources that can be registered within the workspace. - * By defining a type here, you can then implement and register a `WorkspaceResourceBranchDataProvider` - * and use the type defined here during the registration process. - * - * Example usage: - * - * ```typescript - * // Implement your WorkspaceResourceBranchDataProvider - * class ClustersWorkspaceBranchDataProvider implements WorkspaceResourceBranchDataProvider { - * // Implementation details... - * } - * - * // Register the provider with the type defined in the enum - * ext.rgApiV2.resources.registerWorkspaceResourceBranchDataProvider( - * WorkspaceResourceType.MongoClusters, - * new ClustersWorkspaceBranchDataProvider(), - * ); - * ``` - */ -export enum WorkspaceResourceType { - MongoClusters = 'vscode.cosmosdb.workspace.mongoclusters-resourceType', - AttachedAccounts = 'vscode.cosmosdb.workspace.attachedaccounts-resourceType', -} - -/** - * This class serves as the entry point for the workspace resources view. - * It implements the `WorkspaceResourceProvider` interface to provide resources - * that will be displayed in the workspace. - * - * In this implementation, we register the resource type we want to support, - * which in this case is `MongoClusters`. The `getResources` method returns - * an array of `WorkspaceResource` objects, each representing a resource type - * that will be available in the workspace. - * - * By implementing and registering `WorkspaceResourceBranchDataProvider`, - * we can create dedicated providers for each resource type, allowing for - * more specialized handling and display of different types of resources - * within the workspace. - */ -export class SharedWorkspaceResourceProvider implements WorkspaceResourceProvider { - getResources(): vscode.ProviderResult { - return [ - { - resourceType: WorkspaceResourceType.MongoClusters, - id: 'vscode.cosmosdb.workspace.mongoclusters', - name: l10n.t('MongoDB Cluster Accounts'), // this name will be displayed in the workspace view, when no WorkspaceResourceBranchDataProvider is registered - }, - { - resourceType: WorkspaceResourceType.AttachedAccounts, - id: 'vscode.cosmosdb.workspace.attachedaccounts', - name: l10n.t('CosmosDB Accounts'), - }, - ]; - } -} - -/** - * Extracts the workspace resource ID from a tree item's full ID. - * - * @param node - The tree item node containing an ID property - * @returns The extracted resource ID (the last segment of the full ID path) - * @throws Error if the ID is not a valid workspace resource ID or doesn't contain a path separator - * - * @remarks We store the workspace resources by their initial Id based on their endpoint, - * however when building the Tree branch we nest the Ids with their parents resulting - * in node.id being like `${WorkspaceResourceType.AttachedAccounts}/${resourceId}` - * - * When mapping back to Ids being used in the storage, always use this function to validate the node - * and get the right storage Id for a node. - */ -export function getWorkspaceResourceIdFromTreeItem(node: TreeElementWithId): string { - if (getWorkspaceResourceTypeFromFullId(node.id) === undefined) { - throw new Error(l10n.t('Invalid workspace resource ID: {0}', node.id)); - } - - const trimmedId = node.id.endsWith('/') ? node.id.slice(0, -1) : node.id; - const lastIndex = trimmedId.lastIndexOf('/'); - if (lastIndex === -1) { - throw new Error(l10n.t('Invalid workspace resource ID: {0}', node.id)); - } - // Extract the last segment of the ID - return trimmedId.substring(lastIndex + 1); -} - -/** - * Extracts the workspace resource ID from a MongoDB tree item. - * - * Unlike standard tree items, MongoDB items contain '/' characters in their IDs, - * requiring special handling to correctly extract the resource identifier. - * - * This function removes the expected prefix structure to isolate the actual resource ID. - * - * @param node - The MongoDB tree item node containing an ID property - * @returns The extracted MongoDB resource ID - * @throws Error if the ID is not a valid workspace resource ID - * - * @remarks Long-term solution would be to avoid '/' characters within individual ID segments. - */ -export function getWorkspaceResourceIdFromMongoTreeItem(node: TreeElementWithId): string { - if (getWorkspaceResourceTypeFromFullId(node.id) === undefined) { - throw new Error(l10n.t('Invalid workspace resource ID: {0}', node.id)); - } - - const trimmedId = node.id.endsWith('/') ? node.id.slice(0, -1) : node.id; - - const prefix = `${WorkspaceResourceType.MongoClusters}/`; - const cleanId = trimmedId.startsWith(prefix + 'localEmulators/') - ? trimmedId.substring(prefix.length + 'localEmulators/'.length) - : trimmedId.substring(prefix.length); - - return cleanId; -} - -function getWorkspaceResourceTypeFromFullId(fullId: string): WorkspaceResourceType | undefined { - if (fullId.startsWith(WorkspaceResourceType.AttachedAccounts)) { - return WorkspaceResourceType.AttachedAccounts; - } else if (fullId.startsWith(WorkspaceResourceType.MongoClusters)) { - return WorkspaceResourceType.MongoClusters; - } - return undefined; -} diff --git a/src/tree/workspace-view/documentdb/AccountsItem.ts b/src/tree/workspace-view/documentdb/AccountsItem.ts deleted file mode 100644 index 303ff96b6..000000000 --- a/src/tree/workspace-view/documentdb/AccountsItem.ts +++ /dev/null @@ -1,117 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as l10n from '@vscode/l10n'; -import * as vscode from 'vscode'; -import { DocumentDBExperience, type Experience } from '../../../DocumentDBExperiences'; -import { StorageNames, StorageService } from '../../../services/storageService'; -import { generateDocumentDBStorageId } from '../../../utils/storageUtils'; // Import the new utility function -import { type AttachedClusterModel } from '../../documentdb/ClusterModel'; -import { type TreeElement } from '../../TreeElement'; -import { type TreeElementWithExperience } from '../../TreeElementWithExperience'; -import { WorkspaceResourceType } from '../../workspace-api/SharedWorkspaceResourceProvider'; -import { ClusterItem } from './ClusterItem'; -import { LocalEmulatorsItem } from './LocalEmulators/LocalEmulatorsItem'; -import { NewConnectionItem } from './NewConnectionItem'; - -export class AccountsItem implements TreeElement, TreeElementWithExperience { - public readonly id: string; - public readonly experience: Experience; - - constructor() { - this.id = `${WorkspaceResourceType.MongoClusters}`; - this.experience = DocumentDBExperience; - } - - async getChildren(): Promise { - const allItems = await StorageService.get(StorageNames.Workspace).getItems(WorkspaceResourceType.MongoClusters); - - // TODO: remove this in a couple of releases - // If we find any items that are not in the new storage format, - // we need to migrate them to stay consistent - const itemUpdates = new Map(); // original ID -> new ID - await Promise.allSettled( - allItems - // filter out emulators - .filter((item) => !item.properties?.isEmulator) - // only work on items in the old format - .filter((item) => !item.id.startsWith('storageId-')) - // convert them to the new format and return the modified items - .map(async (item) => { - try { - const originalId = item.id; - const connectionString = item.secrets?.[0]; - - if (!connectionString) { - console.warn(`Item ${originalId} has no connection string, skipping migration`); - return; - } - - const storageId = generateDocumentDBStorageId(connectionString); - - // Create the new item with updated ID - const newItem = { ...item, id: storageId }; - - // Save new item first for safety - await StorageService.get(StorageNames.Workspace).push( - WorkspaceResourceType.MongoClusters, - newItem, - true, - ); - - // Delete old item after successful save - await StorageService.get(StorageNames.Workspace).delete( - WorkspaceResourceType.MongoClusters, - originalId, - ); - - // Track this item for in-memory update - itemUpdates.set(originalId, storageId); - } catch (error) { - console.error(`Failed to migrate item ${item.id}`, error); - } - }), - ); - - // EXPLICIT SIDE EFFECT: Update the in-memory items to match storage changes - if (itemUpdates.size > 0) { - console.log(`Updating ${itemUpdates.size} in-memory items with new IDs`); - for (const item of allItems) { - const newId = itemUpdates.get(item.id); - if (newId) { - item.id = newId; // Explicit side effect, updating allItems in-memory - } - } - } - - return [ - new LocalEmulatorsItem(this.id), - ...allItems - .filter((item) => !item.properties?.isEmulator) // filter out emulators - .map((item) => { - const model: AttachedClusterModel = { - id: `${this.id}/${item.id}`, // To enable TreeView.reveal, we need to have a unique nested id - storageId: item.id, - name: item.name, - dbExperience: DocumentDBExperience, - connectionString: item?.secrets?.[0] ?? undefined, - }; - - return new ClusterItem(model); - }), - new NewConnectionItem(this.id), - ]; - } - - getTreeItem(): vscode.TreeItem { - return { - id: this.id, - contextValue: 'vscode.cosmosdb.workspace.mongoclusters.accounts', - label: l10n.t('MongoDB Accounts'), - iconPath: new vscode.ThemeIcon('link'), - collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, - }; - } -} diff --git a/src/tree/workspace-view/documentdb/ClusterItem.ts b/src/tree/workspace-view/documentdb/ClusterItem.ts deleted file mode 100644 index 79147c195..000000000 --- a/src/tree/workspace-view/documentdb/ClusterItem.ts +++ /dev/null @@ -1,223 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { - AzureWizard, - callWithTelemetryAndErrorHandling, - UserCancelledError, - type IActionContext, -} from '@microsoft/vscode-azext-utils'; -import * as l10n from '@vscode/l10n'; -import * as vscode from 'vscode'; -import { ClustersClient } from '../../../documentdb/ClustersClient'; -import { CredentialCache } from '../../../documentdb/CredentialCache'; -import { type AuthenticateWizardContext } from '../../../documentdb/wizards/authenticate/AuthenticateWizardContext'; -import { ProvidePasswordStep } from '../../../documentdb/wizards/authenticate/ProvidePasswordStep'; -import { ProvideUserNameStep } from '../../../documentdb/wizards/authenticate/ProvideUsernameStep'; -import { ext } from '../../../extensionVariables'; -import { nonNullProp, nonNullValue } from '../../../utils/nonNull'; -import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; -import { type AttachedClusterModel } from '../../documentdb/ClusterModel'; -import { type TreeElementWithStorageId } from '../../TreeElementWithStorageId'; - -import { DocumentDBConnectionString } from '../../../documentdb/utils/DocumentDBConnectionString'; - -export class ClusterItem extends ClusterItemBase implements TreeElementWithStorageId { - public getCredentials(): Promise { - throw new Error('Method not implemented.'); - } - public override readonly cluster: AttachedClusterModel; - - constructor(mongoCluster: AttachedClusterModel) { - super(mongoCluster); - this.cluster = mongoCluster; // Store with correct type - } - - public get storageId(): string { - return this.cluster.storageId; - } - - public getConnectionString(): Promise { - return Promise.resolve(this.cluster.connectionString); - } - - /** - * Authenticates and connects to the MongoDB cluster. - * @param context The action context. - * @returns An instance of ClustersClient if successful; otherwise, null. - */ - protected async authenticateAndConnect(): Promise { - const result = await callWithTelemetryAndErrorHandling( - 'documentDB.mongoClusters.connect', - async (context: IActionContext) => { - context.telemetry.properties.view = 'workspace'; - - ext.outputChannel.appendLine( - l10n.t('Attempting to authenticate with {cluster}', { - cluster: this.cluster.name, - }), - ); - - let clustersClient: ClustersClient; - - const connectionString = new DocumentDBConnectionString( - nonNullValue(this.cluster.connectionString, 'cluster.connectionString', 'ClusterItem.ts'), - ); - - let username: string | undefined = connectionString.username; - let password: string | undefined = connectionString.password; - - if (!username || username.length === 0 || !password || password.length === 0) { - const wizardContext: AuthenticateWizardContext = { - ...context, - adminUserName: undefined, - resourceName: this.cluster.name, - - // preconfigure the username in case it's provided connection string - selectedUserName: username, - // we'll always ask for the password - }; - - // Prompt the user for credentials using the extracted method - const credentialsProvided = await this.promptForCredentials(wizardContext); - - // If the wizard was aborted or failed, return null - if (!credentialsProvided) { - return null; - } - - context.valuesToMask.push( - nonNullProp(wizardContext, 'password', 'wizardContext.password', 'ClusterItem.ts'), - ); - - username = nonNullProp( - wizardContext, - 'selectedUserName', - 'wizardContext.selectedUserName', - 'ClusterItem.ts', - ); - password = nonNullProp(wizardContext, 'password', 'wizardContext.password', 'ClusterItem.ts'); - } - - ext.outputChannel.append(l10n.t('Connecting to the cluster as "{username}"…', { username })); - - // Cache the credentials - CredentialCache.setCredentials( - this.id, - connectionString.toString(), - username, - password, - this.cluster.emulatorConfiguration, // workspace items can potentially be connecting to an emulator, so we always pass it - ); - - // Attempt to create the client with the provided credentials - try { - clustersClient = await ClustersClient.getClient(this.id).catch((error: Error) => { - ext.outputChannel.appendLine(l10n.t('failed.')); - ext.outputChannel.appendLine(l10n.t('Error: {error}', { error: error.message })); - - void vscode.window.showErrorMessage( - l10n.t('Failed to connect to "{cluster}"', { cluster: this.cluster.name }), - { - modal: true, - detail: - l10n.t('Revisit connection details and try again.') + - '\n\n' + - l10n.t('Error: {error}', { error: error.message }), - }, - ); - - throw error; - }); - } catch (error) { - console.error(error); - // If connection fails, remove cached credentials - await ClustersClient.deleteClient(this.id); - CredentialCache.deleteCredentials(this.id); - - // Return null to indicate failure - return null; - } - - ext.outputChannel.appendLine( - l10n.t('Connected to "{cluster}" as "{username}"', { - cluster: this.cluster.name, - username, - }), - ); - - return clustersClient; - }, - ); - return result ?? null; - } - - /** - * Prompts the user for credentials using a wizard. - * @param wizardContext The wizard context. - * @returns True if the wizard completed successfully; false if the user canceled or an error occurred. - */ - private async promptForCredentials(wizardContext: AuthenticateWizardContext): Promise { - const wizard = new AzureWizard(wizardContext, { - promptSteps: [new ProvideUserNameStep(), new ProvidePasswordStep()], - title: l10n.t('Authenticate to connect with your MongoDB cluster'), - showLoadingPrompt: true, - }); - - // Prompt the user for credentials - await callWithTelemetryAndErrorHandling('connect.promptForCredentials', async (context: IActionContext) => { - context.telemetry.properties.view = 'workspace'; - - context.errorHandling.rethrow = true; - context.errorHandling.suppressDisplay = false; - try { - await wizard.prompt(); // This will prompt the user; results are stored in wizardContext - } catch (error) { - if (error instanceof UserCancelledError) { - wizardContext.aborted = true; - } - } - }); - - // Return true if the wizard completed successfully; false otherwise - return !wizardContext.aborted; - } - - /** - * Returns the tree item representation of the cluster. - * @returns The TreeItem object. - */ - getTreeItem(): vscode.TreeItem { - let description: string | undefined = undefined; - let tooltipMessage: string | undefined = undefined; - - if (this.cluster.emulatorConfiguration?.isEmulator) { - // For emulator clusters, show TLS/SSL status if security is disabled - if (this.cluster.emulatorConfiguration?.disableEmulatorSecurity) { - description = l10n.t('⚠ TLS/SSL Disabled'); - tooltipMessage = l10n.t('⚠️ **Security:** TLS/SSL Disabled'); - } else { - tooltipMessage = l10n.t('✅ **Security:** TLS/SSL Enabled'); - } - } else { - // For non-emulator clusters, show SKU if defined - if (this.cluster.sku !== undefined) { - description = `(${this.cluster.sku})`; - } - } - - return { - id: this.id, - contextValue: this.contextValue, - label: this.cluster.name, - description: description, - iconPath: this.cluster.emulatorConfiguration?.isEmulator - ? new vscode.ThemeIcon('plug') - : new vscode.ThemeIcon('server-environment'), - collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, - tooltip: new vscode.MarkdownString(tooltipMessage), - }; - } -} diff --git a/src/tree/workspace-view/documentdb/ClustersWorkbenchBranchDataProvider.ts b/src/tree/workspace-view/documentdb/ClustersWorkbenchBranchDataProvider.ts deleted file mode 100644 index a3394d2d0..000000000 --- a/src/tree/workspace-view/documentdb/ClustersWorkbenchBranchDataProvider.ts +++ /dev/null @@ -1,34 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { type IActionContext } from '@microsoft/vscode-azext-utils'; -import { type WorkspaceResource, type WorkspaceResourceBranchDataProvider } from '@microsoft/vscode-azureresources-api'; -import { ext } from '../../../extensionVariables'; -import { RemoveMeBaseCachedBranchDataProvider } from '../../RemoveMeBaseCachedBranchDataProvider'; -import { type TreeElement } from '../../TreeElement'; -import { AccountsItem } from './AccountsItem'; - -export class ClustersWorkspaceBranchDataProvider - extends RemoveMeBaseCachedBranchDataProvider - implements WorkspaceResourceBranchDataProvider -{ - protected get contextValue(): string { - return 'mongoVCore.workspace'; - } - - protected createResourceItem(_ontext: IActionContext, _resource?: WorkspaceResource): TreeElement | undefined { - return new AccountsItem(); - } - - protected onResourceItemRetrieved( - cachedItem: AccountsItem, - _resource?: WorkspaceResource, - _context?: IActionContext, - _fromCache?: boolean, - ): void { - // Workspace picker relies on this value - ext.mongoClusterWorkspaceBranchDataResource = cachedItem; - } -} diff --git a/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts b/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts deleted file mode 100644 index 75ac9c87b..000000000 --- a/src/tree/workspace-view/documentdb/LocalEmulators/LocalEmulatorsItem.ts +++ /dev/null @@ -1,68 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as l10n from '@vscode/l10n'; -import * as vscode from 'vscode'; -import { getThemeAgnosticIconPath } from '../../../../constants'; -import { DocumentDBExperience } from '../../../../DocumentDBExperiences'; -import { StorageNames, StorageService } from '../../../../services/storageService'; -import { type EmulatorConfiguration } from '../../../../utils/emulatorConfiguration'; -import { type AttachedClusterModel } from '../../../documentdb/ClusterModel'; -import { type TreeElement } from '../../../TreeElement'; -import { type TreeElementWithContextValue } from '../../../TreeElementWithContextValue'; -import { WorkspaceResourceType } from '../../../workspace-api/SharedWorkspaceResourceProvider'; -import { ClusterItem } from '../ClusterItem'; -import { NewEmulatorConnectionItem } from './NewEmulatorConnectionItem'; - -export class LocalEmulatorsItem implements TreeElement, TreeElementWithContextValue { - public readonly id: string; - public readonly contextValue: string = 'treeItem_newConnection'; - - constructor(public readonly parentId: string) { - this.id = `${parentId}/localEmulators`; - } - - async getChildren(): Promise { - const allItems = await StorageService.get(StorageNames.Workspace).getItems(WorkspaceResourceType.MongoClusters); - const results = ( - await Promise.all( - allItems - .filter((item) => item.properties?.isEmulator) // only show emulators - .map(async (item) => { - const { id, name, properties, secrets } = item; - // we need to create the emulator configuration object from - // the flat properties object - const emulatorConfiguration: EmulatorConfiguration = { - isEmulator: true, - disableEmulatorSecurity: !!properties?.disableEmulatorSecurity, - }; - - const model: AttachedClusterModel = { - id: `${this.id}/${id}`, // To enable TreeView.reveal, we need to have a unique nested id - storageId: id, - name, - dbExperience: DocumentDBExperience, - connectionString: secrets?.[0], - emulatorConfiguration: emulatorConfiguration, - }; - - return new ClusterItem(model); - }), - ) - ).filter((item) => item !== undefined); // Explicitly filter out undefined values - - return [...results, new NewEmulatorConnectionItem(this.id)]; - } - - public getTreeItem(): vscode.TreeItem { - return { - id: this.id, - contextValue: this.contextValue, - label: l10n.t('Local Emulators'), - iconPath: getThemeAgnosticIconPath('CosmosDBAccount.svg'), - collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, - }; - } -} diff --git a/src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts b/src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts deleted file mode 100644 index 096fadf52..000000000 --- a/src/tree/workspace-view/documentdb/LocalEmulators/NewEmulatorConnectionItem.ts +++ /dev/null @@ -1,32 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as l10n from '@vscode/l10n'; -import * as vscode from 'vscode'; -import { type TreeElement } from '../../../TreeElement'; -import { type TreeElementWithContextValue } from '../../../TreeElementWithContextValue'; - -export class NewEmulatorConnectionItem implements TreeElement, TreeElementWithContextValue { - public readonly id: string; - public readonly contextValue: string = 'treeItem_newConnection'; - - constructor(public readonly parentId: string) { - this.id = `${parentId}/newEmulatorConnection`; - } - - public getTreeItem(): vscode.TreeItem { - return { - id: this.id, - contextValue: this.contextValue, - label: l10n.t('New Emulator Connection…'), - iconPath: new vscode.ThemeIcon('plus'), - command: { - command: 'documentDB.newEmulatorConnection', - title: '', - arguments: [this], - }, - }; - } -} diff --git a/src/tree/workspace-view/documentdb/NewConnectionItem.ts b/src/tree/workspace-view/documentdb/NewConnectionItem.ts deleted file mode 100644 index 4a8d0a459..000000000 --- a/src/tree/workspace-view/documentdb/NewConnectionItem.ts +++ /dev/null @@ -1,32 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as l10n from '@vscode/l10n'; -import * as vscode from 'vscode'; -import { type TreeElement } from '../../TreeElement'; -import { type TreeElementWithContextValue } from '../../TreeElementWithContextValue'; - -export class NewConnectionItem implements TreeElement, TreeElementWithContextValue { - public readonly id: string; - public readonly contextValue: string = 'treeItem_newConnection'; - - constructor(public readonly parentId: string) { - this.id = `${parentId}/newConnection`; - } - - public getTreeItem(): vscode.TreeItem { - return { - id: this.id, - contextValue: this.contextValue, - label: l10n.t('New Connection…'), - iconPath: new vscode.ThemeIcon('plus'), - command: { - command: 'documentDB.newConnection', - title: '', - arguments: [this], - }, - }; - } -} diff --git a/src/utils/pickItem/pickAppResource.ts b/src/utils/pickItem/pickAppResource.ts deleted file mode 100644 index 25c3cf40b..000000000 --- a/src/utils/pickItem/pickAppResource.ts +++ /dev/null @@ -1,128 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { - azureResourceExperience, - type ContextValueFilter, - type ITreeItemPickerContext, -} from '@microsoft/vscode-azext-utils'; -import { type AzExtResourceType } from '@microsoft/vscode-azureresources-api'; -import type * as vscode from 'vscode'; -import { ext } from '../../extensionVariables'; -import { type TreeElement } from '../../tree/TreeElement'; -import { WorkspaceResourceType } from '../../tree/workspace-api/SharedWorkspaceResourceProvider'; - -export interface PickAppResourceOptions { - type?: AzExtResourceType | AzExtResourceType[]; - expectedChildContextValue?: string | RegExp | (string | RegExp)[]; - unexpectedContextValue?: string | RegExp | (string | RegExp)[]; -} - -export interface PickWorkspaceResourceOptions { - type: WorkspaceResourceType | WorkspaceResourceType[]; - expectedChildContextValue?: string | RegExp | (string | RegExp)[]; -} - -export async function pickAppResource( - context: ITreeItemPickerContext, - options?: PickAppResourceOptions, -): Promise { - let filter: ContextValueFilter | undefined = undefined; - if (options?.expectedChildContextValue) { - filter ??= { include: options.expectedChildContextValue }; - - // Only if expectedChildContextValue is set, we will exclude unexpectedContextValue - if (options?.unexpectedContextValue) { - filter.exclude = options.unexpectedContextValue; - } - } - - return await azureResourceExperience( - context, - ext.rgApiV2.resources.azureResourceTreeDataProvider, - options?.type ? (Array.isArray(options.type) ? options.type : [options.type]) : undefined, - filter, - ); -} - -const isPick = (node: vscode.TreeItem, contextValueFilter?: ContextValueFilter): boolean => { - if (!contextValueFilter) { - return true; - } - - const includeOption = contextValueFilter.include; - const excludeOption = contextValueFilter.exclude; - - const includeArray: (string | RegExp)[] = Array.isArray(includeOption) ? includeOption : [includeOption]; - const excludeArray: (string | RegExp)[] = excludeOption - ? Array.isArray(excludeOption) - ? excludeOption - : [excludeOption] - : []; - - const nodeContextValues: string[] = node.contextValue?.split(';') ?? []; - const matchesSingleFilter = (matcher: string | RegExp, nodeContextValues: string[]) => { - return nodeContextValues.some((c) => { - if (matcher instanceof RegExp) { - return matcher.test(c); - } - - // Context value matcher is a string, do full equality (same as old behavior) - return c === matcher; - }); - }; - - return ( - includeArray.some((i) => matchesSingleFilter(i, nodeContextValues)) && - !excludeArray.some((e) => matchesSingleFilter(e, nodeContextValues)) - ); -}; - -export async function pickWorkspaceResource( - context: ITreeItemPickerContext, - options?: PickWorkspaceResourceOptions, -): Promise { - options ??= { - type: [WorkspaceResourceType.AttachedAccounts, WorkspaceResourceType.MongoClusters], - expectedChildContextValue: ['treeItem_account', 'treeItem_documentdbcluster'], - }; - - const types = Array.isArray(options.type) ? options.type : [options.type]; - const contextValueFilter = options?.expectedChildContextValue - ? { include: options.expectedChildContextValue } - : undefined; - - const firstWorkspaceResources = types - .map((type) => { - if (type === WorkspaceResourceType.MongoClusters) { - return ext.mongoClusterWorkspaceBranchDataResource; - } - - return undefined; - }) - .filter((resource) => resource !== undefined); - - const childrenPromise = await Promise.allSettled(firstWorkspaceResources.map((item) => item?.getChildren())); - const items = childrenPromise.map((promise) => (promise.status === 'fulfilled' ? promise.value : [])).flat(); - const quickPickItemsPromise = await Promise.allSettled( - items.map(async (item) => [await item.getTreeItem(), item] as const), - ); - const quickPickItems = quickPickItemsPromise - .map((promise) => (promise.status === 'fulfilled' ? promise.value : undefined)) - .filter((item) => item !== undefined) - .filter(([treeItem]) => isPick(treeItem, contextValueFilter)) - .map(([treeItem, item]) => { - return { - label: ((treeItem.label as vscode.TreeItemLabel)?.label || treeItem.label) as string, - description: treeItem.description as string, - data: item, - }; - }); - - const pickedItem = await context.ui.showQuickPick(quickPickItems, {}); - const node = pickedItem.data; - - return node as T; -} From b7b17b2075c6029347251ff9d60bd51b8638c750 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 1 Sep 2025 16:39:09 +0200 Subject: [PATCH 40/81] feat: migrating connections from Azure Databases --- l10n/bundle.l10n.json | 2 + src/services/connectionStorageService.ts | 125 +++++++++++++++++++++++ 2 files changed, 127 insertions(+) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index ff16c9153..c44f39b93 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -187,6 +187,7 @@ "Exporting documents": "Exporting documents", "Exporting…": "Exporting…", "Extension dependency with id \"{0}\" must be updated.": "Extension dependency with id \"{0}\" must be updated.", + "Failed to access Azure Databases VS Code Extension storage for migration: {error}": "Failed to access Azure Databases VS Code Extension storage for migration: {error}", "Failed to connect to \"{cluster}\"": "Failed to connect to \"{cluster}\"", "Failed to connect to VM \"{vmName}\"": "Failed to connect to VM \"{vmName}\"", "Failed to create Azure management clients: {0}": "Failed to create Azure management clients: {0}", @@ -271,6 +272,7 @@ "Loading Virtual Machines…": "Loading Virtual Machines…", "Loading...": "Loading...", "Location": "Location", + "Migration of connections from the Azure Databases VS Code Extension to the DocumentDB for VS Code Extension completed: {migratedCount} connections migrated.": "Migration of connections from the Azure Databases VS Code Extension to the DocumentDB for VS Code Extension completed: {migratedCount} connections migrated.", "Mongo Shell connected.": "Mongo Shell connected.", "Mongo Shell Error: {error}": "Mongo Shell Error: {error}", "MongoDB Emulator": "MongoDB Emulator", diff --git a/src/services/connectionStorageService.ts b/src/services/connectionStorageService.ts index 19960b226..057036728 100644 --- a/src/services/connectionStorageService.ts +++ b/src/services/connectionStorageService.ts @@ -3,9 +3,12 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; +import * as l10n from '@vscode/l10n'; import { AuthMethodId } from '../documentdb/auth/AuthMethod'; import { DocumentDBConnectionString } from '../documentdb/utils/DocumentDBConnectionString'; import { API } from '../DocumentDBExperiences'; +import { ext } from '../extensionVariables'; import { StorageNames, StorageService, type Storage, type StorageItem } from './storageService'; export enum ConnectionType { @@ -81,6 +84,8 @@ export class ConnectionStorageService { private static get storageService(): Storage { if (!this._storageService) { this._storageService = StorageService.get(StorageNames.Connections); + // Trigger migration on first access + void this.migrateFromAzureDatabases(); } return this._storageService; } @@ -186,4 +191,124 @@ export class ConnectionStorageService { }, }; } + + /** + * Migrates connections from Azure Databases extension storage to DocumentDB extension storage. + * This function is called automatically on first storage access to ensure one-time migration. + * + * TODO: remove this once the measured 'migratedCount' remains 0 for "a longer period of time" + * + * @returns Promise resolving to migration statistics + */ + private static async migrateFromAzureDatabases(): Promise<{ migrated: number; skipped: number }> { + const result = await callWithTelemetryAndErrorHandling( + 'migrateFromAzureDatabases', + async (context: IActionContext) => { + const MIGRATION_PREFIX = 'migrated-to-documentdb-'; + let migratedCount = 0; + let skippedCount = 0; + const startTime = Date.now(); + + try { + // Access the old Azure Databases storage + const oldStorage = StorageService.get('workspace'); + const allItems = await oldStorage.getItems('vscode.cosmosdb.workspace.mongoclusters-resourceType'); + + // Set telemetry properties + context.telemetry.properties.migrationAttempted = 'true'; + context.telemetry.properties.hasOldStorage = allItems.length > 0 ? 'true' : 'false'; + + context.telemetry.measurements.itemsRead = allItems.length; + + // Format current date (inline helper) + const currentDate = new Date().toLocaleDateString('en-US', { + year: 'numeric', + month: 'long', + day: 'numeric', + }); + + for (const item of allItems) { + // Check if already migrated (inline helper) + const isAlreadyMigrated = item.id.startsWith(MIGRATION_PREFIX); + + if (isAlreadyMigrated) { + skippedCount++; + continue; + } + + try { + // Migrate the item using existing migrateToV2 logic + const migratedItem = this.migrateToV2(item); + + // Create imported name (inline helper) + const importedName = `Imported: ${migratedItem.name} (${currentDate})`; + migratedItem.name = importedName; + + // Determine connection type based on emulator flag + const connectionType = item.properties?.isEmulator + ? ConnectionType.Emulators + : ConnectionType.Clusters; + + // Save to new storage + await this.save(connectionType, migratedItem, false); + + // Mark as migrated in old storage by updating the ID + const updatedItem = { ...item, id: `${MIGRATION_PREFIX}${item.id}` }; + await oldStorage.push( + 'vscode.cosmosdb.workspace.mongoclusters-resourceType', + updatedItem, + true, + ); + + migratedCount++; + } catch (error) { + // Log individual item migration errors but continue with others + ext.outputChannel.appendLog( + `Failed to migrate from Azure Databases VS Code Extension: connection item ${item.id}: ${error instanceof Error ? error.message : String(error)}`, + ); + skippedCount++; + } + } + + // Set success telemetry + context.telemetry.properties.migrationSuccessful = 'true'; + context.telemetry.measurements.migrationDurationMs = Date.now() - startTime; + context.telemetry.measurements.itemsMigrated = migratedCount; + context.telemetry.measurements.itemsSkipped = skippedCount; + + if (migratedCount > 0) { + ext.outputChannel.appendLog( + l10n.t( + 'Migration of connections from the Azure Databases VS Code Extension to the DocumentDB for VS Code Extension completed: {migratedCount} connections migrated.', + { + migratedCount, + }, + ), + ); + } + } catch (error) { + // Set failure telemetry + context.telemetry.properties.migrationSuccessful = 'false'; + context.telemetry.properties.errorType = + error instanceof Error ? error.constructor.name : 'UnknownError'; + context.telemetry.measurements.migrationDurationMs = Date.now() - startTime; + context.telemetry.measurements.itemsMigrated = migratedCount; + context.telemetry.measurements.itemsSkipped = skippedCount; + + // Log storage access errors but don't throw to avoid breaking extension initialization + ext.outputChannel.appendLog( + l10n.t('Failed to access Azure Databases VS Code Extension storage for migration: {error}', { + error: error instanceof Error ? error.message : String(error), + }), + ); + + // Don't rethrow the error - we want storage initialization to continue + } + + return { migrated: migratedCount, skipped: skippedCount }; + }, + ); + + return result ?? { migrated: 0, skipped: 0 }; + } } From fd1575543bb5fd55f36e13acee5d9f861e54b912 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Tue, 2 Sep 2025 13:59:28 +0200 Subject: [PATCH 41/81] chore: simplified variable names --- src/services/connectionStorageService.ts | 34 ++++++++++++++---------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/services/connectionStorageService.ts b/src/services/connectionStorageService.ts index 057036728..862546b62 100644 --- a/src/services/connectionStorageService.ts +++ b/src/services/connectionStorageService.ts @@ -211,14 +211,14 @@ export class ConnectionStorageService { try { // Access the old Azure Databases storage - const oldStorage = StorageService.get('workspace'); - const allItems = await oldStorage.getItems('vscode.cosmosdb.workspace.mongoclusters-resourceType'); + const legacyAzureDatabasesStorage = StorageService.get('workspace'); + const allLegacyItems = await legacyAzureDatabasesStorage.getItems('vscode.cosmosdb.workspace.mongoclusters-resourceType'); // Set telemetry properties context.telemetry.properties.migrationAttempted = 'true'; - context.telemetry.properties.hasOldStorage = allItems.length > 0 ? 'true' : 'false'; + context.telemetry.properties.hasOldStorage = allLegacyItems.length > 0 ? 'true' : 'false'; - context.telemetry.measurements.itemsRead = allItems.length; + context.telemetry.measurements.itemsReadFromLegacyStorage = allLegacyItems.length; // Format current date (inline helper) const currentDate = new Date().toLocaleDateString('en-US', { @@ -227,9 +227,9 @@ export class ConnectionStorageService { day: 'numeric', }); - for (const item of allItems) { + for (const legacyItem of allLegacyItems) { // Check if already migrated (inline helper) - const isAlreadyMigrated = item.id.startsWith(MIGRATION_PREFIX); + const isAlreadyMigrated = legacyItem.id.startsWith(MIGRATION_PREFIX); if (isAlreadyMigrated) { skippedCount++; @@ -238,33 +238,39 @@ export class ConnectionStorageService { try { // Migrate the item using existing migrateToV2 logic - const migratedItem = this.migrateToV2(item); + const migratedItem = this.migrateToV2(legacyItem); // Create imported name (inline helper) - const importedName = `Imported: ${migratedItem.name} (${currentDate})`; + const importedName = l10n.t('Imported: {name} (imported on {date})', { + name: migratedItem.name, + date: currentDate, + }); migratedItem.name = importedName; // Determine connection type based on emulator flag - const connectionType = item.properties?.isEmulator + const connectionType = legacyItem.properties?.isEmulator ? ConnectionType.Emulators : ConnectionType.Clusters; // Save to new storage - await this.save(connectionType, migratedItem, false); + await this.save(connectionType, migratedItem, true); // Mark as migrated in old storage by updating the ID - const updatedItem = { ...item, id: `${MIGRATION_PREFIX}${item.id}` }; - await oldStorage.push( + const updatedLegacyItem = { ...legacyItem, id: `${MIGRATION_PREFIX}${legacyItem.id}` }; + + await legacyAzureDatabasesStorage.push( 'vscode.cosmosdb.workspace.mongoclusters-resourceType', - updatedItem, + updatedLegacyItem, true, ); + await legacyAzureDatabasesStorage.delete('vscode.cosmosdb.workspace.mongoclusters-resourceType', legacyItem.id); + migratedCount++; } catch (error) { // Log individual item migration errors but continue with others ext.outputChannel.appendLog( - `Failed to migrate from Azure Databases VS Code Extension: connection item ${item.id}: ${error instanceof Error ? error.message : String(error)}`, + `Failed to migrate from Azure Databases VS Code Extension: connection item ${legacyItem.id}: ${error instanceof Error ? error.message : String(error)}`, ); skippedCount++; } From bf3dadce1afb0fbc53453683e55ef3204b5f3e3e Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Tue, 2 Sep 2025 16:13:30 +0200 Subject: [PATCH 42/81] feat: using connections export API from the vscode-cosmosdb extension --- src/services/connectionStorageService.ts | 135 +++++++++++++++++------ 1 file changed, 99 insertions(+), 36 deletions(-) diff --git a/src/services/connectionStorageService.ts b/src/services/connectionStorageService.ts index 862546b62..c8c4cd3e6 100644 --- a/src/services/connectionStorageService.ts +++ b/src/services/connectionStorageService.ts @@ -3,14 +3,28 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { apiUtils, callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; import { AuthMethodId } from '../documentdb/auth/AuthMethod'; import { DocumentDBConnectionString } from '../documentdb/utils/DocumentDBConnectionString'; import { API } from '../DocumentDBExperiences'; import { ext } from '../extensionVariables'; import { StorageNames, StorageService, type Storage, type StorageItem } from './storageService'; +/** + * API for migrating MongoDB cluster connections from Azure Databases extension + */ +interface MongoConnectionMigrationApi { + apiVersion: string; + exportMongoClusterConnections(context: vscode.ExtensionContext): Promise; + renameMongoClusterConnectionStorageId( + context: vscode.ExtensionContext, + oldId: string, + newId: string, + ): Promise; +} + export enum ConnectionType { Clusters = 'clusters', Emulators = 'emulators', @@ -84,8 +98,12 @@ export class ConnectionStorageService { private static get storageService(): Storage { if (!this._storageService) { this._storageService = StorageService.get(StorageNames.Connections); - // Trigger migration on first access - void this.migrateFromAzureDatabases(); + // Trigger migration on first access, but only if we haven't reached the attempt limit + const migrationAttempts = ext.context.globalState.get('azureDatabasesMigrationAttempts', 0); + if (migrationAttempts < 20) { + // this is a good number as any, just keep trying for a while to account for failures + void this.migrateFromAzureDatabases(); + } } return this._storageService; } @@ -192,35 +210,85 @@ export class ConnectionStorageService { }; } + /** + * Gets the MongoDB Migration API from the Azure Databases extension + */ + private static async getMongoMigrationApi(): Promise { + try { + const cosmosDbExtension = vscode.extensions.getExtension('ms-azuretools.vscode-cosmosdb'); + if (!cosmosDbExtension) { + console.debug('getMongoMigrationApi: ms-azuretools.vscode-cosmosdb is not installed.'); + return undefined; + } + + const api = await apiUtils.getAzureExtensionApi( + ext.context, + 'ms-azuretools.vscode-cosmosdb', + '2.0.0', + ); + + if ( + !api || + typeof api.exportMongoClusterConnections !== 'function' || + typeof api.renameMongoClusterConnectionStorageId !== 'function' + ) { + console.debug('getMongoMigrationApi: Requested API version is not available.'); + return undefined; + } + + return api; + } catch (error) { + console.debug( + `getMongoMigrationApi: Error accessing MongoDB Migration API: ${error instanceof Error ? error.message : String(error)}`, + ); + return undefined; + } + } + /** * Migrates connections from Azure Databases extension storage to DocumentDB extension storage. * This function is called automatically on first storage access to ensure one-time migration. * - * TODO: remove this once the measured 'migratedCount' remains 0 for "a longer period of time" - * * @returns Promise resolving to migration statistics */ private static async migrateFromAzureDatabases(): Promise<{ migrated: number; skipped: number }> { const result = await callWithTelemetryAndErrorHandling( 'migrateFromAzureDatabases', async (context: IActionContext) => { - const MIGRATION_PREFIX = 'migrated-to-documentdb-'; + // Increment migration attempt counter at the start of each attempt + const currentAttempts = ext.context.globalState.get('azureDatabasesMigrationAttempts', 0); + await ext.context.globalState.update('azureDatabasesMigrationAttempts', currentAttempts + 1); + context.telemetry.measurements.migrationAttemptNumber = currentAttempts + 1; + + const MIGRATION_PREFIX = 'migrated-to-vscode-documentdb-'; let migratedCount = 0; let skippedCount = 0; const startTime = Date.now(); try { - // Access the old Azure Databases storage - const legacyAzureDatabasesStorage = StorageService.get('workspace'); - const allLegacyItems = await legacyAzureDatabasesStorage.getItems('vscode.cosmosdb.workspace.mongoclusters-resourceType'); + const mongoMigrationApi = await this.getMongoMigrationApi(); - // Set telemetry properties - context.telemetry.properties.migrationAttempted = 'true'; - context.telemetry.properties.hasOldStorage = allLegacyItems.length > 0 ? 'true' : 'false'; + if (!mongoMigrationApi) { + context.telemetry.properties.migrationAttempted = 'false'; + context.telemetry.properties.reason = 'api_not_available'; + return { migrated: 0, skipped: 0 }; + } + + // Use the API to get MongoDB connections - cast to local StorageItem[] + const allLegacyItems = (await mongoMigrationApi.exportMongoClusterConnections(ext.context)) as + | StorageItem[] + | undefined; + if (!allLegacyItems || allLegacyItems.length === 0) { + context.telemetry.properties.migrationAttempted = 'true'; + context.telemetry.properties.hasOldStorage = 'false'; + return { migrated: 0, skipped: 0 }; + } + + context.telemetry.properties.migrationAttempted = 'true'; + context.telemetry.properties.hasOldStorage = 'true'; context.telemetry.measurements.itemsReadFromLegacyStorage = allLegacyItems.length; - // Format current date (inline helper) const currentDate = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', @@ -228,10 +296,7 @@ export class ConnectionStorageService { }); for (const legacyItem of allLegacyItems) { - // Check if already migrated (inline helper) - const isAlreadyMigrated = legacyItem.id.startsWith(MIGRATION_PREFIX); - - if (isAlreadyMigrated) { + if (legacyItem.id.startsWith(MIGRATION_PREFIX)) { skippedCount++; continue; } @@ -240,12 +305,10 @@ export class ConnectionStorageService { // Migrate the item using existing migrateToV2 logic const migratedItem = this.migrateToV2(legacyItem); - // Create imported name (inline helper) - const importedName = l10n.t('Imported: {name} (imported on {date})', { + migratedItem.name = l10n.t('Imported: {name} (imported on {date})', { name: migratedItem.name, date: currentDate, }); - migratedItem.name = importedName; // Determine connection type based on emulator flag const connectionType = legacyItem.properties?.isEmulator @@ -255,18 +318,22 @@ export class ConnectionStorageService { // Save to new storage await this.save(connectionType, migratedItem, true); - // Mark as migrated in old storage by updating the ID - const updatedLegacyItem = { ...legacyItem, id: `${MIGRATION_PREFIX}${legacyItem.id}` }; - - await legacyAzureDatabasesStorage.push( - 'vscode.cosmosdb.workspace.mongoclusters-resourceType', - updatedLegacyItem, - true, + // Use the API to rename the connection ID in the legacy storage + const newId = `${MIGRATION_PREFIX}${legacyItem.id}`; + const renameSuccess = await mongoMigrationApi.renameMongoClusterConnectionStorageId( + ext.context, + legacyItem.id, + newId, ); - await legacyAzureDatabasesStorage.delete('vscode.cosmosdb.workspace.mongoclusters-resourceType', legacyItem.id); - - migratedCount++; + if (renameSuccess) { + migratedCount++; + } else { + ext.outputChannel.appendLog( + `Failed to rename connection in Azure Databases extension: ${legacyItem.id}`, + ); + skippedCount++; + } } catch (error) { // Log individual item migration errors but continue with others ext.outputChannel.appendLog( @@ -286,9 +353,7 @@ export class ConnectionStorageService { ext.outputChannel.appendLog( l10n.t( 'Migration of connections from the Azure Databases VS Code Extension to the DocumentDB for VS Code Extension completed: {migratedCount} connections migrated.', - { - migratedCount, - }, + { migratedCount }, ), ); } @@ -301,14 +366,12 @@ export class ConnectionStorageService { context.telemetry.measurements.itemsMigrated = migratedCount; context.telemetry.measurements.itemsSkipped = skippedCount; - // Log storage access errors but don't throw to avoid breaking extension initialization + // Log errors but don't throw ext.outputChannel.appendLog( l10n.t('Failed to access Azure Databases VS Code Extension storage for migration: {error}', { error: error instanceof Error ? error.message : String(error), }), ); - - // Don't rethrow the error - we want storage initialization to continue } return { migrated: migratedCount, skipped: skippedCount }; From c95bae706ca55d0a04c555dc1a88e43d64f32d5f Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Tue, 2 Sep 2025 16:27:09 +0200 Subject: [PATCH 43/81] feat: importing old connections only when new Azure Resources is released --- src/documentdb/ClustersExtension.ts | 12 ++++-------- src/extension.ts | 23 +++++++++++++++++++++++ src/services/connectionStorageService.ts | 22 +++++++++++++++++----- 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index 9204cf334..c431635bf 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -45,6 +45,7 @@ import { retryAuthentication } from '../commands/retryAuthentication/retryAuthen import { revealView } from '../commands/revealView/revealView'; import { updateConnectionString } from '../commands/updateConnectionString/updateConnectionString'; import { updateCredentials } from '../commands/updateCredentials/updateCredentials'; +import { isVCoreAndRUEnabled } from '../extension'; import { ext } from '../extensionVariables'; import { AzureVMDiscoveryProvider } from '../plugins/service-azure-vm/AzureVMDiscoveryProvider'; import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryProvider'; @@ -101,15 +102,8 @@ export class ClustersExtension implements vscode.Disposable { // Dynamic registration so this file compiles when the enum members aren't present // This is how we detect whether the update to Azure Resources has been deployed - const ruResourceType = (AzExtResourceType as unknown as Record)['AzureCosmosDbForMongoDbRu']; - const documentDbResourceType = (AzExtResourceType as unknown as Record)['MongoClusters']; - - if (!ruResourceType || !documentDbResourceType) { + if (!isVCoreAndRUEnabled()) { activateContext.telemetry.properties.skippedAzureResourcesActivation = 'true'; - console.log( - 'Azure resource types not available in this environment; skipping Azure Resources provider registration.', - ); - return; } @@ -118,12 +112,14 @@ export class ClustersExtension implements vscode.Disposable { '2.0.0', )) as AzureResourcesExtensionApiWithActivity; + const documentDbResourceType = (AzExtResourceType as unknown as Record)['AzureDocumentDb']; ext.azureResourcesVCoreBranchDataProvider = new VCoreBranchDataProvider(); ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( documentDbResourceType as unknown as AzExtResourceType, ext.azureResourcesVCoreBranchDataProvider, ); + const ruResourceType = (AzExtResourceType as unknown as Record)['AzureCosmosDbForMongoDbRu']; ext.azureResourcesRUBranchDataProvider = new RUBranchDataProvider(); ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( ruResourceType as unknown as AzExtResourceType, diff --git a/src/extension.ts b/src/extension.ts index aea1dc8d1..187a2e7b2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -23,6 +23,7 @@ import { ClustersExtension } from './documentdb/ClustersExtension'; import { ext } from './extensionVariables'; import { globalUriHandler } from './vscodeUriHandler'; // Import the DocumentDB Extension API interfaces +import { AzExtResourceType } from '@microsoft/vscode-azureresources-api'; import { type DocumentDBExtensionApi } from '../api/src'; import { MigrationService } from './services/migrationServices'; @@ -106,3 +107,25 @@ export async function activateInternal( export function deactivateInternal(_context: vscode.ExtensionContext): void { // NOOP } + +/** + * Checks if vCore and RU support is to be activated in this extension. + * This introduces changes to the behavior of the extension. + * + * This function is used to determine whether the vCore and RU features should be enabled in this extension. + * + * The result of this function depends on the version of the Azure Resources extension. + * When a new version of the Azure Resources extension is released with the `AzureCosmosDbForMongoDbRu` and `MongoClusters` + * resource types, this function will return true. + * + * @returns True if vCore and RU features are enabled, false otherwise. + */ +export function isVCoreAndRUEnabled(): boolean { + const isEnabled = 'AzureCosmosDbForMongoDbRu' in AzExtResourceType && 'AzureDocumentDb' in AzExtResourceType; + + if (!isEnabled) { + console.log('Azure resource types not available in this environment; VCore and RU support remains inactive.'); + } + + return isEnabled; +} diff --git a/src/services/connectionStorageService.ts b/src/services/connectionStorageService.ts index c8c4cd3e6..0dd858f70 100644 --- a/src/services/connectionStorageService.ts +++ b/src/services/connectionStorageService.ts @@ -9,6 +9,7 @@ import * as vscode from 'vscode'; import { AuthMethodId } from '../documentdb/auth/AuthMethod'; import { DocumentDBConnectionString } from '../documentdb/utils/DocumentDBConnectionString'; import { API } from '../DocumentDBExperiences'; +import { isVCoreAndRUEnabled } from '../extension'; import { ext } from '../extensionVariables'; import { StorageNames, StorageService, type Storage, type StorageItem } from './storageService'; @@ -98,11 +99,22 @@ export class ConnectionStorageService { private static get storageService(): Storage { if (!this._storageService) { this._storageService = StorageService.get(StorageNames.Connections); - // Trigger migration on first access, but only if we haven't reached the attempt limit - const migrationAttempts = ext.context.globalState.get('azureDatabasesMigrationAttempts', 0); - if (migrationAttempts < 20) { - // this is a good number as any, just keep trying for a while to account for failures - void this.migrateFromAzureDatabases(); + + if (isVCoreAndRUEnabled()) { + try { + // Trigger migration on first access, but only if we haven't reached the attempt limit + const migrationAttempts = ext.context.globalState.get('azureDatabasesMigrationAttempts', 0); + if (migrationAttempts < 20) { + // this is a good number as any, just keep trying for a while to account for failures + void this.migrateFromAzureDatabases(); + } + } catch (error) { + // Migration is optional - output error for debugging but don't break storage service initialization + console.debug( + 'Optional migration check failed:', + error instanceof Error ? error.message : String(error), + ); + } } } return this._storageService; From d45888532619921c86be6c63df09a367c96db6c0 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Tue, 2 Sep 2025 16:31:15 +0200 Subject: [PATCH 44/81] fix: waiting for the connection data migration to complete before showing connections --- src/services/connectionStorageService.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/services/connectionStorageService.ts b/src/services/connectionStorageService.ts index 0dd858f70..2694cc5e4 100644 --- a/src/services/connectionStorageService.ts +++ b/src/services/connectionStorageService.ts @@ -96,7 +96,7 @@ export class ConnectionStorageService { // is activated. Create the Storage on first access instead. private static _storageService: Storage | undefined; - private static get storageService(): Storage { + private static async getStorageService(): Promise { if (!this._storageService) { this._storageService = StorageService.get(StorageNames.Connections); @@ -106,7 +106,7 @@ export class ConnectionStorageService { const migrationAttempts = ext.context.globalState.get('azureDatabasesMigrationAttempts', 0); if (migrationAttempts < 20) { // this is a good number as any, just keep trying for a while to account for failures - void this.migrateFromAzureDatabases(); + await this.migrateFromAzureDatabases(); } } catch (error) { // Migration is optional - output error for debugging but don't break storage service initialization @@ -121,7 +121,8 @@ export class ConnectionStorageService { } public static async getAll(connectionType: ConnectionType): Promise { - const items = await this.storageService.getItems(connectionType); + const storageService = await this.getStorageService(); + const items = await storageService.getItems(connectionType); return items.map((item) => this.fromStorageItem(item)); } @@ -129,16 +130,19 @@ export class ConnectionStorageService { * Returns a single connection by id, or undefined if not found. */ public static async get(connectionId: string, connectionType: ConnectionType): Promise { - const storageItem = await this.storageService.getItem(connectionType, connectionId); + const storageService = await this.getStorageService(); + const storageItem = await storageService.getItem(connectionType, connectionId); return storageItem ? this.fromStorageItem(storageItem) : undefined; } public static async save(connectionType: ConnectionType, item: ConnectionItem, overwrite?: boolean): Promise { - await this.storageService.push(connectionType, this.toStorageItem(item), overwrite); + const storageService = await this.getStorageService(); + await storageService.push(connectionType, this.toStorageItem(item), overwrite); } public static async delete(connectionType: ConnectionType, itemId: string): Promise { - await this.storageService.delete(connectionType, itemId); + const storageService = await this.getStorageService(); + await storageService.delete(connectionType, itemId); } private static toStorageItem(item: ConnectionItem): StorageItem { From ebc3c29a93e311c637198485fed0682abad748c1 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Tue, 2 Sep 2025 16:32:51 +0200 Subject: [PATCH 45/81] fix: npm run l10n --- l10n/bundle.l10n.json | 1 + 1 file changed, 1 insertion(+) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index c44f39b93..47782a3c9 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -230,6 +230,7 @@ "Import From JSON…": "Import From JSON…", "Import successful.": "Import successful.", "IMPORTANT: Please be sure to remove any private information before submitting.": "IMPORTANT: Please be sure to remove any private information before submitting.", + "Imported: {name} (imported on {date})": "Imported: {name} (imported on {date})", "Importing document {num} of {countDocuments}": "Importing document {num} of {countDocuments}", "Importing documents…": "Importing documents…", "Importing…": "Importing…", From c05fa6a8829a38017ba247ddab948043ad8e10a8 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Wed, 3 Sep 2025 08:03:29 +0200 Subject: [PATCH 46/81] feat: API-call based rollout of new Azure Resources detection --- src/documentdb/ClustersExtension.ts | 12 +++---- src/extension.ts | 40 +++++++++++++++++------- src/services/connectionStorageService.ts | 21 ++++++++++--- 3 files changed, 52 insertions(+), 21 deletions(-) diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index c431635bf..a9eaedeb8 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -16,7 +16,7 @@ import { registerCommandWithTreeNodeUnwrapping, } from '@microsoft/vscode-azext-utils'; import { type AzureResourcesExtensionApiWithActivity } from '@microsoft/vscode-azext-utils/activity'; -import { AzExtResourceType, getAzureResourcesExtensionApi } from '@microsoft/vscode-azureresources-api'; +import { type AzExtResourceType, getAzureResourcesExtensionApi } from '@microsoft/vscode-azureresources-api'; import * as vscode from 'vscode'; import { addConnectionFromRegistry } from '../commands/addConnectionFromRegistry/addConnectionFromRegistry'; import { addDiscoveryRegistry } from '../commands/addDiscoveryRegistry/addDiscoveryRegistry'; @@ -102,7 +102,7 @@ export class ClustersExtension implements vscode.Disposable { // Dynamic registration so this file compiles when the enum members aren't present // This is how we detect whether the update to Azure Resources has been deployed - if (!isVCoreAndRUEnabled()) { + if (!(await isVCoreAndRUEnabled())) { activateContext.telemetry.properties.skippedAzureResourcesActivation = 'true'; return; } @@ -112,17 +112,17 @@ export class ClustersExtension implements vscode.Disposable { '2.0.0', )) as AzureResourcesExtensionApiWithActivity; - const documentDbResourceType = (AzExtResourceType as unknown as Record)['AzureDocumentDb']; + const documentDbResourceType = 'AzureDocumentDb' as unknown as AzExtResourceType; ext.azureResourcesVCoreBranchDataProvider = new VCoreBranchDataProvider(); ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( - documentDbResourceType as unknown as AzExtResourceType, + documentDbResourceType, ext.azureResourcesVCoreBranchDataProvider, ); - const ruResourceType = (AzExtResourceType as unknown as Record)['AzureCosmosDbForMongoDbRu']; + const ruResourceType = 'AzureCosmosDbForMongoDbRu' as unknown as AzExtResourceType; ext.azureResourcesRUBranchDataProvider = new RUBranchDataProvider(); ext.rgApiV2.resources.registerAzureResourceBranchDataProvider( - ruResourceType as unknown as AzExtResourceType, + ruResourceType, ext.azureResourcesRUBranchDataProvider, ); diff --git a/src/extension.ts b/src/extension.ts index 187a2e7b2..f483dfaea 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,13 +7,13 @@ import { registerAzureUtilsExtensionVariables } from '@microsoft/vscode-azext-azureutils'; import { + apiUtils, callWithTelemetryAndErrorHandling, createApiProvider, createAzExtLogOutputChannel, registerErrorHandler, registerUIExtensionVariables, TreeElementStateManager, - type apiUtils, type AzureExtensionApi, type IActionContext, } from '@microsoft/vscode-azext-utils'; @@ -23,7 +23,7 @@ import { ClustersExtension } from './documentdb/ClustersExtension'; import { ext } from './extensionVariables'; import { globalUriHandler } from './vscodeUriHandler'; // Import the DocumentDB Extension API interfaces -import { AzExtResourceType } from '@microsoft/vscode-azureresources-api'; +import { type AzureResourcesExtensionApi } from '@microsoft/vscode-azureresources-api'; import { type DocumentDBExtensionApi } from '../api/src'; import { MigrationService } from './services/migrationServices'; @@ -118,14 +118,32 @@ export function deactivateInternal(_context: vscode.ExtensionContext): void { * When a new version of the Azure Resources extension is released with the `AzureCosmosDbForMongoDbRu` and `MongoClusters` * resource types, this function will return true. * - * @returns True if vCore and RU features are enabled, false otherwise. + * @returns True if vCore and RU features are enabled, false | undefined otherwise. */ -export function isVCoreAndRUEnabled(): boolean { - const isEnabled = 'AzureCosmosDbForMongoDbRu' in AzExtResourceType && 'AzureDocumentDb' in AzExtResourceType; - - if (!isEnabled) { - console.log('Azure resource types not available in this environment; VCore and RU support remains inactive.'); - } - - return isEnabled; +export async function isVCoreAndRUEnabled(): Promise { + return callWithTelemetryAndErrorHandling('isVCoreAndRUEnabled', async (context: IActionContext) => { + // Suppress error display and don't rethrow - this is feature detection that should fail gracefully + context.errorHandling.suppressDisplay = true; + context.errorHandling.rethrow = false; + + const azureResourcesExtensionApi = await apiUtils.getAzureExtensionApi< + AzureResourcesExtensionApi & { isDocumentDbExtensionSupportEnabled: () => boolean } + >(ext.context, 'ms-azuretools.vscode-azureresourcegroups', '3.0.0'); + + // Check if the feature is enabled via the API function + if (typeof azureResourcesExtensionApi.isDocumentDbExtensionSupportEnabled === 'function') { + const isEnabled = azureResourcesExtensionApi.isDocumentDbExtensionSupportEnabled(); + context.telemetry.properties.vCoreAndRUEnabled = String(isEnabled); + context.telemetry.properties.apiMethodAvailable = 'true'; + return isEnabled; + } + + // If the function doesn't exist, assume DISABLED + context.telemetry.properties.vCoreAndRUEnabled = 'false'; + context.telemetry.properties.apiMethodAvailable = 'false'; + ext.outputChannel.appendLog( + 'Expected Azure Resources API v3.0.0 is not available; VCore and RU support remains inactive.', + ); + return false; + }); } diff --git a/src/services/connectionStorageService.ts b/src/services/connectionStorageService.ts index 2694cc5e4..655506276 100644 --- a/src/services/connectionStorageService.ts +++ b/src/services/connectionStorageService.ts @@ -91,6 +91,9 @@ const enum SecretIndex { * underlying storage and migration complexity. */ export class ConnectionStorageService { + private static readonly MIGRATION_FROM_AZUREDATABASES_ATTEMPTS_KEY = + 'ConnectionStorageService.migrationAttemptsFromAzureDatabases'; + // Lazily-initialized underlying storage instance. We must not call StorageService.get // at module-load time because `ext.context` may not be available until the extension // is activated. Create the Storage on first access instead. @@ -100,10 +103,14 @@ export class ConnectionStorageService { if (!this._storageService) { this._storageService = StorageService.get(StorageNames.Connections); - if (isVCoreAndRUEnabled()) { + if (await isVCoreAndRUEnabled()) { try { // Trigger migration on first access, but only if we haven't reached the attempt limit - const migrationAttempts = ext.context.globalState.get('azureDatabasesMigrationAttempts', 0); + const migrationAttempts = ext.context.globalState.get( + this.MIGRATION_FROM_AZUREDATABASES_ATTEMPTS_KEY, + 0, + ); + if (migrationAttempts < 20) { // this is a good number as any, just keep trying for a while to account for failures await this.migrateFromAzureDatabases(); @@ -272,8 +279,14 @@ export class ConnectionStorageService { 'migrateFromAzureDatabases', async (context: IActionContext) => { // Increment migration attempt counter at the start of each attempt - const currentAttempts = ext.context.globalState.get('azureDatabasesMigrationAttempts', 0); - await ext.context.globalState.update('azureDatabasesMigrationAttempts', currentAttempts + 1); + const currentAttempts = ext.context.globalState.get( + this.MIGRATION_FROM_AZUREDATABASES_ATTEMPTS_KEY, + 0, + ); + await ext.context.globalState.update( + this.MIGRATION_FROM_AZUREDATABASES_ATTEMPTS_KEY, + currentAttempts + 1, + ); context.telemetry.measurements.migrationAttemptNumber = currentAttempts + 1; const MIGRATION_PREFIX = 'migrated-to-vscode-documentdb-'; From 15a7084afd887d01dea8a3bfaffb492be5e61cfd Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Wed, 3 Sep 2025 12:01:40 +0200 Subject: [PATCH 47/81] chore: refactor, update funcion names for readability --- src/documentdb/ClustersExtension.ts | 8 +++++--- src/extension.ts | 8 ++++---- src/services/connectionStorageService.ts | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index a9eaedeb8..f5c20cd71 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -45,7 +45,7 @@ import { retryAuthentication } from '../commands/retryAuthentication/retryAuthen import { revealView } from '../commands/revealView/revealView'; import { updateConnectionString } from '../commands/updateConnectionString/updateConnectionString'; import { updateCredentials } from '../commands/updateCredentials/updateCredentials'; -import { isVCoreAndRUEnabled } from '../extension'; +import { isVCoreAndRURolloutEnabled } from '../extension'; import { ext } from '../extensionVariables'; import { AzureVMDiscoveryProvider } from '../plugins/service-azure-vm/AzureVMDiscoveryProvider'; import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryProvider'; @@ -102,8 +102,10 @@ export class ClustersExtension implements vscode.Disposable { // Dynamic registration so this file compiles when the enum members aren't present // This is how we detect whether the update to Azure Resources has been deployed - if (!(await isVCoreAndRUEnabled())) { - activateContext.telemetry.properties.skippedAzureResourcesActivation = 'true'; + const isRolloutEnabled = await isVCoreAndRURolloutEnabled(); + activateContext.telemetry.properties.activatingAzureResourcesIntegration = isRolloutEnabled ? 'true' : 'false'; + + if (!isRolloutEnabled) { return; } diff --git a/src/extension.ts b/src/extension.ts index f483dfaea..6ceec42cc 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -120,8 +120,8 @@ export function deactivateInternal(_context: vscode.ExtensionContext): void { * * @returns True if vCore and RU features are enabled, false | undefined otherwise. */ -export async function isVCoreAndRUEnabled(): Promise { - return callWithTelemetryAndErrorHandling('isVCoreAndRUEnabled', async (context: IActionContext) => { +export async function isVCoreAndRURolloutEnabled(): Promise { + return callWithTelemetryAndErrorHandling('isVCoreAndRURolloutEnabled', async (context: IActionContext) => { // Suppress error display and don't rethrow - this is feature detection that should fail gracefully context.errorHandling.suppressDisplay = true; context.errorHandling.rethrow = false; @@ -133,13 +133,13 @@ export async function isVCoreAndRUEnabled(): Promise { // Check if the feature is enabled via the API function if (typeof azureResourcesExtensionApi.isDocumentDbExtensionSupportEnabled === 'function') { const isEnabled = azureResourcesExtensionApi.isDocumentDbExtensionSupportEnabled(); - context.telemetry.properties.vCoreAndRUEnabled = String(isEnabled); + context.telemetry.properties.vCoreAndRURolloutEnabled = String(isEnabled); context.telemetry.properties.apiMethodAvailable = 'true'; return isEnabled; } // If the function doesn't exist, assume DISABLED - context.telemetry.properties.vCoreAndRUEnabled = 'false'; + context.telemetry.properties.vCoreAndRURolloutEnabled = 'false'; context.telemetry.properties.apiMethodAvailable = 'false'; ext.outputChannel.appendLog( 'Expected Azure Resources API v3.0.0 is not available; VCore and RU support remains inactive.', diff --git a/src/services/connectionStorageService.ts b/src/services/connectionStorageService.ts index 655506276..96a87a2a8 100644 --- a/src/services/connectionStorageService.ts +++ b/src/services/connectionStorageService.ts @@ -9,7 +9,7 @@ import * as vscode from 'vscode'; import { AuthMethodId } from '../documentdb/auth/AuthMethod'; import { DocumentDBConnectionString } from '../documentdb/utils/DocumentDBConnectionString'; import { API } from '../DocumentDBExperiences'; -import { isVCoreAndRUEnabled } from '../extension'; +import { isVCoreAndRURolloutEnabled } from '../extension'; import { ext } from '../extensionVariables'; import { StorageNames, StorageService, type Storage, type StorageItem } from './storageService'; @@ -103,7 +103,7 @@ export class ConnectionStorageService { if (!this._storageService) { this._storageService = StorageService.get(StorageNames.Connections); - if (await isVCoreAndRUEnabled()) { + if (await isVCoreAndRURolloutEnabled()) { try { // Trigger migration on first access, but only if we haven't reached the attempt limit const migrationAttempts = ext.context.globalState.get( From daee791122cc9d28863f376ec15255d2d8f0b8fd Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Wed, 3 Sep 2025 12:06:09 +0200 Subject: [PATCH 48/81] feat: improved tooltip wording --- src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts b/src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts index c51263a82..0dcb6341c 100644 --- a/src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts +++ b/src/tree/azure-workspace-view/SwitchToDocumentDbItem.ts @@ -20,9 +20,9 @@ export class SwitchToDocumentDbItem implements TreeElement, TreeElementWithConte public getTreeItem(): vscode.TreeItem { const tooltip = new vscode.MarkdownString( l10n.t( - 'The "MongoDB Connections" functionality has moved from the "Azure Databases" to the "DocumentDB for VS Code" extension.\n\n' + - 'Your connections have been migrated to the new view.\n\n' + - 'Click to switch to the new extension view.', + 'The "MongoDB Connections" functionality has moved to the "DocumentDB for VS Code" extension.\n\n' + + 'If you had connections saved here in the past, they have been migrated to the new "Connections View".\n\n' + + 'Click to switch to the new view.', ), ); From a60fee393eca72fa89b040e43dce7c17cc543e53 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Wed, 3 Sep 2025 18:35:21 +0200 Subject: [PATCH 49/81] feat: added support for "retry" op in the RU and vCore branch in the Azure Resources tree --- .../retryAuthentication.ts | 35 +++++++++++++++---- .../documentdb/VCoreBranchDataProvider.ts | 4 +-- .../mongo-ru/RUBranchDataProvider.ts | 4 +-- 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/commands/retryAuthentication/retryAuthentication.ts b/src/commands/retryAuthentication/retryAuthentication.ts index 8d6dc0e9e..2a64643de 100644 --- a/src/commands/retryAuthentication/retryAuthentication.ts +++ b/src/commands/retryAuthentication/retryAuthentication.ts @@ -9,19 +9,40 @@ import { Views } from '../../documentdb/Views'; import { ext } from '../../extensionVariables'; import { type ClusterItemBase } from '../../tree/documentdb/ClusterItemBase'; +const containsDelimited = (fullContext: string | undefined, value: string): boolean => { + if (!fullContext) { + return false; + } + return new RegExp(`\\b${value}\\b`, 'i').test(fullContext); +}; + export async function retryAuthentication(_context: IActionContext, node: ClusterItemBase): Promise { if (!node) { throw new Error(l10n.t('No node selected.')); } - if (new RegExp(`\\b${Views.ConnectionsView}\\b`, 'i').test(node.contextValue)) { - ext.connectionsBranchDataProvider.resetNodeErrorState(node.id); - return ext.connectionsBranchDataProvider.refresh(node); - } + const contextValue = node.contextValue; + + switch (true) { + case containsDelimited(contextValue, Views.ConnectionsView): + ext.connectionsBranchDataProvider.resetNodeErrorState(node.id); + return ext.connectionsBranchDataProvider.refresh(node); + + case containsDelimited(contextValue, Views.DiscoveryView): + ext.discoveryBranchDataProvider.resetNodeErrorState(node.id); + return ext.discoveryBranchDataProvider.refresh(node); - if (new RegExp(`\\b${Views.DiscoveryView}\\b`, 'i').test(node.contextValue)) { - ext.discoveryBranchDataProvider.resetNodeErrorState(node.id); - return ext.discoveryBranchDataProvider.refresh(node); + case containsDelimited(contextValue, Views.AzureResourcesView): { + if (containsDelimited(contextValue, 'ruBranch')) { + ext.azureResourcesRUBranchDataProvider.resetNodeErrorState(node.id); + return ext.azureResourcesRUBranchDataProvider.refresh(node); + } + if (containsDelimited(contextValue, 'documentDbBranch')) { + ext.azureResourcesVCoreBranchDataProvider.resetNodeErrorState(node.id); + return ext.azureResourcesVCoreBranchDataProvider.refresh(node); + } + break; + } } throw new Error(l10n.t('Unsupported view for an authentication retry.')); diff --git a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts index 6458cec42..f819c8df9 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreBranchDataProvider.ts @@ -94,7 +94,7 @@ export class VCoreBranchDataProvider context, async () => element.getChildren?.(), { - contextValue: 'documentDbBranch', // This enables automatic child processing + contextValue: ['documentDbBranch', Views.AzureResourcesView], // This enables automatic child processing }, ); @@ -130,7 +130,7 @@ export class VCoreBranchDataProvider ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); if (isTreeElementWithContextValue(clusterItem)) { - this.appendContextValues(clusterItem, 'documentDbBranch'); + this.appendContextValues(clusterItem, 'documentDbBranch', Views.AzureResourcesView); } // Register item for refresh when cache loading completes diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 80ea2b7bb..283c52310 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -103,7 +103,7 @@ export class RUBranchDataProvider context, async () => element.getChildren?.(), { - contextValue: 'ruBranch', // This enables automatic child processing + contextValue: ['ruBranch', Views.AzureResourcesView], // This enables automatic child processing }, ); @@ -138,7 +138,7 @@ export class RUBranchDataProvider const clusterItem = new RUResourceItem(resource.subscription, clusterInfo); ext.state.wrapItemInStateHandling(clusterItem, () => this.refresh(clusterItem)); if (isTreeElementWithContextValue(clusterItem)) { - this.appendContextValues(clusterItem, 'ruBranch'); + this.appendContextValues(clusterItem, 'ruBranch', Views.AzureResourcesView); } // Register item for refresh when cache loading completes From 67a1f46b2da4caf99f90804b6c3ba40acd1be314 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 12:30:19 +0200 Subject: [PATCH 50/81] fix: removed duplicate "refresh" context menu entries --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b606a8ccd..7e38610c3 100644 --- a/package.json +++ b/package.json @@ -678,9 +678,9 @@ "group": "1@1" }, { - "//": "[TreeItem] Refresh Item (cluster, database, collection, documents, indexes)", + "//": "[TreeItem] Refresh Item (cluster, database, collection, documents, indexes) -> but not in azure(ResourceGroups|FocusView) as it's done there by the Azure Resources host extension.", "command": "vscode-documentdb.command.refresh", - "when": "view =~ /connectionsView|discoveryView|azure(ResourceGroups|FocusView)/ && viewItem =~ /\\btreeitem_(documentdbcluster|database|collection|documents|indexes|index)\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", + "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_(documentdbcluster|database|collection|documents|indexes|index)\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "zheLastGroup@1" }, { From 5549d6fda49095fb3914c92aa506457683af7265 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 12:49:36 +0200 Subject: [PATCH 51/81] fix: restored "Scrapbook" submenu entries for RU and vCore in Azure Resources --- package.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/package.json b/package.json index 7e38610c3..9a3bdae9d 100644 --- a/package.json +++ b/package.json @@ -462,13 +462,11 @@ { "//": "[Database] Scrapbook: New Scrapbook", "command": "vscode-documentdb.command.scrapbook.new", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Database] Scrapbook: Connect", "command": "vscode-documentdb.command.scrapbook.connect", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_database\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" } ], @@ -476,13 +474,11 @@ { "//": "[Collection] Mongo DB|Cluster Scrapbook New", "command": "vscode-documentdb.command.scrapbook.new", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@1" }, { "//": "[Collection] Scrapbook / Connect", "command": "vscode-documentdb.command.scrapbook.connect", - "when": "view =~ /connectionsView|discoveryView/ && viewItem =~ /\\btreeitem_collection\\b/i && viewItem =~ /\\bexperience_(documentDB|mongoRU)\\b/i", "group": "1@2" } ], From 185a2afbd02e2189d6a5d6e698e28a2f8e488763 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 13:03:08 +0200 Subject: [PATCH 52/81] fix: updated user facing message wording --- l10n/bundle.l10n.json | 1 + .../addConnectionFromRegistry.ts | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 47782a3c9..91aa419a3 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -96,6 +96,7 @@ "Connection String": "Connection String", "Connection string is not set": "Connection string is not set", "Connection updated successfully.": "Connection updated successfully.", + "Connection: \"{selectedConnectionName}\"\n\nThe connection will be added to the \"Connections View\" in the \"DocumentDB for VS Code\" extension. The \"Connections View\" will be opened once this process completes.\n\nDo you want to continue?": "Connection: \"{selectedConnectionName}\"\n\nThe connection will be added to the \"Connections View\" in the \"DocumentDB for VS Code\" extension. The \"Connections View\" will be opened once this process completes.\n\nDo you want to continue?", "Connections have moved": "Connections have moved", "Could not find {0}": "Could not find {0}", "Could not find the Azure Resource Groups extension": "Could not find the Azure Resource Groups extension", diff --git a/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts b/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts index d954518aa..4ac5dd347 100644 --- a/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts +++ b/src/commands/addConnectionFromRegistry/addConnectionFromRegistry.ts @@ -36,10 +36,10 @@ export async function addConnectionFromRegistry(context: IActionContext, node: C // Show a modal dialog informing the user that the details will be saved for future use const continueButton = l10n.t('Yes, continue'); const message = l10n.t( - 'This connection will be added to the "Connections View" in the "DocumentDB for VS Code" extension.\n' + - 'The "Connections View" will be opened once the import completes.\n' + - '\n' + - 'Do you want to continue?', + 'Connection: "{selectedConnectionName}"\n\nThe connection will be added to the "Connections View" in the "DocumentDB for VS Code" extension. The "Connections View" will be opened once this process completes.\n\nDo you want to continue?', + { + selectedConnectionName: node.cluster.name, + }, ); const result = await vscode.window.showInformationMessage(message, { modal: true }, continueButton); From ff07650925754008a5738ca88c0dd34c7e89ece7 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 14:02:33 +0200 Subject: [PATCH 53/81] fix: Update CODEOWNERS Used correct team name --- .github/CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1441926aa..2c1f2fb2b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,3 @@ -/.azure-pipelines @Microsoft/documentdb-for-vscode-engineering -/.config @Microsoft/documentdb-for-vscode-engineering -* @Microsoft/documentdb-for-vscode-engineering +/.azure-pipelines @microsoft/documentdb-for-vscode-core-engineering +/.config @microsoft/documentdb-for-vscode-core-engineering +* @microsoft/documentdb-for-vscode-core-engineering From faa84bb9ebe75936a907f682cbb8141e7a5204ac Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 14:12:41 +0200 Subject: [PATCH 54/81] chore: removed obsolete code --- src/documentdb/activationConditions.ts | 85 -------------------------- 1 file changed, 85 deletions(-) delete mode 100644 src/documentdb/activationConditions.ts diff --git a/src/documentdb/activationConditions.ts b/src/documentdb/activationConditions.ts deleted file mode 100644 index 59f445fda..000000000 --- a/src/documentdb/activationConditions.ts +++ /dev/null @@ -1,85 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as semver from 'semver'; -import { extensions } from 'vscode'; - -/** - * This file contains the activation conditions for the DocumentDB extension. - * The logic has been defined in the following ticket: - * https://github.com/microsoft/vscode-documentdb/issues/30 - * - * The goal is to ensure that parts of the extension are activated in sync with partner extensions. - */ - -const AZURE_DATABASES_WORKSPACE_HANDOVER_VERSION = '10.25.3'; // This is the version that stops supporting documentdb workspaces -const AZURE_DATABASES_VCORE_HANDOVER_VERSION = '11.0.0'; // This is the version that stops supporting vCore Azure Resources -const AZURE_DATABASES_RU_HANDOVER_VERSION = '10.26.0'; // This is the version that stops supporting RU Azure Resources - -let cachedAzureDatabasesVersion: semver.SemVer | null | undefined = undefined; - -/** - * Retrieves and caches the version of the Azure Databases (CosmosDB) extension. - * This is used to determine feature activation based on the partner extension's version. - * Returns a semver.SemVer object if the extension is installed and the version is valid, - * otherwise returns null. - */ -function getAzureDatabasesVersion(): semver.SemVer | null { - if (cachedAzureDatabasesVersion !== undefined) { - return cachedAzureDatabasesVersion; - } - - try { - const vsCodeCosmosDB = extensions.getExtension('ms-azuretools.vscode-cosmosdb'); - if (!vsCodeCosmosDB) { - cachedAzureDatabasesVersion = null; - return cachedAzureDatabasesVersion; - } - const version = (vsCodeCosmosDB.packageJSON as { version: string }).version; - cachedAzureDatabasesVersion = semver.parse(version, true); // Validate the version string - } catch { - cachedAzureDatabasesVersion = null; - } - return cachedAzureDatabasesVersion; -} - -/** - * Determines if workspace support should be enabled in the DocumentDB extension. - * This is based on the version of the Azure Databases extension. - * Returns true if the partner extension's version is greater than or equal to the handover version. - */ -export function enableWorkspaceSupport(): boolean { - const azureDatabasesVersion = getAzureDatabasesVersion(); - if (!azureDatabasesVersion) { - return false; - } - return semver.gte(azureDatabasesVersion, AZURE_DATABASES_WORKSPACE_HANDOVER_VERSION); -} - -/** - * Determines if MongoDB vCore support should be enabled in the DocumentDB extension. - * This is based on the version of the Azure Databases extension. - * Returns true if the partner extension's version is greater than or equal to the handover version. - */ -export function enableMongoVCoreSupport(): boolean { - const azureDatabasesVersion = getAzureDatabasesVersion(); - if (!azureDatabasesVersion) { - return true; - } - return semver.gte(azureDatabasesVersion, AZURE_DATABASES_VCORE_HANDOVER_VERSION); -} - -/** - * Determines if MongoDB RU support should be enabled in the DocumentDB extension. - * This is based on the version of the Azure Databases extension. - * Returns true if the partner extension's version is greater than or equal to the handover version. - */ -export function enableMongoRUSupport(): boolean { - const azureDatabasesVersion = getAzureDatabasesVersion(); - if (!azureDatabasesVersion) { - return true; - } - return semver.gte(azureDatabasesVersion, AZURE_DATABASES_RU_HANDOVER_VERSION); -} From df36e564162ad535223716c89b7fa6891995cc01 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 14:13:09 +0200 Subject: [PATCH 55/81] chore: reviewed/applied some copilot suggestions --- .../azure-resources-view/mongo-ru/RUBranchDataProvider.ts | 5 +++-- src/tree/documentdb/ClusterItemBase.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts index 283c52310..f6cf3cd91 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUBranchDataProvider.ts @@ -44,8 +44,9 @@ export class RUBranchDataProvider // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-argument const managementClient = await createCosmosDBManagementClient(context, subscription as any); - let ruAccounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); - ruAccounts = ruAccounts.filter((account) => account.kind === 'MongoDB'); // ignore non-ru accounts + const ruAccounts = (await uiUtils.listAllIterator(managementClient.databaseAccounts.list())).filter( + (account) => account.kind === 'MongoDB', + ); // ignore non-ru accounts console.debug( 'Loaded metadata for %s/%s: %d entries', diff --git a/src/tree/documentdb/ClusterItemBase.ts b/src/tree/documentdb/ClusterItemBase.ts index 7d83aecc1..d92baa62d 100644 --- a/src/tree/documentdb/ClusterItemBase.ts +++ b/src/tree/documentdb/ClusterItemBase.ts @@ -48,7 +48,7 @@ export abstract class ClusterItemBase public readonly experience: Experience; public contextValue: string = 'treeItem_documentdbcluster'; - public descriptionOverride?: string; + protected descriptionOverride?: string; protected tooltipOverride?: string | vscode.MarkdownString; protected iconPath?: From c930dae0095a5fb6292590b8e7755a3b1a528380 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 14:46:22 +0200 Subject: [PATCH 56/81] Copilot: Update src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts index 8cb469a37..6800de03a 100644 --- a/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts +++ b/src/tree/azure-resources-view/mongo-ru/RUCoreResourceItem.ts @@ -83,7 +83,7 @@ export class RUResourceItem extends ClusterItemBase { CredentialCache.setAuthCredentials( this.id, credentials.selectedAuthMethod!, - nonNullValue(credentials.connectionString, 'credentials.connectionString', 'VCoreResourceItem.ts'), + nonNullValue(credentials.connectionString, 'credentials.connectionString', 'RUCoreResourceItem.ts'), credentials.connectionUser, credentials.connectionPassword, ); From 717a0359eeb16d6632a07aef2018576dc45de640 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Thu, 4 Sep 2025 14:48:52 +0200 Subject: [PATCH 57/81] fix: updated the api mode of connections created by the uri handler --- src/vscodeUriHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vscodeUriHandler.ts b/src/vscodeUriHandler.ts index 792e14c14..b7420115b 100644 --- a/src/vscodeUriHandler.ts +++ b/src/vscodeUriHandler.ts @@ -171,7 +171,7 @@ async function handleConnectionStringRequest( name: newConnectionLabel, // Connection strings handled by this handler are MongoDB-style, so mark the API accordingly. properties: { - api: API.CosmosDBMongoRU, + api: API.DocumentDB, emulatorConfiguration: { isEmulator, disableEmulatorSecurity: !!disableEmulatorSecurity }, availableAuthMethods: [], }, From ae8fd6f4690407bc79786382bc16baccce62dd3a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 5 Sep 2025 06:42:30 +0000 Subject: [PATCH 58/81] Initial plan From f5d8843e6154be004a53a94cd71911b74e12e076 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 5 Sep 2025 07:02:12 +0000 Subject: [PATCH 59/81] Implement Phase 1-3: Azure MongoDB (RU) Service Discovery infrastructure Co-authored-by: tnaum-ms <171359267+tnaum-ms@users.noreply.github.com> --- l10n/bundle.l10n.json | 7 + src/documentdb/ClustersExtension.ts | 2 + .../AzureMongoRUDiscoveryProvider.ts | 61 +++++++++ .../AzureMongoRUServiceRootItem.ts | 93 +++++++++++++ .../AzureMongoRUSubscriptionItem.ts | 79 +++++++++++ .../documentdb/MongoRUResourceItem.ts | 122 +++++++++++++++++ .../AzureMongoRUExecuteStep.ts | 59 +++++++++ .../discovery-wizard/SelectRUClusterStep.ts | 71 ++++++++++ .../utils/ruClusterHelpers.ts | 124 ++++++++++++++++++ 9 files changed, 618 insertions(+) create mode 100644 src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts create mode 100644 src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts create mode 100644 src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts create mode 100644 src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts create mode 100644 src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts create mode 100644 src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts create mode 100644 src/plugins/service-azure-mongo-ru/utils/ruClusterHelpers.ts diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 91aa419a3..d796879f0 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -35,6 +35,8 @@ "A connection with the same username and host already exists.": "A connection with the same username and host already exists.", "A new connection will be added to your Connections View.\nDo you want to continue?\n\nNote: You can disable these URL handling confirmations in the exension settings.": "A new connection will be added to your Connections View.\nDo you want to continue?\n\nNote: You can disable these URL handling confirmations in the exension settings.", "A value is required to proceed.": "A value is required to proceed.", + "Account \"{account}\" is not a MongoDB account.": "Account \"{account}\" is not a MongoDB account.", + "Account information is incomplete.": "Account information is incomplete.", "Add new document": "Add new document", "Advanced": "Advanced", "All available providers have been added already.": "All available providers have been added already.", @@ -56,9 +58,11 @@ "Authentication is required to run this action.": "Authentication is required to run this action.", "Authentication is required to use this migration provider.": "Authentication is required to use this migration provider.", "Azure Activity": "Azure Activity", + "Azure Cosmos DB for MongoDB (RU)": "Azure Cosmos DB for MongoDB (RU)", "Azure Cosmos DB for MongoDB (RU) Emulator": "Azure Cosmos DB for MongoDB (RU) Emulator", "Azure Cosmos DB for MongoDB (vCore)": "Azure Cosmos DB for MongoDB (vCore)", "Azure Service Discovery": "Azure Service Discovery", + "Azure Service Discovery for MongoDB RU": "Azure Service Discovery for MongoDB RU", "Azure VM Service Discovery": "Azure VM Service Discovery", "Azure VM: Attempting to authenticate with \"{vmName}\"…": "Azure VM: Attempting to authenticate with \"{vmName}\"…", "Azure VM: Connected to \"{vmName}\" as \"{username}\".": "Azure VM: Connected to \"{vmName}\" as \"{username}\".", @@ -70,6 +74,7 @@ "Change page size": "Change page size", "Check document syntax": "Check document syntax", "Choose a cluster…": "Choose a cluster…", + "Choose a RU cluster…": "Choose a RU cluster…", "Choose a subscription…": "Choose a subscription…", "Choose a Virtual Machine…": "Choose a Virtual Machine…", "Choose the data migration provider…": "Choose the data migration provider…", @@ -270,6 +275,7 @@ "Loading document {num} of {countUri}": "Loading document {num} of {countUri}", "Loading documents…": "Loading documents…", "Loading resources...": "Loading resources...", + "Loading RU clusters…": "Loading RU clusters…", "Loading subscriptions…": "Loading subscriptions…", "Loading Virtual Machines…": "Loading Virtual Machines…", "Loading...": "Loading...", @@ -434,6 +440,7 @@ "Unable to connect to the local database instance. Make sure it is started correctly. See {link} for tips.": "Unable to connect to the local database instance. Make sure it is started correctly. See {link} for tips.", "Unable to connect to the local instance. Make sure it is started correctly. See {link} for tips.": "Unable to connect to the local instance. Make sure it is started correctly. See {link} for tips.", "Unable to parse syntax near line {line}, col {column}: {message}": "Unable to parse syntax near line {line}, col {column}: {message}", + "Unable to retrieve credentials for cluster \"{cluster}\".": "Unable to retrieve credentials for cluster \"{cluster}\".", "Unable to retrieve credentials for the selected cluster.": "Unable to retrieve credentials for the selected cluster.", "Unexpected status code: {0}": "Unexpected status code: {0}", "Unknown error": "Unknown error", diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index f5c20cd71..e5b319a33 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -47,6 +47,7 @@ import { updateConnectionString } from '../commands/updateConnectionString/updat import { updateCredentials } from '../commands/updateCredentials/updateCredentials'; import { isVCoreAndRURolloutEnabled } from '../extension'; import { ext } from '../extensionVariables'; +import { AzureMongoRUDiscoveryProvider } from '../plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider'; import { AzureVMDiscoveryProvider } from '../plugins/service-azure-vm/AzureVMDiscoveryProvider'; import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryProvider'; import { DiscoveryService } from '../services/discoveryServices'; @@ -70,6 +71,7 @@ export class ClustersExtension implements vscode.Disposable { registerDiscoveryServices(_activateContext: IActionContext) { DiscoveryService.registerProvider(new AzureDiscoveryProvider()); + DiscoveryService.registerProvider(new AzureMongoRUDiscoveryProvider()); DiscoveryService.registerProvider(new AzureVMDiscoveryProvider()); } diff --git a/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts b/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts new file mode 100644 index 000000000..4b2f251f0 --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts @@ -0,0 +1,61 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type IActionContext, type IWizardOptions } from '@microsoft/vscode-azext-utils'; +import { Disposable, l10n, ThemeIcon } from 'vscode'; +import { type NewConnectionWizardContext } from '../../commands/newConnection/NewConnectionWizardContext'; +import { ext } from '../../extensionVariables'; +import { type DiscoveryProvider } from '../../services/discoveryServices'; +import { type TreeElement } from '../../tree/TreeElement'; +import { AzureSubscriptionProviderWithFilters } from '../api-shared/azure/AzureSubscriptionProviderWithFilters'; +import { configureAzureSubscriptionFilter } from '../api-shared/azure/subscriptionFiltering'; +import { AzureContextProperties } from '../service-azure/AzureDiscoveryProvider'; +import { SelectSubscriptionStep } from '../service-azure/discovery-wizard/SelectSubscriptionStep'; +import { AzureMongoRUServiceRootItem } from './discovery-tree/AzureMongoRUServiceRootItem'; +import { AzureMongoRUExecuteStep } from './discovery-wizard/AzureMongoRUExecuteStep'; +import { SelectRUClusterStep } from './discovery-wizard/SelectRUClusterStep'; + +export class AzureMongoRUDiscoveryProvider extends Disposable implements DiscoveryProvider { + id = 'azure-mongo-ru-discovery'; + label = l10n.t('Azure Cosmos DB for MongoDB (RU)'); + description = l10n.t('Azure Service Discovery for MongoDB RU'); + iconPath = new ThemeIcon('azure'); + + azureSubscriptionProvider: AzureSubscriptionProviderWithFilters; + + constructor() { + super(() => { + this.azureSubscriptionProvider.dispose(); + }); + + this.azureSubscriptionProvider = new AzureSubscriptionProviderWithFilters(); + } + + getDiscoveryTreeRootItem(parentId: string): TreeElement { + return new AzureMongoRUServiceRootItem(this.azureSubscriptionProvider, parentId); + } + + getDiscoveryWizard(context: NewConnectionWizardContext): IWizardOptions { + context.properties[AzureContextProperties.AzureSubscriptionProvider] = this.azureSubscriptionProvider; + + return { + title: l10n.t('Azure Service Discovery'), + promptSteps: [new SelectSubscriptionStep(), new SelectRUClusterStep()], + executeSteps: [new AzureMongoRUExecuteStep()], + showLoadingPrompt: true, + }; + } + + getLearnMoreUrl(): string | undefined { + return 'https://aka.ms/vscode-documentdb-discovery-providers-azure-ru'; + } + + async configureTreeItemFilter(context: IActionContext, node: TreeElement): Promise { + if (node instanceof AzureMongoRUServiceRootItem) { + await configureAzureSubscriptionFilter(context, this.azureSubscriptionProvider); + ext.discoveryBranchDataProvider.refresh(node); + } + } +} \ No newline at end of file diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts new file mode 100644 index 000000000..2579b0baa --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts @@ -0,0 +1,93 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type VSCodeAzureSubscriptionProvider } from '@microsoft/vscode-azext-azureauth'; +import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; +import { ext } from '../../../extensionVariables'; +import { createGenericElementWithContext } from '../../../tree/api/createGenericElementWithContext'; +import { type ExtTreeElementBase, type TreeElement } from '../../../tree/TreeElement'; +import { + isTreeElementWithContextValue, + type TreeElementWithContextValue, +} from '../../../tree/TreeElementWithContextValue'; +import { type TreeElementWithRetryChildren } from '../../../tree/TreeElementWithRetryChildren'; +import { AzureMongoRUSubscriptionItem } from './AzureMongoRUSubscriptionItem'; + +export class AzureMongoRUServiceRootItem implements TreeElement, TreeElementWithContextValue, TreeElementWithRetryChildren { + public readonly id: string; + public contextValue: string = + 'enableRefreshCommand;enableFilterCommand;enableLearnMoreCommand;azureMongoRUService'; + + constructor( + private readonly azureSubscriptionProvider: VSCodeAzureSubscriptionProvider, + public readonly parentId: string, + ) { + this.id = `${parentId}/azure-mongo-ru-discovery`; + } + + async getChildren(): Promise { + /** + * This is an important step to ensure that the user is signed in to Azure before listing subscriptions. + */ + if (!(await this.azureSubscriptionProvider.isSignedIn())) { + const signIn: vscode.MessageItem = { title: l10n.t('Sign In') }; + void vscode.window + .showInformationMessage(l10n.t('You are not signed in to Azure. Sign in and retry.'), signIn) + .then(async (input) => { + if (input === signIn) { + await this.azureSubscriptionProvider.signIn(); + ext.discoveryBranchDataProvider.refresh(); + } + }); + + return [ + createGenericElementWithContext({ + contextValue: 'error', // note: keep this in sync with the `hasRetryNode` function in this file + id: `${this.id}/retry`, + label: vscode.l10n.t('Click here to retry'), + iconPath: new vscode.ThemeIcon('refresh'), + commandId: 'vscode-documentdb.command.internal.retry', + commandArgs: [this], + }), + ]; + } + + const subscriptions = await this.azureSubscriptionProvider.getSubscriptions(true); + if (!subscriptions || subscriptions.length === 0) { + return []; + } + + return ( + subscriptions + // sort by name + .sort((a, b) => a.name.localeCompare(b.name)) + // map to AzureMongoRUSubscriptionItem + .map((sub) => { + return new AzureMongoRUSubscriptionItem(this.id, { + subscription: sub, + subscriptionName: sub.name, + subscriptionId: sub.subscriptionId, + }); + }) + ); + } + + public hasRetryNode(children: TreeElement[] | null | undefined): boolean { + return ( + children?.some((child) => isTreeElementWithContextValue(child) && child.contextValue === 'error') ?? false + ); + } + + public getTreeItem(): vscode.TreeItem { + return { + id: this.id, + contextValue: this.contextValue, + label: l10n.t('Azure Cosmos DB for MongoDB (RU)'), + iconPath: new vscode.ThemeIcon('azure'), + collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, + }; + } +} \ No newline at end of file diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts new file mode 100644 index 000000000..f76f39c03 --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts @@ -0,0 +1,79 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureutils'; +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; +import * as vscode from 'vscode'; +import { ext } from '../../../extensionVariables'; +import { type TreeElement } from '../../../tree/TreeElement'; +import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithContextValue'; +import { type ClusterModel } from '../../../tree/documentdb/ClusterModel'; +import { createCosmosDBManagementClient } from '../../../utils/azureClients'; +import { nonNullProp } from '../../../utils/nonNull'; +import { MongoRUResourceItem } from './documentdb/MongoRUResourceItem'; + +export interface AzureSubscriptionModel { + subscriptionName: string; + subscription: AzureSubscription; + subscriptionId: string; +} + +export class AzureMongoRUSubscriptionItem implements TreeElement, TreeElementWithContextValue { + public readonly id: string; + public contextValue: string = 'enableRefreshCommand;azureMongoRUSubscription'; + + constructor( + public readonly parentId: string, + public readonly subscription: AzureSubscriptionModel, + ) { + this.id = `${parentId}/${subscription.subscriptionId}`; + } + + async getChildren(): Promise { + return await callWithTelemetryAndErrorHandling( + 'azure-mongo-ru-discovery.getChildren', + async (context: IActionContext) => { + context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; + + const managementClient = await createCosmosDBManagementClient(context, this.subscription.subscription); + const allAccounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); + const accounts = allAccounts.filter((account) => account.kind === 'MongoDB'); + + return accounts + .sort((a, b) => (a.name || '').localeCompare(b.name || '')) + .map((account) => { + const resourceId = nonNullProp(account, 'id', 'account.id', 'AzureMongoRUSubscriptionItem.ts'); + + const clusterInfo: ClusterModel = { + ...account, + resourceGroup: getResourceGroupFromId(resourceId), + } as ClusterModel; + + return new MongoRUResourceItem(this.subscription.subscription, clusterInfo); + }); + }, + ); + } + + public getTreeItem(): vscode.TreeItem { + return { + id: this.id, + contextValue: this.contextValue, + label: this.subscription.subscriptionName, + tooltip: `Subscription ID: ${this.subscription.subscriptionId}`, + iconPath: vscode.Uri.joinPath( + ext.context.extensionUri, + 'resources', + 'from_node_modules', + '@microsoft', + 'vscode-azext-azureutils', + 'resources', + 'azureSubscription.svg', + ), + collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, + }; + } +} \ No newline at end of file diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts new file mode 100644 index 000000000..afd65b3e6 --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts @@ -0,0 +1,122 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; +import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; +import * as l10n from '@vscode/l10n'; +import * as vscode from 'vscode'; +import { ClustersClient } from '../../../../documentdb/ClustersClient'; +import { CredentialCache } from '../../../../documentdb/CredentialCache'; +import { Views } from '../../../../documentdb/Views'; +import { ext } from '../../../../extensionVariables'; +import { ClusterItemBase, type ClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; +import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; +import { extractCredentialsFromRUAccount, getRUClusterInformationFromAzure } from '../../utils/ruClusterHelpers'; + +export class MongoRUResourceItem extends ClusterItemBase { + iconPath = vscode.Uri.joinPath( + ext.context.extensionUri, + 'resources', + 'from_node_modules', + '@microsoft', + 'vscode-azext-azureutils', + 'resources', + 'azureIcons', + 'MongoClusters.svg', + ); + + constructor( + readonly subscription: AzureSubscription, + cluster: ClusterModel, + ) { + super(cluster); + this.contextValue = 'mongoRUResource'; + } + + public async getCredentials(): Promise { + return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { + context.telemetry.properties.view = Views.DiscoveryView; + context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; + + // Retrieve and validate cluster information (throws if invalid) + const accountInformation = await getRUClusterInformationFromAzure( + context, + this.subscription, + this.cluster.resourceGroup!, + this.cluster.name, + ); + + return extractCredentialsFromRUAccount(context, accountInformation); + }); + } + + /** + * Authenticates and connects to the MongoDB cluster. + * @returns An instance of ClustersClient if successful; otherwise, null. + */ + protected async authenticateAndConnect(): Promise { + const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { + context.telemetry.properties.view = Views.DiscoveryView; + context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; + + ext.outputChannel.appendLine( + l10n.t('Attempting to authenticate with "{cluster}"…', { + cluster: this.cluster.name, + }), + ); + + try { + // Get credentials for this cluster + const credentials = await this.getCredentials(); + if (!credentials) { + throw new Error(l10n.t('Unable to retrieve credentials for cluster "{cluster}".', { + cluster: this.cluster.name, + })); + } + + // Cache the credentials for this cluster + CredentialCache.setAuthCredentials( + this.id, + credentials.selectedAuthMethod ?? credentials.availableAuthMethods[0], + credentials.connectionString, + credentials.connectionUser, + credentials.connectionPassword, + ); + + // Connect using the cached credentials + const clustersClient = await ClustersClient.getClient(this.id); + + ext.outputChannel.appendLine( + l10n.t('Connected to the cluster "{cluster}".', { + cluster: this.cluster.name, + }), + ); + + return clustersClient; + } catch (error) { + ext.outputChannel.appendLine(l10n.t('Error: {error}', { error: (error as Error).message })); + + void vscode.window.showErrorMessage( + l10n.t('Failed to connect to "{cluster}"', { cluster: this.cluster.name }), + { + modal: true, + detail: + l10n.t('Revisit connection details and try again.') + + '\n\n' + + l10n.t('Error: {error}', { error: (error as Error).message }), + }, + ); + + // Clean up failed connection + await ClustersClient.deleteClient(this.id); + CredentialCache.deleteCredentials(this.id); + + return null; + } + }); + + return result ?? null; + } +} \ No newline at end of file diff --git a/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts new file mode 100644 index 000000000..e865512d5 --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts @@ -0,0 +1,59 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { getResourceGroupFromId } from '@microsoft/vscode-azext-azureutils'; +import { AzureWizardExecuteStep } from '@microsoft/vscode-azext-utils'; +import { type NewConnectionWizardContext } from '../../../commands/newConnection/NewConnectionWizardContext'; + +import { type GenericResource } from '@azure/arm-resources'; +import { type AzureSubscription } from '@microsoft/vscode-azext-azureauth'; +import { AzureContextProperties } from '../../service-azure/AzureDiscoveryProvider'; +import { extractCredentialsFromRUAccount, getRUClusterInformationFromAzure } from '../utils/ruClusterHelpers'; + +export class AzureMongoRUExecuteStep extends AzureWizardExecuteStep { + public priority: number = -1; + + public async execute(context: NewConnectionWizardContext): Promise { + if (context.properties[AzureContextProperties.SelectedSubscription] === undefined) { + throw new Error('SelectedSubscription is not set.'); + } + if (context.properties[AzureContextProperties.SelectedCluster] === undefined) { + throw new Error('SelectedCluster is not set.'); + } + + context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; + + const subscription = context.properties[ + AzureContextProperties.SelectedSubscription + ] as unknown as AzureSubscription; + + const cluster = context.properties[AzureContextProperties.SelectedCluster] as unknown as GenericResource; + + const resourceGroup = getResourceGroupFromId(cluster.id!); + + const accountInformation = await getRUClusterInformationFromAzure( + context, + subscription, + resourceGroup, + cluster.name!, + ); + + const credentials = await extractCredentialsFromRUAccount(context, accountInformation); + + context.connectionString = credentials.connectionString; + context.username = credentials.connectionUser; + context.password = credentials.connectionPassword; + context.availableAuthenticationMethods = credentials.availableAuthMethods; + + // clean-up + context.properties[AzureContextProperties.SelectedSubscription] = undefined; + context.properties[AzureContextProperties.SelectedCluster] = undefined; + context.properties[AzureContextProperties.AzureSubscriptionProvider] = undefined; + } + + public shouldExecute(): boolean { + return true; + } +} \ No newline at end of file diff --git a/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts b/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts new file mode 100644 index 000000000..79ad757dd --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { uiUtils } from '@microsoft/vscode-azext-azureutils'; +import { AzureWizardPromptStep } from '@microsoft/vscode-azext-utils'; +import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; +import * as l10n from '@vscode/l10n'; +import { Uri, type QuickPickItem } from 'vscode'; +import { type NewConnectionWizardContext } from '../../../commands/newConnection/NewConnectionWizardContext'; +import { ext } from '../../../extensionVariables'; +import { createCosmosDBManagementClient } from '../../../utils/azureClients'; +import { AzureContextProperties } from '../../service-azure/AzureDiscoveryProvider'; + +export class SelectRUClusterStep extends AzureWizardPromptStep { + iconPath = Uri.joinPath( + ext.context.extensionUri, + 'resources', + 'from_node_modules', + '@microsoft', + 'vscode-azext-azureutils', + 'resources', + 'azureIcons', + 'MongoClusters.svg', + ); + + public async prompt(context: NewConnectionWizardContext): Promise { + if ( + context.properties[AzureContextProperties.SelectedSubscription] === undefined + ) { + throw new Error('SelectedSubscription is not set.'); + } + + const managementClient = await createCosmosDBManagementClient( + context, + context.properties[AzureContextProperties.SelectedSubscription] as unknown as AzureSubscription, + ); + + const allAccounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); + const accounts = allAccounts.filter((account) => account.kind === 'MongoDB'); + + const promptItems: (QuickPickItem & { id: string })[] = accounts + .map((account) => ({ + id: account.id!, + label: account.name!, + description: account.id, + iconPath: this.iconPath, + + alwaysShow: true, + })) + .sort((a, b) => a.label.localeCompare(b.label)); + + const selectedItem = await context.ui.showQuickPick([...promptItems], { + stepName: 'selectRUCluster', + placeHolder: l10n.t('Choose a RU cluster…'), + loadingPlaceHolder: l10n.t('Loading RU clusters…'), + enableGrouping: true, + matchOnDescription: true, + suppressPersistence: true, + }); + + context.properties[AzureContextProperties.SelectedCluster] = accounts.find( + (account) => account.id === selectedItem.id, + ); + } + + public shouldPrompt(): boolean { + return true; + } +} \ No newline at end of file diff --git a/src/plugins/service-azure-mongo-ru/utils/ruClusterHelpers.ts b/src/plugins/service-azure-mongo-ru/utils/ruClusterHelpers.ts new file mode 100644 index 000000000..11f968e03 --- /dev/null +++ b/src/plugins/service-azure-mongo-ru/utils/ruClusterHelpers.ts @@ -0,0 +1,124 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { type IActionContext } from '@microsoft/vscode-azext-utils'; +import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; +import * as l10n from '@vscode/l10n'; +import { AuthMethodId } from '../../../documentdb/auth/AuthMethod'; +import { maskSensitiveValuesInTelemetry } from '../../../documentdb/utils/connectionStringHelpers'; +import { DocumentDBConnectionString } from '../../../documentdb/utils/DocumentDBConnectionString'; +import { type ClusterCredentials } from '../../../tree/documentdb/ClusterItemBase'; +import { createCosmosDBManagementClient } from '../../../utils/azureClients'; + +/** + * Retrieves cluster information from Azure for RU accounts. + */ +export async function getRUClusterInformationFromAzure( + context: IActionContext, + subscription: AzureSubscription, + resourceGroup: string, + accountName: string, +): Promise { + // subscription comes from different azure packages in callers; cast here intentionally + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any + const managementClient = await createCosmosDBManagementClient(context, subscription as any); + + const account = await managementClient.databaseAccounts.get(resourceGroup, accountName); + + // Validate that this is a MongoDB RU account + if ((account as { kind?: string }).kind !== 'MongoDB') { + context.telemetry.properties.error = 'invalid-account-kind'; + throw new Error( + l10n.t('Account "{account}" is not a MongoDB account.', { + account: accountName, + }), + ); + } + + return account; +} + +/** + * Extracts credentials from RU account information. + */ +export async function extractCredentialsFromRUAccount( + context: IActionContext, + account: unknown, +): Promise { + // subscription comes from different azure packages in callers; cast here intentionally + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any + const managementClient = await createCosmosDBManagementClient(context, account as any); + + const resourceGroup = (account as { id?: string }).id?.split('/')[4]; + const accountName = (account as { name?: string }).name; + + if (!resourceGroup || !accountName) { + throw new Error(l10n.t('Account information is incomplete.')); + } + + const connectionStringsList = await managementClient.databaseAccounts.listConnectionStrings( + resourceGroup, + accountName, + ); + + /** + * databaseAccounts.listConnectionStrings returns an array of (typically 4) connection string objects: + * + * interface DatabaseAccountConnectionString { + * readonly connectionString?: string; + * readonly description?: string; + * readonly keyKind?: Kind; + * readonly type?: Type; + * } + * + * Today we're interested in the one where "keyKind" is "Primary", but this might change in the future. + * Other known values: + * - Primary + * - Secondary + * - PrimaryReadonly + * - SecondaryReadonly + */ + + // More efficient approach + const primaryConnectionString = connectionStringsList?.connectionStrings?.find( + (cs) => cs.keyKind?.toLowerCase() === 'primary', + )?.connectionString; + + // Validate connection string's presence + if (!primaryConnectionString) { + context.telemetry.properties.error = 'missing-connection-string'; + throw new Error( + l10n.t('Authentication data (primary connection string) is missing for "{cluster}".', { + cluster: accountName, + }), + ); + } + + context.valuesToMask.push(primaryConnectionString); + + const parsedCS = new DocumentDBConnectionString(primaryConnectionString); + maskSensitiveValuesInTelemetry(context, parsedCS); + + const username = parsedCS.username; + const password = parsedCS.password; + // do not keep secrets in the connection string + parsedCS.username = ''; + parsedCS.password = ''; + + // the connection string received sometimes contains an 'appName' entry + // with a value that's not escaped, let's just remove it as we don't use + // it here anyway. + parsedCS.searchParams.delete('appName'); + + const clusterCredentials: ClusterCredentials = { + connectionString: parsedCS.toString(), + connectionUser: username, + connectionPassword: password, + availableAuthMethods: [AuthMethodId.NativeAuth], + selectedAuthMethod: AuthMethodId.NativeAuth, + }; + + return clusterCredentials; +} \ No newline at end of file From 1ab632fadbcf5057a5f03a816f3380f9a00e79dc Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 12:12:37 +0200 Subject: [PATCH 60/81] feat: refreshed DocumentDB branding to match the official logo --- README.md | 1 + resources/documentdb/documentdb_black 1.png | Bin 0 -> 25229 bytes resources/documentdb/documentdb_color 1.png | Bin 0 -> 26174 bytes .../documentdb_color_whitetext 3.png | Bin 0 -> 25353 bytes resources/documentdb/documentdb_icon 1.png | Bin 0 -> 27267 bytes resources/documentdb/documentdb_white 1.png | Bin 0 -> 24032 bytes .../icons/vscode-documentdb-icon-blue.svg | 1 - .../vscode-documentdb-icon-dark-themes.svg | 17 +++++++++++++++++ .../vscode-documentdb-icon-light-themes.svg | 17 +++++++++++++++++ resources/icons/vscode-documentdb-icon.svg | 1 - resources/readme/documentdb-logo.png | Bin 0 -> 26174 bytes .../vscode-documentdb-marketplace-logo.png | Bin 65423 -> 15787 bytes resources/vscode-documentdb-sidebar-icon.svg | 12 +++++++++++- .../LocalEmulators/LocalEmulatorsItem.ts | 4 ++-- 14 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 resources/documentdb/documentdb_black 1.png create mode 100644 resources/documentdb/documentdb_color 1.png create mode 100644 resources/documentdb/documentdb_color_whitetext 3.png create mode 100644 resources/documentdb/documentdb_icon 1.png create mode 100644 resources/documentdb/documentdb_white 1.png delete mode 100644 resources/icons/vscode-documentdb-icon-blue.svg create mode 100644 resources/icons/vscode-documentdb-icon-dark-themes.svg create mode 100644 resources/icons/vscode-documentdb-icon-light-themes.svg delete mode 100644 resources/icons/vscode-documentdb-icon.svg create mode 100644 resources/readme/documentdb-logo.png diff --git a/README.md b/README.md index 22f2f49ff..80366fc35 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ [![Version](https://img.shields.io/visual-studio-marketplace/v/ms-azuretools.vscode-documentdb.svg)](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-documentdb) +DocumentDB Logo **A powerful, open-source DocumentDB and MongoDB GUI for everyone.** diff --git a/resources/documentdb/documentdb_black 1.png b/resources/documentdb/documentdb_black 1.png new file mode 100644 index 0000000000000000000000000000000000000000..d8d99960978c4c1fe5a187d9f7704474b5b49253 GIT binary patch literal 25229 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

IAB(isOWs~;V0o!nXuHB1^N;E^1ZQx*< z!-O$+c8+n%Gt6i54G7hdEw_S*K-0fQB6t(DmCqBOhg+@})J!RcXE^LW`*YJfIkHJ}i@z0-B^4}l#nM150)hmLe z)dq*nsLV&FPb)Sdu6d-9F*?tgO-N;mzWWx+$KDGT%WX?U?#-=wZw7#Fym1j*Xv%#; z*zcKVK0gn!5OUB(Kvc|Cl4$B z@iX}QPt)2=erOGV zq$x*}9OL)`R&u{|LTH@Lccsj=S}0R^m>)9wWH_W3WkJ3q=}lDW_r+P7PmsxJt>b7( z930t**}=y_qe%0Sd@LEgdsD#IBm32HCX0_8WQn}-C=C({X|}``o|LWP11W_c0E+pY zlq~jX#%b;`7jUs)FtJ6ox`MMmQCT$*0WqjO1;G#iGz^uSiZ+#?vMcvAbFXxO^R`F+ z9Dw`jY$hx#@qFeBj**_vzbc)~v6vwsF8yue@%i1tn3#9SM2RH*LImF}2fZ#=;bm&M4QtPL z^#;Izzke5iMO-u#cW6^oYlHlFzy!G}EX&dDd*!^K?tKs66R1xoX$An=hE&S+YltJ2 z03_3^XRibVk|pu$dE9Ak4DT5-=>tJL>CZq~(kb?hor>OjbB0fVnt`gb%uB;Lv60>H z?+TR3#A&^VpDslG+w|R&%>E>C4&3)1{ii9eZRZbYblo+QY@q_HpIoDgW(r&mka_RDYzCrBDoEWfpDKb?pVsn6|P zbHCd(T{WUtZ9?zM@%CFjTnviw^-9BJY~8mCyPm3ZumEe-kC;2UMjg0N$~vig#0$;6 zou_(y2LJ@Wfk54YgT$MRkYTAx?MADh6W?A#X8J?Yb}7U{g# z{j;tn+%Qa{p47q*R`- zw4L=$*nsD`w@Izv3mwvxVc(1E3d_2bR48NOUc_jjyi)x5mELBP;X|)IrI35zH^{#P z64?Oyay>(JeYnT@RlXJ~6?G>ueUIyG_d>r%HfZNvi0cJZ(e7i`j&zTMJ6N4gyGOn? zOYh%ad6~{(dzextO`RKelyb4@l&}-tsp@PSNxv-f^}8wBC_ctSi^(zCo$6E^%@CIfz|5m zd%p8ITBHm;)2kYGV2f3P>NNU8<%qJyJk%6#Z?u7$QHw5kd#xdE4*XvDVtm+cs6&fa zc=5)LSLs#6ByX>yk&02%(bis{(!puVBg34Tpq5lFCa7zAQZx+_K7d)1Y@Z*soH0_a zexD~pQ7`S}`c|2SYMfAMvH2^b{F-VX~nl~fDaHgwQd~SbEZwrM_(pdW$g#9 z_E%r^G#LPB5vRF)iHkg%4bON04Q|YD_zZ0Fj z!BaC5J7f0Ogmyk0UDe&#=A`XL!g3{`drIV)Sktuk%^mA{W1=M$#lSK5~v9VO<3O=JQNgsMB zBz0X=lg*3M`pAPelewbFI(=sRJ$RnK(x`;Jr~&RsGujM8D-Ts$Lm?eZMR}7V ze`vxG^)b_&WS=+=`sV@GHGYoq2h87ApIqm1_FWDG9GTm!{OHki9dJi3x>2Kge@H#R z?rTJfFX!S+` z7mkBAch>Nt$NsOVCy!_P|9@DHD5Q@oY%!$dOvp7khxnwALT++XNRF5}N4T6?4ro_I=Ov`~9;$9`E<_^?W{G&)4&M?e%&-ceUx%n_KykK#P>d zPgN=PPfYgLVS3eiKxVXP-;nqd^|}7vr<0Ehk|%~b#WyraJm3d7?{(K z?#q>GG~NT9DvcgR^?KJw(>>O|eB%A_N>s7B+^j_vBQJ{$GB*4joBq3V%EXE&&Q+~` zZ{)Iet}%B)Z1rp2Z)=0OwtYx`l=b@NSeF3gP&k<5hsk0RXIsr5+i2qetbo@3{gwOZG!Rfmiklr5OZ!PL1rClhvF)3N#%!m5%&zQI&50^H0aav)q>IM^Xj6j$kdE7IG85 znPR^UXFU~`*cn&}(3THd}A?uG*&u{0BXRT z>iMj+|6g8X7($;^D|I*Ru-U^0v3A4MWy7w63@d9P&F*~%PtVaS(Ba&Mwfz>VEeeOf zmH_2ogVU6M&f4dVU>|*EcjHGAkQt|hW=OfBLFp|?0>E{4>3L19@5PffWa$XA&k8yu zlqv=& zg775hks24PtNZt9Ab5CvTzs{&u8-Wf4BC`WQlTyXar%DgBJ$Y5Q*%FSgfV&Mo0<{w zpB>Pcmvxfw`0LGnzmoTTsRy6-CJr93%4~arA}BkSJID+UW!B%x@#vsFu(x{Idg!`a zfcI&kTe4)D(JN4E7b&wgiaYd)eVY5q_Y#pe+JpQ3)ekIaSh;8cg;_Dv2WF0gbjph( zm>q`xSX&p11)^SW_}mpM7{;ehhTH-6iNjkvQ;8m5R+_0wEx_6T<4S81SsLf4vgEIw z{Vmk7e?W>;Ca#0wDq`k4Hs_b};8vXT##DTtKtYB!eL{~?od>;_odQH}ZJ2%Pn-9O&ep56-cXLR|qgcvugcH;E|2(e~UJoJ4l&M{-5%IlED0?ETb7SRMfaUa2FT{+_HIe z4G5^VBuGfK^4wWf-R=+rPQLphK_cS4GgY}vHuNNlP}71jZm#LyPaywQY@R-2E|>sK z)mW%AxrYQb0Ojtwp>#;8*(YhLhR8dcv)mVy+X<)A$|P^rfs>U}G;A5(iQi9*y#=bJ zOD8{dmrYhoC~;aFJYBr`g&XdHJa9&;Eij|%?vPWlq%UeIihBt<7xt(1fhY~A+L~HV zbk-0r*nUL6HGUkdeUm2721-`|_UKF4#0+9_sSS_-CmH@)esu!N6ZWK@Ck9KhICJ9p zgRyLZ_eR|A(sL1?;(T)TjtlqRjj5zBtJ(4i0lVCO?9n9NyKHc=7z8eJGvZH6<_eH7 zbWu4K0F^&nwF(*Ea#;Ds&)gZ9O2kzs&wn4Btyp%A`T8ODf=#_VP&RM=EQ5K&|81V$Hh_@dh29)C zu~T2i)%H3AMTCdO@{*ujK<&s?_Je$PnRj4;eRgB%gGHm`Q}je{z4F;=k`&vAPHoSJ_7 zvyu1di{DGDlcwyRGCL#uOj@vCIB&bH+nl`u^|RBf@3hAE&0H|RxgL|^vK%{Be2!mp zkuuuJsEeo@3W9Non~pD0nv_#4x5<@ksGu9>vUEDVitF)O1w4s&p^vn zB7%5N136{ci2cn;+1aeceP5^X=?v5L8@q?5xG8Dmdc)^6H*m8^t@X0s*IGlcz-H#W zLRoObhJFfADWWT+zw-r4?UXSUHE3P&;b2q#8mHt!zRq2WZXzHa---f|BH1^O+{k{ZSk6R-w%e8l(ne?ZAjBo z>kc^iHC5`2jppcl4P$MisEW&VLG4ju75p-eD+4x{nw_h?65w|^T`~fevjactv;|!l)f^bgP z{*&nNxxjPn9-i8{vHZil(93D3kg!h1x^D8oH?6`yKOC-))W-2Em0V+0#a?6<9b z3ir~pOPm?+s_)UtWM6AN(T{Gn5z#yNs>zLN~|o>z`nb z)~W%znZR(6&rUu?mV;X5^$}z-sEwF+a>c;D%u&;+2bsve2X>9KU*^L+zNo`Zr3`i) z16l(0c59~Z&y0XDcc2$OtDtmOWJ$EHa|D6>;&d@7;DV4rtwi7LPn-hO-9}8cqY5aP zbjNV|F_i9gtp4qlAx-ZTD>H+pDP7k@ygktD$_pfDz+`A5M29QG7%cWikSild$~1Gd ztTov43$CsY;?%ybA4iyEzq8IPfdko$o?xQ1Kc|S&oj%hU6z3q{aCtHy%Ie6&sR~@h zCgoM{ui?Q*f5H1kb(r9yJum<~4AXRdJS;_Psq|!~XMK@;)PS!&zBUgejbvhO3wAjS zKP2cC=q&{=2_w0Vm-5QiZOhKBNi+ngJb8Sq3>YxVxH0I;Usrr(Q(fD|Uy#k1&K!v% zZBxq_z+$`{hej1sO)@kQ#IkG?lZ<^^)OV|z778Dflk;Jnb(yg3-=nRUg83W#ZZb-u zeDhwt@>`}%>xLytrtFrkS7Sw(Qg9DFjWerj#{`{b-+$^Ti@BYh#cw*Zxgw5bI!(yH z+uTcwzoJnH0haKtxJUw=gC|5k@-z8~Y)AwHXxOx1tYvVSabtrC8iEcQve+Hc@dcV| z3ZRDehN~Qu+8r*-8m?9Jcz5`4GE3yi;cuDi4Qkp0U%V&23$8G^TeUBN|H5G|od61y zVR1?=f&n7uZj)mXzen+662BLi)~8U^)wl{;+nW)!_!M(#1Y-mBK)z(l%5YM&K+_@C zgicvAIUCRY+VH?kO!0|T*d#@^O1A=r=wqs8& z;~35Z@qrOoas^r=>$6#5c;g+8u(jvJ=q~_~y?Lw@^nk>y+~hj!D2Bft6Qi^KY@8BG z(iSo}XtXOQx7q@(46hYIG9Iv6V&X8~6f8Ei%u}@*L7jrKD0)|J9I`JoZI&RC@4vS| z#_1b)H*>kULuiPx(dGXGx_Ve0&M5=*%aiLY^^S*;mPfD(j2ZhwseW4;&Ph&nQXNVx zbiP;rV?q}5sC7C(Io=rNJyS;Le|409BVwcQ(-VWMk;2QcAcZ~mAOW0P#Kg$w=_AlM zi%?Re)?(2XjA0(C|7xA8&sw0g_s4ute5P7LvQR6~%?8DGC?zc~_{K=x9=!_e3RF;!4xX3bcxBpBbaLgBzjAbH+ z)@}WyivHh%OV6p-@^H#?k47CTS3mss0e>5Nnct0fS9ee*N4A;beJw!@Tw{x}U^uzL zHUzpoL$t6MC!*s}C0FP%z^B3(e!6MNdvdvYh$+EB9<_iPVv{2UkBq8tzt|BwdS3NB zcA#f%y$YFM9zI2t_?ArMh=jB3!77lm;{nwwW6O~;%8Az5UzSZn-0m)H|KQ%NFW+Dl zs*(7!vgALDhMq`o1j|rA7kYsZ-%K+c1GHB??`4X<=SWSFO3XYNC(E*d+nt;lrOseM zcX z0;Sp-X>bBr6C&2V1aBS-Zybu!`_Q86GTFTP*IixADq&O80@&`WA*xEO6!95)^@Gv! z*|sk+^sm>rS*UeAgxO#lu{=-4tr!0tsv!>YNcq%my46@jtkJIp@n^096P#0~I8x3{ zQPW%$t`w8;ru@pRNeIccfG^5Wh#Yy1juhv{Seci%M>id$XEwx5dOeCX1wo@ug1U(H*4$IM&X)9qjTp9&6Z6hpA){>$B(%`5yaSI9(^`04v! zEp8OmEJF(dqkpZ%21zC_JV)pZDi-2W_dKumzKkceik+wGC6%@fqfF-wPsKZbhi%Lm zqjy8uFGJ8s-;8Zn-*(ld?NxNs4!$gVD~2>MX(15b`KFKA-WZgY4SJ1@*#22IR;qKE z{uIVgEOV0I7&&CF;_$Q}Kjg+EJTru$M%IleY>MB}2;_;f3QL7@Vj`OFY`};cJ6zTu0GpMIzY{zi`GE--Gr2gIq8lU z#ON2>``j`u6nqdD=h)|?8q1y_BNwk=2ZC<2{)xj`x8`q$6bB27Fv+M$hwX=kEy+o9 zOPE0P^kGrh1yB6xg-y!QQ2Nz4gAdqoNbq$gVB152A5TStm^9Gbasp(bP`;bJ^qAYE3%to-Vix_&B5-k zSPo`FHH-&pDW6cS#Zt1x!)#vq#sb2ukO3-@K@n29-~VE{i8iI_L-1fsOt9XaOaa5Z zN?AM_SXZJalO{?b-vso$W=z(>1T1z3O6bK*ne}anF<-5zq%s5UW#H*;RtWwTaGDwP zY5^p=EZ!nh3~Hs?9u7J#0E+^nz!vVUsJLRj2RCdhcJiA=6LQ6ORbn7orJ8?l#B(4z z>fL@ktI5}DwRD;!Hy449ncK`9U06H7x$XHfta))soCf3taz^y^UPdH?c{8Z(kM|L{ zqoCo$>PPefy@nV)62061P(}95Hx4g8(^mczJws7F>XZ&k9L*?DC|H`iIc=RP$s+4w z4$=m4lQkJ+j2X+_UaIEm$Q%&@muN1nQ)w`Ci`m7SW5^OExc*;&LvU+2I3Ay_i!6c} zXWRB-idJzgd#yl*gy7c3;P{0-3BMZVAR7a%yvA9X1IiN^YYvVFZtXH9DNzUt^^opx z&$d-^M7sxCC;)zjR*9$Xc`U7cY^7|1(YntD7`YnY~oB$o6?nt<;A{IY7dp6S@78`fu%D{W53hI?HYNbwlES zm{@cjF7rwj87SUk7|W80mIj*_*f?V*$M)rGJtUv7h+##FM)fPL9lHa%9@1v$Rr>M$P`@@mrKf1vDPlc6_dhH*MKQKO^5!tZSj z5)%|8Usl#d=~K9u64o=VW@>c)VZ9WFgT%xHOD|Y#WaL8N*el>Dce*HF6={Sm`E3qs z;%V_9wX>FJz$8*(jF_J!!tsP=H6-6y>E(lz--etuxAwqpfz)g*)1k5Sbz1zNU|~Tr zoa(u#L<)#lYE&clCT(9!OX-#G_d2Nf}ETzIVYE^J8~KuIgmVPz30RW%MT_G#c`Eqh5HulE^i6)4xi zGierz%7?O)P~{?fhcQ7TVWrz;8#5&}3$c<;C_0AZbCED)8L=AyoWYZS8LUtiL-;|X zNA^CG=}4KvPdH;n^<0~}@34H$9iS_LdM5Yl==s!L#VLfv>2yA8)$HQ#2at`yHgG^V z=!<>G5{4BZGee;}P+X2J5?Nni3(;4~qPu>(I;;PJyI%_#xH)dy6{PUfqnlDU|KYEk zU6>lgq5Ku{z~yPIRb*FqTv^6jZ%V6S2a$u5}JOkk9)YSoIm;OfL^w0st+7$Z=A zeTs30s`xp&=*p4z*l3$a6aC-AlB(ay7XSlxl@h=tQdfv-Iw%kx0hr4w}h4pBX!3A%_~%LSFlq6lf+uLnyf z@o?~n1?%ArX%r!Ydnp~!j*jPEI>1u0;e4PWi?lf=1rI#Lu(nB{H5iI8{9dL*aT4$L zL-6lIITYdhS(%Os;Nio+4_%Bw4yaou84m5}ckiY5?5#Nu^jd&71^VV5B=NIz3K;}q zKf?TvfLq3U+s(*-*t`tAr3{4y4LH@&d&;or&))H#a4JFZIFip>d`|%;px}&s1rA^b zFS;l}F=21P-*H2EHL|#0&#tTHA;5crNIV1=4x9uS8&;wI)oLzzl;U?|zz@9o#QbEr znp>c={*@6m#AO)P5q*Vg5-%ht{Fj`sMP<#ZsA#5b*A)!zEs({(%xV@fD7j=2g(a(X z7PcFWOzS&;Z1mIHb*^r$1kjHoHN;d{+*Q4MC-ny%d+5XGD_4(``n_Gn`F}oi=S1%j z%>liS@UMhq(G{k&B9YkO=cTDcj{E|BwIcbAnpOK~?4BLUd+;bq*;zytl0CnjObIV0 zKO#nt&Qg6IQ!)0mITw66Cwlka0u-~wpt>){CAOtWff*Db{gqr;+@IX$M!g?Xy%!;n zUJRX*#D5b@h9G+PwC5`U<|bvt%YI44I?azftCmGA3(5wP6H0OCLS@}{h3W}K zEgp~Mb0`}P+|nhfS)xrcw_uux;4Mnctg6&DAJ(pMh#FKRIbE}?IVH;)~K$ut?zdY-f@IQP9S`YvL literal 0 HcmV?d00001 diff --git a/resources/documentdb/documentdb_color 1.png b/resources/documentdb/documentdb_color 1.png new file mode 100644 index 0000000000000000000000000000000000000000..5445c7d47a6dc62e00cb4a602a0c2beb0bb855ce GIT binary patch literal 26174 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 S>buQ4&7#g-HY`QjNB$2C0W3rS literal 0 HcmV?d00001 diff --git a/resources/documentdb/documentdb_icon 1.png b/resources/documentdb/documentdb_icon 1.png new file mode 100644 index 0000000000000000000000000000000000000000..0e012c04a2d21826b6b02635d71c91ab9d114a97 GIT binary patch literal 27267 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 z z1Ttp2f9oJ@9#YVDp$p5#ObpwErUV41%><^nw5e1QwyCvoB5w(Ek$|xuISSx%wiz4< zGZnxxoq1UBdZi5P>iO#@5Ar7k-l?@o#u3uhWBG%AD$#ntk*DV{z z={rV}vQ8CcdKH>-Bf3wFy2G`KWEdMj87~vXR;AX~vQ{zqHwYJ%kF$MCn1G)6z8~MT zY-okTlw#m~*g-nbg~Dh}-!@2agZHw4z<|;_P&)JEYFp23mX=MPt?n=`7$J4WKbF1i zt)0%P_YH*8YwmX8Oz!Vklyg^_*vr|jP$udN9}}wIAyhc@3{k)&YUmZdN~AWVytyDO zuEJ)Wld3$D58rOP{JEF?t&K!ai2Gqg?DBct0ef>BnK23>hI3tbdY&1#)N24~^7jKpZarE|QPN8(7 zgqx~IGU~gb7ypo@G!w-IsdUN!+;nH%7h26kY2OOG;?$tVy2jt}M(Hg^&7bMtrrNEy zv@3dPH3&~N;aVe9UgleK56hIO!bSrs74iXig4bCm)9cvzT$gT5aBp@FVw3C#)WZtk zJ=b#*-QYvjM$y(6|FogY?lMfQSFXV1bIFqHd3tWJDe_Yr^}C+9j>~%)E>zfr7tSWKxy*jVGLwjBB+ z58%S=Eqv_N&}AHuL+{*fE@AJKI@sWEkbrjf>D+)Pty5uz@s&obPJ>REnwCc@jr8de zU6dA)mErVt)Z6^ZuPeoR(3ltwQz1g`=e0Vr+IUBpno1|D*JZ^fY{Q4gh37Xfq^U;; zW19zViNRDDrUY(wR&TPrjtd8-)B98P^qt=3OSQv23Du=Cu|&~<={4Y#q5 zrA5yXN4yd*ZemY}seH4~gWa9-$H?U-Uq6_dY;3dfOa5zHeCl&?len_@5F~!tzSWO4 zuZbsUgcl662MXDf5%Gl{pNn~IgZ~^;F-!b7yECQjpgXCMWd3u15pNn(*M^;gA$|d- z-1~k@HFk7sql%$KCJ-pkjB@U;-1FNbVd=`(ieh6PX}*WSi*HZu-Z$lED4J=ISWlOM zToiIjps2I%>Ton+|1&E12;J|UK#7=Adru*stw-=%Og;np)-nB=?WhN|9*BiF@$}r~ zmoeC~)pdr_s>BDF`~Xq%8{P~~_7t+Od`&gT#kh_0+tVx^ODKHmOw8fnvYP?#cHzS=ui!LLMoJtH_ol0o+_P1iA z3dCPE^+(RIHxLvVHkD!WwZzG$z!dyX4fF;x5OylXN~jdllOV4QT;hN%&@2O2Ch3f7 z_)mTb2jt6$5M9)pIbzq8r3`S1If;%EU6h(R;{Pjh;F5F_%_nvRB^sgG3kqHK^XoLK zbmbI$z{cR%6Awi-q9(EC1%_7M`eOf6EI_#wlRqN^kxwh;e~Jyn9dat@@JP8Rd zyDIBV49KcAvU&t@+$G3egGnr-(u5$``3CqFdx6UgC4N*|_@0DPQ+5fkz}XW`r6uo) zEA4`SDCeFEnl7lIcWqBhDG3UyyFWN)sd);aR%$%Eij(?1ff6y*SOzX@q+`}m#o$Wa z$l*OvrClJc8iS8`NLpojH~|4`o*haVC3cOh?>WHi)@EXQOG-dALyEtTlc53O6zjNB zAbz&4pwDsCaN#4m;D%NO=Lz^W?xWyRdV;GNHM$scWjCtt(6A_>-%1?(ReA>76@7CX z81u`H560x}0Zyg;knM20-Xi^Jx$p-Xk`~*eh_?zA$*WH7k0xLeIe@5yhMO@vp7qxS zUS~%y4P)n^crBk`F5PC1zZSvAFtLF5gRPkv!&89vL5PKl@o;dj5CpzAlX)clVc)f0;;ohpY!*7cO42A$~<9JC+9QC-gQEGMj@_0@}HLSbmsK zSG%>?*e!EW8qebat~1(Z9fBqO$Kb*WN{?OY0&pGD`C>E#31#NKfWFB5-tuGc*2-|` zHaHk)B~oMi-kh;q+Y^_6EIEJhw6djQ_I^3mk&X%H2lp+i>X88Acp$cZeVOXmZr`D4 zxu~K5!2u&xXHRpTylDKntm`MiVj>3CDQn~)dg=X&y08J*sl(?opI_}TvJr19V#guP zypC>4cTGKVgNey>I<3Ar-A={z0glf#gt`1%I5P#13MTv@oTA+f0lVsEZbj` zc8b^ipBKFIvw0&%gYTup7S@T>56#_wohK^x{`ivCP`^X=a4%J<`I$;%(bex#4zF>o zGD@v%R!&vV?Ofvt@$lCzZ=R(F7?M8q@E*KtBX>Irlg}om#F!mL*`CQVpY{I55=G|S z)VC@%4(#!Z(-He1b@7tQC25(97p}Jy#4o*DIJCTQP9}mk03vK_nIwo$*X`VlK;nj} zgX040Wg1TId3xCY>~+tsS6Wx)8_@#O1IJ0P5r$W19tO`dxoP@Kr|sU5O5GR*)1su! zwsKAv$HM<3!?tt#dG{RkJjR1q_!MKp0C?l4o!D~6QfV*!z^)$`q(fkHpb68gQO+&D zCjQ3-I9?ORjcl7g(vgTUIApms=#uh}!S)a>`hi)M)A*IMS$cwo5a@csTI$aL$_bX> zVUo-yQ9`1-YC(!g(r?Esfw_?1kFc7qUqeP+x3~&BQGse9b1FijO_qyt4u}$2RX}5D z=gm2qG-HD|BmKFnRZjjjaKhShwj|xa*1}64OU;Q7UDA=z_&*AS|@e%1I!NiVG zo0t0v5;GK3Rz3{t6=jG`Uwaozxdo)sQ!@YRqa~0X$@w~sS0U@3@vzx~)gK*r-hL%& zNwhTGqUpJa6Qd0_9=ECs(tfByzANMFaSRaN$*P*%RZHlo6zUTj)t?2z z0sUd=mt!Y@Ragj6tvz5$1%wvIPyB*N>SR(Dn+C-$h95l0Bd{EUzH~vzqV&eTb5_!Q z84Y>7jsk8FnP8tz5tEgqnMW+~JqT9pDXTbmWs+P5`NxclM^lb^wwl| zjei9Y&HLkW6m-UTY(n&?$9hUtfs%UFZUHwSQ9}Owr&(#;1!7Aw?+>R$QRR>$mRT`@ zNsvdt_la#rpP9{`r^_RJZEOI*D~jz$pTW;1du?iS^6#HifFzK6a1f3x^i3SCUHGxC z2YCkZ*`QS7F5yTDGSwzza)k7fa?Yq*k*&t8#dLT&DF$X+uMUQ4ky@+*$lI<{5-uVQ z(<&HbcH*6rqNq#h{8>?oaUEm&U6>d<}K(_SPJ1zTh9~;58#t5|@r)Cd$pE==Wfm zA!Z=-kj$%8Fhl1@|JsYkUWfbM*4z85XMtU&FP4wumt}sC&3{?8S`9%uMJX=rNgtsV zNJ3T>lFh~%iB%g&9Q9dA@1puuLd_G#JgX2JYJ5eO&Ngq@S47`O4=`X0l~a=rlyr>ff% zf8R8ff8Vl^;Jo;p&yQ_Ueb#q)DETs;LhU!xNzH3a?H@;wB6?+XT6D5>=#ejkK_yZh zVhg;_NhL4Qrufvyq~-}lpk-NSaZ(}$3vxb<4y#Dsi0C%|WiGV+G#9r|jB$goQ__&N zT>ii6bmh!;uI!5yhw}R)hT75B+zSacbjPp!dNJ%D7@4u}^P72)t{fgJQ#qHk>>89V z^EK%NeH+L3n5W8Kj}z`S2D?wyTX*F9=byHj_{-5Q3eVGhs(@X!*294j*)n zNQ#gVPr^O_;`4pO$E)39TyFDZPCfi|_5-XQsw4UejfxpYw9APN5L!UrspVhpd}?oR6PW)#+_d-8=)>B({9Z;A zR{JN_dd8MMlB#iOmajPA*CM*B;}p&35;rIqbYe5G$(u$^Vj@>9VZGO2>#=W^!yOtGcWrwz8nioS8y3szHiALNu!2Ar zsq+$F>C071H=7$$F(&7HMVy;f<2ZVp%x>c3BWxY772a%@%H4}$n^#RrNFVio@3&MF zZ9ls_{PtU?;cB1+f#l>n<&Re!_BWGi;|9gSH32ept@bu)usG*;bMAr!i(pHxMKpx* ztfIYQn!pj!S8?A9Fgo15$T_g5j>^g&7rYRU**gk>-@XO2vEoD%Pa7R@iuflKgQ0F2iig zFZkqNZ?1MJ$1%s4rMvT6n_D*aK8rkacxNwiW?KWVDx&dUQSILL3fmhd9`TqtO?V@qvuYb;^>vjVJ$LCJ(lc;ML zNVm2d|Nb*waq05N?zU4|@586_a8k0*tb}~@wrqv40{m=E(BD$4Y1(>3kRWs+>(J#* z%3EH@F}shsJX#*k#ziOB1#NHLJ+w0Ap>sr@)xNIm&(vhva@Fos-gz~62E2}hY(cV7 zez@ zZqd;AF3<<=EE?S`NHqB>9$k5Gm>HQ$nE#&4T0B_k(g{fmXyjUBL4>*@J2B>?0#795 ziM+lzSawIlS}r*kes>~q<}QyxLv$*k{9&YMse$EAPD+HQOh^5CiE~D=JAd~*NfsU5 z1~Eq&v8CazDEY?25?3q=Z!NVI-15D!5AMGd7om~bAwejo3$T9_)n*zT3@%F&1G0HzD_85iFI4in<>UvFtJ1A6~ff z&YK5*uOqi`cgpy#5kyl^RK6fiN2RzzokTQ5Si`!~* zpCl^abrWB{LbH$Hhd*(U>h)#BnER771iXPEU?S!F@+bV@fNjGtHb02;^gR8G9vUgi z+uVXr`zHQ`OTtvHQPSgz?q^)HB7jLJQzs2`#&#J>Y!f?_*!h1&J$oS3+4m#z$mBJf z#)^g}kBZD}O~ha_DG|+9GL=X3=w+w~c_!LCnwXf75x&}`n3NH%L~IO0qP8&PQG^!B z`&oWxWcT;S{4wXA&pqefbM8Hl&%Nh!IA?o4=+Gaa@>TT~`YgWBM%I=ZrM}Y0Mz z7y7wP4|_DrD&CvcVjbOBQj}}gWzdZIuzL$p9~PekY_0KP1hz%FJ4}@KO0{ZwU8hT# zsXw+wl9?DeMh7mpCT{wOc<+0W;=d&D1m;~rS?2TG7%jgN1;3VtF zm^QIgse_O94vl#f$rf&`G}!^p%4Omxl0RqIFs>f^#NGScI(w7z<}Kk~0hL4H!%&z& z80)7_w~HbrMGMrU@#Pz8V?!KKr^GU;uGX-8oJUDVfT%iD0EdcZpRlK3N!hGF6eR5y6kEF+UUF7;yF5aGL)m_0hw>VR+g& z=OG3zDb3^uO~Qo;{t@ql_uC&bhq7@O8uDAHgx7xREg_TFFg$g@{T*I`WUGxs=5QEHCCO8fcUG#EqAMm-+ zQY$YQMbWEst6hG@Ei;XaU?o`gpE%_;eJp3!n2nQ63!&JpI?L-<8S$Sn1+>G!#=0Lf z#Zw^(QN`vgQJ9I-`}X{5qL z>C_rL>NsPs{nv2mNNM(i{Jxpawy?`P{(P12(rJe(U8h!P$6hnIo4t{!ARu##thxKc zF+ErPrM-i58R@eHDV`RwxxF8Ls>}%+dP{QL#kmm=I>tlW2mSPeD@`+!u;RVN_;~%= z@9#4r9@->tU6}i#^p5_;v=$>TxS&d}4q8LEYh31MgB}!G<6<qpa0UQpSzywL zdt~S*1o~0_x1Tgv`-E7uz3sAYNh3^Ep`UHIBsTWnfi>X(atI&>|3M@;7Xh;6KL{Qm zT!1VqKb)Oa1IS~5{69Z?fw~`i;|8UFsjmZBYlZ^kKYrE$4v);$izRHcDBaD|=$zY=m=m zU~ku3FVUaM#tU<49(-@`*BtGT-q}Q+=+(Izk8b8WbIJ|2Et;r71?v>(46VHo_iQ zu2)jmm-sUR%X_GB4qzu~{1kLBnKP`ytPX<%J@3+2-plq|;>OA&YDmMsE;iJszxwYvpWtyFUOcshE9DS{9t6$N6S`q)!>qY$ zZtKq;2#&sgCTj?vh4fhEtV+M5CgDO`MyyDt-hAGmzBwRhXF;Fhc;I`r^&T%R_087O zJ76tVwWc4pDb{b{YI)u24GAR%)a0OoL&HWl@m%YkAJ$$O?jO3~6YP5!%4Wbu1;u)X zIKv`G@#{Xj&Sq^|Z29}nkZ-`2o+u06a6bNMDSAlbACpXwIY&z%EjBc7b8l%GFKx4N zcsDqHeVpZAA96too!w~HDUog-u{H&ih&CkeU#rB(89F_3R@sDUuFUy<>JtTF`u-eD z|Ep@3Cz1*C$C@+t2oC!HRLUTJg?YmBIs}0oc8E)r{n#Vk?_U!o0$%gT2Jo1B0*?eE z5gB7Q9l~0;;bNn4fE$z&jo!ipHc}KnVhZWvHp5_h7DB?1!lwx z)L@Qb!L`j`N_A_GehlwyKO0K4$|K5LhCJ+$*ZAChc++_BLPl>#a=Yd^=k!)q!Oq6M zr#Sae+`AEl}k1KG0(DWDPQyn?m6@w<%^2frSX~G|Gd`S zG1uCDcv$L^+qm`TJnZHDV+GJLeF7(%g*6#KAdi6er*G~Z>&A)Baic60XJ63;>6>72)Yj&x8@7P+sAh+rQ|k>$*oas zkzcnB7DUDrpi~+99}_Dw9z5(XZ2P4tzoma|vUn)v+XJ{ImotXr{jHWewqYEDVN+n&PqXXwoij#cT1$w-~CD3U- zo=KsnEV82pn<3HLT%vr`g;UjKF$Jq+s4KIEcwJz3V3+CMmg-u#L!9>JbPEz4+bABo z7Wzn&-~fZ!BD%aO9tT%%6P~}-_K203slw__s?1YGa@`kG+by3vjeQ5z2qc`C()-dR zKhYSft^4xh#hHB2YIrrHYtC3BHmq-$3kstK%m3rEZ$lGm+Rn1tFy?O0N$ss_^jivo zIz4S>1p8cSe`?tow~t8ETULUYN6JNV{|j|I5^@tQxlb;QiWAJkd>+jmJEk*qUhPY-_1YbYbX?EHs+d$G=Zudx%5vcT zu_}XzuQot2*5#J;4dHpFzWWhh(++FvvZ#UTo4{Lj@44};rpl#JUXXtKC|3c$Z(D%p zvzL9@7^@>%vICJk3v#RLC+a;`vCAF(*#J1+Y|EbHUu2ah@p+p#CPn8Ew^L)26m7n!G~S@S-1tB_rx1gT=StBIS*F@C51 zEbNFuyV#Q{n85-CvbY~c`)o?Z;RS3V^%hm)-3`?6vSHcQH#VteRjh)e!v1+Od$QC0 zta8QpvQRY6am|XZCY~|=$KCt#fnH>+sjvg>BLk;b=_+so8f!JU(OHy}lUh zc4GCYMLsF=V5^(7zowM!eD?RiRhRg3Gpm~bN;;Xnj3lWA^# zCd2=7xp=?1r(64o;`X`Iw;Bvf>-*YE`x@jjGpbs{74TLy`>o?WVkf2DwoQCDxj(z$ z;jm-Nlpn7*uftfcn?Hrn*A?1Yb5_4VkNotQPee?(`r3c}gW7dNGs`SUvlPmYYK9P85E z%sZ%Hl%J_Zw@j*Pt%di#V+Jxw^9#4{c)s^{wH!SbaM!zqI#+7*gt+EwK}UF7QOHD3 zdmr~;W&~*4AgdskXuGzmRbBy~`xS{tm!HbN5WLXiY|&O}o}^`vl5}`(KD)7?^LoLk zD&s}B@%4(|6%4!O12o(@xLpw}w9r4f`r|21gL+y=F)A2^BzGxEnZGNqB=l#&?DwOR_uU_Z>i37vRcY z2T_9&ZPV^Wa^c$GB?KodzEscq#4322YoUxdZ(+_rMqnayT(PsEpy_Zg3$2~3Yw{C} zz}QpSd9)#?UFvll6T{9EA0vc;nq^8I5&)x}xX6Vrg3>0$~yofs7lE z7t{ROEi!*b4CF9}rH)SJP9YvUaVkf{9DU4TWxv&yL8M&G@Km;*m(k$P8j2Qo{-%nk z1D3|&L9=80w)ZQK7S9Bb^exaq==bET#qY4RUcsWy0~*#D+phR^K6^FxD8FQ;GQ*A# zu=m-1pXr&R^7Jl0{FXx|#~!v6o$6j$SY5aH`-hp7-r>2RFDJMNhhKd|C&6G3;(6w4 z0zUW>lrNWuE(}i%o<~J4w!D7s4u;(_k0?E?#*oI;%J%yv*i&RH4sDCST2iN1^>o!E zn+F0hCD>ozJ6c9OW6D%*oAynBIaFgJ*v^IX7jN}?&7n?|_I>U@{#9$oWVko$?#tmb zQs`SSCc-hkCBt`9w;#FDF0l6%)KVUR8e<;Y{C5pm*@fM=c*VW*PCMLRL6AOfT-zOk zN62~=yOgQXnzTsGm%*@PrT{hvw)Vq>9YPga6P)hJfztu(&HmNh3>l5IbOY(kfK<(Zg}YPho((($ z+1PU?yQsrb1Mn_Bb8YHiwRewD%jU$e2|j|q`0A{(HB_8M9Nz98nIsO`zhaXL<3KVX zuENQF!_;P4!X(+n;0B<0+BZxc!c+mky0w{B@CbOHO;*swmRC7Y{k2H}NB9|Rccv?V zEIesJfbjq@+#`^4cF-*8Pp>xfIe_5`-$Vu`G7OUM>vpp%O<=mLfDEY$jf}!Xo`5v+ z&~EmP^r8v~oxhjfBO=ORGG=se1cmQiacsbVT(N~6Jg9(2Yr}&9@L)24K~z{(y2-@| z~nQ$ubZ)~k?W~70+UIGL+p?z@F9DMY@ZkPXZ zjPISe(An2z21SiCPgS8ET3BUnE$LU1V1+)J{jS@XX#3_qY-)MY0=109Xnc5G6?)Ii z<-x((oHm;#C6X{RMnHo{b#X$~Fjx0RtGC(_Q-9uph0E)FBK z-OIsU%Ho51o8kbws&%gd-j>8&1Cj?TVj6+g#F2!jqnEm))7TrL3vQwq>{x@%dUc4M zO9(s!NjUHWfw_bbqrzY(EFm2IfuPc;Lw{?L!%ykwO8o?3*_XukmUAVA*zv#Peeg6E zoJP8&kq-H^7&v^y!I>>h#3e`%py&=s7O|SO&TZk5AWdaEL3z6SyE_aENpK|_->MU-1%am6&{K4Gch^V*Z{?#WdcrWfv3kNw zxI+PSp@diD9^h+Dv%w(*VwI}o8vzvOf!n(?4Cv>~am5?!R!L$xWV%jmw}ON}^EZmu zEh)n5>Cpv76o0HFKC4ug$6vZ85s}j4{wyc%D1UubYm$LEN5X6O$_S(+m_;#zcb=)b!>J5Zv!VVtd61mO^k@IoKr;lD5#1gD^KS0)?|W@FdknLh!r{2@rrF zwcIFsD|}L5xA^K~H2qj&JfvD+BsanSfimzea{V5qbgD5?O&@9+8F!b$_5*OJ@FtmB zU}sB>y8hXSLZIo-%*-;+uD7B=XdJmK0=WvbBr#S1L8ftsarP6kSpE)-M{j&|X{t|G zE-gDL*@x6;3vR)2QuApIYbPHT$$j4UNBm89-j3DiKT*Qge9GkoiAo_M?97CmSL^A! z{IMG0y|wQS9xxOZe-CCWdP{gEU6;{#yqCL1)0GQrw;sEgYjMp$^Ijb!ht7X662{*6 zLSJ##ceTdj+U?A0TfhC{rTCOeFWTRinu+^NVs8{ViPt6e-|9d8n?z8V(*CvZtBYM7 zmcyr37#C8TrhdC4xH4eJ9)9ZNL-Q<-lS^IXo5JjTDI&Un88GauMA|CC*Gi<4mPUvRWvhP=Hw1{g)GWveuf$8tlhH?q)PWN;@$W?vsH-;pT4{ z27|THbXGmi%z}p81VTB~n<}8`mt`*nS|#-}Ys2yl2P8XZUDm)2a6HHX9m z1+dHFD{z?!8BZ4if*^Z)S{GM5>6_3F#!URlN>{?Kq{KE6Qx^-xLBIhGCFCSIZj|V} zqMkbanAOJF7FIz}d$qgq60T|shZO&3Hs2+$<>9s*gRtn`8J=}<+g_uChx9}|^>{c; zYRe`y!rq}>aL}1wbZ1GSMbGK4lUohVW6|^AAi8Rd3c9_1f5NoH@Fa)P3pY<0i@Hj+&sKr^0P@mCF(1sP^d3z3M0k}N(B7Ev z?2KEdUsu<1E^6W?eaa(`*f)~hDzur2=9NS zi2b(fC!*2qFCb{Y)sVmCE!^_L$Y>zL4erW8HjJ!s3k*2yz|uN(_x7^2NL)$`I`WDt z!vvGXURC8HMG?jT0tOH^)S2o)CJ6x1IJ5x(uyv+TEnSylTLV4{FbxL&BINz7xv!zX znzVkcM+I2}a*0}M%*U|Z$jjr=rWD)jRjmrqcrb4sSQ!mAaIum$bd{{}8#onk9QURQ z6U^M2XnY*72@W4S+CWkVOc#6!Kma|zsmfeu&7KT5pgYl!w);4h@-g@+j1Y8X6x;$x z#(Vru*02J=UhXIo0Ki2RS;I+%PSmRd>r^QNT$oXWN;m={i+v3p2^QBxDvKRmKvHFb zb@JFHqv3GXfVT}tu+Cx$z<&UjOaYo8Dt6%Rk3&Z)s4+}%S*%|nvWganROlv@2&CR# z?tU=$suV&H4XNkAsU*h;C@A^{Y@Mw=yRu3FpJGBG?4z-&$l`%$9Bi#`ptSVDlUkKfEq? zWN{`OCKI2J#&z38AZJh%f;^3Vj!Yea9;gw>O9@a12q(;l7Ido7E0h)R-PA08auvE! zjadd=tOY<6nF`g7-LQ2*z(g?gd7Vt%8jYLMtII{vD>`K~9<8M~-$M6zWbuE-$x7}S z1f!VnL611SI!8yg6kNrEN-$#ZpJQVLiK=u-o!Ijx6n`}uyE$6$3fMRufi#UZ804bw z`t9d_a}JJERij(qT*?|tn|Q$DwGiP&PPg`GDB^5$BmqJ~muDkRjfONh8HF@>vxN-% za?1H<^Vr1=!hzI|;pPx1nR3)43VFI3_ILX+Ls6rjzQ*r|6LzTkrzLa@>$aokj|QuF z%s`RiR4`1NL{Zqwc@}jXmsZM+9lyqn6_jWzXRd)t^&PNB@OqzuJNLB_LQSt>os{Cf z8{BD#XNdNV9r}TTk7=1+Q0yO)Gf!Whe8O@INN@wg0CC!7$hxt%@0h=|KF7rJlP{r$ z|99+_W(9oaFODZd-s~r|TsPZ&v-85Lp2Y9Bd+*TI2jFuYJ9j|j$UvPu7}o#IlDE5K zzAduC9tK>BJ@?Bn-5-`^t6&OK@h1oco7y1=u>0;7$o=_y?a34UTK=+k#YXd--mHHx zehW#xWps7Zl~6tYkZ<1b^lhQ;h%aG>luNU=Ox*T@LDFJvUrJdXQQkx=0(mcs+FMp{ z`hs<<;d2a_lNDZPyyr%Zdys`ZR-Bj#cMCs5J?z696o1hX4&2!C@+$hk9gK9){}c-I zkmJ<7ml?igBH-%$riO-~&XbqUWxqe=t1k+0+%Gc+9|9?R^M0WxH*j*cxjm1S|Jyu+ zQp4T8WAPHNcmG_O=aiXp4WH)+u}y7w=UMfjb8j+C!2>WK%&@?yf9IE+X*`@zKhcv? zCVGJjJ`$)NuCIXiP)WU0Sl{QD{&$+*q#0<2*Rwn&xig&yN?rm|taYiV?~z%a9W?>%|XIrjw7n(9h;cPQ_GKp;F7WqBnQwnlRJ54(Kp-ecMP5edMdq)$Ezg;r>4+sU!*i|x(x_%sKGLY7j%iZza_BVa z>vE_nM#zIG6Pb5+7<3`Up&Yu4y9gIS)(j$zjsZ|ZMQy`RMji%b>UkS{DSzY%UJ*0j zBK7OGedoJhl*W70;Vx@|lnZqXKv^S?@W^LqX?Kh;m=PyJt)7XmXZ#Nf zCKY3fP+K~8Ssvt9yJYp_H;@+LRxL4W*y*9^kL`IvNvYH5`Uk(4+O6Qq9Hp^prnK3% z?Idx#<@SAxXcJ>WH*B|dLaaX%`%M=UE4Cb@wSXa(Qd#0+S>W#11Z~;G+MSTfyL}Aq zf7iqX(?``6sZ^gJa@&YHDGCwO!?BgLN~|(^M~`gZj#>V}ZF4-Kk?LJuCUMLfGbR+Y zi#_%<%f?BGPN%~>l`L4=R$I>Y{U4~FJxS1*A?)xCtpYXQFK8A_A&jzhCBaf|LQgg5 zuo)BnEGzPiM<+ab01Ej!gsB93u04_iLYFlznT<>Qy@3Bw1a#9FL_`7eugEh;QMQ6G z{Kln-I0CvnIR#?k1sfLqw7FgJM=%exK&SFPFGP1rUSB11=)h z|9>cp#?bdx#tDF;BS>I6v3$3v|KShK0K}@Hhc;MV4lK*oL-YU0!G8+oeS`_+Iu-#J zaf1wP{xZhSIRe^c3HoSC7nXPjEz$AcQQO@RD+65V`N={kyc4v-@sBZHyyz78Xo*)x z^tUH{kNiiy5Jf0%7)q~&D!wcmt~9>IUl1F*5zs3ekXt6ve;_Q$|FV91GtzmXZPh6( zUf&nwhBe;t^c-2Ty3C;MS9ea}lG050P@}_eN3rxAb(UxvgBz`!wIps!l1S3|kBHF8 zLyrvmPVgNWAFBD)85o!N_u>MP5ci{R1;!&LIfmO`t{R|7;YL} z`+Q6&WWJeVsrAuD2&Cf|aj^7@n>LThjIjpAKbpYQkpvCkO9feJD>PwzdWbJQnNLl4 zApOl-L+pA^P$2%VjCJlSg&rX^(IDXP&76(EBRO+ah_VpF$^!%zbTR6$!eO{GDNEss zfDETre@04TK)0IwHGYs7IDT-I|EqbO!bEU?OKfR_wjs}l6}9CRC}0mE1}628iL^UP zfBDT8ORxOBha^~DAa^~`_<}lE-VuwwuoUGW?an{t#^6C`ogzm|{7{euwF09kkLy83 zbwNbB|G2>hqgQ^@1MC&pJBQs!!9h%-0$?A^@}HcbXtsaaL)sBO^2HK#pf$LJ<3zv% zGV~sJx)Jc*yQsmS>CaU~jYnsFiPC$@hEJu-eFQ?srz0Fq4@ggD{G-fpLKh}w5kLd= zs{M36k)tMhBICj5Zw^jPIsfqwb07)&3{b+dAKQ;HEODftv=h?Pu?8)yuKZ=5T?ekr z0UzkQdH2cF3xKYlWl%W$F+S-(T_EB^@B0E;aUtb;xnYSfo#!Z{tb(Gf^G|zO>8H^9 z5TF(Q8jVzmpF}L$ZVqdunz6F$E@!$As&;eQYX>pW zAa-x<&rN<%(g(5UY-Rp6c^;Wn9I^ABX zjuoBNhhGsN6Uz2D?%$0~i+!dBK}$@>mDVY~GxZO#WF8n4FclQRA3XlYCnN5o@DV&| zGhWbRbDb~iM1?)7tp*p*&o5yMroRp222_qfrhptUI?&BqOzk0VL#GRc?wzhSZ~G3a z21$fxESt+8{;|k3Pkz!zp`t;Kb!+`OdBEo!U4q&PvVUx!uOqHQXlxcr)J1vTtbnYW ziz(4>7oY`V}cj= zt?h%vsfGXJ;q9qmC{aDdo&SvegC0nz_?nY60#};fi*y-Z7C>0~w+92B8P2`EuVb^p7wfEkQK ziK@x@_leyRuFSGgx@MU-YhuimC?dt&I zn#@J~*Jx_<*2=AV963@e&tbng1wR4^I~vhn#Oxv{;+Q!2{+D7(Lb*gQagczEx;|@mnY=5=WLhm`sWG7Dsk@+sdMI97|$I0dF~V zk9K6vAFeG6L_nByllH_%yqIb&QA|+ULEb)Z-D-5`D}EC){?HOEqvgsJHLihYF_@hb zvJir}Yj)^!{wIt`O>zjWK_o%DyoT&#rij%|b(;J-ed(uQ0j<}d1`}j`0xXHiwcSY) zG37Vq`JVYVYOO;MxJ1e<-q(^zwAevz%l-4^=^`v8+#u=v>8Z_xB96Q zl;KMMVd+2wZD=N%P;{MuN)1gbiCo;Vi)EdEHmVK9w8w`pH0=v(A&^A&7a|Pw*JeH< zypR53!=wv(k#==fseAXDaEfF;)(EXSh50i;C--yvR z$yV&ICAiw#o~fU8{3*K$V!EK;KZ&sIXZ!g&$;P)hx7m_3@iSt~_(le+8TI;6WtKS@ zA^L~y#<;Fb%H<&W$hVNt_=dBi*GgV+k4Arg17x+5UWjs7__20ACH9}Yy@4l(Bjbh% zef!dQ%a2bl7ZDp+I>mFB>qwM^Ctqlko02+|GT<`Q!t!cDBgWDvnG{p&MEBP1iC%otFR)CzFP?{x@Z z(uvOM%er0*x{GP~G7NjT{9Bnp=PtCUoR0xDcNcocxDF$vJMEC_s2~si>9QLlh5e}m zZ{sfB@P_1=*G)%l^dFtL*{}p_8G%r{ww5I6kM5a6Vv3ntr#372WD`$>=$Srztg~+T z>uKTnZQ)QLx*o>0xp+gdbajPwCY`_E`}9X`(<1{JDM&%Nd(Gn|;D!h+jl~K)OWS4+Tqwyq(1p=@9outNZJxM{QH@ zhLQ)@6rx`DjL=bLn`0xQCD}9PA(I4b|2(N;E?htcS9)5TFeY;}Q3BGIp0AOT zLtq(4N^k-|@b``Ps1&@_jH8EmkH9z&rEDCdkDA05$rkURLH=onN2<2c?V1_%*V;}5 z?s3D6x$ovz92KkV`>)zW8UC2jZjon9Q7Fnc9AJ#~Ae8pyUdSr3Qs5(Qkk7;Lzq$`^ zr4b|g46=GXguTV3)1fe5V9V47Q6%8^c{?KZzqg5(=siI06p{Al4FfZ{cwZTFmCcrY z=?Xva{0$W6J!}Euc_oSULZaTwdBjw}I?o)}yl_?i-HW4QIavrAWDso8OX`wV%e?s# zOYgm8_QyJ_2K#?{S9XF2h_hzHe%k_?=gD){(7jQvRrC)^TeSuNCC}8l6qT@WfU>Xx z_VxXzMaFc>zmeZYcz|r8@nS$|9d$nl{)kwXoYz>Anwj?z0j%TwCjm)SEo~>r0nXCl zAMeCm{Q$j)wfdbkXq2wH7V&H-;wMu=scZtKl3!|R&vM;wnV`4Ogz9wAZDf2D!m+y& zL@RI@R?pEb5bN|VHIy_NZ!x#;$CahUUhtFB`0ZL%f7C*(?p$Uya3Hxs6xrBIhjp~E z!r^*G-moMZo})da0Pby2ZjPU$PIS(m{ZmKd~b#QO)r6JszhmSnzj|65#X^b!}Vrpx2!=j)hE4|sk?B_L~U;VijQ68auwWz9d%SxFP)B`jGsuCM zOI9=CZ!nZ~gAjN@sq7n+s3vY>q$jm5k(vPp%UgA9E!r2YQ-0O^NMvnLbBBxE_6OFj zGyFZSOaF)eZ7q`9qVGjNV=>omvjj1yY!|aW0H34kG*Z$3hYft`!gYH}w_NeL#qGBx z;7@X_*Nvu+LWyGXEX>P zqy~?_tntrYeU6R^b-bwb_eWWSp;qzplP(>ac7p39OVWlL$sXpQ05;)kn$Heq%`e&) zM%NeE!(+Gj^f<^;(DcoWmtOgXcz%}CjjiYNtv=bp2oLfKJUiK@>Zp%(7^Tw%x5QI^q}bEnQDoX1D3+VO znzl@;Qp>jw{xTbPzn78A0lj%3U2SRqnc?q+h)1UJkX& zuxl1IYw7iC-(UBJz3lLd;A>L)580L2?NfgqYP(6=(WaNHmJ;N?*2g}L%-XL{y6T-5 z*cKCTX9NLnk-5z%BREIs8!$yvr(oX&gZS&fi1#?-(M3$vvY{()mP&DW(~_XbCPtGL ztLCq_uQZ*SjRPJ=5|yo3$M4U2gcU=7J-A!HEU_^5_Qv-$B{jC&2PIjhE4XJUT_2zG z8x&>9bl6u18L;|2iWvq+Z9;X18&La4b5Nd_&Wa)XT!6SqdWSP?_fUfV8@1}5c$>1sUBQ*A>>!!oD8}_Bj*?^9z(|v?;qOd?jKOupZ1}sb`8D0Io5dG1ec9x?{ zmvJSLV%(X`XWt4Ad^8%)4WEFyfP?Y6Q(bcC3LDQOH5V^mePvZ$c2Ok%ekg?PcTqCM z39jAn6D=lK1apYW}=dyzhIX`18mksl`P;7Z#S0q=$T?T8ux}i|yzY6Zz*6wB&{AIS;(K$gpmtLhRmhM~`^Z6e zJa8sFMa_`o$<9@4JZV=VW?}c_%n-QtXHy*6mn!b2@Wbn7CX%9S>)LOR6)uV zpv}n?A{iS5DG)V!a-Y{@y#-gIjZobLKZGWp0@Hx4i+O35cX$^6*3@VrB^MuornhNw zF@25}V{(+GF#5z~L&{WIO!Eolk_f&mND-eLUrkp_v>~50oxEPEoZ@-SGCvO_&5MF0 z2{~gPWQwZYvMYi~-S6m?%dpLy=FDfPRS%(O2sJ$zmV~N(shRMJ!h+}RDU9K62jh~v z4YyYIMo(7~&9ZhB4t(S63bz=6&AWSE+V9gVkBJeMjlPG|T8$;7%Os8r+PX z&J&96>mjcr$wOz8CDB7FUwi%9=W;wW5+;(^<0UbyWQ!7*6XYl%fBreq@@lwXh1IHL z!Ks%xQQ`@qF~Ubl_+)rbRQ5kcu1Vz9*{lmW9)@V*d~;AtIfksf@s|j;G3fZ}`gG)^ zOaS+XZSn_0uvNfoL6P{%t1u;Tv?k5 ztL|CV|9Lw2q@mcP!w}dr_t?CxSZ*}hX!XRgbqQ*$+z&Ndx61|5m;@=RjX^;wi&8sOQuq5S*N$Zt~LVxpnn z^aRlnlOq@yMBq;!rt8QD2RD!)$lX`j>y8mjc%3j8-uv{R^H_(F4}L;0oF7#tB)86I)BsRy zRPkqyDwH?}!v$52NMhM|&7}5u4;9X8^rVcMRPnO*)2LH*1s0Yc0qq3$_} zAX@HOr!KAz0&LoLcDfvF2@P7UOBar4vhH=U>#SQ9eRZ$Qx5cv2hZ?0j$CHJGF{l3esXWGCjpqqt_H@_0 zYy}j)$L{&`?>82Kb0T-2Q(+UCYO5y<69@ybGQO@B2zAM-rgs)IYbV-8#$Aov{({dU zwb#8zu$9^DKfWY;y*%|NrH7mgEoE2e&~c-)s>ppHUFjvA-|z2zS1$_z_ua<1#~OAh zy-M>2?^Ij8G#VB&At&z9U4=p2kN>;%9r9@&K-K=kPB3KSq?^HVmH9SD? z`@VQvZLzB#MNM4T|0aQ{0lN~<9pHxdG(P>${~2h&1SDBf$s#f>=5qOY^p#DizEMVO z-;wD6@@^OK8qf-k#WYjgLp2|=p5G{sZcKJ1E>zd8TotRCK`v) zKGg7eOW(SY>2fG&j64=WnukddwfSkl4m+<7PQ5Zl$RB|hvd(Z_8WA^sP=6ary@mAA zcD}Jy%T5a^2XRGqgR4xnFOF0x*d+mwgzqDDSA2hlqtl&#cpnXZ*n*i?FN3@+*(CH*U*IG#9e#D>$<3#jRzjs41zV zXa$!uE17p41`wNJ8pTQ%;eqo^>Aa>hyTWR3`+4bSKXfA$B4?Ty{Rx)elccP^f2fA2 z2r9*%yZQBU^*tVOlk=`bWcY;s7euUAyVNjj$a+6%1~xH#-WE1>qk5J-J37DqEUKXN zq^qs_Ku&z`KzMFFo{C53r6 zy|TBkPneiiYKiD=Rqxd-9C@km$>9EZq|5u0XqQhujsCyf<=pB{c7sgYdd$B}`5QSc zo2wG#{OtvxR9dFljM_LA7S`2qEVd9)xR)Eu_`x`#Z#%j-&IdU&SkMWz`$0pUpa@ckJ@xr>{DSHQm)twO=boMzyNm zFsLPbsW;)Ac|3M~YW2~7E=XC(`^1>jfOOFY$Sn-PCM3_~n~KD|qGe_m;MhMd${GBf zZr;TPG+dh&f2@;NeGj{UPgOrNT$w#%r3ZW5gw%cT%4F$OlO6hzJpM`;LochIqIJ|0 z@}tTKQQYhISbVr)TU+g{&D(y6>JrE7?$>pXc57*Kom5@ecLWCgq7mdIUnrq}Ba_>A z*ZCll?yY3y9Xt(B^|Q8DM1jwnpy*QdxTmkVb4x*+96V7Dd;ZO=m<9RS-j?K}iyvt5 z%y*zGxJqHR8{-i4CZx2nj+iONC5tyB{O%kf=Rp?gmWwF{J#C3+F~vD&4A;iO;Cd{t zUtxJOv}T)5*4RdbDrF?rN)F82 zWG}_tiIy>@>r7Bfhj}e<&$?_v-1~7K)i*NLcxE@!Xia5<1;TX3Je=M5qk_F;A+}QB zst=RdK>8+=_Tkm(8<)(DnWw?bc4FXtgEGO-4pEt8-2vQ|0(g&d?(owY9P4BOeo}ND zwztl8P;okvX0T$)oqhG;lC87qJ=enfQ|hT|WQ0r0Pi+HVMO%0Cp=|N zf8cfWP8V51io!!LusVnNhiBtCXSqwCP8;{kFB{Blx$_*x&dKzqUXwY#Cph8)zaiY= znqPNRwE4l~o7_lKblJ^4)JoQ%9u=`0AuiB|bKu!Drdqr_Gf81JjW6>f!kU^ExLXe` zWzK%w$o{n8dbRdO6Pz{LPE{-^B6uqx&cQyu0LxbvZ=IvNt2A(z3j(!GY@Xhipk+B~ z7dqv6ny~D%=B3Q+`v4rhm3d@$QDS;Q0yE*u%sV%p=gB<$_4*fao@#)8l1*9$TbJOm zRxz~r`$?oJ4C?X%^7JuBYeZ!NuAEK`dEg^32I@l3!lH$37A8Cq1RA4P{8jpl{E>sLi(`UbO`yH_c&JKTtO}r)ew(6R;!b8n^Gr z0xrGQVKgVw%?zReUSG-`Qfo^vkk46h?3rh~XtZ@t{}K8%rDZTN<}hCKmmN8RXIZF! z^Ajyv;+KK#-a#llh!ZRm#jkUSJ5$R0Tzlyns>>2x!DK>gHRd1_rBKVu0Y*NPy|20c z`mJf#@uRbyn@7T&<04e=$;@zWVMnrb=J~K@C9!~AMe|>^4Vaq|#;9DFnV;mQPW$x` z2FvFkJpqcK>)$$VLAh>o;OWaC!YouTl{h&q$o8 zaHR$3GX)b*K;#Es{0VU9U z^JCv9xt>B)GYd$kD^ZRnV7i(ndf1PaBXkcH=Xd~_Srq3Jk*SVdJ7I@EMk92rruF~) zbcDes%p;ZDU$t?N*m*aUUjYRzaZVLS_Fls<{<9}ccG<4YmL}){=B^`-#|W_&sWF#{ z=z5`tEv-DFESWZ1IWHGlZj@<4Z4D;TlFY#p2va#LlWgpl_yOqG1Yra!+eV4kExcQ2 z$9U2w`l=8jt{-zYNMuy29&`8xSMleW7KTT3@cP!S$|mPE;R$#|(LKlYO}>K#b6i7( zp9V{AK`a%I%Ezb%tU*9(@Mq*=Ob zfX*Hva{NB}XKGIdObW~`=$oY6tY7tSN^WM?bw3yquEa4Zsr~F zpDqTUcJ1JJs`Tg6I|g&-&eg_Q!&q57GR(2b8r1T(CsMW9O}R=1{H}8-N>Gib+z%*& z??+a^EIT=z&ASAt+H;5`D@a%U5#B!5$JMl2_hYoD^j2EieKnBllb*x}$MHcXPJUDC zF4`>wCF$)Iz4bX-Ip*%sh}ej^obJKh@31}7rh7q9Ems5ZXidX5_T1@Y0^ehJrE(3; z_IkVrqC+wQdNGfN1v`s?vUU3om)UmOk1Jo+F7+<`fc%QkB}l(#>;R++@$BSa*xPd? z-Ja5_9`*iadk5=T961kv@dP}~uoJU}n-4f^XU^2EHRRMAN;>_lgZO?Oj2sUY-k$!^ zdlNKlulmNJe@EBnd5DDXQvtR8=jTR^JB8&xo#=O{Msq4?u@U11`BNo*%{gnOLpO2< zk6xHN1ACpS{Ntz&g3>ufei_x~whnK^?#KZNuuIC42#Hgh_=+ z;a1cTc-L-X-)l48{D!0I=XYzWNu1o2)vfx+pI<=z1zSRN?s%8poqOIzToRmH(87u% zMI7(#7|>4Hd3u~tP!CXqAhdyhJjEb@{?4s!gMdSWkQP()nl=2zx{lUto(&aR)t*QhZ)3O8lS zmn@w;JQHebJ`XGS7;o~X3r`r#D%rB-<~Kz12w*4tG_8ROZR(_^cPH~ON}jIZA$A|4 zLGs5}y_d5mI_H>Y8O4e2WSW|;FR+^<(`veBygkOYyyg$KTAA;fYR!htRc2hXPprEQ zamyxt6KmLbAtv<2aU3q?MILG!RqAXl#5-eERGKgaAmD)#1yO)njFHYKkbH2oC_)x#^78?Q8FC| z_LJs`sx?I1KlWV3b#MuA*RnyEgKQuhzkWi?WqM^T1C-ihEE4Y7f*IM})i6eMa|;-* z0-KjR&Yv55**Y(WtuMS%Ph5_3Dc>DhN!R}C%$v0^G)W5+IzqgJDOPLpzQn%M z_i@pHQD7Mf#=2JMLJU80GdYkmG21Vuhg?sBWp>TuR4NHBbJkDj5d54M9Vh|V>nmKC zectcnR&w>Nnms8;^_>~A^$t0DFdC0~u6l~oLRZWX%QOvGan=BObLXRoBSdwk!byxr z_>ADox+2Ap%<-+7XQXzbG&}o50BaQ{2nQwDJ^OnFvO8 zCHlBQ+(?v%mS1nl)FQRc<67Cxr}UF9;H0iQH`C{6o8%;juJ?`-$;G-Z7vwG2EtTGo+xc!oV)?L4~RKD7NV|&@NBui7wB6LU2#j7+T-#p2rK&A!OV)U8U z+KSS(gLrcqFDD8iaDD+h#V~lbuWquILv4>EnAaqNo-%_qf-bpVkbbVWCb>{Mlv_== zxO?uy3l;(9+#a5A!c3eDl zF;Do1b$lA`3 zZrq)bSZ&o1A=TSFe#(?p&^H$h%aETDIS%CSZmc7)@RS2jHm}$wE*~@Nq{1Z|nZ_{_ znhJsbW8fK>L4U)1WWR4!l$=G3Z;!L6VR9&^HGMb<*mM2bZxQwW1uf?l^@fQ~X1_LJ zH)0M&c+LK~bV#*P)tKGqtXbpP%0i*LB&K9*Ijlh>%Hy5}d_as7S=u)TQlYF|03*JK zmFEIY+Z$-~BF!u$c&d$iY1Xi}@i#>H_N-)NX*zYI!@9&xIoW8P_h0#hZr7|v?D!SS zzSw0^x?V8!8+@Tn=X>{|Z;?u69Laio0Ee5<69QB3_+qiZE5W(Z?P=m_d~-kC3kaKP zzRLIg!6B6^ufC8mON!9g8L>_sLsyTeF4I?l6ZnwO?$ZB2<%<7dO_mRk7_!T@6{}{v zF^_p$hSf5XeDPt$4y#%7!qq|JRvdo%@OE@tzK0(Lp>qdhKU(^2sS z!MK#Sd3U{LeB&Mrbt2XS=c_7Zd}?cGe50M(h|iPkCsd|yh!v5Z8?OTri^r6TF|?RB zNM6q3eX~e@LZue!c+^L-K&-L>|3%%b+`!@a0F$0?z9C%*eFVsVU@#1~;L1}A76d%P z2Kuw`3)4I@k`w6HJ%T>b4tE7iKt%OD&LvGDC*AZ@_fwoQ4m#1ygj6;ofsV^xUp-v{ z6f;Ib0(fs_{65K7F+%|;_ZZv2kgKc}vwpxJg}DukwfcuIo;T2H5b47vY9lah8KG^W zVz0D`^FwaffpyyZ;SJ74JuIHoRI~4yZQGpj+~fIx zZV`)iwfpa{y=5BKGaZo+-~#7?|)@aCto zevXh#K#jIzm=T`&{gXTu%L*slPenc{lb_fIbLnxEhI^Ib8Zi>>~&B5Gq! zG+%hWW)3$azw$R`9QU(<3D5?jUEd=~a0+oSQFgSw2Mha-w*=caU(}F&`~_qsT+k3z z(a#IS|7#sVIZs=Y?|l+%^3wPzJd!VW+Fklm@wve*O?X+1Lk|$=cf(Nu(y}*o>(s1&t*& z_8DH_{?OsIfelN)s^%FTWnZd`Z`9ms;yzTqiEwBySXw=nnNej=_8DYUDSSAxB%Pd! zKqph6%kVw_0M2@@4V1er-p41hp&JrNKdCL3e`Sm8cMiBHwUr<@8f4-l{*^&o!{ zJLL;Pr7h8o7?-nq$ZnASt-x|_%n=MUd`t^;`FX0$HL13=($AT{Dz~mJ@aU(o;>4~k z6}^^;fmi|K6YS-7#@q+JY!E|sx>MXjtmjVJdWT19X$gY??_8&Gr5S*SBF8a?>umYb34S`gF6h5|L9=dq5V zhi2)ed;6-POlGJ3p-(8I*iq9IYGN<&CKM^8YYlCpE#ig8gYvJ~O(XB+U$p>-YN-^! z%`GQIpVE>p(MnAWfXHCJog5xOV)u?T!%K&0eRiGa$d5oyH>%skN&;&5^+x2z`pY`` z^A5J3!iexb&rDMk<&`QU5qS0;oc>>=D+;%5_i*|q^_EtwUmsGn6&l*rCLSX*;(;VB zFsSk)L*287jp_SDiMs@M$o6}cCR&S+v{o%AHkeeK({2BqRdoBlbN~o_oYIVPTQP`n zQJ>yO>OdyV0$H{Eb|S~!WNxvcyqA!bum2IRGl`bct6(G`7>Nl@0`ewWNr9B@_x4Xx z7id;%uN+K3H5sq?sRm16or%rbC&N;p)^>!SX;7q*J_0 zuobE|gKKb0#%@-MB)U&eymNkoN<$fi^jrGgB4DP*RV}&6-5x~bQ>vF&7{Z2WuI^pxIzyU2j>=?;9Taxh>JsGGBV zH$l7Yx23G6*qA~^kxLwfPt)0Sz~dnB?OXcpschScfuhCrN*o0?{Ln+lJ{LU#%)DI6 z6RHSkvPaWB;LfU)sfdtj9Yvk`=i3oEZLL7yCBL^8Zn6Ehl|#P+i92)EZ>McBS34d* zb!%Hw@6ogeP9cAg1IGZW;3DVkxl%t46oBg`fUEc`6$0P-eF$Pp^!AV~9qogF2scM> zbD;a!_OV?^M?k3K0MT=~(cxyYv@3XFm+mcq!2-63}&=}{G}Bl0VXvrmYZ zO78tsY$^}657d;7!}+JK*uL@5D+3M1w@g7k1m=!_WNvJRxLjUtmcln}l4sUHfLF^p zN0)*>N5-lcD*bv>?fjJ>k;FLi*o1Q5oV} z!65OmA)8veB>^uAS;7Fo*9{WhumEY7DeO9W6*<5PE53R{mCS#y(V@>uSIMMB<9eYaFqU+vIQG_aAr9VBI7yl&4WcO3`1GCs2`19&isu>n^)+M>-9h{Sa zZ}+Bt$ZBD?0h0nUJJ>AA>jT?Sl3&eo4Z9!}4}k7z$Q^3O^3{==Goy+(EZ-FMwPI22 zh;G{DOhnj_VBjDaVEE^DOUNG6w zY0F+MY41d^588QeTGl$qUieKTr(_c!bRID?bAv=4sl6D6=lVfOlEkZ8%iuuSf=rd} ztwW~`cejo*@@JEh=G>A)1yWuLwcCBPm8CF(9A~tg%k$y)G2ZT?ts!NhWap$ORGMow zZUIzt%&U4V^LlhcjmfE9BDus@3#nsC*Z4{YugdQ^V)ZF4+8KkB4%MzKiu za)3ETQ7e$!YroDx;~2Be=9aGRzMgjsB>X||V@K#7E7T+6Qr}}cv9`PTK5V*L=!sMB zzw%aWM7jXui}p=isGNZD@MIo5mg+{*Y-r+)maXa>>>E)s$RPrSS!SoW?iUhEz|@^} zcNBlBxsO&5`V!2LDYoavhIT8lr)K?#*rQGRiZr$#)5n#LuY$HXGo#bz+;7IJiPtBT zbO?g@8mF&#H*vXfDGOyRhSn$`@1TSQ?-Vv-le;31Tt zjZ_R-izsJrE)gH-UocP;yH(J5s7T$#ob=-BJav_MeRHhe-vWu4Nc^d@w83GgMC|{r zbgLkyhO9oJ26;FIr&B=2@0s>{c1h8boSbaDn(%~-dK@)XoQH|a^x~pHitviabOR9f zt*u%*rSUBJro_sKV!#(=5{tf@gl&zt-+w=L=|H>Zu3bz%zJ75j{*judhBow(vJ}fy zlTBy0e4n=1(f3SEd3Axo;PD6>*YMkH zg1T_2zyV@suDcR$3HLszEHoE7ogZiS5;x=!qIUcI*ft|>ql=tH^Pqt7)3mH{7KJ5> zERoxT7_!RgudcQ!mc+z0TIST&VbgtU;5Gu-vhR)q>IMnvv-l>;;_nAMEGEVa#ESlx zD#8V+fy3!dV{cFR=>4;=?|Crvt_GcY0sW%l0bikajIRlMJ{!=lWjc@cz5UoqXZL|HcD(Q6V_w=c74>h3 z)lULqAC$7BKkY0|nUG55@%b2jNuSMyEjTsWC91A(ZD03;14hHch%@ zjCOymIq4Cr-Ff=c|9p#ebt1jJ((CfS-ggK-TcguaU{8vh`u@{?Zu!P;h0=_HZSs-~ zaiIhPT!*D*XTY&QO@0AgyD|-JeG@6gTcHE7E#Y%YO>`=gnu<#oNngV@(z;I9MJ&us zIp|DHwj{nfL3rtpsK2nbtqUOL3Lk-Yy%j`SS*6Cz3d2O^5^T@I-O90n{A-YMWn91j zSmBDZ_S`Ub2wNe3_Ou#MnjVgA636AtOZ^tfP0RGzEOn|Tsr0mitMB|auMz#@r(&)v z&VzOfCD~jqmOM1yC-3 z3QiGPXv{7FM>S}k-U$OIqiXX2O!SWfamY)JW6DXF1 zc}=gI;w)d7AnfXFsNkkM%6>FJRzF3u>cWiU+m%l?P!0GdXIco%BRy_3i$x951@k_f zBRbH~&fT5(qV%gV?Ql)I>qPmi)KlbDH2&ddd(OdevM4@rx(_tKXcEL}G|)!3WoXIm zJW68b?do!(7w+{x=lFXzCedF@mas!yu z2qbA()El|!NmAJQ@B4nZY5PdYP=3JPJND8kf{aJh)DD<_FO1!L;?57GM-Ap$4t8x| z4xdMz_;Xa6bDY7u;TU^!^MpgY)pyNG==~KRA}>|gW-?C{H9eTumHQj?46~~6HrxIB z4SpFc-}bW4Rz9ms%IW1JLkgT+?}TBL6n!lJ=_P50r=Lkx-?JM)H=7(7b;z_-$N$K5 zfNMTYSV76o9Sec_c*m{`UpML6M2pbr%pJ=xz(qxPL7$^#GV@YAj|KN9W(p{7@0t>=CR&~D# zp~KHJKuDtZ>|FU==m3xY!-!p5;yNX-I@wvK#Z16ah?kS5<$W%d$Oe{$jKY9@Y@BG( zd5PR|mizL_T+;11%RcVx46ehV1Nz`cM<`n= zb*0xUvv8E~Te)w^2kmKd1z|5xfo|L(Mw5-Tp6(_6Bz17;*f zda1dFulHJhrj=+^BAGPMnVBM+W-Xs1F6Ut0&=jDp_CA*e$F|^4<^Gy2C2509`WOMD zrM^EH#Zae#wq3ghO4)=~*4+EoNiJVMDxJH`5*B!zzj3KDSu&!Nd)3tNt5F$w@u-1( zXW5lyNO$LF-<5>+eU-L@MpwgJAS(6hkvS*zzSN8bXI0yRrX z+?4N}-%AP35x1G+aZWcSIP}k~PrM3{@5=&5dpX=S%7OSgshJ+b zPpN^kN;?^!2kW|j4vaTMBUZqlEcj~_@kf9-~A#m`q5mPLDMbn^Uj+woo%`-g(p11d9jF6_?0V-d8i2sA+ttV+lV9|z8u)r4Ens+Cb=SYHLjxV)%>Zm zq^+KVJVX~tl(SqRG19gjGU0dec~fjXGsgE}+Pak;+jGCvND`Q77FCoJ-ktpR9lx^__i#2&vw{O0-dp7j9&x1w=j7aT7aQjy zfcb@n@r6?Z9ig*Kf-oFN7-XC1<>|~F20lGTsn65m7V{C-Pm_l_VE- z#{)q*w8zWJYBbjDH1p$aDLYcYVB8Z(o)`a@^(o(2^)v!7M$92c5bX`8w=I!e+=uT6 zTf%vA_Qq;$IQmj!l$K{z|JTHq$3y*n{|}~m$uc9o%N8@%ND)b6H?n2xZ6Z>Zh>$Fk zeSLdRDBIWxX|a4JLXth}J4;~{S&}XL3?|0DeqUpz-{a>Wk2$Y%&pG$pv)s9JpRXlW zHaQq><3-6%sAg4aI!jJjMQ)(jN#dJnD!g8Xh}&2R2Ctvkul(oIXJ@p()0pgaWRS1I zWlIG|EvvELd};qd&SkCuV>1rEb%gXI+^lCnU^8?;E2%=^%*WzKG0*Bw7YQD;owEkU zes%dtxBuiGO}hA(L&T*sZCPf2yG6Z5Uz2)nh9eWyOq#d~xC>>W30_rVk7D?>Byh-* z_xW-lO#fwQ+M}vt&7KwAKRMS-3Y#o%b5H#fr08-KDV36=8>?xw&-PuMx}Gw6v)QRc zhOCzRNNdx$kNtgAeKC&f$epNO`!3ca1xVFLH1d8qkE`BkSXtXQTrJa#TiuP38x2gm9Gu3XxOBTf2L<52!s2)RCKaI zreXGB`*T5nLSTxzks9G4y`^`yesx4-!YRWR@~V6WNBw!d#BQwuyv9Czz~ks7;Z2VF zUR}6GC^D~L z_)s@*rBj1eLm$Sie{z6B| zfOmS_jjQZp;6N4Ocdn5d{318wA|a{V0s;sWFd zpWXi7(!f|Ic^a!dO6d_Pq{NQ;=w7M#DI>&I)Ju|$FH%z^$4k?YRaU!exUv9@x;@-0 z3N;pKVPko|REnd?YN8D`pV_OdFbze(1E6Nr{9nsxpe*M8X+}({(s@G;&hFaCc zABDR0_Z(nbaA|FeH)bc4%_%lX_cIIL%!QDC`P1$N^G+(63*JRPqgbRrx=vDQKzATD!lL`_7UU31hN)4zPC zxo1v$Nk@-mJSyA{C1L0!C-U>UQEG#_<5=;=xN9nLDf9b|@^sb4Mn;;d@Z`=p=PYsD zq@GGemR@1AIx~ORB8)Ln@YiPxBwBg_ykhw8GV(cxpu~*olS!l5 zM9doL%|MAg-gdkOsI5zm@`u+I=hs1|e4Fc2`igmx>>1zok}Y9%3kfcscfgDOxa%dB zwth16vfS%r5LWo(xPGF}L-2m!-qU#kFK*$o)4|@U*$Llww^H8RQsa~y=M8@V!U;jd zcolECt(3QW>&8biCx`AY=3WjN-M5DA_MT(y|?)}XN*M%bJ@Yf3CFzW7_XhZ z6mwm6FIrZ+pQD~gYDFPetB&k5g}kmya0Z0t9-N7Mdam{8=dcX7FiaO`jphK&TQYW2H zxLZwU!0Y2Z|7*J#otblY0jXzH4MGmkJBQ;Eb92{OK}bL@Y$g{5g81GYzxphTXz>1PiV~qf*?e57$+Kyyu#^3xGG4oX_VlU$AmI<$FBjCo9ePFV4vLP66rVHApKqO%bH}dBwf=v+0pDLD0Ulhki}4n+ z{c`+nXrS+-kyg)2&rP#9%BLHM8s@Kmr4t%SjfTgzrJ`>ClX6_{4Z`clOR3U9ramT1 zriSPVLG&d(W<;rc?T*Uqc;nr(OX|><(OaHAB+i5{wX?`X*|^@HWBsH{3Vy4bqob|g zg!P_4n8BCBK}@#o;v2BpHMRj6`=<s%AF3Zdk zn5fbl6ZXezl?RKiLYTm@VNQ$OnkSIB$w28i(GIhvmiBF`)R$P%Szn@4b^MtYDp^O~ zQ$UOvpecHAZwyETkmd5bb*dFf6XF{sJ5n2V4twm0@;S$PUY}rs(uS>j{f}l6B+{HAW|Wf`6ayW< zehmtzG595D>Ef>fOnwB$2SKtWZjH0LQ~*exF{NEEM|3k@b5A2 zg+m=gNiGeV$no*kD8v&u^Y3(q$hf;jhYYY306}B$xO6B1l~3+x(a;*Z1uKpG!|8G; zs%@ou4bszdkIdwAgJH$j4>Xxx?1iE^w_r>hKSj5C0;0|&(*?>tHK*AeHxWz;tYGVfZH|{~lC7p9^g~9QQ71Vn-5JdNL<5=z;2gsf_9Hn2~|RRUve~Pk-wGfRt`2 z5Iy}ia?q49xz}W5xM*-BzA~fR{TU1gpD~7@*bjXhW*O)m7&sgd;VnU^d=W707iSc5 zEtU=Qjk>|T?wJ&@Zse@eR>9D6KR+!S@$YkAoS~bdo@qmllYWS+Dj?8kMrwfNE%I2M zqr2_}VN_V}n>(nZ; zXNffYlqRa4A5ll}6QVDCP0w%!0=DLt|7i>((v_T@J33l8@c7ndYQXQUd&3ufd{U=~ z{aPyM!zj1)3>aaRoAcCdukB|MX!IsAQ{(m3KAbsHPd)GbZvRp*8$!P!L6gp#5D<^h z4@Ej~aygVf-5=$ z8On!?E^4(W3b)tz5*n8G4JJ|PaqjwR`4RDE!+*!kNO$DCjkFL6qs3-pw&Vz>EBM2K zeYRrFL)RRPR{I#{^sR&Y%ADCX*H$Q^>UpEL7VT&FH4?X<&poDB7}t>ds*P;y$SJu+ zn1RhRa^K^AuZ>w>S6F4|t$Z0m!h>#QH9_oXK$tSUP^idG(-Pt%u_0M{43gpx1B zw?}`?)#uey)W%eai!t$cvOWkR7-i+s8jx7diY!bhme;nS2a{>4XxJ`o^BAHw0$o?J>(`-pQ-axj+#t zjCjAgpwe-`XKh2TbP}C*67Azk-Y5AlMPHMK6yQntC6pg95dOV}Fv^)R2MutE1I@q(GRtqR?=+zncO9KM_*|G_@ zFV%k#v}H2)1yOctA*nl9od_$}Y{#q-b^G^`9R^X7P zh%+K-{QH%?$Kt`)!%&q1r@o9(r8d-~(_qhei7j^w+r;ViaL%04?0$ZbeA+73gTtrt zvrkD^X{Km3Ox%BpNDiI7&NVHS>FaP?ZP}^z%C^D`nNeBdz+tVMZU^6ifpNdq{jT5{ zx1yW^8G1t6I$@&`_7)?muu7|d%`8#%lHh$0o;44h77v~eV+)b5x?gb2q%L*pLbNG~(vq`Eg_>P1oND+-6s@Y(MV2xC?1yE`kRzn@eS zwvF7Fy#eW^IlVySHVci%Q5Wh=@lFiQyO3M&u6(>S6148hx-mEHS$ZBy8~=V*J@6b<`cC>>2R2QnY7~%&vLc)oR?oIT)BpsP6`Q%%t?%Si*#VX-!~I*9H2H-Cax!SZ;BR^iL5S%XX!S!?4GFM86w_Nfq(Zg;@Jg6^vj)$Gqtgo$r;p;3 z=!?|Y2a3Nffr^LAflo4NPyP$!r78BgTtF)fFji!zc1Ib@;jW@IvRWJLxBhy79f{FR zY+>rN8*dw<6{Ge#3znE$@G=tky^ zn-|?sMt~`JvDiOjAFY@8^D1DcbPbC4J}}&SPBQ>v^(+wTtPT8=1~&74Rs@Yy8i{(& z`t9H6L@`et;3L?n{?H}3ru=a5!8=bNWybWJJ?)`fG>LVU9yHc(V4C_85uZI(MRBDU zZEHO!ZzP=ALoQcapg|>cjCG^;N)SQ8s1a0yKVW65tR^;%x zp}MI0DR`M=7<<5RBqOS1%WhUyR=#z5p`?GOGlaGYcxbBCH4q`6tkMv*FS#eZ9X~;U zlr0sk9{l*gs5mi0tlwbDXu+FhBf{H>KDY;9GjXo-InUV4V1@N;aQFtPAvdmIR-{83 zB++p81Ah|TCv1rDRb8NZ1G#hl6%mD7;L|wT;_4eP=qbq9uR&r_+_^Re>LOFZYqpfM z^kH7)&QZMgO+v}Y8qFD`sH+ftmm9T)u@Bm=Gom^h zuDM6ed1Z)q~vD8;s@5F4i?!YCiPhsj|C=^p#X zmh5-j4t%MlA`TV{>Zy`T0Lqc3^jAWs|iHjUnz{} zqtKIPa7>@{YHPR^t1@Gd7*F^rPKe$GcQekHzuN5CkYZG;jB6of9R+VlNFZr7T8j$&$bANB9SY`XN_$HR6;HpI$SlBGM7C?R_D0Nj&8=?T}U zBiyb6AZzC@hOuA6;qTDnqVe@%4XWtHLU@w_CPBk^KTykTXIJ!bsHRs6lo0DwzlDaBA3$8cHG6NI4x_#xCxt_#kHYF%VF z-cSZ4#-GbD2l)@Z_?k)H#$qba%HRYJ^@(w6TJ{YZB7G zARP99tkN+nTEb6U?lB@gu;C{j_NdORY{Ubvgl(&B#n@Sk4XZ?7E)5^gjQxjLpOmRf zba}GOT)4L6)pue0=R4FBgYK)e-3T`FN}U>edrY6h(uu3=(4K@Sgvvb&jf3-UK9AX> zXVN%|RTU{1d(-Iut%-G*{9!_I-?9q9v}WqWCgsZE;==dSmGUho+i*sk~C9DIbsf1hw7 zu+7ivhm1~AZ1OH7hsGVDrW%9H6CZ*;PL4Hn?2$K7-Mci&5G7=|hu$oKjpSq!)IHFr yz4C=?#!kJ!H~xL!05*x-H{kV`vhSe{#(V1TVW{#T(oq!cv%a?R)nc@5`2PW{gXeSr literal 0 HcmV?d00001 diff --git a/resources/icons/vscode-documentdb-icon-blue.svg b/resources/icons/vscode-documentdb-icon-blue.svg deleted file mode 100644 index bb0624171..000000000 --- a/resources/icons/vscode-documentdb-icon-blue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/icons/vscode-documentdb-icon-dark-themes.svg b/resources/icons/vscode-documentdb-icon-dark-themes.svg new file mode 100644 index 000000000..dac8cc32f --- /dev/null +++ b/resources/icons/vscode-documentdb-icon-dark-themes.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/resources/icons/vscode-documentdb-icon-light-themes.svg b/resources/icons/vscode-documentdb-icon-light-themes.svg new file mode 100644 index 000000000..24a9fe8be --- /dev/null +++ b/resources/icons/vscode-documentdb-icon-light-themes.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/resources/icons/vscode-documentdb-icon.svg b/resources/icons/vscode-documentdb-icon.svg deleted file mode 100644 index c2a2a2c5e..000000000 --- a/resources/icons/vscode-documentdb-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/readme/documentdb-logo.png b/resources/readme/documentdb-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5445c7d47a6dc62e00cb4a602a0c2beb0bb855ce GIT binary patch literal 26174 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%0DTCragVr9xYBGaZYI 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 \ No newline at end of file + + + + + + + + + + + diff --git a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts index f5a8ec4b3..5b7778ece 100644 --- a/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts +++ b/src/tree/connections-view/LocalEmulators/LocalEmulatorsItem.ts @@ -55,8 +55,8 @@ export class LocalEmulatorsItem implements TreeElement, TreeElementWithContextVa } private iconPath: IThemedIconPath = { - light: path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon-blue.svg'), - dark: path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon.svg'), + light: path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon-light-themes.svg'), + dark: path.join(getResourcesPath(), 'icons', 'vscode-documentdb-icon-dark-themes.svg'), }; public getTreeItem(): vscode.TreeItem { From d45d11e39e6b1461f99e951532d3d23b73ef4459 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 12:52:37 +0200 Subject: [PATCH 61/81] Replaced the logo used in the VS Code Marketplace --- .../vscode-documentdb-marketplace-logo.png | Bin 15787 -> 60833 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/vscode-documentdb-marketplace-logo.png b/resources/vscode-documentdb-marketplace-logo.png index 641332713025c46acc43fed9124cab9fde48dfa3..ce5c6fbe260c4a11d01c83226791f88021faca4c 100644 GIT binary patch literal 60833 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
  • tGJD>|6f@>kqTc-_}tzmLj@WK>8!{&h5 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 literal 15787 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 Date: Fri, 5 Sep 2025 13:18:55 +0200 Subject: [PATCH 62/81] Wording mistake in vCore discovery --- src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts b/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts index 9dd3e95e1..f77af641a 100644 --- a/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts +++ b/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts @@ -56,7 +56,7 @@ export class SelectClusterStep extends AzureWizardPromptStep Date: Fri, 5 Sep 2025 13:39:57 +0200 Subject: [PATCH 63/81] Refactor: Moved shared code to the 'api' folder --- .../azure/tree}/AzureSubscriptionItem.ts | 16 ++++++++-------- .../azure/wizard/AzureContextProperties.ts | 10 ++++++++++ .../azure/wizard}/SelectSubscriptionStep.ts | 6 +++--- .../AzureMongoRUDiscoveryProvider.ts | 6 +++--- .../AzureMongoRUSubscriptionItem.ts | 6 ++++-- .../discovery-wizard/AzureMongoRUExecuteStep.ts | 6 +++--- .../discovery-wizard/SelectRUClusterStep.ts | 8 +++----- .../service-azure/AzureDiscoveryProvider.ts | 9 ++------- .../discovery-tree/AzureServiceRootItem.ts | 2 +- .../discovery-wizard/AzureExecuteStep.ts | 2 +- 10 files changed, 38 insertions(+), 33 deletions(-) rename src/plugins/{service-azure/discovery-tree => api-shared/azure/tree}/AzureSubscriptionItem.ts (83%) create mode 100644 src/plugins/api-shared/azure/wizard/AzureContextProperties.ts rename src/plugins/{service-azure/discovery-wizard => api-shared/azure/wizard}/SelectSubscriptionStep.ts (93%) diff --git a/src/plugins/service-azure/discovery-tree/AzureSubscriptionItem.ts b/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts similarity index 83% rename from src/plugins/service-azure/discovery-tree/AzureSubscriptionItem.ts rename to src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts index e6687fc4b..fa3257d4b 100644 --- a/src/plugins/service-azure/discovery-tree/AzureSubscriptionItem.ts +++ b/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts @@ -7,14 +7,14 @@ import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureut import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as vscode from 'vscode'; -import { DocumentDBExperience } from '../../../DocumentDBExperiences'; -import { ext } from '../../../extensionVariables'; -import { type TreeElement } from '../../../tree/TreeElement'; -import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithContextValue'; -import { type ClusterModel } from '../../../tree/documentdb/ClusterModel'; -import { createResourceManagementClient } from '../../../utils/azureClients'; -import { nonNullProp } from '../../../utils/nonNull'; -import { DocumentDBResourceItem } from './documentdb/DocumentDBResourceItem'; +import { DocumentDBExperience } from '../../../../DocumentDBExperiences'; +import { ext } from '../../../../extensionVariables'; +import { type TreeElement } from '../../../../tree/TreeElement'; +import { type TreeElementWithContextValue } from '../../../../tree/TreeElementWithContextValue'; +import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; +import { createResourceManagementClient } from '../../../../utils/azureClients'; +import { nonNullProp } from '../../../../utils/nonNull'; +import { DocumentDBResourceItem } from '../../../service-azure/discovery-tree/documentdb/DocumentDBResourceItem'; export interface AzureSubscriptionModel { subscriptionName: string; diff --git a/src/plugins/api-shared/azure/wizard/AzureContextProperties.ts b/src/plugins/api-shared/azure/wizard/AzureContextProperties.ts new file mode 100644 index 000000000..6ec698d0f --- /dev/null +++ b/src/plugins/api-shared/azure/wizard/AzureContextProperties.ts @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +export enum AzureContextProperties { + AzureSubscriptionProvider = 'azureSubscriptionProvider', + SelectedSubscription = 'selectedSubscription', + SelectedCluster = 'selectedCluster', +} diff --git a/src/plugins/service-azure/discovery-wizard/SelectSubscriptionStep.ts b/src/plugins/api-shared/azure/wizard/SelectSubscriptionStep.ts similarity index 93% rename from src/plugins/service-azure/discovery-wizard/SelectSubscriptionStep.ts rename to src/plugins/api-shared/azure/wizard/SelectSubscriptionStep.ts index b970f9ec5..54bbe9a9d 100644 --- a/src/plugins/service-azure/discovery-wizard/SelectSubscriptionStep.ts +++ b/src/plugins/api-shared/azure/wizard/SelectSubscriptionStep.ts @@ -7,9 +7,9 @@ import { VSCodeAzureSubscriptionProvider } from '@microsoft/vscode-azext-azureau import { AzureWizardPromptStep, UserCancelledError } from '@microsoft/vscode-azext-utils'; import * as l10n from '@vscode/l10n'; import { Uri, window, type MessageItem, type QuickPickItem } from 'vscode'; -import { type NewConnectionWizardContext } from '../../../commands/newConnection/NewConnectionWizardContext'; -import { ext } from '../../../extensionVariables'; -import { AzureContextProperties } from '../AzureDiscoveryProvider'; +import { type NewConnectionWizardContext } from '../../../../commands/newConnection/NewConnectionWizardContext'; +import { ext } from '../../../../extensionVariables'; +import { AzureContextProperties } from './AzureContextProperties'; export class SelectSubscriptionStep extends AzureWizardPromptStep { iconPath = Uri.joinPath( diff --git a/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts b/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts index 4b2f251f0..34211b5bd 100644 --- a/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts +++ b/src/plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider.ts @@ -11,8 +11,8 @@ import { type DiscoveryProvider } from '../../services/discoveryServices'; import { type TreeElement } from '../../tree/TreeElement'; import { AzureSubscriptionProviderWithFilters } from '../api-shared/azure/AzureSubscriptionProviderWithFilters'; import { configureAzureSubscriptionFilter } from '../api-shared/azure/subscriptionFiltering'; -import { AzureContextProperties } from '../service-azure/AzureDiscoveryProvider'; -import { SelectSubscriptionStep } from '../service-azure/discovery-wizard/SelectSubscriptionStep'; +import { AzureContextProperties } from '../api-shared/azure/wizard/AzureContextProperties'; +import { SelectSubscriptionStep } from '../service-azure-vm/discovery-wizard/SelectSubscriptionStep'; import { AzureMongoRUServiceRootItem } from './discovery-tree/AzureMongoRUServiceRootItem'; import { AzureMongoRUExecuteStep } from './discovery-wizard/AzureMongoRUExecuteStep'; import { SelectRUClusterStep } from './discovery-wizard/SelectRUClusterStep'; @@ -58,4 +58,4 @@ export class AzureMongoRUDiscoveryProvider extends Disposable implements Discove ext.discoveryBranchDataProvider.refresh(node); } } -} \ No newline at end of file +} diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts index f76f39c03..a6cdd22db 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUSubscriptionItem.ts @@ -7,6 +7,7 @@ import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureut import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as vscode from 'vscode'; +import { CosmosDBMongoRUExperience } from '../../../DocumentDBExperiences'; import { ext } from '../../../extensionVariables'; import { type TreeElement } from '../../../tree/TreeElement'; import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithContextValue'; @@ -37,7 +38,7 @@ export class AzureMongoRUSubscriptionItem implements TreeElement, TreeElementWit 'azure-mongo-ru-discovery.getChildren', async (context: IActionContext) => { context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; - + const managementClient = await createCosmosDBManagementClient(context, this.subscription.subscription); const allAccounts = await uiUtils.listAllIterator(managementClient.databaseAccounts.list()); const accounts = allAccounts.filter((account) => account.kind === 'MongoDB'); @@ -50,6 +51,7 @@ export class AzureMongoRUSubscriptionItem implements TreeElement, TreeElementWit const clusterInfo: ClusterModel = { ...account, resourceGroup: getResourceGroupFromId(resourceId), + dbExperience: CosmosDBMongoRUExperience, } as ClusterModel; return new MongoRUResourceItem(this.subscription.subscription, clusterInfo); @@ -76,4 +78,4 @@ export class AzureMongoRUSubscriptionItem implements TreeElement, TreeElementWit collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, }; } -} \ No newline at end of file +} diff --git a/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts index e865512d5..f64c9ecc4 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts @@ -9,7 +9,7 @@ import { type NewConnectionWizardContext } from '../../../commands/newConnection import { type GenericResource } from '@azure/arm-resources'; import { type AzureSubscription } from '@microsoft/vscode-azext-azureauth'; -import { AzureContextProperties } from '../../service-azure/AzureDiscoveryProvider'; +import { AzureContextProperties } from '../../api-shared/azure/wizard/AzureContextProperties'; import { extractCredentialsFromRUAccount, getRUClusterInformationFromAzure } from '../utils/ruClusterHelpers'; export class AzureMongoRUExecuteStep extends AzureWizardExecuteStep { @@ -32,7 +32,7 @@ export class AzureMongoRUExecuteStep extends AzureWizardExecuteStep { iconPath = Uri.joinPath( @@ -26,9 +26,7 @@ export class SelectRUClusterStep extends AzureWizardPromptStep { - if ( - context.properties[AzureContextProperties.SelectedSubscription] === undefined - ) { + if (context.properties[AzureContextProperties.SelectedSubscription] === undefined) { throw new Error('SelectedSubscription is not set.'); } @@ -68,4 +66,4 @@ export class SelectRUClusterStep extends AzureWizardPromptStep { From 804c11534068593c32d21e1d4bcc2933d84991b9 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 13:43:53 +0200 Subject: [PATCH 64/81] fix: resolved build errors --- .../service-azure-vm/discovery-wizard/SelectSubscriptionStep.ts | 2 +- src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/service-azure-vm/discovery-wizard/SelectSubscriptionStep.ts b/src/plugins/service-azure-vm/discovery-wizard/SelectSubscriptionStep.ts index 80ec738c9..96eacec1a 100644 --- a/src/plugins/service-azure-vm/discovery-wizard/SelectSubscriptionStep.ts +++ b/src/plugins/service-azure-vm/discovery-wizard/SelectSubscriptionStep.ts @@ -9,7 +9,7 @@ import * as l10n from '@vscode/l10n'; import { Uri, window, type MessageItem, type QuickPickItem } from 'vscode'; import { type NewConnectionWizardContext } from '../../../commands/newConnection/NewConnectionWizardContext'; import { ext } from '../../../extensionVariables'; -import { AzureContextProperties } from '../../service-azure/AzureDiscoveryProvider'; +import { AzureContextProperties } from '../../api-shared/azure/wizard/AzureContextProperties'; export class SelectSubscriptionStep extends AzureWizardPromptStep { iconPath = Uri.joinPath( diff --git a/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts b/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts index f77af641a..f6016bc1f 100644 --- a/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts +++ b/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts @@ -11,7 +11,7 @@ import { Uri, type QuickPickItem } from 'vscode'; import { type NewConnectionWizardContext } from '../../../commands/newConnection/NewConnectionWizardContext'; import { ext } from '../../../extensionVariables'; import { createResourceManagementClient } from '../../../utils/azureClients'; -import { AzureContextProperties } from '../AzureDiscoveryProvider'; +import { AzureContextProperties } from '../../api-shared/azure/wizard/AzureContextProperties'; export class SelectClusterStep extends AzureWizardPromptStep { iconPath = Uri.joinPath( From ce01dcb0f75b938cbc85d69596d61ff7cc7a766d Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 14:01:26 +0200 Subject: [PATCH 65/81] fix: resolved RU credentials discovery issues --- .../AzureMongoRUServiceRootItem.ts | 9 ++-- .../documentdb/MongoRUResourceItem.ts | 17 ++++---- .../AzureMongoRUExecuteStep.ts | 11 +---- .../utils/ruClusterHelpers.ts | 41 +++---------------- 4 files changed, 22 insertions(+), 56 deletions(-) diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts index 2579b0baa..5a60b20cf 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/AzureMongoRUServiceRootItem.ts @@ -16,10 +16,11 @@ import { import { type TreeElementWithRetryChildren } from '../../../tree/TreeElementWithRetryChildren'; import { AzureMongoRUSubscriptionItem } from './AzureMongoRUSubscriptionItem'; -export class AzureMongoRUServiceRootItem implements TreeElement, TreeElementWithContextValue, TreeElementWithRetryChildren { +export class AzureMongoRUServiceRootItem + implements TreeElement, TreeElementWithContextValue, TreeElementWithRetryChildren +{ public readonly id: string; - public contextValue: string = - 'enableRefreshCommand;enableFilterCommand;enableLearnMoreCommand;azureMongoRUService'; + public contextValue: string = 'enableRefreshCommand;enableFilterCommand;enableLearnMoreCommand;azureMongoRUService'; constructor( private readonly azureSubscriptionProvider: VSCodeAzureSubscriptionProvider, @@ -90,4 +91,4 @@ export class AzureMongoRUServiceRootItem implements TreeElement, TreeElementWith collapsibleState: vscode.TreeItemCollapsibleState.Collapsed, }; } -} \ No newline at end of file +} diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts index afd65b3e6..4a5c97f40 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts @@ -13,7 +13,7 @@ import { Views } from '../../../../documentdb/Views'; import { ext } from '../../../../extensionVariables'; import { ClusterItemBase, type ClusterCredentials } from '../../../../tree/documentdb/ClusterItemBase'; import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; -import { extractCredentialsFromRUAccount, getRUClusterInformationFromAzure } from '../../utils/ruClusterHelpers'; +import { extractCredentialsFromRUAccount } from '../../utils/ruClusterHelpers'; export class MongoRUResourceItem extends ClusterItemBase { iconPath = vscode.Uri.joinPath( @@ -40,15 +40,14 @@ export class MongoRUResourceItem extends ClusterItemBase { context.telemetry.properties.view = Views.DiscoveryView; context.telemetry.properties.discoveryProvider = 'azure-mongo-ru-discovery'; - // Retrieve and validate cluster information (throws if invalid) - const accountInformation = await getRUClusterInformationFromAzure( + const credentials = await extractCredentialsFromRUAccount( context, this.subscription, this.cluster.resourceGroup!, this.cluster.name, ); - return extractCredentialsFromRUAccount(context, accountInformation); + return credentials; }); } @@ -71,9 +70,11 @@ export class MongoRUResourceItem extends ClusterItemBase { // Get credentials for this cluster const credentials = await this.getCredentials(); if (!credentials) { - throw new Error(l10n.t('Unable to retrieve credentials for cluster "{cluster}".', { - cluster: this.cluster.name, - })); + throw new Error( + l10n.t('Unable to retrieve credentials for cluster "{cluster}".', { + cluster: this.cluster.name, + }), + ); } // Cache the credentials for this cluster @@ -119,4 +120,4 @@ export class MongoRUResourceItem extends ClusterItemBase { return result ?? null; } -} \ No newline at end of file +} diff --git a/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts index f64c9ecc4..63c654ec6 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-wizard/AzureMongoRUExecuteStep.ts @@ -10,7 +10,7 @@ import { type NewConnectionWizardContext } from '../../../commands/newConnection import { type GenericResource } from '@azure/arm-resources'; import { type AzureSubscription } from '@microsoft/vscode-azext-azureauth'; import { AzureContextProperties } from '../../api-shared/azure/wizard/AzureContextProperties'; -import { extractCredentialsFromRUAccount, getRUClusterInformationFromAzure } from '../utils/ruClusterHelpers'; +import { extractCredentialsFromRUAccount } from '../utils/ruClusterHelpers'; export class AzureMongoRUExecuteStep extends AzureWizardExecuteStep { public priority: number = -1; @@ -33,14 +33,7 @@ export class AzureMongoRUExecuteStep extends AzureWizardExecuteStep { - // subscription comes from different azure packages in callers; cast here intentionally - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any - const managementClient = await createCosmosDBManagementClient(context, subscription as any); - - const account = await managementClient.databaseAccounts.get(resourceGroup, accountName); - - // Validate that this is a MongoDB RU account - if ((account as { kind?: string }).kind !== 'MongoDB') { - context.telemetry.properties.error = 'invalid-account-kind'; - throw new Error( - l10n.t('Account "{account}" is not a MongoDB account.', { - account: accountName, - }), - ); - } - - return account; -} - -/** - * Extracts credentials from RU account information. - */ -export async function extractCredentialsFromRUAccount( - context: IActionContext, - account: unknown, ): Promise { - // subscription comes from different azure packages in callers; cast here intentionally - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any - const managementClient = await createCosmosDBManagementClient(context, account as any); - - const resourceGroup = (account as { id?: string }).id?.split('/')[4]; - const accountName = (account as { name?: string }).name; - if (!resourceGroup || !accountName) { throw new Error(l10n.t('Account information is incomplete.')); } + // subscription comes from different azure packages in callers; cast here intentionally + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any + const managementClient = await createCosmosDBManagementClient(context, subscription as any); + const connectionStringsList = await managementClient.databaseAccounts.listConnectionStrings( resourceGroup, accountName, @@ -121,4 +92,4 @@ export async function extractCredentialsFromRUAccount( }; return clusterCredentials; -} \ No newline at end of file +} From 2554ca1870e0c313b9285303a09aff7ca94aea2d Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 14:04:00 +0200 Subject: [PATCH 66/81] fix: 'add to connections' and context menu not showing up for RU account in discovery view --- .../discovery-tree/documentdb/MongoRUResourceItem.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts index 4a5c97f40..828a7047a 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-tree/documentdb/MongoRUResourceItem.ts @@ -32,7 +32,6 @@ export class MongoRUResourceItem extends ClusterItemBase { cluster: ClusterModel, ) { super(cluster); - this.contextValue = 'mongoRUResource'; } public async getCredentials(): Promise { From 5f2a0d4800480e8a504c3763e44a7ac36259babf Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 14:31:12 +0200 Subject: [PATCH 67/81] feat: promote newly added discovery service (one-time activation) --- .../DiscoveryBranchDataProvider.ts | 54 ++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index 631f9cf98..db1ae1fa8 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -86,7 +86,7 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider { // Reset the set of root items this.currentRootItems = new WeakSet(); @@ -94,6 +94,8 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider('activeDiscoveryProviderIds', []); @@ -222,4 +224,54 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider { + const promotionFlagKey = `discoveryProviderPromotionProcessed:${providerId}`; + const promotionAlreadyShown = ext.context.globalState.get(promotionFlagKey, false); + + if (promotionAlreadyShown) { + // Already shown/processed previously — do nothing. + return; + } + + // If there are no registered discovery providers at all, mark the promotion as shown + // and return early. The goal is to only show the promotion to users who have some + // discovery providers active/installed. + const registeredProviders = DiscoveryService.listProviders(); + if (!registeredProviders || registeredProviders.length === 0) { + try { + await ext.context.globalState.update(promotionFlagKey, true); + } catch { + // ignore storage errors for this best-effort write + } + return; + } + + // Only proceed if the provider is actually available + const provider = DiscoveryService.getProvider(providerId); + if (!provider) { + // Provider not registered with DiscoveryService; skip for now. + return; + } + + // Read current active provider IDs + const activeProviderIds = ext.context.globalState.get('activeDiscoveryProviderIds', []); + + // If not present, register it + if (!activeProviderIds.includes(providerId)) { + const updated = [...activeProviderIds, providerId]; + try { + await ext.context.globalState.update('activeDiscoveryProviderIds', updated); + } catch (error) { + console.error(`Failed to update activeDiscoveryProviderIds: ${(error as Error).message}`); + } + } + + // Mark that we've added/shown the promotion for this provider so we don't repeat it + try { + await ext.context.globalState.update(promotionFlagKey, true); + } catch { + // ignore + } + } } From 6011763de5f98877907419ce43ed7c7e7a788d68 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 14:31:16 +0200 Subject: [PATCH 68/81] l10n --- l10n/bundle.l10n.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index d796879f0..a720b8d8d 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -35,7 +35,6 @@ "A connection with the same username and host already exists.": "A connection with the same username and host already exists.", "A new connection will be added to your Connections View.\nDo you want to continue?\n\nNote: You can disable these URL handling confirmations in the exension settings.": "A new connection will be added to your Connections View.\nDo you want to continue?\n\nNote: You can disable these URL handling confirmations in the exension settings.", "A value is required to proceed.": "A value is required to proceed.", - "Account \"{account}\" is not a MongoDB account.": "Account \"{account}\" is not a MongoDB account.", "Account information is incomplete.": "Account information is incomplete.", "Add new document": "Add new document", "Advanced": "Advanced", @@ -271,6 +270,7 @@ "Load More...": "Load More...", "Loading \"{0}\"...": "Loading \"{0}\"...", "Loading cluster details for \"{cluster}\"": "Loading cluster details for \"{cluster}\"", + "Loading clusters…": "Loading clusters…", "Loading Content": "Loading Content", "Loading document {num} of {countUri}": "Loading document {num} of {countUri}", "Loading documents…": "Loading documents…", From 8fe79bf14db0993fffd8b59564402167a5a9794b Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 14:39:11 +0200 Subject: [PATCH 69/81] Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../discovery-wizard/SelectRUClusterStep.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts b/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts index ba3ded1d0..0edfd57e1 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts @@ -39,9 +39,10 @@ export class SelectRUClusterStep extends AzureWizardPromptStep account.kind === 'MongoDB'); const promptItems: (QuickPickItem & { id: string })[] = accounts + .filter((account) => account.name) // Filter out accounts without a name .map((account) => ({ id: account.id!, - label: account.name!, + label: account.name, description: account.id, iconPath: this.iconPath, From 1a58ca3c41b05b1e513d5fef5af21777bebbe231 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 16:19:44 +0200 Subject: [PATCH 70/81] fix: build fix around account filtering in service discovery --- .../discovery-wizard/SelectRUClusterStep.ts | 2 +- src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts b/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts index 0edfd57e1..f161c23cb 100644 --- a/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts +++ b/src/plugins/service-azure-mongo-ru/discovery-wizard/SelectRUClusterStep.ts @@ -42,7 +42,7 @@ export class SelectRUClusterStep extends AzureWizardPromptStep account.name) // Filter out accounts without a name .map((account) => ({ id: account.id!, - label: account.name, + label: account.name!, description: account.id, iconPath: this.iconPath, diff --git a/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts b/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts index f6016bc1f..bc0d0b736 100644 --- a/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts +++ b/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts @@ -43,6 +43,7 @@ export class SelectClusterStep extends AzureWizardPromptStep account.name) // Filter out accounts without a name .map((account) => ({ id: account.id!, label: account.name!, From a4ed81eedc30ffc96cc0e65d051feab27a4c3439 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 16:37:52 +0200 Subject: [PATCH 71/81] chore: refactored, renamed azure-discovery to azure-mongo-vcore-discovery --- src/documentdb/ClustersExtension.ts | 2 +- .../azure/tree/AzureSubscriptionItem.ts | 2 +- .../AzureDiscoveryProvider.ts | 2 +- .../discovery-tree/AzureServiceRootItem.ts | 2 +- .../documentdb/DocumentDBResourceItem.ts | 6 +++--- .../discovery-wizard/AzureExecuteStep.ts | 0 .../discovery-wizard/SelectClusterStep.ts | 0 .../utils/clusterHelpers.ts | 0 .../documentdb/VCoreResourceItem.ts | 2 +- .../DiscoveryBranchDataProvider.ts | 18 ++++++++++++++++++ 10 files changed, 26 insertions(+), 8 deletions(-) rename src/plugins/{service-azure => service-azure-mongo-vcore}/AzureDiscoveryProvider.ts (98%) rename src/plugins/{service-azure => service-azure-mongo-vcore}/discovery-tree/AzureServiceRootItem.ts (98%) rename src/plugins/{service-azure => service-azure-mongo-vcore}/discovery-tree/documentdb/DocumentDBResourceItem.ts (99%) rename src/plugins/{service-azure => service-azure-mongo-vcore}/discovery-wizard/AzureExecuteStep.ts (100%) rename src/plugins/{service-azure => service-azure-mongo-vcore}/discovery-wizard/SelectClusterStep.ts (100%) rename src/plugins/{service-azure => service-azure-mongo-vcore}/utils/clusterHelpers.ts (100%) diff --git a/src/documentdb/ClustersExtension.ts b/src/documentdb/ClustersExtension.ts index e5b319a33..955ddc541 100644 --- a/src/documentdb/ClustersExtension.ts +++ b/src/documentdb/ClustersExtension.ts @@ -48,8 +48,8 @@ import { updateCredentials } from '../commands/updateCredentials/updateCredentia import { isVCoreAndRURolloutEnabled } from '../extension'; import { ext } from '../extensionVariables'; import { AzureMongoRUDiscoveryProvider } from '../plugins/service-azure-mongo-ru/AzureMongoRUDiscoveryProvider'; +import { AzureDiscoveryProvider } from '../plugins/service-azure-mongo-vcore/AzureDiscoveryProvider'; import { AzureVMDiscoveryProvider } from '../plugins/service-azure-vm/AzureVMDiscoveryProvider'; -import { AzureDiscoveryProvider } from '../plugins/service-azure/AzureDiscoveryProvider'; import { DiscoveryService } from '../services/discoveryServices'; import { VCoreBranchDataProvider } from '../tree/azure-resources-view/documentdb/VCoreBranchDataProvider'; import { RUBranchDataProvider } from '../tree/azure-resources-view/mongo-ru/RUBranchDataProvider'; diff --git a/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts b/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts index fa3257d4b..45830eb1d 100644 --- a/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts +++ b/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts @@ -14,7 +14,7 @@ import { type TreeElementWithContextValue } from '../../../../tree/TreeElementWi import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; import { createResourceManagementClient } from '../../../../utils/azureClients'; import { nonNullProp } from '../../../../utils/nonNull'; -import { DocumentDBResourceItem } from '../../../service-azure/discovery-tree/documentdb/DocumentDBResourceItem'; +import { DocumentDBResourceItem } from '../../../service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem'; export interface AzureSubscriptionModel { subscriptionName: string; diff --git a/src/plugins/service-azure/AzureDiscoveryProvider.ts b/src/plugins/service-azure-mongo-vcore/AzureDiscoveryProvider.ts similarity index 98% rename from src/plugins/service-azure/AzureDiscoveryProvider.ts rename to src/plugins/service-azure-mongo-vcore/AzureDiscoveryProvider.ts index c32706fb5..a58633d62 100644 --- a/src/plugins/service-azure/AzureDiscoveryProvider.ts +++ b/src/plugins/service-azure-mongo-vcore/AzureDiscoveryProvider.ts @@ -18,7 +18,7 @@ import { AzureExecuteStep } from './discovery-wizard/AzureExecuteStep'; import { SelectClusterStep } from './discovery-wizard/SelectClusterStep'; export class AzureDiscoveryProvider extends Disposable implements DiscoveryProvider { - id = 'azure-discovery'; + id = 'azure-mongo-vcore-discovery'; label = l10n.t('Azure Cosmos DB for MongoDB (vCore)'); description = l10n.t('Azure Service Discovery'); iconPath = new ThemeIcon('azure'); diff --git a/src/plugins/service-azure/discovery-tree/AzureServiceRootItem.ts b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts similarity index 98% rename from src/plugins/service-azure/discovery-tree/AzureServiceRootItem.ts rename to src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts index fa4203508..ed64361d0 100644 --- a/src/plugins/service-azure/discovery-tree/AzureServiceRootItem.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts @@ -25,7 +25,7 @@ export class AzureServiceRootItem implements TreeElement, TreeElementWithContext private readonly azureSubscriptionProvider: VSCodeAzureSubscriptionProvider, public readonly parentId: string, ) { - this.id = `${parentId}/azure-discovery`; + this.id = `${parentId}/azure-mongo-vcore-discovery`; } async getChildren(): Promise { diff --git a/src/plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem.ts b/src/plugins/service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem.ts similarity index 99% rename from src/plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem.ts rename to src/plugins/service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem.ts index 3346fafd0..8f33604b5 100644 --- a/src/plugins/service-azure/discovery-tree/documentdb/DocumentDBResourceItem.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem.ts @@ -49,7 +49,7 @@ export class DocumentDBResourceItem extends ClusterItemBase { public async getCredentials(): Promise { return callWithTelemetryAndErrorHandling('getCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-discovery'; + context.telemetry.properties.discoveryProvider = 'azure-mongo-vcore-discovery'; // Retrieve and validate cluster information (throws if invalid) const clusterInformation = await getClusterInformationFromAzure( @@ -83,7 +83,7 @@ export class DocumentDBResourceItem extends ClusterItemBase { protected async authenticateAndConnect(): Promise { const result = await callWithTelemetryAndErrorHandling('connect', async (context: IActionContext) => { context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-discovery'; + context.telemetry.properties.discoveryProvider = 'azure-mongo-vcore-discovery'; ext.outputChannel.appendLine( l10n.t('Attempting to authenticate with "{cluster}"…', { @@ -189,7 +189,7 @@ export class DocumentDBResourceItem extends ClusterItemBase { // Prompt the user for credentials await callWithTelemetryAndErrorHandling('connect.promptForCredentials', async (context: IActionContext) => { context.telemetry.properties.view = Views.DiscoveryView; - context.telemetry.properties.discoveryProvider = 'azure-discovery'; + context.telemetry.properties.discoveryProvider = 'azure-mongo-vcore-discovery'; context.errorHandling.rethrow = true; context.errorHandling.suppressDisplay = false; diff --git a/src/plugins/service-azure/discovery-wizard/AzureExecuteStep.ts b/src/plugins/service-azure-mongo-vcore/discovery-wizard/AzureExecuteStep.ts similarity index 100% rename from src/plugins/service-azure/discovery-wizard/AzureExecuteStep.ts rename to src/plugins/service-azure-mongo-vcore/discovery-wizard/AzureExecuteStep.ts diff --git a/src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts b/src/plugins/service-azure-mongo-vcore/discovery-wizard/SelectClusterStep.ts similarity index 100% rename from src/plugins/service-azure/discovery-wizard/SelectClusterStep.ts rename to src/plugins/service-azure-mongo-vcore/discovery-wizard/SelectClusterStep.ts diff --git a/src/plugins/service-azure/utils/clusterHelpers.ts b/src/plugins/service-azure-mongo-vcore/utils/clusterHelpers.ts similarity index 100% rename from src/plugins/service-azure/utils/clusterHelpers.ts rename to src/plugins/service-azure-mongo-vcore/utils/clusterHelpers.ts diff --git a/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts b/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts index 856fef9a3..6e61c6117 100644 --- a/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts +++ b/src/tree/azure-resources-view/documentdb/VCoreResourceItem.ts @@ -25,7 +25,7 @@ import { ext } from '../../../extensionVariables'; import { extractCredentialsFromCluster, getClusterInformationFromAzure, -} from '../../../plugins/service-azure/utils/clusterHelpers'; +} from '../../../plugins/service-azure-mongo-vcore/utils/clusterHelpers'; import { nonNullValue } from '../../../utils/nonNull'; import { ClusterItemBase, type ClusterCredentials } from '../../documentdb/ClusterItemBase'; import { type ClusterModel } from '../../documentdb/ClusterModel'; diff --git a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts index db1ae1fa8..f4f1bc9cf 100644 --- a/src/tree/discovery-view/DiscoveryBranchDataProvider.ts +++ b/src/tree/discovery-view/DiscoveryBranchDataProvider.ts @@ -94,6 +94,7 @@ export class DiscoveryBranchDataProvider extends BaseExtendedTreeDataProvider { + try { + const activeProviderIds = ext.context.globalState.get('activeDiscoveryProviderIds', []); + if (activeProviderIds.includes('azure-discovery')) { + { + const updated = ext.context.globalState + .get('activeDiscoveryProviderIds', []) + .filter((id) => id !== 'azure-discovery'); + updated.push('azure-mongo-vcore-discovery'); + await ext.context.globalState.update('activeDiscoveryProviderIds', updated); + } + } + } catch { + // ignore storage errors for this best-effort write + } + } } From 2b596593911d2962a5b9c3d11e9e3fbd485ae67c Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 16:40:24 +0200 Subject: [PATCH 72/81] chore: updated refactoring / moved files. --- .../discovery-tree/AzureServiceRootItem.ts | 2 +- .../discovery-tree}/AzureSubscriptionItem.ts | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) rename src/plugins/{api-shared/azure/tree => service-azure-mongo-vcore/discovery-tree}/AzureSubscriptionItem.ts (83%) diff --git a/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts index ed64361d0..c150280cd 100644 --- a/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureServiceRootItem.ts @@ -14,7 +14,7 @@ import { type TreeElementWithContextValue, } from '../../../tree/TreeElementWithContextValue'; import { type TreeElementWithRetryChildren } from '../../../tree/TreeElementWithRetryChildren'; -import { AzureSubscriptionItem } from '../../api-shared/azure/tree/AzureSubscriptionItem'; +import { AzureSubscriptionItem } from './AzureSubscriptionItem'; export class AzureServiceRootItem implements TreeElement, TreeElementWithContextValue, TreeElementWithRetryChildren { public readonly id: string; diff --git a/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureSubscriptionItem.ts similarity index 83% rename from src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts rename to src/plugins/service-azure-mongo-vcore/discovery-tree/AzureSubscriptionItem.ts index 45830eb1d..e6687fc4b 100644 --- a/src/plugins/api-shared/azure/tree/AzureSubscriptionItem.ts +++ b/src/plugins/service-azure-mongo-vcore/discovery-tree/AzureSubscriptionItem.ts @@ -7,14 +7,14 @@ import { getResourceGroupFromId, uiUtils } from '@microsoft/vscode-azext-azureut import { callWithTelemetryAndErrorHandling, type IActionContext } from '@microsoft/vscode-azext-utils'; import { type AzureSubscription } from '@microsoft/vscode-azureresources-api'; import * as vscode from 'vscode'; -import { DocumentDBExperience } from '../../../../DocumentDBExperiences'; -import { ext } from '../../../../extensionVariables'; -import { type TreeElement } from '../../../../tree/TreeElement'; -import { type TreeElementWithContextValue } from '../../../../tree/TreeElementWithContextValue'; -import { type ClusterModel } from '../../../../tree/documentdb/ClusterModel'; -import { createResourceManagementClient } from '../../../../utils/azureClients'; -import { nonNullProp } from '../../../../utils/nonNull'; -import { DocumentDBResourceItem } from '../../../service-azure-mongo-vcore/discovery-tree/documentdb/DocumentDBResourceItem'; +import { DocumentDBExperience } from '../../../DocumentDBExperiences'; +import { ext } from '../../../extensionVariables'; +import { type TreeElement } from '../../../tree/TreeElement'; +import { type TreeElementWithContextValue } from '../../../tree/TreeElementWithContextValue'; +import { type ClusterModel } from '../../../tree/documentdb/ClusterModel'; +import { createResourceManagementClient } from '../../../utils/azureClients'; +import { nonNullProp } from '../../../utils/nonNull'; +import { DocumentDBResourceItem } from './documentdb/DocumentDBResourceItem'; export interface AzureSubscriptionModel { subscriptionName: string; From 523b0a09ad7c94d48a719782dc89b17fbe52b7a1 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Fri, 5 Sep 2025 16:48:18 +0200 Subject: [PATCH 73/81] fix: restore password support when new connections are created using a connection string --- l10n/bundle.l10n.json | 1 + src/commands/newConnection/PromptPasswordStep.ts | 1 + src/commands/newConnection/PromptUsernameStep.ts | 7 +++++++ 3 files changed, 9 insertions(+) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index 91aa419a3..1f048df70 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -458,6 +458,7 @@ "Use anyway": "Use anyway", "User is not signed in to Azure.": "User is not signed in to Azure.", "Username and Password": "Username and Password", + "Username cannot be empty": "Username cannot be empty", "Username for {resource}": "Username for {resource}", "Using existing resource group \"{0}\".": "Using existing resource group \"{0}\".", "Using the table navigation, you can explore deeper levels or move back and forth between them.": "Using the table navigation, you can explore deeper levels or move back and forth between them.", diff --git a/src/commands/newConnection/PromptPasswordStep.ts b/src/commands/newConnection/PromptPasswordStep.ts index f8d87b9b6..9019af990 100644 --- a/src/commands/newConnection/PromptPasswordStep.ts +++ b/src/commands/newConnection/PromptPasswordStep.ts @@ -41,6 +41,7 @@ export class PromptPasswordStep extends AzureWizardPromptStep this.validateInput(context, username), + // eslint-disable-next-line @typescript-eslint/require-await + asyncValidationTask: async (username?: string) => { + if (!username || username.trim().length === 0) { + return l10n.t('Username cannot be empty'); + } + return undefined; + }, }); context.valuesToMask.push(username); From b0191c5c1d4accd8a8716b312af4cd53a9ca0aad Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 8 Sep 2025 10:07:34 +0200 Subject: [PATCH 74/81] Version bump to `v0.4.0` --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d58b04aa..b987186f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-documentdb", - "version": "0.3.2-alpha", + "version": "0.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-documentdb", - "version": "0.3.2-alpha", + "version": "0.4.0", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@azure/arm-compute": "^22.4.0", diff --git a/package.json b/package.json index 9a3bdae9d..d3d1f6340 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vscode-documentdb", - "version": "0.3.2-alpha", + "version": "0.4.0", "aiKey": "0c6ae279ed8443289764825290e4f9e2-1a736e7c-1324-4338-be46-fc2a58ae4d14-7255", "publisher": "ms-azuretools", "displayName": "DocumentDB for VS Code", From 9e7b3e279549edc93462d1101cf1f7e8bb346985 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 8 Sep 2025 10:49:56 +0200 Subject: [PATCH 75/81] changelog + documentation --- CHANGELOG.md | 13 ++++ docs/index.md | 3 +- docs/release-notes/0.4.md | 61 ++++++++++++++++++ .../images/0.4.0_documentdb-logo.png | Bin 0 -> 26174 bytes 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 docs/release-notes/0.4.md create mode 100644 docs/release-notes/images/0.4.0_documentdb-logo.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 28af165ea..5577a5269 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 0.4.0 + +### New Features & Improvements + +- **Deep Azure Integration**: Introduces deep integration with the Azure Resources extension, providing a unified experience for discovering and managing Azure Cosmos DB for MongoDB (RU and vCore) resources directly within the Azure view. [#58](https://github.com/microsoft/vscode-documentdb/issues/58) +- **Service Discovery for MongoDB (RU)**: Adds a new service discovery provider for Azure Cosmos DB for MongoDB (RU) resources, enabling effortless connection and authentication through the Discovery View. [#244](https://github.com/microsoft/vscode-documentdb/issues/244) +- **Official DocumentDB Logo**: Updated the extension's icon and branding to use the official DocumentDB logo for better brand recognition and consistency. [#246](https://github.com/microsoft/vscode-documentdb/pull/246) + +### Fixes + +- **Connection String Password Support**: Restored support for passwords when creating new connections using a connection string, fixing a regression that affected certain configurations. [#247](https://github.com/microsoft/vscode-documentdb/pull/247) +- **Improved Debugging Information**: Enhanced internal error handling for `nonNull` checks to include file context, making it easier to diagnose and triage issues. [#236](https://github.com/microsoft/vscode-documentdb/pull/236) + ## 0.3.1 ### Fixes diff --git a/docs/index.md b/docs/index.md index 3fcac2fbf..c3183d3b4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -62,7 +62,8 @@ This section contains detailed documentation for specific features and concepts Explore the history of updates and improvements to the DocumentDB for VS Code extension. Each release brings new features, enhancements, and fixes to improve your experience. -- [0.3](./release-notes/0.3.md) +- [0.4](./release-notes/0.4.md) +- [0.3, 0.3.1](./release-notes/0.3.md) - [0.2.4](./release-notes/0.2.4.md) - [0.2.3](./release-notes/0.2.3.md) - [0.2.2](./release-notes/0.2.2.md) diff --git a/docs/release-notes/0.4.md b/docs/release-notes/0.4.md new file mode 100644 index 000000000..89ec1d374 --- /dev/null +++ b/docs/release-notes/0.4.md @@ -0,0 +1,61 @@ + + +> **Release Notes** — [Back to Home](../index.md) + +--- + +# DocumentDB for VS Code Extension v0.4 + +We are excited to announce the release of **DocumentDB for VS Code Extension v0.4**. This is a landmark update that introduces deep integration with the Azure ecosystem, adds powerful new service discovery capabilities, and aligns our branding with the official [DocumentDB](https://documentdb.io) identity. + +DocumentDB Logo + +This release improves how developers working with Azure discover, connect to, and manage their MongoDB-compatible databases, all from within a unified VS Code experience. + +## What's New in v0.4 + +### ⭐ **Deep Integration with the Azure Resources Extension** ([#58](https://github.com/microsoft/vscode-documentdb/issues/58)) + +> **Note: This is a staged feature release.** +> +> It is coordinated across three extensions: DocumentDB for VS Code, Azure Databases, and. +> +> The full integration experience will be enabled when the Azure Resources extension update is released in the coming days. + +This release improves the user experience for developers in the Azure ecosystem by integrating directly with the **Azure Resources extension**. The DocumentDB extension now takes ownership of the **Azure Cosmos DB for MongoDB (RU)** and **(vCore)** nodes directly within the Azure resource tree. + +This collaboration provides a single, authoritative view for all your Azure resources while enriching the experience with the specialized MongoDB tooling that our extension provides. + +- **Unified Azure View**: Discover and manage your MongoDB resources directly within the familiar Azure Resources view without needing to switch between extensions. +- **Rich MongoDB Tooling**: Access all of DocumentDB for VS Code's features—like data exploration, query scrapbooks, and management commands—directly from the Azure tree. +- **Coordinated Orchestration**: The Azure Resources extension now directs which extension manages which resource, ensuring a stable and conflict-free experience. +- **Automatic Migration**: Existing MongoDB connections are automatically migrated for an efficient transition. + +### 2️⃣ **Service Discovery for Azure Cosmos DB for MongoDB (RU)** ([#244](https://github.com/microsoft/vscode-documentdb/issues/244)) + +We've expanded our service discovery capabilities by adding a dedicated provider for **Azure Cosmos DB for MongoDB (RU)** resources. This complements our existing vCore provider and makes connecting to RU-based accounts easier than ever. + +- **New Discovery Option**: A new "Azure Cosmos DB for MongoDB (RU)" provider is now available in the Discovery View. +- **Consistent User Experience**: The new provider uses the same authentication and wizard-based workflow (select subscription → select cluster → connect) that users are already familiar with. +- **Optimized for RU**: The provider uses RU-specific Azure APIs to ensure accurate and reliable discovery. + +[Learn more about Service Discovery →](../learn-more/service-discovery.md) + +### 3️⃣ **Official DocumentDB Logo and Branding** ([#246](https://github.com/microsoft/vscode-documentdb/pull/246)) + +The extension has been updated with the **official DocumentDB logo and branding**. This change provides better brand recognition and creates a more consistent visual identity across the DocumentDB ecosystem. You'll see the new logo in the VS Code activity bar, the marketplace, and throughout our documentation. + +## Key Fixes and Improvements + +#### 🐛 **Restored Password Support for Connection Strings** ([#247](https://github.com/microsoft/vscode-documentdb/pull/247)) + +We've fixed a regression that prevented users from creating new connections using a connection string with a password in certain configurations. The validation logic in the connection workflow has been improved to ensure all valid connection strings are handled correctly. + +#### 🛠️ **Improved Debugging with Enhanced Error Details** ([#236](https://github.com/microsoft/vscode-documentdb/pull/236)) + +As part of our commitment to stability, we've enhanced our internal error handling. `nonNull` checks now include file context in their error messages, making it significantly easier for our team to diagnose and triage reported issues. + +## Changelog + +See the full changelog entry for this release: +➡️ [CHANGELOG.md#040](https://github.com/microsoft/vscode-documentdb/blob/main/CHANGELOG.md#040) diff --git a/docs/release-notes/images/0.4.0_documentdb-logo.png b/docs/release-notes/images/0.4.0_documentdb-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5445c7d47a6dc62e00cb4a602a0c2beb0bb855ce GIT binary patch literal 26174 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 Date: Mon, 8 Sep 2025 11:20:47 +0200 Subject: [PATCH 76/81] added a screenshot to the v0.4 release notes --- docs/release-notes/0.4.md | 6 ++++-- .../images/0.4.0_azure_resources.png | Bin 0 -> 77752 bytes 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 docs/release-notes/images/0.4.0_azure_resources.png diff --git a/docs/release-notes/0.4.md b/docs/release-notes/0.4.md index 89ec1d374..09d2ae1c5 100644 --- a/docs/release-notes/0.4.md +++ b/docs/release-notes/0.4.md @@ -8,7 +8,7 @@ We are excited to announce the release of **DocumentDB for VS Code Extension v0.4**. This is a landmark update that introduces deep integration with the Azure ecosystem, adds powerful new service discovery capabilities, and aligns our branding with the official [DocumentDB](https://documentdb.io) identity. -DocumentDB Logo +

    DocumentDB Logo

    This release improves how developers working with Azure discover, connect to, and manage their MongoDB-compatible databases, all from within a unified VS Code experience. @@ -16,7 +16,7 @@ This release improves how developers working with Azure discover, connect to, an ### ⭐ **Deep Integration with the Azure Resources Extension** ([#58](https://github.com/microsoft/vscode-documentdb/issues/58)) -> **Note: This is a staged feature release.** +> **Note: This is a staged feature release** > > It is coordinated across three extensions: DocumentDB for VS Code, Azure Databases, and. > @@ -31,6 +31,8 @@ This collaboration provides a single, authoritative view for all your Azure reso - **Coordinated Orchestration**: The Azure Resources extension now directs which extension manages which resource, ensuring a stable and conflict-free experience. - **Automatic Migration**: Existing MongoDB connections are automatically migrated for an efficient transition. +

    Authentication Method Selection

    + ### 2️⃣ **Service Discovery for Azure Cosmos DB for MongoDB (RU)** ([#244](https://github.com/microsoft/vscode-documentdb/issues/244)) We've expanded our service discovery capabilities by adding a dedicated provider for **Azure Cosmos DB for MongoDB (RU)** resources. This complements our existing vCore provider and makes connecting to RU-based accounts easier than ever. diff --git a/docs/release-notes/images/0.4.0_azure_resources.png b/docs/release-notes/images/0.4.0_azure_resources.png new file mode 100644 index 0000000000000000000000000000000000000000..c4445b811be06b6b7f7014c14b4dcbc4fe8fb952 GIT binary patch literal 77752 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 literal 0 HcmV?d00001 From bfd5bf56072bbf332250d077b0cd693f1936d844 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 8 Sep 2025 11:26:28 +0200 Subject: [PATCH 77/81] docs: added missing documentation for the RU discovery provider --- ...discovery-azure-cosmosdb-for-mongodb-ru.md | 49 +++++++++++++++++++ docs/learn-more/service-discovery.md | 3 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 docs/learn-more/service-discovery-azure-cosmosdb-for-mongodb-ru.md diff --git a/docs/learn-more/service-discovery-azure-cosmosdb-for-mongodb-ru.md b/docs/learn-more/service-discovery-azure-cosmosdb-for-mongodb-ru.md new file mode 100644 index 000000000..3df3b4ff5 --- /dev/null +++ b/docs/learn-more/service-discovery-azure-cosmosdb-for-mongodb-ru.md @@ -0,0 +1,49 @@ + + + +> **Learn More** — [Back to Learn More Index](./index) + +--- + +# Azure CosmosDB for MongoDB (RU) Service Discovery Plugin + +The **Azure CosmosDB for MongoDB (RU)** plugin is available as part of the [Service Discovery](./service-discovery) feature in DocumentDB for VS Code. This plugin helps you find and connect to Azure Cosmos DB accounts provisioned with Request Units (RU) for the MongoDB API by handling authentication, resource discovery, and connection creation from inside the extension. + +## How to Access + +You can access this plugin in two ways: + +- From the `Service Discovery` panel in the extension sidebar. +- When adding a new connection, select the `Azure CosmosDB for MongoDB (RU)` option. + +![Service Discovery Activation](./images/service-discovery-activation.png) + +## How It Works + +When you use the Azure CosmosDB for MongoDB (RU) plugin, the extension performs the following steps: + +1. **Authentication:** + The plugin uses your Azure credentials available in VS Code. If needed, it will prompt you to sign in via the standard Azure sign-in flows. + +2. **Subscription Discovery:** + The plugin lists subscriptions available to your account so you can pick where to search for resources. + +3. **Account Discovery:** + The provider queries Azure using the CosmosDB Management Client and filters results by the MongoDB "kind" for RU-based accounts. This ensures the list contains accounts that support the MongoDB API under RU provisioning. + +4. **Connection Options:** + - Expand an account entry to view databases and connection options. + - Save an account to your `DocumentDB Connections` list using the context menu or the save icon next to its name. + - When connecting or saving, the extension will extract credentials or connection details from Azure where available. If multiple authentication methods are supported, you will be prompted to choose one. + +## Additional Notes + +- You can filter subscriptions in the Service Discovery panel to limit the scope of discovery if you have access to many subscriptions. +- The provider reuses shared authentication and subscription selection flows used across other Service Discovery plugins. +- If you save a discovered account, the saved connection will appear in your Connections view for later use. + +## Feedback and Contributions + +If you have suggestions for improving this provider or would like to add support for additional resource types, please [join the discussion board](https://github.com/microsoft/vscode-documentdb/discussions) and share your feedback. + +--- diff --git a/docs/learn-more/service-discovery.md b/docs/learn-more/service-discovery.md index f37b48bc0..07b621ffb 100644 --- a/docs/learn-more/service-discovery.md +++ b/docs/learn-more/service-discovery.md @@ -23,8 +23,9 @@ This approach allows you to connect to a variety of platforms without needing to ## Available Service Discovery Plugins -Currently, two service discovery plugins are available: +Currently, the following service discovery plugins are available: +- **[Azure CosmosDB for MongoDB (RU)](./service-discovery-azure-cosmosdb-for-mongodb-ru)** - **[Azure CosmosDB for MongoDB (vCore)](./service-discovery-azure-cosmosdb-for-mongodb-vcore)** - **[Azure VMs (DocumentDB)](./service-discovery-azure-vms)** From 9aac05df4276b96898f0b22b11032aaa738fe6a6 Mon Sep 17 00:00:00 2001 From: Tomasz Naumowicz Date: Mon, 8 Sep 2025 11:46:53 +0200 Subject: [PATCH 78/81] docs: updated walktrough screenshots (new product logo) --- resources/walkthroughs/browse.png | Bin 443307 -> 258690 bytes resources/walkthroughs/connect.png | Bin 224875 -> 319579 bytes resources/walkthroughs/sidebar.png | Bin 68609 -> 94194 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/walkthroughs/browse.png b/resources/walkthroughs/browse.png index fc453827741f83cc44782d78129e359bbae75128..b2b73310ad3bf576b33442db2696b7b78762cd3c 100644 GIT binary patch literal 258690 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 z�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 P_8&`vokf$GH~s$r0qmuo literal 443307 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�Nesj* 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

    3ZUiL<|%;R3Y! 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

    xU@lf2&^=3B??~+j?z$jPbDbB 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

    Lohpoe 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Ⓢe-o5(B6DoI#!dq00VMbmK$~&1S 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