mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-13 17:22:15 -05:00
Code refactoring for extension testing (#10529)
* Setting up tests on import extension * -Added API wrappers for all the azdata and vscode APIs to make them easily mockable -Added some unit tests for the import extension -Some code logic separations * -added code report for the import extension in ci * Did some more code refractoring * -Added json report generation * updated vscodetestcoverage to latest version in import extension. * -remove duplicate codecoverageConfig.json
This commit is contained in:
20
extensions/import/coverConfig.json
Normal file
20
extensions/import/coverConfig.json
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"relativeSourcePath": "..",
|
||||||
|
"relativeCoverageDir": "../../coverage",
|
||||||
|
"ignorePatterns": [
|
||||||
|
"**/node_modules/**",
|
||||||
|
"**/test/**"
|
||||||
|
],
|
||||||
|
"includePid": false,
|
||||||
|
"reports": [
|
||||||
|
"cobertura",
|
||||||
|
"lcov",
|
||||||
|
"json"
|
||||||
|
],
|
||||||
|
"verbose": false,
|
||||||
|
"remapOptions": {
|
||||||
|
"basePath": "..",
|
||||||
|
"useAbsolutePaths": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -68,10 +68,17 @@
|
|||||||
"htmlparser2": "^3.10.1",
|
"htmlparser2": "^3.10.1",
|
||||||
"service-downloader": "0.2.1",
|
"service-downloader": "0.2.1",
|
||||||
"vscode-extension-telemetry": "0.0.18",
|
"vscode-extension-telemetry": "0.0.18",
|
||||||
"vscode-nls": "^3.2.1"
|
"vscode-nls": "^3.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^12.11.7"
|
"@types/mocha": "^5.2.5",
|
||||||
|
"@types/node": "^12.11.7",
|
||||||
|
"mocha": "^5.2.0",
|
||||||
|
"mocha-junit-reporter": "^1.17.0",
|
||||||
|
"mocha-multi-reporters": "^1.1.7",
|
||||||
|
"should": "^13.2.1",
|
||||||
|
"typemoq": "^2.1.0",
|
||||||
|
"vscodetestcover": "^1.0.9"
|
||||||
},
|
},
|
||||||
"__metadata": {
|
"__metadata": {
|
||||||
"id": "23",
|
"id": "23",
|
||||||
|
|||||||
88
extensions/import/src/common/apiWrapper.ts
Normal file
88
extensions/import/src/common/apiWrapper.ts
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* 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';
|
||||||
|
/**
|
||||||
|
* 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 getExtension(extensionId: string): vscode.Extension<any> | undefined {
|
||||||
|
return vscode.extensions.getExtension(extensionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getUriForConnection(connectionId: string): Thenable<string> {
|
||||||
|
return azdata.connection.getUriForConnection(connectionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getProvider<T extends azdata.DataProvider>(providerId: string, providerType: azdata.DataProviderType): T {
|
||||||
|
return azdata.dataprotocol.getProvider<T>(providerId, providerType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getCurrentConnection(): Thenable<azdata.connection.ConnectionProfile> {
|
||||||
|
return azdata.connection.getCurrentConnection();
|
||||||
|
}
|
||||||
|
|
||||||
|
public openConnectionDialog(providers?: string[]): Thenable<azdata.connection.Connection> {
|
||||||
|
return azdata.connection.openConnectionDialog(providers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public showErrorMessage(message: string, ...items: string[]): Thenable<string | undefined> {
|
||||||
|
return vscode.window.showErrorMessage(message, ...items);
|
||||||
|
}
|
||||||
|
|
||||||
|
public createWizard(title: string): azdata.window.Wizard {
|
||||||
|
return azdata.window.createWizard(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
public createWizardPage(title: string): azdata.window.WizardPage {
|
||||||
|
return azdata.window.createWizardPage(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
public createButton(lable: string) {
|
||||||
|
return azdata.window.createButton(lable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public showOpenDialog(options: vscode.OpenDialogOptions): Thenable<vscode.Uri[] | undefined> {
|
||||||
|
return vscode.window.showOpenDialog(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getActiveConnections(): Thenable<azdata.connection.Connection[]> {
|
||||||
|
return azdata.connection.getActiveConnections();
|
||||||
|
}
|
||||||
|
|
||||||
|
public listDatabases(connectionId: string): Thenable<string[]> {
|
||||||
|
return azdata.connection.listDatabases(connectionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public openExternal(target: vscode.Uri): Thenable<boolean> {
|
||||||
|
return vscode.env.openExternal(target);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getConfiguration(section?: string, resource?: vscode.Uri | null): vscode.WorkspaceConfiguration {
|
||||||
|
return vscode.workspace.getConfiguration(section, resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
public registerTask(task: string, callback: azdata.tasks.ITaskHandler) {
|
||||||
|
azdata.tasks.registerTask(task, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getCredentials(connectionId: string) {
|
||||||
|
return azdata.connection.getCredentials(connectionId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public getConnectionString(connectionId: string, includePassword: boolean) {
|
||||||
|
return azdata.connection.getConnectionString(connectionId, includePassword);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
60
extensions/import/src/common/constants.ts
Normal file
60
extensions/import/src/common/constants.ts
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
import * as nls from 'vscode-nls';
|
||||||
|
const localize = nls.loadMessageBundle();
|
||||||
|
|
||||||
|
export const extensionConfigSectionName = 'flatFileImport';
|
||||||
|
export const serviceName = 'Flat File Import Service';
|
||||||
|
export const providerId = 'FlatFileImport';
|
||||||
|
export const configLogDebugInfo = 'logDebugInfo';
|
||||||
|
export const sqlConfigSectionName = 'sql';
|
||||||
|
export const mssqlProvider = 'MSSQL';
|
||||||
|
|
||||||
|
export const supportedProviders = [mssqlProvider];
|
||||||
|
|
||||||
|
// Links
|
||||||
|
export const serviceCrashLink = 'https://github.com/Microsoft/azuredatastudio/issues/2090';
|
||||||
|
|
||||||
|
// Tasks
|
||||||
|
export const flatFileImportStartCommand = 'flatFileImport.start';
|
||||||
|
|
||||||
|
// Localized texts
|
||||||
|
export const crashButtonText = localize('import.serviceCrashButton', "Give Feedback");
|
||||||
|
export const serviceCrashMessageText = localize('serviceCrashMessage', "service component could not start");
|
||||||
|
export const serverDropDownTitleText = localize('flatFileImport.serverDropdownTitle', "Server the database is in");
|
||||||
|
export const databaseDropdownTitleText = localize('flatFileImport.databaseDropdownTitle', "Database the table is created in");
|
||||||
|
export const browseFilesText = localize('flatFileImport.browseFiles', "Browse");
|
||||||
|
export const openFileText = localize('flatFileImport.openFile', "Open");
|
||||||
|
export const fileTextboxTitleText = localize('flatFileImport.fileTextboxTitle', "Location of the file to be imported");
|
||||||
|
export const tableTextboxTitleText = localize('flatFileImport.tableTextboxTitle', "New table name");
|
||||||
|
export const schemaTextboxTitleText = localize('flatFileImport.schemaTextboxTitle', "Table schema");
|
||||||
|
export const importDataText = localize('flatFileImport.importData', "Import Data");
|
||||||
|
export const nextText = localize('flatFileImport.next', "Next");
|
||||||
|
export const columnNameText = localize('flatFileImport.columnName', "Column Name");
|
||||||
|
export const dataTypeText = localize('flatFileImport.dataType', "Data Type");
|
||||||
|
export const primaryKeyText = localize('flatFileImport.primaryKey', "Primary Key");
|
||||||
|
export const allowNullsText = localize('flatFileImport.allowNulls', "Allow Nulls");
|
||||||
|
export const successTitleText = localize('flatFileImport.prosePreviewMessage', "This operation analyzed the input file structure to generate the preview below for up to the first 50 rows.");
|
||||||
|
export const failureTitleText = localize('flatFileImport.prosePreviewMessageFail', "This operation was unsuccessful. Please try a different input file.");
|
||||||
|
export const refreshText = localize('flatFileImport.refresh', "Refresh");
|
||||||
|
export const importInformationText = localize('flatFileImport.importInformation', "Import information");
|
||||||
|
export const importStatusText = localize('flatFileImport.importStatus', "Import status");
|
||||||
|
export const serverNameText = localize('flatFileImport.serverName', "Server name");
|
||||||
|
export const databaseText = localize('flatFileImport.databaseName', "Database name");
|
||||||
|
export const tableNameText = localize('flatFileImport.tableName', "Table name");
|
||||||
|
export const tableSchemaText = localize('flatFileImport.tableSchema', "Table schema");
|
||||||
|
export const fileImportText = localize('flatFileImport.fileImport', "File to be imported");
|
||||||
|
export const updateText = localize('flatFileImport.success.norows', "✔ You have successfully inserted the data into a table.");
|
||||||
|
export const needConnectionText = localize('import.needConnection', "Please connect to a server before using this wizard.");
|
||||||
|
export const needSqlConnectionText = localize('import.needSQLConnection', "SQL Server Import extension does not support this type of connection");
|
||||||
|
export const wizardNameText = localize('flatFileImport.wizardName', "Import flat file wizard");
|
||||||
|
export const page1NameText = localize('flatFileImport.page1Name', "Specify Input File");
|
||||||
|
export const page2NameText = localize('flatFileImport.page2Name', "Preview Data");
|
||||||
|
export const page3NameText = localize('flatFileImport.page3Name', "Modify Columns");
|
||||||
|
export const page4NameText = localize('flatFileImport.page4Name', "Summary");
|
||||||
|
export const importNewFileText = localize('flatFileImport.importNewFile', "Import new file");
|
||||||
|
|
||||||
|
// SQL Queries
|
||||||
|
export const selectSchemaQuery = `SELECT name FROM sys.schemas`;
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------------------------
|
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
||||||
*--------------------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
export const extensionConfigSectionName = 'flatFileImport';
|
|
||||||
export const serviceName = 'Flat File Import Service';
|
|
||||||
export const providerId = 'FlatFileImport';
|
|
||||||
export const configLogDebugInfo = 'logDebugInfo';
|
|
||||||
export const sqlConfigSectionName = 'sql';
|
|
||||||
|
|
||||||
export const serviceCrashLink = 'https://github.com/Microsoft/azuredatastudio/issues/2090';
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as constants from '../constants';
|
import * as constants from '../common/constants';
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import ControllerBase from './controllerBase';
|
import ControllerBase from './controllerBase';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
@@ -11,14 +11,22 @@ import { FlatFileWizard } from '../wizard/flatFileWizard';
|
|||||||
import { ServiceClient } from '../services/serviceClient';
|
import { ServiceClient } from '../services/serviceClient';
|
||||||
import { ApiType, managerInstance } from '../services/serviceApiManager';
|
import { ApiType, managerInstance } from '../services/serviceApiManager';
|
||||||
import { FlatFileProvider } from '../services/contracts';
|
import { FlatFileProvider } from '../services/contracts';
|
||||||
|
import { ApiWrapper } from '../common/apiWrapper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main controller class that initializes the extension
|
* The main controller class that initializes the extension
|
||||||
*/
|
*/
|
||||||
export default class MainController extends ControllerBase {
|
export default class MainController extends ControllerBase {
|
||||||
|
private _outputChannel: vscode.OutputChannel;
|
||||||
|
private _apiWrapper: ApiWrapper;
|
||||||
|
|
||||||
public constructor(context: vscode.ExtensionContext) {
|
public constructor(
|
||||||
|
context: vscode.ExtensionContext,
|
||||||
|
apiWrapper: ApiWrapper
|
||||||
|
) {
|
||||||
super(context);
|
super(context);
|
||||||
|
this._apiWrapper = apiWrapper;
|
||||||
|
this._outputChannel = this._apiWrapper.createOutputChannel(constants.serviceName);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
@@ -27,18 +35,17 @@ export default class MainController extends ControllerBase {
|
|||||||
|
|
||||||
public async activate(): Promise<boolean> {
|
public async activate(): Promise<boolean> {
|
||||||
return new Promise<boolean>(async (resolve) => {
|
return new Promise<boolean>(async (resolve) => {
|
||||||
const outputChannel = vscode.window.createOutputChannel(constants.serviceName);
|
|
||||||
managerInstance.onRegisteredApi<FlatFileProvider>(ApiType.FlatFileProvider)(provider => {
|
managerInstance.onRegisteredApi<FlatFileProvider>(ApiType.FlatFileProvider)(provider => {
|
||||||
this.initializeFlatFileProvider(provider);
|
this.initializeFlatFileProvider(provider);
|
||||||
resolve(true);
|
resolve(true);
|
||||||
});
|
});
|
||||||
await new ServiceClient(outputChannel).startService(this._context);
|
await new ServiceClient(this._outputChannel, this._apiWrapper).startService(this._context);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private initializeFlatFileProvider(provider: FlatFileProvider) {
|
private initializeFlatFileProvider(provider: FlatFileProvider) {
|
||||||
azdata.tasks.registerTask('flatFileImport.start', (profile: azdata.IConnectionProfile, ...args: any[]) => new FlatFileWizard(provider).start(profile, args));
|
this._apiWrapper.registerTask(constants.flatFileImportStartCommand, (profile: azdata.IConnectionProfile, ...args: any[]) => new FlatFileWizard(provider, this._apiWrapper).start(profile, args));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,16 +7,20 @@ import * as vscode from 'vscode';
|
|||||||
|
|
||||||
import ControllerBase from './controllers/controllerBase';
|
import ControllerBase from './controllers/controllerBase';
|
||||||
import MainController from './controllers/mainController';
|
import MainController from './controllers/mainController';
|
||||||
|
import { ApiWrapper } from './common/apiWrapper';
|
||||||
|
|
||||||
let controllers: ControllerBase[] = [];
|
let controllers: ControllerBase[] = [];
|
||||||
|
|
||||||
export async function activate(context: vscode.ExtensionContext): Promise<boolean> {
|
export async function activate(context: vscode.ExtensionContext): Promise<void> {
|
||||||
|
|
||||||
|
let apiWrapper = new ApiWrapper();
|
||||||
|
|
||||||
// Start the main controller
|
// Start the main controller
|
||||||
let mainController = new MainController(context);
|
let mainController = new MainController(context, apiWrapper);
|
||||||
controllers.push(mainController);
|
controllers.push(mainController);
|
||||||
context.subscriptions.push(mainController);
|
context.subscriptions.push(mainController);
|
||||||
|
|
||||||
await mainController.activate();
|
await mainController.activate();
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function deactivate() {
|
export function deactivate() {
|
||||||
|
|||||||
@@ -13,31 +13,28 @@ import * as path from 'path';
|
|||||||
import { EventAndListener } from 'eventemitter2';
|
import { EventAndListener } from 'eventemitter2';
|
||||||
|
|
||||||
import { Telemetry, LanguageClientErrorHandler } from './telemetry';
|
import { Telemetry, LanguageClientErrorHandler } from './telemetry';
|
||||||
import * as Constants from '../constants';
|
import * as Constants from '../common/constants';
|
||||||
import { TelemetryFeature, FlatFileImportFeature } from './features';
|
import { TelemetryFeature, FlatFileImportFeature } from './features';
|
||||||
import { promises as fs } from 'fs';
|
import { promises as fs } from 'fs';
|
||||||
|
import { ApiWrapper } from '../common/apiWrapper';
|
||||||
|
|
||||||
export class ServiceClient {
|
export class ServiceClient {
|
||||||
private statusView: vscode.StatusBarItem;
|
private statusView: vscode.StatusBarItem;
|
||||||
|
|
||||||
constructor(private outputChannel: vscode.OutputChannel) {
|
constructor(
|
||||||
|
private outputChannel: vscode.OutputChannel,
|
||||||
|
private _apiWrapper: ApiWrapper
|
||||||
|
) {
|
||||||
this.statusView = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left);
|
this.statusView = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async startService(context: vscode.ExtensionContext): Promise<SqlOpsDataClient> {
|
public async startService(context: vscode.ExtensionContext): Promise<SqlOpsDataClient> {
|
||||||
const rawConfig = await fs.readFile(path.join(context.extensionPath, 'config.json'));
|
const rawConfig = await fs.readFile(path.join(context.extensionPath, 'config.json'));
|
||||||
const config = JSON.parse(rawConfig.toString());
|
|
||||||
config.installDirectory = path.join(context.extensionPath, config.installDirectory);
|
|
||||||
config.proxy = vscode.workspace.getConfiguration('http').get('proxy');
|
|
||||||
config.strictSSL = vscode.workspace.getConfiguration('http').get('proxyStrictSSL') || true;
|
|
||||||
const serverdownloader = new ServerProvider(config);
|
|
||||||
serverdownloader.eventEmitter.onAny(this.generateHandleServerProviderEvent());
|
|
||||||
let clientOptions: ClientOptions = this.createClientOptions();
|
let clientOptions: ClientOptions = this.createClientOptions();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const installationStart = Date.now();
|
const installationStart = Date.now();
|
||||||
let client: SqlOpsDataClient;
|
let client: SqlOpsDataClient;
|
||||||
let serviceBinaries = await serverdownloader.getOrDownloadServer();
|
let serviceBinaries = await this.downloadBinaries(context, rawConfig);
|
||||||
const installationComplete = Date.now();
|
const installationComplete = Date.now();
|
||||||
let serverOptions = this.generateServerOptions(serviceBinaries, context);
|
let serverOptions = this.generateServerOptions(serviceBinaries, context);
|
||||||
client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions);
|
client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions);
|
||||||
@@ -69,6 +66,16 @@ export class ServiceClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async downloadBinaries(context: vscode.ExtensionContext, rawConfig: Buffer): Promise<string> {
|
||||||
|
const config = JSON.parse(rawConfig.toString());
|
||||||
|
config.installDirectory = path.join(context.extensionPath, config.installDirectory);
|
||||||
|
config.proxy = this._apiWrapper.getConfiguration('http').get('proxy');
|
||||||
|
config.strictSSL = this._apiWrapper.getConfiguration('http').get('proxyStrictSSL') || true;
|
||||||
|
const serverdownloader = new ServerProvider(config);
|
||||||
|
serverdownloader.eventEmitter.onAny(this.generateHandleServerProviderEvent());
|
||||||
|
return serverdownloader.getOrDownloadServer();
|
||||||
|
}
|
||||||
|
|
||||||
private createClientOptions(): ClientOptions {
|
private createClientOptions(): ClientOptions {
|
||||||
return {
|
return {
|
||||||
providerId: Constants.providerId,
|
providerId: Constants.providerId,
|
||||||
|
|||||||
@@ -6,10 +6,8 @@
|
|||||||
import { ErrorAction, CloseAction } from 'vscode-languageclient';
|
import { ErrorAction, CloseAction } from 'vscode-languageclient';
|
||||||
import TelemetryReporter from 'vscode-extension-telemetry';
|
import TelemetryReporter from 'vscode-extension-telemetry';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import * as nls from 'vscode-nls';
|
|
||||||
const localize = nls.loadMessageBundle();
|
|
||||||
|
|
||||||
import * as constants from '../constants';
|
import * as constants from '../common/constants';
|
||||||
import { IMessage, ITelemetryEventProperties, ITelemetryEventMeasures } from './contracts';
|
import { IMessage, ITelemetryEventProperties, ITelemetryEventMeasures } from './contracts';
|
||||||
|
|
||||||
|
|
||||||
@@ -33,12 +31,11 @@ export class LanguageClientErrorHandler {
|
|||||||
showOnErrorPrompt(): void {
|
showOnErrorPrompt(): void {
|
||||||
// TODO add telemetry
|
// TODO add telemetry
|
||||||
// Telemetry.sendTelemetryEvent('SqlToolsServiceCrash');
|
// Telemetry.sendTelemetryEvent('SqlToolsServiceCrash');
|
||||||
let crashButtonText = localize('import.serviceCrashButton', "Give Feedback");
|
|
||||||
vscode.window.showErrorMessage(
|
vscode.window.showErrorMessage(
|
||||||
localize('serviceCrashMessage', "service component could not start"),
|
constants.serviceCrashMessageText,
|
||||||
crashButtonText
|
constants.crashButtonText
|
||||||
).then(action => {
|
).then(action => {
|
||||||
if (action && action === crashButtonText) {
|
if (action && action === constants.crashButtonText) {
|
||||||
vscode.env.openExternal(vscode.Uri.parse(constants.serviceCrashLink));
|
vscode.env.openExternal(vscode.Uri.parse(constants.serviceCrashLink));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -71,21 +68,7 @@ export class LanguageClientErrorHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters error paths to only include source files. Exported to support testing
|
|
||||||
*/
|
|
||||||
function FilterErrorPath(line: string): string | undefined {
|
|
||||||
if (line) {
|
|
||||||
let values: string[] = line.split('/out/');
|
|
||||||
if (values.length <= 1) {
|
|
||||||
// Didn't match expected format
|
|
||||||
return line;
|
|
||||||
} else {
|
|
||||||
return values[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Telemetry {
|
export class Telemetry {
|
||||||
private static reporter: TelemetryReporter;
|
private static reporter: TelemetryReporter;
|
||||||
@@ -113,25 +96,6 @@ export class Telemetry {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Send a telemetry event for an exception
|
|
||||||
*/
|
|
||||||
public static sendTelemetryEventForException(
|
|
||||||
err: any, methodName: string): void {
|
|
||||||
let stackArray: string[];
|
|
||||||
let firstLine: string = '';
|
|
||||||
if (err !== undefined && err.stack !== undefined) {
|
|
||||||
stackArray = err.stack.split('\n');
|
|
||||||
if (stackArray !== undefined && stackArray.length >= 2) {
|
|
||||||
firstLine = stackArray[1]; // The fist line is the error message and we don't want to send that telemetry event
|
|
||||||
firstLine = FilterErrorPath(firstLine);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only adding the method name and the fist line of the stack trace. We don't add the error message because it might have PII
|
|
||||||
this.sendTelemetryEvent('Exception', { methodName: methodName, errorLine: firstLine });
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send a telemetry event using application insights
|
* Send a telemetry event using application insights
|
||||||
*/
|
*/
|
||||||
|
|||||||
225
extensions/import/src/test/import.test.ts
Normal file
225
extensions/import/src/test/import.test.ts
Normal file
@@ -0,0 +1,225 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import 'mocha';
|
||||||
|
import * as TypeMoq from 'typemoq';
|
||||||
|
import * as azdata from 'azdata';
|
||||||
|
import { FlatFileWizard } from '../wizard/flatFileWizard';
|
||||||
|
import { ImportDataModel } from '../wizard/api/models';
|
||||||
|
import { ApiWrapper } from '../common/apiWrapper';
|
||||||
|
import { FileConfigPage } from '../wizard/pages/fileConfigPage';
|
||||||
|
import * as should from 'should';
|
||||||
|
|
||||||
|
describe('import extension tests', function (): void {
|
||||||
|
describe('import extension wizard pages', () => {
|
||||||
|
|
||||||
|
let mockFlatFileWizard: TypeMoq.IMock<FlatFileWizard>;
|
||||||
|
let mockApiWrapper: TypeMoq.IMock<ApiWrapper>;
|
||||||
|
let mockImportModel: TypeMoq.IMock<ImportDataModel>;
|
||||||
|
|
||||||
|
this.beforeEach(() => {
|
||||||
|
mockApiWrapper = TypeMoq.Mock.ofType(ApiWrapper);
|
||||||
|
mockFlatFileWizard = TypeMoq.Mock.ofType(FlatFileWizard, TypeMoq.MockBehavior.Loose, undefined, TypeMoq.It.isAny(), mockApiWrapper.object);
|
||||||
|
mockImportModel = TypeMoq.Mock.ofType(TestImportDataModel, TypeMoq.MockBehavior.Loose);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('BasePage- getDatabaseValue returns active database first', async () => {
|
||||||
|
// setting up the environment
|
||||||
|
let databases: string[] = ['testdb1', 'testdb2', 'testdb3'];
|
||||||
|
let activeDatabase: string = 'testdb2';
|
||||||
|
|
||||||
|
// setting up mocks
|
||||||
|
let importPage = new FileConfigPage(mockFlatFileWizard.object, TypeMoq.It.isAny(), mockImportModel.object, TypeMoq.It.isAny(), TypeMoq.It.isAny(), mockApiWrapper.object);
|
||||||
|
mockApiWrapper.setup(x => x.listDatabases(TypeMoq.It.isAnyString())).returns(async () => { return databases; });
|
||||||
|
mockImportModel.object.server = {
|
||||||
|
providerName: 'MSSQL',
|
||||||
|
connectionId: 'testConnectionId',
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
mockImportModel.object.database = activeDatabase;
|
||||||
|
|
||||||
|
// Creating assert variables
|
||||||
|
let expectedDatabaseValues = [
|
||||||
|
{ displayName: 'testdb2', name: 'testdb2' }, // This should be the first database as it is active in the extension.
|
||||||
|
{ displayName: 'testdb1', name: 'testdb1' },
|
||||||
|
{ displayName: 'testdb3', name: 'testdb3' }
|
||||||
|
];
|
||||||
|
|
||||||
|
let actualDatabaseValues = await importPage.getDatabaseValues();
|
||||||
|
should(expectedDatabaseValues).deepEqual(actualDatabaseValues);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('BasePage- getServerValue returns null on no active connection', async () => {
|
||||||
|
|
||||||
|
let importPage = new FileConfigPage(mockFlatFileWizard.object, TypeMoq.It.isAny(), mockImportModel.object, TypeMoq.It.isAny(), TypeMoq.It.isAny(), mockApiWrapper.object);
|
||||||
|
|
||||||
|
// mocking getActive connection to return null
|
||||||
|
mockApiWrapper.setup(x => x.getActiveConnections()).returns(async () => { return undefined; });
|
||||||
|
|
||||||
|
let serverValues = await importPage.getServerValues();
|
||||||
|
|
||||||
|
should(serverValues).undefined();
|
||||||
|
|
||||||
|
// mocking getActive connection returns empty array
|
||||||
|
mockApiWrapper.setup(x => x.getActiveConnections()).returns(async () => { return [] as azdata.connection.Connection[]; });
|
||||||
|
|
||||||
|
serverValues = await importPage.getServerValues();
|
||||||
|
should(serverValues).undefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('BasePage- getServerValue return active server value first', async () => {
|
||||||
|
// settign up the enviornment
|
||||||
|
let testActiveConnections: azdata.connection.Connection[] = [
|
||||||
|
{
|
||||||
|
providerName: 'MSSQL',
|
||||||
|
connectionId: 'testConnection1Id',
|
||||||
|
options: {
|
||||||
|
user: 'testcon1user',
|
||||||
|
server: 'testcon1server'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providerName: 'MSSQL',
|
||||||
|
connectionId: 'testConnection2Id',
|
||||||
|
options: {
|
||||||
|
user: 'testcon2user',
|
||||||
|
server: 'testcon2server'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
providerName: 'PGSQL',
|
||||||
|
connectionId: 'testConnection3Id',
|
||||||
|
options: {
|
||||||
|
user: null, // setting it null to check if function return user as 'default
|
||||||
|
server: 'testcon3server'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
let importPage = new FileConfigPage(mockFlatFileWizard.object, TypeMoq.It.isAny(), mockImportModel.object, TypeMoq.It.isAny(), TypeMoq.It.isAny(), mockApiWrapper.object);
|
||||||
|
mockApiWrapper.setup(x => x.getActiveConnections()).returns(async () => { return testActiveConnections; });
|
||||||
|
mockImportModel.object.server = ImportTestUtils.getTestServer();
|
||||||
|
|
||||||
|
let expectedConnectionValues = [
|
||||||
|
{
|
||||||
|
connection: testActiveConnections[1],
|
||||||
|
displayName: 'testcon2server (testcon2user)',
|
||||||
|
name: 'testConnection2Id'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
connection: testActiveConnections[0],
|
||||||
|
displayName: 'testcon1server (testcon1user)',
|
||||||
|
name: 'testConnection1Id'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
connection: testActiveConnections[2],
|
||||||
|
displayName: 'testcon3server (default)',
|
||||||
|
name: 'testConnection3Id'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
let actualConnectionValues = await importPage.getServerValues();
|
||||||
|
should(expectedConnectionValues).deepEqual(actualConnectionValues);
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('import extension flat file wizard', () => {
|
||||||
|
it('FlatFileWizard opens connectionDialog when there are no active connections', async () => {
|
||||||
|
let testConnection: azdata.connection.Connection = {
|
||||||
|
providerName: 'MSSQL',
|
||||||
|
connectionId: 'testConnectionId',
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
|
||||||
|
let mockApiWrapper: TypeMoq.IMock<ApiWrapper> = TypeMoq.Mock.ofType(ApiWrapper);
|
||||||
|
// There is no current connection.
|
||||||
|
mockApiWrapper.setup(x => x.getCurrentConnection()).returns(() => { return undefined; });
|
||||||
|
|
||||||
|
|
||||||
|
// openConnectionDialog returns a test connection
|
||||||
|
mockApiWrapper.setup(x => x.openConnectionDialog(TypeMoq.It.isAny())).returns(async () => { return testConnection; });
|
||||||
|
|
||||||
|
let testFlatFileWizard = new FlatFileWizard(TypeMoq.It.isAny(), mockApiWrapper.object);
|
||||||
|
|
||||||
|
await testFlatFileWizard.getConnectionId();
|
||||||
|
|
||||||
|
// openConnectionDialog will be called once
|
||||||
|
mockApiWrapper.verify(x => x.openConnectionDialog(TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('FlatFileWizard- shows error message when an invalid connection is selected', async () => {
|
||||||
|
let mockApiWrapper: TypeMoq.IMock<ApiWrapper> = TypeMoq.Mock.ofType(ApiWrapper);
|
||||||
|
// The active connection doesn't have a valid Provider
|
||||||
|
let testConnectionProfile: azdata.connection.ConnectionProfile = ImportTestUtils.getTestConnectionProfile();
|
||||||
|
mockApiWrapper.setup(x => x.getCurrentConnection()).returns(() => { return Promise.resolve(testConnectionProfile); });
|
||||||
|
mockApiWrapper.setup(x => x.openConnectionDialog(TypeMoq.It.isAny())).returns(() => { return undefined; });
|
||||||
|
|
||||||
|
let testFlatFileWizard = new FlatFileWizard(TypeMoq.It.isAny(), mockApiWrapper.object);
|
||||||
|
|
||||||
|
await testFlatFileWizard.getConnectionId();
|
||||||
|
|
||||||
|
mockApiWrapper.verify(x => x.showErrorMessage(TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
it('FlatFileWizard- shows error message when no connection is selected', async () => {
|
||||||
|
let mockApiWrapper: TypeMoq.IMock<ApiWrapper> = TypeMoq.Mock.ofType(ApiWrapper);
|
||||||
|
// The active connection doesn't have a valid Provider
|
||||||
|
mockApiWrapper.setup(x => x.getCurrentConnection()).returns(() => { return undefined; });
|
||||||
|
mockApiWrapper.setup(x => x.openConnectionDialog(TypeMoq.It.isAny())).returns(() => { return undefined; });
|
||||||
|
|
||||||
|
let testFlatFileWizard = new FlatFileWizard(TypeMoq.It.isAny(), mockApiWrapper.object);
|
||||||
|
|
||||||
|
await testFlatFileWizard.getConnectionId();
|
||||||
|
|
||||||
|
mockApiWrapper.verify(x => x.showErrorMessage(TypeMoq.It.isAny()), TypeMoq.Times.once());
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
export class ImportTestUtils {
|
||||||
|
|
||||||
|
public static getTestServer(): azdata.connection.Connection {
|
||||||
|
return {
|
||||||
|
providerName: 'MSSQL',
|
||||||
|
connectionId: 'testConnection2Id',
|
||||||
|
options: {}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static getTestConnectionProfile(): azdata.connection.ConnectionProfile {
|
||||||
|
return {
|
||||||
|
providerId: 'InvalidProvider',
|
||||||
|
databaseName: 'databaseName',
|
||||||
|
serverName: 'testServerName',
|
||||||
|
connectionId: 'testConnectionId',
|
||||||
|
groupId: 'testGroupId',
|
||||||
|
connectionName: 'testConnectionName',
|
||||||
|
userName: 'testUserName',
|
||||||
|
password: 'testPassword',
|
||||||
|
authenticationType: 'testAuthenticationType',
|
||||||
|
savePassword: true,
|
||||||
|
saveProfile: true,
|
||||||
|
groupFullName: 'testGroupFullName',
|
||||||
|
options: {}
|
||||||
|
} as azdata.connection.ConnectionProfile;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TestImportDataModel implements ImportDataModel {
|
||||||
|
server: azdata.connection.Connection;
|
||||||
|
serverId: string;
|
||||||
|
ownerUri: string;
|
||||||
|
proseColumns: import("../wizard/api/models").ColumnMetadata[];
|
||||||
|
proseDataPreview: string[][];
|
||||||
|
database: string;
|
||||||
|
table: string;
|
||||||
|
schema: string;
|
||||||
|
filePath: string;
|
||||||
|
fileType: string;
|
||||||
|
}
|
||||||
48
extensions/import/src/test/index.ts
Normal file
48
extensions/import/src/test/index.ts
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import * as path from 'path';
|
||||||
|
const testRunner = require('vscodetestcover');
|
||||||
|
|
||||||
|
const suite = 'import Extension Tests';
|
||||||
|
|
||||||
|
const mochaOptions: any = {
|
||||||
|
ui: 'bdd',
|
||||||
|
useColors: true,
|
||||||
|
timeout: 10000
|
||||||
|
};
|
||||||
|
|
||||||
|
// set relevant mocha options from the environment
|
||||||
|
if (process.env.ADS_TEST_GREP) {
|
||||||
|
mochaOptions.grep = process.env.ADS_TEST_GREP;
|
||||||
|
console.log(`setting options.grep to: ${mochaOptions.grep}`);
|
||||||
|
}
|
||||||
|
if (process.env.ADS_TEST_INVERT_GREP) {
|
||||||
|
mochaOptions.invert = parseInt(process.env.ADS_TEST_INVERT_GREP);
|
||||||
|
console.log(`setting options.invert to: ${mochaOptions.invert}`);
|
||||||
|
}
|
||||||
|
if (process.env.ADS_TEST_TIMEOUT) {
|
||||||
|
mochaOptions.timeout = parseInt(process.env.ADS_TEST_TIMEOUT);
|
||||||
|
console.log(`setting options.timeout to: ${mochaOptions.timeout}`);
|
||||||
|
}
|
||||||
|
if (process.env.ADS_TEST_RETRIES) {
|
||||||
|
mochaOptions.retries = parseInt(process.env.ADS_TEST_RETRIES);
|
||||||
|
console.log(`setting options.retries to: ${mochaOptions.retries}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (process.env.BUILD_ARTIFACTSTAGINGDIRECTORY) {
|
||||||
|
mochaOptions.reporter = 'mocha-multi-reporters';
|
||||||
|
mochaOptions.reporterOptions = {
|
||||||
|
reporterEnabled: 'spec, mocha-junit-reporter',
|
||||||
|
mochaJunitReporterReporterOptions: {
|
||||||
|
testsuitesTitle: `${suite} ${process.platform}`,
|
||||||
|
mochaFile: path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${suite.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
testRunner.configure(mochaOptions, { coverConfig: '../../coverConfig.json' });
|
||||||
|
|
||||||
|
export = testRunner;
|
||||||
@@ -5,12 +5,14 @@
|
|||||||
|
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import { ImportDataModel } from './models';
|
import { ImportDataModel } from './models';
|
||||||
|
import { ApiWrapper } from '../../common/apiWrapper';
|
||||||
|
|
||||||
export abstract class BasePage {
|
export abstract class BasePage {
|
||||||
|
|
||||||
protected readonly wizardPage: azdata.window.WizardPage;
|
protected readonly wizardPage: azdata.window.WizardPage;
|
||||||
protected readonly model: ImportDataModel;
|
protected readonly model: ImportDataModel;
|
||||||
protected readonly view: azdata.ModelView;
|
protected readonly view: azdata.ModelView;
|
||||||
|
protected _apiWrapper: ApiWrapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method constructs all the elements of the page.
|
* This method constructs all the elements of the page.
|
||||||
@@ -42,8 +44,8 @@ export abstract class BasePage {
|
|||||||
*/
|
*/
|
||||||
public abstract setupNavigationValidator(): void;
|
public abstract setupNavigationValidator(): void;
|
||||||
|
|
||||||
protected async getServerValues(): Promise<{ connection: azdata.connection.Connection, displayName: string, name: string }[]> {
|
public async getServerValues(): Promise<{ connection: azdata.connection.Connection, displayName: string, name: string }[]> {
|
||||||
let cons = await azdata.connection.getActiveConnections();
|
let cons = await this._apiWrapper.getActiveConnections();
|
||||||
// This user has no active connections ABORT MISSION
|
// This user has no active connections ABORT MISSION
|
||||||
if (!cons || cons.length === 0) {
|
if (!cons || cons.length === 0) {
|
||||||
return undefined;
|
return undefined;
|
||||||
@@ -90,10 +92,10 @@ export abstract class BasePage {
|
|||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async getDatabaseValues(): Promise<{ displayName: string, name: string }[]> {
|
public async getDatabaseValues(): Promise<{ displayName: string, name: string }[]> {
|
||||||
let idx = -1;
|
let idx = -1;
|
||||||
let count = -1;
|
let count = -1;
|
||||||
let values = (await azdata.connection.listDatabases(this.model.server.connectionId)).map(db => {
|
let values = (await this._apiWrapper.listDatabases(this.model.server.connectionId)).map(db => {
|
||||||
count++;
|
count++;
|
||||||
if (this.model.database && db === this.model.database) {
|
if (this.model.database && db === this.model.database) {
|
||||||
idx = count;
|
idx = count;
|
||||||
@@ -109,10 +111,7 @@ export abstract class BasePage {
|
|||||||
let tmp = values[0];
|
let tmp = values[0];
|
||||||
values[0] = values[idx];
|
values[0] = values[idx];
|
||||||
values[idx] = tmp;
|
values[idx] = tmp;
|
||||||
} else {
|
|
||||||
this.deleteDatabaseValues();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,8 +120,4 @@ export abstract class BasePage {
|
|||||||
delete this.model.serverId;
|
delete this.model.serverId;
|
||||||
delete this.model.database;
|
delete this.model.database;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected deleteDatabaseValues() {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import * as azdata from 'azdata';
|
|||||||
import { FlatFileProvider } from '../../services/contracts';
|
import { FlatFileProvider } from '../../services/contracts';
|
||||||
import { FlatFileWizard } from '../flatFileWizard';
|
import { FlatFileWizard } from '../flatFileWizard';
|
||||||
import { BasePage } from './basePage';
|
import { BasePage } from './basePage';
|
||||||
|
import { ApiWrapper } from '../../common/apiWrapper';
|
||||||
|
|
||||||
export abstract class ImportPage extends BasePage {
|
export abstract class ImportPage extends BasePage {
|
||||||
|
|
||||||
@@ -17,12 +18,14 @@ export abstract class ImportPage extends BasePage {
|
|||||||
protected readonly view: azdata.ModelView;
|
protected readonly view: azdata.ModelView;
|
||||||
protected readonly provider: FlatFileProvider;
|
protected readonly provider: FlatFileProvider;
|
||||||
|
|
||||||
protected constructor(instance: FlatFileWizard, wizardPage: azdata.window.WizardPage, model: ImportDataModel, view: azdata.ModelView, provider: FlatFileProvider) {
|
|
||||||
|
constructor(instance: FlatFileWizard, wizardPage: azdata.window.WizardPage, model: ImportDataModel, view: azdata.ModelView, provider: FlatFileProvider, apiWrapper: ApiWrapper) {
|
||||||
super();
|
super();
|
||||||
this.instance = instance;
|
this.instance = instance;
|
||||||
this.wizardPage = wizardPage;
|
this.wizardPage = wizardPage;
|
||||||
this.model = model;
|
this.model = model;
|
||||||
this.view = view;
|
this.view = view;
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
|
this._apiWrapper = apiWrapper;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as vscode from 'vscode';
|
|
||||||
import * as nls from 'vscode-nls';
|
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import { FlatFileProvider } from '../services/contracts';
|
import { FlatFileProvider } from '../services/contracts';
|
||||||
import { ImportDataModel } from './api/models';
|
import { ImportDataModel } from './api/models';
|
||||||
@@ -14,16 +12,23 @@ import { FileConfigPage } from './pages/fileConfigPage';
|
|||||||
import { ProsePreviewPage } from './pages/prosePreviewPage';
|
import { ProsePreviewPage } from './pages/prosePreviewPage';
|
||||||
import { ModifyColumnsPage } from './pages/modifyColumnsPage';
|
import { ModifyColumnsPage } from './pages/modifyColumnsPage';
|
||||||
import { SummaryPage } from './pages/summaryPage';
|
import { SummaryPage } from './pages/summaryPage';
|
||||||
|
import { ApiWrapper } from '../common/apiWrapper';
|
||||||
const localize = nls.loadMessageBundle();
|
import * as constants from '../common/constants';
|
||||||
|
|
||||||
export class FlatFileWizard {
|
export class FlatFileWizard {
|
||||||
private readonly provider: FlatFileProvider;
|
private readonly provider: FlatFileProvider;
|
||||||
private wizard: azdata.window.Wizard;
|
public wizard: azdata.window.Wizard;
|
||||||
|
public page1: azdata.window.WizardPage;
|
||||||
|
public page2: azdata.window.WizardPage;
|
||||||
|
public page3: azdata.window.WizardPage;
|
||||||
|
public page4: azdata.window.WizardPage;
|
||||||
|
|
||||||
private importAnotherFileButton: azdata.window.Button;
|
private importAnotherFileButton: azdata.window.Button;
|
||||||
|
|
||||||
constructor(provider: FlatFileProvider) {
|
constructor(
|
||||||
|
provider: FlatFileProvider,
|
||||||
|
private _apiWrapper: ApiWrapper
|
||||||
|
) {
|
||||||
this.provider = provider;
|
this.provider = provider;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,37 +43,24 @@ export class FlatFileWizard {
|
|||||||
|
|
||||||
let pages: Map<number, ImportPage> = new Map<number, ImportPage>();
|
let pages: Map<number, ImportPage> = new Map<number, ImportPage>();
|
||||||
|
|
||||||
let currentConnection = await azdata.connection.getCurrentConnection();
|
let connectionId: string = await this.getConnectionId();
|
||||||
|
|
||||||
let connectionId: string;
|
if (!connectionId) {
|
||||||
|
return;
|
||||||
if (!currentConnection) {
|
|
||||||
connectionId = (await azdata.connection.openConnectionDialog(['MSSQL'])).connectionId;
|
|
||||||
if (!connectionId) {
|
|
||||||
vscode.window.showErrorMessage(localize('import.needConnection', "Please connect to a server before using this wizard."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (currentConnection.providerId !== 'MSSQL') {
|
|
||||||
vscode.window.showErrorMessage(localize('import.needSQLConnection', "SQL Server Import extension does not support this type of connection"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
connectionId = currentConnection.connectionId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
model.serverId = connectionId;
|
model.serverId = connectionId;
|
||||||
|
|
||||||
this.wizard = azdata.window.createWizard(localize('flatFileImport.wizardName', "Import flat file wizard"));
|
this.wizard = this._apiWrapper.createWizard(constants.wizardNameText);
|
||||||
let page1 = azdata.window.createWizardPage(localize('flatFileImport.page1Name', "Specify Input File"));
|
this.page1 = this._apiWrapper.createWizardPage(constants.page1NameText);
|
||||||
let page2 = azdata.window.createWizardPage(localize('flatFileImport.page2Name', "Preview Data"));
|
this.page2 = this._apiWrapper.createWizardPage(constants.page2NameText);
|
||||||
let page3 = azdata.window.createWizardPage(localize('flatFileImport.page3Name', "Modify Columns"));
|
this.page3 = this._apiWrapper.createWizardPage(constants.page3NameText);
|
||||||
let page4 = azdata.window.createWizardPage(localize('flatFileImport.page4Name', "Summary"));
|
this.page4 = this._apiWrapper.createWizardPage(constants.page4NameText);
|
||||||
|
|
||||||
let fileConfigPage: FileConfigPage;
|
let fileConfigPage: FileConfigPage;
|
||||||
|
|
||||||
page1.registerContent(async (view) => {
|
this.page1.registerContent(async (view) => {
|
||||||
fileConfigPage = new FileConfigPage(this, page1, model, view, this.provider);
|
fileConfigPage = new FileConfigPage(this, this.page1, model, view, this.provider, this._apiWrapper);
|
||||||
pages.set(0, fileConfigPage);
|
pages.set(0, fileConfigPage);
|
||||||
await fileConfigPage.start().then(() => {
|
await fileConfigPage.start().then(() => {
|
||||||
fileConfigPage.setupNavigationValidator();
|
fileConfigPage.setupNavigationValidator();
|
||||||
@@ -77,29 +69,29 @@ export class FlatFileWizard {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let prosePreviewPage: ProsePreviewPage;
|
let prosePreviewPage: ProsePreviewPage;
|
||||||
page2.registerContent(async (view) => {
|
this.page2.registerContent(async (view) => {
|
||||||
prosePreviewPage = new ProsePreviewPage(this, page2, model, view, this.provider);
|
prosePreviewPage = new ProsePreviewPage(this, this.page2, model, view, this.provider, this._apiWrapper);
|
||||||
pages.set(1, prosePreviewPage);
|
pages.set(1, prosePreviewPage);
|
||||||
await prosePreviewPage.start();
|
await prosePreviewPage.start();
|
||||||
});
|
});
|
||||||
|
|
||||||
let modifyColumnsPage: ModifyColumnsPage;
|
let modifyColumnsPage: ModifyColumnsPage;
|
||||||
page3.registerContent(async (view) => {
|
this.page3.registerContent(async (view) => {
|
||||||
modifyColumnsPage = new ModifyColumnsPage(this, page3, model, view, this.provider);
|
modifyColumnsPage = new ModifyColumnsPage(this, this.page3, model, view, this.provider, this._apiWrapper);
|
||||||
pages.set(2, modifyColumnsPage);
|
pages.set(2, modifyColumnsPage);
|
||||||
await modifyColumnsPage.start();
|
await modifyColumnsPage.start();
|
||||||
});
|
});
|
||||||
|
|
||||||
let summaryPage: SummaryPage;
|
let summaryPage: SummaryPage;
|
||||||
|
|
||||||
page4.registerContent(async (view) => {
|
this.page4.registerContent(async (view) => {
|
||||||
summaryPage = new SummaryPage(this, page4, model, view, this.provider);
|
summaryPage = new SummaryPage(this, this.page4, model, view, this.provider, this._apiWrapper);
|
||||||
pages.set(3, summaryPage);
|
pages.set(3, summaryPage);
|
||||||
await summaryPage.start();
|
await summaryPage.start();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
this.importAnotherFileButton = azdata.window.createButton(localize('flatFileImport.importNewFile', "Import new file"));
|
this.importAnotherFileButton = this._apiWrapper.createButton(constants.importNewFileText);
|
||||||
this.importAnotherFileButton.onClick(() => {
|
this.importAnotherFileButton.onClick(() => {
|
||||||
//TODO replace this with proper cleanup for all the pages
|
//TODO replace this with proper cleanup for all the pages
|
||||||
this.wizard.close();
|
this.wizard.close();
|
||||||
@@ -126,11 +118,33 @@ export class FlatFileWizard {
|
|||||||
//not needed for this wizard
|
//not needed for this wizard
|
||||||
this.wizard.generateScriptButton.hidden = true;
|
this.wizard.generateScriptButton.hidden = true;
|
||||||
|
|
||||||
this.wizard.pages = [page1, page2, page3, page4];
|
this.wizard.pages = [this.page1, this.page2, this.page3, this.page4];
|
||||||
|
|
||||||
this.wizard.open();
|
this.wizard.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getConnectionId(): Promise<string> {
|
||||||
|
let currentConnection = await this._apiWrapper.getCurrentConnection();
|
||||||
|
|
||||||
|
let connectionId: string;
|
||||||
|
|
||||||
|
if (!currentConnection) {
|
||||||
|
let connection = await this._apiWrapper.openConnectionDialog(constants.supportedProviders);
|
||||||
|
if (!connection) {
|
||||||
|
this._apiWrapper.showErrorMessage(constants.needConnectionText);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
connectionId = connection.connectionId;
|
||||||
|
} else {
|
||||||
|
if (currentConnection.providerId !== 'MSSQL') {
|
||||||
|
this._apiWrapper.showErrorMessage(constants.needSqlConnectionText);
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
connectionId = currentConnection.connectionId;
|
||||||
|
}
|
||||||
|
return connectionId;
|
||||||
|
}
|
||||||
|
|
||||||
public setImportAnotherFileVisibility(visibility: boolean) {
|
public setImportAnotherFileVisibility(visibility: boolean) {
|
||||||
this.importAnotherFileButton.hidden = !visibility;
|
this.importAnotherFileButton.hidden = !visibility;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,8 @@
|
|||||||
|
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import * as nls from 'vscode-nls';
|
|
||||||
import { ImportDataModel } from '../api/models';
|
|
||||||
import { ImportPage } from '../api/importPage';
|
import { ImportPage } from '../api/importPage';
|
||||||
import { FlatFileProvider } from '../../services/contracts';
|
import * as constants from '../../common/constants';
|
||||||
import { FlatFileWizard } from '../flatFileWizard';
|
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
|
||||||
|
|
||||||
export class FileConfigPage extends ImportPage {
|
export class FileConfigPage extends ImportPage {
|
||||||
|
|
||||||
@@ -28,10 +23,6 @@ export class FileConfigPage extends ImportPage {
|
|||||||
|
|
||||||
private tableNames: string[] = [];
|
private tableNames: string[] = [];
|
||||||
|
|
||||||
public constructor(instance: FlatFileWizard, wizardPage: azdata.window.WizardPage, model: ImportDataModel, view: azdata.ModelView, provider: FlatFileProvider) {
|
|
||||||
super(instance, wizardPage, model, view, provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
async start(): Promise<boolean> {
|
async start(): Promise<boolean> {
|
||||||
let schemaComponent = await this.createSchemaDropdown();
|
let schemaComponent = await this.createSchemaDropdown();
|
||||||
let tableNameComponent = await this.createTableNameBox();
|
let tableNameComponent = await this.createTableNameBox();
|
||||||
@@ -96,7 +87,7 @@ export class FileConfigPage extends ImportPage {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
component: this.serverDropdown,
|
component: this.serverDropdown,
|
||||||
title: localize('flatFileImport.serverDropdownTitle', "Server the database is in")
|
title: constants.serverDropDownTitleText
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,8 +115,8 @@ export class FileConfigPage extends ImportPage {
|
|||||||
this.databaseDropdown.onValueChanged(async (db) => {
|
this.databaseDropdown.onValueChanged(async (db) => {
|
||||||
this.model.database = (<azdata.CategoryValue>this.databaseDropdown.value).name;
|
this.model.database = (<azdata.CategoryValue>this.databaseDropdown.value).name;
|
||||||
//this.populateTableNames();
|
//this.populateTableNames();
|
||||||
let connectionProvider = azdata.dataprotocol.getProvider<azdata.ConnectionProvider>(this.model.server.providerName, azdata.DataProviderType.ConnectionProvider);
|
let connectionProvider = this._apiWrapper.getProvider<azdata.ConnectionProvider>(this.model.server.providerName, azdata.DataProviderType.ConnectionProvider);
|
||||||
let connectionUri = await azdata.connection.getUriForConnection(this.model.server.connectionId);
|
let connectionUri = await this._apiWrapper.getUriForConnection(this.model.server.connectionId);
|
||||||
connectionProvider.changeDatabase(connectionUri, this.model.database);
|
connectionProvider.changeDatabase(connectionUri, this.model.database);
|
||||||
this.populateSchemaDropdown();
|
this.populateSchemaDropdown();
|
||||||
});
|
});
|
||||||
@@ -134,7 +125,7 @@ export class FileConfigPage extends ImportPage {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
component: this.databaseLoader,
|
component: this.databaseLoader,
|
||||||
title: localize('flatFileImport.databaseDropdownTitle', "Database the table is created in")
|
title: constants.databaseDropdownTitleText
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +169,7 @@ export class FileConfigPage extends ImportPage {
|
|||||||
required: true
|
required: true
|
||||||
}).component();
|
}).component();
|
||||||
this.fileButton = this.view.modelBuilder.button().withProperties({
|
this.fileButton = this.view.modelBuilder.button().withProperties({
|
||||||
label: localize('flatFileImport.browseFiles', "Browse"),
|
label: constants.browseFilesText,
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
this.fileButton.onDidClick(async (click) => {
|
this.fileButton.onDidClick(async (click) => {
|
||||||
@@ -187,7 +178,7 @@ export class FileConfigPage extends ImportPage {
|
|||||||
canSelectFiles: true,
|
canSelectFiles: true,
|
||||||
canSelectFolders: false,
|
canSelectFolders: false,
|
||||||
canSelectMany: false,
|
canSelectMany: false,
|
||||||
openLabel: localize('flatFileImport.openFile', "Open"),
|
openLabel: constants.openFileText,
|
||||||
filters: {
|
filters: {
|
||||||
'CSV/TXT Files': ['csv', 'txt'],
|
'CSV/TXT Files': ['csv', 'txt'],
|
||||||
'All Files': ['*']
|
'All Files': ['*']
|
||||||
@@ -227,7 +218,7 @@ export class FileConfigPage extends ImportPage {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
component: this.fileTextBox,
|
component: this.fileTextBox,
|
||||||
title: localize('flatFileImport.fileTextboxTitle', "Location of the file to be imported"),
|
title: constants.fileTextboxTitleText,
|
||||||
actions: [this.fileButton]
|
actions: [this.fileButton]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -256,7 +247,7 @@ export class FileConfigPage extends ImportPage {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
component: this.tableNameTextBox,
|
component: this.tableNameTextBox,
|
||||||
title: localize('flatFileImport.tableTextboxTitle', "New table name"),
|
title: constants.tableTextboxTitleText,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -274,20 +265,31 @@ export class FileConfigPage extends ImportPage {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
component: this.schemaLoader,
|
component: this.schemaLoader,
|
||||||
title: localize('flatFileImport.schemaTextboxTitle', "Table schema"),
|
title: constants.schemaTextboxTitleText,
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private async populateSchemaDropdown(): Promise<boolean> {
|
public async populateSchemaDropdown(): Promise<boolean> {
|
||||||
this.schemaLoader.loading = true;
|
this.schemaLoader.loading = true;
|
||||||
|
|
||||||
let connectionUri = await azdata.connection.getUriForConnection(this.model.server.connectionId);
|
let values = await this.getSchemaValues();
|
||||||
let queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>(this.model.server.providerName, azdata.DataProviderType.QueryProvider);
|
|
||||||
|
|
||||||
const query = `SELECT name FROM sys.schemas`;
|
this.model.schema = values[0].name;
|
||||||
|
|
||||||
let results = await queryProvider.runQueryAndReturn(connectionUri, query);
|
this.schemaDropdown.updateProperties({
|
||||||
|
values: values
|
||||||
|
});
|
||||||
|
|
||||||
|
this.schemaLoader.loading = false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async getSchemaValues(): Promise<{ displayName: string, name: string }[]> {
|
||||||
|
let connectionUri = await this._apiWrapper.getUriForConnection(this.model.server.connectionId);
|
||||||
|
let queryProvider = this._apiWrapper.getProvider<azdata.QueryProvider>(this.model.server.providerName, azdata.DataProviderType.QueryProvider);
|
||||||
|
|
||||||
|
let results = await queryProvider.runQueryAndReturn(connectionUri, constants.selectSchemaQuery);
|
||||||
|
|
||||||
let idx = -1;
|
let idx = -1;
|
||||||
let count = -1;
|
let count = -1;
|
||||||
@@ -311,15 +313,7 @@ export class FileConfigPage extends ImportPage {
|
|||||||
values[0] = values[idx];
|
values[0] = values[idx];
|
||||||
values[idx] = tmp;
|
values[idx] = tmp;
|
||||||
}
|
}
|
||||||
|
return values;
|
||||||
this.model.schema = values[0].name;
|
|
||||||
|
|
||||||
this.schemaDropdown.updateProperties({
|
|
||||||
values: values
|
|
||||||
});
|
|
||||||
|
|
||||||
this.schemaLoader.loading = false;
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected deleteServerValues() {
|
protected deleteServerValues() {
|
||||||
|
|||||||
@@ -4,13 +4,9 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import * as nls from 'vscode-nls';
|
import { ColumnMetadata } from '../api/models';
|
||||||
import { ColumnMetadata, ImportDataModel } from '../api/models';
|
|
||||||
import { ImportPage } from '../api/importPage';
|
import { ImportPage } from '../api/importPage';
|
||||||
import { FlatFileProvider } from '../../services/contracts';
|
import * as constants from '../../common/constants';
|
||||||
import { FlatFileWizard } from '../flatFileWizard';
|
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
|
||||||
|
|
||||||
export class ModifyColumnsPage extends ImportPage {
|
export class ModifyColumnsPage extends ImportPage {
|
||||||
private readonly categoryValues = [
|
private readonly categoryValues = [
|
||||||
@@ -54,11 +50,6 @@ export class ModifyColumnsPage extends ImportPage {
|
|||||||
private text: azdata.TextComponent;
|
private text: azdata.TextComponent;
|
||||||
private form: azdata.FormContainer;
|
private form: azdata.FormContainer;
|
||||||
|
|
||||||
public constructor(instance: FlatFileWizard, wizardPage: azdata.window.WizardPage, model: ImportDataModel, view: azdata.ModelView, provider: FlatFileProvider) {
|
|
||||||
super(instance, wizardPage, model, view, provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static convertMetadata(column: ColumnMetadata): any[] {
|
private static convertMetadata(column: ColumnMetadata): any[] {
|
||||||
return [column.columnName, column.dataType, false, column.nullable];
|
return [column.columnName, column.dataType, false, column.nullable];
|
||||||
}
|
}
|
||||||
@@ -105,20 +96,20 @@ export class ModifyColumnsPage extends ImportPage {
|
|||||||
async onPageEnter(): Promise<boolean> {
|
async onPageEnter(): Promise<boolean> {
|
||||||
this.loading.loading = true;
|
this.loading.loading = true;
|
||||||
await this.populateTable();
|
await this.populateTable();
|
||||||
this.instance.changeNextButtonLabel(localize('flatFileImport.importData', "Import Data"));
|
this.instance.changeNextButtonLabel(constants.importDataText);
|
||||||
this.loading.loading = false;
|
this.loading.loading = false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
async onPageLeave(): Promise<boolean> {
|
async onPageLeave(): Promise<boolean> {
|
||||||
this.instance.changeNextButtonLabel(localize('flatFileImport.next', "Next"));
|
this.instance.changeNextButtonLabel(constants.nextText);
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
async cleanup(): Promise<boolean> {
|
async cleanup(): Promise<boolean> {
|
||||||
delete this.model.proseColumns;
|
delete this.model.proseColumns;
|
||||||
this.instance.changeNextButtonLabel(localize('flatFileImport.next', "Next"));
|
this.instance.changeNextButtonLabel(constants.nextText);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -139,23 +130,23 @@ export class ModifyColumnsPage extends ImportPage {
|
|||||||
this.table.updateProperties({
|
this.table.updateProperties({
|
||||||
height: 400,
|
height: 400,
|
||||||
columns: [{
|
columns: [{
|
||||||
displayName: localize('flatFileImport.columnName', "Column Name"),
|
displayName: constants.columnNameText,
|
||||||
valueType: azdata.DeclarativeDataType.string,
|
valueType: azdata.DeclarativeDataType.string,
|
||||||
width: '150px',
|
width: '150px',
|
||||||
isReadOnly: false
|
isReadOnly: false
|
||||||
}, {
|
}, {
|
||||||
displayName: localize('flatFileImport.dataType', "Data Type"),
|
displayName: constants.dataTypeText,
|
||||||
valueType: azdata.DeclarativeDataType.editableCategory,
|
valueType: azdata.DeclarativeDataType.editableCategory,
|
||||||
width: '150px',
|
width: '150px',
|
||||||
isReadOnly: false,
|
isReadOnly: false,
|
||||||
categoryValues: this.categoryValues
|
categoryValues: this.categoryValues
|
||||||
}, {
|
}, {
|
||||||
displayName: localize('flatFileImport.primaryKey', "Primary Key"),
|
displayName: constants.primaryKeyText,
|
||||||
valueType: azdata.DeclarativeDataType.boolean,
|
valueType: azdata.DeclarativeDataType.boolean,
|
||||||
width: '100px',
|
width: '100px',
|
||||||
isReadOnly: false
|
isReadOnly: false
|
||||||
}, {
|
}, {
|
||||||
displayName: localize('flatFileImport.allowNulls', "Allow Nulls"),
|
displayName: constants.allowNullsText,
|
||||||
valueType: azdata.DeclarativeDataType.boolean,
|
valueType: azdata.DeclarativeDataType.boolean,
|
||||||
isReadOnly: false,
|
isReadOnly: false,
|
||||||
width: '100px'
|
width: '100px'
|
||||||
|
|||||||
@@ -4,19 +4,11 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import * as nls from 'vscode-nls';
|
|
||||||
import { ImportDataModel } from '../api/models';
|
|
||||||
import { ImportPage } from '../api/importPage';
|
import { ImportPage } from '../api/importPage';
|
||||||
import { FlatFileProvider } from '../../services/contracts';
|
import * as constants from '../../common/constants';
|
||||||
import { FlatFileWizard } from '../flatFileWizard';
|
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
|
||||||
|
|
||||||
export class ProsePreviewPage extends ImportPage {
|
export class ProsePreviewPage extends ImportPage {
|
||||||
|
|
||||||
private readonly successTitle: string = localize('flatFileImport.prosePreviewMessage', "This operation analyzed the input file structure to generate the preview below for up to the first 50 rows.");
|
|
||||||
private readonly failureTitle: string = localize('flatFileImport.prosePreviewMessageFail', "This operation was unsuccessful. Please try a different input file.");
|
|
||||||
|
|
||||||
private table: azdata.TableComponent;
|
private table: azdata.TableComponent;
|
||||||
private loading: azdata.LoadingComponent;
|
private loading: azdata.LoadingComponent;
|
||||||
private form: azdata.FormContainer;
|
private form: azdata.FormContainer;
|
||||||
@@ -24,10 +16,6 @@ export class ProsePreviewPage extends ImportPage {
|
|||||||
private resultTextComponent: azdata.TextComponent;
|
private resultTextComponent: azdata.TextComponent;
|
||||||
private isSuccess: boolean;
|
private isSuccess: boolean;
|
||||||
|
|
||||||
public constructor(instance: FlatFileWizard, wizardPage: azdata.window.WizardPage, model: ImportDataModel, view: azdata.ModelView, provider: FlatFileProvider) {
|
|
||||||
super(instance, wizardPage, model, view, provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
async start(): Promise<boolean> {
|
async start(): Promise<boolean> {
|
||||||
this.table = this.view.modelBuilder.table().withProperties<azdata.TableComponentProperties>({
|
this.table = this.view.modelBuilder.table().withProperties<azdata.TableComponentProperties>({
|
||||||
data: undefined,
|
data: undefined,
|
||||||
@@ -35,7 +23,7 @@ export class ProsePreviewPage extends ImportPage {
|
|||||||
forceFitColumns: azdata.ColumnSizingMode.DataFit
|
forceFitColumns: azdata.ColumnSizingMode.DataFit
|
||||||
}).component();
|
}).component();
|
||||||
this.refresh = this.view.modelBuilder.button().withProperties({
|
this.refresh = this.view.modelBuilder.button().withProperties({
|
||||||
label: localize('flatFileImport.refresh', "Refresh"),
|
label: constants.refreshText,
|
||||||
isFile: false
|
isFile: false
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
@@ -47,7 +35,7 @@ export class ProsePreviewPage extends ImportPage {
|
|||||||
|
|
||||||
this.resultTextComponent = this.view.modelBuilder.text()
|
this.resultTextComponent = this.view.modelBuilder.text()
|
||||||
.withProperties({
|
.withProperties({
|
||||||
value: this.isSuccess ? this.successTitle : this.failureTitle
|
value: this.isSuccess ? constants.successTitleText : constants.failureTitleText
|
||||||
}).component();
|
}).component();
|
||||||
|
|
||||||
this.form = this.view.modelBuilder.formContainer().withFormItems([
|
this.form = this.view.modelBuilder.formContainer().withFormItems([
|
||||||
@@ -84,14 +72,14 @@ export class ProsePreviewPage extends ImportPage {
|
|||||||
await this.populateTable(this.model.proseDataPreview, this.model.proseColumns.map(c => c.columnName));
|
await this.populateTable(this.model.proseDataPreview, this.model.proseColumns.map(c => c.columnName));
|
||||||
this.isSuccess = true;
|
this.isSuccess = true;
|
||||||
if (this.form) {
|
if (this.form) {
|
||||||
this.resultTextComponent.value = this.successTitle;
|
this.resultTextComponent.value = constants.successTitleText;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
await this.populateTable([], []);
|
await this.populateTable([], []);
|
||||||
this.isSuccess = false;
|
this.isSuccess = false;
|
||||||
if (this.form) {
|
if (this.form) {
|
||||||
this.resultTextComponent.value = this.failureTitle + '\n' + (error ?? '');
|
this.resultTextComponent.value = constants.failureTitleText + '\n' + (error ?? '');
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,15 +4,10 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import * as nls from 'vscode-nls';
|
|
||||||
|
|
||||||
import { ImportDataModel } from '../api/models';
|
|
||||||
import { ImportPage } from '../api/importPage';
|
import { ImportPage } from '../api/importPage';
|
||||||
import { FlatFileProvider, InsertDataResponse } from '../../services/contracts';
|
import { InsertDataResponse } from '../../services/contracts';
|
||||||
import { FlatFileWizard } from '../flatFileWizard';
|
import * as constants from '../../common/constants';
|
||||||
|
|
||||||
const localize = nls.loadMessageBundle();
|
|
||||||
|
|
||||||
|
|
||||||
export class SummaryPage extends ImportPage {
|
export class SummaryPage extends ImportPage {
|
||||||
private table: azdata.TableComponent;
|
private table: azdata.TableComponent;
|
||||||
@@ -20,10 +15,6 @@ export class SummaryPage extends ImportPage {
|
|||||||
private loading: azdata.LoadingComponent;
|
private loading: azdata.LoadingComponent;
|
||||||
private form: azdata.FormContainer;
|
private form: azdata.FormContainer;
|
||||||
|
|
||||||
public constructor(instance: FlatFileWizard, wizardPage: azdata.window.WizardPage, model: ImportDataModel, view: azdata.ModelView, provider: FlatFileProvider) {
|
|
||||||
super(instance, wizardPage, model, view, provider);
|
|
||||||
}
|
|
||||||
|
|
||||||
async start(): Promise<boolean> {
|
async start(): Promise<boolean> {
|
||||||
this.table = this.view.modelBuilder.table().component();
|
this.table = this.view.modelBuilder.table().component();
|
||||||
this.statusText = this.view.modelBuilder.text().component();
|
this.statusText = this.view.modelBuilder.text().component();
|
||||||
@@ -33,11 +24,11 @@ export class SummaryPage extends ImportPage {
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
component: this.table,
|
component: this.table,
|
||||||
title: localize('flatFileImport.importInformation', "Import information")
|
title: constants.importInformationText
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
component: this.loading,
|
component: this.loading,
|
||||||
title: localize('flatFileImport.importStatus', "Import status")
|
title: constants.importStatusText
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
).component();
|
).component();
|
||||||
@@ -70,11 +61,11 @@ export class SummaryPage extends ImportPage {
|
|||||||
private populateTable() {
|
private populateTable() {
|
||||||
this.table.updateProperties({
|
this.table.updateProperties({
|
||||||
data: [
|
data: [
|
||||||
[localize('flatFileImport.serverName', "Server name"), this.model.server.providerName],
|
[constants.serverNameText, this.model.server.providerName],
|
||||||
[localize('flatFileImport.databaseName', "Database name"), this.model.database],
|
[constants.databaseText, this.model.database],
|
||||||
[localize('flatFileImport.tableName', "Table name"), this.model.table],
|
[constants.tableNameText, this.model.table],
|
||||||
[localize('flatFileImport.tableSchema', "Table schema"), this.model.schema],
|
[constants.tableSchemaText, this.model.schema],
|
||||||
[localize('flatFileImport.fileImport', "File to be imported"), this.model.filePath]],
|
[constants.fileImportText, this.model.filePath]],
|
||||||
columns: ['Object type', 'Name'],
|
columns: ['Object type', 'Name'],
|
||||||
width: 600,
|
width: 600,
|
||||||
height: 200
|
height: 200
|
||||||
@@ -96,9 +87,11 @@ export class SummaryPage extends ImportPage {
|
|||||||
|
|
||||||
let result: InsertDataResponse;
|
let result: InsertDataResponse;
|
||||||
let err;
|
let err;
|
||||||
|
let includePasswordInConnectionString = (this.model.server.options.connectionId === 'Integrated') ? false : true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
result = await this.provider.sendInsertDataRequest({
|
result = await this.provider.sendInsertDataRequest({
|
||||||
connectionString: await this.getConnectionString(),
|
connectionString: await this._apiWrapper.getConnectionString(this.model.server.connectionId, includePasswordInConnectionString),
|
||||||
//TODO check what SSMS uses as batch size
|
//TODO check what SSMS uses as batch size
|
||||||
batchSize: 500
|
batchSize: 500
|
||||||
});
|
});
|
||||||
@@ -118,7 +111,7 @@ export class SummaryPage extends ImportPage {
|
|||||||
// TODO: When sql statements are in, implement this.
|
// TODO: When sql statements are in, implement this.
|
||||||
//let rows = await this.getCountRowsInserted();
|
//let rows = await this.getCountRowsInserted();
|
||||||
//if (rows < 0) {
|
//if (rows < 0) {
|
||||||
updateText = localize('flatFileImport.success.norows', "✔ You have successfully inserted the data into a table.");
|
updateText = constants.updateText;
|
||||||
//} else {
|
//} else {
|
||||||
//updateText = localize('flatFileImport.success.rows', '✔ You have successfully inserted {0} rows.', rows);
|
//updateText = localize('flatFileImport.success.rows', '✔ You have successfully inserted {0} rows.', rows);
|
||||||
//}
|
//}
|
||||||
@@ -129,25 +122,6 @@ export class SummaryPage extends ImportPage {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the connection string to send to the middleware
|
|
||||||
*/
|
|
||||||
private async getConnectionString(): Promise<string> {
|
|
||||||
let options = this.model.server.options;
|
|
||||||
let connectionString: string;
|
|
||||||
|
|
||||||
if (options.authenticationType === 'Integrated') {
|
|
||||||
connectionString = `Data Source=${options.server + (options.port ? `,${options.port}` : '')};Initial Catalog=${this.model.database};Integrated Security=True`;
|
|
||||||
} else {
|
|
||||||
let credentials = await azdata.connection.getCredentials(this.model.server.connectionId);
|
|
||||||
connectionString = `Data Source=${options.server + (options.port ? `,${options.port}` : '')};Initial Catalog=${this.model.database};Integrated Security=False;User Id=${options.user};Password=${credentials.password}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Fix this, it's returning undefined string.
|
|
||||||
//await azdata.connection.getConnectionString(this.model.server.connectionId, true);
|
|
||||||
return connectionString;
|
|
||||||
}
|
|
||||||
|
|
||||||
// private async getCountRowsInserted(): Promise<Number> {
|
// private async getCountRowsInserted(): Promise<Number> {
|
||||||
// let connectionUri = await azdata.connection.getUriForConnection(this.model.server.connectionId);
|
// let connectionUri = await azdata.connection.getUriForConnection(this.model.server.connectionId);
|
||||||
// let queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>(this.model.server.providerName, azdata.DataProviderType.QueryProvider);
|
// let queryProvider = azdata.dataprotocol.getProvider<azdata.QueryProvider>(this.model.server.providerName, azdata.DataProviderType.QueryProvider);
|
||||||
|
|||||||
@@ -2,6 +2,191 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@babel/code-frame@^7.8.3":
|
||||||
|
version "7.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e"
|
||||||
|
integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==
|
||||||
|
dependencies:
|
||||||
|
"@babel/highlight" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/core@^7.7.5":
|
||||||
|
version "7.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376"
|
||||||
|
integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.8.3"
|
||||||
|
"@babel/generator" "^7.9.6"
|
||||||
|
"@babel/helper-module-transforms" "^7.9.0"
|
||||||
|
"@babel/helpers" "^7.9.6"
|
||||||
|
"@babel/parser" "^7.9.6"
|
||||||
|
"@babel/template" "^7.8.6"
|
||||||
|
"@babel/traverse" "^7.9.6"
|
||||||
|
"@babel/types" "^7.9.6"
|
||||||
|
convert-source-map "^1.7.0"
|
||||||
|
debug "^4.1.0"
|
||||||
|
gensync "^1.0.0-beta.1"
|
||||||
|
json5 "^2.1.2"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
resolve "^1.3.2"
|
||||||
|
semver "^5.4.1"
|
||||||
|
source-map "^0.5.0"
|
||||||
|
|
||||||
|
"@babel/generator@^7.9.6":
|
||||||
|
version "7.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43"
|
||||||
|
integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.9.6"
|
||||||
|
jsesc "^2.5.1"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
source-map "^0.5.0"
|
||||||
|
|
||||||
|
"@babel/helper-function-name@^7.9.5":
|
||||||
|
version "7.9.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz#2b53820d35275120e1874a82e5aabe1376920a5c"
|
||||||
|
integrity sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-get-function-arity" "^7.8.3"
|
||||||
|
"@babel/template" "^7.8.3"
|
||||||
|
"@babel/types" "^7.9.5"
|
||||||
|
|
||||||
|
"@babel/helper-get-function-arity@^7.8.3":
|
||||||
|
version "7.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5"
|
||||||
|
integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-member-expression-to-functions@^7.8.3":
|
||||||
|
version "7.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c"
|
||||||
|
integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-module-imports@^7.8.3":
|
||||||
|
version "7.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
|
||||||
|
integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-module-transforms@^7.9.0":
|
||||||
|
version "7.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5"
|
||||||
|
integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-module-imports" "^7.8.3"
|
||||||
|
"@babel/helper-replace-supers" "^7.8.6"
|
||||||
|
"@babel/helper-simple-access" "^7.8.3"
|
||||||
|
"@babel/helper-split-export-declaration" "^7.8.3"
|
||||||
|
"@babel/template" "^7.8.6"
|
||||||
|
"@babel/types" "^7.9.0"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
|
||||||
|
"@babel/helper-optimise-call-expression@^7.8.3":
|
||||||
|
version "7.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9"
|
||||||
|
integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-replace-supers@^7.8.6":
|
||||||
|
version "7.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz#03149d7e6a5586ab6764996cd31d6981a17e1444"
|
||||||
|
integrity sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-member-expression-to-functions" "^7.8.3"
|
||||||
|
"@babel/helper-optimise-call-expression" "^7.8.3"
|
||||||
|
"@babel/traverse" "^7.9.6"
|
||||||
|
"@babel/types" "^7.9.6"
|
||||||
|
|
||||||
|
"@babel/helper-simple-access@^7.8.3":
|
||||||
|
version "7.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae"
|
||||||
|
integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/template" "^7.8.3"
|
||||||
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-split-export-declaration@^7.8.3":
|
||||||
|
version "7.8.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9"
|
||||||
|
integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.8.3"
|
||||||
|
|
||||||
|
"@babel/helper-validator-identifier@^7.9.0", "@babel/helper-validator-identifier@^7.9.5":
|
||||||
|
version "7.9.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz#90977a8e6fbf6b431a7dc31752eee233bf052d80"
|
||||||
|
integrity sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==
|
||||||
|
|
||||||
|
"@babel/helpers@^7.9.6":
|
||||||
|
version "7.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.6.tgz#092c774743471d0bb6c7de3ad465ab3d3486d580"
|
||||||
|
integrity sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/template" "^7.8.3"
|
||||||
|
"@babel/traverse" "^7.9.6"
|
||||||
|
"@babel/types" "^7.9.6"
|
||||||
|
|
||||||
|
"@babel/highlight@^7.8.3":
|
||||||
|
version "7.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079"
|
||||||
|
integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.9.0"
|
||||||
|
chalk "^2.0.0"
|
||||||
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
|
"@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6":
|
||||||
|
version "7.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.6.tgz#3b1bbb30dabe600cd72db58720998376ff653bc7"
|
||||||
|
integrity sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==
|
||||||
|
|
||||||
|
"@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6":
|
||||||
|
version "7.8.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b"
|
||||||
|
integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.8.3"
|
||||||
|
"@babel/parser" "^7.8.6"
|
||||||
|
"@babel/types" "^7.8.6"
|
||||||
|
|
||||||
|
"@babel/traverse@^7.7.4", "@babel/traverse@^7.9.6":
|
||||||
|
version "7.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.6.tgz#5540d7577697bf619cc57b92aa0f1c231a94f442"
|
||||||
|
integrity sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.8.3"
|
||||||
|
"@babel/generator" "^7.9.6"
|
||||||
|
"@babel/helper-function-name" "^7.9.5"
|
||||||
|
"@babel/helper-split-export-declaration" "^7.8.3"
|
||||||
|
"@babel/parser" "^7.9.6"
|
||||||
|
"@babel/types" "^7.9.6"
|
||||||
|
debug "^4.1.0"
|
||||||
|
globals "^11.1.0"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
|
||||||
|
"@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0", "@babel/types@^7.9.5", "@babel/types@^7.9.6":
|
||||||
|
version "7.9.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.6.tgz#2c5502b427251e9de1bd2dff95add646d95cc9f7"
|
||||||
|
integrity sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-validator-identifier" "^7.9.5"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
to-fast-properties "^2.0.0"
|
||||||
|
|
||||||
|
"@istanbuljs/schema@^0.1.2":
|
||||||
|
version "0.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
|
||||||
|
integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
|
||||||
|
|
||||||
|
"@types/mocha@^5.2.5":
|
||||||
|
version "5.2.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea"
|
||||||
|
integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==
|
||||||
|
|
||||||
"@types/node@^12.11.7":
|
"@types/node@^12.11.7":
|
||||||
version "12.12.7"
|
version "12.12.7"
|
||||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.7.tgz#01e4ea724d9e3bd50d90c11fd5980ba317d8fa11"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.7.tgz#01e4ea724d9e3bd50d90c11fd5980ba317d8fa11"
|
||||||
@@ -21,6 +206,25 @@ agent-base@^4.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
es6-promisify "^5.0.0"
|
es6-promisify "^5.0.0"
|
||||||
|
|
||||||
|
ansi-regex@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
|
||||||
|
integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
|
||||||
|
|
||||||
|
ansi-styles@^3.2.1:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||||
|
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
||||||
|
dependencies:
|
||||||
|
color-convert "^1.9.0"
|
||||||
|
|
||||||
|
append-transform@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12"
|
||||||
|
integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==
|
||||||
|
dependencies:
|
||||||
|
default-require-extensions "^3.0.0"
|
||||||
|
|
||||||
applicationinsights@1.0.1:
|
applicationinsights@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.0.1.tgz#53446b830fe8d5d619eee2a278b31d3d25030927"
|
resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.0.1.tgz#53446b830fe8d5d619eee2a278b31d3d25030927"
|
||||||
@@ -37,16 +241,92 @@ async-retry@^1.2.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
retry "0.12.0"
|
retry "0.12.0"
|
||||||
|
|
||||||
|
balanced-match@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
|
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||||
|
|
||||||
|
brace-expansion@^1.1.7:
|
||||||
|
version "1.1.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
browser-stdout@1.3.1:
|
||||||
|
version "1.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
|
||||||
|
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
|
||||||
|
|
||||||
buffer-crc32@~0.2.3:
|
buffer-crc32@~0.2.3:
|
||||||
version "0.2.13"
|
version "0.2.13"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
||||||
|
|
||||||
|
callsite@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
|
||||||
|
integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA=
|
||||||
|
|
||||||
|
chalk@^2.0.0:
|
||||||
|
version "2.4.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||||
|
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^3.2.1"
|
||||||
|
escape-string-regexp "^1.0.5"
|
||||||
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
|
charenc@~0.0.1:
|
||||||
|
version "0.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
|
||||||
|
integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
|
||||||
|
|
||||||
chownr@^1.1.3:
|
chownr@^1.1.3:
|
||||||
version "1.1.4"
|
version "1.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||||
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
||||||
|
|
||||||
|
circular-json@^0.3.1:
|
||||||
|
version "0.3.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
||||||
|
integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
|
||||||
|
|
||||||
|
color-convert@^1.9.0:
|
||||||
|
version "1.9.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||||
|
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
||||||
|
dependencies:
|
||||||
|
color-name "1.1.3"
|
||||||
|
|
||||||
|
color-name@1.1.3:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||||
|
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
||||||
|
|
||||||
|
commander@2.15.1:
|
||||||
|
version "2.15.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
|
||||||
|
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
|
||||||
|
|
||||||
|
concat-map@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||||
|
|
||||||
|
convert-source-map@^1.7.0:
|
||||||
|
version "1.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
|
||||||
|
integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
|
||||||
|
dependencies:
|
||||||
|
safe-buffer "~5.1.1"
|
||||||
|
|
||||||
|
crypt@~0.0.1:
|
||||||
|
version "0.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
|
||||||
|
integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
|
||||||
|
|
||||||
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.3.0":
|
"dataprotocol-client@github:Microsoft/sqlops-dataprotocolclient#0.3.0":
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/21487d15a5f753ba885ce1e489abc0af03487544"
|
resolved "https://codeload.github.com/Microsoft/sqlops-dataprotocolclient/tar.gz/21487d15a5f753ba885ce1e489abc0af03487544"
|
||||||
@@ -60,6 +340,13 @@ debug@3.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
ms "2.0.0"
|
||||||
|
|
||||||
|
debug@^2.2.0:
|
||||||
|
version "2.6.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
|
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
|
||||||
|
dependencies:
|
||||||
|
ms "2.0.0"
|
||||||
|
|
||||||
debug@^3.1.0:
|
debug@^3.1.0:
|
||||||
version "3.2.6"
|
version "3.2.6"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||||
@@ -67,6 +354,27 @@ debug@^3.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ms "^2.1.1"
|
ms "^2.1.1"
|
||||||
|
|
||||||
|
debug@^4.1.0, debug@^4.1.1:
|
||||||
|
version "4.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
||||||
|
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
|
||||||
|
dependencies:
|
||||||
|
ms "^2.1.1"
|
||||||
|
|
||||||
|
decache@^4.4.0:
|
||||||
|
version "4.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/decache/-/decache-4.5.1.tgz#94a977a88a4188672c96550ec4889582ceecdf49"
|
||||||
|
integrity sha512-5J37nATc6FmOTLbcsr9qx7Nm28qQyg1SK4xyEHqM0IBkNhWFp0Sm+vKoWYHD8wq+OUEb9jLyaKFfzzd1A9hcoA==
|
||||||
|
dependencies:
|
||||||
|
callsite "^1.0.0"
|
||||||
|
|
||||||
|
default-require-extensions@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96"
|
||||||
|
integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==
|
||||||
|
dependencies:
|
||||||
|
strip-bom "^4.0.0"
|
||||||
|
|
||||||
diagnostic-channel-publishers@0.2.1:
|
diagnostic-channel-publishers@0.2.1:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
|
resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
|
||||||
@@ -79,6 +387,11 @@ diagnostic-channel@0.2.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
semver "^5.3.0"
|
semver "^5.3.0"
|
||||||
|
|
||||||
|
diff@3.5.0:
|
||||||
|
version "3.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
|
||||||
|
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
|
||||||
|
|
||||||
dom-serializer@0:
|
dom-serializer@0:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
|
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
|
||||||
@@ -124,6 +437,11 @@ es6-promisify@^5.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
es6-promise "^4.0.3"
|
es6-promise "^4.0.3"
|
||||||
|
|
||||||
|
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
|
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||||
|
|
||||||
eventemitter2@^5.0.1:
|
eventemitter2@^5.0.1:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452"
|
resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-5.0.1.tgz#6197a095d5fb6b57e8942f6fd7eaad63a09c9452"
|
||||||
@@ -143,6 +461,70 @@ fs-minipass@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minipass "^3.0.0"
|
minipass "^3.0.0"
|
||||||
|
|
||||||
|
fs.realpath@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||||
|
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||||
|
|
||||||
|
gensync@^1.0.0-beta.1:
|
||||||
|
version "1.0.0-beta.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
|
||||||
|
integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
|
||||||
|
|
||||||
|
glob@7.1.2:
|
||||||
|
version "7.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
|
||||||
|
integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
glob@^7.1.2, glob@^7.1.3:
|
||||||
|
version "7.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
|
||||||
|
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
|
||||||
|
dependencies:
|
||||||
|
fs.realpath "^1.0.0"
|
||||||
|
inflight "^1.0.4"
|
||||||
|
inherits "2"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
once "^1.3.0"
|
||||||
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
|
globals@^11.1.0:
|
||||||
|
version "11.12.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||||
|
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||||
|
|
||||||
|
growl@1.10.5:
|
||||||
|
version "1.10.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
|
||||||
|
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
|
||||||
|
|
||||||
|
has-flag@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
|
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||||
|
|
||||||
|
has-flag@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||||
|
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||||
|
|
||||||
|
he@1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
|
||||||
|
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
|
||||||
|
|
||||||
|
html-escaper@^2.0.0:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
|
||||||
|
integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
|
||||||
|
|
||||||
htmlparser2@^3.10.1:
|
htmlparser2@^3.10.1:
|
||||||
version "3.10.1"
|
version "3.10.1"
|
||||||
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
|
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
|
||||||
@@ -171,16 +553,150 @@ https-proxy-agent@^2.2.3:
|
|||||||
agent-base "^4.3.0"
|
agent-base "^4.3.0"
|
||||||
debug "^3.1.0"
|
debug "^3.1.0"
|
||||||
|
|
||||||
|
inflight@^1.0.4:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||||
|
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
|
||||||
|
dependencies:
|
||||||
|
once "^1.3.0"
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
|
inherits@2:
|
||||||
|
version "2.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||||
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||||
|
|
||||||
inherits@^2.0.1, inherits@^2.0.3:
|
inherits@^2.0.1, inherits@^2.0.3:
|
||||||
version "2.0.3"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||||
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
|
||||||
|
|
||||||
|
is-buffer@~1.1.1:
|
||||||
|
version "1.1.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||||
|
integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
|
||||||
|
|
||||||
|
istanbul-lib-coverage@^2.0.5:
|
||||||
|
version "2.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49"
|
||||||
|
integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==
|
||||||
|
|
||||||
|
istanbul-lib-coverage@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
|
||||||
|
integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==
|
||||||
|
|
||||||
|
istanbul-lib-hook@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6"
|
||||||
|
integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==
|
||||||
|
dependencies:
|
||||||
|
append-transform "^2.0.0"
|
||||||
|
|
||||||
|
istanbul-lib-instrument@^4.0.0:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6"
|
||||||
|
integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/core" "^7.7.5"
|
||||||
|
"@babel/parser" "^7.7.5"
|
||||||
|
"@babel/template" "^7.7.4"
|
||||||
|
"@babel/traverse" "^7.7.4"
|
||||||
|
"@istanbuljs/schema" "^0.1.2"
|
||||||
|
istanbul-lib-coverage "^3.0.0"
|
||||||
|
semver "^6.3.0"
|
||||||
|
|
||||||
|
istanbul-lib-report@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
|
||||||
|
integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
|
||||||
|
dependencies:
|
||||||
|
istanbul-lib-coverage "^3.0.0"
|
||||||
|
make-dir "^3.0.0"
|
||||||
|
supports-color "^7.1.0"
|
||||||
|
|
||||||
|
istanbul-lib-source-maps@^3.0.6:
|
||||||
|
version "3.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8"
|
||||||
|
integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==
|
||||||
|
dependencies:
|
||||||
|
debug "^4.1.1"
|
||||||
|
istanbul-lib-coverage "^2.0.5"
|
||||||
|
make-dir "^2.1.0"
|
||||||
|
rimraf "^2.6.3"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
istanbul-reports@^3.0.0:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b"
|
||||||
|
integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==
|
||||||
|
dependencies:
|
||||||
|
html-escaper "^2.0.0"
|
||||||
|
istanbul-lib-report "^3.0.0"
|
||||||
|
|
||||||
|
js-tokens@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
|
||||||
|
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||||
|
|
||||||
|
jsesc@^2.5.1:
|
||||||
|
version "2.5.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
||||||
|
integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
|
||||||
|
|
||||||
|
json5@^2.1.2:
|
||||||
|
version "2.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
|
||||||
|
integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
|
||||||
|
dependencies:
|
||||||
|
minimist "^1.2.5"
|
||||||
|
|
||||||
|
lodash@^4.16.4, lodash@^4.17.13, lodash@^4.17.4:
|
||||||
|
version "4.17.15"
|
||||||
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
||||||
|
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
||||||
|
|
||||||
|
make-dir@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
|
||||||
|
integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==
|
||||||
|
dependencies:
|
||||||
|
pify "^4.0.1"
|
||||||
|
semver "^5.6.0"
|
||||||
|
|
||||||
|
make-dir@^3.0.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
|
||||||
|
integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
|
||||||
|
dependencies:
|
||||||
|
semver "^6.0.0"
|
||||||
|
|
||||||
|
md5@^2.1.0:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
|
||||||
|
integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
|
||||||
|
dependencies:
|
||||||
|
charenc "~0.0.1"
|
||||||
|
crypt "~0.0.1"
|
||||||
|
is-buffer "~1.1.1"
|
||||||
|
|
||||||
|
minimatch@3.0.4, minimatch@^3.0.4:
|
||||||
|
version "3.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||||
|
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
minimist@0.0.8:
|
minimist@0.0.8:
|
||||||
version "0.0.8"
|
version "0.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||||
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
|
||||||
|
|
||||||
|
minimist@^1.2.5:
|
||||||
|
version "1.2.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||||
|
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||||
|
|
||||||
minipass@^3.0.0:
|
minipass@^3.0.0:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5"
|
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5"
|
||||||
@@ -196,7 +712,7 @@ minizlib@^2.1.0:
|
|||||||
minipass "^3.0.0"
|
minipass "^3.0.0"
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
mkdirp@^0.5.1:
|
mkdirp@0.5.1, mkdirp@^0.5.1:
|
||||||
version "0.5.1"
|
version "0.5.1"
|
||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||||
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
|
||||||
@@ -208,6 +724,49 @@ mkdirp@^1.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea"
|
||||||
integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==
|
integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==
|
||||||
|
|
||||||
|
mkdirp@~0.5.1:
|
||||||
|
version "0.5.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
|
||||||
|
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
|
||||||
|
dependencies:
|
||||||
|
minimist "^1.2.5"
|
||||||
|
|
||||||
|
mocha-junit-reporter@^1.17.0:
|
||||||
|
version "1.23.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.23.3.tgz#941e219dd759ed732f8641e165918aa8b167c981"
|
||||||
|
integrity sha512-ed8LqbRj1RxZfjt/oC9t12sfrWsjZ3gNnbhV1nuj9R/Jb5/P3Xb4duv2eCfCDMYH+fEu0mqca7m4wsiVjsxsvA==
|
||||||
|
dependencies:
|
||||||
|
debug "^2.2.0"
|
||||||
|
md5 "^2.1.0"
|
||||||
|
mkdirp "~0.5.1"
|
||||||
|
strip-ansi "^4.0.0"
|
||||||
|
xml "^1.0.0"
|
||||||
|
|
||||||
|
mocha-multi-reporters@^1.1.7:
|
||||||
|
version "1.1.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz#cc7f3f4d32f478520941d852abb64d9988587d82"
|
||||||
|
integrity sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI=
|
||||||
|
dependencies:
|
||||||
|
debug "^3.1.0"
|
||||||
|
lodash "^4.16.4"
|
||||||
|
|
||||||
|
mocha@^5.2.0:
|
||||||
|
version "5.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
|
||||||
|
integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
|
||||||
|
dependencies:
|
||||||
|
browser-stdout "1.3.1"
|
||||||
|
commander "2.15.1"
|
||||||
|
debug "3.1.0"
|
||||||
|
diff "3.5.0"
|
||||||
|
escape-string-regexp "1.0.5"
|
||||||
|
glob "7.1.2"
|
||||||
|
growl "1.10.5"
|
||||||
|
he "1.1.1"
|
||||||
|
minimatch "3.0.4"
|
||||||
|
mkdirp "0.5.1"
|
||||||
|
supports-color "5.4.0"
|
||||||
|
|
||||||
ms@2.0.0:
|
ms@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
@@ -218,16 +777,43 @@ ms@^2.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
|
||||||
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
|
||||||
|
|
||||||
|
once@^1.3.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
||||||
|
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
||||||
|
dependencies:
|
||||||
|
wrappy "1"
|
||||||
|
|
||||||
os-tmpdir@~1.0.2:
|
os-tmpdir@~1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||||
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||||
|
|
||||||
|
path-is-absolute@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||||
|
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
||||||
|
|
||||||
|
path-parse@^1.0.6:
|
||||||
|
version "1.0.6"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||||
|
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||||
|
|
||||||
pend@~1.2.0:
|
pend@~1.2.0:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||||
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
||||||
|
|
||||||
|
pify@^4.0.1:
|
||||||
|
version "4.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||||
|
integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
|
||||||
|
|
||||||
|
postinstall-build@^5.0.1:
|
||||||
|
version "5.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/postinstall-build/-/postinstall-build-5.0.3.tgz#238692f712a481d8f5bc8960e94786036241efc7"
|
||||||
|
integrity sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==
|
||||||
|
|
||||||
readable-stream@^3.1.1:
|
readable-stream@^3.1.1:
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.1.tgz#ed6bbc6c5ba58b090039ff18ce670515795aeb06"
|
||||||
@@ -237,12 +823,26 @@ readable-stream@^3.1.1:
|
|||||||
string_decoder "^1.1.1"
|
string_decoder "^1.1.1"
|
||||||
util-deprecate "^1.0.1"
|
util-deprecate "^1.0.1"
|
||||||
|
|
||||||
|
resolve@^1.3.2:
|
||||||
|
version "1.17.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
|
||||||
|
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
|
||||||
|
dependencies:
|
||||||
|
path-parse "^1.0.6"
|
||||||
|
|
||||||
retry@0.12.0:
|
retry@0.12.0:
|
||||||
version "0.12.0"
|
version "0.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
|
resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
|
||||||
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
|
integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=
|
||||||
|
|
||||||
safe-buffer@~5.1.0:
|
rimraf@^2.6.3:
|
||||||
|
version "2.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
|
||||||
|
integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
|
||||||
|
dependencies:
|
||||||
|
glob "^7.1.3"
|
||||||
|
|
||||||
|
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||||
@@ -252,6 +852,16 @@ semver@^5.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||||
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
|
||||||
|
|
||||||
|
semver@^5.4.1, semver@^5.6.0:
|
||||||
|
version "5.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||||
|
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||||
|
|
||||||
|
semver@^6.0.0, semver@^6.3.0:
|
||||||
|
version "6.3.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
|
||||||
|
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
|
||||||
|
|
||||||
service-downloader@0.2.1:
|
service-downloader@0.2.1:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/service-downloader/-/service-downloader-0.2.1.tgz#8bd756bc4bc0cbfdf04fe71d4337f19ce6196203"
|
resolved "https://registry.yarnpkg.com/service-downloader/-/service-downloader-0.2.1.tgz#8bd756bc4bc0cbfdf04fe71d4337f19ce6196203"
|
||||||
@@ -266,6 +876,60 @@ service-downloader@0.2.1:
|
|||||||
tmp "^0.0.33"
|
tmp "^0.0.33"
|
||||||
yauzl "^2.10.0"
|
yauzl "^2.10.0"
|
||||||
|
|
||||||
|
should-equal@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3"
|
||||||
|
integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==
|
||||||
|
dependencies:
|
||||||
|
should-type "^1.4.0"
|
||||||
|
|
||||||
|
should-format@^3.0.3:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1"
|
||||||
|
integrity sha1-m/yPdPo5IFxT04w01xcwPidxJPE=
|
||||||
|
dependencies:
|
||||||
|
should-type "^1.3.0"
|
||||||
|
should-type-adaptors "^1.0.1"
|
||||||
|
|
||||||
|
should-type-adaptors@^1.0.1:
|
||||||
|
version "1.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a"
|
||||||
|
integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==
|
||||||
|
dependencies:
|
||||||
|
should-type "^1.3.0"
|
||||||
|
should-util "^1.0.0"
|
||||||
|
|
||||||
|
should-type@^1.3.0, should-type@^1.4.0:
|
||||||
|
version "1.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3"
|
||||||
|
integrity sha1-B1bYzoRt/QmEOmlHcZ36DUz/XPM=
|
||||||
|
|
||||||
|
should-util@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28"
|
||||||
|
integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==
|
||||||
|
|
||||||
|
should@^13.2.1:
|
||||||
|
version "13.2.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10"
|
||||||
|
integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==
|
||||||
|
dependencies:
|
||||||
|
should-equal "^2.0.0"
|
||||||
|
should-format "^3.0.3"
|
||||||
|
should-type "^1.4.0"
|
||||||
|
should-type-adaptors "^1.0.1"
|
||||||
|
should-util "^1.0.0"
|
||||||
|
|
||||||
|
source-map@^0.5.0:
|
||||||
|
version "0.5.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||||
|
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
|
||||||
|
|
||||||
|
source-map@^0.6.1:
|
||||||
|
version "0.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||||
|
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||||
|
|
||||||
string_decoder@^1.1.1:
|
string_decoder@^1.1.1:
|
||||||
version "1.2.0"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
|
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
|
||||||
@@ -273,6 +937,39 @@ string_decoder@^1.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
safe-buffer "~5.1.0"
|
safe-buffer "~5.1.0"
|
||||||
|
|
||||||
|
strip-ansi@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
|
||||||
|
integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^3.0.0"
|
||||||
|
|
||||||
|
strip-bom@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
|
||||||
|
integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
|
||||||
|
|
||||||
|
supports-color@5.4.0:
|
||||||
|
version "5.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
|
||||||
|
integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
|
supports-color@^5.3.0:
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||||
|
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
|
supports-color@^7.1.0:
|
||||||
|
version "7.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
|
||||||
|
integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^4.0.0"
|
||||||
|
|
||||||
tar@^6.0.1:
|
tar@^6.0.1:
|
||||||
version "6.0.1"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa"
|
resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa"
|
||||||
@@ -292,6 +989,20 @@ tmp@^0.0.33:
|
|||||||
dependencies:
|
dependencies:
|
||||||
os-tmpdir "~1.0.2"
|
os-tmpdir "~1.0.2"
|
||||||
|
|
||||||
|
to-fast-properties@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
|
||||||
|
integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
|
||||||
|
|
||||||
|
typemoq@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/typemoq/-/typemoq-2.1.0.tgz#4452ce360d92cf2a1a180f0c29de2803f87af1e8"
|
||||||
|
integrity sha512-DtRNLb7x8yCTv/KHlwes+NI+aGb4Vl1iPC63Hhtcvk1DpxSAZzKWQv0RQFY0jX2Uqj0SDBNl8Na4e6MV6TNDgw==
|
||||||
|
dependencies:
|
||||||
|
circular-json "^0.3.1"
|
||||||
|
lodash "^4.17.4"
|
||||||
|
postinstall-build "^5.0.1"
|
||||||
|
|
||||||
util-deprecate@^1.0.1:
|
util-deprecate@^1.0.1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||||
@@ -334,6 +1045,31 @@ vscode-nls@^3.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.5.tgz#25520c1955108036dec607c85e00a522f247f1a4"
|
resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-3.2.5.tgz#25520c1955108036dec607c85e00a522f247f1a4"
|
||||||
integrity sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw==
|
integrity sha512-ITtoh3V4AkWXMmp3TB97vsMaHRgHhsSFPsUdzlueSL+dRZbSNTZeOmdQv60kjCV306ghPxhDeoNUEm3+EZMuyw==
|
||||||
|
|
||||||
|
vscodetestcover@^1.0.9:
|
||||||
|
version "1.0.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/vscodetestcover/-/vscodetestcover-1.0.9.tgz#0191f403dd59ba1153fc57979e281e992ce63731"
|
||||||
|
integrity sha512-8z2961KF9Tuz5XdHAC6RMV3CrzAoUcfIK7wLYjLIXD4dbHIT7ceZMhoxToW1olyi3pFnThlS4lRXtx8Q5iyMMQ==
|
||||||
|
dependencies:
|
||||||
|
decache "^4.4.0"
|
||||||
|
glob "^7.1.2"
|
||||||
|
istanbul-lib-coverage "^3.0.0"
|
||||||
|
istanbul-lib-hook "^3.0.0"
|
||||||
|
istanbul-lib-instrument "^4.0.0"
|
||||||
|
istanbul-lib-report "^3.0.0"
|
||||||
|
istanbul-lib-source-maps "^3.0.6"
|
||||||
|
istanbul-reports "^3.0.0"
|
||||||
|
mocha "^5.2.0"
|
||||||
|
|
||||||
|
wrappy@1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
|
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
||||||
|
|
||||||
|
xml@^1.0.0:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"
|
||||||
|
integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=
|
||||||
|
|
||||||
yallist@^4.0.0:
|
yallist@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ if "%INTEGRATION_TEST_ELECTRON_PATH%"=="" (
|
|||||||
call yarn gulp compile-extension:azurecore
|
call yarn gulp compile-extension:azurecore
|
||||||
call yarn gulp compile-extension:cms
|
call yarn gulp compile-extension:cms
|
||||||
call yarn gulp compile-extension:dacpac
|
call yarn gulp compile-extension:dacpac
|
||||||
|
call yarn gulp compile-extension:import
|
||||||
call yarn gulp compile-extension:schema-compare
|
call yarn gulp compile-extension:schema-compare
|
||||||
call yarn gulp compile-extension:mssql
|
call yarn gulp compile-extension:mssql
|
||||||
call yarn gulp compile-extension:notebook
|
call yarn gulp compile-extension:notebook
|
||||||
@@ -66,6 +67,11 @@ echo *** starting dacpac tests ***
|
|||||||
echo *****************************
|
echo *****************************
|
||||||
call "%INTEGRATION_TEST_ELECTRON_PATH%" --extensionDevelopmentPath=%~dp0\..\extensions\dacpac --extensionTestsPath=%~dp0\..\extensions\dacpac\out\test --user-data-dir=%VSCODEUSERDATADIR% --extensions-dir=%VSCODEEXTENSIONSDIR% --remote-debugging-port=9222 --disable-telemetry --disable-crash-reporter --disable-updates --nogpu
|
call "%INTEGRATION_TEST_ELECTRON_PATH%" --extensionDevelopmentPath=%~dp0\..\extensions\dacpac --extensionTestsPath=%~dp0\..\extensions\dacpac\out\test --user-data-dir=%VSCODEUSERDATADIR% --extensions-dir=%VSCODEEXTENSIONSDIR% --remote-debugging-port=9222 --disable-telemetry --disable-crash-reporter --disable-updates --nogpu
|
||||||
|
|
||||||
|
echo *****************************
|
||||||
|
echo *** starting import tests ***
|
||||||
|
echo *****************************
|
||||||
|
call "%INTEGRATION_TEST_ELECTRON_PATH%" --extensionDevelopmentPath=%~dp0\..\extensions\import --extensionTestsPath=%~dp0\..\extensions\import\out\test --user-data-dir=%VSCODEUSERDATADIR% --extensions-dir=%VSCODEEXTENSIONSDIR% --remote-debugging-port=9222 --disable-telemetry --disable-crash-reporter --disable-updates --nogpu
|
||||||
|
|
||||||
echo *************************************
|
echo *************************************
|
||||||
echo *** starting schema compare tests ***
|
echo *** starting schema compare tests ***
|
||||||
echo *************************************
|
echo *************************************
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ const extensionList = [
|
|||||||
'azurecore',
|
'azurecore',
|
||||||
'cms',
|
'cms',
|
||||||
'dacpac',
|
'dacpac',
|
||||||
|
'import',
|
||||||
'schema-compare',
|
'schema-compare',
|
||||||
//'mssql',
|
//'mssql',
|
||||||
'notebook',
|
'notebook',
|
||||||
|
|||||||
@@ -64,6 +64,11 @@ echo *** starting dacpac tests ***
|
|||||||
echo *****************************
|
echo *****************************
|
||||||
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX --extensionDevelopmentPath=$ROOT/extensions/dacpac --extensionTestsPath=$ROOT/extensions/dacpac/out/test --user-data-dir=$VSCODEUSERDATADIR --extensions-dir=$VSCODEEXTDIR --disable-telemetry --disable-crash-reporter --disable-updates --nogpu
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX --extensionDevelopmentPath=$ROOT/extensions/dacpac --extensionTestsPath=$ROOT/extensions/dacpac/out/test --user-data-dir=$VSCODEUSERDATADIR --extensions-dir=$VSCODEEXTDIR --disable-telemetry --disable-crash-reporter --disable-updates --nogpu
|
||||||
|
|
||||||
|
echo *****************************
|
||||||
|
echo *** starting import tests ***
|
||||||
|
echo *****************************
|
||||||
|
"$INTEGRATION_TEST_ELECTRON_PATH" $LINUX_NO_SANDBOX --extensionDevelopmentPath=$ROOT/extensions/import --extensionTestsPath=$ROOT/extensions/import/out/test --user-data-dir=$VSCODEUSERDATADIR --extensions-dir=$VSCODEEXTDIR --disable-telemetry --disable-crash-reporter --disable-updates --nogpu
|
||||||
|
|
||||||
echo *************************************
|
echo *************************************
|
||||||
echo *** starting schema compare tests ***
|
echo *** starting schema compare tests ***
|
||||||
echo *************************************
|
echo *************************************
|
||||||
|
|||||||
Reference in New Issue
Block a user