mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-13 17:22:15 -05:00
Create shared access signature RPC (#18823)
* Rebase from main branch * Made mssql a module * remove rpc specific stuff * Added create sas RPC call * Backup to url works now * Moved createSas RPC to the BlobService * Relocated createSas RPC from sql-dataprotocolclient to the mssql * After rebase * Removed duplicate symbol * Renamed Blob to AzureBlob and relocated CreateSasResponse to mssql extension * Removed AzureBlobProvider, removed AzureBlobService feature * renamed blob to azureblob, converted thenable to promise * Simplify API * fixes * docs update, blob to azureblob update * bumped sts version * Fix config Co-authored-by: chgagnon <chgagnon@microsoft.com>
This commit is contained in:
committed by
GitHub
parent
e9fefd2487
commit
1cf905a7b8
@@ -212,6 +212,7 @@
|
||||
"restrictions": [
|
||||
"vs/nls",
|
||||
"azdata",
|
||||
"mssql",
|
||||
"azurecore",
|
||||
"**/{vs,sql}/base/common/**",
|
||||
"**/{vs,sql}/base/parts/*/common/**",
|
||||
@@ -473,6 +474,7 @@
|
||||
"restrictions": [
|
||||
"vscode",
|
||||
"azdata",
|
||||
"mssql",
|
||||
"azurecore",
|
||||
"vs/nls",
|
||||
"**/{vs,sql}/base/common/**",
|
||||
@@ -579,6 +581,7 @@
|
||||
"vs/nls",
|
||||
"vs/css!./**/*",
|
||||
"azdata",
|
||||
"mssql",
|
||||
"azurecore",
|
||||
"vscode",
|
||||
"**/{vs,sql}/base/**/{common,browser,worker}/**",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}",
|
||||
"version": "3.0.0-release.234",
|
||||
"version": "3.0.0-release.237",
|
||||
"downloadFileNames": {
|
||||
"Windows_86": "win-x86-net6.0.zip",
|
||||
"Windows_64": "win-x64-net6.0.zip",
|
||||
|
||||
26
extensions/mssql/src/azureBlob/azureBlobService.ts
Normal file
26
extensions/mssql/src/azureBlob/azureBlobService.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type * as mssql from 'mssql';
|
||||
import { SqlOpsDataClient } from 'dataprotocol-client';
|
||||
import * as contracts from '../contracts';
|
||||
|
||||
export class AzureBlobService implements mssql.IAzureBlobService {
|
||||
|
||||
public constructor(protected readonly client: SqlOpsDataClient) { }
|
||||
|
||||
public async createSas(ownerUri: string, blobContainerUri: string, blobContainerKey: string, storageAccountName: string, expirationDate: string): Promise<mssql.CreateSasResponse> {
|
||||
// This isn't registered as a feature since it's not something that we expect every tools client to implement currently since the usage is
|
||||
// specifically for ADS and SqlToolsService.
|
||||
const params: contracts.CreateSasParams = { ownerUri, blobContainerUri, blobContainerKey, storageAccountName, expirationDate };
|
||||
return this.client.sendRequest(contracts.CreateSasRequest.type, params).then(
|
||||
undefined,
|
||||
e => {
|
||||
this.client.logFailedRequest(contracts.CreateSasRequest.type, e);
|
||||
return Promise.resolve(undefined);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -43,6 +43,7 @@ export const objectExplorerPrefix: string = 'objectexplorer://';
|
||||
export const SqlAssessmentService = 'sqlAssessmentService';
|
||||
export const SqlMigrationService = 'sqlMigrationService';
|
||||
export const NotebookConvertService = 'notebookConvertService';
|
||||
export const AzureBlobService = 'azureBlobService';
|
||||
|
||||
export enum BuiltInCommands {
|
||||
SetContext = 'setContext'
|
||||
|
||||
@@ -1111,6 +1111,20 @@ export namespace DisposeTableDesignerRequest {
|
||||
}
|
||||
// ------------------------------- < Table Designer > ------------------------------------
|
||||
|
||||
// ------------------------------- < Azure Blob > ------------------------------------
|
||||
export interface CreateSasParams {
|
||||
ownerUri: string;
|
||||
blobContainerUri: string;
|
||||
blobContainerKey: string;
|
||||
storageAccountName: string;
|
||||
expirationDate: string;
|
||||
}
|
||||
|
||||
export namespace CreateSasRequest {
|
||||
export const type = new RequestType<CreateSasParams, mssql.CreateSasResponse, void, void>('blob/createSas');
|
||||
}
|
||||
|
||||
// ------------------------------- < Azure Blob > ------------------------------------
|
||||
|
||||
// ------------------------------- < Execution Plan > ------------------------------------
|
||||
|
||||
|
||||
19
extensions/mssql/src/mssql.d.ts
vendored
19
extensions/mssql/src/mssql.d.ts
vendored
@@ -48,6 +48,8 @@ declare module 'mssql' {
|
||||
readonly sqlAssessment: ISqlAssessmentService;
|
||||
|
||||
readonly sqlMigration: ISqlMigrationService;
|
||||
|
||||
readonly azureBlob: IAzureBlobService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -901,4 +903,21 @@ declare module 'mssql' {
|
||||
export interface ISqlMigrationService {
|
||||
getAssessments(ownerUri: string, databases: string[]): Promise<AssessmentResult | undefined>;
|
||||
}
|
||||
|
||||
export interface CreateSasResponse {
|
||||
sharedAccessSignature: string;
|
||||
}
|
||||
|
||||
export interface IAzureBlobService {
|
||||
/**
|
||||
* Create a shared access signature for the specified blob container URI and saves it to the server specified with the connectionUri
|
||||
* @param connectionUri The connection URI of the server to save the SAS to
|
||||
* @param blobContainerUri The blob container URI to create the SAS for
|
||||
* @param blobStorageKey The key used to access the storage account
|
||||
* @param storageAccountName The name of the storage account the SAS will be created for
|
||||
* @param expirationDate The expiration date of the SAS
|
||||
* @returns A created shared access signature token
|
||||
*/
|
||||
createSas(connectionUri: string, blobContainerUri: string, blobStorageKey: string, storageAccountName: string, expirationDate: string): Promise<CreateSasResponse>;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { AppContext } from './appContext';
|
||||
import { IExtension, ICmsService, IDacFxService, ISchemaCompareService, MssqlObjectExplorerBrowser, ILanguageExtensionService, ISqlAssessmentService, ISqlMigrationService } from 'mssql';
|
||||
import { IExtension, ICmsService, IDacFxService, ISchemaCompareService, MssqlObjectExplorerBrowser, ILanguageExtensionService, ISqlAssessmentService, ISqlMigrationService, IAzureBlobService } from 'mssql';
|
||||
import * as constants from './constants';
|
||||
import { MssqlObjectExplorerNodeProvider } from './objectExplorerNodeProvider/objectExplorerNodeProvider';
|
||||
import * as azdata from 'azdata';
|
||||
@@ -40,6 +40,9 @@ export function createMssqlApi(context: AppContext, sqlToolsServer: SqlToolsServ
|
||||
},
|
||||
get sqlMigration() {
|
||||
return context.getService<ISqlMigrationService>(constants.SqlMigrationService);
|
||||
},
|
||||
get azureBlob() {
|
||||
return context.getService<IAzureBlobService>(constants.AzureBlobService);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import { SqlAssessmentService } from './sqlAssessment/sqlAssessmentService';
|
||||
import { NotebookConvertService } from './notebookConvert/notebookConvertService';
|
||||
import { SqlMigrationService } from './sqlMigration/sqlMigrationService';
|
||||
import { SqlCredentialService } from './credentialstore/sqlCredentialService';
|
||||
import { AzureBlobService } from './azureBlob/azureBlobService';
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
const outputChannel = vscode.window.createOutputChannel(Constants.serviceName);
|
||||
@@ -91,6 +92,7 @@ export class SqlToolsServer {
|
||||
const resourceProvider = new AzureResourceProvider(context.extensionContext.logPath, this.config);
|
||||
this.disposables.push(credsStore);
|
||||
this.disposables.push(resourceProvider);
|
||||
context.registerService(Constants.AzureBlobService, new AzureBlobService(this.client));
|
||||
return Promise.all([credsStore.start(), resourceProvider.start()]).then();
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import * as path from 'path';
|
||||
import * as TypeMoq from 'typemoq';
|
||||
import * as mssql from 'mssql';
|
||||
|
||||
|
||||
export interface TestContext {
|
||||
context: vscode.ExtensionContext;
|
||||
dacFxService: TypeMoq.IMock<mssql.IDacFxService>;
|
||||
|
||||
24
src/sql/platform/azureBlob/common/azureBlobService.ts
Normal file
24
src/sql/platform/azureBlob/common/azureBlobService.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||
import type * as mssql from 'mssql';
|
||||
|
||||
export const SERVICE_ID = 'azureBlobService';
|
||||
|
||||
export const IAzureBlobService = createDecorator<IAzureBlobService>(SERVICE_ID);
|
||||
|
||||
export interface IAzureBlobService {
|
||||
_serviceBrand: undefined;
|
||||
/**
|
||||
* Create a shared access signature for the specified blob container URI and saves it to the server specified with the connectionUri
|
||||
* @param connectionUri The connection URI of the server to save the SAS to
|
||||
* @param blobContainerUri The blob container URI to create the SAS for
|
||||
* @param blobStorageKey The key used to access the storage account
|
||||
* @param storageAccountName The name of the storage account the SAS will be created for
|
||||
* @param expirationDate The expiration date of the SAS
|
||||
* @returns A created shared access signature token
|
||||
*/
|
||||
createSas(connectionUri: string, blobContainerUri: string, blobStorageKey: string, storageAccountName: string, expirationDate: string): Promise<mssql.CreateSasResponse>;
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import './mainThreadAzureBlob';
|
||||
import './mainThreadAzureAccount';
|
||||
import './mainThreadAccountManagement';
|
||||
import './mainThreadBackgroundTaskManagement';
|
||||
|
||||
36
src/sql/workbench/api/browser/mainThreadAzureBlob.ts
Normal file
36
src/sql/workbench/api/browser/mainThreadAzureBlob.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type * as mssql from 'mssql';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import {
|
||||
ExtHostAzureBlobShape,
|
||||
MainThreadAzureBlobShape,
|
||||
SqlExtHostContext,
|
||||
SqlMainContext
|
||||
} from 'sql/workbench/api/common/sqlExtHost.protocol';
|
||||
import { IExtHostContext } from 'vs/workbench/api/common/extHost.protocol';
|
||||
import { extHostNamedCustomer } from 'vs/workbench/api/common/extHostCustomers';
|
||||
import { IAzureBlobService } from 'sql/platform/azureBlob/common/azureBlobService';
|
||||
import { AzureBlobService } from 'sql/workbench/services/azureBlob/browser/azureBlobService';
|
||||
|
||||
@extHostNamedCustomer(SqlMainContext.MainThreadAzureBlob)
|
||||
export class MainThreadAzureBlob extends Disposable implements MainThreadAzureBlobShape {
|
||||
private _proxy: ExtHostAzureBlobShape;
|
||||
public _serviceBrand: undefined;
|
||||
|
||||
constructor(
|
||||
extHostContext: IExtHostContext,
|
||||
@IAzureBlobService azureBlobService: IAzureBlobService
|
||||
) {
|
||||
super();
|
||||
this._proxy = extHostContext.getProxy(SqlExtHostContext.ExtHostAzureBlob);
|
||||
(azureBlobService as AzureBlobService).registerProxy(this);
|
||||
}
|
||||
|
||||
public createSas(connectionUri: string, blobContainerUri: string, blobStorageKey: string, storageAccountName: string, expirationDate: string): Thenable<mssql.CreateSasResponse> {
|
||||
return this._proxy.$createSas(connectionUri, blobContainerUri, blobStorageKey, storageAccountName, expirationDate);
|
||||
}
|
||||
}
|
||||
24
src/sql/workbench/api/common/extHostAzureBlob.ts
Normal file
24
src/sql/workbench/api/common/extHostAzureBlob.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as mssql from 'mssql';
|
||||
import { ExtHostAzureBlobShape } from 'sql/workbench/api/common/sqlExtHost.protocol';
|
||||
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
|
||||
import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
|
||||
|
||||
export class ExtHostAzureBlob extends ExtHostAzureBlobShape {
|
||||
constructor(@IExtHostExtensionService private _extHostExtensionService: IExtHostExtensionService,) {
|
||||
super();
|
||||
}
|
||||
|
||||
public override $createSas(connectionUri: string, blobContainerUri: string, blobStorageKey: string, storageAccountName: string, expirationDate: string): Thenable<mssql.CreateSasResponse> {
|
||||
const api = this.getApi();
|
||||
return api.azureBlob.createSas(connectionUri, blobContainerUri, blobStorageKey, storageAccountName, expirationDate);
|
||||
}
|
||||
|
||||
private getApi(): mssql.IExtension {
|
||||
return this._extHostExtensionService.getExtensionExports(new ExtensionIdentifier(mssql.extension.name)) as mssql.IExtension;
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,7 @@ import { ExtHostWorkspace } from 'sql/workbench/api/common/extHostWorkspace';
|
||||
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { ITelemetryEventProperties } from 'sql/platform/telemetry/common/telemetry';
|
||||
import { ExtHostAzureBlob } from 'sql/workbench/api/common/extHostAzureBlob';
|
||||
import { ExtHostAzureAccount } from 'sql/workbench/api/common/extHostAzureAccount';
|
||||
import { IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
|
||||
|
||||
@@ -82,6 +83,7 @@ export function createAdsApiFactory(accessor: ServicesAccessor): IAdsExtensionAp
|
||||
rpcProtocol.set(SqlExtHostContext.ExtHostAzureAccount, new ExtHostAzureAccount(accessor.get(IExtHostExtensionService)));
|
||||
const extHostConnectionManagement = rpcProtocol.set(SqlExtHostContext.ExtHostConnectionManagement, new ExtHostConnectionManagement(rpcProtocol));
|
||||
const extHostCredentialManagement = rpcProtocol.set(SqlExtHostContext.ExtHostCredentialManagement, new ExtHostCredentialManagement(rpcProtocol));
|
||||
rpcProtocol.set(SqlExtHostContext.ExtHostAzureBlob, new ExtHostAzureBlob(accessor.get(IExtHostExtensionService)));
|
||||
const extHostDataProvider = rpcProtocol.set(SqlExtHostContext.ExtHostDataProtocol, new ExtHostDataProtocol(rpcProtocol, uriTransformer));
|
||||
const extHostObjectExplorer = rpcProtocol.set(SqlExtHostContext.ExtHostObjectExplorer, new ExtHostObjectExplorer(rpcProtocol, commands));
|
||||
const extHostResourceProvider = rpcProtocol.set(SqlExtHostContext.ExtHostResourceProvider, new ExtHostResourceProvider(rpcProtocol));
|
||||
|
||||
@@ -14,6 +14,7 @@ import { IDisposable } from 'vs/base/common/lifecycle';
|
||||
import type * as azdata from 'azdata';
|
||||
import type * as vscode from 'vscode';
|
||||
import type * as azurecore from 'azurecore';
|
||||
import type * as mssql from 'mssql';
|
||||
|
||||
import { ITreeComponentItem } from 'sql/workbench/common/views';
|
||||
import { ITaskHandlerDescription } from 'sql/workbench/services/tasks/common/tasks';
|
||||
@@ -31,6 +32,9 @@ import { EditorViewColumn } from 'vs/workbench/api/common/shared/editor';
|
||||
import { TreeDataTransferDTO } from 'vs/workbench/api/common/shared/treeDataTransfer';
|
||||
import { ITelemetryEventProperties } from 'sql/platform/telemetry/common/telemetry';
|
||||
|
||||
export abstract class ExtHostAzureBlobShape {
|
||||
public $createSas(connectionUri: string, blobContainerUri: string, blobStorageKey: string, storageAccountName: string, expirationDate: string): Thenable<mssql.CreateSasResponse> { throw ni(); }
|
||||
}
|
||||
export abstract class ExtHostAzureAccountShape {
|
||||
public $getSubscriptions(account: azurecore.AzureAccount, ignoreErrors?: boolean, selectedOnly?: boolean): Thenable<azurecore.GetSubscriptionsResult> { throw ni(); }
|
||||
}
|
||||
@@ -617,6 +621,9 @@ export interface MainThreadAccountManagementShape extends IDisposable {
|
||||
$getAccountsForProvider(providerId: string): Thenable<azdata.Account[]>;
|
||||
}
|
||||
|
||||
export interface MainThreadAzureBlobShape extends IDisposable {
|
||||
|
||||
}
|
||||
export interface MainThreadAzureAccountShape extends IDisposable {
|
||||
|
||||
}
|
||||
@@ -724,6 +731,7 @@ export const SqlMainContext = {
|
||||
MainThreadNotebookDocumentsAndEditors: createMainId<MainThreadNotebookDocumentsAndEditorsShape>('MainThreadNotebookDocumentsAndEditors'),
|
||||
MainThreadExtensionManagement: createMainId<MainThreadExtensionManagementShape>('MainThreadExtensionManagement'),
|
||||
MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace'),
|
||||
MainThreadAzureBlob: createMainId<MainThreadAzureBlobShape>('MainThreadAzureBlob'),
|
||||
};
|
||||
|
||||
export const SqlExtHostContext = {
|
||||
@@ -747,6 +755,7 @@ export const SqlExtHostContext = {
|
||||
ExtHostNotebookDocumentsAndEditors: createExtId<ExtHostNotebookDocumentsAndEditorsShape>('ExtHostNotebookDocumentsAndEditors'),
|
||||
ExtHostExtensionManagement: createExtId<ExtHostExtensionManagementShape>('ExtHostExtensionManagement'),
|
||||
ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace'),
|
||||
ExtHostAzureBlob: createExtId<ExtHostAzureBlobShape>('ExtHostAzureBlob')
|
||||
};
|
||||
|
||||
export interface MainThreadDashboardShape extends IDisposable {
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as mssql from 'mssql';
|
||||
import { IAzureBlobService } from 'sql/platform/azureBlob/common/azureBlobService';
|
||||
import { MainThreadAzureBlob } from 'sql/workbench/api/browser/mainThreadAzureBlob';
|
||||
|
||||
export class AzureBlobService implements IAzureBlobService {
|
||||
|
||||
public _serviceBrand: undefined;
|
||||
private _proxy: MainThreadAzureBlob;
|
||||
|
||||
/**
|
||||
* Internal use only, do not call! This is called once on startup by the proxy object used
|
||||
* to communicate with the extension host once it's been created.
|
||||
* @param proxy The proxy to use to communicate with the mssql extension
|
||||
*/
|
||||
public registerProxy(proxy: MainThreadAzureBlob) {
|
||||
this._proxy = proxy;
|
||||
}
|
||||
|
||||
public createSas(connectionUri: string, blobContainerUri: string, blobContainerKey: string, storageAccountName: string, expirationDate: string): Promise<mssql.CreateSasResponse> {
|
||||
this.checkProxy();
|
||||
return Promise.resolve(this._proxy.createSas(connectionUri, blobContainerUri, blobContainerKey, storageAccountName, expirationDate));
|
||||
}
|
||||
|
||||
private checkProxy(): void {
|
||||
if (!this._proxy) {
|
||||
throw new Error('Azure Blob proxy not initialized');
|
||||
}
|
||||
}
|
||||
}
|
||||
1
src/typings/refs.d.ts
vendored
1
src/typings/refs.d.ts
vendored
@@ -4,3 +4,4 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
/// <reference path='../../extensions/azurecore/src/azurecore.d.ts' />
|
||||
/// <reference path='../../extensions/mssql/src/mssql.d.ts' />
|
||||
|
||||
@@ -180,6 +180,8 @@ import { IJobManagementService } from 'sql/workbench/services/jobManagement/comm
|
||||
import { JobManagementService } from 'sql/workbench/services/jobManagement/common/jobManagementService';
|
||||
import { IBackupService } from 'sql/platform/backup/common/backupService';
|
||||
import { BackupService } from 'sql/platform/backup/common/backupServiceImp';
|
||||
import { IAzureBlobService } from 'sql/platform/azureBlob/common/azureBlobService';
|
||||
import { AzureBlobService } from 'sql/workbench/services/azureBlob/browser/azureBlobService';
|
||||
import { IBackupUiService } from 'sql/workbench/contrib/backup/common/backupUiService';
|
||||
import { BackupUiService } from 'sql/workbench/contrib/backup/browser/backupUiService';
|
||||
import { IRestoreDialogController, IRestoreService } from 'sql/workbench/services/restore/common/restoreService';
|
||||
@@ -229,6 +231,7 @@ registerSingleton(IMetadataService, MetadataService);
|
||||
registerSingleton(IAdminService, AdminService);
|
||||
registerSingleton(IJobManagementService, JobManagementService);
|
||||
registerSingleton(IBackupService, BackupService);
|
||||
registerSingleton(IAzureBlobService, AzureBlobService);
|
||||
registerSingleton(IBackupUiService, BackupUiService);
|
||||
registerSingleton(IScriptingService, ScriptingService);
|
||||
registerSingleton(IRestoreService, RestoreService);
|
||||
|
||||
@@ -84,12 +84,15 @@ import { IClipboardService as sqlIClipboardService } from 'sql/platform/clipboar
|
||||
import { ClipboardService as sqlClipboardService } from 'sql/platform/clipboard/electron-browser/clipboardService';
|
||||
import { IQueryHistoryService } from 'sql/workbench/services/queryHistory/common/queryHistoryService';
|
||||
import { QueryHistoryService } from 'sql/workbench/services/queryHistory/common/queryHistoryServiceImpl';
|
||||
import { IAzureBlobService } from 'sql/platform/azureBlob/common/azureBlobService';
|
||||
import { AzureBlobService } from 'sql/workbench/services/azureBlob/browser/azureBlobService';
|
||||
import { IAzureAccountService } from 'sql/platform/azureAccount/common/azureAccountService';
|
||||
import { AzureAccountService } from 'sql/workbench/services/azureAccount/browser/azureAccountService';
|
||||
|
||||
registerSingleton(ISqlOAuthService, SqlOAuthService);
|
||||
registerSingleton(sqlIClipboardService, sqlClipboardService);
|
||||
registerSingleton(IQueryHistoryService, QueryHistoryService);
|
||||
registerSingleton(IAzureBlobService, AzureBlobService);
|
||||
registerSingleton(IAzureAccountService, AzureAccountService);
|
||||
// {{SQL CARBON EDIT}} - End
|
||||
|
||||
|
||||
Reference in New Issue
Block a user