/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import * as vscode from 'vscode'; import * as azdata from 'azdata'; import { CommandContext, BuiltInCommands } from './constants'; /** * Wrapper class to act as a facade over VSCode and Data APIs and allow us to test / mock callbacks into * this API from our code */ export class ApiWrapper { public createOutputChannel(name: string): vscode.OutputChannel { return vscode.window.createOutputChannel(name); } public createTerminalWithOptions(options: vscode.TerminalOptions): vscode.Terminal { return vscode.window.createTerminal(options); } public getCurrentConnection(): Thenable { return azdata.connection.getCurrentConnection(); } public getWorkspacePathFromUri(uri: vscode.Uri): string | undefined { let workspaceFolder = vscode.workspace.getWorkspaceFolder(uri); return workspaceFolder ? workspaceFolder.uri.fsPath : undefined; } public registerCommand(command: string, callback: (...args: any[]) => any, thisArg?: any): vscode.Disposable { return vscode.commands.registerCommand(command, callback, thisArg); } public registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, ...triggerCharacters: string[]): vscode.Disposable { return vscode.languages.registerCompletionItemProvider(selector, provider, ...triggerCharacters); } public registerTaskHandler(taskId: string, handler: (profile: azdata.IConnectionProfile) => void): void { azdata.tasks.registerTask(taskId, handler); } public showErrorMessage(message: string, ...items: string[]): Thenable { return vscode.window.showErrorMessage(message, ...items); } public showInfoMessage(message: string, ...items: string[]): Thenable { return vscode.window.showInformationMessage(message, ...items); } public showOpenDialog(options: vscode.OpenDialogOptions): Thenable { return vscode.window.showOpenDialog(options); } public startBackgroundOperation(operationInfo: azdata.BackgroundOperationInfo): void { azdata.tasks.startBackgroundOperation(operationInfo); } public setCommandContext(key: CommandContext | string, value: any): Thenable { return vscode.commands.executeCommand(BuiltInCommands.SetContext, key, value); } /** * Get the configuration for a extensionName * @param extensionName The string name of the extension to get the configuration for * @param resource The optional URI, as a URI object or a string, to use to get resource-scoped configurations */ public getConfiguration(extensionName?: string, resource?: vscode.Uri | string): vscode.WorkspaceConfiguration { if (typeof resource === 'string') { try { resource = this.parseUri(resource); } catch (e) { resource = undefined; } } else if (!resource) { // Fix to avoid adding lots of errors to debug console. Expects a valid resource or null, not undefined resource = null; } return vscode.workspace.getConfiguration(extensionName, resource as vscode.Uri); } public parseUri(uri: string): vscode.Uri { return vscode.Uri.parse(uri); } }