mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 18:46:43 -05:00
Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16801c522d | ||
|
|
e9389a5069 | ||
|
|
0e4204752a | ||
|
|
f579d1bb8d | ||
|
|
b35241dbe6 | ||
|
|
588b9a1fcf | ||
|
|
0c870ed4e6 | ||
|
|
3d6929e78f | ||
|
|
fd08943244 | ||
|
|
8c99e22fb4 | ||
|
|
86fbc4002a | ||
|
|
2f57356ae8 | ||
|
|
eca946a885 | ||
|
|
601bd4bd03 | ||
|
|
87b064aa7e | ||
|
|
d87eebd6a5 | ||
|
|
9c14910c55 | ||
|
|
61e3700ed4 | ||
|
|
09f017c6f4 | ||
|
|
b01218cbbc | ||
|
|
f984e89493 | ||
|
|
479fac2310 | ||
|
|
32ea281e11 | ||
|
|
29031462c7 | ||
|
|
7379d66729 | ||
|
|
705a7d7dc6 | ||
|
|
9764438982 |
@@ -179,13 +179,6 @@ steps:
|
|||||||
zip -d $(agent.builddirectory)/VSCode-darwin.zip "*.pkg"
|
zip -d $(agent.builddirectory)/VSCode-darwin.zip "*.pkg"
|
||||||
displayName: Clean Archive
|
displayName: Clean Archive
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
AZURE_DOCUMENTDB_MASTERKEY="$(builds-docdb-key-readwrite)" \
|
|
||||||
AZURE_STORAGE_ACCESS_KEY_2="$(vscode-storage-key)" \
|
|
||||||
node build/azure-pipelines/common/createAsset.js darwin-unnotarized archive "VSCode-darwin-$VSCODE_QUALITY.zip" $(agent.builddirectory)/VSCode-darwin.zip
|
|
||||||
displayName: Publish Unnotarized Build
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin
|
APP_ROOT=$(agent.builddirectory)/VSCode-darwin
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ jobs:
|
|||||||
- Compile
|
- Compile
|
||||||
steps:
|
steps:
|
||||||
- template: linux/sql-product-build-linux.yml
|
- template: linux/sql-product-build-linux.yml
|
||||||
|
timeoutInMinutes: 70
|
||||||
|
|
||||||
- job: Windows
|
- job: Windows
|
||||||
condition: eq(variables['VSCODE_BUILD_WIN32'], 'true')
|
condition: eq(variables['VSCODE_BUILD_WIN32'], 'true')
|
||||||
@@ -40,6 +41,7 @@ jobs:
|
|||||||
- Compile
|
- Compile
|
||||||
steps:
|
steps:
|
||||||
- template: win32/sql-product-build-win32.yml
|
- template: win32/sql-product-build-win32.yml
|
||||||
|
timeoutInMinutes: 70
|
||||||
|
|
||||||
- job: Windows_Test
|
- job: Windows_Test
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_BUILD_WIN32'], 'true'))
|
condition: and(succeeded(), eq(variables['VSCODE_BUILD_WIN32'], 'true'))
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"name": "Microsoft.sqlservernotebook",
|
"name": "Microsoft.sqlservernotebook",
|
||||||
"version": "0.3.4",
|
"version": "0.3.5",
|
||||||
"repo": "https://github.com/Microsoft/azuredatastudio"
|
"repo": "https://github.com/Microsoft/azuredatastudio"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -39,6 +39,11 @@
|
|||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
"default": true,
|
"default": true,
|
||||||
"description": "%config.enablePublicCloudDescription%"
|
"description": "%config.enablePublicCloudDescription%"
|
||||||
|
},
|
||||||
|
"accounts.azure.enableDeviceCodeLogin": {
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false,
|
||||||
|
"description": "%config.enableDeviceCodeLogin%"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -21,5 +21,6 @@
|
|||||||
"config.enableUsGovCloudDescription": "Should US Government Azure cloud (Fairfax) integration be enabled",
|
"config.enableUsGovCloudDescription": "Should US Government Azure cloud (Fairfax) integration be enabled",
|
||||||
"config.enableChinaCloudDescription": "Should Azure China integration be enabled",
|
"config.enableChinaCloudDescription": "Should Azure China integration be enabled",
|
||||||
"config.enableGermanyCloudDescription": "Should Azure Germany integration be enabled",
|
"config.enableGermanyCloudDescription": "Should Azure Germany integration be enabled",
|
||||||
"config.enableArcFeatures": "Should features related to Azure Arc be enabled (preview)"
|
"config.enableArcFeatures": "Should features related to Azure Arc be enabled (preview)",
|
||||||
|
"config.enableDeviceCodeLogin": "Enable Azure Active Directory device code login mechanism"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,10 @@ export class AzureAccountProvider implements azdata.AccountProvider {
|
|||||||
constructor(private metadata: AzureAccountProviderMetadata, private _tokenCache: TokenCache, private _context: vscode.ExtensionContext) {
|
constructor(private metadata: AzureAccountProviderMetadata, private _tokenCache: TokenCache, private _context: vscode.ExtensionContext) {
|
||||||
this.commonAuthorityUrl = url.resolve(this.metadata.settings.host, AzureAccountProvider.AadCommonTenant);
|
this.commonAuthorityUrl = url.resolve(this.metadata.settings.host, AzureAccountProvider.AadCommonTenant);
|
||||||
}
|
}
|
||||||
|
// interface method
|
||||||
|
clearTokenCache(): Thenable<void> {
|
||||||
|
return this._tokenCache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
// interface method
|
// interface method
|
||||||
initialize(storedAccounts: azdata.Account[]): Thenable<azdata.Account[]> {
|
initialize(storedAccounts: azdata.Account[]): Thenable<azdata.Account[]> {
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ import * as path from 'path';
|
|||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import CredentialServiceTokenCache from './tokenCache';
|
import CredentialServiceTokenCache from './tokenCache';
|
||||||
import providerSettings from './providerSettings';
|
import providerSettings from './providerSettings';
|
||||||
import { AzureAccountProvider as AzureAccountProvider } from './azureAccountProvider2';
|
import { AzureAccountProvider as OAuthAzureAccountProvider } from './azureAccountProvider2';
|
||||||
|
import { AzureAccountProvider as DeviceCodeAzureAccountProvider } from './azureAccountProvider';
|
||||||
import { AzureAccountProviderMetadata, ProviderSettings } from './interfaces';
|
import { AzureAccountProviderMetadata, ProviderSettings } from './interfaces';
|
||||||
import * as loc from '../localizedConstants';
|
import * as loc from '../localizedConstants';
|
||||||
|
|
||||||
@@ -70,8 +71,7 @@ export class AzureAccountProviderService implements vscode.Disposable {
|
|||||||
// let self = this;
|
// let self = this;
|
||||||
|
|
||||||
let promises: Thenable<void>[] = providerSettings.map(provider => {
|
let promises: Thenable<void>[] = providerSettings.map(provider => {
|
||||||
// return self._accountProviders[provider.metadata.id].clearTokenCache();
|
return this._accountProviders[provider.metadata.id]?.clearTokenCache();
|
||||||
return Promise.resolve();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(promises)
|
return Promise.all(promises)
|
||||||
@@ -133,12 +133,18 @@ export class AzureAccountProviderService implements vscode.Disposable {
|
|||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
//let config = vscode.workspace.getConfiguration(AzureAccountProviderService.ConfigurationSection);
|
let config = vscode.workspace.getConfiguration(AzureAccountProviderService.ConfigurationSection);
|
||||||
|
|
||||||
let tokenCacheKey = `azureTokenCache-${provider.metadata.id}`;
|
let tokenCacheKey = `azureTokenCache-${provider.metadata.id}`;
|
||||||
let tokenCachePath = path.join(this._userStoragePath, tokenCacheKey);
|
let tokenCachePath = path.join(this._userStoragePath, tokenCacheKey);
|
||||||
let tokenCache = new CredentialServiceTokenCache(self._credentialProvider, tokenCacheKey, tokenCachePath);
|
let tokenCache = new CredentialServiceTokenCache(self._credentialProvider, tokenCacheKey, tokenCachePath);
|
||||||
let accountProvider = new AzureAccountProvider(provider.metadata as AzureAccountProviderMetadata, tokenCache, this._context);
|
const enableDeviceCode = config.get('enableDeviceCodeLogin');
|
||||||
|
let accountProvider: azdata.AccountProvider;
|
||||||
|
if (enableDeviceCode === undefined || enableDeviceCode === false) {
|
||||||
|
accountProvider = new OAuthAzureAccountProvider(provider.metadata as AzureAccountProviderMetadata, tokenCache, this._context);
|
||||||
|
} else {
|
||||||
|
accountProvider = new DeviceCodeAzureAccountProvider(provider.metadata as AzureAccountProviderMetadata, tokenCache);
|
||||||
|
}
|
||||||
self._accountProviders[provider.metadata.id] = accountProvider;
|
self._accountProviders[provider.metadata.id] = accountProvider;
|
||||||
self._accountDisposals[provider.metadata.id] = azdata.accounts.registerAccountProvider(provider.metadata, accountProvider);
|
self._accountDisposals[provider.metadata.id] = azdata.accounts.registerAccountProvider(provider.metadata, accountProvider);
|
||||||
resolve();
|
resolve();
|
||||||
|
|||||||
@@ -149,13 +149,26 @@ export function registerAzureResourceCommands(appContext: AppContext, tree: Azur
|
|||||||
};
|
};
|
||||||
}).sort((a, b) => a.label.localeCompare(b.label));
|
}).sort((a, b) => a.label.localeCompare(b.label));
|
||||||
|
|
||||||
const selectedSubscriptionQuickPickItems = await window.showQuickPick(subscriptionQuickPickItems, { canPickMany: true });
|
const selectedQuickPickItems = subscriptionQuickPickItems.filter(s => s.picked);
|
||||||
if (selectedSubscriptionQuickPickItems && selectedSubscriptionQuickPickItems.length > 0) {
|
|
||||||
await tree.refresh(node, false);
|
|
||||||
|
|
||||||
selectedSubscriptions = selectedSubscriptionQuickPickItems.map((subscriptionItem) => subscriptionItem.subscription);
|
const quickPick = window.createQuickPick<AzureResourceSubscriptionQuickPickItem>();
|
||||||
await subscriptionFilterService.saveSelectedSubscriptions(accountNode.account, selectedSubscriptions);
|
quickPick.ok = true;
|
||||||
}
|
quickPick.items = subscriptionQuickPickItems;
|
||||||
|
quickPick.canSelectMany = true;
|
||||||
|
quickPick.selectedItems = selectedQuickPickItems;
|
||||||
|
|
||||||
|
quickPick.show();
|
||||||
|
|
||||||
|
quickPick.onDidAccept(async event => {
|
||||||
|
quickPick.hide();
|
||||||
|
const selectedSubscriptionQuickPickItems = quickPick.selectedItems;
|
||||||
|
if (selectedSubscriptionQuickPickItems && selectedSubscriptionQuickPickItems.length > 0) {
|
||||||
|
await tree.refresh(node, false);
|
||||||
|
|
||||||
|
selectedSubscriptions = selectedSubscriptionQuickPickItems.map((subscriptionItem) => subscriptionItem.subscription);
|
||||||
|
await subscriptionFilterService.saveSelectedSubscriptions(accountNode.account, selectedSubscriptions);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
appContext.apiWrapper.registerCommand('azure.resource.refreshall', () => tree.notifyNodeChanged(undefined));
|
appContext.apiWrapper.registerCommand('azure.resource.refreshall', () => tree.notifyNodeChanged(undefined));
|
||||||
|
|||||||
@@ -54,19 +54,21 @@ export class AzureResourceSubscriptionFilterService implements IAzureResourceSub
|
|||||||
filters.push(...selectedSubscriptionsCache[accountId].map((subcription) => `${accountId}/${subcription.id}/${subcription.name}`));
|
filters.push(...selectedSubscriptionsCache[accountId].map((subcription) => `${accountId}/${subcription.id}/${subcription.name}`));
|
||||||
}
|
}
|
||||||
|
|
||||||
const resourceFilterConfig = this._config.inspect<string[]>(AzureResourceSubscriptionFilterService.filterConfigName);
|
if (this._config) {
|
||||||
let configTarget = ConfigurationTarget.Global;
|
const resourceFilterConfig = this._config.inspect<string[]>(AzureResourceSubscriptionFilterService.filterConfigName);
|
||||||
if (resourceFilterConfig) {
|
let configTarget = ConfigurationTarget.Global;
|
||||||
if (resourceFilterConfig.workspaceFolderValue) {
|
if (resourceFilterConfig) {
|
||||||
configTarget = ConfigurationTarget.WorkspaceFolder;
|
if (resourceFilterConfig.workspaceFolderValue) {
|
||||||
} else if (resourceFilterConfig.workspaceValue) {
|
configTarget = ConfigurationTarget.WorkspaceFolder;
|
||||||
configTarget = ConfigurationTarget.Workspace;
|
} else if (resourceFilterConfig.workspaceValue) {
|
||||||
} else if (resourceFilterConfig.globalValue) {
|
configTarget = ConfigurationTarget.Workspace;
|
||||||
configTarget = ConfigurationTarget.Global;
|
} else if (resourceFilterConfig.globalValue) {
|
||||||
|
configTarget = ConfigurationTarget.Global;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
await this._config.update(AzureResourceSubscriptionFilterService.filterConfigName, filters, configTarget);
|
await this._config.update(AzureResourceSubscriptionFilterService.filterConfigName, filters, configTarget);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _config: WorkspaceConfiguration = undefined;
|
private _config: WorkspaceConfiguration = undefined;
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M13.451 5.609l-.579-.939-1.068.812-.076.094c-.335.415-.927 1.341-1.124 2.876l-.021.165.033.163.071.345c0 1.654-1.346 3-3 3-.795 0-1.545-.311-2.107-.868-.563-.567-.873-1.317-.873-2.111 0-1.431 1.007-2.632 2.351-2.929v2.926s2.528-2.087 2.984-2.461h.012l3.061-2.582-4.919-4.1h-1.137v2.404c-3.429.318-6.121 3.211-6.121 6.721 0 1.809.707 3.508 1.986 4.782 1.277 1.282 2.976 1.988 4.784 1.988 3.722 0 6.75-3.028 6.75-6.75 0-1.245-.349-2.468-1.007-3.536z" fill="#2D2D30"/><path d="M12.6 6.134l-.094.071c-.269.333-.746 1.096-.91 2.375.057.277.092.495.092.545 0 2.206-1.794 4-4 4-1.098 0-2.093-.445-2.817-1.164-.718-.724-1.163-1.718-1.163-2.815 0-2.206 1.794-4 4-4l.351.025v1.85s1.626-1.342 1.631-1.339l1.869-1.577-3.5-2.917v2.218l-.371-.03c-3.176 0-5.75 2.574-5.75 5.75 0 1.593.648 3.034 1.695 4.076 1.042 1.046 2.482 1.694 4.076 1.694 3.176 0 5.75-2.574 5.75-5.75-.001-1.106-.318-2.135-.859-3.012z" fill="#C5C5C5"/></svg>
|
||||||
|
After Width: | Height: | Size: 986 B |
1
extensions/big-data-cluster/resources/light/refresh.svg
Normal file
1
extensions/big-data-cluster/resources/light/refresh.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path d="M13.451 5.609l-.579-.939-1.068.812-.076.094c-.335.415-.927 1.341-1.124 2.876l-.021.165.033.163.071.345c0 1.654-1.346 3-3 3-.795 0-1.545-.311-2.107-.868-.563-.567-.873-1.317-.873-2.111 0-1.431 1.007-2.632 2.351-2.929v2.926s2.528-2.087 2.984-2.461h.012l3.061-2.582-4.919-4.1h-1.137v2.404c-3.429.318-6.121 3.211-6.121 6.721 0 1.809.707 3.508 1.986 4.782 1.277 1.282 2.976 1.988 4.784 1.988 3.722 0 6.75-3.028 6.75-6.75 0-1.245-.349-2.468-1.007-3.536z" fill="#F6F6F6"/><path d="M12.6 6.134l-.094.071c-.269.333-.746 1.096-.91 2.375.057.277.092.495.092.545 0 2.206-1.794 4-4 4-1.098 0-2.093-.445-2.817-1.164-.718-.724-1.163-1.718-1.163-2.815 0-2.206 1.794-4 4-4l.351.025v1.85s1.626-1.342 1.631-1.339l1.869-1.577-3.5-2.917v2.218l-.371-.03c-3.176 0-5.75 2.574-5.75 5.75 0 1.593.648 3.034 1.695 4.076 1.042 1.046 2.482 1.694 4.076 1.694 3.176 0 5.75-2.574 5.75-5.75-.001-1.106-.318-2.135-.859-3.012z" fill="#424242"/></svg>
|
||||||
|
After Width: | Height: | Size: 986 B |
@@ -698,43 +698,6 @@
|
|||||||
"isRequired": false,
|
"isRequired": false,
|
||||||
"isArray": false
|
"isArray": false
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"specialValueType": null,
|
|
||||||
"isIdentity": false,
|
|
||||||
"name": "attestationProtocol",
|
|
||||||
"displayName": "%mssql.connectionOptions.enclaveAttestationProtocol.displayName%",
|
|
||||||
"description": "%mssql.connectionOptions.enclaveAttestationProtocol.description%",
|
|
||||||
"groupName": "Security",
|
|
||||||
"valueType": "category",
|
|
||||||
"defaultValue": null,
|
|
||||||
"objectType": null,
|
|
||||||
"categoryValues": [
|
|
||||||
{
|
|
||||||
"displayName": "%mssql.connectionOptions.enclaveAttestationProtocol.categoryValues.HGS%",
|
|
||||||
"name": "HGS"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"displayName": "%mssql.connectionOptions.enclaveAttestationProtocol.categoryValues.AAS%",
|
|
||||||
"name": "AAS"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"isRequired": false,
|
|
||||||
"isArray": false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"specialValueType": null,
|
|
||||||
"isIdentity": false,
|
|
||||||
"name": "enclaveAttestationUrl",
|
|
||||||
"displayName": "%mssql.connectionOptions.enclaveAttestationUrl.displayName%",
|
|
||||||
"description": "%mssql.connectionOptions.enclaveAttestationUrl.description%",
|
|
||||||
"groupName": "Security",
|
|
||||||
"valueType": "string",
|
|
||||||
"defaultValue": null,
|
|
||||||
"objectType": null,
|
|
||||||
"categoryValues": null,
|
|
||||||
"isRequired": false,
|
|
||||||
"isArray": false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"specialValueType": null,
|
"specialValueType": null,
|
||||||
"isIdentity": false,
|
"isIdentity": false,
|
||||||
|
|||||||
@@ -91,14 +91,8 @@
|
|||||||
"mssql.connectionOptions.connectTimeout.description": "The length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error",
|
"mssql.connectionOptions.connectTimeout.description": "The length of time (in seconds) to wait for a connection to the server before terminating the attempt and generating an error",
|
||||||
"mssql.connectionOptions.currentLanguage.displayName": "Current language",
|
"mssql.connectionOptions.currentLanguage.displayName": "Current language",
|
||||||
"mssql.connectionOptions.currentLanguage.description": "The SQL Server language record name",
|
"mssql.connectionOptions.currentLanguage.description": "The SQL Server language record name",
|
||||||
"mssql.connectionOptions.columnEncryptionSetting.displayName": "Always Encrypted",
|
"mssql.connectionOptions.columnEncryptionSetting.displayName": "Column encryption",
|
||||||
"mssql.connectionOptions.columnEncryptionSetting.description": "Enables or disables Always Encrypted for the connection",
|
"mssql.connectionOptions.columnEncryptionSetting.description": "Default column encryption setting for all the commands on the connection",
|
||||||
"mssql.connectionOptions.enclaveAttestationProtocol.displayName": "Attestation Protocol",
|
|
||||||
"mssql.connectionOptions.enclaveAttestationProtocol.description": "Specifies a protocol for attesting a server-side enclave used with Always Encrypted with secure enclaves",
|
|
||||||
"mssql.connectionOptions.enclaveAttestationProtocol.categoryValues.AAS": "Azure Attestation",
|
|
||||||
"mssql.connectionOptions.enclaveAttestationProtocol.categoryValues.HGS": "Host Guardian Service",
|
|
||||||
"mssql.connectionOptions.enclaveAttestationUrl.displayName": "Enclave Attestation URL",
|
|
||||||
"mssql.connectionOptions.enclaveAttestationUrl.description": "Specifies an endpoint for attesting a server-side enclave used with Always Encrypted with secure enclaves",
|
|
||||||
"mssql.connectionOptions.encrypt.displayName": "Encrypt",
|
"mssql.connectionOptions.encrypt.displayName": "Encrypt",
|
||||||
"mssql.connectionOptions.encrypt.description": "When true, SQL Server uses SSL encryption for all data sent between the client and server if the server has a certificate installed",
|
"mssql.connectionOptions.encrypt.description": "When true, SQL Server uses SSL encryption for all data sent between the client and server if the server has a certificate installed",
|
||||||
"mssql.connectionOptions.persistSecurityInfo.displayName": "Persist security info",
|
"mssql.connectionOptions.persistSecurityInfo.displayName": "Persist security info",
|
||||||
|
|||||||
@@ -12,7 +12,8 @@ const fs = require('fs');
|
|||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
|
||||||
const externals = {
|
const externals = {
|
||||||
'node-fetch': 'commonjs node-fetch'
|
'node-fetch': 'commonjs node-fetch',
|
||||||
|
'adm-zip': 'commonjs adm-zip'
|
||||||
};
|
};
|
||||||
|
|
||||||
// conditionally add ws if we are going to be running in a node environment
|
// conditionally add ws if we are going to be running in a node environment
|
||||||
|
|||||||
@@ -480,7 +480,9 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jupyterlab/services": "^3.2.1",
|
"@jupyterlab/services": "^3.2.1",
|
||||||
"decompress": "^4.2.0",
|
"@types/adm-zip": "^0.4.32",
|
||||||
|
"@types/tar": "^4.0.3",
|
||||||
|
"adm-zip": "^0.4.14",
|
||||||
"error-ex": "^1.3.1",
|
"error-ex": "^1.3.1",
|
||||||
"fast-glob": "^3.0.4",
|
"fast-glob": "^3.0.4",
|
||||||
"figures": "^2.0.0",
|
"figures": "^2.0.0",
|
||||||
@@ -488,6 +490,7 @@
|
|||||||
"glob": "^7.1.1",
|
"glob": "^7.1.1",
|
||||||
"node-fetch": "^2.3.0",
|
"node-fetch": "^2.3.0",
|
||||||
"request": "^2.88.0",
|
"request": "^2.88.0",
|
||||||
|
"tar": "^6.0.1",
|
||||||
"temp-write": "^3.4.0",
|
"temp-write": "^3.4.0",
|
||||||
"vscode-languageclient": "^5.3.0-next.1",
|
"vscode-languageclient": "^5.3.0-next.1",
|
||||||
"vscode-nls": "^4.0.0",
|
"vscode-nls": "^4.0.0",
|
||||||
|
|||||||
@@ -37,5 +37,5 @@
|
|||||||
"title.openJupyterBook": "Open Jupyter Book",
|
"title.openJupyterBook": "Open Jupyter Book",
|
||||||
"title.closeJupyterBook": "Close Jupyter Book",
|
"title.closeJupyterBook": "Close Jupyter Book",
|
||||||
"title.revealInBooksViewlet": "Reveal in Books",
|
"title.revealInBooksViewlet": "Reveal in Books",
|
||||||
"title.createJupyterBook": "Create Book"
|
"title.createJupyterBook": "Create Book (Preview)"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"source": [
|
"source": [
|
||||||
"# Jupyter Books\n",
|
"# Create Jupyter Book\n",
|
||||||
"\n",
|
"\n",
|
||||||
"## 1. Installation\n",
|
"## 1. Installation\n",
|
||||||
"\n",
|
"\n",
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
"#install jupyter-book\r\n",
|
"#install jupyter-book\r\n",
|
||||||
"cmd = f'{sys.executable} -m pip show jupyter-book'\r\n",
|
"cmd = f'{sys.executable} -m pip show jupyter-book'\r\n",
|
||||||
"cmdOutput = !{cmd}\r\n",
|
"cmdOutput = !{cmd}\r\n",
|
||||||
"if len(cmdOutput) > 0 and '0.6.4' in cmdOutput[1]:\r\n",
|
"if len(cmdOutput) > 1 and '0.6.4' in cmdOutput[1]:\r\n",
|
||||||
" print('Jupyter-book required version is already installed!')\r\n",
|
" print('Jupyter-book required version is already installed!')\r\n",
|
||||||
"else:\r\n",
|
"else:\r\n",
|
||||||
" !pip install jupyter-book"
|
" !pip install jupyter-book"
|
||||||
@@ -183,48 +183,6 @@
|
|||||||
"outputs": [],
|
"outputs": [],
|
||||||
"execution_count": null
|
"execution_count": null
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"cell_type": "markdown",
|
|
||||||
"source": [
|
|
||||||
"### <span style=\"color:red\">Issue:</span> generate_toc.py is missing\r\n",
|
|
||||||
"\r\n",
|
|
||||||
"Jupyter Book uses the Table of Contents to define the structure of your book. For example, your chapters, sub-chapters, etc.\r\n",
|
|
||||||
"\r\n",
|
|
||||||
"Need to manually modify the Table of Contents (located here: mybookname/_data/toc.yml) following structure below:\r\n",
|
|
||||||
"\r\n",
|
|
||||||
"```\r\n",
|
|
||||||
"- title: mytitle # Title of chapter or section\r\n",
|
|
||||||
" url: /myurl # URL of section relative to the /content/ folder.\r\n",
|
|
||||||
" sections: # Contains a list of more entries that make up the chapter's sections\r\n",
|
|
||||||
" not_numbered: true # if the section shouldn't have a number in the sidebar\r\n",
|
|
||||||
" (e.g. Introduction or appendices)\r\n",
|
|
||||||
" expand_sections: true # if you'd like the sections of this chapter to always\r\n",
|
|
||||||
" be expanded in the sidebar.\r\n",
|
|
||||||
" external: true # Whether the URL is an external link or points to content in the book\r\n",
|
|
||||||
"```\r\n",
|
|
||||||
"\r\n",
|
|
||||||
"Example from demo book:\r\n",
|
|
||||||
"\r\n",
|
|
||||||
"```\r\n",
|
|
||||||
"- title: Getting started\r\n",
|
|
||||||
" url: /guide/01_overview\r\n",
|
|
||||||
" not_numbered: true\r\n",
|
|
||||||
" expand_sections: true\r\n",
|
|
||||||
" sections:\r\n",
|
|
||||||
" - title: Create your book\r\n",
|
|
||||||
" url: /guide/02_create\r\n",
|
|
||||||
" - title: Build and publish your book\r\n",
|
|
||||||
" url: /guide/03_build\r\n",
|
|
||||||
" - title: FAQ\r\n",
|
|
||||||
" url: /guide/04_faq\r\n",
|
|
||||||
" - title: How-to and advanced topics\r\n",
|
|
||||||
" url: /guide/05_advanced\r\n",
|
|
||||||
"```"
|
|
||||||
],
|
|
||||||
"metadata": {
|
|
||||||
"azdata_cell_guid": "5439d5e9-6a98-4255-8afa-3c2ba48bfc7e"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"source": [
|
"source": [
|
||||||
@@ -241,7 +199,8 @@
|
|||||||
"import re, os\r\n",
|
"import re, os\r\n",
|
||||||
"from IPython.display import *\r\n",
|
"from IPython.display import *\r\n",
|
||||||
"if os.name == 'nt':\r\n",
|
"if os.name == 'nt':\r\n",
|
||||||
" display(HTML(\"<h2><b><a href=\\\"command:bookTreeView.openBook?"\"+str(re.escape(book_name))+\""\\\"><font size=\\\"3\\\">Click here to open your Book in ADS</font></a></b></h2>\"))\r\n",
|
" bookPath = book_name.replace('\\\\', '\\\\\\\\')\r\n",
|
||||||
|
" display(HTML(\"<h2><b><a href=\\\"command:bookTreeView.openBook?"\"+str(bookPath)+\""\\\"><font size=\\\"3\\\">Click here to open your Book in ADS</font></a></b></h2>\"))\r\n",
|
||||||
"else:\r\n",
|
"else:\r\n",
|
||||||
" display(HTML(\"<h2><b><a href=\\\"command:bookTreeView.openBook?"\"+str(book_name)+\""\\\"><font size=\\\"3\\\">Click here to open your Book in ADS</font></a></b></h2>\"))"
|
" display(HTML(\"<h2><b><a href=\\\"command:bookTreeView.openBook?"\"+str(book_name)+\""\\\"><font size=\\\"3\\\">Click here to open your Book in ADS</font></a></b></h2>\"))"
|
||||||
],
|
],
|
||||||
@@ -258,7 +217,7 @@
|
|||||||
"<span style=\"color:red\">**Note**: On clicking the above link, we create a temporary toc.yml file for your convenience.</span>\r\n",
|
"<span style=\"color:red\">**Note**: On clicking the above link, we create a temporary toc.yml file for your convenience.</span>\r\n",
|
||||||
"\r\n",
|
"\r\n",
|
||||||
" Please update that file inside your book (located at: *YourbookPath*/_data/toc.yml) if you want to further customize your book following \r\n",
|
" Please update that file inside your book (located at: *YourbookPath*/_data/toc.yml) if you want to further customize your book following \r\n",
|
||||||
" the above instructions or https://jupyterbook.org/guide/01-5_tour.html#Table-of-Contents.\r\n",
|
" instructions at https://jupyterbook.org/guide/01-5_tour.html#Table-of-Contents.\r\n",
|
||||||
""
|
""
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
@@ -271,7 +230,8 @@
|
|||||||
"display(HTML(\"<h1><b>That's it!</b></h1><br/><p>You are good to view your book in Azure Data Studio by clicking on the above link.</p>\"))"
|
"display(HTML(\"<h1><b>That's it!</b></h1><br/><p>You are good to view your book in Azure Data Studio by clicking on the above link.</p>\"))"
|
||||||
],
|
],
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"azdata_cell_guid": "bd2fe173-66ce-48b3-8dc3-c4d7560953c8"
|
"azdata_cell_guid": "bd2fe173-66ce-48b3-8dc3-c4d7560953c8",
|
||||||
|
"tags": []
|
||||||
},
|
},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
"execution_count": null
|
"execution_count": null
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export class BookTreeItem extends vscode.TreeItem {
|
|||||||
this.contextValue = 'savedBook';
|
this.contextValue = 'savedBook';
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (book.type === BookTreeItemType.Markdown && book.page.expand_sections) {
|
if (book.page && book.page.sections && book.page.sections.length > 0) {
|
||||||
this.contextValue = 'section';
|
this.contextValue = 'section';
|
||||||
}
|
}
|
||||||
this.setPageVariables();
|
this.setPageVariables();
|
||||||
|
|||||||
@@ -8,8 +8,9 @@ import * as path from 'path';
|
|||||||
import * as nls from 'vscode-nls';
|
import * as nls from 'vscode-nls';
|
||||||
import * as azdata from 'azdata';
|
import * as azdata from 'azdata';
|
||||||
import { ExecOptions } from 'child_process';
|
import { ExecOptions } from 'child_process';
|
||||||
import * as decompress from 'decompress';
|
|
||||||
import * as request from 'request';
|
import * as request from 'request';
|
||||||
|
import * as zip from 'adm-zip';
|
||||||
|
import * as tar from 'tar';
|
||||||
|
|
||||||
import { ApiWrapper } from '../common/apiWrapper';
|
import { ApiWrapper } from '../common/apiWrapper';
|
||||||
import * as constants from '../common/constants';
|
import * as constants from '../common/constants';
|
||||||
@@ -229,8 +230,15 @@ export class JupyterServerInstallation implements IJupyterServerInstallation {
|
|||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
decompress(pythonPackagePathLocal, installPath).then(files => {
|
if (utils.getOSPlatform() === utils.Platform.Windows) {
|
||||||
//Delete zip/tar file
|
try {
|
||||||
|
let zippedFile = new zip(pythonPackagePathLocal);
|
||||||
|
zippedFile.extractAllTo(installPath);
|
||||||
|
} catch (err) {
|
||||||
|
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonUnpackError);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
// Delete zip file
|
||||||
fs.unlink(pythonPackagePathLocal, (err) => {
|
fs.unlink(pythonPackagePathLocal, (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonUnpackError);
|
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonUnpackError);
|
||||||
@@ -241,10 +249,23 @@ export class JupyterServerInstallation implements IJupyterServerInstallation {
|
|||||||
outputChannel.appendLine(msgPythonDownloadComplete);
|
outputChannel.appendLine(msgPythonDownloadComplete);
|
||||||
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonDownloadComplete);
|
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonDownloadComplete);
|
||||||
resolve();
|
resolve();
|
||||||
}).catch(err => {
|
} else {
|
||||||
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonUnpackError);
|
tar.extract({ file: pythonPackagePathLocal, cwd: installPath }).then(() => {
|
||||||
reject(err);
|
// Delete tar file
|
||||||
});
|
fs.unlink(pythonPackagePathLocal, (err) => {
|
||||||
|
if (err) {
|
||||||
|
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonUnpackError);
|
||||||
|
reject(err);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
outputChannel.appendLine(msgPythonDownloadComplete);
|
||||||
|
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonDownloadComplete);
|
||||||
|
resolve();
|
||||||
|
}).catch(err => {
|
||||||
|
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonUnpackError);
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.on('error', (downloadError) => {
|
.on('error', (downloadError) => {
|
||||||
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonDownloadError);
|
backgroundOperation.updateStatus(azdata.TaskStatus.InProgress, msgPythonDownloadError);
|
||||||
|
|||||||
@@ -157,6 +157,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@phosphor/algorithm" "^1.1.2"
|
"@phosphor/algorithm" "^1.1.2"
|
||||||
|
|
||||||
|
"@types/adm-zip@^0.4.32":
|
||||||
|
version "0.4.32"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/adm-zip/-/adm-zip-0.4.32.tgz#6de01309af60677065d2e52b417a023303220931"
|
||||||
|
integrity sha512-hv1O7ySn+XvP5OeDQcJFWwVb2v+GFGO1A9aMTQ5B/bzxb7WW21O8iRhVdsKKr8QwuiagzGmPP+gsUAYZ6bRddQ==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/caseless@*":
|
"@types/caseless@*":
|
||||||
version "0.12.2"
|
version "0.12.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
|
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
|
||||||
@@ -212,6 +219,13 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
|
||||||
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
|
||||||
|
|
||||||
|
"@types/minipass@*":
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/minipass/-/minipass-2.2.0.tgz#51ad404e8eb1fa961f75ec61205796807b6f9651"
|
||||||
|
integrity sha512-wuzZksN4w4kyfoOv/dlpov4NOunwutLA/q7uc00xU02ZyUY+aoM5PWIXEKBMnm0NHd4a+N71BMjq+x7+2Af1fg==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/mocha@^5.2.5":
|
"@types/mocha@^5.2.5":
|
||||||
version "5.2.6"
|
version "5.2.6"
|
||||||
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.6.tgz#b8622d50557dd155e9f2f634b7d68fd38de5e94b"
|
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.6.tgz#b8622d50557dd155e9f2f634b7d68fd38de5e94b"
|
||||||
@@ -245,6 +259,14 @@
|
|||||||
"@types/glob" "*"
|
"@types/glob" "*"
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/tar@^4.0.3":
|
||||||
|
version "4.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/tar/-/tar-4.0.3.tgz#e2cce0b8ff4f285293243f5971bd7199176ac489"
|
||||||
|
integrity sha512-Z7AVMMlkI8NTWF0qGhC4QIX0zkV/+y0J8x7b/RsHrN0310+YNjoJd8UrApCiGBCWtKjxS9QhNqLi2UJNToh5hA==
|
||||||
|
dependencies:
|
||||||
|
"@types/minipass" "*"
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/temp-write@^3.3.0":
|
"@types/temp-write@^3.3.0":
|
||||||
version "3.3.0"
|
version "3.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/temp-write/-/temp-write-3.3.0.tgz#40fe3d1fae6e98a2e40a13abe83e7a1996ea51ee"
|
resolved "https://registry.yarnpkg.com/@types/temp-write/-/temp-write-3.3.0.tgz#40fe3d1fae6e98a2e40a13abe83e7a1996ea51ee"
|
||||||
@@ -279,6 +301,11 @@ acorn@5.X, acorn@^5.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
|
||||||
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
|
integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
|
||||||
|
|
||||||
|
adm-zip@^0.4.14:
|
||||||
|
version "0.4.14"
|
||||||
|
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9"
|
||||||
|
integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==
|
||||||
|
|
||||||
aggregate-error@^3.0.0:
|
aggregate-error@^3.0.0:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
|
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
|
||||||
@@ -598,11 +625,6 @@ balanced-match@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||||
|
|
||||||
base64-js@^1.0.2:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
|
|
||||||
integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
|
|
||||||
|
|
||||||
base@^0.11.1:
|
base@^0.11.1:
|
||||||
version "0.11.2"
|
version "0.11.2"
|
||||||
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
||||||
@@ -640,14 +662,6 @@ bindings@^1.5.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
file-uri-to-path "1.0.0"
|
file-uri-to-path "1.0.0"
|
||||||
|
|
||||||
bl@^1.0.0:
|
|
||||||
version "1.2.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
|
|
||||||
integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==
|
|
||||||
dependencies:
|
|
||||||
readable-stream "^2.3.5"
|
|
||||||
safe-buffer "^5.1.1"
|
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
@@ -684,47 +698,16 @@ browser-stdout@1.3.1:
|
|||||||
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
|
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
|
||||||
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
|
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
|
||||||
|
|
||||||
buffer-alloc-unsafe@^1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
|
||||||
integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==
|
|
||||||
|
|
||||||
buffer-alloc@^1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
|
|
||||||
integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==
|
|
||||||
dependencies:
|
|
||||||
buffer-alloc-unsafe "^1.1.0"
|
|
||||||
buffer-fill "^1.0.0"
|
|
||||||
|
|
||||||
buffer-crc32@~0.2.3:
|
|
||||||
version "0.2.13"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
|
||||||
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
|
|
||||||
|
|
||||||
buffer-equal@^1.0.0:
|
buffer-equal@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
|
resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe"
|
||||||
integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74=
|
integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74=
|
||||||
|
|
||||||
buffer-fill@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
|
|
||||||
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
|
|
||||||
|
|
||||||
buffer-from@^1.0.0:
|
buffer-from@^1.0.0:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
|
||||||
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
|
||||||
|
|
||||||
buffer@^5.2.1:
|
|
||||||
version "5.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
|
|
||||||
integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==
|
|
||||||
dependencies:
|
|
||||||
base64-js "^1.0.2"
|
|
||||||
ieee754 "^1.1.4"
|
|
||||||
|
|
||||||
builtin-modules@^1.1.1:
|
builtin-modules@^1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
||||||
@@ -813,6 +796,11 @@ chokidar@^2.0.0:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
fsevents "^1.2.7"
|
fsevents "^1.2.7"
|
||||||
|
|
||||||
|
chownr@^1.1.3:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
|
||||||
|
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
|
||||||
|
|
||||||
circular-json@^0.3.1:
|
circular-json@^0.3.1:
|
||||||
version "0.3.3"
|
version "0.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
|
||||||
@@ -946,13 +934,6 @@ commander@^2.12.1, commander@~2.20.3:
|
|||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||||
|
|
||||||
commander@~2.8.1:
|
|
||||||
version "2.8.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
|
|
||||||
integrity sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=
|
|
||||||
dependencies:
|
|
||||||
graceful-readlink ">= 1.0.0"
|
|
||||||
|
|
||||||
comment-json@^1.1.3:
|
comment-json@^1.1.3:
|
||||||
version "1.1.3"
|
version "1.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e"
|
resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-1.1.3.tgz#6986c3330fee0c4c9e00c2398cd61afa5d8f239e"
|
||||||
@@ -1082,59 +1063,6 @@ decode-uri-component@^0.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
|
||||||
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
|
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
|
||||||
|
|
||||||
decompress-tar@^4.0.0, decompress-tar@^4.1.0, decompress-tar@^4.1.1:
|
|
||||||
version "4.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-4.1.1.tgz#718cbd3fcb16209716e70a26b84e7ba4592e5af1"
|
|
||||||
integrity sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==
|
|
||||||
dependencies:
|
|
||||||
file-type "^5.2.0"
|
|
||||||
is-stream "^1.1.0"
|
|
||||||
tar-stream "^1.5.2"
|
|
||||||
|
|
||||||
decompress-tarbz2@^4.0.0:
|
|
||||||
version "4.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz#3082a5b880ea4043816349f378b56c516be1a39b"
|
|
||||||
integrity sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==
|
|
||||||
dependencies:
|
|
||||||
decompress-tar "^4.1.0"
|
|
||||||
file-type "^6.1.0"
|
|
||||||
is-stream "^1.1.0"
|
|
||||||
seek-bzip "^1.0.5"
|
|
||||||
unbzip2-stream "^1.0.9"
|
|
||||||
|
|
||||||
decompress-targz@^4.0.0:
|
|
||||||
version "4.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-4.1.1.tgz#c09bc35c4d11f3de09f2d2da53e9de23e7ce1eee"
|
|
||||||
integrity sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==
|
|
||||||
dependencies:
|
|
||||||
decompress-tar "^4.1.1"
|
|
||||||
file-type "^5.2.0"
|
|
||||||
is-stream "^1.1.0"
|
|
||||||
|
|
||||||
decompress-unzip@^4.0.1:
|
|
||||||
version "4.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-4.0.1.tgz#deaaccdfd14aeaf85578f733ae8210f9b4848f69"
|
|
||||||
integrity sha1-3qrM39FK6vhVePczroIQ+bSEj2k=
|
|
||||||
dependencies:
|
|
||||||
file-type "^3.8.0"
|
|
||||||
get-stream "^2.2.0"
|
|
||||||
pify "^2.3.0"
|
|
||||||
yauzl "^2.4.2"
|
|
||||||
|
|
||||||
decompress@^4.2.0:
|
|
||||||
version "4.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d"
|
|
||||||
integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=
|
|
||||||
dependencies:
|
|
||||||
decompress-tar "^4.0.0"
|
|
||||||
decompress-tarbz2 "^4.0.0"
|
|
||||||
decompress-targz "^4.0.0"
|
|
||||||
decompress-unzip "^4.0.1"
|
|
||||||
graceful-fs "^4.1.10"
|
|
||||||
make-dir "^1.0.0"
|
|
||||||
pify "^2.3.0"
|
|
||||||
strip-dirs "^2.0.0"
|
|
||||||
|
|
||||||
deep-is@~0.1.3:
|
deep-is@~0.1.3:
|
||||||
version "0.1.3"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||||
@@ -1519,13 +1447,6 @@ fastq@^1.6.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
reusify "^1.0.0"
|
reusify "^1.0.0"
|
||||||
|
|
||||||
fd-slicer@~1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
|
|
||||||
integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
|
|
||||||
dependencies:
|
|
||||||
pend "~1.2.0"
|
|
||||||
|
|
||||||
figures@^2.0.0:
|
figures@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
|
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
|
||||||
@@ -1533,21 +1454,6 @@ figures@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
escape-string-regexp "^1.0.5"
|
escape-string-regexp "^1.0.5"
|
||||||
|
|
||||||
file-type@^3.8.0:
|
|
||||||
version "3.9.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
|
|
||||||
integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek=
|
|
||||||
|
|
||||||
file-type@^5.2.0:
|
|
||||||
version "5.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6"
|
|
||||||
integrity sha1-LdvqfHP/42No365J3DOMBYwritY=
|
|
||||||
|
|
||||||
file-type@^6.1.0:
|
|
||||||
version "6.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919"
|
|
||||||
integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==
|
|
||||||
|
|
||||||
file-uri-to-path@1.0.0:
|
file-uri-to-path@1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||||
@@ -1669,11 +1575,6 @@ fragment-cache@^0.2.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
map-cache "^0.2.2"
|
map-cache "^0.2.2"
|
||||||
|
|
||||||
fs-constants@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
|
|
||||||
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
|
|
||||||
|
|
||||||
fs-extra@^5.0.0:
|
fs-extra@^5.0.0:
|
||||||
version "5.0.0"
|
version "5.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
|
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
|
||||||
@@ -1683,6 +1584,13 @@ fs-extra@^5.0.0:
|
|||||||
jsonfile "^4.0.0"
|
jsonfile "^4.0.0"
|
||||||
universalify "^0.1.0"
|
universalify "^0.1.0"
|
||||||
|
|
||||||
|
fs-minipass@^2.0.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
|
||||||
|
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
|
||||||
|
dependencies:
|
||||||
|
minipass "^3.0.0"
|
||||||
|
|
||||||
fs-mkdirp-stream@^1.0.0:
|
fs-mkdirp-stream@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb"
|
resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb"
|
||||||
@@ -1724,14 +1632,6 @@ get-caller-file@^2.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||||
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||||
|
|
||||||
get-stream@^2.2.0:
|
|
||||||
version "2.3.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
|
|
||||||
integrity sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=
|
|
||||||
dependencies:
|
|
||||||
object-assign "^4.0.1"
|
|
||||||
pinkie-promise "^2.0.0"
|
|
||||||
|
|
||||||
get-value@^2.0.3, get-value@^2.0.6:
|
get-value@^2.0.3, get-value@^2.0.6:
|
||||||
version "2.0.6"
|
version "2.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
|
resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
|
||||||
@@ -1887,16 +1787,11 @@ graceful-fs@4.X, graceful-fs@^4.1.11, graceful-fs@^4.2.2:
|
|||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
|
||||||
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
|
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
|
||||||
|
|
||||||
graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
||||||
version "4.1.15"
|
version "4.1.15"
|
||||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
|
||||||
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
|
||||||
|
|
||||||
"graceful-readlink@>= 1.0.0":
|
|
||||||
version "1.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
|
|
||||||
integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=
|
|
||||||
|
|
||||||
growl@1.10.3:
|
growl@1.10.3:
|
||||||
version "1.10.3"
|
version "1.10.3"
|
||||||
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
|
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
|
||||||
@@ -2102,11 +1997,6 @@ http-signature@~1.2.0:
|
|||||||
jsprim "^1.2.2"
|
jsprim "^1.2.2"
|
||||||
sshpk "^1.7.0"
|
sshpk "^1.7.0"
|
||||||
|
|
||||||
ieee754@^1.1.4:
|
|
||||||
version "1.1.12"
|
|
||||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
|
|
||||||
integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
|
|
||||||
|
|
||||||
ignore@^5.1.1:
|
ignore@^5.1.1:
|
||||||
version "5.1.4"
|
version "5.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
|
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf"
|
||||||
@@ -2291,11 +2181,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-extglob "^2.1.1"
|
is-extglob "^2.1.1"
|
||||||
|
|
||||||
is-natural-number@^4.0.1:
|
|
||||||
version "4.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8"
|
|
||||||
integrity sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=
|
|
||||||
|
|
||||||
is-negated-glob@^1.0.0:
|
is-negated-glob@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2"
|
resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2"
|
||||||
@@ -2782,6 +2667,21 @@ minimist@~1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||||
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
|
integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
|
||||||
|
|
||||||
|
minipass@^3.0.0:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5"
|
||||||
|
integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==
|
||||||
|
dependencies:
|
||||||
|
yallist "^4.0.0"
|
||||||
|
|
||||||
|
minizlib@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3"
|
||||||
|
integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==
|
||||||
|
dependencies:
|
||||||
|
minipass "^3.0.0"
|
||||||
|
yallist "^4.0.0"
|
||||||
|
|
||||||
mixin-deep@^1.2.0:
|
mixin-deep@^1.2.0:
|
||||||
version "1.3.2"
|
version "1.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
|
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
|
||||||
@@ -2804,6 +2704,11 @@ mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@~0.5.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
minimist "0.0.8"
|
minimist "0.0.8"
|
||||||
|
|
||||||
|
mkdirp@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea"
|
||||||
|
integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g==
|
||||||
|
|
||||||
mocha-junit-reporter@^1.17.0:
|
mocha-junit-reporter@^1.17.0:
|
||||||
version "1.18.0"
|
version "1.18.0"
|
||||||
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.18.0.tgz#9209a3fba30025ae3ae5e6bfe7f9c5bc3c2e8ee2"
|
resolved "https://registry.yarnpkg.com/mocha-junit-reporter/-/mocha-junit-reporter-1.18.0.tgz#9209a3fba30025ae3ae5e6bfe7f9c5bc3c2e8ee2"
|
||||||
@@ -2998,7 +2903,7 @@ oauth-sign@~0.9.0:
|
|||||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||||
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
||||||
|
|
||||||
object-assign@4.X, object-assign@^4.0.1:
|
object-assign@4.X:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||||
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
|
||||||
@@ -3236,11 +3141,6 @@ path-type@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||||
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
|
||||||
|
|
||||||
pend@~1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
|
||||||
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
|
||||||
|
|
||||||
performance-now@^2.1.0:
|
performance-now@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||||
@@ -3256,7 +3156,7 @@ picomatch@^2.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6"
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6"
|
||||||
integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==
|
integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==
|
||||||
|
|
||||||
pify@^2.0.0, pify@^2.3.0:
|
pify@^2.0.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||||
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
||||||
@@ -3407,7 +3307,7 @@ read-pkg@^1.0.0:
|
|||||||
string_decoder "^1.1.1"
|
string_decoder "^1.1.1"
|
||||||
util-deprecate "^1.0.1"
|
util-deprecate "^1.0.1"
|
||||||
|
|
||||||
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@~2.3.6:
|
readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.3.5, readable-stream@~2.3.6:
|
||||||
version "2.3.6"
|
version "2.3.6"
|
||||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
|
||||||
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
|
||||||
@@ -3634,7 +3534,7 @@ run-parallel@^1.1.9:
|
|||||||
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
|
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
|
||||||
integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
|
integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
|
||||||
|
|
||||||
safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
safe-buffer@^5.0.1, safe-buffer@^5.1.2, 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==
|
||||||
@@ -3656,13 +3556,6 @@ safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
seek-bzip@^1.0.5:
|
|
||||||
version "1.0.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
|
|
||||||
integrity sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=
|
|
||||||
dependencies:
|
|
||||||
commander "~2.8.1"
|
|
||||||
|
|
||||||
semver-greatest-satisfied-range@^1.1.0:
|
semver-greatest-satisfied-range@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b"
|
resolved "https://registry.yarnpkg.com/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz#13e8c2658ab9691cb0cd71093240280d36f77a5b"
|
||||||
@@ -3995,13 +3888,6 @@ strip-bom@^2.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-utf8 "^0.2.0"
|
is-utf8 "^0.2.0"
|
||||||
|
|
||||||
strip-dirs@^2.0.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
|
|
||||||
integrity sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==
|
|
||||||
dependencies:
|
|
||||||
is-natural-number "^4.0.1"
|
|
||||||
|
|
||||||
strip-json-comments@2.0.1:
|
strip-json-comments@2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||||
@@ -4050,18 +3936,17 @@ sver-compat@^1.5.0:
|
|||||||
es6-iterator "^2.0.1"
|
es6-iterator "^2.0.1"
|
||||||
es6-symbol "^3.1.1"
|
es6-symbol "^3.1.1"
|
||||||
|
|
||||||
tar-stream@^1.5.2:
|
tar@^6.0.1:
|
||||||
version "1.6.2"
|
version "6.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
|
resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa"
|
||||||
integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==
|
integrity sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
bl "^1.0.0"
|
chownr "^1.1.3"
|
||||||
buffer-alloc "^1.2.0"
|
fs-minipass "^2.0.0"
|
||||||
end-of-stream "^1.0.0"
|
minipass "^3.0.0"
|
||||||
fs-constants "^1.0.0"
|
minizlib "^2.1.0"
|
||||||
readable-stream "^2.3.0"
|
mkdirp "^1.0.3"
|
||||||
to-buffer "^1.1.1"
|
yallist "^4.0.0"
|
||||||
xtend "^4.0.0"
|
|
||||||
|
|
||||||
temp-dir@^1.0.0:
|
temp-dir@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
@@ -4111,7 +3996,7 @@ through2@^3.0.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
readable-stream "2 || 3"
|
readable-stream "2 || 3"
|
||||||
|
|
||||||
through@^2.3.8, through@~2.3.8:
|
through@~2.3.8:
|
||||||
version "2.3.8"
|
version "2.3.8"
|
||||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||||
@@ -4137,11 +4022,6 @@ to-absolute-glob@^2.0.0:
|
|||||||
is-absolute "^1.0.0"
|
is-absolute "^1.0.0"
|
||||||
is-negated-glob "^1.0.0"
|
is-negated-glob "^1.0.0"
|
||||||
|
|
||||||
to-buffer@^1.1.1:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
|
|
||||||
integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==
|
|
||||||
|
|
||||||
to-object-path@^0.3.0:
|
to-object-path@^0.3.0:
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
|
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
|
||||||
@@ -4285,14 +4165,6 @@ uglify-js@^3.1.4:
|
|||||||
commander "~2.20.3"
|
commander "~2.20.3"
|
||||||
source-map "~0.6.1"
|
source-map "~0.6.1"
|
||||||
|
|
||||||
unbzip2-stream@^1.0.9:
|
|
||||||
version "1.3.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz#d156d205e670d8d8c393e1c02ebd506422873f6a"
|
|
||||||
integrity sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==
|
|
||||||
dependencies:
|
|
||||||
buffer "^5.2.1"
|
|
||||||
through "^2.3.8"
|
|
||||||
|
|
||||||
unc-path-regex@^0.1.2:
|
unc-path-regex@^0.1.2:
|
||||||
version "0.1.2"
|
version "0.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
|
resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
|
||||||
@@ -4596,7 +4468,7 @@ xml@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"
|
resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5"
|
||||||
integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=
|
integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=
|
||||||
|
|
||||||
xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
|
xtend@~4.0.0, xtend@~4.0.1:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
|
||||||
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
|
||||||
@@ -4611,6 +4483,11 @@ y18n@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
|
||||||
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
|
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
|
||||||
|
|
||||||
|
yallist@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||||
|
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||||
|
|
||||||
yargs-parser@13.1.1, yargs-parser@^13.1.1:
|
yargs-parser@13.1.1, yargs-parser@^13.1.1:
|
||||||
version "13.1.1"
|
version "13.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
|
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0"
|
||||||
@@ -4669,11 +4546,3 @@ yargs@^7.1.0:
|
|||||||
which-module "^1.0.0"
|
which-module "^1.0.0"
|
||||||
y18n "^3.2.1"
|
y18n "^3.2.1"
|
||||||
yargs-parser "^5.0.0"
|
yargs-parser "^5.0.0"
|
||||||
|
|
||||||
yauzl@^2.4.2:
|
|
||||||
version "2.10.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
|
|
||||||
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
|
|
||||||
dependencies:
|
|
||||||
buffer-crc32 "~0.2.3"
|
|
||||||
fd-slicer "~1.1.0"
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"description": "Dependencies shared by all extensions",
|
"description": "Dependencies shared by all extensions",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"typescript": "3.8.2"
|
"typescript": "3.8.3"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"postinstall": "node ./postinstall"
|
"postinstall": "node ./postinstall"
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
# yarn lockfile v1
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
typescript@3.8.2:
|
typescript@3.8.3:
|
||||||
version "3.8.2"
|
version "3.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.2.tgz#91d6868aaead7da74f493c553aeff76c0c0b1d5a"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
|
||||||
integrity sha512-EgOVgL/4xfVrCMbhYKUQTdF37SQn4Iw73H5BgCrF1Abdun7Kwy/QZsE/ssAy0y4LxBbvua3PIbFsbRczWWnDdQ==
|
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "azuredatastudio",
|
"name": "azuredatastudio",
|
||||||
"version": "1.16.0",
|
"version": "1.16.1",
|
||||||
"distro": "bf934175563efd92ab2c785705287e2592851adb",
|
"distro": "bf934175563efd92ab2c785705287e2592851adb",
|
||||||
"author": {
|
"author": {
|
||||||
"name": "Microsoft Corporation"
|
"name": "Microsoft Corporation"
|
||||||
|
|||||||
5
src/sql/azdata.d.ts
vendored
5
src/sql/azdata.d.ts
vendored
@@ -2300,6 +2300,11 @@ declare module 'azdata' {
|
|||||||
* and call the end OAuth method.
|
* and call the end OAuth method.
|
||||||
*/
|
*/
|
||||||
autoOAuthCancelled(): Thenable<void>;
|
autoOAuthCancelled(): Thenable<void>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears token cache
|
||||||
|
*/
|
||||||
|
clearTokenCache(): Thenable<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resource provider interfaces -----------------------------------------------------------------------
|
// Resource provider interfaces -----------------------------------------------------------------------
|
||||||
|
|||||||
@@ -3,6 +3,15 @@
|
|||||||
* 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.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
.vs .codicon.settings {
|
||||||
|
background-image: url('settings.svg');
|
||||||
|
}
|
||||||
|
|
||||||
|
.vs-dark .codicon.settings,
|
||||||
|
.hc-black .codicon.settings {
|
||||||
|
background-image: url('settings_inverse.svg');
|
||||||
|
}
|
||||||
|
|
||||||
.vs .codicon.backup {
|
.vs .codicon.backup {
|
||||||
background: url("backup.svg") center center no-repeat;
|
background: url("backup.svg") center center no-repeat;
|
||||||
}
|
}
|
||||||
|
|||||||
3
src/sql/media/icons/settings.svg
Normal file
3
src/sql/media/icons/settings.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M13.9297 7.71875V7.8594C13.9297 7.90625 13.9323 7.9531 13.9375 8V8.1406C13.9375 8.1875 13.9349 8.2344 13.9297 8.28125L15.9531 9.53905L14.7109 12.5312L12.3906 12C12.2656 12.1354 12.1354 12.2656 12 12.3906L12.5312 14.7109L9.53905 15.9531L8.28125 13.9297H8.1406C8.09375 13.9297 8.0469 13.9323 8 13.9375H7.8594C7.8125 13.9375 7.7656 13.9349 7.71875 13.9297L6.46095 15.9531L3.46875 14.7109L4 12.3906C3.86458 12.2656 3.73438 12.1354 3.60938 12L1.28906 12.5312L0.046875 9.53905L2.07031 8.28125V8.1406C2.07031 8.09375 2.06771 8.0469 2.0625 8V7.8594C2.0625 7.8125 2.06511 7.7656 2.07031 7.71875L0.046875 6.46095L1.28906 3.46875L3.60938 4C3.73438 3.86458 3.86458 3.73438 4 3.60938L3.46875 1.28906L6.46095 0.046875L7.71875 2.07031H7.8594C7.90625 2.07031 7.9531 2.06771 8 2.0625H8.1406C8.1875 2.0625 8.2344 2.06511 8.28125 2.07031L9.53905 0.046875L12.5312 1.28906L12 3.60938C12.1354 3.73438 12.2656 3.86458 12.3906 4L14.7109 3.46875L15.9531 6.46095L13.9297 7.71875ZM13.0156 8.7344C13.0261 8.6094 13.0364 8.487 13.0469 8.3672C13.0573 8.2474 13.0625 8.1224 13.0625 7.9922C13.0625 7.8724 13.0573 7.75 13.0469 7.625C13.0364 7.5 13.0261 7.3776 13.0156 7.2578L14.8594 6.1094L14.1875 4.48438L12.0703 4.97656C11.9089 4.77865 11.7448 4.59635 11.5781 4.42969C11.4115 4.26302 11.2265 4.09635 11.0234 3.92969L11.5156 1.8125L9.8906 1.14062L8.7344 2.98438C8.6146 2.97396 8.4922 2.96354 8.3672 2.95312C8.2422 2.94271 8.1198 2.9375 8 2.9375C7.875 2.9375 7.7526 2.94271 7.6328 2.95312C7.513 2.96354 7.388 2.97396 7.2578 2.98438L6.1094 1.14062L4.48438 1.8125L4.97656 3.92969C4.77865 4.09114 4.59635 4.25521 4.42969 4.42188C4.26302 4.58854 4.09635 4.77344 3.92969 4.97656L1.8125 4.48438L1.14062 6.1094L2.98438 7.2656C2.97396 7.3906 2.96354 7.513 2.95312 7.6328C2.94271 7.7526 2.9375 7.8776 2.9375 8.0078C2.9375 8.1276 2.94271 8.25 2.95312 8.375C2.96354 8.5 2.97396 8.6224 2.98438 8.7422L1.14062 9.8906L1.8125 11.5156L3.92969 11.0234C4.09114 11.2213 4.25521 11.4037 4.42188 11.5703C4.58854 11.737 4.77344 11.9037 4.97656 12.0703L4.48438 14.1875L6.1094 14.8594L7.2656 13.0156C7.3854 13.0261 7.5078 13.0364 7.6328 13.0469C7.7578 13.0573 7.8802 13.0625 8 13.0625C8.125 13.0625 8.2474 13.0573 8.3672 13.0469C8.487 13.0364 8.612 13.0261 8.7422 13.0156L9.8906 14.8594L11.5156 14.1875L11.0234 12.0703C11.2213 11.9089 11.4037 11.7448 11.5703 11.5781C11.737 11.4115 11.9037 11.2265 12.0703 11.0234L14.1875 11.5156L14.8594 9.8906L13.0156 8.7344ZM8 5.0625C8.40625 5.0625 8.78645 5.138 9.1406 5.28905C9.4948 5.4401 9.8073 5.65105 10.0781 5.9219C10.349 6.1927 10.5573 6.5026 10.7031 6.85155C10.849 7.2005 10.9271 7.58335 10.9375 8C10.9375 8.40625 10.862 8.78645 10.7109 9.1406C10.5599 9.4948 10.349 9.8073 10.0781 10.0781C9.8073 10.349 9.4974 10.5573 9.14845 10.7031C8.7995 10.849 8.41665 10.9271 8 10.9375C7.59375 10.9375 7.21355 10.862 6.8594 10.7109C6.5052 10.5599 6.1927 10.349 5.9219 10.0781C5.65105 9.8073 5.4427 9.4974 5.2969 9.14845C5.15105 8.7995 5.0729 8.41665 5.0625 8C5.0625 7.59375 5.138 7.21355 5.28905 6.8594C5.4401 6.5052 5.65105 6.1927 5.9219 5.9219C6.1927 5.65105 6.5026 5.4427 6.85155 5.2969C7.2005 5.15105 7.58335 5.0729 8 5.0625ZM8 10.0625C8.28645 10.0625 8.5547 10.0104 8.8047 9.90625C9.0547 9.8021 9.27345 9.65365 9.46095 9.46095C9.64845 9.26825 9.79425 9.0495 9.89845 8.8047C10.0026 8.5599 10.0573 8.29165 10.0625 8C10.0625 7.71355 10.0104 7.4453 9.90625 7.1953C9.8021 6.9453 9.65365 6.72655 9.46095 6.53905C9.26825 6.35155 9.0495 6.20575 8.8047 6.10155C8.5599 5.9974 8.29165 5.9427 8 5.9375C7.71355 5.9375 7.4453 5.9896 7.1953 6.09375C6.9453 6.1979 6.72655 6.34635 6.53905 6.53905C6.35155 6.73175 6.20575 6.9505 6.10155 7.1953C5.9974 7.4401 5.9427 7.70835 5.9375 8C5.9375 8.28645 5.9896 8.5547 6.09375 8.8047C6.1979 9.0547 6.34635 9.27345 6.53905 9.46095C6.73175 9.64845 6.9505 9.79425 7.1953 9.89845C7.4401 10.0026 7.70835 10.0573 8 10.0625Z" fill="black"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.9 KiB |
3
src/sql/media/icons/settings_inverse.svg
Normal file
3
src/sql/media/icons/settings_inverse.svg
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M13.9297 7.71875V7.8594C13.9297 7.90625 13.9323 7.9531 13.9375 8V8.1406C13.9375 8.1875 13.9349 8.2344 13.9297 8.28125L15.9531 9.53905L14.7109 12.5312L12.3906 12C12.2656 12.1354 12.1354 12.2656 12 12.3906L12.5312 14.7109L9.53905 15.9531L8.28125 13.9297H8.1406C8.09375 13.9297 8.0469 13.9323 8 13.9375H7.8594C7.8125 13.9375 7.7656 13.9349 7.71875 13.9297L6.46095 15.9531L3.46875 14.7109L4 12.3906C3.86458 12.2656 3.73438 12.1354 3.60938 12L1.28906 12.5312L0.046875 9.53905L2.07031 8.28125V8.1406C2.07031 8.09375 2.06771 8.0469 2.0625 8V7.8594C2.0625 7.8125 2.06511 7.7656 2.07031 7.71875L0.046875 6.46095L1.28906 3.46875L3.60938 4C3.73438 3.86458 3.86458 3.73438 4 3.60938L3.46875 1.28906L6.46095 0.046875L7.71875 2.07031H7.8594C7.90625 2.07031 7.9531 2.06771 8 2.0625H8.1406C8.1875 2.0625 8.2344 2.06511 8.28125 2.07031L9.53905 0.046875L12.5312 1.28906L12 3.60938C12.1354 3.73438 12.2656 3.86458 12.3906 4L14.7109 3.46875L15.9531 6.46095L13.9297 7.71875ZM13.0156 8.7344C13.0261 8.6094 13.0364 8.487 13.0469 8.3672C13.0573 8.2474 13.0625 8.1224 13.0625 7.9922C13.0625 7.8724 13.0573 7.75 13.0469 7.625C13.0364 7.5 13.0261 7.3776 13.0156 7.2578L14.8594 6.1094L14.1875 4.48438L12.0703 4.97656C11.9089 4.77865 11.7448 4.59635 11.5781 4.42969C11.4115 4.26302 11.2265 4.09635 11.0234 3.92969L11.5156 1.8125L9.8906 1.14062L8.7344 2.98438C8.6146 2.97396 8.4922 2.96354 8.3672 2.95312C8.2422 2.94271 8.1198 2.9375 8 2.9375C7.875 2.9375 7.7526 2.94271 7.6328 2.95312C7.513 2.96354 7.388 2.97396 7.2578 2.98438L6.1094 1.14062L4.48438 1.8125L4.97656 3.92969C4.77865 4.09114 4.59635 4.25521 4.42969 4.42188C4.26302 4.58854 4.09635 4.77344 3.92969 4.97656L1.8125 4.48438L1.14062 6.1094L2.98438 7.2656C2.97396 7.3906 2.96354 7.513 2.95312 7.6328C2.94271 7.7526 2.9375 7.8776 2.9375 8.0078C2.9375 8.1276 2.94271 8.25 2.95312 8.375C2.96354 8.5 2.97396 8.6224 2.98438 8.7422L1.14062 9.8906L1.8125 11.5156L3.92969 11.0234C4.09114 11.2213 4.25521 11.4037 4.42188 11.5703C4.58854 11.737 4.77344 11.9037 4.97656 12.0703L4.48438 14.1875L6.1094 14.8594L7.2656 13.0156C7.3854 13.0261 7.5078 13.0364 7.6328 13.0469C7.7578 13.0573 7.8802 13.0625 8 13.0625C8.125 13.0625 8.2474 13.0573 8.3672 13.0469C8.487 13.0364 8.612 13.0261 8.7422 13.0156L9.8906 14.8594L11.5156 14.1875L11.0234 12.0703C11.2213 11.9089 11.4037 11.7448 11.5703 11.5781C11.737 11.4115 11.9037 11.2265 12.0703 11.0234L14.1875 11.5156L14.8594 9.8906L13.0156 8.7344ZM8 5.0625C8.40625 5.0625 8.78645 5.138 9.1406 5.28905C9.4948 5.4401 9.8073 5.65105 10.0781 5.9219C10.349 6.1927 10.5573 6.5026 10.7031 6.85155C10.849 7.2005 10.9271 7.58335 10.9375 8C10.9375 8.40625 10.862 8.78645 10.7109 9.1406C10.5599 9.4948 10.349 9.8073 10.0781 10.0781C9.8073 10.349 9.4974 10.5573 9.14845 10.7031C8.7995 10.849 8.41665 10.9271 8 10.9375C7.59375 10.9375 7.21355 10.862 6.8594 10.7109C6.5052 10.5599 6.1927 10.349 5.9219 10.0781C5.65105 9.8073 5.4427 9.4974 5.2969 9.14845C5.15105 8.7995 5.0729 8.41665 5.0625 8C5.0625 7.59375 5.138 7.21355 5.28905 6.8594C5.4401 6.5052 5.65105 6.1927 5.9219 5.9219C6.1927 5.65105 6.5026 5.4427 6.85155 5.2969C7.2005 5.15105 7.58335 5.0729 8 5.0625ZM8 10.0625C8.28645 10.0625 8.5547 10.0104 8.8047 9.90625C9.0547 9.8021 9.27345 9.65365 9.46095 9.46095C9.64845 9.26825 9.79425 9.0495 9.89845 8.8047C10.0026 8.5599 10.0573 8.29165 10.0625 8C10.0625 7.71355 10.0104 7.4453 9.90625 7.1953C9.8021 6.9453 9.65365 6.72655 9.46095 6.53905C9.26825 6.35155 9.0495 6.20575 8.8047 6.10155C8.5599 5.9974 8.29165 5.9427 8 5.9375C7.71355 5.9375 7.4453 5.9896 7.1953 6.09375C6.9453 6.1979 6.72655 6.34635 6.53905 6.53905C6.35155 6.73175 6.20575 6.9505 6.10155 7.1953C5.9974 7.4401 5.9427 7.70835 5.9375 8C5.9375 8.28645 5.9896 8.5547 6.09375 8.8047C6.1979 9.0547 6.34635 9.27345 6.53905 9.46095C6.73175 9.64845 6.9505 9.79425 7.1953 9.89845C7.4401 10.0026 7.70835 10.0573 8 10.0625Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.9 KiB |
@@ -77,6 +77,9 @@ export class TestAccountManagementService implements IAccountManagementService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class AccountProviderStub implements azdata.AccountProvider {
|
export class AccountProviderStub implements azdata.AccountProvider {
|
||||||
|
clearTokenCache(): Thenable<void> {
|
||||||
|
return Promise.resolve();
|
||||||
|
}
|
||||||
autoOAuthCancelled(): Thenable<void> {
|
autoOAuthCancelled(): Thenable<void> {
|
||||||
return Promise.resolve();
|
return Promise.resolve();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,6 +86,9 @@ export class MainThreadAccountManagement extends Disposable implements MainThrea
|
|||||||
},
|
},
|
||||||
refresh(account: azdata.Account): Thenable<azdata.Account | azdata.PromptFailedResult> {
|
refresh(account: azdata.Account): Thenable<azdata.Account | azdata.PromptFailedResult> {
|
||||||
return self._proxy.$refresh(handle, account);
|
return self._proxy.$refresh(handle, account);
|
||||||
|
},
|
||||||
|
clearTokenCache(): Thenable<void> {
|
||||||
|
return self._proxy.$clearTokenCache();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this._accountManagementService.registerProvider(providerMetadata, accountProvider);
|
this._accountManagementService.registerProvider(providerMetadata, accountProvider);
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ export abstract class ExtHostAccountManagementShape {
|
|||||||
$prompt(handle: number): Thenable<azdata.Account | azdata.PromptFailedResult> { throw ni(); }
|
$prompt(handle: number): Thenable<azdata.Account | azdata.PromptFailedResult> { throw ni(); }
|
||||||
$refresh(handle: number, account: azdata.Account): Thenable<azdata.Account | azdata.PromptFailedResult> { throw ni(); }
|
$refresh(handle: number, account: azdata.Account): Thenable<azdata.Account | azdata.PromptFailedResult> { throw ni(); }
|
||||||
$accountsChanged(handle: number, accounts: azdata.Account[]): Thenable<void> { throw ni(); }
|
$accountsChanged(handle: number, accounts: azdata.Account[]): Thenable<void> { throw ni(); }
|
||||||
|
$clearTokenCache(): Thenable<void> { throw ni(); }
|
||||||
}
|
}
|
||||||
|
|
||||||
export abstract class ExtHostConnectionManagementShape {
|
export abstract class ExtHostConnectionManagementShape {
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ export abstract class Modal extends Disposable implements IThemable {
|
|||||||
// Try to find focusable element in dialog pane rather than overall container. _modalBodySection contains items in the pane for a wizard.
|
// Try to find focusable element in dialog pane rather than overall container. _modalBodySection contains items in the pane for a wizard.
|
||||||
// This ensures that we are setting the focus on a useful element in the form when possible.
|
// This ensures that we are setting the focus on a useful element in the form when possible.
|
||||||
const focusableElements = this._modalBodySection ?
|
const focusableElements = this._modalBodySection ?
|
||||||
this._modalBodySection.querySelectorAll('input') :
|
this._modalBodySection.querySelectorAll(tabbableElementsQuerySelector) :
|
||||||
this._bodyContainer.querySelectorAll(tabbableElementsQuerySelector);
|
this._bodyContainer.querySelectorAll(tabbableElementsQuerySelector);
|
||||||
|
|
||||||
this._focusedElementBeforeOpen = <HTMLElement>document.activeElement;
|
this._focusedElementBeforeOpen = <HTMLElement>document.activeElement;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export async function setMode(accessor: ServicesAccessor, modeSupport: IModeSupp
|
|||||||
if (newInputCreator) { // if we know how to handle the new language, tranform the input and replace the editor (e.x notebook, sql, etc)
|
if (newInputCreator) { // if we know how to handle the new language, tranform the input and replace the editor (e.x notebook, sql, etc)
|
||||||
const newInput = newInputCreator.convertInput(input || activeEditor);
|
const newInput = newInputCreator.convertInput(input || activeEditor);
|
||||||
if (newInput) { // the factory will return undefined if it doesn't know how to handle the input
|
if (newInput) { // the factory will return undefined if it doesn't know how to handle the input
|
||||||
await editorService.replaceEditors([{ editor: activeEditor, replacement: newInput }], activeControl.group);
|
await editorService.replaceEditors([{ editor: activeEditor, replacement: await newInput }], activeControl.group);
|
||||||
}
|
}
|
||||||
} else if (oldInputCreator) { // if we don't know handle to handle the new language but we know how to handle the current language, replace the editor with the reverted input (e.x sql -> text)
|
} else if (oldInputCreator) { // if we don't know handle to handle the new language but we know how to handle the current language, replace the editor with the reverted input (e.x sql -> text)
|
||||||
await editorService.replaceEditors([{ editor: activeEditor, replacement: input }], activeControl.group);
|
await editorService.replaceEditors([{ editor: activeEditor, replacement: input }], activeControl.group);
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export async function scriptSelect(connectionProfile: IConnectionProfile, metada
|
|||||||
let paramDetails: azdata.ScriptingParamDetails = getScriptingParamDetails(connectionService, connectionResult, metadata);
|
let paramDetails: azdata.ScriptingParamDetails = getScriptingParamDetails(connectionService, connectionResult, metadata);
|
||||||
const result = await scriptingService.script(connectionResult, metadata, ScriptOperation.Select, paramDetails);
|
const result = await scriptingService.script(connectionResult, metadata, ScriptOperation.Select, paramDetails);
|
||||||
if (result && result.script) {
|
if (result && result.script) {
|
||||||
const owner = await queryEditorService.newSqlEditor(result.script);
|
const owner = await queryEditorService.newSqlEditor({ initalContent: result.script });
|
||||||
// Connect our editor to the input connection
|
// Connect our editor to the input connection
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.executeQuery, input: owner },
|
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.executeQuery, input: owner },
|
||||||
@@ -127,7 +127,7 @@ export async function script(connectionProfile: IConnectionProfile, metadata: az
|
|||||||
|
|
||||||
if (script) {
|
if (script) {
|
||||||
let description = (metadata.schema && metadata.schema !== '') ? `${metadata.schema}.${metadata.name}` : metadata.name;
|
let description = (metadata.schema && metadata.schema !== '') ? `${metadata.schema}.${metadata.name}` : metadata.name;
|
||||||
const owner = await queryEditorService.newSqlEditor(script, connectionProfile.providerName, undefined, description);
|
const owner = await queryEditorService.newSqlEditor({ initalContent: script, description });
|
||||||
// Connect our editor to the input connection
|
// Connect our editor to the input connection
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.none, input: owner },
|
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.none, input: owner },
|
||||||
|
|||||||
@@ -78,11 +78,11 @@ export function getCurrentGlobalConnection(objectExplorerService: IObjectExplore
|
|||||||
let activeInput = workbenchEditorService.activeEditor;
|
let activeInput = workbenchEditorService.activeEditor;
|
||||||
if (activeInput) {
|
if (activeInput) {
|
||||||
// dashboard Connection
|
// dashboard Connection
|
||||||
if (activeInput instanceof DashboardInput) {
|
if (activeInput instanceof DashboardInput && activeInput.uri) {
|
||||||
connection = connectionManagementService.getConnectionProfile(activeInput.uri.toString());
|
connection = connectionManagementService.getConnectionProfile(activeInput.uri);
|
||||||
} else {
|
} else if (activeInput.resource) {
|
||||||
// editor Connection
|
// editor Connection
|
||||||
connection = connectionManagementService.getConnectionProfile(activeInput.resource.toString());
|
connection = connectionManagementService.getConnectionProfile(activeInput.resource.toString(true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
import { dispose, Disposable } from 'vs/base/common/lifecycle';
|
import { dispose, Disposable } from 'vs/base/common/lifecycle';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
|
import { isUndefined } from 'vs/base/common/types';
|
||||||
|
|
||||||
export class GridPanelState {
|
export class GridPanelState {
|
||||||
public tableStates: GridTableState[] = [];
|
public tableStates: GridTableState[] = [];
|
||||||
@@ -30,7 +31,7 @@ export class GridTableState extends Disposable {
|
|||||||
/* The top row of the current scroll */
|
/* The top row of the current scroll */
|
||||||
public scrollPositionY = 0;
|
public scrollPositionY = 0;
|
||||||
public scrollPositionX = 0;
|
public scrollPositionX = 0;
|
||||||
public columnSizes?: number[] = undefined;
|
public columnSizes?: number[];
|
||||||
public selection?: Slick.Range[];
|
public selection?: Slick.Range[];
|
||||||
public activeCell?: Slick.Cell;
|
public activeCell?: Slick.Cell;
|
||||||
|
|
||||||
@@ -43,7 +44,7 @@ export class GridTableState extends Disposable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public set canBeMaximized(val: boolean | undefined) {
|
public set canBeMaximized(val: boolean | undefined) {
|
||||||
if (!val || val === this._canBeMaximized) {
|
if (isUndefined(val) || val === this._canBeMaximized) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._canBeMaximized = val;
|
this._canBeMaximized = val;
|
||||||
@@ -55,7 +56,7 @@ export class GridTableState extends Disposable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public set maximized(val: boolean | undefined) {
|
public set maximized(val: boolean | undefined) {
|
||||||
if (!val || val === this._maximized) {
|
if (isUndefined(val) || val === this._maximized) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._maximized = val;
|
this._maximized = val;
|
||||||
@@ -209,9 +209,9 @@ export abstract class QueryEditorInput extends EditorInput implements IConnectab
|
|||||||
} else {
|
} else {
|
||||||
title += localize('disconnected', "disconnected");
|
title += localize('disconnected', "disconnected");
|
||||||
}
|
}
|
||||||
return this._text.getName() + (longForm ? (' - ' + title) : ` - ${trimTitle(title)}`);
|
return this.text.getName() + (longForm ? (' - ' + title) : ` - ${trimTitle(title)}`);
|
||||||
} else {
|
} else {
|
||||||
return this._text.getName();
|
return this.text.getName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { TopOperationsState } from 'sql/workbench/common/editor/query/topOperati
|
|||||||
import { ChartState } from 'sql/workbench/common/editor/query/chartState';
|
import { ChartState } from 'sql/workbench/common/editor/query/chartState';
|
||||||
import { QueryPlanState } from 'sql/workbench/common/editor/query/queryPlanState';
|
import { QueryPlanState } from 'sql/workbench/common/editor/query/queryPlanState';
|
||||||
import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState';
|
import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState';
|
||||||
import { GridPanelState } from 'sql/workbench/common/editor/query/gridPanelState';
|
import { GridPanelState } from 'sql/workbench/common/editor/query/gridTableState';
|
||||||
import { QueryModelViewState } from 'sql/workbench/common/editor/query/modelViewState';
|
import { QueryModelViewState } from 'sql/workbench/common/editor/query/modelViewState';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ import { assign } from 'vs/base/common/objects';
|
|||||||
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
||||||
|
import { ChartView } from 'sql/workbench/contrib/charts/browser/chartView';
|
||||||
|
import { ConfigureChartDialog } from 'sql/workbench/contrib/charts/browser/configureChartDialog';
|
||||||
|
|
||||||
export interface IChartActionContext {
|
export interface IChartActionContext {
|
||||||
options: IInsightOptions;
|
options: IInsightOptions;
|
||||||
@@ -106,6 +108,28 @@ export class CreateInsightAction extends Action {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class ConfigureChartAction extends Action {
|
||||||
|
public static ID = 'chartview.configureChart';
|
||||||
|
public static LABEL = localize('configureChartLabel', "Configure Chart");
|
||||||
|
public static ICON = 'settings';
|
||||||
|
|
||||||
|
private dialog: ConfigureChartDialog;
|
||||||
|
|
||||||
|
constructor(private _chart: ChartView,
|
||||||
|
@IInstantiationService private readonly instantiationService: IInstantiationService) {
|
||||||
|
super(ConfigureChartAction.ID, ConfigureChartAction.LABEL, ConfigureChartAction.ICON);
|
||||||
|
}
|
||||||
|
|
||||||
|
public run(context: IChartActionContext): Promise<boolean> {
|
||||||
|
if (!this.dialog) {
|
||||||
|
this.dialog = this.instantiationService.createInstance(ConfigureChartDialog, ConfigureChartAction.LABEL, ConfigureChartAction.ID, this._chart);
|
||||||
|
this.dialog.render();
|
||||||
|
}
|
||||||
|
this.dialog.open();
|
||||||
|
return Promise.resolve(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class CopyAction extends Action {
|
export class CopyAction extends Action {
|
||||||
public static ID = 'chartview.copy';
|
public static ID = 'chartview.copy';
|
||||||
public static LABEL = localize('copyChartLabel', "Copy as image");
|
public static LABEL = localize('copyChartLabel', "Copy as image");
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export class ChartTab implements IPanelTab {
|
|||||||
public readonly view: ChartView;
|
public readonly view: ChartView;
|
||||||
|
|
||||||
constructor(@IInstantiationService instantiationService: IInstantiationService) {
|
constructor(@IInstantiationService instantiationService: IInstantiationService) {
|
||||||
this.view = instantiationService.createInstance(ChartView);
|
this.view = instantiationService.createInstance(ChartView, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public set queryRunner(runner: QueryRunner) {
|
public set queryRunner(runner: QueryRunner) {
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ import { attachSelectBoxStyler, attachInputBoxStyler } from 'vs/platform/theme/c
|
|||||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { isUndefinedOrNull } from 'vs/base/common/types';
|
import { isUndefinedOrNull } from 'vs/base/common/types';
|
||||||
import { CreateInsightAction, CopyAction, SaveImageAction, IChartActionContext } from 'sql/workbench/contrib/charts/browser/actions';
|
import { CreateInsightAction, CopyAction, SaveImageAction, IChartActionContext, ConfigureChartAction } from 'sql/workbench/contrib/charts/browser/actions';
|
||||||
import { Taskbar } from 'sql/base/browser/ui/taskbar/taskbar';
|
import { Taskbar, ITaskbarContent } from 'sql/base/browser/ui/taskbar/taskbar';
|
||||||
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
|
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
|
||||||
import { IInsightOptions, ChartType } from 'sql/workbench/contrib/charts/common/interfaces';
|
import { IInsightOptions, ChartType } from 'sql/workbench/contrib/charts/common/interfaces';
|
||||||
import { ChartState } from 'sql/workbench/common/editor/query/chartState';
|
import { ChartState } from 'sql/workbench/common/editor/query/chartState';
|
||||||
@@ -57,6 +57,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
private _createInsightAction: CreateInsightAction;
|
private _createInsightAction: CreateInsightAction;
|
||||||
private _copyAction: CopyAction;
|
private _copyAction: CopyAction;
|
||||||
private _saveAction: SaveImageAction;
|
private _saveAction: SaveImageAction;
|
||||||
|
private _configureChartAction: ConfigureChartAction;
|
||||||
|
|
||||||
private _state: ChartState;
|
private _state: ChartState;
|
||||||
|
|
||||||
@@ -68,7 +69,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
/** parent container */
|
/** parent container */
|
||||||
private container: HTMLElement;
|
private container: HTMLElement;
|
||||||
/** container for the options controls */
|
/** container for the options controls */
|
||||||
private optionsControl: HTMLElement;
|
public readonly optionsControl: HTMLElement;
|
||||||
/** container for type specific controls */
|
/** container for type specific controls */
|
||||||
private typeControls: HTMLElement;
|
private typeControls: HTMLElement;
|
||||||
/** container for the insight */
|
/** container for the insight */
|
||||||
@@ -82,6 +83,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
private optionMap: { [x: string]: { element: HTMLElement; set: (val) => void } } = {};
|
private optionMap: { [x: string]: { element: HTMLElement; set: (val) => void } } = {};
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
|
private readonly _renderOptionsInline: boolean,
|
||||||
@IContextViewService private _contextViewService: IContextViewService,
|
@IContextViewService private _contextViewService: IContextViewService,
|
||||||
@IThemeService private _themeService: IThemeService,
|
@IThemeService private _themeService: IThemeService,
|
||||||
@IInstantiationService private _instantiationService: IInstantiationService,
|
@IInstantiationService private _instantiationService: IInstantiationService,
|
||||||
@@ -90,6 +92,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
super();
|
super();
|
||||||
this.taskbarContainer = DOM.$('div.taskbar-container');
|
this.taskbarContainer = DOM.$('div.taskbar-container');
|
||||||
this.taskbar = new Taskbar(this.taskbarContainer);
|
this.taskbar = new Taskbar(this.taskbarContainer);
|
||||||
|
|
||||||
this.optionsControl = DOM.$('div.options-container');
|
this.optionsControl = DOM.$('div.options-container');
|
||||||
const generalControls = DOM.$('div.general-controls');
|
const generalControls = DOM.$('div.general-controls');
|
||||||
this.optionsControl.appendChild(generalControls);
|
this.optionsControl.appendChild(generalControls);
|
||||||
@@ -100,7 +103,12 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
this._copyAction = this._instantiationService.createInstance(CopyAction);
|
this._copyAction = this._instantiationService.createInstance(CopyAction);
|
||||||
this._saveAction = this._instantiationService.createInstance(SaveImageAction);
|
this._saveAction = this._instantiationService.createInstance(SaveImageAction);
|
||||||
|
|
||||||
this.taskbar.setContent([{ action: this._createInsightAction }]);
|
if (this._renderOptionsInline) {
|
||||||
|
this.taskbar.setContent([{ action: this._createInsightAction }]);
|
||||||
|
} else {
|
||||||
|
this._configureChartAction = this._instantiationService.createInstance(ConfigureChartAction, this);
|
||||||
|
this.taskbar.setContent([{ action: this._createInsightAction }, { action: this._configureChartAction }]);
|
||||||
|
}
|
||||||
|
|
||||||
const self = this;
|
const self = this;
|
||||||
this.options = new Proxy(this.options, {
|
this.options = new Proxy(this.options, {
|
||||||
@@ -165,7 +173,9 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
this.container.appendChild(this.taskbarContainer);
|
this.container.appendChild(this.taskbarContainer);
|
||||||
this.container.appendChild(this.chartingContainer);
|
this.container.appendChild(this.chartingContainer);
|
||||||
this.chartingContainer.appendChild(this.insightContainer);
|
this.chartingContainer.appendChild(this.insightContainer);
|
||||||
this.chartingContainer.appendChild(this.optionsControl);
|
if (this._renderOptionsInline) {
|
||||||
|
this.chartingContainer.appendChild(this.optionsControl);
|
||||||
|
}
|
||||||
this.insight = new Insight(this.insightContainer, this.options, this._instantiationService);
|
this.insight = new Insight(this.insightContainer, this.options, this._instantiationService);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,16 +285,21 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private updateActionbar() {
|
private updateActionbar() {
|
||||||
|
let actions: ITaskbarContent[];
|
||||||
if (this.insight && this.insight.isCopyable) {
|
if (this.insight && this.insight.isCopyable) {
|
||||||
this.taskbar.context = { insight: this.insight.insight, options: this.options };
|
this.taskbar.context = { insight: this.insight.insight, options: this.options };
|
||||||
this.taskbar.setContent([
|
actions = [
|
||||||
{ action: this._createInsightAction },
|
{ action: this._createInsightAction },
|
||||||
{ action: this._copyAction },
|
{ action: this._copyAction },
|
||||||
{ action: this._saveAction }
|
{ action: this._saveAction }
|
||||||
]);
|
];
|
||||||
} else {
|
} else {
|
||||||
this.taskbar.setContent([{ action: this._createInsightAction }]);
|
actions = [{ action: this._createInsightAction }];
|
||||||
}
|
}
|
||||||
|
if (!this._renderOptionsInline) {
|
||||||
|
actions.push({ action: this._configureChartAction });
|
||||||
|
}
|
||||||
|
this.taskbar.setContent(actions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private createOption(option: IChartOption, container: HTMLElement) {
|
private createOption(option: IChartOption, container: HTMLElement) {
|
||||||
@@ -318,6 +333,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
case ControlType.combo:
|
case ControlType.combo:
|
||||||
//pass options into changeAltNames in order for SelectBox to show user-friendly names.
|
//pass options into changeAltNames in order for SelectBox to show user-friendly names.
|
||||||
let dropdown = new SelectBox(option.displayableOptions || this.changeToAltNames(option.options), undefined, this._contextViewService);
|
let dropdown = new SelectBox(option.displayableOptions || this.changeToAltNames(option.options), undefined, this._contextViewService);
|
||||||
|
dropdown.setAriaLabel(option.label);
|
||||||
dropdown.select(option.options.indexOf(value));
|
dropdown.select(option.options.indexOf(value));
|
||||||
dropdown.render(optionInput);
|
dropdown.render(optionInput);
|
||||||
dropdown.onDidSelect(e => {
|
dropdown.onDidSelect(e => {
|
||||||
@@ -337,6 +353,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
break;
|
break;
|
||||||
case ControlType.input:
|
case ControlType.input:
|
||||||
let input = new InputBox(optionInput, this._contextViewService);
|
let input = new InputBox(optionInput, this._contextViewService);
|
||||||
|
input.setAriaLabel(option.label);
|
||||||
input.value = value || '';
|
input.value = value || '';
|
||||||
input.onDidChange(e => {
|
input.onDidChange(e => {
|
||||||
if (this.options[option.configEntry] !== e) {
|
if (this.options[option.configEntry] !== e) {
|
||||||
@@ -355,6 +372,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
break;
|
break;
|
||||||
case ControlType.numberInput:
|
case ControlType.numberInput:
|
||||||
let numberInput = new InputBox(optionInput, this._contextViewService, { type: 'number' });
|
let numberInput = new InputBox(optionInput, this._contextViewService, { type: 'number' });
|
||||||
|
numberInput.setAriaLabel(option.label);
|
||||||
numberInput.value = value || '';
|
numberInput.value = value || '';
|
||||||
numberInput.onDidChange(e => {
|
numberInput.onDidChange(e => {
|
||||||
if (this.options[option.configEntry] !== Number(e)) {
|
if (this.options[option.configEntry] !== Number(e)) {
|
||||||
@@ -373,6 +391,7 @@ export class ChartView extends Disposable implements IPanelView {
|
|||||||
break;
|
break;
|
||||||
case ControlType.dateInput:
|
case ControlType.dateInput:
|
||||||
let dateInput = new InputBox(optionInput, this._contextViewService, { type: 'datetime-local' });
|
let dateInput = new InputBox(optionInput, this._contextViewService, { type: 'datetime-local' });
|
||||||
|
dateInput.setAriaLabel(option.label);
|
||||||
dateInput.value = value || '';
|
dateInput.value = value || '';
|
||||||
dateInput.onDidChange(e => {
|
dateInput.onDidChange(e => {
|
||||||
if (this.options[option.configEntry] !== e) {
|
if (this.options[option.configEntry] !== e) {
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||||
|
import { localize } from 'vs/nls';
|
||||||
|
import { ChartView } from 'sql/workbench/contrib/charts/browser/chartView';
|
||||||
|
import { Modal } from 'sql/workbench/browser/modal/modal';
|
||||||
|
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
|
||||||
|
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
|
||||||
|
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||||
|
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
||||||
|
import { ILogService } from 'vs/platform/log/common/log';
|
||||||
|
import { ITextResourcePropertiesService } from 'vs/editor/common/services/textResourceConfigurationService';
|
||||||
|
import { attachModalDialogStyler } from 'sql/workbench/common/styler';
|
||||||
|
import { attachButtonStyler } from 'vs/platform/theme/common/styler';
|
||||||
|
|
||||||
|
export class ConfigureChartDialog extends Modal {
|
||||||
|
constructor(
|
||||||
|
title: string,
|
||||||
|
name: string,
|
||||||
|
private _chart: ChartView,
|
||||||
|
@IWorkbenchLayoutService layoutService: IWorkbenchLayoutService,
|
||||||
|
@IThemeService themeService: IThemeService,
|
||||||
|
@IAdsTelemetryService telemetryService: IAdsTelemetryService,
|
||||||
|
@IContextKeyService contextKeyService: IContextKeyService,
|
||||||
|
@IClipboardService clipboardService: IClipboardService,
|
||||||
|
@ILogService logService: ILogService,
|
||||||
|
@ITextResourcePropertiesService textResourcePropertiesService: ITextResourcePropertiesService
|
||||||
|
) {
|
||||||
|
super(title, name, telemetryService, layoutService, clipboardService, themeService, logService, textResourcePropertiesService, contextKeyService, undefined);
|
||||||
|
}
|
||||||
|
|
||||||
|
public open() {
|
||||||
|
this.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
public render() {
|
||||||
|
super.render();
|
||||||
|
attachModalDialogStyler(this, this._themeService);
|
||||||
|
|
||||||
|
let closeButton = this.addFooterButton(localize('configureChartDialog.close', "Close"), () => this.close());
|
||||||
|
attachButtonStyler(closeButton, this._themeService);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected renderBody(container: HTMLElement) {
|
||||||
|
container.appendChild(this._chart.optionsControl);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected layout(height?: number): void {
|
||||||
|
}
|
||||||
|
|
||||||
|
public close() {
|
||||||
|
this.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow: scroll;
|
overflow: scroll;
|
||||||
|
min-height: 400px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.actionbar-container {
|
.actionbar-container {
|
||||||
@@ -26,6 +27,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.options-container {
|
.options-container {
|
||||||
|
padding: 20px;
|
||||||
min-width: 250px;
|
min-width: 250px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,22 +14,32 @@ import { TestNotificationService } from 'vs/platform/notification/test/common/te
|
|||||||
|
|
||||||
suite('Chart View', () => {
|
suite('Chart View', () => {
|
||||||
test('initializes without error', () => {
|
test('initializes without error', () => {
|
||||||
const chartview = createChartView();
|
const chartview = createChartView(true);
|
||||||
assert(chartview);
|
assert(chartview);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('renders without error', () => {
|
test('renders without error', () => {
|
||||||
const chartview = createChartView();
|
const chartview = createChartView(true);
|
||||||
|
chartview.render(document.createElement('div'));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('initializes without error - without options', () => {
|
||||||
|
const chartview = createChartView(false);
|
||||||
|
assert(chartview);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('renders without error - without options', () => {
|
||||||
|
const chartview = createChartView(false);
|
||||||
chartview.render(document.createElement('div'));
|
chartview.render(document.createElement('div'));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function createChartView(): ChartView {
|
function createChartView(renderOptions: boolean): ChartView {
|
||||||
const layoutService = new TestLayoutService();
|
const layoutService = new TestLayoutService();
|
||||||
const contextViewService = new ContextViewService(layoutService);
|
const contextViewService = new ContextViewService(layoutService);
|
||||||
const themeService = new TestThemeService();
|
const themeService = new TestThemeService();
|
||||||
const instantiationService = new TestInstantiationService();
|
const instantiationService = new TestInstantiationService();
|
||||||
const notificationService = new TestNotificationService();
|
const notificationService = new TestNotificationService();
|
||||||
instantiationService.stub(IThemeService, themeService);
|
instantiationService.stub(IThemeService, themeService);
|
||||||
return new ChartView(contextViewService, themeService, instantiationService, notificationService);
|
return new ChartView(renderOptions, contextViewService, themeService, instantiationService, notificationService);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
import 'vs/css!sql/media/actionBarLabel';
|
import 'vs/css!sql/media/actionBarLabel';
|
||||||
import 'vs/css!./media/dataExplorer.contribution';
|
import 'vs/css!./media/dataExplorer.contribution';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import { ViewletRegistry, Extensions as ViewletExtensions, ViewletDescriptor } from 'vs/workbench/browser/viewlet';
|
import { ViewletRegistry, Extensions as ViewletExtensions } from 'vs/workbench/browser/viewlet';
|
||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { DataExplorerViewlet, DataExplorerViewletViewsContribution, OpenDataExplorerViewletAction, VIEWLET_ID } from 'sql/workbench/contrib/dataExplorer/browser/dataExplorerViewlet';
|
import { DataExplorerViewletViewsContribution, OpenDataExplorerViewletAction, VIEWLET_ID } from 'sql/workbench/contrib/dataExplorer/browser/dataExplorerViewlet';
|
||||||
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
|
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
|
||||||
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
|
import { IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions';
|
||||||
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
|
||||||
@@ -17,16 +17,6 @@ import { SyncActionDescriptor } from 'vs/platform/actions/common/actions';
|
|||||||
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
|
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
|
||||||
import { DataExplorerContainerExtensionHandler } from 'sql/workbench/contrib/dataExplorer/browser/dataExplorerExtensionPoint';
|
import { DataExplorerContainerExtensionHandler } from 'sql/workbench/contrib/dataExplorer/browser/dataExplorerExtensionPoint';
|
||||||
|
|
||||||
// Data Explorer Viewlet
|
|
||||||
const viewletDescriptor = ViewletDescriptor.create(
|
|
||||||
DataExplorerViewlet,
|
|
||||||
VIEWLET_ID,
|
|
||||||
localize('workbench.dataExplorer', "Connections"),
|
|
||||||
'dataExplorer',
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
Registry.as<ViewletRegistry>(ViewletExtensions.Viewlets).registerViewlet(viewletDescriptor);
|
|
||||||
Registry.as<ViewletRegistry>(ViewletExtensions.Viewlets).setDefaultViewletId(VIEWLET_ID);
|
Registry.as<ViewletRegistry>(ViewletExtensions.Viewlets).setDefaultViewletId(VIEWLET_ID);
|
||||||
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
|
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
|
||||||
workbenchRegistry.registerWorkbenchContribution(DataExplorerViewletViewsContribution, LifecyclePhase.Starting);
|
workbenchRegistry.registerWorkbenchContribution(DataExplorerViewletViewsContribution, LifecyclePhase.Starting);
|
||||||
|
|||||||
@@ -156,5 +156,6 @@ export const VIEW_CONTAINER = Registry.as<IViewContainersRegistry>(ViewContainer
|
|||||||
id: VIEWLET_ID,
|
id: VIEWLET_ID,
|
||||||
name: localize('dataexplorer.name', "Connections"),
|
name: localize('dataexplorer.name', "Connections"),
|
||||||
ctorDescriptor: new SyncDescriptor(DataExplorerViewPaneContainer),
|
ctorDescriptor: new SyncDescriptor(DataExplorerViewPaneContainer),
|
||||||
icon: 'dataExplorer'
|
icon: 'dataExplorer',
|
||||||
|
order: 0
|
||||||
}, ViewContainerLocation.Sidebar);
|
}, ViewContainerLocation.Sidebar);
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import * as path from 'vs/base/common/path';
|
|||||||
|
|
||||||
import { ILanguageAssociationRegistry, Extensions as LanguageAssociationExtensions } from 'sql/workbench/services/languageAssociation/common/languageAssociation';
|
import { ILanguageAssociationRegistry, Extensions as LanguageAssociationExtensions } from 'sql/workbench/services/languageAssociation/common/languageAssociation';
|
||||||
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
||||||
|
import { isThenable } from 'vs/base/common/async';
|
||||||
|
|
||||||
const languageAssociationRegistry = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
|
const languageAssociationRegistry = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
|
||||||
|
|
||||||
@@ -63,7 +64,7 @@ export class EditorReplacementContribution implements IWorkbenchContribution {
|
|||||||
editor.setMode(defaultInputCreator[0]);
|
editor.setMode(defaultInputCreator[0]);
|
||||||
const newInput = defaultInputCreator[1].convertInput(editor);
|
const newInput = defaultInputCreator[1].convertInput(editor);
|
||||||
if (newInput) {
|
if (newInput) {
|
||||||
return { override: this.editorService.openEditor(newInput, options, group) };
|
return { override: isThenable(newInput) ? newInput.then(input => this.editorService.openEditor(input, options, group)) : this.editorService.openEditor(newInput, options, group) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -71,7 +72,7 @@ export class EditorReplacementContribution implements IWorkbenchContribution {
|
|||||||
if (inputCreator) {
|
if (inputCreator) {
|
||||||
const newInput = inputCreator.convertInput(editor);
|
const newInput = inputCreator.convertInput(editor);
|
||||||
if (newInput) {
|
if (newInput) {
|
||||||
return { override: this.editorService.openEditor(newInput, options, group) };
|
return { override: isThenable(newInput) ? newInput.then(input => this.editorService.openEditor(input, options, group)) : this.editorService.openEditor(newInput, options, group) };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { URI } from 'vs/base/common/uri';
|
|||||||
import { IOpenEditorOverrideHandler, IOpenEditorOverride, IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
import { IOpenEditorOverrideHandler, IOpenEditorOverride, IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
import { IDisposable, toDisposable, dispose } from 'vs/base/common/lifecycle';
|
import { IDisposable, toDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||||
import { isUndefinedOrNull } from 'vs/base/common/types';
|
import { isUndefinedOrNull } from 'vs/base/common/types';
|
||||||
import { IEditorInput, EditorInput } from 'vs/workbench/common/editor';
|
import { IEditorInput, EditorInput, IUntitledTextResourceInput } from 'vs/workbench/common/editor';
|
||||||
import { ITextEditorOptions, IEditorOptions } from 'vs/platform/editor/common/editor';
|
import { ITextEditorOptions, IEditorOptions } from 'vs/platform/editor/common/editor';
|
||||||
import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
|
import { IEditorGroup } from 'vs/workbench/services/editor/common/editorGroupsService';
|
||||||
import { FileEditorInput } from 'vs/workbench/contrib/files/common/editors/fileEditorInput';
|
import { FileEditorInput } from 'vs/workbench/contrib/files/common/editors/fileEditorInput';
|
||||||
@@ -29,9 +29,13 @@ import { UntitledQueryEditorInput } from 'sql/workbench/common/editor/query/unti
|
|||||||
import { INotebookService } from 'sql/workbench/services/notebook/browser/notebookService';
|
import { INotebookService } from 'sql/workbench/services/notebook/browser/notebookService';
|
||||||
import { NotebookServiceStub } from 'sql/workbench/contrib/notebook/test/stubs';
|
import { NotebookServiceStub } from 'sql/workbench/contrib/notebook/test/stubs';
|
||||||
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
||||||
|
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
|
||||||
|
import { TestQueryEditorService } from 'sql/workbench/services/queryEditor/test/common/testQueryEditorService';
|
||||||
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
|
||||||
const languageAssociations = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
|
const languageAssociations = Registry.as<ILanguageAssociationRegistry>(LanguageAssociationExtensions.LanguageAssociations);
|
||||||
|
|
||||||
|
|
||||||
suite('Editor Replacer Contribution', () => {
|
suite('Editor Replacer Contribution', () => {
|
||||||
let disposables: IDisposable[] = [];
|
let disposables: IDisposable[] = [];
|
||||||
|
|
||||||
@@ -40,6 +44,9 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
disposables.push(languageAssociations.registerLanguageAssociation(NotebookEditorInputAssociation.languages, NotebookEditorInputAssociation));
|
disposables.push(languageAssociations.registerLanguageAssociation(NotebookEditorInputAssociation.languages, NotebookEditorInputAssociation));
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
instantiationService.stub(INotebookService, new NotebookServiceStub());
|
instantiationService.stub(INotebookService, new NotebookServiceStub());
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
|
instantiationService.stub(IEditorService, editorService);
|
||||||
|
instantiationService.stub(IQueryEditorService, instantiationService.createInstance(TestQueryEditorService));
|
||||||
instantiationService.invokeFunction(accessor => {
|
instantiationService.invokeFunction(accessor => {
|
||||||
languageAssociations.start(accessor);
|
languageAssociations.start(accessor);
|
||||||
});
|
});
|
||||||
@@ -50,7 +57,8 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('does proper lifecycle', () => {
|
test('does proper lifecycle', () => {
|
||||||
const editorService = new MockEditorService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
const modeService = new TestModeService();
|
const modeService = new TestModeService();
|
||||||
const contrib = new EditorReplacementContribution(editorService, modeService);
|
const contrib = new EditorReplacementContribution(editorService, modeService);
|
||||||
assert.equal(editorService.overridenOpens.length, 1);
|
assert.equal(editorService.overridenOpens.length, 1);
|
||||||
@@ -59,8 +67,8 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('does replace sql file input from uri (no mode service)', async () => {
|
test('does replace sql file input from uri (no mode service)', async () => {
|
||||||
const editorService = new MockEditorService();
|
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
||||||
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.sql'), undefined, undefined);
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.sql'), undefined, undefined);
|
||||||
@@ -74,8 +82,8 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('does replace sql file input using input mode', async () => {
|
test('does replace sql file input using input mode', async () => {
|
||||||
const editorService = new MockEditorService();
|
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
||||||
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.other'), undefined, 'sql');
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.other'), undefined, 'sql');
|
||||||
@@ -88,9 +96,9 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
contrib.dispose();
|
contrib.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('does replace notebook file input using input mode', async () => {
|
test('does replace notebook file input using input extension notebook', async () => {
|
||||||
const editorService = new MockEditorService();
|
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
||||||
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.notebook'), undefined, undefined);
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.notebook'), undefined, undefined);
|
||||||
@@ -103,9 +111,9 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
contrib.dispose();
|
contrib.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('does replace notebook file input using input mode', async () => {
|
test('does replace notebook file input using input extension iynb', async () => {
|
||||||
const editorService = new MockEditorService();
|
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
||||||
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.iynb'), undefined, 'notebook');
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.iynb'), undefined, 'notebook');
|
||||||
@@ -118,9 +126,9 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
contrib.dispose();
|
contrib.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('does replace notebook file input using input mode', async () => {
|
test('does replace file input using default mode', async function () {
|
||||||
const editorService = new MockEditorService();
|
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
||||||
const accessor = instantiationService.createInstance(ServiceAccessor);
|
const accessor = instantiationService.createInstance(ServiceAccessor);
|
||||||
@@ -137,8 +145,8 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('does not replace editors that it shouldnt', async () => {
|
test('does not replace editors that it shouldnt', async () => {
|
||||||
const editorService = new MockEditorService();
|
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
||||||
const accessor = instantiationService.createInstance(ServiceAccessor);
|
const accessor = instantiationService.createInstance(ServiceAccessor);
|
||||||
@@ -152,8 +160,8 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('does not replace editors if it doesnt have a replacer', async () => {
|
test('does not replace editors if it doesnt have a replacer', async () => {
|
||||||
const editorService = new MockEditorService();
|
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
const contrib = instantiationService.createInstance(EditorReplacementContribution);
|
||||||
const accessor = instantiationService.createInstance(ServiceAccessor);
|
const accessor = instantiationService.createInstance(ServiceAccessor);
|
||||||
@@ -167,6 +175,10 @@ suite('Editor Replacer Contribution', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
class MockEditorService extends TestEditorService {
|
class MockEditorService extends TestEditorService {
|
||||||
|
|
||||||
|
constructor(private readonly instantiationService: IInstantiationService) {
|
||||||
|
super();
|
||||||
|
}
|
||||||
readonly overridenOpens: IOpenEditorOverrideHandler[] = [];
|
readonly overridenOpens: IOpenEditorOverrideHandler[] = [];
|
||||||
|
|
||||||
overrideOpenEditor(_handler: IOpenEditorOverrideHandler): IDisposable {
|
overrideOpenEditor(_handler: IOpenEditorOverrideHandler): IDisposable {
|
||||||
@@ -192,6 +204,12 @@ class MockEditorService extends TestEditorService {
|
|||||||
openEditor(_editor: any, _options?: any, _group?: any): Promise<any> {
|
openEditor(_editor: any, _options?: any, _group?: any): Promise<any> {
|
||||||
return Promise.resolve(_editor);
|
return Promise.resolve(_editor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
createInput(_input: IUntitledTextResourceInput): EditorInput {
|
||||||
|
const accessor = this.instantiationService.createInstance(ServiceAccessor);
|
||||||
|
const service = accessor.untitledTextEditorService;
|
||||||
|
return this.instantiationService.createInstance(UntitledTextEditorInput, service.create());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TestModeService implements IModeService {
|
class TestModeService implements IModeService {
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ export class LinkHandlerDirective {
|
|||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
if (uri && this.openerService && this.isSupportedLink(uri)) {
|
if (uri && this.openerService && this.isSupportedLink(uri)) {
|
||||||
if (uri.fragment && uri.fragment.length > 0 && uri.path === this.workbenchFilePath.path) {
|
if (uri.fragment && uri.fragment.length > 0 && uri.fsPath === this.workbenchFilePath.fsPath) {
|
||||||
this.notebookService.navigateTo(this.notebookUri, uri.fragment);
|
this.notebookService.navigateTo(this.notebookUri, uri.fragment);
|
||||||
} else {
|
} else {
|
||||||
this.openerService.open(uri).catch(onUnexpectedError);
|
this.openerService.open(uri).catch(onUnexpectedError);
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import { AngularDisposable } from 'sql/base/browser/lifecycle';
|
|||||||
import { IMimeComponent } from 'sql/workbench/contrib/notebook/browser/outputs/mimeRegistry';
|
import { IMimeComponent } from 'sql/workbench/contrib/notebook/browser/outputs/mimeRegistry';
|
||||||
import { ICellModel } from 'sql/workbench/services/notebook/browser/models/modelInterfaces';
|
import { ICellModel } from 'sql/workbench/services/notebook/browser/models/modelInterfaces';
|
||||||
import { MimeModel } from 'sql/workbench/services/notebook/browser/outputs/mimemodel';
|
import { MimeModel } from 'sql/workbench/services/notebook/browser/outputs/mimemodel';
|
||||||
import { GridTableState } from 'sql/workbench/common/editor/query/gridPanelState';
|
import { GridTableState } from 'sql/workbench/common/editor/query/gridTableState';
|
||||||
import { GridTableBase } from 'sql/workbench/contrib/query/browser/gridPanel';
|
import { GridTableBase } from 'sql/workbench/contrib/query/browser/gridPanel';
|
||||||
import { getErrorMessage } from 'vs/base/common/errors';
|
import { getErrorMessage } from 'vs/base/common/errors';
|
||||||
import { ISerializationService, SerializeDataParams } from 'sql/platform/serialization/common/serializationService';
|
import { ISerializationService, SerializeDataParams } from 'sql/platform/serialization/common/serializationService';
|
||||||
@@ -126,7 +126,7 @@ class DataResourceTable extends GridTableBase<any> {
|
|||||||
) {
|
) {
|
||||||
super(state, createResultSet(source), contextMenuService, instantiationService, editorService, untitledEditorService, configurationService);
|
super(state, createResultSet(source), contextMenuService, instantiationService, editorService, untitledEditorService, configurationService);
|
||||||
this._gridDataProvider = this.instantiationService.createInstance(DataResourceDataProvider, source, this.resultSet, this.documentUri);
|
this._gridDataProvider = this.instantiationService.createInstance(DataResourceDataProvider, source, this.resultSet, this.documentUri);
|
||||||
this._chart = this.instantiationService.createInstance(ChartView);
|
this._chart = this.instantiationService.createInstance(ChartView, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
get gridDataProvider(): IGridDataProvider {
|
get gridDataProvider(): IGridDataProvider {
|
||||||
@@ -389,13 +389,13 @@ export class NotebookChartAction extends ToggleableAction {
|
|||||||
public static SHOWCHART_LABEL = localize('notebook.showChart', "Show chart");
|
public static SHOWCHART_LABEL = localize('notebook.showChart', "Show chart");
|
||||||
public static SHOWCHART_ICON = 'viewChart';
|
public static SHOWCHART_ICON = 'viewChart';
|
||||||
|
|
||||||
public static HIDECHART_LABEL = localize('notebook.hideChart', "Hide chart");
|
public static SHOWTABLE_LABEL = localize('notebook.showTable', "Show table");
|
||||||
public static HIDECHART_ICON = 'close';
|
public static SHOWTABLE_ICON = 'table';
|
||||||
|
|
||||||
constructor(private resourceTable: DataResourceTable) {
|
constructor(private resourceTable: DataResourceTable) {
|
||||||
super(NotebookChartAction.ID, {
|
super(NotebookChartAction.ID, {
|
||||||
toggleOnLabel: NotebookChartAction.HIDECHART_LABEL,
|
toggleOnLabel: NotebookChartAction.SHOWTABLE_LABEL,
|
||||||
toggleOnClass: NotebookChartAction.HIDECHART_ICON,
|
toggleOnClass: NotebookChartAction.SHOWTABLE_ICON,
|
||||||
toggleOffLabel: NotebookChartAction.SHOWCHART_LABEL,
|
toggleOffLabel: NotebookChartAction.SHOWCHART_LABEL,
|
||||||
toggleOffClass: NotebookChartAction.SHOWCHART_ICON,
|
toggleOffClass: NotebookChartAction.SHOWCHART_ICON,
|
||||||
isOn: false
|
isOn: false
|
||||||
|
|||||||
@@ -574,7 +574,11 @@ export class NotebookFindModel extends Disposable implements INotebookFindModel
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
start = searchText.indexOf(exp) + index + 1;
|
start = searchText.indexOf(exp) + index;
|
||||||
|
// Editors aren't 0-based; the first character position in an editor is 1, so adding 1 to the first found index
|
||||||
|
if (index === 0) {
|
||||||
|
start++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
findResults.push(start);
|
findResults.push(start);
|
||||||
index = start + exp.length;
|
index = start + exp.length;
|
||||||
|
|||||||
@@ -200,6 +200,41 @@ suite('Notebook Find Model', function (): void {
|
|||||||
assert.equal(notebookFindModel.findMatches.length, 3, 'Find failed');
|
assert.equal(notebookFindModel.findMatches.length, 3, 'Find failed');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('Should match find results for multiple results on same line', async function (): Promise<void> {
|
||||||
|
let codeContent: nb.INotebookContents = {
|
||||||
|
cells: [{
|
||||||
|
cell_type: CellTypes.Code,
|
||||||
|
source: ['abc abc abc abc abc abcabc ab a b c'],
|
||||||
|
metadata: { language: 'python' },
|
||||||
|
execution_count: 1
|
||||||
|
}],
|
||||||
|
metadata: {
|
||||||
|
kernelspec: {
|
||||||
|
name: 'python',
|
||||||
|
language: 'python'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
nbformat: 4,
|
||||||
|
nbformat_minor: 5
|
||||||
|
};
|
||||||
|
await initNotebookModel(codeContent);
|
||||||
|
//initialize find
|
||||||
|
let notebookFindModel = new NotebookFindModel(model);
|
||||||
|
// Intentionally not using max_find_count here, as 7 items should be found
|
||||||
|
await notebookFindModel.find('abc', false, false, 10);
|
||||||
|
|
||||||
|
assert.equal(notebookFindModel.findMatches.length, 7, 'Find failed to find number of matches correctly');
|
||||||
|
|
||||||
|
assert.deepEqual(notebookFindModel.findMatches[0].range, new NotebookRange(model.cells[0], 1, 1, 1, 4));
|
||||||
|
assert.deepEqual(notebookFindModel.findMatches[1].range, new NotebookRange(model.cells[0], 1, 5, 1, 8));
|
||||||
|
assert.deepEqual(notebookFindModel.findMatches[2].range, new NotebookRange(model.cells[0], 1, 9, 1, 12));
|
||||||
|
assert.deepEqual(notebookFindModel.findMatches[3].range, new NotebookRange(model.cells[0], 1, 13, 1, 16));
|
||||||
|
assert.deepEqual(notebookFindModel.findMatches[4].range, new NotebookRange(model.cells[0], 1, 17, 1, 20));
|
||||||
|
assert.deepEqual(notebookFindModel.findMatches[5].range, new NotebookRange(model.cells[0], 1, 21, 1, 24));
|
||||||
|
assert.deepEqual(notebookFindModel.findMatches[6].range, new NotebookRange(model.cells[0], 1, 24, 1, 27));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
test('Should find results correctly with & without matching case selection', async function (): Promise<void> {
|
test('Should find results correctly with & without matching case selection', async function (): Promise<void> {
|
||||||
// Need to set rendered text content for 2nd cell
|
// Need to set rendered text content for 2nd cell
|
||||||
setRenderedTextContent(1);
|
setRenderedTextContent(1);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import { removeAnsiEscapeCodes } from 'vs/base/common/strings';
|
|||||||
import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider';
|
import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider';
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||||
import QueryRunner from 'sql/workbench/services/query/common/queryRunner';
|
import QueryRunner from 'sql/workbench/services/query/common/queryRunner';
|
||||||
import { GridTableState } from 'sql/workbench/common/editor/query/gridPanelState';
|
import { GridTableState } from 'sql/workbench/common/editor/query/gridTableState';
|
||||||
import * as Constants from 'sql/workbench/contrib/extensions/common/constants';
|
import * as Constants from 'sql/workbench/contrib/extensions/common/constants';
|
||||||
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
|
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
|
||||||
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
|
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ import { localize } from 'vs/nls';
|
|||||||
import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider';
|
import { IGridDataProvider } from 'sql/workbench/services/query/common/gridDataProvider';
|
||||||
import { formatDocumentWithSelectedProvider, FormattingMode } from 'vs/editor/contrib/format/format';
|
import { formatDocumentWithSelectedProvider, FormattingMode } from 'vs/editor/contrib/format/format';
|
||||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||||
import { GridPanelState, GridTableState } from 'sql/workbench/common/editor/query/gridPanelState';
|
import { GridPanelState, GridTableState } from 'sql/workbench/common/editor/query/gridTableState';
|
||||||
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
||||||
import { SaveFormat } from 'sql/workbench/services/query/common/resultSerializer';
|
import { SaveFormat } from 'sql/workbench/services/query/common/resultSerializer';
|
||||||
import { Progress } from 'vs/platform/progress/common/progress';
|
import { Progress } from 'vs/platform/progress/common/progress';
|
||||||
@@ -582,6 +582,7 @@ export abstract class GridTableBase<T> extends Disposable implements IView {
|
|||||||
let content = value.displayValue;
|
let content = value.displayValue;
|
||||||
|
|
||||||
const input = this.untitledEditorService.create({ mode: column.isXml ? 'xml' : 'json', initialValue: content });
|
const input = this.untitledEditorService.create({ mode: column.isXml ? 'xml' : 'json', initialValue: content });
|
||||||
|
await input.load();
|
||||||
await this.instantiationService.invokeFunction(formatDocumentWithSelectedProvider, input.textEditorModel, FormattingMode.Explicit, Progress.None, CancellationToken.None);
|
await this.instantiationService.invokeFunction(formatDocumentWithSelectedProvider, input.textEditorModel, FormattingMode.Explicit, Progress.None, CancellationToken.None);
|
||||||
return this.editorService.openEditor(input);
|
return this.editorService.openEditor(input);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ export function openNewQuery(accessor: ServicesAccessor, profile?: IConnectionPr
|
|||||||
if (!profile) {
|
if (!profile) {
|
||||||
profile = getCurrentGlobalConnection(objectExplorerService, connectionManagementService, editorService);
|
profile = getCurrentGlobalConnection(objectExplorerService, connectionManagementService, editorService);
|
||||||
}
|
}
|
||||||
return queryEditorService.newSqlEditor(initalContent).then((owner: IConnectableInput) => {
|
return queryEditorService.newSqlEditor({ initalContent }).then((owner: IConnectableInput) => {
|
||||||
// Connect our editor to the input connection
|
// Connect our editor to the input connection
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: onConnection, input: owner },
|
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: onConnection, input: owner },
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic
|
|||||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||||
import { IFileService } from 'vs/platform/files/common/files';
|
import { IFileService } from 'vs/platform/files/common/files';
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
|
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
|
||||||
|
|
||||||
const editorInputFactoryRegistry = Registry.as<IEditorInputFactoryRegistry>(EditorInputExtensions.EditorInputFactories);
|
const editorInputFactoryRegistry = Registry.as<IEditorInputFactoryRegistry>(EditorInputExtensions.EditorInputFactories);
|
||||||
|
|
||||||
@@ -31,9 +32,37 @@ export class QueryEditorLanguageAssociation implements ILanguageAssociation {
|
|||||||
constructor(@IInstantiationService private readonly instantiationService: IInstantiationService,
|
constructor(@IInstantiationService private readonly instantiationService: IInstantiationService,
|
||||||
@IObjectExplorerService private readonly objectExplorerService: IObjectExplorerService,
|
@IObjectExplorerService private readonly objectExplorerService: IObjectExplorerService,
|
||||||
@IConnectionManagementService private readonly connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService private readonly connectionManagementService: IConnectionManagementService,
|
||||||
@IEditorService private readonly editorService: IEditorService) { }
|
@IEditorService private readonly editorService: IEditorService,
|
||||||
|
@IQueryEditorService private readonly queryEditorService: IQueryEditorService) { }
|
||||||
|
|
||||||
convertInput(activeEditor: IEditorInput): QueryEditorInput | undefined {
|
async convertInput(activeEditor: IEditorInput): Promise<QueryEditorInput | undefined> {
|
||||||
|
const queryResultsInput = this.instantiationService.createInstance(QueryResultsInput, activeEditor.resource.toString(true));
|
||||||
|
let queryEditorInput: QueryEditorInput;
|
||||||
|
if (activeEditor instanceof FileEditorInput) {
|
||||||
|
queryEditorInput = this.instantiationService.createInstance(FileQueryEditorInput, '', activeEditor, queryResultsInput);
|
||||||
|
} else if (activeEditor instanceof UntitledTextEditorInput) {
|
||||||
|
const content = (await activeEditor.resolve()).textEditorModel.getValue();
|
||||||
|
queryEditorInput = await this.queryEditorService.newSqlEditor({ open: false, initalContent: content }) as UntitledQueryEditorInput;
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
const profile = getCurrentGlobalConnection(this.objectExplorerService, this.connectionManagementService, this.editorService);
|
||||||
|
if (profile) {
|
||||||
|
const options: IConnectionCompletionOptions = {
|
||||||
|
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: undefined, input: queryEditorInput },
|
||||||
|
saveTheConnection: false,
|
||||||
|
showDashboard: false,
|
||||||
|
showConnectionDialogOnError: true,
|
||||||
|
showFirewallRuleOnError: true
|
||||||
|
};
|
||||||
|
this.connectionManagementService.connect(profile, queryEditorInput.uri, options).catch(err => onUnexpectedError(err));
|
||||||
|
}
|
||||||
|
|
||||||
|
return queryEditorInput;
|
||||||
|
}
|
||||||
|
|
||||||
|
syncConvertinput(activeEditor: IEditorInput): QueryEditorInput | undefined {
|
||||||
const queryResultsInput = this.instantiationService.createInstance(QueryResultsInput, activeEditor.resource.toString(true));
|
const queryResultsInput = this.instantiationService.createInstance(QueryResultsInput, activeEditor.resource.toString(true));
|
||||||
let queryEditorInput: QueryEditorInput;
|
let queryEditorInput: QueryEditorInput;
|
||||||
if (activeEditor instanceof FileEditorInput) {
|
if (activeEditor instanceof FileEditorInput) {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { QueryPlanTab } from 'sql/workbench/contrib/queryPlan/browser/queryPlan'
|
|||||||
import { TopOperationsTab } from 'sql/workbench/contrib/queryPlan/browser/topOperations';
|
import { TopOperationsTab } from 'sql/workbench/contrib/queryPlan/browser/topOperations';
|
||||||
import { QueryModelViewTab } from 'sql/workbench/contrib/query/browser/modelViewTab/queryModelViewTab';
|
import { QueryModelViewTab } from 'sql/workbench/contrib/query/browser/modelViewTab/queryModelViewTab';
|
||||||
import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState';
|
import { MessagePanelState } from 'sql/workbench/common/editor/query/messagePanelState';
|
||||||
import { GridPanelState } from 'sql/workbench/common/editor/query/gridPanelState';
|
import { GridPanelState } from 'sql/workbench/common/editor/query/gridTableState';
|
||||||
|
|
||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
|||||||
@@ -21,10 +21,11 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||||||
import { UntitledQueryEditorInput } from 'sql/workbench/common/editor/query/untitledQueryEditorInput';
|
import { UntitledQueryEditorInput } from 'sql/workbench/common/editor/query/untitledQueryEditorInput';
|
||||||
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
||||||
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
||||||
|
import { isThenable } from 'vs/base/common/async';
|
||||||
|
|
||||||
suite('Query Input Factory', () => {
|
suite('Query Input Factory', () => {
|
||||||
|
|
||||||
test('query editor input is connected if global connection exists (OE)', () => {
|
test('sync query editor input is connected if global connection exists (OE)', () => {
|
||||||
const editorService = new MockEditorService();
|
const editorService = new MockEditorService();
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
const connectionManagementService = new MockConnectionManagementService();
|
const connectionManagementService = new MockConnectionManagementService();
|
||||||
@@ -37,7 +38,22 @@ suite('Query Input Factory', () => {
|
|||||||
assert(connectionManagementService.numberConnects === 1, 'Convert input should have called connect when active OE connection exists');
|
assert(connectionManagementService.numberConnects === 1, 'Convert input should have called connect when active OE connection exists');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('query editor input is connected if global connection exists (Editor)', () => {
|
test('query editor input is connected if global connection exists (OE)', async () => {
|
||||||
|
const editorService = new MockEditorService();
|
||||||
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const connectionManagementService = new MockConnectionManagementService();
|
||||||
|
instantiationService.stub(IObjectExplorerService, new MockObjectExplorerService());
|
||||||
|
instantiationService.stub(IConnectionManagementService, connectionManagementService);
|
||||||
|
instantiationService.stub(IEditorService, editorService);
|
||||||
|
const queryEditorLanguageAssociation = instantiationService.createInstance(QueryEditorLanguageAssociation);
|
||||||
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.sql'), undefined, undefined);
|
||||||
|
const response = queryEditorLanguageAssociation.convertInput(input);
|
||||||
|
assert(isThenable(response));
|
||||||
|
await response;
|
||||||
|
assert(connectionManagementService.numberConnects === 1, 'Convert input should have called connect when active OE connection exists');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('sync query editor input is connected if global connection exists (Editor)', () => {
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
const editorService = new MockEditorService(instantiationService);
|
const editorService = new MockEditorService(instantiationService);
|
||||||
const connectionManagementService = new MockConnectionManagementService();
|
const connectionManagementService = new MockConnectionManagementService();
|
||||||
@@ -50,7 +66,22 @@ suite('Query Input Factory', () => {
|
|||||||
assert(connectionManagementService.numberConnects === 1, 'Convert input should have called connect when active editor connection exists');
|
assert(connectionManagementService.numberConnects === 1, 'Convert input should have called connect when active editor connection exists');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('query editor input is not connected if no global connection exists', () => {
|
test('query editor input is connected if global connection exists (Editor)', async () => {
|
||||||
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService(instantiationService);
|
||||||
|
const connectionManagementService = new MockConnectionManagementService();
|
||||||
|
instantiationService.stub(IObjectExplorerService, new MockObjectExplorerService());
|
||||||
|
instantiationService.stub(IConnectionManagementService, connectionManagementService);
|
||||||
|
instantiationService.stub(IEditorService, editorService);
|
||||||
|
const queryEditorLanguageAssociation = instantiationService.createInstance(QueryEditorLanguageAssociation);
|
||||||
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.sql'), undefined, undefined);
|
||||||
|
const response = queryEditorLanguageAssociation.convertInput(input);
|
||||||
|
assert(isThenable(response));
|
||||||
|
await response;
|
||||||
|
assert(connectionManagementService.numberConnects === 1, 'Convert input should have called connect when active editor connection exists');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('sync query editor input is not connected if no global connection exists', () => {
|
||||||
const instantiationService = workbenchInstantiationService();
|
const instantiationService = workbenchInstantiationService();
|
||||||
const editorService = new MockEditorService();
|
const editorService = new MockEditorService();
|
||||||
const connectionManagementService = new MockConnectionManagementService();
|
const connectionManagementService = new MockConnectionManagementService();
|
||||||
@@ -58,7 +89,21 @@ suite('Query Input Factory', () => {
|
|||||||
instantiationService.stub(IEditorService, editorService);
|
instantiationService.stub(IEditorService, editorService);
|
||||||
const queryEditorLanguageAssociation = instantiationService.createInstance(QueryEditorLanguageAssociation);
|
const queryEditorLanguageAssociation = instantiationService.createInstance(QueryEditorLanguageAssociation);
|
||||||
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.sql'), undefined, undefined);
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.sql'), undefined, undefined);
|
||||||
queryEditorLanguageAssociation.convertInput(input);
|
queryEditorLanguageAssociation.syncConvertinput(input);
|
||||||
|
assert(connectionManagementService.numberConnects === 0, 'Convert input should not have been called connect when no global connections exist');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('async query editor input is not connected if no global connection exists', async () => {
|
||||||
|
const instantiationService = workbenchInstantiationService();
|
||||||
|
const editorService = new MockEditorService();
|
||||||
|
const connectionManagementService = new MockConnectionManagementService();
|
||||||
|
instantiationService.stub(IConnectionManagementService, connectionManagementService);
|
||||||
|
instantiationService.stub(IEditorService, editorService);
|
||||||
|
const queryEditorLanguageAssociation = instantiationService.createInstance(QueryEditorLanguageAssociation);
|
||||||
|
const input = instantiationService.createInstance(FileEditorInput, URI.file('/test/file.sql'), undefined, undefined);
|
||||||
|
const response = queryEditorLanguageAssociation.convertInput(input);
|
||||||
|
assert(isThenable(response));
|
||||||
|
await response;
|
||||||
assert(connectionManagementService.numberConnects === 0, 'Convert input should not have been called connect when no global connections exist');
|
assert(connectionManagementService.numberConnects === 0, 'Convert input should not have been called connect when no global connections exist');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ export class ScriptAction extends Action {
|
|||||||
public async run(element: TaskNode): Promise<boolean> {
|
public async run(element: TaskNode): Promise<boolean> {
|
||||||
if (element instanceof TaskNode) {
|
if (element instanceof TaskNode) {
|
||||||
if (element.script && element.script !== '') {
|
if (element.script && element.script !== '') {
|
||||||
this._queryEditorService.newSqlEditor(element.script);
|
this._queryEditorService.newSqlEditor({ initalContent: element.script });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -93,13 +93,3 @@
|
|||||||
.account-view .list-row .actions-container .action-item .action-label.codicon.remove {
|
.account-view .list-row .actions-container .action-item .action-label.codicon.remove {
|
||||||
background-size: 14px !important;
|
background-size: 14px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.account-view .list-row .actions-container {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.account-view .monaco-list .monaco-list-row:hover .list-row .actions-container,
|
|
||||||
.account-view .monaco-list .monaco-list-row.selected .list-row .actions-container,
|
|
||||||
.account-view .monaco-list .monaco-list-row.focused .list-row .actions-container{
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -11,16 +11,15 @@
|
|||||||
.list-row.account-picker-list .label {
|
.list-row.account-picker-list .label {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-row.account-picker-list .label .contextual-display-name {
|
.list-row.account-picker-list .label .contextual-display-name {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
line-height: 15px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-row.account-picker-list .label .display-name {
|
.list-row.account-picker-list .label .display-name {
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
line-height: 13px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-row.account-picker-list .label .content {
|
.list-row.account-picker-list .label .content {
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ export function doHandleUpgrade(editor?: EditorInput): EditorInput | undefined {
|
|||||||
editor.getPreferredMode();
|
editor.getPreferredMode();
|
||||||
}
|
}
|
||||||
const association = languageRegistry.getAssociationForLanguage(language);
|
const association = languageRegistry.getAssociationForLanguage(language);
|
||||||
if (association) {
|
if (association && association.syncConvertinput) {
|
||||||
return association.convertInput(editor);
|
return association.syncConvertinput(editor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return editor;
|
return editor;
|
||||||
|
|||||||
@@ -12,7 +12,12 @@ export type InputCreator = (servicesAccessor: ServicesAccessor, activeEditor: IE
|
|||||||
export type BaseInputCreator = (activeEditor: IEditorInput) => IEditorInput;
|
export type BaseInputCreator = (activeEditor: IEditorInput) => IEditorInput;
|
||||||
|
|
||||||
export interface ILanguageAssociation {
|
export interface ILanguageAssociation {
|
||||||
convertInput(activeEditor: IEditorInput): EditorInput | undefined;
|
convertInput(activeEditor: IEditorInput): Promise<EditorInput | undefined> | EditorInput | undefined;
|
||||||
|
/**
|
||||||
|
* Used for scenarios when we need to synchrounly create inputs, currently only for handling upgrades
|
||||||
|
* and planned to be removed eventually
|
||||||
|
*/
|
||||||
|
syncConvertinput?(activeEditor: IEditorInput): EditorInput | undefined;
|
||||||
createBase(activeEditor: IEditorInput): IEditorInput;
|
createBase(activeEditor: IEditorInput): IEditorInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,10 @@
|
|||||||
|
|
||||||
.vs .icon.table,
|
.vs .icon.table,
|
||||||
.vs-dark .icon.table,
|
.vs-dark .icon.table,
|
||||||
.hc-black .icon.table {
|
.hc-black .icon.table,
|
||||||
|
.vs .codicon.table,
|
||||||
|
.vs-dark .codicon.table,
|
||||||
|
.hc-black .codicon.table {
|
||||||
background: url("Table.svg") center center no-repeat;
|
background: url("Table.svg") center center no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import { QueryResultsInput } from 'sql/workbench/common/editor/query/queryResultsInput';
|
import { QueryResultsInput } from 'sql/workbench/common/editor/query/queryResultsInput';
|
||||||
import { EditDataInput } from 'sql/workbench/browser/editData/editDataInput';
|
import { EditDataInput } from 'sql/workbench/browser/editData/editDataInput';
|
||||||
import { IConnectableInput } from 'sql/platform/connection/common/connectionManagement';
|
import { IConnectableInput } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
|
import { IQueryEditorService, INewSqlEditorOptions } from 'sql/workbench/services/queryEditor/common/queryEditorService';
|
||||||
import { UntitledQueryEditorInput } from 'sql/workbench/common/editor/query/untitledQueryEditorInput';
|
import { UntitledQueryEditorInput } from 'sql/workbench/common/editor/query/untitledQueryEditorInput';
|
||||||
|
|
||||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
@@ -18,6 +18,11 @@ import { EditDataResultsInput } from 'sql/workbench/browser/editData/editDataRes
|
|||||||
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
import { IUntitledTextEditorService } from 'vs/workbench/services/untitled/common/untitledTextEditorService';
|
||||||
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
||||||
import { UntitledTextEditorModel } from 'vs/workbench/services/untitled/common/untitledTextEditorModel';
|
import { UntitledTextEditorModel } from 'vs/workbench/services/untitled/common/untitledTextEditorModel';
|
||||||
|
import { mixin } from 'vs/base/common/objects';
|
||||||
|
|
||||||
|
const defaults: INewSqlEditorOptions = {
|
||||||
|
open: true
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service wrapper for opening and creating SQL documents as sql editor inputs
|
* Service wrapper for opening and creating SQL documents as sql editor inputs
|
||||||
@@ -39,36 +44,30 @@ export class QueryEditorService implements IQueryEditorService {
|
|||||||
/**
|
/**
|
||||||
* Creates new untitled document for SQL query and opens in new editor tab
|
* Creates new untitled document for SQL query and opens in new editor tab
|
||||||
*/
|
*/
|
||||||
public newSqlEditor(sqlContent?: string, connectionProviderName?: string, isDirty?: boolean, objectName?: string): Promise<IConnectableInput> {
|
public async newSqlEditor(options: INewSqlEditorOptions = {}): Promise<IConnectableInput> {
|
||||||
return new Promise<IConnectableInput>(async (resolve, reject) => {
|
options = mixin(options, defaults, false);
|
||||||
try {
|
// Create file path and file URI
|
||||||
// Create file path and file URI
|
let filePath = await this.createUntitledSqlFilePath();
|
||||||
let filePath = await this.createUntitledSqlFilePath();
|
let docUri: URI = URI.from({ scheme: Schemas.untitled, path: filePath });
|
||||||
let docUri: URI = URI.from({ scheme: Schemas.untitled, path: filePath });
|
|
||||||
|
|
||||||
// Create a sql document pane with accoutrements
|
// Create a sql document pane with accoutrements
|
||||||
const fileInput = this._editorService.createInput({ forceUntitled: true, resource: docUri, mode: 'sql' }) as UntitledTextEditorInput;
|
const fileInput = this._editorService.createInput({ forceUntitled: true, resource: docUri, mode: 'sql' }) as UntitledTextEditorInput;
|
||||||
let untitledEditorModel = await fileInput.resolve() as UntitledTextEditorModel;
|
let untitledEditorModel = await fileInput.resolve() as UntitledTextEditorModel;
|
||||||
if (sqlContent) {
|
if (options.initalContent) {
|
||||||
untitledEditorModel.textEditorModel.setValue(sqlContent);
|
untitledEditorModel.textEditorModel.setValue(options.initalContent);
|
||||||
if (isDirty === false || (isDirty === undefined && !this._configurationService.getValue<boolean>('sql.promptToSaveGeneratedFiles'))) {
|
if (options.dirty === false || (options.dirty === undefined && !this._configurationService.getValue<boolean>('sql.promptToSaveGeneratedFiles'))) {
|
||||||
untitledEditorModel.setDirty(false);
|
untitledEditorModel.setDirty(false);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const queryResultsInput: QueryResultsInput = this._instantiationService.createInstance(QueryResultsInput, docUri.toString());
|
|
||||||
let queryInput = this._instantiationService.createInstance(UntitledQueryEditorInput, objectName, fileInput, queryResultsInput);
|
|
||||||
|
|
||||||
this._editorService.openEditor(queryInput, { pinned: true })
|
|
||||||
.then((editor) => {
|
|
||||||
resolve(editor.input as UntitledQueryEditorInput);
|
|
||||||
}, (error) => {
|
|
||||||
reject(error);
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
reject(error);
|
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
const queryResultsInput: QueryResultsInput = this._instantiationService.createInstance(QueryResultsInput, docUri.toString());
|
||||||
|
let queryInput = this._instantiationService.createInstance(UntitledQueryEditorInput, options.description, fileInput, queryResultsInput);
|
||||||
|
|
||||||
|
if (options.open) {
|
||||||
|
await this._editorService.openEditor(queryInput, { pinned: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
return queryInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,12 +16,25 @@ export interface IQueryEditorOptions extends IEditorOptions {
|
|||||||
|
|
||||||
export const IQueryEditorService = createDecorator<IQueryEditorService>('QueryEditorService');
|
export const IQueryEditorService = createDecorator<IQueryEditorService>('QueryEditorService');
|
||||||
|
|
||||||
|
export interface INewSqlEditorOptions {
|
||||||
|
initalContent?: string;
|
||||||
|
/**
|
||||||
|
* Defaults based on user configuration
|
||||||
|
*/
|
||||||
|
dirty?: boolean;
|
||||||
|
description?: string;
|
||||||
|
/**
|
||||||
|
* defaults to true
|
||||||
|
*/
|
||||||
|
open?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export interface IQueryEditorService {
|
export interface IQueryEditorService {
|
||||||
|
|
||||||
_serviceBrand: undefined;
|
_serviceBrand: undefined;
|
||||||
|
|
||||||
// Creates new untitled document for SQL queries and opens it in a new editor tab
|
// Creates new untitled document for SQL queries and opens it in a new editor tab
|
||||||
newSqlEditor(sqlContent?: string, connectionProviderName?: string, isDirty?: boolean, objectName?: string): Promise<IConnectableInput>;
|
newSqlEditor(options?: INewSqlEditorOptions): Promise<IConnectableInput>;
|
||||||
|
|
||||||
// Creates new edit data session
|
// Creates new edit data session
|
||||||
newEditDataEditor(schemaName: string, tableName: string, queryString: string): Promise<IConnectableInput>;
|
newEditDataEditor(schemaName: string, tableName: string, queryString: string): Promise<IConnectableInput>;
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { IQueryEditorService, INewSqlEditorOptions } from 'sql/workbench/services/queryEditor/common/queryEditorService';
|
||||||
|
import { IConnectableInput } from 'sql/platform/connection/common/connectionManagement';
|
||||||
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
import { UntitledQueryEditorInput } from 'sql/workbench/common/editor/query/untitledQueryEditorInput';
|
||||||
|
import { UntitledTextEditorInput } from 'vs/workbench/services/untitled/common/untitledTextEditorInput';
|
||||||
|
import { QueryResultsInput } from 'sql/workbench/common/editor/query/queryResultsInput';
|
||||||
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
|
|
||||||
|
export class TestQueryEditorService implements IQueryEditorService {
|
||||||
|
_serviceBrand: undefined;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
@IInstantiationService private readonly instantiationService: IInstantiationService,
|
||||||
|
@IEditorService private readonly editorService: IEditorService) {
|
||||||
|
}
|
||||||
|
|
||||||
|
newSqlEditor(options?: INewSqlEditorOptions): Promise<IConnectableInput> {
|
||||||
|
const base = this.editorService.createInput({ forceUntitled: true }) as UntitledTextEditorInput;
|
||||||
|
return Promise.resolve(this.instantiationService.createInstance(UntitledQueryEditorInput, '', base, new QueryResultsInput(base.resource.toString(true))));
|
||||||
|
}
|
||||||
|
|
||||||
|
newEditDataEditor(schemaName: string, tableName: string, queryString: string): Promise<IConnectableInput> {
|
||||||
|
throw new Error('Method not implemented.');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -216,7 +216,7 @@ export class TaskService implements ITaskService {
|
|||||||
if ((task.status === TaskStatus.Succeeded || task.status === TaskStatus.SucceededWithWarning)
|
if ((task.status === TaskStatus.Succeeded || task.status === TaskStatus.SucceededWithWarning)
|
||||||
&& eventArgs.script && eventArgs.script !== '') {
|
&& eventArgs.script && eventArgs.script !== '') {
|
||||||
if (task.taskExecutionMode === TaskExecutionMode.script) {
|
if (task.taskExecutionMode === TaskExecutionMode.script) {
|
||||||
this.queryEditorService.newSqlEditor(eventArgs.script);
|
this.queryEditorService.newSqlEditor({ initalContent: eventArgs.script });
|
||||||
} else if (task.taskExecutionMode === TaskExecutionMode.executeAndScript) {
|
} else if (task.taskExecutionMode === TaskExecutionMode.executeAndScript) {
|
||||||
task.script = eventArgs.script;
|
task.script = eventArgs.script;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*---------------------------------------------------------------------------------------------
|
||||||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
import { GridTableState } from 'sql/workbench/common/editor/query/gridTableState';
|
||||||
|
import * as assert from 'assert';
|
||||||
|
import { isUndefined } from 'vs/base/common/types';
|
||||||
|
import { Event } from 'vs/base/common/event';
|
||||||
|
|
||||||
|
suite('Grid Table State', () => {
|
||||||
|
test('inital state is correct', () => {
|
||||||
|
const resultId = 0;
|
||||||
|
const batchId = 0;
|
||||||
|
const state = new GridTableState(resultId, batchId);
|
||||||
|
|
||||||
|
assert.equal(state.resultId, resultId);
|
||||||
|
assert.equal(state.batchId, batchId);
|
||||||
|
assert(isUndefined(state.canBeMaximized));
|
||||||
|
assert(isUndefined(state.maximized));
|
||||||
|
assert.equal(state.scrollPositionX, 0);
|
||||||
|
assert.equal(state.scrollPositionY, 0);
|
||||||
|
assert(isUndefined(state.columnSizes));
|
||||||
|
assert(isUndefined(state.selection));
|
||||||
|
assert(isUndefined(state.activeCell));
|
||||||
|
});
|
||||||
|
|
||||||
|
test('does set properties correctly', async () => {
|
||||||
|
const state = new GridTableState(0, 0);
|
||||||
|
let event = await new Promise<boolean>(resolve => {
|
||||||
|
Event.once(state.onCanBeMaximizedChange)(e => resolve(e));
|
||||||
|
state.canBeMaximized = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(event, true);
|
||||||
|
assert.equal(state.canBeMaximized, true);
|
||||||
|
|
||||||
|
event = await new Promise<boolean>(resolve => {
|
||||||
|
Event.once(state.onCanBeMaximizedChange)(e => resolve(e));
|
||||||
|
state.canBeMaximized = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(event, false);
|
||||||
|
assert.equal(state.canBeMaximized, false);
|
||||||
|
|
||||||
|
event = await new Promise<boolean>(resolve => {
|
||||||
|
Event.once(state.onMaximizedChange)(e => resolve(e));
|
||||||
|
state.maximized = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(event, true);
|
||||||
|
assert.equal(state.maximized, true);
|
||||||
|
|
||||||
|
event = await new Promise<boolean>(resolve => {
|
||||||
|
Event.once(state.onMaximizedChange)(e => resolve(e));
|
||||||
|
state.maximized = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(event, false);
|
||||||
|
assert.equal(state.maximized, false);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -10,9 +10,12 @@ import { IConnectionManagementService } from 'sql/platform/connection/common/con
|
|||||||
import { TestConnectionManagementService } from 'sql/platform/connection/test/common/testConnectionManagementService';
|
import { TestConnectionManagementService } from 'sql/platform/connection/test/common/testConnectionManagementService';
|
||||||
import { TestObjectExplorerService } from 'sql/workbench/services/objectExplorer/test/browser/testObjectExplorerService';
|
import { TestObjectExplorerService } from 'sql/workbench/services/objectExplorer/test/browser/testObjectExplorerService';
|
||||||
import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/browser/objectExplorerService';
|
import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/browser/objectExplorerService';
|
||||||
|
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
|
||||||
|
import { TestQueryEditorService } from 'sql/workbench/services/queryEditor/test/common/testQueryEditorService';
|
||||||
|
|
||||||
export function workbenchInstantiationService(): ITestInstantiationService {
|
export function workbenchInstantiationService(): ITestInstantiationService {
|
||||||
const instantiationService = vsworkbenchInstantiationService();
|
const instantiationService = vsworkbenchInstantiationService();
|
||||||
|
instantiationService.stub(IQueryEditorService, instantiationService.createInstance(TestQueryEditorService));
|
||||||
instantiationService.stub(IConnectionManagementService, new TestConnectionManagementService());
|
instantiationService.stub(IConnectionManagementService, new TestConnectionManagementService());
|
||||||
instantiationService.stub(IQueryModelService, new TestQueryModelService());
|
instantiationService.stub(IQueryModelService, new TestQueryModelService());
|
||||||
instantiationService.stub(IObjectExplorerService, new TestObjectExplorerService());
|
instantiationService.stub(IObjectExplorerService, new TestObjectExplorerService());
|
||||||
|
|||||||
@@ -176,7 +176,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label {
|
.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .signature-label {
|
||||||
overflow: auto;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -228,6 +228,7 @@
|
|||||||
|
|
||||||
.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left {
|
.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left {
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
|
flex-grow: 1;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label {
|
.monaco-editor .suggest-widget .monaco-list .monaco-list-row > .contents > .main > .left > .monaco-icon-label {
|
||||||
|
|||||||
@@ -144,11 +144,10 @@ class ItemRenderer implements IListRenderer<CompletionItem, ISuggestionTemplateD
|
|||||||
const text = append(container, $('.contents'));
|
const text = append(container, $('.contents'));
|
||||||
const main = append(text, $('.main'));
|
const main = append(text, $('.main'));
|
||||||
|
|
||||||
|
data.iconContainer = append(main, $('.icon-label.codicon'));
|
||||||
data.left = append(main, $('span.left'));
|
data.left = append(main, $('span.left'));
|
||||||
data.right = append(main, $('span.right'));
|
data.right = append(main, $('span.right'));
|
||||||
|
|
||||||
data.iconContainer = append(data.left, $('.icon-label.codicon'));
|
|
||||||
|
|
||||||
data.iconLabel = new IconLabel(data.left, { supportHighlights: true, supportCodicons: true });
|
data.iconLabel = new IconLabel(data.left, { supportHighlights: true, supportCodicons: true });
|
||||||
data.disposables.add(data.iconLabel);
|
data.disposables.add(data.iconLabel);
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import { dirExists } from 'vs/base/node/pfs';
|
|||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import { ITelemetryData, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryData, ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
import { ILogService } from 'vs/platform/log/common/log';
|
||||||
|
|
||||||
export interface IElectronMainService extends AddFirstParameterToFunctions<IElectronService, Promise<any> /* only methods, not events */, number | undefined /* window ID */> { }
|
export interface IElectronMainService extends AddFirstParameterToFunctions<IElectronService, Promise<any> /* only methods, not events */, number | undefined /* window ID */> { }
|
||||||
|
|
||||||
@@ -34,7 +35,8 @@ export class ElectronMainService implements IElectronMainService {
|
|||||||
@IDialogMainService private readonly dialogMainService: IDialogMainService,
|
@IDialogMainService private readonly dialogMainService: IDialogMainService,
|
||||||
@ILifecycleMainService private readonly lifecycleMainService: ILifecycleMainService,
|
@ILifecycleMainService private readonly lifecycleMainService: ILifecycleMainService,
|
||||||
@IEnvironmentService private readonly environmentService: IEnvironmentService,
|
@IEnvironmentService private readonly environmentService: IEnvironmentService,
|
||||||
@ITelemetryService private readonly telemetryService: ITelemetryService
|
@ITelemetryService private readonly telemetryService: ITelemetryService,
|
||||||
|
@ILogService private readonly logService: ILogService
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,6 +394,7 @@ export class ElectronMainService implements IElectronMainService {
|
|||||||
|
|
||||||
async startCrashReporter(windowId: number | undefined, options: CrashReporterStartOptions): Promise<void> {
|
async startCrashReporter(windowId: number | undefined, options: CrashReporterStartOptions): Promise<void> {
|
||||||
crashReporter.start(options);
|
crashReporter.start(options);
|
||||||
|
this.logService.trace('ElectronMainService#crashReporter', JSON.stringify(options));
|
||||||
}
|
}
|
||||||
|
|
||||||
//#endregion
|
//#endregion
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
import { Event } from 'vs/base/common/event';
|
import { Event } from 'vs/base/common/event';
|
||||||
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
import { IOpenerService } from 'vs/platform/opener/common/opener';
|
||||||
import { $ } from 'vs/base/browser/dom';
|
import { $, EventHelper, EventLike } from 'vs/base/browser/dom';
|
||||||
import { domEvent } from 'vs/base/browser/event';
|
import { domEvent } from 'vs/base/browser/event';
|
||||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
import { KeyCode } from 'vs/base/common/keyCodes';
|
||||||
@@ -46,9 +46,12 @@ export class Link extends Disposable {
|
|||||||
.map(e => new StandardKeyboardEvent(e))
|
.map(e => new StandardKeyboardEvent(e))
|
||||||
.filter(e => e.keyCode === KeyCode.Enter)
|
.filter(e => e.keyCode === KeyCode.Enter)
|
||||||
.event;
|
.event;
|
||||||
const onOpen = Event.any(onClick, onEnterPress);
|
const onOpen = Event.any<EventLike>(onClick, onEnterPress);
|
||||||
|
|
||||||
this._register(onOpen(_ => openerService.open(link.href)));
|
this._register(onOpen(e => {
|
||||||
|
EventHelper.stop(e, true);
|
||||||
|
openerService.open(link.href);
|
||||||
|
}));
|
||||||
|
|
||||||
this.applyStyles();
|
this.applyStyles();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ export interface IProductConfiguration {
|
|||||||
readonly checksums?: { [path: string]: string; };
|
readonly checksums?: { [path: string]: string; };
|
||||||
readonly checksumFailMoreInfoUrl?: string;
|
readonly checksumFailMoreInfoUrl?: string;
|
||||||
|
|
||||||
readonly hockeyApp?: {
|
readonly appCenter?: {
|
||||||
readonly 'win32-ia32': string;
|
readonly 'win32-ia32': string;
|
||||||
readonly 'win32-x64': string;
|
readonly 'win32-x64': string;
|
||||||
readonly 'linux-x64': string;
|
readonly 'linux-x64': string;
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
|
|||||||
import { onUnexpectedError } from 'vs/base/common/errors';
|
import { onUnexpectedError } from 'vs/base/common/errors';
|
||||||
import { ILogService } from 'vs/platform/log/common/log';
|
import { ILogService } from 'vs/platform/log/common/log';
|
||||||
import { generateUuid } from 'vs/base/common/uuid';
|
import { generateUuid } from 'vs/base/common/uuid';
|
||||||
import { instanceStorageKey, firstSessionDateStorageKey, lastSessionDateStorageKey, currentSessionDateStorageKey } from 'vs/platform/telemetry/common/telemetry';
|
import { instanceStorageKey, firstSessionDateStorageKey, lastSessionDateStorageKey, currentSessionDateStorageKey, crashReporterIdStorageKey } from 'vs/platform/telemetry/common/telemetry';
|
||||||
|
|
||||||
type Key = string;
|
type Key = string;
|
||||||
type Value = string;
|
type Value = string;
|
||||||
@@ -54,6 +54,16 @@ export class GlobalStorageDatabaseChannel extends Disposable implements IServerC
|
|||||||
this.logService.error(error);
|
this.logService.error(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This is unique to the application instance and thereby
|
||||||
|
// should be written from the main process once.
|
||||||
|
//
|
||||||
|
// THIS SHOULD NEVER BE SENT TO TELEMETRY.
|
||||||
|
//
|
||||||
|
const crashReporterId = this.storageMainService.get(crashReporterIdStorageKey, undefined);
|
||||||
|
if (crashReporterId === undefined) {
|
||||||
|
this.storageMainService.store(crashReporterIdStorageKey, generateUuid());
|
||||||
|
}
|
||||||
|
|
||||||
// Apply global telemetry values as part of the initialization
|
// Apply global telemetry values as part of the initialization
|
||||||
// These are global across all windows and thereby should be
|
// These are global across all windows and thereby should be
|
||||||
// written from the main process once.
|
// written from the main process once.
|
||||||
|
|||||||
@@ -45,3 +45,4 @@ export const instanceStorageKey = 'telemetry.instanceId';
|
|||||||
export const currentSessionDateStorageKey = 'telemetry.currentSessionDate';
|
export const currentSessionDateStorageKey = 'telemetry.currentSessionDate';
|
||||||
export const firstSessionDateStorageKey = 'telemetry.firstSessionDate';
|
export const firstSessionDateStorageKey = 'telemetry.firstSessionDate';
|
||||||
export const lastSessionDateStorageKey = 'telemetry.lastSessionDate';
|
export const lastSessionDateStorageKey = 'telemetry.lastSessionDate';
|
||||||
|
export const crashReporterIdStorageKey = 'crashReporter.guid';
|
||||||
|
|||||||
@@ -457,8 +457,9 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic
|
|||||||
let foldersToRestore: URI[] = [];
|
let foldersToRestore: URI[] = [];
|
||||||
let workspacesToRestore: IWorkspacePathToOpen[] = [];
|
let workspacesToRestore: IWorkspacePathToOpen[] = [];
|
||||||
if (openConfig.initialStartup && !openConfig.cli.extensionDevelopmentPath && !openConfig.cli['disable-restore-windows']) {
|
if (openConfig.initialStartup && !openConfig.cli.extensionDevelopmentPath && !openConfig.cli['disable-restore-windows']) {
|
||||||
let foldersToRestore = this.backupMainService.getFolderBackupPaths();
|
// don't restore backuped folders, for #92318.
|
||||||
foldersToOpen.push(...foldersToRestore.map(f => ({ folderUri: f, remoteAuhority: getRemoteAuthority(f) })));
|
// let foldersToRestore = this.backupMainService.getFolderBackupPaths();
|
||||||
|
// foldersToOpen.push(...foldersToRestore.map(f => ({ folderUri: f, remoteAuhority: getRemoteAuthority(f) })));
|
||||||
|
|
||||||
// collect from workspaces with hot-exit backups and from previous window session
|
// collect from workspaces with hot-exit backups and from previous window session
|
||||||
workspacesToRestore = [...this.backupMainService.getWorkspaceBackups(), ...this.workspacesMainService.getUntitledWorkspacesSync()];
|
workspacesToRestore = [...this.backupMainService.getWorkspaceBackups(), ...this.workspacesMainService.getUntitledWorkspacesSync()];
|
||||||
|
|||||||
3
src/vs/vscode.d.ts
vendored
3
src/vs/vscode.d.ts
vendored
@@ -8096,6 +8096,9 @@ declare module 'vscode' {
|
|||||||
* An event signaling when the selected items have changed.
|
* An event signaling when the selected items have changed.
|
||||||
*/
|
*/
|
||||||
readonly onDidChangeSelection: Event<T[]>;
|
readonly onDidChangeSelection: Event<T[]>;
|
||||||
|
|
||||||
|
// {SQL CARBON EDIT} Allow setting the behavior of the QuickPick
|
||||||
|
ok: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -261,9 +261,22 @@ class ExtHostQuickInput implements QuickInput {
|
|||||||
this._onDidChangeValueEmitter
|
this._onDidChangeValueEmitter
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
constructor(protected _proxy: MainThreadQuickOpenShape, protected _extensionId: ExtensionIdentifier, private _onDidDispose: () => void) {
|
constructor(protected _proxy: MainThreadQuickOpenShape, protected _extensionId: ExtensionIdentifier, private _onDidDispose: () => void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// {SQL CARBON EDIT} START ok button visibility
|
||||||
|
private _ok = false;
|
||||||
|
get ok() {
|
||||||
|
return this._ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
set ok(ok: boolean) {
|
||||||
|
this._ok = ok;
|
||||||
|
this.update({ ok });
|
||||||
|
}
|
||||||
|
// {SQL CARBON EDIT} END ok button visibility
|
||||||
|
|
||||||
get title() {
|
get title() {
|
||||||
return this._title;
|
return this._title;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,7 +152,10 @@ class NotificationMessageRenderer {
|
|||||||
const anchor = $('a', { href: node.href, title: title, }, node.label);
|
const anchor = $('a', { href: node.href, title: title, }, node.label);
|
||||||
|
|
||||||
if (actionHandler) {
|
if (actionHandler) {
|
||||||
actionHandler.toDispose.add(addDisposableListener(anchor, EventType.CLICK, () => actionHandler.callback(node.href)));
|
actionHandler.toDispose.add(addDisposableListener(anchor, EventType.CLICK, e => {
|
||||||
|
EventHelper.stop(e, true);
|
||||||
|
actionHandler.callback(node.href);
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
messageContainer.appendChild(anchor);
|
messageContainer.appendChild(anchor);
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.monaco-workbench .part.panel > .composite.title > .composite-bar-excess {
|
.monaco-workbench .part.panel > .composite.title > .composite-bar-excess {
|
||||||
width: 100%;
|
width: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.monaco-workbench .part.panel > .title > .panel-switcher-container > .monaco-action-bar {
|
.monaco-workbench .part.panel > .title > .panel-switcher-container > .monaco-action-bar {
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuratio
|
|||||||
nls.localize('workbench.editor.untitled.labelFormat.content', "The name of the untitled file is derived from the contents of its first line unless it has an associated file path. It will fallback to the name in case the line is empty or contains no word characters."),
|
nls.localize('workbench.editor.untitled.labelFormat.content', "The name of the untitled file is derived from the contents of its first line unless it has an associated file path. It will fallback to the name in case the line is empty or contains no word characters."),
|
||||||
nls.localize('workbench.editor.untitled.labelFormat.name', "The name of the untitled file is not derived from the contents of the file."),
|
nls.localize('workbench.editor.untitled.labelFormat.name', "The name of the untitled file is not derived from the contents of the file."),
|
||||||
],
|
],
|
||||||
'default': 'content',
|
'default': 'name', // {{SQL CARBON EDIT}} change default from content to name
|
||||||
'description': nls.localize({
|
'description': nls.localize({
|
||||||
comment: ['This is the description for a setting. Values surrounded by parenthesis are not to be translated.'],
|
comment: ['This is the description for a setting. Values surrounded by parenthesis are not to be translated.'],
|
||||||
key: 'untitledLabelFormat'
|
key: 'untitledLabelFormat'
|
||||||
|
|||||||
@@ -687,10 +687,6 @@ export abstract class TextResourceEditorInput extends EditorInput {
|
|||||||
return false; // untitled is never readonly
|
return false; // untitled is never readonly
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.fileService.canHandleResource(this.resource)) {
|
|
||||||
return true; // resources without file support are always readonly
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly);
|
return this.fileService.hasCapability(this.resource, FileSystemProviderCapabilities.Readonly);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -262,7 +262,8 @@ function compareViewContentDescriptors(a: IViewContentDescriptor, b: IViewConten
|
|||||||
return aPriority - bPriority;
|
return aPriority - bPriority;
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.content < b.content ? -1 : 1;
|
// No priroity, keep views sorted in the order they got registered
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
class ViewsRegistry extends Disposable implements IViewsRegistry {
|
class ViewsRegistry extends Disposable implements IViewsRegistry {
|
||||||
@@ -601,4 +602,3 @@ export interface IViewPaneContainer {
|
|||||||
getView(viewId: string): IView | undefined;
|
getView(viewId: string): IView | undefined;
|
||||||
saveState(): void;
|
saveState(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -260,6 +260,17 @@ export class BulkFileOperations {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sort (once) categories atop which have unconfirmed edits
|
||||||
|
this.categories.sort((a, b) => {
|
||||||
|
if (a.metadata.needsConfirmation === b.metadata.needsConfirmation) {
|
||||||
|
return a.metadata.label.localeCompare(b.metadata.label);
|
||||||
|
} else if (a.metadata.needsConfirmation) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -258,19 +258,6 @@ export class BulkEditDataSource implements IAsyncDataSource<BulkFileOperations,
|
|||||||
export class BulkEditSorter implements ITreeSorter<BulkEditElement> {
|
export class BulkEditSorter implements ITreeSorter<BulkEditElement> {
|
||||||
|
|
||||||
compare(a: BulkEditElement, b: BulkEditElement): number {
|
compare(a: BulkEditElement, b: BulkEditElement): number {
|
||||||
if (a instanceof CategoryElement && b instanceof CategoryElement) {
|
|
||||||
//
|
|
||||||
const aConfirm = BulkEditSorter._needsConfirmation(a.category);
|
|
||||||
const bConfirm = BulkEditSorter._needsConfirmation(b.category);
|
|
||||||
if (aConfirm === bConfirm) {
|
|
||||||
return a.category.metadata.label.localeCompare(b.category.metadata.label);
|
|
||||||
} else if (aConfirm) {
|
|
||||||
return -1;
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (a instanceof FileElement && b instanceof FileElement) {
|
if (a instanceof FileElement && b instanceof FileElement) {
|
||||||
return compare(a.edit.uri.toString(), b.edit.uri.toString());
|
return compare(a.edit.uri.toString(), b.edit.uri.toString());
|
||||||
}
|
}
|
||||||
@@ -281,10 +268,6 @@ export class BulkEditSorter implements ITreeSorter<BulkEditElement> {
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static _needsConfirmation(a: BulkCategory): boolean {
|
|
||||||
return a.fileOperations.some(ops => ops.needsConfirmation());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- ACCESSI
|
// --- ACCESSI
|
||||||
|
|||||||
@@ -857,6 +857,6 @@ registerThemingParticipant((theme, collector) => {
|
|||||||
const linkFg = theme.getColor(textLinkForeground);
|
const linkFg = theme.getColor(textLinkForeground);
|
||||||
if (linkFg) {
|
if (linkFg) {
|
||||||
collector.addRule(`.markers-panel .markers-panel-container .tree-container .monaco-tl-contents .details-container a.code-link .marker-code > span:hover { color: ${linkFg}; }`);
|
collector.addRule(`.markers-panel .markers-panel-container .tree-container .monaco-tl-contents .details-container a.code-link .marker-code > span:hover { color: ${linkFg}; }`);
|
||||||
collector.addRule(`.markers-panel .markers-panel-container .tree-container .monaco-list:focus .monaco-tl-contents .details-container a.code-link .marker-code > span:hover { color: ${linkFg.lighten(.4)}; }`);
|
collector.addRule(`.markers-panel .markers-panel-container .tree-container .monaco-list:focus .monaco-tl-contents .details-container a.code-link .marker-code > span:hover { color: inherit; }`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -6,14 +6,14 @@
|
|||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { URI } from 'vs/base/common/uri';
|
import { URI } from 'vs/base/common/uri';
|
||||||
import * as errors from 'vs/base/common/errors';
|
import * as errors from 'vs/base/common/errors';
|
||||||
import { equals, deepClone, assign } from 'vs/base/common/objects';
|
import { equals, deepClone } from 'vs/base/common/objects';
|
||||||
import * as DOM from 'vs/base/browser/dom';
|
import * as DOM from 'vs/base/browser/dom';
|
||||||
import { Separator } from 'vs/base/browser/ui/actionbar/actionbar';
|
import { Separator } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||||
import { IAction } from 'vs/base/common/actions';
|
import { IAction } from 'vs/base/common/actions';
|
||||||
import { IFileService } from 'vs/platform/files/common/files';
|
import { IFileService } from 'vs/platform/files/common/files';
|
||||||
import { toResource, IUntitledTextResourceInput, SideBySideEditor, pathsToEditors } from 'vs/workbench/common/editor';
|
import { toResource, IUntitledTextResourceInput, SideBySideEditor, pathsToEditors } from 'vs/workbench/common/editor';
|
||||||
import { IEditorService, IResourceEditor } from 'vs/workbench/services/editor/common/editorService';
|
import { IEditorService, IResourceEditor } from 'vs/workbench/services/editor/common/editorService';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService, crashReporterIdStorageKey } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { IWindowSettings, IOpenFileRequest, IWindowsConfiguration, IAddFoldersRequest, IRunActionInWindowRequest, IRunKeybindingInWindowRequest, getTitleBarStyle } from 'vs/platform/windows/common/windows';
|
import { IWindowSettings, IOpenFileRequest, IWindowsConfiguration, IAddFoldersRequest, IRunActionInWindowRequest, IRunKeybindingInWindowRequest, getTitleBarStyle } from 'vs/platform/windows/common/windows';
|
||||||
import { ITitleService } from 'vs/workbench/services/title/common/titleService';
|
import { ITitleService } from 'vs/workbench/services/title/common/titleService';
|
||||||
import { IWorkbenchThemeService, VS_HC_THEME } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
import { IWorkbenchThemeService, VS_HC_THEME } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||||
@@ -46,7 +46,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||||||
import { MenubarControl } from '../browser/parts/titlebar/menubarControl';
|
import { MenubarControl } from '../browser/parts/titlebar/menubarControl';
|
||||||
import { ILabelService } from 'vs/platform/label/common/label';
|
import { ILabelService } from 'vs/platform/label/common/label';
|
||||||
import { IUpdateService } from 'vs/platform/update/common/update';
|
import { IUpdateService } from 'vs/platform/update/common/update';
|
||||||
import { IStorageService } from 'vs/platform/storage/common/storage';
|
import { IStorageService, StorageScope } from 'vs/platform/storage/common/storage';
|
||||||
import { IPreferencesService } from '../services/preferences/common/preferences';
|
import { IPreferencesService } from '../services/preferences/common/preferences';
|
||||||
import { IMenubarService, IMenubarData, IMenubarMenu, IMenubarKeybinding, IMenubarMenuItemSubmenu, IMenubarMenuItemAction, MenubarMenuItem } from 'vs/platform/menubar/node/menubar';
|
import { IMenubarService, IMenubarData, IMenubarMenu, IMenubarKeybinding, IMenubarMenuItemSubmenu, IMenubarMenuItemAction, MenubarMenuItem } from 'vs/platform/menubar/node/menubar';
|
||||||
import { withNullAsUndefined, assertIsDefined } from 'vs/base/common/types';
|
import { withNullAsUndefined, assertIsDefined } from 'vs/base/common/types';
|
||||||
@@ -104,7 +104,8 @@ export class ElectronWindow extends Disposable {
|
|||||||
@IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService,
|
@IWorkbenchLayoutService private readonly layoutService: IWorkbenchLayoutService,
|
||||||
@IElectronEnvironmentService private readonly electronEnvironmentService: IElectronEnvironmentService,
|
@IElectronEnvironmentService private readonly electronEnvironmentService: IElectronEnvironmentService,
|
||||||
@IWorkingCopyService private readonly workingCopyService: IWorkingCopyService,
|
@IWorkingCopyService private readonly workingCopyService: IWorkingCopyService,
|
||||||
@IFilesConfigurationService private readonly filesConfigurationService: IFilesConfigurationService
|
@IFilesConfigurationService private readonly filesConfigurationService: IFilesConfigurationService,
|
||||||
|
@IStorageService private readonly storageService: IStorageService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
@@ -422,8 +423,8 @@ export class ElectronWindow extends Disposable {
|
|||||||
this.updateTouchbarMenu();
|
this.updateTouchbarMenu();
|
||||||
|
|
||||||
// Crash reporter (if enabled)
|
// Crash reporter (if enabled)
|
||||||
if (!this.environmentService.disableCrashReporter && product.crashReporter && product.hockeyApp && this.configurationService.getValue('telemetry.enableCrashReporter')) {
|
if (!this.environmentService.disableCrashReporter && product.crashReporter && product.appCenter && this.configurationService.getValue('telemetry.enableCrashReporter')) {
|
||||||
this.setupCrashReporter(product.crashReporter.companyName, product.crashReporter.productName, product.hockeyApp);
|
this.setupCrashReporter(product.crashReporter.companyName, product.crashReporter.productName, product.appCenter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,31 +537,36 @@ export class ElectronWindow extends Disposable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async setupCrashReporter(companyName: string, productName: string, hockeyAppConfig: typeof product.hockeyApp): Promise<void> {
|
private async setupCrashReporter(companyName: string, productName: string, appCenterConfig: typeof product.appCenter): Promise<void> {
|
||||||
if (!hockeyAppConfig) {
|
if (!appCenterConfig) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const appCenterURL = isWindows ? appCenterConfig[process.arch === 'ia32' ? 'win32-ia32' : 'win32-x64']
|
||||||
|
: isLinux ? appCenterConfig[`linux-x64`] : appCenterConfig.darwin;
|
||||||
|
const info = await this.telemetryService.getTelemetryInfo();
|
||||||
|
const crashReporterId = this.storageService.get(crashReporterIdStorageKey, StorageScope.GLOBAL)!;
|
||||||
|
|
||||||
// base options with product info
|
// base options with product info
|
||||||
const options: CrashReporterStartOptions = {
|
const options: CrashReporterStartOptions = {
|
||||||
companyName,
|
companyName,
|
||||||
productName,
|
productName,
|
||||||
submitURL: isWindows ? hockeyAppConfig[process.arch === 'ia32' ? 'win32-ia32' : 'win32-x64'] : isLinux ? hockeyAppConfig[`linux-x64`] : hockeyAppConfig.darwin,
|
submitURL: appCenterURL.concat('&uid=', crashReporterId, '&iid=', crashReporterId, '&sid=', info.sessionId),
|
||||||
extra: {
|
extra: {
|
||||||
vscode_version: product.version,
|
vscode_version: product.version,
|
||||||
vscode_commit: product.commit || ''
|
vscode_commit: product.commit || ''
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// mixin telemetry info
|
// start crash reporter in the main process first.
|
||||||
const info = await this.telemetryService.getTelemetryInfo();
|
// On windows crashpad excepts a name pipe for the client to connect,
|
||||||
assign(options.extra, { vscode_sessionId: info.sessionId });
|
// this pipe is created by crash reporter initialization from the main process,
|
||||||
|
// changing this order of initialization will cause issues.
|
||||||
|
// For more info: https://chromium.googlesource.com/crashpad/crashpad/+/HEAD/doc/overview_design.md#normal-registration
|
||||||
|
await this.electronService.startCrashReporter(options);
|
||||||
|
|
||||||
// start crash reporter right here
|
// start crash reporter right here
|
||||||
crashReporter.start(deepClone(options));
|
crashReporter.start(deepClone(options));
|
||||||
|
|
||||||
// start crash reporter in the main process
|
|
||||||
return this.electronService.startCrashReporter(options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private onAddFoldersRequest(request: IAddFoldersRequest): void {
|
private onAddFoldersRequest(request: IAddFoldersRequest): void {
|
||||||
|
|||||||
Reference in New Issue
Block a user