in src/commands/api/pickTreeItem.ts [63:118]
export async function pickTreeItem(options: PickTreeItemOptions): Promise<DatabaseTreeItem | DatabaseAccountTreeItem | undefined> {
return await callWithTelemetryAndErrorHandling('api.pickTreeItem', async (context: IActionContext) => {
context.errorHandling.suppressDisplay = true;
context.errorHandling.rethrow = true;
let contextValuesToFind;
switch (options.resourceType) {
case 'Database':
contextValuesToFind = options.apiType ? options.apiType.map(getDatabaseContextValue) : databaseContextValues;
break;
case 'DatabaseAccount':
contextValuesToFind = options.apiType ? options.apiType.map(getAccountContextValue) : accountContextValues;
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
contextValuesToFind = contextValuesToFind.concat(contextValuesToFind.map((val: string) => val + AttachedAccountSuffix));
break;
default:
throw new RangeError(`Unsupported resource type "${options.resourceType}".`);
}
const pickedItem = await ext.tree.showTreeItemPicker(contextValuesToFind, context);
let parsedCS: ParsedConnectionString;
let accountNode: MongoAccountTreeItem | DocDBAccountTreeItemBase | PostgresServerTreeItem;
let databaseNode: MongoDatabaseTreeItem | DocDBDatabaseTreeItemBase | PostgresDatabaseTreeItem | undefined;
if (pickedItem instanceof MongoAccountTreeItem) {
parsedCS = await parseMongoConnectionString(pickedItem.connectionString);
accountNode = pickedItem;
} else if (pickedItem instanceof DocDBAccountTreeItemBase) {
parsedCS = parseDocDBConnectionString(pickedItem.connectionString);
accountNode = pickedItem;
} else if (pickedItem instanceof PostgresServerTreeItem) {
parsedCS = await pickedItem.getFullConnectionString();
accountNode = pickedItem;
} else if (pickedItem instanceof MongoDatabaseTreeItem) {
parsedCS = await parseMongoConnectionString(pickedItem.connectionString);
accountNode = pickedItem.parent;
databaseNode = pickedItem;
} else if (pickedItem instanceof DocDBDatabaseTreeItemBase) {
parsedCS = parseDocDBConnectionString(pickedItem.connectionString);
accountNode = pickedItem.parent;
databaseNode = pickedItem;
} else if (pickedItem instanceof PostgresDatabaseTreeItem) {
parsedCS = await pickedItem.parent.getFullConnectionString();
accountNode = pickedItem.parent;
databaseNode = pickedItem;
} else {
throw new RangeError(localize('invalidItem', 'Invalid item "{0}".', pickedItem.constructor.name));
}
const result = databaseNode ?
new DatabaseTreeItemInternal(parsedCS, databaseNode.databaseName, accountNode, databaseNode) :
new DatabaseAccountTreeItemInternal(parsedCS, accountNode);
cacheTreeItem(parsedCS, result);
return result;
});
}