diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 34edacfa9..addf36f43 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -3,7 +3,7 @@ name: Bug report
about: Create a report to help us improve
---
-
+
diff --git a/.github/classifier.yml b/.github/classifier.yml
index eba4910f4..07b857207 100644
--- a/.github/classifier.yml
+++ b/.github/classifier.yml
@@ -15,7 +15,7 @@
css-less-scss: [ aeschli ],
debug-console: [],
debug: {
- assignees: [ isidorn ],
+ assignees: [ weinand ],
assignLabel: false
},
diff-editor: [],
@@ -78,10 +78,10 @@
formatting: [],
git: [ joaomoreno ],
grammar: [],
- hot-exit: [ Tyriar ],
+ hot-exit: [],
html: [ aeschli ],
install-update: [],
- integrated-terminal: [ Tyriar ],
+ integrated-terminal: [],
integration-test: [],
intellisense-config: [],
issue-reporter: [ RMacfarlane ],
diff --git a/.github/commands.yml b/.github/commands.yml
index ba6ab0e86..95a3df06c 100644
--- a/.github/commands.yml
+++ b/.github/commands.yml
@@ -46,6 +46,7 @@
{
type: 'comment',
name: 'duplicate',
+ allowUsers: ['cleidigh', 'usernamehw'],
action: 'updateLabels',
addLabel: '*duplicate'
},
@@ -59,18 +60,21 @@
{
type: 'comment',
name: 'confirm',
+ allowUsers: ['cleidigh', 'usernamehw'],
action: 'updateLabels',
addLabel: 'confirmed'
},
{
type: 'comment',
name: 'findDuplicates',
+ allowUsers: ['cleidigh', 'usernamehw'],
action: 'comment',
comment: "Potential duplicates:\n${potentialDuplicates}"
},
{
type: 'comment',
name: 'needsMoreInfo',
+ allowUsers: ['cleidigh', 'usernamehw'],
action: 'updateLabels',
addLabel: 'needs more info',
comment: "Thanks for creating this issue! We figured it's missing some basic information or in some other way doesn't follow our [issue reporting](https://aka.ms/vscodeissuereporting) guidelines. Please take the time to review these and update the issue.\n\nHappy Coding!"
diff --git a/.vscode/cglicenses.schema.json b/.vscode/cglicenses.schema.json
new file mode 100644
index 000000000..238f4803f
--- /dev/null
+++ b/.vscode/cglicenses.schema.json
@@ -0,0 +1,23 @@
+{
+ "type": "array",
+ "items": {
+ "type": "object",
+ "required": [
+ "name",
+ "licenseDetail"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the dependency"
+ },
+ "licenseDetail": {
+ "type": "array",
+ "description": "The complete license text of the dependency",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/.vscode/cgmanifest.schema.json b/.vscode/cgmanifest.schema.json
new file mode 100644
index 000000000..2e719b023
--- /dev/null
+++ b/.vscode/cgmanifest.schema.json
@@ -0,0 +1,142 @@
+{
+ "type": "object",
+ "properties": {
+ "registrations": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "properties": {
+ "component": {
+ "oneOf": [
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "git"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "git"
+ ]
+ },
+ "git": {
+ "type": "object",
+ "required": [
+ "name",
+ "repositoryUrl",
+ "commitHash"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "repositoryUrl": {
+ "type": "string"
+ },
+ "commitHash": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "npm"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "npm"
+ ]
+ },
+ "npm": {
+ "type": "object",
+ "required": [
+ "name",
+ "version"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ {
+ "type": "object",
+ "required": [
+ "type",
+ "other"
+ ],
+ "properties": {
+ "type": {
+ "type": "string",
+ "enum": [
+ "other"
+ ]
+ },
+ "other": {
+ "type": "object",
+ "required": [
+ "name",
+ "downloadUrl",
+ "version"
+ ],
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "downloadUrl": {
+ "type": "string"
+ },
+ "version": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ ]
+ },
+ "repositoryUrl": {
+ "type": "string",
+ "description": "The git url of the component"
+ },
+ "version": {
+ "type": "string",
+ "description": "The version of the component"
+ },
+ "license": {
+ "type": "string",
+ "description": "The name of the license"
+ },
+ "developmentDependency": {
+ "type": "boolean",
+ "description": "This component is inlined in the vscode repo and **is not shipped**."
+ },
+ "isOnlyProductionDependency": {
+ "type": "boolean",
+ "description": "This component is shipped and **is not inlined in the vscode repo**."
+ },
+ "licenseDetail": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ },
+ "description": "The license text"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 8ad783bcb..55cfea092 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -2,7 +2,7 @@
// See https://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
- "eg2.tslint",
+ "ms-vscode.vscode-typescript-tslint-plugin",
"dbaeumer.vscode-eslint",
"msjsdiag.debugger-for-chrome"
]
diff --git a/.vscode/launch.json b/.vscode/launch.json
index a117e3ed4..89dc16fb1 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -9,17 +9,14 @@
"stopOnEntry": true,
"args": [
"hygiene"
- ],
- "cwd": "${workspaceFolder}"
+ ]
},
{
"type": "node",
"request": "attach",
"name": "Attach to Extension Host",
- "protocol": "inspector",
"port": 5870,
"restart": true,
- "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -28,9 +25,7 @@
"type": "node",
"request": "attach",
"name": "Attach to Shared Process",
- "protocol": "inspector",
"port": 5871,
- "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -38,10 +33,8 @@
{
"type": "node",
"request": "attach",
- "protocol": "inspector",
"name": "Attach to Search Process",
"port": 5876,
- "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -50,9 +43,7 @@
"type": "node",
"request": "attach",
"name": "Attach to CLI Process",
- "protocol": "inspector",
"port": 5874,
- "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -61,9 +52,7 @@
"type": "node",
"request": "attach",
"name": "Attach to Main Process",
- "protocol": "inspector",
"port": 5875,
- "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -129,7 +118,6 @@
"type": "chrome",
"request": "attach",
"name": "Attach to VS Code",
- "smartStep": true,
"port": 9222
},
{
@@ -149,7 +137,6 @@
"runtimeArgs": [
"--inspect=5875", "--no-cached-data"
],
- "smartStep": true,
"skipFiles": [
"**/winjs*.js"
],
@@ -163,7 +150,6 @@
"runtimeArgs": [
"--no-cached-data"
],
- "smartStep": true,
"outFiles": [
"${workspaceFolder}/out/**/*.js"
]
@@ -172,7 +158,6 @@
"type": "node",
"request": "launch",
"name": "Git Unit Tests",
- "protocol": "inspector",
"program": "${workspaceFolder}/extensions/git/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"cwd": "${workspaceFolder}/extensions/git",
@@ -212,7 +197,6 @@
"type": "node",
"request": "launch",
"name": "Unit Tests",
- "protocol": "inspector",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"runtimeExecutable": "${workspaceFolder}/.build/electron/Code - OSS.app/Contents/MacOS/Electron",
"windows": {
@@ -289,4 +273,4 @@
]
}
]
-}
\ No newline at end of file
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3edd3534d..8b9ca6cd0 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -10,7 +10,7 @@
}
},
"files.associations": {
- "OSSREADME.json": "jsonc"
+ "cglicenses.json": "jsonc"
},
"search.exclude": {
"**/node_modules": true,
@@ -24,7 +24,6 @@
"test/smoke/out/**": true,
"src/vs/base/test/node/uri.test.data.txt": true
},
- "tslint.enable": true,
"lcov.path": [
"./.build/coverage/lcov.info",
"./.build/coverage-single/lcov.info"
@@ -42,5 +41,12 @@
"npm.exclude": "**/extensions/**",
"emmet.excludeLanguages": [],
"typescript.preferences.importModuleSpecifier": "non-relative",
- "typescript.preferences.quoteStyle": "single"
-}
\ No newline at end of file
+ "typescript.preferences.quoteStyle": "single",
+ "json.schemas": [{
+ "fileMatch": [ "cgmanifest.json" ],
+ "url": "./.vscode/cgmanifest.schema.json"
+ }, {
+ "fileMatch": [ "cglicenses.json" ],
+ "url": "./.vscode/cglicenses.schema.json"
+ }]
+}
diff --git a/.vscode/shared.code-snippets b/.vscode/shared.code-snippets
index 6ff336abc..6d6690a02 100644
--- a/.vscode/shared.code-snippets
+++ b/.vscode/shared.code-snippets
@@ -31,7 +31,7 @@
"prefix": "emitter",
"description": "Add emitter and event properties",
"body": [
- "private _onDid$1 = new Emitter<$2>();",
+ "private readonly _onDid$1 = new Emitter<$2>();",
"readonly onDid$1: Event<$2> = this._onDid$1.event;"
],
}
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b1650a08e..7775753e8 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -101,4 +101,3 @@ please see [How to Contribute](https://github.com/Microsoft/vscode/wiki/How-to-C
# Thank You!
Your contributions to open source, large or small, make great projects like this possible. Thank you for taking the time to contribute.
-
diff --git a/README.md b/README.md
index 934da0fb2..a7294e71b 100644
--- a/README.md
+++ b/README.md
@@ -5,17 +5,16 @@
[![Bugs](https://img.shields.io/github/issues/Microsoft/vscode/bug.svg)](https://github.com/Microsoft/vscode/issues?utf8=✓&q=is%3Aissue+is%3Aopen+label%3Abug)
[![Gitter](https://img.shields.io/badge/chat-on%20gitter-yellow.svg)](https://gitter.im/Microsoft/vscode)
-[VS Code](https://code.visualstudio.com) is a new type of tool that combines the simplicity of
-a code editor with what developers need for their core edit-build-debug cycle. Code
-provides comprehensive editing and debugging support, an extensibility model, and lightweight integration with existing tools.
+[VS Code](https://code.visualstudio.com) is a type of tool that combines the simplicity of
+a code editor with what developers need for their core edit-build-debug cycle. It provides comprehensive editing and debugging support, an extensibility model, and lightweight integration with existing tools.
-VS Code is updated monthly with new features and bug fixes. You can download it for Windows, macOS, and Linux on [VS Code's website](https://code.visualstudio.com/Download). To get the latest releases every day, you can install the [Insiders version of VS Code](https://code.visualstudio.com/insiders). This builds from the master branch and is updated at least daily.
+VS Code is updated monthly with new features and bug fixes. You can download it for Windows, macOS, and Linux on [VS Code's website](https://code.visualstudio.com/Download). To get the latest releases every day, you can install the [Insiders version of VS Code](https://code.visualstudio.com/insiders). This builds from the master branch and is updated daily at the very least.
-The [`vscode`](https://github.com/microsoft/vscode) repository is where we do development and there are many ways you can participate in the project, for example:
+The [`vscode`](https://github.com/microsoft/vscode) repository is where VS Code is developed and there are many ways you can participate in the project, for example:
* [Submit bugs and feature requests](https://github.com/microsoft/vscode/issues) and help us verify as they are checked in.
* Review [source code changes](https://github.com/microsoft/vscode/pulls).
@@ -40,14 +39,19 @@ Please also see our [Code of Conduct](CODE_OF_CONDUCT.md).
* Request a new feature on [GitHub](CONTRIBUTING.md).
* Vote for [Popular Feature Requests](https://github.com/Microsoft/vscode/issues?q=is%3Aopen+is%3Aissue+label%3Afeature-request+sort%3Areactions-%2B1-desc).
* File a bug in [GitHub Issues](https://github.com/Microsoft/vscode/issues).
-* [Tweet](https://twitter.com/code) us with other feedback.
+* [Tweet](https://twitter.com/code) us with any other feedback.
## Related Projects
-Many of the core components and extensions to Code live in their own repositories on GitHub. For example, the [node debug adapter](https://github.com/microsoft/vscode-node-debug) and the [mono debug adapter](https://github.com/microsoft/vscode-mono-debug).
+Many of the core components and extensions to Code live in their own repositories on GitHub. For example, the [node debug adapter](https://github.com/microsoft/vscode-node-debug) and the [mono debug adapter](https://github.com/microsoft/vscode-mono-debug) have their own repositories.
For a complete list, please visit the [Related Projects](https://github.com/Microsoft/vscode/wiki/Related-Projects) page on our [wiki](https://github.com/Microsoft/vscode/wiki).
+## Bundled Extensions
+
+Code ships with a set of extensions. These extensions are located in the [extensions](extensions) folder.
+These extensions include grammars and snippets for several languages. Extensions that provide rich language support (code completion, go to definition) for a language have the suffix 'language-features'. For example, the 'json' extension provides coloring for JSON and the 'json-language-features' provides rich language support for JSON.
+
## License
Copyright (c) Microsoft Corporation. All rights reserved.
diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt
index ed7e5acda..cd087ee71 100644
--- a/ThirdPartyNotices.txt
+++ b/ThirdPartyNotices.txt
@@ -20,7 +20,7 @@ This project incorporates components from the projects listed below. The origina
13. davidrios/pug-tmbundle (https://github.com/davidrios/pug-tmbundle)
14. definitelytyped (https://github.com/DefinitelyTyped/DefinitelyTyped)
15. demyte/language-cshtml (https://github.com/demyte/language-cshtml)
-16. Document Object Model ()
+16. Document Object Model (https://www.w3.org/DOM/)
17. dotnet/csharp-tmLanguage version 0.1.0 (https://github.com/dotnet/csharp-tmLanguage)
18. expand-abbreviation version 0.5.8 (https://github.com/emmetio/expand-abbreviation)
19. fadeevab/make.tmbundle (https://github.com/fadeevab/make.tmbundle)
@@ -43,8 +43,8 @@ This project incorporates components from the projects listed below. The origina
36. Microsoft/vscode-JSON.tmLanguage (https://github.com/Microsoft/vscode-JSON.tmLanguage)
37. Microsoft/vscode-mssql (https://github.com/Microsoft/vscode-mssql)
38. mmims/language-batchfile (https://github.com/mmims/language-batchfile)
-39. octicons-code version 3.1.0 (https://octicons.github.com)
-40. octicons-font version 3.1.0 (https://octicons.github.com)
+39. octicons-code version 3.1.0 (https://registry.npmjs.org/octicons/-/octicons-3.1.0.tgz)
+40. octicons-font version 3.1.0 (https://registry.npmjs.org/octicons/-/octicons-3.1.0.tgz)
41. PowerShell/EditorSyntax (https://github.com/powershell/editorsyntax)
42. seti-ui version 0.1.0 (https://github.com/jesseweed/seti-ui)
43. shaders-tmLanguage version 0.1.0 (https://github.com/tgjones/shaders-tmLanguage)
@@ -60,13 +60,12 @@ This project incorporates components from the projects listed below. The origina
53. textmate/markdown.tmbundle (https://github.com/textmate/markdown.tmbundle)
54. textmate/perl.tmbundle (https://github.com/textmate/perl.tmbundle)
55. textmate/ruby.tmbundle (https://github.com/textmate/ruby.tmbundle)
-56. textmate/toml.tmbundle (https://github.com/textmate/toml.tmbundle)
-57. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle)
-58. TypeScript-TmLanguage version 0.1.8 (https://github.com/Microsoft/TypeScript-TmLanguage)
-59. Unicode ()
-60. vscode-logfile-highlighter version 1.2.0 (https://github.com/emilast/vscode-logfile-highlighter)
-61. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift)
-62. Web Background Synchronization (https://github.com/WICG/BackgroundSync)
+56. textmate/yaml.tmbundle (https://github.com/textmate/yaml.tmbundle)
+57. TypeScript-TmLanguage version 0.1.8 (https://github.com/Microsoft/TypeScript-TmLanguage)
+58. Unicode (http://www.unicode.org/)
+59. vscode-logfile-highlighter version 1.2.0 (https://github.com/emilast/vscode-logfile-highlighter)
+60. vscode-swift version 0.0.1 (https://github.com/owensd/vscode-swift)
+61. Web Background Synchronization (https://github.com/WICG/BackgroundSync)
%% atom/language-c NOTICES AND INFORMATION BEGIN HERE
@@ -1282,7 +1281,49 @@ END OF MagicStack/MagicPython NOTICES AND INFORMATION
%% marked NOTICES AND INFORMATION BEGIN HERE
=========================================
-Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)
+information
+
+## Contribution License Agreement
+
+If you contribute code to this project, you are implicitly allowing your code
+to be distributed under the MIT license. You are also implicitly verifying that
+all code is your original work. ``
+
+## Marked
+
+Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## Markdown
+
+Copyright © 2004, John Gruber
+http://daringfireball.net/
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+* Neither the name "Markdown" nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
=========================================
END OF marked NOTICES AND INFORMATION
@@ -2180,20 +2221,6 @@ to the base-name name of the original file, and an extension of txt, html, or si
=========================================
END OF textmate/ruby.tmbundle NOTICES AND INFORMATION
-%% textmate/toml.tmbundle NOTICES AND INFORMATION BEGIN HERE
-=========================================
-Copyright (c) https://github.com/infininight and https://github.com/mojombo
-Permission to copy, use, modify, sell and distribute this
-software is granted. This software is provided "as is" without
-express or implied warranty, and with no claim as to its
-suitability for any purpose
-
-An exception is made for files in readable text which contain their own license information, or files where an accompanying
-file exists (in the same directory) with a "-license" suffix added to the base-name name of the original file, and an extension .
-of txt, html, or similar. For example "tidy" is accompanied by "tidy-license.txt".
-=========================================
-END OF textmate/toml.tmbundle NOTICES AND INFORMATION
-
%% textmate/yaml.tmbundle NOTICES AND INFORMATION BEGIN HERE
=========================================
Copyright (c) 2015 FichteFoll
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
new file mode 100644
index 000000000..e52afca60
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,18 @@
+jobs:
+- job: Windows
+ pool:
+ vmImage: VS2017-Win2016
+ steps:
+ - template: build/azure-pipelines/win32/continuous-build-win32.yml
+
+- job: Linux
+ pool:
+ vmImage: 'Ubuntu-16.04'
+ steps:
+ - template: build/azure-pipelines/linux/continuous-build-linux.yml
+
+- job: macOS
+ pool:
+ vmImage: macOS 10.13
+ steps:
+ - template: build/azure-pipelines/darwin/continuous-build-darwin.yml
\ No newline at end of file
diff --git a/build/tfs/common/.gitignore b/build/azure-pipelines/common/.gitignore
similarity index 100%
rename from build/tfs/common/.gitignore
rename to build/azure-pipelines/common/.gitignore
diff --git a/build/tfs/common/installDistro.ts b/build/azure-pipelines/common/installDistro.ts
similarity index 100%
rename from build/tfs/common/installDistro.ts
rename to build/azure-pipelines/common/installDistro.ts
diff --git a/build/tfs/common/publish.ts b/build/azure-pipelines/common/publish.ts
similarity index 98%
rename from build/tfs/common/publish.ts
rename to build/azure-pipelines/common/publish.ts
index 7a74dc610..2095c2d25 100644
--- a/build/tfs/common/publish.ts
+++ b/build/azure-pipelines/common/publish.ts
@@ -265,6 +265,11 @@ async function publish(commit: string, quality: string, platform: string, type:
}
function main(): void {
+ if (process.env['VSCODE_BUILD_SKIP_PUBLISH']) {
+ console.warn('Skipping publish due to VSCODE_BUILD_SKIP_PUBLISH');
+ return;
+ }
+
const opts = minimist(process.argv.slice(2), {
boolean: ['upload-only']
});
diff --git a/build/tfs/common/symbols.ts b/build/azure-pipelines/common/symbols.ts
similarity index 100%
rename from build/tfs/common/symbols.ts
rename to build/azure-pipelines/common/symbols.ts
diff --git a/build/tfs/darwin/continuous-build-darwin.yml b/build/azure-pipelines/darwin/continuous-build-darwin.yml
similarity index 100%
rename from build/tfs/darwin/continuous-build-darwin.yml
rename to build/azure-pipelines/darwin/continuous-build-darwin.yml
diff --git a/build/tfs/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml
similarity index 84%
rename from build/tfs/darwin/product-build-darwin.yml
rename to build/azure-pipelines/darwin/product-build-darwin.yml
index f5520d060..c510636ef 100644
--- a/build/tfs/darwin/product-build-darwin.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin.yml
@@ -15,7 +15,7 @@ steps:
yarn monaco-compile-check
yarn strict-null-check
VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" yarn gulp -- mixin
- node build/tfs/common/installDistro.js
+ node build/azure-pipelines/common/installDistro.js
node build/lib/builtInExtensions.js
displayName: Prepare build
@@ -69,7 +69,7 @@ steps:
AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
- node build/tfs/common/publish.js \
+ node build/azure-pipelines/common/publish.js \
"$(VSCODE_QUALITY)" \
darwin \
archive \
@@ -79,9 +79,12 @@ steps:
../VSCode-darwin.zip
# publish hockeyapp symbols
- node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_MACOS)"
+ node build/azure-pipelines/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_MACOS)"
# upload configuration
AZURE_STORAGE_ACCESS_KEY="$(AZURE_STORAGE_ACCESS_KEY)" \
yarn gulp -- upload-vscode-configuration
- displayName: Publish
\ No newline at end of file
+ displayName: Publish
+
+- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
+ displayName: 'Component Detection'
diff --git a/build/azure-pipelines/linux/.gitignore b/build/azure-pipelines/linux/.gitignore
new file mode 100644
index 000000000..0f46fa708
--- /dev/null
+++ b/build/azure-pipelines/linux/.gitignore
@@ -0,0 +1 @@
+pat
\ No newline at end of file
diff --git a/build/tfs/linux/continuous-build-linux.yml b/build/azure-pipelines/linux/continuous-build-linux.yml
similarity index 72%
rename from build/tfs/linux/continuous-build-linux.yml
rename to build/azure-pipelines/linux/continuous-build-linux.yml
index 459b82b9a..91891e6da 100644
--- a/build/tfs/linux/continuous-build-linux.yml
+++ b/build/azure-pipelines/linux/continuous-build-linux.yml
@@ -1,14 +1,12 @@
steps:
- script: |
set -e
- apt-get update
- apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 libgconf-2-4 dbus xvfb libgtk-3-0
- cp build/tfs/linux/x64/xvfb.init /etc/init.d/xvfb
- chmod +x /etc/init.d/xvfb
- update-rc.d xvfb defaults
- ln -sf /bin/dbus-daemon /usr/bin/dbus-daemon
- service xvfb start
- service dbus start
+ sudo apt-get update
+ sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 libgconf-2-4 dbus xvfb libgtk-3-0
+ sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
+ sudo chmod +x /etc/init.d/xvfb
+ sudo update-rc.d xvfb defaults
+ sudo service xvfb start
- task: NodeTool@0
inputs:
versionSpec: "8.12.0"
diff --git a/build/azure-pipelines/linux/frozen-check.js b/build/azure-pipelines/linux/frozen-check.js
new file mode 100644
index 000000000..281632424
--- /dev/null
+++ b/build/azure-pipelines/linux/frozen-check.js
@@ -0,0 +1,40 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+'use strict';
+Object.defineProperty(exports, "__esModule", { value: true });
+const documentdb_1 = require("documentdb");
+function createDefaultConfig(quality) {
+ return {
+ id: quality,
+ frozen: false
+ };
+}
+function getConfig(quality) {
+ const client = new documentdb_1.DocumentClient(process.env['AZURE_DOCUMENTDB_ENDPOINT'], { masterKey: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
+ const collection = 'dbs/builds/colls/config';
+ const query = {
+ query: `SELECT TOP 1 * FROM c WHERE c.id = @quality`,
+ parameters: [
+ { name: '@quality', value: quality }
+ ]
+ };
+ return new Promise((c, e) => {
+ client.queryDocuments(collection, query).toArray((err, results) => {
+ if (err && err.code !== 409) {
+ return e(err);
+ }
+ c(!results || results.length === 0 ? createDefaultConfig(quality) : results[0]);
+ });
+ });
+}
+getConfig(process.argv[2])
+ .then(config => {
+ console.log(config.frozen);
+ process.exit(0);
+})
+ .catch(err => {
+ console.error(err);
+ process.exit(1);
+});
diff --git a/build/tfs/linux/product-build-linux.yml b/build/azure-pipelines/linux/product-build-linux.yml
similarity index 70%
rename from build/tfs/linux/product-build-linux.yml
rename to build/azure-pipelines/linux/product-build-linux.yml
index 7a8c637ef..ff877d440 100644
--- a/build/tfs/linux/product-build-linux.yml
+++ b/build/azure-pipelines/linux/product-build-linux.yml
@@ -20,7 +20,7 @@ steps:
npm run monaco-compile-check
npm run strict-null-check
VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)" npm run gulp -- mixin
- node build/tfs/common/installDistro.js
+ node build/azure-pipelines/common/installDistro.js
node build/lib/builtInExtensions.js
- script: |
@@ -63,10 +63,10 @@ steps:
AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
- node build/tfs/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_LINUX" archive-unsigned "$TARBALL_FILENAME" "$VERSION" true "$TARBALL_PATH"
+ node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_LINUX" archive-unsigned "$TARBALL_FILENAME" "$VERSION" true "$TARBALL_PATH"
# Publish hockeyapp symbols
- node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_LINUX64)"
+ node build/azure-pipelines/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" "$(VSCODE_HOCKEYAPP_ID_LINUX64)"
# Publish DEB
npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-deb"
@@ -78,7 +78,7 @@ steps:
AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
- node build/tfs/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_DEB" package "$DEB_FILENAME" "$VERSION" true "$DEB_PATH"
+ node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_DEB" package "$DEB_FILENAME" "$VERSION" true "$DEB_PATH"
# Publish RPM
npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-build-rpm"
@@ -90,7 +90,22 @@ steps:
AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
- node build/tfs/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_RPM" package "$RPM_FILENAME" "$VERSION" true "$RPM_PATH"
+ node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "$PLATFORM_RPM" package "$RPM_FILENAME" "$VERSION" true "$RPM_PATH"
- # SNAP_FILENAME="$(ls $REPO/.build/linux/snap/$ARCH/ | grep .snap)"
- # SNAP_PATH="$REPO/.build/linux/snap/$ARCH/$SNAP_FILENAME"
+ # Publish Snap
+ npm run gulp -- "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
+
+ # Pack snap tarball artifact, in order to preserve file perms
+ mkdir -p $REPO/.build/linux/snap-tarball
+ SNAP_TARBALL_PATH="$REPO/.build/linux/snap-tarball/snap-$(VSCODE_ARCH).tar.gz"
+ rm -rf $SNAP_TARBALL_PATH
+ (cd .build/linux && tar -czf $SNAP_TARBALL_PATH snap)
+
+- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
+ displayName: 'Component Detection'
+
+- task: PublishPipelineArtifact@0
+ displayName: 'Publish Pipeline Artifact'
+ inputs:
+ artifactName: snap-$(VSCODE_ARCH)
+ targetPath: .build/linux/snap-tarball
diff --git a/build/azure-pipelines/linux/snap-build-linux.yml b/build/azure-pipelines/linux/snap-build-linux.yml
new file mode 100644
index 000000000..29252107f
--- /dev/null
+++ b/build/azure-pipelines/linux/snap-build-linux.yml
@@ -0,0 +1,42 @@
+steps:
+- task: NodeTool@0
+ inputs:
+ versionSpec: "8.12.0"
+
+- task: geeklearningio.gl-vsts-tasks-yarn.yarn-installer-task.YarnInstaller@2
+ inputs:
+ versionSpec: "1.10.1"
+
+- task: DownloadPipelineArtifact@0
+ displayName: 'Download Pipeline Artifact'
+ inputs:
+ artifactName: snap-$(VSCODE_ARCH)
+ targetPath: .build/linux/snap-tarball
+
+- script: |
+ set -e
+
+ REPO="$(pwd)"
+ ARCH="$(VSCODE_ARCH)"
+ SNAP_ROOT="$REPO/.build/linux/snap/$ARCH"
+
+ # Install build dependencies
+ (cd build && yarn)
+
+ # Unpack snap tarball artifact, in order to preserve file perms
+ SNAP_TARBALL_PATH="$REPO/.build/linux/snap-tarball/snap-$ARCH.tar.gz"
+ (cd .build/linux && tar -xzf $SNAP_TARBALL_PATH)
+
+ # Create snap package
+ BUILD_VERSION="$(date +%s)"
+ SNAP_FILENAME="code-$VSCODE_QUALITY-$BUILD_VERSION.snap"
+ PACKAGEJSON="$(ls $SNAP_ROOT/code*/usr/share/code*/resources/app/package.json)"
+ VERSION=$(node -p "require(\"$PACKAGEJSON\").version")
+ SNAP_PATH="$SNAP_ROOT/$SNAP_FILENAME"
+ (cd $SNAP_ROOT/code-* && snapcraft snap --output "$SNAP_PATH")
+
+ # Publish snap package
+ AZURE_DOCUMENTDB_MASTERKEY="$(AZURE_DOCUMENTDB_MASTERKEY)" \
+ AZURE_STORAGE_ACCESS_KEY_2="$(AZURE_STORAGE_ACCESS_KEY_2)" \
+ MOONCAKE_STORAGE_ACCESS_KEY="$(MOONCAKE_STORAGE_ACCESS_KEY)" \
+ node build/azure-pipelines/common/publish.js "$VSCODE_QUALITY" "linux-snap-$ARCH" package "$SNAP_FILENAME" "$VERSION" true "$SNAP_PATH"
\ No newline at end of file
diff --git a/build/tfs/linux/ia32/xvfb.init b/build/azure-pipelines/linux/xvfb.init
similarity index 100%
rename from build/tfs/linux/ia32/xvfb.init
rename to build/azure-pipelines/linux/xvfb.init
diff --git a/build/tfs/product-build.yml b/build/azure-pipelines/product-build.yml
similarity index 77%
rename from build/tfs/product-build.yml
rename to build/azure-pipelines/product-build.yml
index 417ae4f78..afebc973c 100644
--- a/build/tfs/product-build.yml
+++ b/build/azure-pipelines/product-build.yml
@@ -4,6 +4,8 @@ resources:
image: joaomoreno/vscode-linux-build-agent:x64
- container: vscode-ia32
image: joaomoreno/vscode-linux-build-agent:ia32
+ - container: snapcraft
+ image: snapcore/snapcraft
jobs:
- job: Windows
@@ -34,6 +36,17 @@ jobs:
steps:
- template: linux/product-build-linux.yml
+- job: LinuxSnap
+ condition: eq(variables['VSCODE_BUILD_LINUX'], 'true')
+ pool:
+ vmImage: 'Ubuntu-16.04'
+ variables:
+ VSCODE_ARCH: x64
+ container: snapcraft
+ dependsOn: Linux
+ steps:
+ - template: linux/snap-build-linux.yml
+
- job: Linux32
condition: eq(variables['VSCODE_BUILD_LINUX_32BIT'], 'true')
pool:
diff --git a/build/tfs/win32/ESRPClient/NuGet.config b/build/azure-pipelines/win32/ESRPClient/NuGet.config
similarity index 100%
rename from build/tfs/win32/ESRPClient/NuGet.config
rename to build/azure-pipelines/win32/ESRPClient/NuGet.config
diff --git a/build/tfs/win32/ESRPClient/packages.config b/build/azure-pipelines/win32/ESRPClient/packages.config
similarity index 100%
rename from build/tfs/win32/ESRPClient/packages.config
rename to build/azure-pipelines/win32/ESRPClient/packages.config
diff --git a/build/tfs/win32/continuous-build-win32.yml b/build/azure-pipelines/win32/continuous-build-win32.yml
similarity index 100%
rename from build/tfs/win32/continuous-build-win32.yml
rename to build/azure-pipelines/win32/continuous-build-win32.yml
diff --git a/build/tfs/win32/exec.ps1 b/build/azure-pipelines/win32/exec.ps1
similarity index 100%
rename from build/tfs/win32/exec.ps1
rename to build/azure-pipelines/win32/exec.ps1
diff --git a/build/tfs/win32/import-esrp-auth-cert.ps1 b/build/azure-pipelines/win32/import-esrp-auth-cert.ps1
similarity index 100%
rename from build/tfs/win32/import-esrp-auth-cert.ps1
rename to build/azure-pipelines/win32/import-esrp-auth-cert.ps1
diff --git a/build/tfs/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml
similarity index 71%
rename from build/tfs/win32/product-build-win32.yml
rename to build/azure-pipelines/win32/product-build-win32.yml
index 9dd2d4c65..c4922708c 100644
--- a/build/tfs/win32/product-build-win32.yml
+++ b/build/azure-pipelines/win32/product-build-win32.yml
@@ -13,7 +13,7 @@ steps:
addToPath: true
- powershell: |
- . build/tfs/win32/exec.ps1
+ . build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
"machine monacotools.visualstudio.com password $(VSO_PAT)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
$env:npm_config_arch="$(VSCODE_ARCH)"
@@ -24,11 +24,11 @@ steps:
exec { npm run monaco-compile-check }
exec { npm run strict-null-check }
exec { npm run gulp -- mixin }
- exec { node build/tfs/common/installDistro.js }
+ exec { node build/azure-pipelines/common/installDistro.js }
exec { node build/lib/builtInExtensions.js }
- powershell: |
- . build/tfs/win32/exec.ps1
+ . build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
$env:VSCODE_MIXIN_PASSWORD="$(VSCODE_MIXIN_PASSWORD)"
exec { npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-min" }
@@ -36,7 +36,7 @@ steps:
name: build
- powershell: |
- . build/tfs/win32/exec.ps1
+ . build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { npm run gulp -- "electron-$(VSCODE_ARCH)" }
exec { .\scripts\test.bat --build --tfs "Unit Tests" }
@@ -51,30 +51,6 @@ steps:
signConfigType: inlineSignParams
inlineOperation: |
[
- {
- "keyCode": "CP-229803",
- "operationSetCode": "SigntoolSign",
- "parameters": [
- {
- "parameterName": "OpusName",
- "parameterValue": "VS Code"
- },
- {
- "parameterName": "OpusInfo",
- "parameterValue": "https://code.visualstudio.com/"
- },
- {
- "parameterName": "PageHash",
- "parameterValue": "/NPH"
- },
- {
- "parameterName": "TimeStamp",
- "parameterValue": "/t \"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS\""
- }
- ],
- "toolName": "sign",
- "toolVersion": "1.0"
- },
{
"keyCode": "CP-230012",
"operationSetCode": "SigntoolSign",
@@ -125,9 +101,9 @@ steps:
- task: NuGetCommand@2
displayName: Install ESRPClient.exe
inputs:
- restoreSolution: 'build\tfs\win32\ESRPClient\packages.config'
+ restoreSolution: 'build\azure-pipelines\win32\ESRPClient\packages.config'
feedsToUse: config
- nugetConfigPath: 'build\tfs\win32\ESRPClient\NuGet.config'
+ nugetConfigPath: 'build\azure-pipelines\win32\ESRPClient\NuGet.config'
externalFeedCredentials: 3fc0b7f7-da09-4ae7-a9c8-d69824b1819b
restoreDirectory: packages
@@ -138,11 +114,11 @@ steps:
- powershell: |
$ErrorActionPreference = "Stop"
- .\build\tfs\win32\import-esrp-auth-cert.ps1 -AuthCertificateBase64 $(ESRP_AUTH_CERTIFICATE) -AuthCertificateKey $(ESRP_AUTH_CERTIFICATE_KEY)
+ .\build\azure-pipelines\win32\import-esrp-auth-cert.ps1 -AuthCertificateBase64 $(ESRP_AUTH_CERTIFICATE) -AuthCertificateKey $(ESRP_AUTH_CERTIFICATE_KEY)
displayName: Import ESRP Auth Certificate
- powershell: |
- . build/tfs/win32/exec.ps1
+ . build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
exec { npm run gulp -- "vscode-win32-$(VSCODE_ARCH)-archive" "vscode-win32-$(VSCODE_ARCH)-system-setup" "vscode-win32-$(VSCODE_ARCH)-user-setup" --sign }
@@ -163,10 +139,13 @@ steps:
$assetPlatform = if ("$(VSCODE_ARCH)" -eq "ia32") { "win32" } else { "win32-x64" }
- exec { node build/tfs/common/publish.js $Quality "$global:assetPlatform-archive" archive "VSCode-win32-$(VSCODE_ARCH)-$Version.zip" $Version true $Zip }
- exec { node build/tfs/common/publish.js $Quality "$global:assetPlatform" setup "VSCodeSetup-$(VSCODE_ARCH)-$Version.exe" $Version true $SystemExe }
- exec { node build/tfs/common/publish.js $Quality "$global:assetPlatform-user" setup "VSCodeUserSetup-$(VSCODE_ARCH)-$Version.exe" $Version true $UserExe }
+ exec { node build/azure-pipelines/common/publish.js $Quality "$global:assetPlatform-archive" archive "VSCode-win32-$(VSCODE_ARCH)-$Version.zip" $Version true $Zip }
+ exec { node build/azure-pipelines/common/publish.js $Quality "$global:assetPlatform" setup "VSCodeSetup-$(VSCODE_ARCH)-$Version.exe" $Version true $SystemExe }
+ exec { node build/azure-pipelines/common/publish.js $Quality "$global:assetPlatform-user" setup "VSCodeUserSetup-$(VSCODE_ARCH)-$Version.exe" $Version true $UserExe }
# publish hockeyapp symbols
$hockeyAppId = if ("$(VSCODE_ARCH)" -eq "ia32") { "$(VSCODE_HOCKEYAPP_ID_WIN32)" } else { "$(VSCODE_HOCKEYAPP_ID_WIN64)" }
- exec { node build/tfs/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" $hockeyAppId }
+ exec { node build/azure-pipelines/common/symbols.js "$(VSCODE_MIXIN_PASSWORD)" "$(VSCODE_HOCKEYAPP_TOKEN)" "$(VSCODE_ARCH)" $hockeyAppId }
+
+- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
+ displayName: 'Component Detection'
diff --git a/build/tfs/win32/sign.ps1 b/build/azure-pipelines/win32/sign.ps1
similarity index 80%
rename from build/tfs/win32/sign.ps1
rename to build/azure-pipelines/win32/sign.ps1
index d888a7d10..00c4d42d9 100644
--- a/build/tfs/win32/sign.ps1
+++ b/build/azure-pipelines/win32/sign.ps1
@@ -36,18 +36,6 @@ $Input = Create-TmpJson @{
)
SigningInfo = @{
Operations = @(
- @{
- KeyCode = "CP-229803"
- OperationCode = "SigntoolSign"
- Parameters = @{
- OpusName = "VS Code"
- OpusInfo = "https://code.visualstudio.com/"
- PageHash = "/NPH"
- TimeStamp = "/t `"http://ts4096.gtm.microsoft.com/TSS/AuthenticodeTS`""
- }
- ToolName = "sign"
- ToolVersion = "1.0"
- },
@{
KeyCode = "CP-230012"
OperationCode = "SigntoolSign"
diff --git a/build/builtInExtensions.json b/build/builtInExtensions.json
index e6bf85d5e..829f3bf13 100644
--- a/build/builtInExtensions.json
+++ b/build/builtInExtensions.json
@@ -1,7 +1,7 @@
[
{
"name": "ms-vscode.node-debug",
- "version": "1.29.0",
+ "version": "1.30.1",
"repo": "https://github.com/Microsoft/vscode-node-debug",
"metadata": {
"id": "b6ded8fb-a0a0-4c1c-acbd-ab2a3bc995a6",
@@ -16,7 +16,7 @@
},
{
"name": "ms-vscode.node-debug2",
- "version": "1.29.2",
+ "version": "1.30.1",
"repo": "https://github.com/Microsoft/vscode-node-debug2",
"metadata": {
"id": "36d19e17-7569-4841-a001-947eb18602b2",
@@ -28,5 +28,20 @@
},
"publisherDisplayName": "Microsoft"
}
+ },
+ {
+ "name": "ms-vscode.references-view",
+ "version": "0.0.11",
+ "repo": "https://github.com/Microsoft/vscode-reference-view",
+ "metadata": {
+ "id": "dc489f46-520d-4556-ae85-1f9eab3c412d",
+ "publisherId": {
+ "publisherId": "5f5636e7-69ed-4afe-b5d6-8d231fb3d3ee",
+ "publisherName": "ms-vscode",
+ "displayName": "Microsoft",
+ "flags": "verified"
+ },
+ "publisherDisplayName": "Microsoft"
+ }
}
-]
\ No newline at end of file
+]
diff --git a/build/gulpfile.editor.js b/build/gulpfile.editor.js
index 1e492d0f5..1e19fe65e 100644
--- a/build/gulpfile.editor.js
+++ b/build/gulpfile.editor.js
@@ -152,10 +152,19 @@ gulp.task('extract-editor-esm', ['clean-editor-esm', 'clean-editor-distro', 'ext
});
});
gulp.task('compile-editor-esm', ['extract-editor-esm', 'clean-editor-distro'], function () {
- const result = cp.spawnSync(`node`, [`../node_modules/.bin/tsc`], {
- cwd: path.join(__dirname, '../out-editor-esm')
- });
- console.log(result.stdout.toString());
+ if (process.platform === 'win32') {
+ const result = cp.spawnSync(`..\\node_modules\\.bin\\tsc.cmd`, {
+ cwd: path.join(__dirname, '../out-editor-esm')
+ });
+ console.log(result.stdout.toString());
+ console.log(result.stderr.toString());
+ } else {
+ const result = cp.spawnSync(`node`, [`../node_modules/.bin/tsc`], {
+ cwd: path.join(__dirname, '../out-editor-esm')
+ });
+ console.log(result.stdout.toString());
+ console.log(result.stderr.toString());
+ }
});
function toExternalDTS(contents) {
diff --git a/build/gulpfile.hygiene.js b/build/gulpfile.hygiene.js
index 85f9827e6..16d187ffc 100644
--- a/build/gulpfile.hygiene.js
+++ b/build/gulpfile.hygiene.js
@@ -43,6 +43,7 @@ const indentationFilter = [
// except specific files
'!ThirdPartyNotices.txt',
'!LICENSE.txt',
+ '!**/LICENSE',
'!src/vs/nls.js',
'!src/vs/nls.build.js',
'!src/vs/css.js',
@@ -83,9 +84,11 @@ const indentationFilter = [
'!**/*.{svg,exe,png,bmp,scpt,bat,cmd,cur,ttf,woff,eot,md,ps1,template,yaml,yml,d.ts.recipe,ico,icns}',
'!build/{lib,tslintRules}/**/*.js',
'!build/**/*.sh',
- '!build/tfs/**/*.js',
- '!build/tfs/**/*.config',
+ '!build/azure-pipelines/**/*.js',
+ '!build/azure-pipelines/**/*.config',
'!**/Dockerfile',
+ '!**/*.Dockerfile',
+ '!**/*.dockerfile',
'!extensions/markdown-language-features/media/*.js'
];
diff --git a/build/gulpfile.vscode.js b/build/gulpfile.vscode.js
index 1b725d132..326fac6bc 100644
--- a/build/gulpfile.vscode.js
+++ b/build/gulpfile.vscode.js
@@ -393,6 +393,8 @@ function packageTask(platform, arch, opts) {
result = es.merge(result, gulp.src('resources/win32/bin/code.sh', { base: 'resources/win32' })
.pipe(replace('@@NAME@@', product.nameShort))
+ .pipe(replace('@@COMMIT@@', commit))
+ .pipe(replace('@@APPNAME@@', product.applicationName))
.pipe(rename(function (f) { f.basename = product.applicationName; f.extname = ''; })));
result = es.merge(result, gulp.src('resources/win32/VisualElementsManifest.xml', { base: 'resources/win32' })
diff --git a/build/gulpfile.vscode.linux.js b/build/gulpfile.vscode.linux.js
index 349a2b979..50258a98f 100644
--- a/build/gulpfile.vscode.linux.js
+++ b/build/gulpfile.vscode.linux.js
@@ -118,12 +118,12 @@ function prepareRpmPackage(arch) {
const desktopUrlHandler = gulp.src('resources/linux/code-url-handler.desktop', { base: '.' })
.pipe(rename('BUILD/usr/share/applications/' + product.applicationName + '-url-handler.desktop'));
- const desktops = es.merge(desktop, desktopUrlHandler)
- .pipe(replace('@@NAME_LONG@@', product.nameLong))
- .pipe(replace('@@NAME_SHORT@@', product.nameShort))
- .pipe(replace('@@NAME@@', product.applicationName))
- .pipe(replace('@@ICON@@', product.applicationName))
- .pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));
+ const desktops = es.merge(desktop, desktopUrlHandler)
+ .pipe(replace('@@NAME_LONG@@', product.nameLong))
+ .pipe(replace('@@NAME_SHORT@@', product.nameShort))
+ .pipe(replace('@@NAME@@', product.applicationName))
+ .pipe(replace('@@ICON@@', product.applicationName))
+ .pipe(replace('@@URLPROTOCOL@@', product.urlProtocol));
const appdata = gulp.src('resources/linux/code.appdata.xml', { base: '.' })
.pipe(replace('@@NAME_LONG@@', product.nameLong))
@@ -172,6 +172,7 @@ function buildRpmPackage(arch) {
'cp "' + rpmOut + '/$(ls ' + rpmOut + ')" ' + destination + '/'
]);
}
+
function getSnapBuildPath(arch) {
return `.build/linux/snap/${arch}/${product.applicationName}-${arch}`;
}
@@ -192,17 +193,21 @@ function prepareSnapPackage(arch) {
.pipe(rename(`usr/share/pixmaps/${product.applicationName}.png`));
const code = gulp.src(binaryDir + '/**/*', { base: binaryDir })
- .pipe(rename(function (p) { p.dirname = 'usr/share/' + product.applicationName + '/' + p.dirname; }));
+ .pipe(rename(function (p) { p.dirname = `usr/share/${product.applicationName}/${p.dirname}`; }));
const snapcraft = gulp.src('resources/linux/snap/snapcraft.yaml', { base: '.' })
.pipe(replace('@@NAME@@', product.applicationName))
- .pipe(replace('@@VERSION@@', packageJson.version))
+ .pipe(replace('@@VERSION@@', `${packageJson.version}-${linuxPackageRevision}`))
.pipe(rename('snap/snapcraft.yaml'));
+ const snapUpdate = gulp.src('resources/linux/snap/snapUpdate.sh', { base: '.' })
+ .pipe(replace('@@NAME@@', product.applicationName))
+ .pipe(rename(`usr/share/${product.applicationName}/snapUpdate.sh`));
+
const electronLaunch = gulp.src('resources/linux/snap/electron-launch', { base: '.' })
.pipe(rename('electron-launch'));
- const all = es.merge(desktop, icon, code, snapcraft, electronLaunch);
+ const all = es.merge(desktop, icon, code, snapcraft, electronLaunch, snapUpdate);
return all.pipe(vfs.dest(destination));
};
@@ -210,11 +215,7 @@ function prepareSnapPackage(arch) {
function buildSnapPackage(arch) {
const snapBuildPath = getSnapBuildPath(arch);
- const snapFilename = `${product.applicationName}-${packageJson.version}-${linuxPackageRevision}-${arch}.snap`;
- return shell.task([
- `chmod +x ${snapBuildPath}/electron-launch`,
- `cd ${snapBuildPath} && snapcraft snap --output ../${snapFilename}`
- ]);
+ return shell.task(`cd ${snapBuildPath} && snapcraft build`);
}
gulp.task('clean-vscode-linux-ia32-deb', util.rimraf('.build/linux/deb/i386'));
diff --git a/build/gulpfile.vscode.win32.js b/build/gulpfile.vscode.win32.js
index b73b4f3d3..1cfc5b4c4 100644
--- a/build/gulpfile.vscode.win32.js
+++ b/build/gulpfile.vscode.win32.js
@@ -25,7 +25,7 @@ const zipPath = arch => path.join(zipDir(arch), `VSCode-win32-${arch}.zip`);
const setupDir = (arch, target) => path.join(repoPath, '.build', `win32-${arch}`, `${target}-setup`);
const issPath = path.join(__dirname, 'win32', 'code.iss');
const innoSetupPath = path.join(path.dirname(path.dirname(require.resolve('innosetup-compiler'))), 'bin', 'ISCC.exe');
-const signPS1 = path.join(repoPath, 'build', 'tfs', 'win32', 'sign.ps1');
+const signPS1 = path.join(repoPath, 'build', 'azure-pipelines', 'win32', 'sign.ps1');
function packageInnoSetup(iss, options, cb) {
options = options || {};
diff --git a/build/lib/compilation.js b/build/lib/compilation.js
index 5e5cadf48..9cc984633 100644
--- a/build/lib/compilation.js
+++ b/build/lib/compilation.js
@@ -11,7 +11,6 @@ const bom = require("gulp-bom");
const sourcemaps = require("gulp-sourcemaps");
const tsb = require("gulp-tsb");
const path = require("path");
-const ts = require("typescript");
const _ = require("underscore");
const monacodts = require("../monaco/api");
const nls = require("./nls");
@@ -109,87 +108,61 @@ exports.watchTask = watchTask;
const REPO_SRC_FOLDER = path.join(__dirname, '../../src');
class MonacoGenerator {
constructor(isWatch) {
+ this._executeSoonTimer = null;
this._isWatch = isWatch;
this.stream = es.through();
- this._inputFiles = monacodts.getIncludesInRecipe().map((moduleId) => {
- if (/\.d\.ts$/.test(moduleId)) {
- // This source file is already in .d.ts form
- return path.join(REPO_SRC_FOLDER, moduleId);
+ this._watchers = [];
+ this._watchedFiles = {};
+ let onWillReadFile = (moduleId, filePath) => {
+ if (!this._isWatch) {
+ return;
}
- else {
- return path.join(REPO_SRC_FOLDER, `${moduleId}.ts`);
+ if (this._watchedFiles[filePath]) {
+ return;
}
- });
- // Install watchers
- this._watchers = [];
- if (this._isWatch) {
- this._inputFiles.forEach((filePath) => {
- const watcher = fs.watch(filePath);
- watcher.addListener('change', () => {
- this._inputFileChanged[filePath] = true;
- // Avoid hitting empty files... :/
- setTimeout(() => this.execute(), 10);
- });
- this._watchers.push(watcher);
+ this._watchedFiles[filePath] = true;
+ const watcher = fs.watch(filePath);
+ watcher.addListener('change', () => {
+ this._declarationResolver.invalidateCache(moduleId);
+ this._executeSoon();
});
+ this._watchers.push(watcher);
+ };
+ this._fsProvider = new class extends monacodts.FSProvider {
+ readFileSync(moduleId, filePath) {
+ onWillReadFile(moduleId, filePath);
+ return super.readFileSync(moduleId, filePath);
+ }
+ };
+ this._declarationResolver = new monacodts.DeclarationResolver(this._fsProvider);
+ if (this._isWatch) {
const recipeWatcher = fs.watch(monacodts.RECIPE_PATH);
recipeWatcher.addListener('change', () => {
- this._recipeFileChanged = true;
- // Avoid hitting empty files... :/
- setTimeout(() => this.execute(), 10);
+ this._executeSoon();
});
this._watchers.push(recipeWatcher);
}
- this._inputFileChanged = {};
- this._inputFiles.forEach(file => this._inputFileChanged[file] = true);
- this._recipeFileChanged = true;
- this._dtsFilesContents = {};
- this._dtsFilesContents2 = {};
+ }
+ _executeSoon() {
+ if (this._executeSoonTimer !== null) {
+ clearTimeout(this._executeSoonTimer);
+ this._executeSoonTimer = null;
+ }
+ this._executeSoonTimer = setTimeout(() => {
+ this._executeSoonTimer = null;
+ this.execute();
+ }, 20);
}
dispose() {
this._watchers.forEach(watcher => watcher.close());
}
_run() {
- let somethingChanged = false;
- const setDTSFileContent = (file, contents) => {
- if (this._dtsFilesContents[file] === contents) {
- return;
- }
- this._dtsFilesContents[file] = contents;
- this._dtsFilesContents2[file] = ts.createSourceFile(file, contents, ts.ScriptTarget.ES5);
- somethingChanged = true;
- };
- const fileMap = {};
- this._inputFiles.forEach((inputFile) => {
- if (!this._inputFileChanged[inputFile]) {
- return;
- }
- this._inputFileChanged[inputFile] = false;
- const inputFileContents = fs.readFileSync(inputFile).toString();
- if (/\.d\.ts$/.test(inputFile)) {
- // This is a .d.ts file
- setDTSFileContent(inputFile, inputFileContents);
- return;
- }
- fileMap[inputFile] = inputFileContents;
- });
- if (Object.keys(fileMap).length > 0) {
- const service = ts.createLanguageService(new monacodts.TypeScriptLanguageServiceHost({}, fileMap, {}));
- Object.keys(fileMap).forEach((fileName) => {
- const output = service.getEmitOutput(fileName, true).outputFiles[0].text;
- const destFileName = fileName.replace(/\.ts$/, '.d.ts');
- setDTSFileContent(destFileName, output);
- });
- }
- if (this._recipeFileChanged) {
- this._recipeFileChanged = false;
- somethingChanged = true;
- }
- if (!somethingChanged) {
- // Nothing changed
- return null;
+ let r = monacodts.run3(this._declarationResolver);
+ if (!r && !this._isWatch) {
+ // The build must always be able to generate the monaco.d.ts
+ throw new Error(`monaco.d.ts generation error - Cannot continue`);
}
- return monacodts.run2('src', this._dtsFilesContents2);
+ return r;
}
_log(message, ...rest) {
util2.log(util2.colors.cyan('[monaco.d.ts]'), message, ...rest);
@@ -199,11 +172,9 @@ class MonacoGenerator {
const result = this._run();
if (!result) {
// nothing really changed
- this._log(`monaco.d.ts is unchanged - total time took ${Date.now() - startTime} ms`);
return;
}
if (result.isTheSame) {
- this._log(`monaco.d.ts is unchanged - total time took ${Date.now() - startTime} ms`);
return;
}
fs.writeFileSync(result.filePath, result.content);
diff --git a/build/lib/compilation.ts b/build/lib/compilation.ts
index 991e24bf7..393bc56bd 100644
--- a/build/lib/compilation.ts
+++ b/build/lib/compilation.ts
@@ -12,7 +12,6 @@ import * as bom from 'gulp-bom';
import * as sourcemaps from 'gulp-sourcemaps';
import * as tsb from 'gulp-tsb';
import * as path from 'path';
-import * as ts from 'typescript';
import * as _ from 'underscore';
import * as monacodts from '../monaco/api';
import * as nls from './nls';
@@ -135,57 +134,60 @@ const REPO_SRC_FOLDER = path.join(__dirname, '../../src');
class MonacoGenerator {
private readonly _isWatch: boolean;
public readonly stream: NodeJS.ReadWriteStream;
- /**
- * This list is never changed for the lifetime of this object.
- */
- private readonly _inputFiles: string[];
- private readonly _watchers: fs.FSWatcher[];
-
- private _inputFileChanged: { [filePath: string]: boolean; };
- private _recipeFileChanged: boolean;
- private _dtsFilesContents: { [filePath: string]: string; };
- private _dtsFilesContents2: { [filePath: string]: ts.SourceFile; };
+ private readonly _watchers: fs.FSWatcher[];
+ private readonly _watchedFiles: { [filePath: string]: boolean; };
+ private readonly _fsProvider: monacodts.FSProvider;
+ private readonly _declarationResolver: monacodts.DeclarationResolver;
constructor(isWatch: boolean) {
this._isWatch = isWatch;
this.stream = es.through();
- this._inputFiles = monacodts.getIncludesInRecipe().map((moduleId) => {
- if (/\.d\.ts$/.test(moduleId)) {
- // This source file is already in .d.ts form
- return path.join(REPO_SRC_FOLDER, moduleId);
- } else {
- return path.join(REPO_SRC_FOLDER, `${moduleId}.ts`);
+ this._watchers = [];
+ this._watchedFiles = {};
+ let onWillReadFile = (moduleId: string, filePath: string) => {
+ if (!this._isWatch) {
+ return;
}
- });
+ if (this._watchedFiles[filePath]) {
+ return;
+ }
+ this._watchedFiles[filePath] = true;
- // Install watchers
- this._watchers = [];
- if (this._isWatch) {
- this._inputFiles.forEach((filePath) => {
- const watcher = fs.watch(filePath);
- watcher.addListener('change', () => {
- this._inputFileChanged[filePath] = true;
- // Avoid hitting empty files... :/
- setTimeout(() => this.execute(), 10);
- });
- this._watchers.push(watcher);
+ const watcher = fs.watch(filePath);
+ watcher.addListener('change', () => {
+ this._declarationResolver.invalidateCache(moduleId);
+ this._executeSoon();
});
+ this._watchers.push(watcher);
+ };
+ this._fsProvider = new class extends monacodts.FSProvider {
+ public readFileSync(moduleId: string, filePath: string): Buffer {
+ onWillReadFile(moduleId, filePath);
+ return super.readFileSync(moduleId, filePath);
+ }
+ };
+ this._declarationResolver = new monacodts.DeclarationResolver(this._fsProvider);
+ if (this._isWatch) {
const recipeWatcher = fs.watch(monacodts.RECIPE_PATH);
recipeWatcher.addListener('change', () => {
- this._recipeFileChanged = true;
- // Avoid hitting empty files... :/
- setTimeout(() => this.execute(), 10);
+ this._executeSoon();
});
this._watchers.push(recipeWatcher);
}
+ }
- this._inputFileChanged = {};
- this._inputFiles.forEach(file => this._inputFileChanged[file] = true);
- this._recipeFileChanged = true;
- this._dtsFilesContents = {};
- this._dtsFilesContents2 = {};
+ private _executeSoonTimer: NodeJS.Timer | null = null;
+ private _executeSoon(): void {
+ if (this._executeSoonTimer !== null) {
+ clearTimeout(this._executeSoonTimer);
+ this._executeSoonTimer = null;
+ }
+ this._executeSoonTimer = setTimeout(() => {
+ this._executeSoonTimer = null;
+ this.execute();
+ }, 20);
}
public dispose(): void {
@@ -193,56 +195,12 @@ class MonacoGenerator {
}
private _run(): monacodts.IMonacoDeclarationResult | null {
- let somethingChanged = false;
-
- const setDTSFileContent = (file: string, contents: string): void => {
- if (this._dtsFilesContents[file] === contents) {
- return;
- }
- this._dtsFilesContents[file] = contents;
- this._dtsFilesContents2[file] = ts.createSourceFile(file, contents, ts.ScriptTarget.ES5);
- somethingChanged = true;
- };
-
- const fileMap: { [fileName: string]: string; } = {};
-
- this._inputFiles.forEach((inputFile) => {
- if (!this._inputFileChanged[inputFile]) {
- return;
- }
- this._inputFileChanged[inputFile] = false;
-
- const inputFileContents = fs.readFileSync(inputFile).toString();
- if (/\.d\.ts$/.test(inputFile)) {
- // This is a .d.ts file
- setDTSFileContent(inputFile, inputFileContents);
- return;
- }
-
- fileMap[inputFile] = inputFileContents;
- });
-
- if (Object.keys(fileMap).length > 0) {
- const service = ts.createLanguageService(new monacodts.TypeScriptLanguageServiceHost({}, fileMap, {}));
-
- Object.keys(fileMap).forEach((fileName) => {
- const output = service.getEmitOutput(fileName, true).outputFiles[0].text;
- const destFileName = fileName.replace(/\.ts$/, '.d.ts');
- setDTSFileContent(destFileName, output);
- });
- }
-
- if (this._recipeFileChanged) {
- this._recipeFileChanged = false;
- somethingChanged = true;
- }
-
- if (!somethingChanged) {
- // Nothing changed
- return null;
+ let r = monacodts.run3(this._declarationResolver);
+ if (!r && !this._isWatch) {
+ // The build must always be able to generate the monaco.d.ts
+ throw new Error(`monaco.d.ts generation error - Cannot continue`);
}
-
- return monacodts.run2('src', this._dtsFilesContents2);
+ return r;
}
private _log(message: any, ...rest: any[]): void {
@@ -254,11 +212,9 @@ class MonacoGenerator {
const result = this._run();
if (!result) {
// nothing really changed
- this._log(`monaco.d.ts is unchanged - total time took ${Date.now() - startTime} ms`);
return;
}
if (result.isTheSame) {
- this._log(`monaco.d.ts is unchanged - total time took ${Date.now() - startTime} ms`);
return;
}
diff --git a/build/lib/extensions.js b/build/lib/extensions.js
index 293c1f0c2..994d1336e 100644
--- a/build/lib/extensions.js
+++ b/build/lib/extensions.js
@@ -36,10 +36,12 @@ function fromLocalWebpack(extensionPath, sourceMappingURLBase) {
const result = es.through();
const packagedDependencies = [];
const packageJsonConfig = require(path.join(extensionPath, 'package.json'));
- const webpackRootConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
- for (const key in webpackRootConfig.externals) {
- if (key in packageJsonConfig.dependencies) {
- packagedDependencies.push(key);
+ if (packageJsonConfig.dependencies) {
+ const webpackRootConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
+ for (const key in webpackRootConfig.externals) {
+ if (key in packageJsonConfig.dependencies) {
+ packagedDependencies.push(key);
+ }
}
}
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn, packagedDependencies }).then(fileNames => {
@@ -68,12 +70,14 @@ function fromLocalWebpack(extensionPath, sourceMappingURLBase) {
.pipe(packageJsonFilter)
.pipe(buffer())
.pipe(json((data) => {
- // hardcoded entry point directory!
- data.main = data.main.replace('/out/', /dist/);
+ if (data.main) {
+ // hardcoded entry point directory!
+ data.main = data.main.replace('/out/', /dist/);
+ }
return data;
}))
.pipe(packageJsonFilter.restore);
- const webpackStreams = webpackConfigLocations.map(webpackConfigPath => {
+ const webpackStreams = webpackConfigLocations.map(webpackConfigPath => () => {
const webpackDone = (err, stats) => {
util.log(`Bundled extension: ${util.colors.yellow(path.join(path.basename(extensionPath), path.relative(extensionPath, webpackConfigPath)))}...`);
if (err) {
@@ -114,7 +118,7 @@ function fromLocalWebpack(extensionPath, sourceMappingURLBase) {
this.emit('data', data);
}));
});
- es.merge(...webpackStreams, patchFilesStream)
+ es.merge(sequence(webpackStreams), patchFilesStream)
// .pipe(es.through(function (data) {
// // debug
// console.log('out', data.path, data.contents.length);
@@ -212,10 +216,10 @@ function packageExtensionsStream(optsIn) {
.filter(({ name }) => excludedExtensions.indexOf(name) === -1)
.filter(({ name }) => opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true)
.filter(({ name }) => builtInExtensions.every(b => b.name !== name));
- const localExtensions = () => es.merge(...localExtensionDescriptions.map(extension => {
- return fromLocal(extension.path, opts.sourceMappingURLBase)
- .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
- }));
+ const localExtensions = () => sequence([...localExtensionDescriptions.map(extension => () => {
+ return fromLocal(extension.path, opts.sourceMappingURLBase)
+ .pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
+ })]);
const localExtensionDependencies = () => gulp.src('extensions/node_modules/**', { base: '.' });
const marketplaceExtensions = () => es.merge(...builtInExtensions
.filter(({ name }) => opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true)
diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts
index 7d3bc6630..844b711a8 100644
--- a/build/lib/extensions.ts
+++ b/build/lib/extensions.ts
@@ -39,14 +39,15 @@ function fromLocalWebpack(extensionPath: string, sourceMappingURLBase: string |
const packagedDependencies: string[] = [];
const packageJsonConfig = require(path.join(extensionPath, 'package.json'));
- const webpackRootConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
- for (const key in webpackRootConfig.externals) {
- if (key in packageJsonConfig.dependencies) {
- packagedDependencies.push(key);
+ if (packageJsonConfig.dependencies) {
+ const webpackRootConfig = require(path.join(extensionPath, 'extension.webpack.config.js'));
+ for (const key in webpackRootConfig.externals) {
+ if (key in packageJsonConfig.dependencies) {
+ packagedDependencies.push(key);
+ }
}
}
-
vsce.listFiles({ cwd: extensionPath, packageManager: vsce.PackageManager.Yarn, packagedDependencies }).then(fileNames => {
const files = fileNames
.map(fileName => path.join(extensionPath, fileName))
@@ -80,14 +81,16 @@ function fromLocalWebpack(extensionPath: string, sourceMappingURLBase: string |
.pipe(packageJsonFilter)
.pipe(buffer())
.pipe(json((data: any) => {
- // hardcoded entry point directory!
- data.main = data.main.replace('/out/', /dist/);
+ if (data.main) {
+ // hardcoded entry point directory!
+ data.main = data.main.replace('/out/', /dist/);
+ }
return data;
}))
.pipe(packageJsonFilter.restore);
- const webpackStreams = webpackConfigLocations.map(webpackConfigPath => {
+ const webpackStreams = webpackConfigLocations.map(webpackConfigPath => () => {
const webpackDone = (err: any, stats: any) => {
util.log(`Bundled extension: ${util.colors.yellow(path.join(path.basename(extensionPath), path.relative(extensionPath, webpackConfigPath)))}...`);
@@ -136,7 +139,7 @@ function fromLocalWebpack(extensionPath: string, sourceMappingURLBase: string |
}));
});
- es.merge(...webpackStreams, patchFilesStream)
+ es.merge(sequence(webpackStreams), patchFilesStream)
// .pipe(es.through(function (data) {
// // debug
// console.log('out', data.path, data.contents.length);
@@ -267,10 +270,10 @@ export function packageExtensionsStream(optsIn?: IPackageExtensionsOptions): Nod
.filter(({ name }) => opts.desiredExtensions ? opts.desiredExtensions.indexOf(name) >= 0 : true)
.filter(({ name }) => builtInExtensions.every(b => b.name !== name));
- const localExtensions = () => es.merge(...localExtensionDescriptions.map(extension => {
+ const localExtensions = () => sequence([...localExtensionDescriptions.map(extension => () => {
return fromLocal(extension.path, opts.sourceMappingURLBase)
.pipe(rename(p => p.dirname = `extensions/${extension.name}/${p.dirname}`));
- }));
+ })]);
const localExtensionDependencies = () => gulp.src('extensions/node_modules/**', { base: '.' });
diff --git a/build/lib/i18n.resources.json b/build/lib/i18n.resources.json
index 40d686c08..296d1286f 100644
--- a/build/lib/i18n.resources.json
+++ b/build/lib/i18n.resources.json
@@ -214,6 +214,10 @@
"name": "vs/workbench/services/progress",
"project": "vscode-workbench"
},
+ {
+ "name": "vs/workbench/services/remote",
+ "project": "vscode-workbench"
+ },
{
"name": "vs/workbench/services/textfile",
"project": "vscode-workbench"
diff --git a/build/lib/snapshotLoader.js b/build/lib/snapshotLoader.js
index 9a047e0f6..ee626a0f7 100644
--- a/build/lib/snapshotLoader.js
+++ b/build/lib/snapshotLoader.js
@@ -24,6 +24,7 @@ var snaps;
case 'linux':
loaderFilepath = `VSCode-${process.platform}-${arch}/resources/app/out/vs/loader.js`;
startupBlobFilepath = `VSCode-${process.platform}-${arch}/snapshot_blob.bin`;
+ break;
default:
throw new Error('Unknown platform');
}
diff --git a/build/lib/snapshotLoader.ts b/build/lib/snapshotLoader.ts
index 3bc379697..40b06d67d 100644
--- a/build/lib/snapshotLoader.ts
+++ b/build/lib/snapshotLoader.ts
@@ -30,6 +30,7 @@ namespace snaps {
case 'linux':
loaderFilepath = `VSCode-${process.platform}-${arch}/resources/app/out/vs/loader.js`;
startupBlobFilepath = `VSCode-${process.platform}-${arch}/snapshot_blob.bin`;
+ break;
default:
throw new Error('Unknown platform');
diff --git a/build/lib/standalone.js b/build/lib/standalone.js
index c01e0f461..121a5e192 100644
--- a/build/lib/standalone.js
+++ b/build/lib/standalone.js
@@ -28,12 +28,22 @@ function writeFile(filePath, contents) {
}
function extractEditor(options) {
const tsConfig = JSON.parse(fs.readFileSync(path.join(options.sourcesRoot, 'tsconfig.json')).toString());
- tsConfig.compilerOptions.noUnusedLocals = false;
- tsConfig.compilerOptions.preserveConstEnums = false;
- tsConfig.compilerOptions.declaration = false;
- delete tsConfig.compilerOptions.types;
+ let compilerOptions;
+ if (tsConfig.extends) {
+ compilerOptions = Object.assign({}, require(path.join(options.sourcesRoot, tsConfig.extends)).compilerOptions, tsConfig.compilerOptions);
+ }
+ else {
+ compilerOptions = tsConfig.compilerOptions;
+ }
+ tsConfig.compilerOptions = compilerOptions;
+ compilerOptions.noUnusedLocals = false;
+ compilerOptions.preserveConstEnums = false;
+ compilerOptions.declaration = false;
+ compilerOptions.moduleResolution = ts.ModuleResolutionKind.Classic;
+ delete compilerOptions.types;
+ delete tsConfig.extends;
tsConfig.exclude = [];
- options.compilerOptions = tsConfig.compilerOptions;
+ options.compilerOptions = compilerOptions;
let result = tss.shake(options);
for (let fileName in result) {
if (result.hasOwnProperty(fileName)) {
@@ -80,6 +90,7 @@ function extractEditor(options) {
}
}
}
+ delete tsConfig.compilerOptions.moduleResolution;
writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
[
'vs/css.build.js',
@@ -116,7 +127,7 @@ function createESMSourcesAndResources2(options) {
if (file === 'tsconfig.json') {
const tsConfig = JSON.parse(fs.readFileSync(path.join(SRC_FOLDER, file)).toString());
tsConfig.compilerOptions.module = 'es6';
- tsConfig.compilerOptions.outDir = path.join(path.relative(OUT_FOLDER, OUT_RESOURCES_FOLDER), 'vs');
+ tsConfig.compilerOptions.outDir = path.join(path.relative(OUT_FOLDER, OUT_RESOURCES_FOLDER), 'vs').replace(/\\/g, '/');
write(getDestAbsoluteFilePath(file), JSON.stringify(tsConfig, null, '\t'));
continue;
}
@@ -144,15 +155,16 @@ function createESMSourcesAndResources2(options) {
importedFilepath = path.join(path.dirname(file), importedFilepath);
}
let relativePath;
- if (importedFilepath === path.dirname(file)) {
+ if (importedFilepath === path.dirname(file).replace(/\\/g, '/')) {
relativePath = '../' + path.basename(path.dirname(file));
}
- else if (importedFilepath === path.dirname(path.dirname(file))) {
+ else if (importedFilepath === path.dirname(path.dirname(file)).replace(/\\/g, '/')) {
relativePath = '../../' + path.basename(path.dirname(path.dirname(file)));
}
else {
relativePath = path.relative(path.dirname(file), importedFilepath);
}
+ relativePath = relativePath.replace(/\\/g, '/');
if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
relativePath = './' + relativePath;
}
diff --git a/build/lib/standalone.ts b/build/lib/standalone.ts
index aba118ab5..6ec0aa1c9 100644
--- a/build/lib/standalone.ts
+++ b/build/lib/standalone.ts
@@ -32,13 +32,24 @@ function writeFile(filePath: string, contents: Buffer | string): void {
export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: string }): void {
const tsConfig = JSON.parse(fs.readFileSync(path.join(options.sourcesRoot, 'tsconfig.json')).toString());
- tsConfig.compilerOptions.noUnusedLocals = false;
- tsConfig.compilerOptions.preserveConstEnums = false;
- tsConfig.compilerOptions.declaration = false;
- delete tsConfig.compilerOptions.types;
+ let compilerOptions: { [key: string]: any };
+ if (tsConfig.extends) {
+ compilerOptions = Object.assign({}, require(path.join(options.sourcesRoot, tsConfig.extends)).compilerOptions, tsConfig.compilerOptions);
+ } else {
+ compilerOptions = tsConfig.compilerOptions;
+ }
+ tsConfig.compilerOptions = compilerOptions;
+
+ compilerOptions.noUnusedLocals = false;
+ compilerOptions.preserveConstEnums = false;
+ compilerOptions.declaration = false;
+ compilerOptions.moduleResolution = ts.ModuleResolutionKind.Classic;
+
+ delete compilerOptions.types;
+ delete tsConfig.extends;
tsConfig.exclude = [];
- options.compilerOptions = tsConfig.compilerOptions;
+ options.compilerOptions = compilerOptions;
let result = tss.shake(options);
for (let fileName in result) {
@@ -88,6 +99,7 @@ export function extractEditor(options: tss.ITreeShakingOptions & { destRoot: str
}
}
+ delete tsConfig.compilerOptions.moduleResolution;
writeOutputFile('tsconfig.json', JSON.stringify(tsConfig, null, '\t'));
[
@@ -137,7 +149,7 @@ export function createESMSourcesAndResources2(options: IOptions2): void {
if (file === 'tsconfig.json') {
const tsConfig = JSON.parse(fs.readFileSync(path.join(SRC_FOLDER, file)).toString());
tsConfig.compilerOptions.module = 'es6';
- tsConfig.compilerOptions.outDir = path.join(path.relative(OUT_FOLDER, OUT_RESOURCES_FOLDER), 'vs');
+ tsConfig.compilerOptions.outDir = path.join(path.relative(OUT_FOLDER, OUT_RESOURCES_FOLDER), 'vs').replace(/\\/g, '/');
write(getDestAbsoluteFilePath(file), JSON.stringify(tsConfig, null, '\t'));
continue;
}
@@ -170,13 +182,14 @@ export function createESMSourcesAndResources2(options: IOptions2): void {
}
let relativePath: string;
- if (importedFilepath === path.dirname(file)) {
+ if (importedFilepath === path.dirname(file).replace(/\\/g, '/')) {
relativePath = '../' + path.basename(path.dirname(file));
- } else if (importedFilepath === path.dirname(path.dirname(file))) {
+ } else if (importedFilepath === path.dirname(path.dirname(file)).replace(/\\/g, '/')) {
relativePath = '../../' + path.basename(path.dirname(path.dirname(file)));
} else {
relativePath = path.relative(path.dirname(file), importedFilepath);
}
+ relativePath = relativePath.replace(/\\/g, '/');
if (!/(^\.\/)|(^\.\.\/)/.test(relativePath)) {
relativePath = './' + relativePath;
}
diff --git a/build/lib/treeshaking.js b/build/lib/treeshaking.js
index b80454156..884d28279 100644
--- a/build/lib/treeshaking.js
+++ b/build/lib/treeshaking.js
@@ -57,7 +57,7 @@ function createTypeScriptLanguageService(options) {
const FILES = discoverAndReadFiles(options);
// Add fake usage files
options.inlineEntryPoints.forEach((inlineEntryPoint, index) => {
- FILES[`inlineEntryPoint:${index}.ts`] = inlineEntryPoint;
+ FILES[`inlineEntryPoint.${index}.ts`] = inlineEntryPoint;
});
// Add additional typings
options.typings.forEach((typing) => {
@@ -70,7 +70,8 @@ function createTypeScriptLanguageService(options) {
const filepath = path.join(TYPESCRIPT_LIB_FOLDER, filename);
RESOLVED_LIBS[`defaultLib:${filename}`] = fs.readFileSync(filepath).toString();
});
- const host = new TypeScriptLanguageServiceHost(RESOLVED_LIBS, FILES, ts.convertCompilerOptionsFromJson(options.compilerOptions, ``).options);
+ const compilerOptions = ts.convertCompilerOptionsFromJson(options.compilerOptions, options.sourcesRoot).options;
+ const host = new TypeScriptLanguageServiceHost(RESOLVED_LIBS, FILES, compilerOptions);
return ts.createLanguageService(host);
}
/**
@@ -335,7 +336,7 @@ function markNodes(languageService, options) {
}
options.entryPoints.forEach(moduleId => enqueueFile(moduleId + '.ts'));
// Add fake usage files
- options.inlineEntryPoints.forEach((_, index) => enqueueFile(`inlineEntryPoint:${index}.ts`));
+ options.inlineEntryPoints.forEach((_, index) => enqueueFile(`inlineEntryPoint.${index}.ts`));
let step = 0;
const checker = program.getTypeChecker();
while (black_queue.length > 0 || gray_queue.length > 0) {
diff --git a/build/lib/treeshaking.ts b/build/lib/treeshaking.ts
index 3439b1437..9c142793a 100644
--- a/build/lib/treeshaking.ts
+++ b/build/lib/treeshaking.ts
@@ -110,7 +110,7 @@ function createTypeScriptLanguageService(options: ITreeShakingOptions): ts.Langu
// Add fake usage files
options.inlineEntryPoints.forEach((inlineEntryPoint, index) => {
- FILES[`inlineEntryPoint:${index}.ts`] = inlineEntryPoint;
+ FILES[`inlineEntryPoint.${index}.ts`] = inlineEntryPoint;
});
// Add additional typings
@@ -126,7 +126,9 @@ function createTypeScriptLanguageService(options: ITreeShakingOptions): ts.Langu
RESOLVED_LIBS[`defaultLib:${filename}`] = fs.readFileSync(filepath).toString();
});
- const host = new TypeScriptLanguageServiceHost(RESOLVED_LIBS, FILES, ts.convertCompilerOptionsFromJson(options.compilerOptions, ``).options);
+ const compilerOptions = ts.convertCompilerOptionsFromJson(options.compilerOptions, options.sourcesRoot).options;
+
+ const host = new TypeScriptLanguageServiceHost(RESOLVED_LIBS, FILES, compilerOptions);
return ts.createLanguageService(host);
}
@@ -443,7 +445,7 @@ function markNodes(languageService: ts.LanguageService, options: ITreeShakingOpt
options.entryPoints.forEach(moduleId => enqueueFile(moduleId + '.ts'));
// Add fake usage files
- options.inlineEntryPoints.forEach((_, index) => enqueueFile(`inlineEntryPoint:${index}.ts`));
+ options.inlineEntryPoints.forEach((_, index) => enqueueFile(`inlineEntryPoint.${index}.ts`));
let step = 0;
diff --git a/build/lib/tslint/noNewBufferRule.js b/build/lib/tslint/noNewBufferRule.js
new file mode 100644
index 000000000..ae9b02d45
--- /dev/null
+++ b/build/lib/tslint/noNewBufferRule.js
@@ -0,0 +1,22 @@
+"use strict";
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+Object.defineProperty(exports, "__esModule", { value: true });
+const ts = require("typescript");
+const Lint = require("tslint");
+class Rule extends Lint.Rules.AbstractRule {
+ apply(sourceFile) {
+ return this.applyWithWalker(new NewBufferRuleWalker(sourceFile, this.getOptions()));
+ }
+}
+exports.Rule = Rule;
+class NewBufferRuleWalker extends Lint.RuleWalker {
+ visitNewExpression(node) {
+ if (node.expression.kind === ts.SyntaxKind.Identifier && node.expression && node.expression.text === 'Buffer') {
+ this.addFailureAtNode(node, '`new Buffer` is deprecated. Consider Buffer.From or Buffer.alloc instead.');
+ }
+ super.visitNewExpression(node);
+ }
+}
diff --git a/build/lib/tslint/noNewBufferRule.ts b/build/lib/tslint/noNewBufferRule.ts
new file mode 100644
index 000000000..7b0dd43e5
--- /dev/null
+++ b/build/lib/tslint/noNewBufferRule.ts
@@ -0,0 +1,23 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as ts from 'typescript';
+import * as Lint from 'tslint';
+
+export class Rule extends Lint.Rules.AbstractRule {
+ apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] {
+ return this.applyWithWalker(new NewBufferRuleWalker(sourceFile, this.getOptions()));
+ }
+}
+
+class NewBufferRuleWalker extends Lint.RuleWalker {
+ visitNewExpression(node: ts.NewExpression) {
+ if (node.expression.kind === ts.SyntaxKind.Identifier && node.expression && (node.expression as ts.Identifier).text === 'Buffer') {
+ this.addFailureAtNode(node, '`new Buffer` is deprecated. Consider Buffer.From or Buffer.alloc instead.');
+ }
+
+ super.visitNewExpression(node);
+ }
+}
\ No newline at end of file
diff --git a/build/lib/typings/OSSREADME.json b/build/lib/typings/OSSREADME.json
deleted file mode 100644
index cdb8c7f51..000000000
--- a/build/lib/typings/OSSREADME.json
+++ /dev/null
@@ -1,10 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-// All OSS in this folder is development time only
-[{
- "name": "definitelytyped",
- "repositoryURL": "https://github.com/DefinitelyTyped/DefinitelyTyped",
- "license": "MIT",
- "isDev": true
-}
-]
\ No newline at end of file
diff --git a/build/lib/typings/cgmanifest.json b/build/lib/typings/cgmanifest.json
new file mode 100644
index 000000000..6e529a79f
--- /dev/null
+++ b/build/lib/typings/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "definitelytyped",
+ "repositoryUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped",
+ "commitHash": "69e3ac6bec3008271f76bbfa7cf69aa9198c4ff0"
+ }
+ },
+ "license": "MIT"
+ }
+ ],
+ "version": 1
+}
diff --git a/build/lib/util.ts b/build/lib/util.ts
index f5dc8cd84..4617cc83f 100644
--- a/build/lib/util.ts
+++ b/build/lib/util.ts
@@ -91,7 +91,7 @@ export function fixWin32DirectoryPermissions(): NodeJS.ReadWriteStream {
});
}
-export function setExecutableBit(pattern: string | string[]): NodeJS.ReadWriteStream {
+export function setExecutableBit(pattern?: string | string[]): NodeJS.ReadWriteStream {
const setBit = es.mapSync(f => {
f.stat.mode = /* 100755 */ 33261;
return f;
diff --git a/build/monaco/api.js b/build/monaco/api.js
index cc9fc40e9..716d1f566 100644
--- a/build/monaco/api.js
+++ b/build/monaco/api.js
@@ -8,24 +8,13 @@ const fs = require("fs");
const ts = require("typescript");
const path = require("path");
const util = require("gulp-util");
+const dtsv = '2';
const tsfmt = require('../../tsfmt.json');
-function log(message, ...rest) {
- util.log(util.colors.cyan('[monaco.d.ts]'), message, ...rest);
-}
const SRC = path.join(__dirname, '../../src');
-const OUT_ROOT = path.join(__dirname, '../../');
exports.RECIPE_PATH = path.join(__dirname, './monaco.d.ts.recipe');
const DECLARATION_PATH = path.join(__dirname, '../../src/vs/monaco.d.ts');
-var CURRENT_PROCESSING_RULE = '';
function logErr(message, ...rest) {
- util.log(util.colors.red('[monaco.d.ts]'), 'WHILE HANDLING RULE: ', CURRENT_PROCESSING_RULE);
- util.log(util.colors.red('[monaco.d.ts]'), message, ...rest);
-}
-function moduleIdToPath(out, moduleId) {
- if (/\.d\.ts/.test(moduleId)) {
- return path.join(SRC, moduleId);
- }
- return path.join(OUT_ROOT, out, moduleId) + '.d.ts';
+ util.log(util.colors.yellow(`[monaco.d.ts]`), message, ...rest);
}
function isDeclaration(a) {
return (a.kind === ts.SyntaxKind.InterfaceDeclaration
@@ -315,6 +304,7 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
let usageCounter = 0;
let usageImports = [];
let usage = [];
+ let failed = false;
usage.push(`var a;`);
usage.push(`var b;`);
const generateUsageImport = (moduleId) => {
@@ -323,13 +313,23 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
return importName;
};
let enums = [];
+ let version = null;
lines.forEach(line => {
+ if (failed) {
+ return;
+ }
+ let m0 = line.match(/^\/\/dtsv=(\d+)$/);
+ if (m0) {
+ version = m0[1];
+ }
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
if (m1) {
- CURRENT_PROCESSING_RULE = line;
let moduleId = m1[1];
const sourceFile = sourceFileGetter(moduleId);
if (!sourceFile) {
+ logErr(`While handling ${line}`);
+ logErr(`Cannot find ${moduleId}`);
+ failed = true;
return;
}
const importName = generateUsageImport(moduleId);
@@ -342,7 +342,9 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
}
let declaration = getTopLevelDeclaration(sourceFile, typeName);
if (!declaration) {
- logErr('Cannot find type ' + typeName);
+ logErr(`While handling ${line}`);
+ logErr(`Cannot find ${typeName}`);
+ failed = true;
return;
}
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage, enums)));
@@ -351,10 +353,12 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
}
let m2 = line.match(/^\s*#includeAll\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
if (m2) {
- CURRENT_PROCESSING_RULE = line;
let moduleId = m2[1];
const sourceFile = sourceFileGetter(moduleId);
if (!sourceFile) {
+ logErr(`While handling ${line}`);
+ logErr(`Cannot find ${moduleId}`);
+ failed = true;
return;
}
const importName = generateUsageImport(moduleId);
@@ -391,10 +395,24 @@ function generateDeclarationFile(recipe, sourceFileGetter) {
}
result.push(line);
});
+ if (failed) {
+ return null;
+ }
+ if (version !== dtsv) {
+ if (!version) {
+ logErr(`gulp watch restart required. 'monaco.d.ts.recipe' is written before versioning was introduced.`);
+ }
+ else {
+ logErr(`gulp watch restart required. 'monaco.d.ts.recipe' v${version} does not match runtime v${dtsv}.`);
+ }
+ return null;
+ }
let resultTxt = result.join(endl);
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
resultTxt = resultTxt.replace(/\bEvent {
- let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
- if (m1) {
- let moduleId = m1[1];
- result.push(moduleId);
- return;
- }
- let m2 = line.match(/^\s*#includeAll\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
- if (m2) {
- let moduleId = m2[1];
- result.push(moduleId);
- return;
- }
- });
- return result;
-}
-exports.getIncludesInRecipe = getIncludesInRecipe;
-function getFilesToWatch(out) {
- return getIncludesInRecipe().map((moduleId) => moduleIdToPath(out, moduleId));
+ resultEnums = resultEnums.split(/\r\n|\n|\r/).join(endl);
+ return {
+ result: resultTxt,
+ usageContent: `${usageImports.join('\n')}\n\n${usage.join('\n')}`,
+ enums: resultEnums
+ };
}
-exports.getFilesToWatch = getFilesToWatch;
function _run(sourceFileGetter) {
- log('Starting monaco.d.ts generation');
const recipe = fs.readFileSync(exports.RECIPE_PATH).toString();
- const [result, usageContent, enums] = generateDeclarationFile(recipe, sourceFileGetter);
+ const t = generateDeclarationFile(recipe, sourceFileGetter);
+ if (!t) {
+ return null;
+ }
+ const result = t.result;
+ const usageContent = t.usageContent;
+ const enums = t.enums;
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
const one = currentContent.replace(/\r\n/gm, '\n');
const other = result.replace(/\r\n/gm, '\n');
const isTheSame = (one === other);
- log('Finished monaco.d.ts generation');
return {
content: result,
usageContent: usageContent,
@@ -453,36 +452,57 @@ function _run(sourceFileGetter) {
isTheSame
};
}
-function run(out, inputFiles) {
- let SOURCE_FILE_MAP = {};
- const sourceFileGetter = (moduleId) => {
- if (!SOURCE_FILE_MAP[moduleId]) {
- let filePath = path.normalize(moduleIdToPath(out, moduleId));
- if (!inputFiles.hasOwnProperty(filePath)) {
- logErr('CANNOT FIND FILE ' + filePath + '. YOU MIGHT NEED TO RESTART gulp');
+class FSProvider {
+ existsSync(filePath) {
+ return fs.existsSync(filePath);
+ }
+ readFileSync(_moduleId, filePath) {
+ return fs.readFileSync(filePath);
+ }
+}
+exports.FSProvider = FSProvider;
+class DeclarationResolver {
+ constructor(_fsProvider) {
+ this._fsProvider = _fsProvider;
+ this._sourceFileCache = Object.create(null);
+ }
+ invalidateCache(moduleId) {
+ this._sourceFileCache[moduleId] = null;
+ }
+ getDeclarationSourceFile(moduleId) {
+ if (!this._sourceFileCache[moduleId]) {
+ this._sourceFileCache[moduleId] = this._getDeclarationSourceFile(moduleId);
+ }
+ return this._sourceFileCache[moduleId];
+ }
+ _getDeclarationSourceFile(moduleId) {
+ if (/\.d\.ts$/.test(moduleId)) {
+ const fileName = path.join(SRC, moduleId);
+ if (!this._fsProvider.existsSync(fileName)) {
return null;
}
- let fileContents = inputFiles[filePath];
- let sourceFile = ts.createSourceFile(filePath, fileContents, ts.ScriptTarget.ES5);
- SOURCE_FILE_MAP[moduleId] = sourceFile;
+ const fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();
+ return ts.createSourceFile(fileName, fileContents, ts.ScriptTarget.ES5);
}
- return SOURCE_FILE_MAP[moduleId];
- };
- return _run(sourceFileGetter);
+ const fileName = path.join(SRC, `${moduleId}.ts`);
+ if (!this._fsProvider.existsSync(fileName)) {
+ return null;
+ }
+ const fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();
+ const fileMap = {
+ 'file.ts': fileContents
+ };
+ const service = ts.createLanguageService(new TypeScriptLanguageServiceHost({}, fileMap, {}));
+ const text = service.getEmitOutput('file.ts', true).outputFiles[0].text;
+ return ts.createSourceFile(fileName, text, ts.ScriptTarget.ES5);
+ }
}
-exports.run = run;
-function run2(out, sourceFileMap) {
- const sourceFileGetter = (moduleId) => {
- let filePath = path.normalize(moduleIdToPath(out, moduleId));
- return sourceFileMap[filePath];
- };
+exports.DeclarationResolver = DeclarationResolver;
+function run3(resolver) {
+ const sourceFileGetter = (moduleId) => resolver.getDeclarationSourceFile(moduleId);
return _run(sourceFileGetter);
}
-exports.run2 = run2;
-function complainErrors() {
- logErr('Not running monaco.d.ts generation due to compile errors');
-}
-exports.complainErrors = complainErrors;
+exports.run3 = run3;
class TypeScriptLanguageServiceHost {
constructor(libs, files, compilerOptions) {
this._libs = libs;
@@ -528,28 +548,11 @@ class TypeScriptLanguageServiceHost {
return fileName === this.getDefaultLibFileName(this._compilerOptions);
}
}
-exports.TypeScriptLanguageServiceHost = TypeScriptLanguageServiceHost;
function execute() {
- const OUTPUT_FILES = {};
- const SRC_FILES = {};
- const SRC_FILE_TO_EXPECTED_NAME = {};
- getIncludesInRecipe().forEach((moduleId) => {
- if (/\.d\.ts$/.test(moduleId)) {
- let fileName = path.join(SRC, moduleId);
- OUTPUT_FILES[moduleIdToPath('src', moduleId)] = fs.readFileSync(fileName).toString();
- return;
- }
- let fileName = path.join(SRC, moduleId) + '.ts';
- SRC_FILES[fileName] = fs.readFileSync(fileName).toString();
- SRC_FILE_TO_EXPECTED_NAME[fileName] = moduleIdToPath('src', moduleId);
- });
- const languageService = ts.createLanguageService(new TypeScriptLanguageServiceHost({}, SRC_FILES, {}));
- var t1 = Date.now();
- Object.keys(SRC_FILES).forEach((fileName) => {
- const emitOutput = languageService.getEmitOutput(fileName, true);
- OUTPUT_FILES[SRC_FILE_TO_EXPECTED_NAME[fileName]] = emitOutput.outputFiles[0].text;
- });
- console.log(`Generating .d.ts took ${Date.now() - t1} ms`);
- return run('src', OUTPUT_FILES);
+ let r = run3(new DeclarationResolver(new FSProvider()));
+ if (!r) {
+ throw new Error(`monaco.d.ts generation error - Cannot continue`);
+ }
+ return r;
}
exports.execute = execute;
diff --git a/build/monaco/api.ts b/build/monaco/api.ts
index b9016913f..d12b77787 100644
--- a/build/monaco/api.ts
+++ b/build/monaco/api.ts
@@ -8,34 +8,19 @@ import * as ts from 'typescript';
import * as path from 'path';
import * as util from 'gulp-util';
-const tsfmt = require('../../tsfmt.json');
+const dtsv = '2';
-function log(message: any, ...rest: any[]): void {
- util.log(util.colors.cyan('[monaco.d.ts]'), message, ...rest);
-}
+const tsfmt = require('../../tsfmt.json');
const SRC = path.join(__dirname, '../../src');
-const OUT_ROOT = path.join(__dirname, '../../');
export const RECIPE_PATH = path.join(__dirname, './monaco.d.ts.recipe');
const DECLARATION_PATH = path.join(__dirname, '../../src/vs/monaco.d.ts');
-var CURRENT_PROCESSING_RULE = '';
function logErr(message: any, ...rest: any[]): void {
- util.log(util.colors.red('[monaco.d.ts]'), 'WHILE HANDLING RULE: ', CURRENT_PROCESSING_RULE);
- util.log(util.colors.red('[monaco.d.ts]'), message, ...rest);
+ util.log(util.colors.yellow(`[monaco.d.ts]`), message, ...rest);
}
-function moduleIdToPath(out: string, moduleId: string): string {
- if (/\.d\.ts/.test(moduleId)) {
- return path.join(SRC, moduleId);
- }
- return path.join(OUT_ROOT, out, moduleId) + '.d.ts';
-}
-
-export interface ISourceFileMap {
- [moduleId: string]: ts.SourceFile;
-}
-export type SourceFileGetter = (moduleId: string) => ts.SourceFile | null;
+type SourceFileGetter = (moduleId: string) => ts.SourceFile | null;
type TSTopLevelDeclaration = ts.InterfaceDeclaration | ts.EnumDeclaration | ts.ClassDeclaration | ts.TypeAliasDeclaration | ts.FunctionDeclaration | ts.ModuleDeclaration;
type TSTopLevelDeclare = TSTopLevelDeclaration | ts.VariableStatement;
@@ -362,7 +347,13 @@ function createReplacer(data: string): (str: string) => string {
};
}
-function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGetter): [string, string, string] {
+interface ITempResult {
+ result: string;
+ usageContent: string;
+ enums: string;
+}
+
+function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGetter): ITempResult | null {
const endl = /\r\n/.test(recipe) ? '\r\n' : '\n';
let lines = recipe.split(endl);
@@ -372,6 +363,8 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
let usageImports: string[] = [];
let usage: string[] = [];
+ let failed = false;
+
usage.push(`var a;`);
usage.push(`var b;`);
@@ -382,15 +375,27 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
};
let enums: string[] = [];
+ let version: string | null = null;
lines.forEach(line => {
+ if (failed) {
+ return;
+ }
+
+ let m0 = line.match(/^\/\/dtsv=(\d+)$/);
+ if (m0) {
+ version = m0[1];
+ }
+
let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
if (m1) {
- CURRENT_PROCESSING_RULE = line;
let moduleId = m1[1];
const sourceFile = sourceFileGetter(moduleId);
if (!sourceFile) {
+ logErr(`While handling ${line}`);
+ logErr(`Cannot find ${moduleId}`);
+ failed = true;
return;
}
@@ -406,7 +411,9 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
}
let declaration = getTopLevelDeclaration(sourceFile, typeName);
if (!declaration) {
- logErr('Cannot find type ' + typeName);
+ logErr(`While handling ${line}`);
+ logErr(`Cannot find ${typeName}`);
+ failed = true;
return;
}
result.push(replacer(getMassagedTopLevelDeclarationText(sourceFile, declaration, importName, usage, enums)));
@@ -416,10 +423,12 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
let m2 = line.match(/^\s*#includeAll\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
if (m2) {
- CURRENT_PROCESSING_RULE = line;
let moduleId = m2[1];
const sourceFile = sourceFileGetter(moduleId);
if (!sourceFile) {
+ logErr(`While handling ${line}`);
+ logErr(`Cannot find ${moduleId}`);
+ failed = true;
return;
}
@@ -461,10 +470,25 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
result.push(line);
});
+ if (failed) {
+ return null;
+ }
+
+ if (version !== dtsv) {
+ if (!version) {
+ logErr(`gulp watch restart required. 'monaco.d.ts.recipe' is written before versioning was introduced.`);
+ } else {
+ logErr(`gulp watch restart required. 'monaco.d.ts.recipe' v${version} does not match runtime v${dtsv}.`);
+ }
+ return null;
+ }
+
let resultTxt = result.join(endl);
resultTxt = resultTxt.replace(/\bURI\b/g, 'Uri');
resultTxt = resultTxt.replace(/\bEvent {
-
- let m1 = line.match(/^\s*#include\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
- if (m1) {
- let moduleId = m1[1];
- result.push(moduleId);
- return;
- }
-
- let m2 = line.match(/^\s*#includeAll\(([^;)]*)(;[^)]*)?\)\:(.*)$/);
- if (m2) {
- let moduleId = m2[1];
- result.push(moduleId);
- return;
- }
- });
-
- return result;
-}
-
-export function getFilesToWatch(out: string): string[] {
- return getIncludesInRecipe().map((moduleId) => moduleIdToPath(out, moduleId));
+ return {
+ result: resultTxt,
+ usageContent: `${usageImports.join('\n')}\n\n${usage.join('\n')}`,
+ enums: resultEnums
+ };
}
export interface IMonacoDeclarationResult {
@@ -521,19 +518,22 @@ export interface IMonacoDeclarationResult {
isTheSame: boolean;
}
-function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult {
- log('Starting monaco.d.ts generation');
-
+function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult | null {
const recipe = fs.readFileSync(RECIPE_PATH).toString();
- const [result, usageContent, enums] = generateDeclarationFile(recipe, sourceFileGetter);
+ const t = generateDeclarationFile(recipe, sourceFileGetter);
+ if (!t) {
+ return null;
+ }
+
+ const result = t.result;
+ const usageContent = t.usageContent;
+ const enums = t.enums;
const currentContent = fs.readFileSync(DECLARATION_PATH).toString();
const one = currentContent.replace(/\r\n/gm, '\n');
const other = result.replace(/\r\n/gm, '\n');
const isTheSame = (one === other);
- log('Finished monaco.d.ts generation');
-
return {
content: result,
usageContent: usageContent,
@@ -543,48 +543,69 @@ function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult {
};
}
-export function run(out: string, inputFiles: { [file: string]: string; }): IMonacoDeclarationResult {
+export class FSProvider {
+ public existsSync(filePath: string): boolean {
+ return fs.existsSync(filePath);
+ }
+ public readFileSync(_moduleId: string, filePath: string): Buffer {
+ return fs.readFileSync(filePath);
+ }
+}
- let SOURCE_FILE_MAP: { [moduleId: string]: ts.SourceFile; } = {};
- const sourceFileGetter = (moduleId: string): ts.SourceFile | null => {
- if (!SOURCE_FILE_MAP[moduleId]) {
- let filePath = path.normalize(moduleIdToPath(out, moduleId));
+export class DeclarationResolver {
- if (!inputFiles.hasOwnProperty(filePath)) {
- logErr('CANNOT FIND FILE ' + filePath + '. YOU MIGHT NEED TO RESTART gulp');
- return null;
- }
+ private _sourceFileCache: { [moduleId: string]: ts.SourceFile | null; };
+
+ constructor(private readonly _fsProvider: FSProvider) {
+ this._sourceFileCache = Object.create(null);
+ }
- let fileContents = inputFiles[filePath];
- let sourceFile = ts.createSourceFile(filePath, fileContents, ts.ScriptTarget.ES5);
+ public invalidateCache(moduleId: string): void {
+ this._sourceFileCache[moduleId] = null;
+ }
- SOURCE_FILE_MAP[moduleId] = sourceFile;
+ public getDeclarationSourceFile(moduleId: string): ts.SourceFile | null {
+ if (!this._sourceFileCache[moduleId]) {
+ this._sourceFileCache[moduleId] = this._getDeclarationSourceFile(moduleId);
}
- return SOURCE_FILE_MAP[moduleId];
- };
+ return this._sourceFileCache[moduleId];
+ }
- return _run(sourceFileGetter);
+ private _getDeclarationSourceFile(moduleId: string): ts.SourceFile | null {
+ if (/\.d\.ts$/.test(moduleId)) {
+ const fileName = path.join(SRC, moduleId);
+ if (!this._fsProvider.existsSync(fileName)) {
+ return null;
+ }
+ const fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();
+ return ts.createSourceFile(fileName, fileContents, ts.ScriptTarget.ES5);
+ }
+ const fileName = path.join(SRC, `${moduleId}.ts`);
+ if (!this._fsProvider.existsSync(fileName)) {
+ return null;
+ }
+ const fileContents = this._fsProvider.readFileSync(moduleId, fileName).toString();
+ const fileMap: IFileMap = {
+ 'file.ts': fileContents
+ };
+ const service = ts.createLanguageService(new TypeScriptLanguageServiceHost({}, fileMap, {}));
+ const text = service.getEmitOutput('file.ts', true).outputFiles[0].text;
+ return ts.createSourceFile(fileName, text, ts.ScriptTarget.ES5);
+ }
}
-export function run2(out: string, sourceFileMap: ISourceFileMap): IMonacoDeclarationResult {
- const sourceFileGetter = (moduleId: string): ts.SourceFile | null => {
- let filePath = path.normalize(moduleIdToPath(out, moduleId));
- return sourceFileMap[filePath];
- };
-
+export function run3(resolver: DeclarationResolver): IMonacoDeclarationResult | null {
+ const sourceFileGetter = (moduleId: string) => resolver.getDeclarationSourceFile(moduleId);
return _run(sourceFileGetter);
}
-export function complainErrors() {
- logErr('Not running monaco.d.ts generation due to compile errors');
-}
interface ILibMap { [libName: string]: string; }
interface IFileMap { [fileName: string]: string; }
-export class TypeScriptLanguageServiceHost implements ts.LanguageServiceHost {
+class TypeScriptLanguageServiceHost implements ts.LanguageServiceHost {
private readonly _libs: ILibMap;
private readonly _files: IFileMap;
@@ -638,30 +659,9 @@ export class TypeScriptLanguageServiceHost implements ts.LanguageServiceHost {
}
export function execute(): IMonacoDeclarationResult {
-
- const OUTPUT_FILES: { [file: string]: string; } = {};
- const SRC_FILES: IFileMap = {};
- const SRC_FILE_TO_EXPECTED_NAME: { [filename: string]: string; } = {};
- getIncludesInRecipe().forEach((moduleId) => {
- if (/\.d\.ts$/.test(moduleId)) {
- let fileName = path.join(SRC, moduleId);
- OUTPUT_FILES[moduleIdToPath('src', moduleId)] = fs.readFileSync(fileName).toString();
- return;
- }
-
- let fileName = path.join(SRC, moduleId) + '.ts';
- SRC_FILES[fileName] = fs.readFileSync(fileName).toString();
- SRC_FILE_TO_EXPECTED_NAME[fileName] = moduleIdToPath('src', moduleId);
- });
-
- const languageService = ts.createLanguageService(new TypeScriptLanguageServiceHost({}, SRC_FILES, {}));
-
- var t1 = Date.now();
- Object.keys(SRC_FILES).forEach((fileName) => {
- const emitOutput = languageService.getEmitOutput(fileName, true);
- OUTPUT_FILES[SRC_FILE_TO_EXPECTED_NAME[fileName]] = emitOutput.outputFiles[0].text;
- });
- console.log(`Generating .d.ts took ${Date.now() - t1} ms`);
-
- return run('src', OUTPUT_FILES);
+ let r = run3(new DeclarationResolver(new FSProvider()));
+ if (!r) {
+ throw new Error(`monaco.d.ts generation error - Cannot continue`);
+ }
+ return r;
}
diff --git a/build/monaco/monaco.d.ts.recipe b/build/monaco/monaco.d.ts.recipe
index 51ed5fbae..356ef3ff0 100644
--- a/build/monaco/monaco.d.ts.recipe
+++ b/build/monaco/monaco.d.ts.recipe
@@ -85,3 +85,5 @@ declare namespace monaco.worker {
#includeAll(vs/editor/common/services/editorSimpleWorker;):
}
+
+//dtsv=2
\ No newline at end of file
diff --git a/build/monaco/yarn.lock b/build/monaco/yarn.lock
deleted file mode 100644
index d54e6ddb6..000000000
--- a/build/monaco/yarn.lock
+++ /dev/null
@@ -1,4668 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@gulp-sourcemaps/map-sources@1.X":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz#890ae7c5d8c877f6d384860215ace9d7ec945bda"
- dependencies:
- normalize-path "^2.0.1"
- through2 "^2.0.3"
-
-"@types/minimist@1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
-
-"@types/mocha@2.2.39":
- version "2.2.39"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.39.tgz#f68d63db8b69c38e9558b4073525cf96c4f7a829"
-
-"@types/semver@5.3.30":
- version "5.3.30"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.3.30.tgz#b55a3bd07b6b8b35f9d4472e1fc3318b68a493b2"
-
-"@types/sinon@1.16.34":
- version "1.16.34"
- resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-1.16.34.tgz#a9761fff33d0f7b3fe61875b577778a2576a9a03"
-
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-
-abbrev@1.0.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
-
-acorn-jsx@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
- dependencies:
- acorn "^3.0.4"
-
-acorn@4.X:
- version "4.0.13"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
-
-acorn@^3.0.4:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-
-acorn@^5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
-
-ajv-keywords@^1.0.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
-
-ajv@^4.7.0, ajv@^4.9.1:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
- dependencies:
- co "^4.6.0"
- json-stable-stringify "^1.0.1"
-
-ajv@^5.1.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda"
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.3.0"
-
-align-text@^0.1.1, align-text@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
- dependencies:
- kind-of "^3.0.2"
- longest "^1.0.1"
- repeat-string "^1.5.2"
-
-alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
-
-amdefine@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.0.tgz#fd17474700cb5cc9c2b709f0be9d23ce3c198c33"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-align@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
- dependencies:
- string-width "^2.0.0"
-
-ansi-escapes@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-
-ansi-regex@^0.2.0, ansi-regex@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-
-ansi-styles@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-ansi-styles@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
- dependencies:
- color-convert "^1.9.0"
-
-anymatch@^1.3.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
- dependencies:
- micromatch "^2.1.5"
- normalize-path "^2.0.0"
-
-aproba@^1.0.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
-
-archy@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
-
-are-we-there-yet@~1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.6"
-
-argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-flatten@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-
-array-differ@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
-
-array-each@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
-
-array-find-index@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-
-array-slice@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f"
-
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.1, array-uniq@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-arrify@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assert-plus@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-async@1.x, async@^1.4.0:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-atob@~1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/atob/-/atob-1.1.3.tgz#95f13629b12c3a51a5d215abdce2aa9f32f80773"
-
-autoprefixer@^6.3.1:
- version "6.7.7"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
- dependencies:
- browserslist "^1.7.6"
- caniuse-db "^1.0.30000634"
- normalize-range "^0.1.2"
- num2fraction "^1.2.2"
- postcss "^5.2.16"
- postcss-value-parser "^3.2.3"
-
-aws-sign2@~0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-
-aws4@^1.2.1, aws4@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
-
-babel-code-frame@^6.16.0, babel-code-frame@^6.20.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
- dependencies:
- chalk "^1.1.3"
- esutils "^2.0.2"
- js-tokens "^3.0.2"
-
-balanced-match@^0.4.2:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
- dependencies:
- tweetnacl "^0.14.3"
-
-beeper@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
-
-binary-extensions@^1.0.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0"
-
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- dependencies:
- inherits "~2.0.0"
-
-bluebird@^3.0.5:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
-
-boom@2.x.x:
- version "2.10.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
- dependencies:
- hoek "2.x.x"
-
-boom@4.x.x:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
- dependencies:
- hoek "4.x.x"
-
-boom@5.x.x:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
- dependencies:
- hoek "4.x.x"
-
-boxen@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.2.tgz#3f1d4032c30ffea9d4b02c322eaf2ea741dcbce5"
- dependencies:
- ansi-align "^2.0.0"
- camelcase "^4.0.0"
- chalk "^2.0.1"
- cli-boxes "^1.0.0"
- string-width "^2.0.0"
- term-size "^1.2.0"
- widest-line "^1.0.0"
-
-brace-expansion@^1.0.0, brace-expansion@^1.1.7:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-"browser-request@>= 0.3.1 < 0.4.0":
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17"
-
-browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
- version "1.7.7"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
- dependencies:
- caniuse-db "^1.0.30000639"
- electron-to-chromium "^1.2.7"
-
-builtin-modules@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-
-caller-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
- dependencies:
- callsites "^0.2.0"
-
-callsites@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
-
-camelcase-keys@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
- dependencies:
- camelcase "^2.0.0"
- map-obj "^1.0.0"
-
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-camelcase@^2.0.0, camelcase@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-
-camelcase@^4.0.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-
-caniuse-api@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
- dependencies:
- browserslist "^1.3.6"
- caniuse-db "^1.0.30000529"
- lodash.memoize "^4.1.2"
- lodash.uniq "^4.5.0"
-
-caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
- version "1.0.30000764"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000764.tgz#d73ab11ae62f6a9e2f69867d6d9c23ae3f2e5d8d"
-
-capture-stack-trace@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
-center-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
- dependencies:
- align-text "^0.1.3"
- lazy-cache "^1.0.3"
-
-chalk@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
- dependencies:
- ansi-styles "^1.1.0"
- escape-string-regexp "^1.0.0"
- has-ansi "^0.1.0"
- strip-ansi "^0.3.0"
- supports-color "^0.2.0"
-
-chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@^2.0.1:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
- dependencies:
- ansi-styles "^3.1.0"
- escape-string-regexp "^1.0.5"
- supports-color "^4.0.0"
-
-chokidar@^1.6.1:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
-circular-json@^0.3.1:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
-
-clap@^1.0.9:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
- dependencies:
- chalk "^1.1.3"
-
-cli-boxes@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
-
-cli-cursor@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
- dependencies:
- restore-cursor "^1.0.1"
-
-cli-width@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
-
-cliui@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
- dependencies:
- center-align "^0.1.1"
- right-align "^0.1.1"
- wordwrap "0.0.2"
-
-cliui@^3.0.3:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wrap-ansi "^2.0.0"
-
-clone-buffer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
-
-clone-stats@^0.0.1, clone-stats@~0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
-
-clone-stats@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
-
-clone@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
-
-clone@^1.0.0, clone@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
-
-clone@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb"
-
-cloneable-readable@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117"
- dependencies:
- inherits "^2.0.1"
- process-nextick-args "^1.0.6"
- through2 "^2.0.1"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-coa@~1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
- dependencies:
- q "^1.1.2"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-color-convert@^1.3.0, color-convert@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
- dependencies:
- color-name "^1.1.1"
-
-color-name@^1.0.0, color-name@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-
-color-string@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
- dependencies:
- color-name "^1.0.0"
-
-color@^0.11.0:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
- dependencies:
- clone "^1.0.2"
- color-convert "^1.3.0"
- color-string "^0.3.0"
-
-colormin@^1.0.5:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
- dependencies:
- color "^0.11.0"
- css-color-names "0.0.4"
- has "^1.0.1"
-
-colors@^1.1.2, colors@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-
-colors@~0.6.0-1:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc"
-
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06"
-
-commander@2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873"
-
-commander@^2.9.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
-
-commander@~2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781"
-
-commandpost@^1.0.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/commandpost/-/commandpost-1.2.1.tgz#2e9c4c7508b9dc704afefaa91cab92ee6054cc68"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-concat-stream@^1.5.2:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
- dependencies:
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-concat-with-sourcemaps@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6"
- dependencies:
- source-map "^0.5.1"
-
-configstore@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90"
- dependencies:
- dot-prop "^4.1.0"
- graceful-fs "^4.1.2"
- make-dir "^1.0.0"
- unique-string "^1.0.0"
- write-file-atomic "^2.0.0"
- xdg-basedir "^3.0.0"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-convert-source-map@1.X:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5"
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-create-error-class@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
- dependencies:
- capture-stack-trace "^1.0.0"
-
-cross-spawn@^5.0.1:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
- dependencies:
- lru-cache "^4.0.1"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-cryptiles@2.x.x:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
- dependencies:
- boom "2.x.x"
-
-cryptiles@3.x.x:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
- dependencies:
- boom "5.x.x"
-
-crypto-random-string@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
-
-css-color-names@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
-
-css@2.X:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/css/-/css-2.2.1.tgz#73a4c81de85db664d4ee674f7d47085e3b2d55dc"
- dependencies:
- inherits "^2.0.1"
- source-map "^0.1.38"
- source-map-resolve "^0.3.0"
- urix "^0.1.0"
-
-cssnano@^3.0.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
- dependencies:
- autoprefixer "^6.3.1"
- decamelize "^1.1.2"
- defined "^1.0.0"
- has "^1.0.1"
- object-assign "^4.0.1"
- postcss "^5.0.14"
- postcss-calc "^5.2.0"
- postcss-colormin "^2.1.8"
- postcss-convert-values "^2.3.4"
- postcss-discard-comments "^2.0.4"
- postcss-discard-duplicates "^2.0.1"
- postcss-discard-empty "^2.0.1"
- postcss-discard-overridden "^0.1.1"
- postcss-discard-unused "^2.2.1"
- postcss-filter-plugins "^2.0.0"
- postcss-merge-idents "^2.1.5"
- postcss-merge-longhand "^2.0.1"
- postcss-merge-rules "^2.0.3"
- postcss-minify-font-values "^1.0.2"
- postcss-minify-gradients "^1.0.1"
- postcss-minify-params "^1.0.4"
- postcss-minify-selectors "^2.0.4"
- postcss-normalize-charset "^1.1.0"
- postcss-normalize-url "^3.0.7"
- postcss-ordered-values "^2.1.0"
- postcss-reduce-idents "^2.2.2"
- postcss-reduce-initial "^1.0.0"
- postcss-reduce-transforms "^1.0.3"
- postcss-svgo "^2.1.1"
- postcss-unique-selectors "^2.0.2"
- postcss-value-parser "^3.2.3"
- postcss-zindex "^2.0.1"
-
-csso@~2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
- dependencies:
- clap "^1.0.9"
- source-map "^0.5.3"
-
-cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
-
-"cssstyle@>= 0.2.21 < 0.3.0":
- version "0.2.37"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
- dependencies:
- cssom "0.3.x"
-
-currently-unhandled@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
- dependencies:
- array-find-index "^1.0.1"
-
-d@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
- dependencies:
- es5-ext "^0.10.9"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-dateformat@^1.0.11, dateformat@^1.0.7-1.2.3:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
- dependencies:
- get-stdin "^4.0.1"
- meow "^3.3.0"
-
-dateformat@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
-
-debounce@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.1.0.tgz#6a1a4ee2a9dc4b7c24bb012558dbcdb05b37f408"
-
-debug-fabulous@0.0.X:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-0.0.4.tgz#fa071c5d87484685424807421ca4b16b0b1a0763"
- dependencies:
- debug "2.X"
- lazy-debug-legacy "0.0.X"
- object-assign "4.1.0"
-
-debug@2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
- dependencies:
- ms "0.7.1"
-
-debug@2.X, debug@^2.1.1, debug@^2.2.0:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- dependencies:
- ms "2.0.0"
-
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-deep-extend@~0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
-
-deep-is@~0.1.2, deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-
-defaults@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
- dependencies:
- clone "^1.0.2"
-
-defined@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-
-del@^2.0.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
- dependencies:
- globby "^5.0.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-deprecated@^0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"
-
-detect-file@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63"
- dependencies:
- fs-exists-sync "^0.1.0"
-
-detect-libc@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1"
-
-detect-newline@2.X:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
-
-diff@1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
-
-diff@^3.0.1:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
-
-doctrine@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
- dependencies:
- esutils "^2.0.2"
- isarray "^1.0.0"
-
-dom-serializer@0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
- dependencies:
- domelementtype "~1.1.1"
- entities "~1.1.1"
-
-domelementtype@1, domelementtype@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
-
-domelementtype@~1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
-
-domhandler@^2.3.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
- dependencies:
- domelementtype "1"
-
-domutils@^1.5.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff"
- dependencies:
- dom-serializer "0"
- domelementtype "1"
-
-dot-prop@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
- dependencies:
- is-obj "^1.0.0"
-
-duplexer2@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
- dependencies:
- readable-stream "~1.1.9"
-
-duplexer3@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
-
-duplexer@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
-
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
-editorconfig@^0.13.2:
- version "0.13.3"
- resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.3.tgz#e5219e587951d60958fd94ea9a9a008cdeff1b34"
- dependencies:
- bluebird "^3.0.5"
- commander "^2.9.0"
- lru-cache "^3.2.0"
- semver "^5.1.0"
- sigmund "^1.0.1"
-
-electron-to-chromium@^1.2.7:
- version "1.3.27"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d"
-
-end-of-stream@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206"
- dependencies:
- once "^1.4.0"
-
-end-of-stream@~0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf"
- dependencies:
- once "~1.3.0"
-
-entities@^1.1.1, entities@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
-
-error-ex@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
- dependencies:
- is-arrayish "^0.2.1"
-
-es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.35"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f"
- dependencies:
- es6-iterator "~2.0.1"
- es6-symbol "~3.1.1"
-
-es6-iterator@^2.0.1, es6-iterator@~2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
- dependencies:
- d "1"
- es5-ext "^0.10.35"
- es6-symbol "^3.1.1"
-
-es6-map@^0.1.3:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-set "~0.1.5"
- es6-symbol "~3.1.1"
- event-emitter "~0.3.5"
-
-es6-set@~0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-symbol "3.1.1"
- event-emitter "~0.3.5"
-
-es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-es6-weak-map@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
- dependencies:
- d "1"
- es5-ext "^0.10.14"
- es6-iterator "^2.0.1"
- es6-symbol "^3.1.1"
-
-escape-string-regexp@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1"
-
-escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@1.7.x:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.7.1.tgz#30ecfcf66ca98dc67cd2fd162abeb6eafa8ce6fc"
- dependencies:
- esprima "^1.2.2"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.5.0"
- optionalDependencies:
- source-map "~0.2.0"
-
-escodegen@1.8.x:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
-escope@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
- dependencies:
- es6-map "^0.1.3"
- es6-weak-map "^2.0.1"
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint@^3.4.0:
- version "3.19.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
- dependencies:
- babel-code-frame "^6.16.0"
- chalk "^1.1.3"
- concat-stream "^1.5.2"
- debug "^2.1.1"
- doctrine "^2.0.0"
- escope "^3.6.0"
- espree "^3.4.0"
- esquery "^1.0.0"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- file-entry-cache "^2.0.0"
- glob "^7.0.3"
- globals "^9.14.0"
- ignore "^3.2.0"
- imurmurhash "^0.1.4"
- inquirer "^0.12.0"
- is-my-json-valid "^2.10.0"
- is-resolvable "^1.0.0"
- js-yaml "^3.5.1"
- json-stable-stringify "^1.0.0"
- levn "^0.3.0"
- lodash "^4.0.0"
- mkdirp "^0.5.0"
- natural-compare "^1.4.0"
- optionator "^0.8.2"
- path-is-inside "^1.0.1"
- pluralize "^1.2.1"
- progress "^1.1.8"
- require-uncached "^1.0.2"
- shelljs "^0.7.5"
- strip-bom "^3.0.0"
- strip-json-comments "~2.0.1"
- table "^3.7.8"
- text-table "~0.2.0"
- user-home "^2.0.0"
-
-espree@^3.4.0:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
- dependencies:
- acorn "^5.2.1"
- acorn-jsx "^3.0.0"
-
-esprima@2.5.x:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc"
-
-esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-
-esprima@^1.2.2:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9"
-
-esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
-
-esquery@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
- dependencies:
- estraverse "^4.0.0"
-
-esrecurse@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
- dependencies:
- estraverse "^4.1.0"
- object-assign "^4.0.1"
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
-
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-event-emitter@~0.3.5:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-event-stream@^3.1.7, event-stream@^3.3.2:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571"
- dependencies:
- duplexer "~0.1.1"
- from "~0"
- map-stream "~0.1.0"
- pause-stream "0.0.11"
- split "0.3"
- stream-combiner "~0.0.4"
- through "~2.3.1"
-
-execa@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
- dependencies:
- cross-spawn "^5.0.1"
- get-stream "^3.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-exit-hook@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- dependencies:
- fill-range "^2.1.0"
-
-expand-tilde@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
- dependencies:
- os-homedir "^1.0.1"
-
-expand-tilde@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
- dependencies:
- homedir-polyfill "^1.0.1"
-
-extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- dependencies:
- is-extglob "^1.0.0"
-
-extsprintf@1.3.0, extsprintf@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-
-fancy-log@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948"
- dependencies:
- chalk "^1.1.1"
- time-stamp "^1.0.0"
-
-fast-deep-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
-
-fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
-
-fast-levenshtein@~1.0.0:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9"
-
-fast-levenshtein@~2.0.4:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-
-figures@^1.3.5:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
- dependencies:
- escape-string-regexp "^1.0.5"
- object-assign "^4.1.0"
-
-file-entry-cache@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
- dependencies:
- flat-cache "^1.2.1"
- object-assign "^4.0.1"
-
-filename-regex@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-
-fileset@0.2.x:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067"
- dependencies:
- glob "5.x"
- minimatch "2.x"
-
-fill-range@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^1.1.3"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-find-index@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
-
-find-up@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
- dependencies:
- path-exists "^2.0.0"
- pinkie-promise "^2.0.0"
-
-findup-sync@^0.4.2:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12"
- dependencies:
- detect-file "^0.1.0"
- is-glob "^2.0.1"
- micromatch "^2.3.7"
- resolve-dir "^0.1.0"
-
-findup-sync@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.3.0.tgz#37930aa5d816b777c03445e1966cc6790a4c0b16"
- dependencies:
- glob "~5.0.0"
-
-findup@0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/findup/-/findup-0.1.5.tgz#8ad929a3393bac627957a7e5de4623b06b0e2ceb"
- dependencies:
- colors "~0.6.0-1"
- commander "~2.1.0"
-
-fined@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476"
- dependencies:
- expand-tilde "^2.0.2"
- is-plain-object "^2.0.3"
- object.defaults "^1.1.0"
- object.pick "^1.2.0"
- parse-filepath "^1.0.1"
-
-first-chunk-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
-
-first-chunk-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70"
- dependencies:
- readable-stream "^2.0.2"
-
-flagged-respawn@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5"
-
-flat-cache@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
- dependencies:
- circular-json "^0.3.1"
- del "^2.0.2"
- graceful-fs "^4.1.2"
- write "^0.2.1"
-
-flatten@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
-
-for-in@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-
-for-own@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
- dependencies:
- for-in "^1.0.1"
-
-for-own@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
- dependencies:
- for-in "^1.0.1"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.1.1:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-form-data@~2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-formatio@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9"
- dependencies:
- samsam "~1.1"
-
-from@~0:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
-
-fs-exists-sync@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@^1.0.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
- dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.39"
-
-fstream-ignore@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
- dependencies:
- fstream "^1.0.0"
- inherits "2"
- minimatch "^3.0.0"
-
-fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-function-bind@^1.0.2:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-
-gauge@~2.7.3:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-gaze@^0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
- dependencies:
- globule "~0.1.0"
-
-generate-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- dependencies:
- is-property "^1.0.0"
-
-get-stdin@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-
-get-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- dependencies:
- assert-plus "^1.0.0"
-
-ghooks@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/ghooks/-/ghooks-1.0.3.tgz#0a98c6bdef04f092d901306dde35a945c48b3119"
- dependencies:
- findup "0.1.5"
- lodash.clone "3.0.3"
- manage-path "2.0.0"
- spawn-command "0.0.2"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-expand@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/glob-expand/-/glob-expand-0.2.1.tgz#1b088ac272b57158870b76816111da4618a66a0f"
- dependencies:
- glob "~4.5.x"
- lodash "~4.13.x"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- dependencies:
- is-glob "^2.0.0"
-
-glob-parent@^3.0.1:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
- dependencies:
- is-glob "^3.1.0"
- path-dirname "^1.0.0"
-
-glob-stream@^3.1.5:
- version "3.1.18"
- resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b"
- dependencies:
- glob "^4.3.1"
- glob2base "^0.0.12"
- minimatch "^2.0.1"
- ordered-read-streams "^0.1.0"
- through2 "^0.6.1"
- unique-stream "^1.0.0"
-
-glob-watcher@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b"
- dependencies:
- gaze "^0.5.1"
-
-glob2base@^0.0.12:
- version "0.0.12"
- resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
- dependencies:
- find-index "^0.1.1"
-
-glob@3.2.11:
- version "3.2.11"
- resolved "https://registry.yarnpkg.com/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d"
- dependencies:
- inherits "2"
- minimatch "0.3"
-
-glob@5.x, glob@^5.0.13, glob@~5.0.0:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^4.3.1, glob@~4.5.x:
- version "4.5.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "^2.0.1"
- once "^1.3.0"
-
-glob@^6.0.4:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@~3.1.21:
- version "3.1.21"
- resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
- dependencies:
- graceful-fs "~1.2.0"
- inherits "1"
- minimatch "~0.2.11"
-
-global-dirs@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.0.tgz#10d34039e0df04272e262cf24224f7209434df4f"
- dependencies:
- ini "^1.3.4"
-
-global-modules@^0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
- dependencies:
- global-prefix "^0.1.4"
- is-windows "^0.2.0"
-
-global-prefix@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f"
- dependencies:
- homedir-polyfill "^1.0.0"
- ini "^1.3.4"
- is-windows "^0.2.0"
- which "^1.2.12"
-
-globals@^9.14.0:
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
-
-globby@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
- dependencies:
- array-union "^1.0.1"
- arrify "^1.0.0"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-globule@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
- dependencies:
- glob "~3.1.21"
- lodash "~1.0.1"
- minimatch "~0.2.11"
-
-glogg@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
- dependencies:
- sparkles "^1.0.0"
-
-got@^6.7.1:
- version "6.7.1"
- resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
- dependencies:
- create-error-class "^3.0.0"
- duplexer3 "^0.1.4"
- get-stream "^3.0.0"
- is-redirect "^1.0.0"
- is-retry-allowed "^1.0.0"
- is-stream "^1.0.0"
- lowercase-keys "^1.0.0"
- safe-buffer "^5.0.1"
- timed-out "^4.0.0"
- unzip-response "^2.0.1"
- url-parse-lax "^1.0.0"
-
-graceful-fs@4.X, graceful-fs@^4.1.11, graceful-fs@^4.1.2:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-graceful-fs@^3.0.0:
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
- dependencies:
- natives "^1.1.0"
-
-graceful-fs@~1.2.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
-
-growl@1.9.2:
- version "1.9.2"
- resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f"
-
-gulp-bom@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gulp-bom/-/gulp-bom-1.0.0.tgz#38a183a07187bd57a7922d37977441f379df2abf"
- dependencies:
- gulp-util "^3.0.0"
- through2 "^2.0.0"
-
-gulp-concat@^2.6.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz#633d16c95d88504628ad02665663cee5a4793353"
- dependencies:
- concat-with-sourcemaps "^1.0.0"
- through2 "^2.0.0"
- vinyl "^2.0.0"
-
-gulp-cssnano@^2.1.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/gulp-cssnano/-/gulp-cssnano-2.1.2.tgz#e08a09771ec5454a549f1a005bdd256cb8e5e0a3"
- dependencies:
- cssnano "^3.0.0"
- gulp-util "^3.0.6"
- object-assign "^4.0.1"
- vinyl-sourcemaps-apply "^0.2.1"
-
-gulp-filter@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/gulp-filter/-/gulp-filter-3.0.1.tgz#7c6ffce5b563e89de7a90dfceff16ec8a8cb1562"
- dependencies:
- gulp-util "^3.0.6"
- multimatch "^2.0.0"
- streamfilter "^1.0.5"
-
-gulp-flatmap@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gulp-flatmap/-/gulp-flatmap-1.0.0.tgz#e634e03cffb263aebacfdc22dd8ce2f3d76ffe97"
- dependencies:
- gulp-util "~2.2.14"
- through2 "~0.6.3"
-
-gulp-rename@^1.2.0:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.2.2.tgz#3ad4428763f05e2764dec1c67d868db275687817"
-
-gulp-sourcemaps@^1.11.0:
- version "1.12.0"
- resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.12.0.tgz#786f97c94a0f968492465d70558e04242c679598"
- dependencies:
- "@gulp-sourcemaps/map-sources" "1.X"
- acorn "4.X"
- convert-source-map "1.X"
- css "2.X"
- debug-fabulous "0.0.X"
- detect-newline "2.X"
- graceful-fs "4.X"
- source-map "0.X"
- strip-bom "2.X"
- through2 "2.X"
- vinyl "1.X"
-
-gulp-tsb@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/gulp-tsb/-/gulp-tsb-2.0.4.tgz#0b298092d4dfd4e5cfd80679ed4c1d93bfdba64a"
- dependencies:
- gulp-util "^3.0.1"
- through "^2.3.6"
- vinyl "^0.4.3"
-
-gulp-tslint@^7.0.1:
- version "7.1.0"
- resolved "https://registry.yarnpkg.com/gulp-tslint/-/gulp-tslint-7.1.0.tgz#9bd3ff4fbc16d4cbd9abb08ff786db89b563e93d"
- dependencies:
- gulp-util "~3.0.8"
- map-stream "~0.1.0"
- through "~2.3.8"
-
-gulp-uglify@^2.0.0:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-2.1.2.tgz#6db85b1d0ee63d18058592b658649d65c2ec4541"
- dependencies:
- gulplog "^1.0.0"
- has-gulplog "^0.1.0"
- lodash "^4.13.1"
- make-error-cause "^1.1.1"
- through2 "^2.0.0"
- uglify-js "~2.8.10"
- uglify-save-license "^0.4.1"
- vinyl-sourcemaps-apply "^0.2.0"
-
-gulp-util@3.0.7:
- version "3.0.7"
- resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb"
- dependencies:
- array-differ "^1.0.0"
- array-uniq "^1.0.2"
- beeper "^1.0.0"
- chalk "^1.0.0"
- dateformat "^1.0.11"
- fancy-log "^1.1.0"
- gulplog "^1.0.0"
- has-gulplog "^0.1.0"
- lodash._reescape "^3.0.0"
- lodash._reevaluate "^3.0.0"
- lodash._reinterpolate "^3.0.0"
- lodash.template "^3.0.0"
- minimist "^1.1.0"
- multipipe "^0.1.2"
- object-assign "^3.0.0"
- replace-ext "0.0.1"
- through2 "^2.0.0"
- vinyl "^0.5.0"
-
-gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.6, gulp-util@^3.0.7, gulp-util@~3.0.8:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
- dependencies:
- array-differ "^1.0.0"
- array-uniq "^1.0.2"
- beeper "^1.0.0"
- chalk "^1.0.0"
- dateformat "^2.0.0"
- fancy-log "^1.1.0"
- gulplog "^1.0.0"
- has-gulplog "^0.1.0"
- lodash._reescape "^3.0.0"
- lodash._reevaluate "^3.0.0"
- lodash._reinterpolate "^3.0.0"
- lodash.template "^3.0.0"
- minimist "^1.1.0"
- multipipe "^0.1.2"
- object-assign "^3.0.0"
- replace-ext "0.0.1"
- through2 "^2.0.0"
- vinyl "^0.5.0"
-
-gulp-util@~2.2.14:
- version "2.2.20"
- resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c"
- dependencies:
- chalk "^0.5.0"
- dateformat "^1.0.7-1.2.3"
- lodash._reinterpolate "^2.4.1"
- lodash.template "^2.4.1"
- minimist "^0.2.0"
- multipipe "^0.1.0"
- through2 "^0.5.0"
- vinyl "^0.2.1"
-
-gulp-watch@^4.3.9:
- version "4.3.11"
- resolved "https://registry.yarnpkg.com/gulp-watch/-/gulp-watch-4.3.11.tgz#162fc563de9fc770e91f9a7ce3955513a9a118c0"
- dependencies:
- anymatch "^1.3.0"
- chokidar "^1.6.1"
- glob-parent "^3.0.1"
- gulp-util "^3.0.7"
- object-assign "^4.1.0"
- path-is-absolute "^1.0.1"
- readable-stream "^2.2.2"
- slash "^1.0.0"
- vinyl "^1.2.0"
- vinyl-file "^2.0.0"
-
-gulp@^3.8.9:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4"
- dependencies:
- archy "^1.0.0"
- chalk "^1.0.0"
- deprecated "^0.0.1"
- gulp-util "^3.0.0"
- interpret "^1.0.0"
- liftoff "^2.1.0"
- minimist "^1.1.0"
- orchestrator "^0.3.0"
- pretty-hrtime "^1.0.0"
- semver "^4.1.0"
- tildify "^1.0.0"
- v8flags "^2.0.2"
- vinyl-fs "^0.3.0"
-
-gulplog@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
- dependencies:
- glogg "^1.0.0"
-
-handlebars@^4.0.1:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
- dependencies:
- async "^1.4.0"
- optimist "^0.6.1"
- source-map "^0.4.4"
- optionalDependencies:
- uglify-js "^2.6"
-
-har-schema@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-
-har-validator@~4.2.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
- dependencies:
- ajv "^4.9.1"
- har-schema "^1.0.5"
-
-har-validator@~5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
- dependencies:
- ajv "^5.1.0"
- har-schema "^2.0.0"
-
-has-ansi@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
- dependencies:
- ansi-regex "^0.2.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has-flag@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
-
-has-gulplog@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
- dependencies:
- sparkles "^1.0.0"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
- dependencies:
- function-bind "^1.0.2"
-
-hawk@3.1.3, hawk@~3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
- dependencies:
- boom "2.x.x"
- cryptiles "2.x.x"
- hoek "2.x.x"
- sntp "1.x.x"
-
-hawk@~6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
- dependencies:
- boom "4.x.x"
- cryptiles "3.x.x"
- hoek "4.x.x"
- sntp "2.x.x"
-
-hoek@2.x.x:
- version "2.16.3"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-
-hoek@4.x.x:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-
-homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
- dependencies:
- parse-passwd "^1.0.0"
-
-hosted-git-info@^2.1.4:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
-
-html-comment-regex@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
-
-"htmlparser2@>= 3.7.3 < 4.0.0":
- version "3.9.2"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338"
- dependencies:
- domelementtype "^1.3.0"
- domhandler "^2.3.0"
- domutils "^1.5.1"
- entities "^1.1.1"
- inherits "^2.0.1"
- readable-stream "^2.0.2"
-
-http-signature@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
- dependencies:
- assert-plus "^0.2.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-iconv-lite@^0.4.15:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
-
-ignore@^3.2.0:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
-
-import-lazy@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-
-indent-string@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
- dependencies:
- repeating "^2.0.0"
-
-indexes-of@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
-
-ini@^1.3.4, ini@~1.3.0:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
-
-inquirer@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
- dependencies:
- ansi-escapes "^1.1.0"
- ansi-regex "^2.0.0"
- chalk "^1.0.0"
- cli-cursor "^1.0.1"
- cli-width "^2.0.0"
- figures "^1.3.5"
- lodash "^4.3.0"
- readline2 "^1.0.1"
- run-async "^0.1.0"
- rx-lite "^3.1.2"
- string-width "^1.0.1"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
-interpret@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0"
-
-invert-kv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-
-is-absolute-url@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
-
-is-absolute@^0.2.3:
- version "0.2.6"
- resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
- dependencies:
- is-relative "^0.2.1"
- is-windows "^0.2.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- dependencies:
- binary-extensions "^1.0.0"
-
-is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-
-is-builtin-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
- dependencies:
- builtin-modules "^1.0.0"
-
-is-dotfile@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- dependencies:
- is-primitive "^2.0.0"
-
-is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-
-is-extglob@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-
-is-finite@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- dependencies:
- is-extglob "^1.0.0"
-
-is-glob@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
- dependencies:
- is-extglob "^2.1.0"
-
-is-installed-globally@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
- dependencies:
- global-dirs "^0.1.0"
- is-path-inside "^1.0.0"
-
-is-my-json-valid@^2.10.0:
- version "2.16.1"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
-is-npm@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
-
-is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- dependencies:
- kind-of "^3.0.2"
-
-is-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
-
-is-path-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-
-is-path-in-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
- dependencies:
- is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
- dependencies:
- path-is-inside "^1.0.1"
-
-is-plain-obj@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-
-is-plain-object@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- dependencies:
- isobject "^3.0.1"
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-
-is-property@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
-
-is-redirect@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
-
-is-relative@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
- dependencies:
- is-unc-path "^0.1.1"
-
-is-resolvable@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
- dependencies:
- tryit "^1.0.1"
-
-is-retry-allowed@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
-
-is-stream@^1.0.0, is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-
-is-svg@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
- dependencies:
- html-comment-regex "^1.1.0"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-is-unc-path@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
- dependencies:
- unc-path-regex "^0.1.0"
-
-is-utf8@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-
-is-windows@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
-
-is@^3.1.0, is@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/is/-/is-3.2.1.tgz#d0ac2ad55eb7b0bec926a5266f6c662aaa83dca5"
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-istanbul@0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.3.tgz#5b714ee0ae493ac5ef204b99f3872bceef73d53a"
- dependencies:
- abbrev "1.0.x"
- async "1.x"
- escodegen "1.8.x"
- esprima "2.7.x"
- fileset "0.2.x"
- handlebars "^4.0.1"
- js-yaml "3.x"
- mkdirp "0.5.x"
- nopt "3.x"
- once "1.x"
- resolve "1.1.x"
- supports-color "^3.1.0"
- which "^1.1.1"
- wordwrap "^1.0.0"
-
-istanbul@^0.3.17:
- version "0.3.22"
- resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.3.22.tgz#3e164d85021fe19c985d1f0e7ef0c3e22d012eb6"
- dependencies:
- abbrev "1.0.x"
- async "1.x"
- escodegen "1.7.x"
- esprima "2.5.x"
- fileset "0.2.x"
- handlebars "^4.0.1"
- js-yaml "3.x"
- mkdirp "0.5.x"
- nopt "3.x"
- once "1.x"
- resolve "1.1.x"
- supports-color "^3.1.0"
- which "^1.1.1"
- wordwrap "^1.0.0"
-
-jade@0.26.3:
- version "0.26.3"
- resolved "https://registry.yarnpkg.com/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c"
- dependencies:
- commander "0.6.1"
- mkdirp "0.3.0"
-
-js-base64@^2.1.9:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.3.2.tgz#a79a923666372b580f8e27f51845c6f7e8fbfbaf"
-
-js-tokens@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-
-js-yaml@3.x, js-yaml@^3.5.1:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-js-yaml@~3.7.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
- dependencies:
- argparse "^1.0.7"
- esprima "^2.6.0"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
-jsdom-no-contextify@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/jsdom-no-contextify/-/jsdom-no-contextify-3.1.0.tgz#0d8beaf610c2ff23894f54dfa7f89dd22fd0f7ab"
- dependencies:
- browser-request ">= 0.3.1 < 0.4.0"
- cssom ">= 0.3.0 < 0.4.0"
- cssstyle ">= 0.2.21 < 0.3.0"
- htmlparser2 ">= 3.7.3 < 4.0.0"
- nwmatcher ">= 1.3.4 < 2.0.0"
- parse5 ">= 1.3.1 < 2.0.0"
- request ">= 2.44.0 < 3.0.0"
- xml-name-validator "^1.0.0"
- xmlhttprequest ">= 1.6.0 < 2.0.0"
-
-json-schema-traverse@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsonpointer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-kind-of@^3.0.2:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- dependencies:
- is-buffer "^1.1.5"
-
-latest-version@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
- dependencies:
- package-json "^4.0.0"
-
-lazy-cache@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lazy-debug-legacy@0.0.X:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz#537716c0776e4cf79e3ed1b621f7658c2911b1b1"
-
-lazy.js@^0.4.2:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/lazy.js/-/lazy.js-0.4.3.tgz#87f67a07ad36555121e4fff1520df31be66786d8"
-
-lcid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
- dependencies:
- invert-kv "^1.0.0"
-
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-levn@~0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054"
- dependencies:
- prelude-ls "~1.1.0"
- type-check "~0.3.1"
-
-liftoff@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385"
- dependencies:
- extend "^3.0.0"
- findup-sync "^0.4.2"
- fined "^1.0.1"
- flagged-respawn "^0.3.2"
- lodash.isplainobject "^4.0.4"
- lodash.isstring "^4.0.1"
- lodash.mapvalues "^4.4.0"
- rechoir "^0.6.2"
- resolve "^1.1.7"
-
-load-json-file@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- strip-bom "^2.0.0"
-
-lodash._arraycopy@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1"
-
-lodash._arrayeach@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e"
-
-lodash._baseassign@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
- dependencies:
- lodash._basecopy "^3.0.0"
- lodash.keys "^3.0.0"
-
-lodash._baseclone@^3.0.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7"
- dependencies:
- lodash._arraycopy "^3.0.0"
- lodash._arrayeach "^3.0.0"
- lodash._baseassign "^3.0.0"
- lodash._basefor "^3.0.0"
- lodash.isarray "^3.0.0"
- lodash.keys "^3.0.0"
-
-lodash._basecopy@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
-
-lodash._basefor@^3.0.0:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2"
-
-lodash._basetostring@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
-
-lodash._basevalues@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
-
-lodash._bindcallback@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
-
-lodash._escapehtmlchar@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d"
- dependencies:
- lodash._htmlescapes "~2.4.1"
-
-lodash._escapestringchar@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz#ecfe22618a2ade50bfeea43937e51df66f0edb72"
-
-lodash._getnative@^3.0.0:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
-
-lodash._htmlescapes@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz#32d14bf0844b6de6f8b62a051b4f67c228b624cb"
-
-lodash._isiterateecall@^3.0.0:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
-
-lodash._isnative@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c"
-
-lodash._objecttypes@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11"
-
-lodash._reescape@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
-
-lodash._reevaluate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
-
-lodash._reinterpolate@^2.4.1, lodash._reinterpolate@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz#4f1227aa5a8711fc632f5b07a1f4607aab8b3222"
-
-lodash._reinterpolate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
-
-lodash._reunescapedhtml@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz#747c4fc40103eb3bb8a0976e571f7a2659e93ba7"
- dependencies:
- lodash._htmlescapes "~2.4.1"
- lodash.keys "~2.4.1"
-
-lodash._root@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
-
-lodash._shimkeys@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203"
- dependencies:
- lodash._objecttypes "~2.4.1"
-
-lodash.clone@3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043"
- dependencies:
- lodash._baseclone "^3.0.0"
- lodash._bindcallback "^3.0.0"
- lodash._isiterateecall "^3.0.0"
-
-lodash.defaults@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54"
- dependencies:
- lodash._objecttypes "~2.4.1"
- lodash.keys "~2.4.1"
-
-lodash.escape@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
- dependencies:
- lodash._root "^3.0.0"
-
-lodash.escape@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz#2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4"
- dependencies:
- lodash._escapehtmlchar "~2.4.1"
- lodash._reunescapedhtml "~2.4.1"
- lodash.keys "~2.4.1"
-
-lodash.isarguments@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
-
-lodash.isarray@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-
-lodash.isobject@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5"
- dependencies:
- lodash._objecttypes "~2.4.1"
-
-lodash.isplainobject@^4.0.4:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
-
-lodash.isstring@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
-
-lodash.keys@^3.0.0:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
- dependencies:
- lodash._getnative "^3.0.0"
- lodash.isarguments "^3.0.0"
- lodash.isarray "^3.0.0"
-
-lodash.keys@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727"
- dependencies:
- lodash._isnative "~2.4.1"
- lodash._shimkeys "~2.4.1"
- lodash.isobject "~2.4.1"
-
-lodash.mapvalues@^4.4.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
-
-lodash.memoize@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
-
-lodash.restparam@^3.0.0:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
-
-lodash.template@^2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz#9e611007edf629129a974ab3c48b817b3e1cf20d"
- dependencies:
- lodash._escapestringchar "~2.4.1"
- lodash._reinterpolate "~2.4.1"
- lodash.defaults "~2.4.1"
- lodash.escape "~2.4.1"
- lodash.keys "~2.4.1"
- lodash.templatesettings "~2.4.1"
- lodash.values "~2.4.1"
-
-lodash.template@^3.0.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
- dependencies:
- lodash._basecopy "^3.0.0"
- lodash._basetostring "^3.0.0"
- lodash._basevalues "^3.0.0"
- lodash._isiterateecall "^3.0.0"
- lodash._reinterpolate "^3.0.0"
- lodash.escape "^3.0.0"
- lodash.keys "^3.0.0"
- lodash.restparam "^3.0.0"
- lodash.templatesettings "^3.0.0"
-
-lodash.templatesettings@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
- dependencies:
- lodash._reinterpolate "^3.0.0"
- lodash.escape "^3.0.0"
-
-lodash.templatesettings@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz#ea76c75d11eb86d4dbe89a83893bb861929ac699"
- dependencies:
- lodash._reinterpolate "~2.4.1"
- lodash.escape "~2.4.1"
-
-lodash.uniq@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-
-lodash.values@~2.4.1:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4"
- dependencies:
- lodash.keys "~2.4.1"
-
-lodash@^4.0.0, lodash@^4.13.1, lodash@^4.3.0:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
-
-lodash@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
-
-lodash@~4.13.x:
- version "4.13.1"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.13.1.tgz#83e4b10913f48496d4d16fec4a560af2ee744b68"
-
-lolex@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31"
-
-longest@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-loud-rejection@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
- dependencies:
- currently-unhandled "^0.4.1"
- signal-exit "^3.0.0"
-
-lowercase-keys@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
-
-lru-cache@2:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
-
-lru-cache@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee"
- dependencies:
- pseudomap "^1.0.1"
-
-lru-cache@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
- dependencies:
- pseudomap "^1.0.2"
- yallist "^2.1.2"
-
-macaddress@^0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
-
-make-dir@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
- dependencies:
- pify "^3.0.0"
-
-make-error-cause@^1.1.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d"
- dependencies:
- make-error "^1.2.0"
-
-make-error@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.0.tgz#52ad3a339ccf10ce62b4040b708fe707244b8b96"
-
-manage-path@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/manage-path/-/manage-path-2.0.0.tgz#f4cf8457b926eeee2a83b173501414bc76eb9597"
-
-map-cache@^0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-
-map-obj@^1.0.0, map-obj@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
-
-map-stream@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
-
-math-expression-evaluator@^1.2.14:
- version "1.2.17"
- resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
-
-meow@^3.3.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
- dependencies:
- camelcase-keys "^2.0.0"
- decamelize "^1.1.2"
- loud-rejection "^1.0.0"
- map-obj "^1.0.1"
- minimist "^1.1.3"
- normalize-package-data "^2.3.4"
- object-assign "^4.0.1"
- read-pkg-up "^1.0.1"
- redent "^1.0.0"
- trim-newlines "^1.0.0"
-
-micromatch@^2.1.5, micromatch@^2.3.7:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-mime-db@~1.30.0:
- version "1.30.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
-
-mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7:
- version "2.1.17"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
- dependencies:
- mime-db "~1.30.0"
-
-minimatch@0.3:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd"
- dependencies:
- lru-cache "2"
- sigmund "~1.0.0"
-
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- dependencies:
- brace-expansion "^1.1.7"
-
-minimatch@2.x, minimatch@^2.0.1, minimatch@^2.0.10:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
- dependencies:
- brace-expansion "^1.0.0"
-
-minimatch@~0.2.11:
- version "0.2.14"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
- dependencies:
- lru-cache "2"
- sigmund "~1.0.0"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce"
-
-minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-minimist@~0.0.1:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-
-mkdirp@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
-
-mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
-mocha@^2.2.5:
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58"
- dependencies:
- commander "2.3.0"
- debug "2.2.0"
- diff "1.4.0"
- escape-string-regexp "1.0.2"
- glob "3.2.11"
- growl "1.9.2"
- jade "0.26.3"
- mkdirp "0.5.1"
- supports-color "1.2.0"
- to-iso-string "0.0.2"
-
-ms@0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-
-multimatch@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b"
- dependencies:
- array-differ "^1.0.0"
- array-union "^1.0.1"
- arrify "^1.0.0"
- minimatch "^3.0.0"
-
-multipipe@^0.1.0, multipipe@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
- dependencies:
- duplexer2 "0.0.2"
-
-mute-stream@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
-
-nan@^2.3.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"
-
-natives@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31"
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-
-node-pre-gyp@^0.6.39:
- version "0.6.39"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
- dependencies:
- detect-libc "^1.0.2"
- hawk "3.1.3"
- mkdirp "^0.5.1"
- nopt "^4.0.1"
- npmlog "^4.0.2"
- rc "^1.1.7"
- request "2.81.0"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^2.2.1"
- tar-pack "^3.4.0"
-
-nopt@3.x:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- dependencies:
- abbrev "1"
-
-nopt@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
- dependencies:
- abbrev "1"
- osenv "^0.1.4"
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
- dependencies:
- hosted-git-info "^2.1.4"
- is-builtin-module "^1.0.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.0.0, normalize-path@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-normalize-range@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
-
-normalize-url@^1.4.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
- dependencies:
- object-assign "^4.0.1"
- prepend-http "^1.0.0"
- query-string "^4.1.0"
- sort-keys "^1.0.0"
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- dependencies:
- path-key "^2.0.0"
-
-npmlog@^4.0.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.3"
- set-blocking "~2.0.0"
-
-num2fraction@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-"nwmatcher@>= 1.3.4 < 2.0.0":
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
-
-oauth-sign@~0.8.1, oauth-sign@~0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-object-assign@4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0"
-
-object-assign@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
-
-object-assign@^4.0.1, object-assign@^4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-
-object.defaults@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
- dependencies:
- array-each "^1.0.1"
- array-slice "^1.0.0"
- for-own "^1.0.0"
- isobject "^3.0.0"
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-object.pick@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- dependencies:
- isobject "^3.0.1"
-
-once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- dependencies:
- wrappy "1"
-
-once@~1.3.0:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
- dependencies:
- wrappy "1"
-
-onetime@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
-
-optimist@^0.6.1, optimist@~0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.5.0.tgz#b75a8995a2d417df25b6e4e3862f50aa88651368"
- dependencies:
- deep-is "~0.1.2"
- fast-levenshtein "~1.0.0"
- levn "~0.2.5"
- prelude-ls "~1.1.1"
- type-check "~0.3.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1, optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- wordwrap "~1.0.0"
-
-orchestrator@^0.3.0:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
- dependencies:
- end-of-stream "~0.1.5"
- sequencify "~0.0.7"
- stream-consume "~0.1.0"
-
-ordered-read-streams@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126"
-
-os-homedir@^1.0.0, os-homedir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-locale@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
- dependencies:
- lcid "^1.0.0"
-
-os-tmpdir@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-osenv@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-
-package-json@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
- dependencies:
- got "^6.7.1"
- registry-auth-token "^3.0.1"
- registry-url "^3.0.3"
- semver "^5.1.0"
-
-parse-filepath@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73"
- dependencies:
- is-absolute "^0.2.3"
- map-cache "^0.2.0"
- path-root "^0.1.1"
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- dependencies:
- error-ex "^1.2.0"
-
-parse-passwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
-
-"parse5@>= 1.3.1 < 2.0.0":
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
-
-path-dirname@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
-
-path-exists@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
- dependencies:
- pinkie-promise "^2.0.0"
-
-path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-is-inside@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-
-path-key@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-
-path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-
-path-root-regex@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
-
-path-root@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
- dependencies:
- path-root-regex "^0.1.0"
-
-path-type@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-pause-stream@0.0.11:
- version "0.0.11"
- resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
- dependencies:
- through "~2.3"
-
-performance-now@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-
-pify@^2.0.0, pify@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-
-pluralize@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
-
-postcss-calc@^5.2.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
- dependencies:
- postcss "^5.0.2"
- postcss-message-helpers "^2.0.0"
- reduce-css-calc "^1.2.6"
-
-postcss-colormin@^2.1.8:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
- dependencies:
- colormin "^1.0.5"
- postcss "^5.0.13"
- postcss-value-parser "^3.2.3"
-
-postcss-convert-values@^2.3.4:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
- dependencies:
- postcss "^5.0.11"
- postcss-value-parser "^3.1.2"
-
-postcss-discard-comments@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
- dependencies:
- postcss "^5.0.14"
-
-postcss-discard-duplicates@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
- dependencies:
- postcss "^5.0.4"
-
-postcss-discard-empty@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
- dependencies:
- postcss "^5.0.14"
-
-postcss-discard-overridden@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
- dependencies:
- postcss "^5.0.16"
-
-postcss-discard-unused@^2.2.1:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
- dependencies:
- postcss "^5.0.14"
- uniqs "^2.0.0"
-
-postcss-filter-plugins@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
- dependencies:
- postcss "^5.0.4"
- uniqid "^4.0.0"
-
-postcss-merge-idents@^2.1.5:
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.10"
- postcss-value-parser "^3.1.1"
-
-postcss-merge-longhand@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
- dependencies:
- postcss "^5.0.4"
-
-postcss-merge-rules@^2.0.3:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
- dependencies:
- browserslist "^1.5.2"
- caniuse-api "^1.5.2"
- postcss "^5.0.4"
- postcss-selector-parser "^2.2.2"
- vendors "^1.0.0"
-
-postcss-message-helpers@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
-
-postcss-minify-font-values@^1.0.2:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
- dependencies:
- object-assign "^4.0.1"
- postcss "^5.0.4"
- postcss-value-parser "^3.0.2"
-
-postcss-minify-gradients@^1.0.1:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
- dependencies:
- postcss "^5.0.12"
- postcss-value-parser "^3.3.0"
-
-postcss-minify-params@^1.0.4:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
- dependencies:
- alphanum-sort "^1.0.1"
- postcss "^5.0.2"
- postcss-value-parser "^3.0.2"
- uniqs "^2.0.0"
-
-postcss-minify-selectors@^2.0.4:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
- dependencies:
- alphanum-sort "^1.0.2"
- has "^1.0.1"
- postcss "^5.0.14"
- postcss-selector-parser "^2.0.0"
-
-postcss-normalize-charset@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
- dependencies:
- postcss "^5.0.5"
-
-postcss-normalize-url@^3.0.7:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
- dependencies:
- is-absolute-url "^2.0.0"
- normalize-url "^1.4.0"
- postcss "^5.0.14"
- postcss-value-parser "^3.2.3"
-
-postcss-ordered-values@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
- dependencies:
- postcss "^5.0.4"
- postcss-value-parser "^3.0.1"
-
-postcss-reduce-idents@^2.2.2:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
- dependencies:
- postcss "^5.0.4"
- postcss-value-parser "^3.0.2"
-
-postcss-reduce-initial@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
- dependencies:
- postcss "^5.0.4"
-
-postcss-reduce-transforms@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.8"
- postcss-value-parser "^3.0.1"
-
-postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
- dependencies:
- flatten "^1.0.2"
- indexes-of "^1.0.1"
- uniq "^1.0.1"
-
-postcss-svgo@^2.1.1:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
- dependencies:
- is-svg "^2.0.0"
- postcss "^5.0.14"
- postcss-value-parser "^3.2.3"
- svgo "^0.7.0"
-
-postcss-unique-selectors@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
- dependencies:
- alphanum-sort "^1.0.1"
- postcss "^5.0.4"
- uniqs "^2.0.0"
-
-postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
-
-postcss-zindex@^2.0.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.4"
- uniqs "^2.0.0"
-
-postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
- version "5.2.18"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
- dependencies:
- chalk "^1.1.3"
- js-base64 "^2.1.9"
- source-map "^0.5.6"
- supports-color "^3.2.3"
-
-prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-prepend-http@^1.0.0, prepend-http@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-
-pretty-hrtime@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
-
-process-nextick-args@^1.0.6, process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-
-progress@^1.1.8:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
-
-pseudomap@^1.0.1, pseudomap@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-
-pump@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.2.tgz#3b3ee6512f94f0e575538c17995f9f16990a5d51"
- dependencies:
- end-of-stream "^1.1.0"
- once "^1.3.1"
-
-punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-q@^1.1.2:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
-
-qs@~6.4.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
-
-qs@~6.5.1:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
-
-query-string@^4.1.0:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
- dependencies:
- object-assign "^4.1.0"
- strict-uri-encode "^1.0.0"
-
-randomatic@^1.1.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077"
- dependencies:
- deep-extend "~0.4.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-read-pkg-up@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
- dependencies:
- find-up "^1.0.0"
- read-pkg "^1.0.0"
-
-read-pkg@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
- dependencies:
- load-json-file "^1.0.0"
- normalize-package-data "^2.3.2"
- path-type "^1.0.0"
-
-"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17:
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- safe-buffer "~5.1.1"
- string_decoder "~1.0.3"
- util-deprecate "~1.0.1"
-
-readable-stream@~1.1.9:
- version "1.1.14"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@~2.0.0:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
- readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-
-readline2@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- mute-stream "0.0.5"
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- dependencies:
- resolve "^1.1.6"
-
-redent@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
- dependencies:
- indent-string "^2.1.0"
- strip-indent "^1.0.1"
-
-reduce-css-calc@^1.2.6:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
- dependencies:
- balanced-match "^0.4.2"
- math-expression-evaluator "^1.2.14"
- reduce-function-call "^1.0.1"
-
-reduce-function-call@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
- dependencies:
- balanced-match "^0.4.2"
-
-regex-cache@^0.4.2:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
- dependencies:
- is-equal-shallow "^0.1.3"
-
-registry-auth-token@^3.0.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006"
- dependencies:
- rc "^1.1.6"
- safe-buffer "^5.0.1"
-
-registry-url@^3.0.3:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
- dependencies:
- rc "^1.0.1"
-
-remap-istanbul@^0.6.4:
- version "0.6.4"
- resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.6.4.tgz#ac551eff1aa641504b4f318d0303dda61e3bb695"
- dependencies:
- amdefine "1.0.0"
- gulp-util "3.0.7"
- istanbul "0.4.3"
- source-map ">=0.5.6"
- through2 "2.0.1"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-
-repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
-
-repeat-string@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-repeating@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
- dependencies:
- is-finite "^1.0.0"
-
-replace-ext@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
-
-replace-ext@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
-
-request@2.81.0:
- version "2.81.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~4.2.1"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- oauth-sign "~0.8.1"
- performance-now "^0.2.0"
- qs "~6.4.0"
- safe-buffer "^5.0.1"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "^0.6.0"
- uuid "^3.0.0"
-
-"request@>= 2.44.0 < 3.0.0":
- version "2.83.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.6.0"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.1"
- forever-agent "~0.6.1"
- form-data "~2.3.1"
- har-validator "~5.0.3"
- hawk "~6.0.2"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.17"
- oauth-sign "~0.8.2"
- performance-now "^2.1.0"
- qs "~6.5.1"
- safe-buffer "^5.1.1"
- stringstream "~0.0.5"
- tough-cookie "~2.3.3"
- tunnel-agent "^0.6.0"
- uuid "^3.1.0"
-
-require-uncached@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
- dependencies:
- caller-path "^0.1.0"
- resolve-from "^1.0.0"
-
-resolve-dir@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
- dependencies:
- expand-tilde "^1.2.2"
- global-modules "^0.2.3"
-
-resolve-from@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
-
-resolve-url@~0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-
-resolve@1.1.x:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-
-resolve@^1.1.6, resolve@^1.1.7:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
- dependencies:
- path-parse "^1.0.5"
-
-restore-cursor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
- dependencies:
- exit-hook "^1.0.0"
- onetime "^1.0.0"
-
-right-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
- dependencies:
- align-text "^0.1.1"
-
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
- dependencies:
- glob "^7.0.5"
-
-run-async@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
- dependencies:
- once "^1.3.0"
-
-rx-lite@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-
-samsam@1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567"
-
-samsam@~1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621"
-
-sax@>=0.6.0, sax@~1.2.1:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-
-semver-diff@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
- dependencies:
- semver "^5.0.3"
-
-"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0:
- version "5.4.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e"
-
-semver@^4.1.0:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
-
-sequencify@~0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c"
-
-set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-
-shelljs@^0.7.5:
- version "0.7.8"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-sigmund@^1.0.1, sigmund@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
-
-signal-exit@^3.0.0, signal-exit@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-
-sinon@^1.17.2:
- version "1.17.7"
- resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf"
- dependencies:
- formatio "1.1.1"
- lolex "1.3.2"
- samsam "1.1.2"
- util ">=0.10.3 <1"
-
-slash@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-
-slice-ansi@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
-
-sntp@1.x.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
- dependencies:
- hoek "2.x.x"
-
-sntp@2.x.x:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
- dependencies:
- hoek "4.x.x"
-
-sort-keys@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
- dependencies:
- is-plain-obj "^1.0.0"
-
-source-map-resolve@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.3.1.tgz#610f6122a445b8dd51535a2a71b783dfc1248761"
- dependencies:
- atob "~1.1.0"
- resolve-url "~0.2.1"
- source-map-url "~0.3.0"
- urix "~0.1.0"
-
-source-map-url@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.3.0.tgz#7ecaf13b57bcd09da8a40c5d269db33799d4aaf9"
-
-source-map@0.X, source-map@>=0.5.6:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-
-source-map@^0.1.38:
- version "0.1.43"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- dependencies:
- amdefine ">=0.0.4"
-
-sparkles@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
-
-spawn-command@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e"
-
-spdx-correct@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
- dependencies:
- spdx-license-ids "^1.0.2"
-
-spdx-expression-parse@~1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
-
-spdx-license-ids@^1.0.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
-
-split@0.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f"
- dependencies:
- through "2"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-sshpk@^1.7.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
-stream-combiner@~0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
- dependencies:
- duplexer "~0.1.1"
-
-stream-consume@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f"
-
-streamfilter@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-1.0.5.tgz#87507111beb8e298451717b511cfed8f002abf53"
- dependencies:
- readable-stream "^2.0.2"
-
-strict-uri-encode@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
-
-string-width@^1.0.1, string-width@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
-string_decoder@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
- dependencies:
- safe-buffer "~5.1.0"
-
-stringstream@~0.0.4, stringstream@~0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-
-strip-ansi@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220"
- dependencies:
- ansi-regex "^0.2.1"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-bom-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca"
- dependencies:
- first-chunk-stream "^2.0.0"
- strip-bom "^2.0.0"
-
-strip-bom@2.X, strip-bom@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
- dependencies:
- is-utf8 "^0.2.0"
-
-strip-bom@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794"
- dependencies:
- first-chunk-stream "^1.0.0"
- is-utf8 "^0.2.0"
-
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-
-strip-indent@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
- dependencies:
- get-stdin "^4.0.1"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-supports-color@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e"
-
-supports-color@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-supports-color@^3.1.0, supports-color@^3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
- dependencies:
- has-flag "^1.0.0"
-
-supports-color@^4.0.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
- dependencies:
- has-flag "^2.0.0"
-
-svgo@^0.7.0:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
- dependencies:
- coa "~1.0.1"
- colors "~1.1.2"
- csso "~2.3.1"
- js-yaml "~3.7.0"
- mkdirp "~0.5.1"
- sax "~1.2.1"
- whet.extend "~0.9.9"
-
-table@^3.7.8:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
- dependencies:
- ajv "^4.7.0"
- ajv-keywords "^1.0.0"
- chalk "^1.1.1"
- lodash "^4.0.0"
- slice-ansi "0.0.4"
- string-width "^2.0.0"
-
-tar-pack@^3.4.0:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
- dependencies:
- debug "^2.2.0"
- fstream "^1.0.10"
- fstream-ignore "^1.0.5"
- once "^1.3.3"
- readable-stream "^2.1.4"
- rimraf "^2.5.1"
- tar "^2.2.1"
- uid-number "^0.0.6"
-
-tar@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
- dependencies:
- block-stream "*"
- fstream "^1.0.2"
- inherits "2"
-
-term-size@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
- dependencies:
- execa "^0.7.0"
-
-text-table@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-
-through2@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9"
- dependencies:
- readable-stream "~2.0.0"
- xtend "~4.0.0"
-
-through2@2.X, through2@^2.0.0, through2@^2.0.1, through2@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
- dependencies:
- readable-stream "^2.1.5"
- xtend "~4.0.1"
-
-through2@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7"
- dependencies:
- readable-stream "~1.0.17"
- xtend "~3.0.0"
-
-through2@^0.6.1, through2@~0.6.3:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
- dependencies:
- readable-stream ">=1.0.33-1 <1.1.0-0"
- xtend ">=4.0.0 <4.1.0-0"
-
-through@2, through@^2.3.6, through@~2.3, through@~2.3.1, through@~2.3.8:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-
-tildify@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a"
- dependencies:
- os-homedir "^1.0.0"
-
-time-stamp@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
-
-timed-out@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
-
-to-iso-string@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1"
-
-tough-cookie@~2.3.0, tough-cookie@~2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
- dependencies:
- punycode "^1.4.1"
-
-trim-newlines@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
-
-tryit@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
-
-tslint@^4.3.1:
- version "4.5.1"
- resolved "https://registry.yarnpkg.com/tslint/-/tslint-4.5.1.tgz#05356871bef23a434906734006fc188336ba824b"
- dependencies:
- babel-code-frame "^6.20.0"
- colors "^1.1.2"
- diff "^3.0.1"
- findup-sync "~0.3.0"
- glob "^7.1.1"
- optimist "~0.6.0"
- resolve "^1.1.7"
- tsutils "^1.1.0"
- update-notifier "^2.0.0"
-
-tsutils@^1.1.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- dependencies:
- safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
-type-check@~0.3.1, type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- dependencies:
- prelude-ls "~1.1.2"
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-
-typescript-formatter@4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/typescript-formatter/-/typescript-formatter-4.0.1.tgz#ed82daf856cc9a379bb16b7f1aac9affee2974cd"
- dependencies:
- commandpost "^1.0.0"
- editorconfig "^0.13.2"
- glob-expand "^0.2.1"
-
-typescript@2.6.1, typescript@^2.0.3:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631"
-
-uglify-js@^2.6, uglify-js@~2.8.10:
- version "2.8.29"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
- dependencies:
- source-map "~0.5.1"
- yargs "~3.10.0"
- optionalDependencies:
- uglify-to-browserify "~1.0.0"
-
-uglify-save-license@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz#95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1"
-
-uglify-to-browserify@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-uid-number@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-
-unc-path-regex@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
-
-underscore@^1.8.2:
- version "1.8.3"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
-
-uniq@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
-
-uniqid@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
- dependencies:
- macaddress "^0.2.8"
-
-uniqs@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
-
-unique-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b"
-
-unique-string@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
- dependencies:
- crypto-random-string "^1.0.0"
-
-unzip-response@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
-
-update-notifier@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451"
- dependencies:
- boxen "^1.2.1"
- chalk "^2.0.1"
- configstore "^3.0.0"
- import-lazy "^2.1.0"
- is-installed-globally "^0.1.0"
- is-npm "^1.0.0"
- latest-version "^3.0.0"
- semver-diff "^2.0.0"
- xdg-basedir "^3.0.0"
-
-urix@^0.1.0, urix@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-
-url-parse-lax@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
- dependencies:
- prepend-http "^1.0.1"
-
-user-home@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
-
-user-home@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
- dependencies:
- os-homedir "^1.0.0"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-"util@>=0.10.3 <1":
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- dependencies:
- inherits "2.0.1"
-
-uuid@^3.0.0, uuid@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04"
-
-v8flags@^2.0.2:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
- dependencies:
- user-home "^1.1.1"
-
-validate-npm-package-license@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
- dependencies:
- spdx-correct "~1.0.0"
- spdx-expression-parse "~1.0.0"
-
-vendors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-vinyl-file@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a"
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.3.0"
- pinkie-promise "^2.0.0"
- strip-bom "^2.0.0"
- strip-bom-stream "^2.0.0"
- vinyl "^1.1.0"
-
-vinyl-fs@^0.3.0:
- version "0.3.14"
- resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"
- dependencies:
- defaults "^1.0.0"
- glob-stream "^3.1.5"
- glob-watcher "^0.0.6"
- graceful-fs "^3.0.0"
- mkdirp "^0.5.0"
- strip-bom "^1.0.0"
- through2 "^0.6.1"
- vinyl "^0.4.0"
-
-vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705"
- dependencies:
- source-map "^0.5.1"
-
-vinyl@1.X, vinyl@^1.1.0, vinyl@^1.1.1, vinyl@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
- dependencies:
- clone "^1.0.0"
- clone-stats "^0.0.1"
- replace-ext "0.0.1"
-
-vinyl@^0.2.1:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz#bca938209582ec5a49ad538a00fa1f125e513252"
- dependencies:
- clone-stats "~0.0.1"
-
-vinyl@^0.4.0, vinyl@^0.4.3, vinyl@^0.4.5:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
- dependencies:
- clone "^0.2.0"
- clone-stats "^0.0.1"
-
-vinyl@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
- dependencies:
- clone "^1.0.0"
- clone-stats "^0.0.1"
- replace-ext "0.0.1"
-
-vinyl@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c"
- dependencies:
- clone "^2.1.1"
- clone-buffer "^1.0.0"
- clone-stats "^1.0.0"
- cloneable-readable "^1.0.0"
- remove-trailing-separator "^1.0.1"
- replace-ext "^1.0.0"
-
-vscode-nls-dev@^2.0.1:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/vscode-nls-dev/-/vscode-nls-dev-2.1.5.tgz#19faa3b18a7f302201039a4c967bbd22fa12844d"
- dependencies:
- clone "^1.0.2"
- event-stream "^3.3.2"
- glob "^6.0.4"
- gulp-util "^3.0.7"
- iconv-lite "^0.4.15"
- is "^3.2.1"
- source-map "^0.5.3"
- typescript "^2.0.3"
- vinyl "^1.1.1"
- xml2js "^0.4.17"
- yargs "^3.32.0"
-
-whet.extend@~0.9.9:
- version "0.9.9"
- resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
-
-which@^1.1.1, which@^1.2.12, which@^1.2.9:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
- dependencies:
- isexe "^2.0.0"
-
-wide-align@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
- dependencies:
- string-width "^1.0.2"
-
-widest-line@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c"
- dependencies:
- string-width "^1.0.1"
-
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-window-size@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"
-
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wordwrap@^1.0.0, wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-write-file-atomic@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
- dependencies:
- graceful-fs "^4.1.11"
- imurmurhash "^0.1.4"
- signal-exit "^3.0.2"
-
-write@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
- dependencies:
- mkdirp "^0.5.1"
-
-xdg-basedir@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
-
-xml-name-validator@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-1.0.0.tgz#dcf82ee092322951ef8cc1ba596c9cbfd14a83f1"
-
-xml2js@^0.4.17:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
- dependencies:
- sax ">=0.6.0"
- xmlbuilder "~9.0.1"
-
-xmlbuilder@~9.0.1:
- version "9.0.4"
- resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.4.tgz#519cb4ca686d005a8420d3496f3f0caeecca580f"
-
-"xmlhttprequest@>= 1.6.0 < 2.0.0":
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
-
-"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-
-xtend@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
-
-y18n@^3.2.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-
-yallist@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-
-yargs@^3.32.0:
- version "3.32.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995"
- dependencies:
- camelcase "^2.0.1"
- cliui "^3.0.3"
- decamelize "^1.1.1"
- os-locale "^1.4.0"
- string-width "^1.0.1"
- window-size "^0.1.4"
- y18n "^3.2.0"
-
-yargs@~3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
- dependencies:
- camelcase "^1.0.2"
- cliui "^2.1.0"
- decamelize "^1.0.0"
- window-size "0.1.0"
diff --git a/build/npm/postinstall.js b/build/npm/postinstall.js
index 6df0b4ecb..ea2d2d9a2 100644
--- a/build/npm/postinstall.js
+++ b/build/npm/postinstall.js
@@ -60,4 +60,11 @@ runtime "${runtime}"`;
yarnInstall(`build`); // node modules required for build
yarnInstall('test/smoke'); // node modules required for smoketest
-yarnInstallBuildDependencies(); // node modules for watching, specific to host node version, not electron
\ No newline at end of file
+yarnInstallBuildDependencies(); // node modules for watching, specific to host node version, not electron
+
+// Remove the windows process tree typings as this causes duplicate identifier errors in tsc builds
+const processTreeDts = path.join('node_modules', 'windows-process-tree', 'typings', 'windows-process-tree.d.ts');
+if (fs.existsSync(processTreeDts)) {
+ console.log('Removing windows-process-tree.d.ts');
+ fs.unlinkSync(processTreeDts);
+}
\ No newline at end of file
diff --git a/build/package.json b/build/package.json
index 9ad3ffbe1..7e096ee9b 100644
--- a/build/package.json
+++ b/build/package.json
@@ -16,6 +16,8 @@
"@types/gulp-util": "^3.0.34",
"@types/mime": "0.0.29",
"@types/minimatch": "^3.0.3",
+ "@types/minimist": "^1.2.0",
+ "@types/mocha": "2.2.39",
"@types/node": "8.0.33",
"@types/pump": "^1.0.1",
"@types/request": "^2.47.0",
@@ -25,15 +27,19 @@
"@types/uglify-es": "^3.0.0",
"@types/underscore": "^1.8.9",
"@types/xml2js": "0.0.33",
+ "applicationinsights": "1.0.6",
"azure-storage": "^2.1.0",
"documentdb": "1.13.0",
"github-releases": "^0.4.1",
"gulp-bom": "^1.0.0",
"gulp-sourcemaps": "^1.11.0",
+ "iconv-lite": "0.4.23",
"mime": "^1.3.4",
"minimist": "^1.2.0",
"request": "^2.85.0",
- "typescript": "3.1.1",
+ "tslint": "^5.9.1",
+ "typescript": "3.1.4",
+ "vsce": "1.48.0",
"xml2js": "^0.4.17"
},
"scripts": {
diff --git a/build/tfs/continuous-build.yml b/build/tfs/continuous-build.yml
deleted file mode 100644
index a1d4be713..000000000
--- a/build/tfs/continuous-build.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-jobs:
-- job: Windows
- pool:
- vmImage: VS2017-Win2016
- steps:
- - template: win32/continuous-build-win32.yml
-
-- job: Linux
- pool: Hosted Linux Preview
- steps:
- - template: linux/continuous-build-linux.yml
-
-- job: macOS
- pool:
- vmImage: macOS 10.13
- steps:
- - template: darwin/continuous-build-darwin.yml
\ No newline at end of file
diff --git a/build/tfs/darwin/enqueue.js b/build/tfs/darwin/enqueue.js
deleted file mode 100644
index d2243ad6a..000000000
--- a/build/tfs/darwin/enqueue.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-'use strict';
-Object.defineProperty(exports, "__esModule", { value: true });
-const child_process_1 = require("child_process");
-const azure = require("azure-storage");
-function queueSigningRequest(quality, commit) {
- const retryOperations = new azure.ExponentialRetryPolicyFilter();
- const queueSvc = azure
- .createQueueService(process.env['AZURE_STORAGE_ACCOUNT_2'], process.env['AZURE_STORAGE_ACCESS_KEY_2'])
- .withFilter(retryOperations);
- queueSvc.messageEncoder = new azure.QueueMessageEncoder.TextBase64QueueMessageEncoder();
- const message = `${quality}/${commit}`;
- return new Promise((c, e) => queueSvc.createMessage('sign-darwin', message, err => err ? e(err) : c()));
-}
-async function main(quality) {
- const commit = child_process_1.execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
- console.log(`Queueing signing request for '${quality}/${commit}'...`);
- await queueSigningRequest(quality, commit);
- // console.log('Waiting on signed build...');
- // await waitForSignedBuild(quality, commit);
- // console.log('Found signed build!');
-}
-main(process.argv[2]).catch(err => {
- console.error(err);
- process.exit(1);
-});
diff --git a/build/tfs/darwin/enqueue.ts b/build/tfs/darwin/enqueue.ts
deleted file mode 100644
index 2da255b0b..000000000
--- a/build/tfs/darwin/enqueue.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-'use strict';
-
-import { execSync } from 'child_process';
-import * as azure from 'azure-storage';
-
-
-function queueSigningRequest(quality: string, commit: string): Promise {
- const retryOperations = new azure.ExponentialRetryPolicyFilter();
- const queueSvc = azure
- .createQueueService(process.env['AZURE_STORAGE_ACCOUNT_2']!, process.env['AZURE_STORAGE_ACCESS_KEY_2']!)
- .withFilter(retryOperations);
-
- queueSvc.messageEncoder = new azure.QueueMessageEncoder.TextBase64QueueMessageEncoder();
-
- const message = `${quality}/${commit}`;
-
- return new Promise((c, e) => queueSvc.createMessage('sign-darwin', message, err => err ? e(err) : c()));
-}
-
-
-async function main(quality: string): Promise {
- const commit = execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
-
- console.log(`Queueing signing request for '${quality}/${commit}'...`);
- await queueSigningRequest(quality, commit);
-
- // console.log('Waiting on signed build...');
- // await waitForSignedBuild(quality, commit);
-
- // console.log('Found signed build!');
-}
-
-main(process.argv[2]).catch(err => {
- console.error(err);
- process.exit(1);
-});
\ No newline at end of file
diff --git a/build/tfs/linux/.gitignore b/build/tfs/linux/.gitignore
deleted file mode 100644
index 5ca5f22fc..000000000
--- a/build/tfs/linux/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-pat
-*.js
\ No newline at end of file
diff --git a/build/tfs/linux/frozen-check.ts b/build/tfs/linux/frozen-check.ts
deleted file mode 100644
index 09bc36a24..000000000
--- a/build/tfs/linux/frozen-check.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-'use strict';
-
-import { DocumentClient } from 'documentdb';
-
-interface Config {
- id: string;
- frozen: boolean;
-}
-
-function createDefaultConfig(quality: string): Config {
- return {
- id: quality,
- frozen: false
- };
-}
-
-function getConfig(quality: string): Promise {
- const client = new DocumentClient(process.env['AZURE_DOCUMENTDB_ENDPOINT']!, { masterKey: process.env['AZURE_DOCUMENTDB_MASTERKEY'] });
- const collection = 'dbs/builds/colls/config';
- const query = {
- query: `SELECT TOP 1 * FROM c WHERE c.id = @quality`,
- parameters: [
- { name: '@quality', value: quality }
- ]
- };
-
- return new Promise((c, e) => {
- client.queryDocuments(collection, query).toArray((err, results) => {
- if (err && err.code !== 409) { return e(err); }
-
- c(!results || results.length === 0 ? createDefaultConfig(quality) : results[0] as any as Config);
- });
- });
-}
-
-getConfig(process.argv[2])
- .then(config => {
- console.log(config.frozen);
- process.exit(0);
- })
- .catch(err => {
- console.error(err);
- process.exit(1);
- });
\ No newline at end of file
diff --git a/build/tfs/linux/ia32/Dockerfile b/build/tfs/linux/ia32/Dockerfile
deleted file mode 100644
index 25d621d99..000000000
--- a/build/tfs/linux/ia32/Dockerfile
+++ /dev/null
@@ -1,53 +0,0 @@
-FROM microsoft/vsts-agent:ubuntu-14.04-standard
-MAINTAINER Joao Moreno
-
-ARG DEBIAN_FRONTEND=noninteractive
-RUN dpkg --add-architecture i386
-RUN apt-get update
-
-# Dependencies
-RUN apt-get install -y build-essential
-RUN apt-get install -y gcc-multilib g++-multilib
-RUN apt-get install -y git
-RUN apt-get install -y zip
-RUN apt-get install -y rpm
-RUN apt-get install -y createrepo
-RUN apt-get install -y python-gtk2
-RUN apt-get install -y jq
-RUN apt-get install -y xvfb
-RUN apt-get install -y fakeroot
-RUN apt-get install -y libgtk2.0-0:i386
-RUN apt-get install -y libgconf-2-4:i386
-RUN apt-get install -y libnss3:i386
-RUN apt-get install -y libasound2:i386
-RUN apt-get install -y libxtst6:i386
-RUN apt-get install -y libfuse2
-RUN apt-get install -y libnotify-bin
-RUN apt-get install -y libnotify4:i386
-RUN apt-get install -y libx11-dev:i386
-RUN apt-get install -y libxkbfile-dev:i386
-RUN apt-get install -y libxss1:i386
-RUN apt-get install -y libx11-xcb-dev:i386
-RUN apt-get install -y libgl1-mesa-glx:i386 libgl1-mesa-dri:i386
-RUN apt-get install -y libxkbfile-dev
-RUN apt-get install -y bc bsdmainutils
-RUN apt-get install -y libgirepository-1.0-1:i386 gir1.2-glib-2.0:i386 gir1.2-secret-1:i386 libsecret-1-dev:i386
-RUN apt-get install -y dpkg-dev:i386
-
-# Xvfb
-# Thanks https://medium.com/@griggheo/running-headless-selenium-webdriver-tests-in-docker-containers-342fdbabf756
-ADD xvfb.init /etc/init.d/xvfb
-RUN chmod +x /etc/init.d/xvfb
-RUN update-rc.d xvfb defaults
-
-# dbus
-RUN ln -sf /bin/dbus-daemon /usr/bin/dbus-daemon
-
-# nvm
-ENV NVM_DIR /usr/local/nvm
-RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
-
-# for libsecret
-ENV PKG_CONFIG_PATH /usr/lib/i386-linux-gnu/pkgconfig
-
-CMD (service xvfb start; service dbus start; export DISPLAY=:10; ./start.sh)
\ No newline at end of file
diff --git a/build/tfs/linux/ia32/run-agent.sh b/build/tfs/linux/ia32/run-agent.sh
deleted file mode 100755
index bcf9017f3..000000000
--- a/build/tfs/linux/ia32/run-agent.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-if [ ! -f pat ]; then
- echo "Error: file pat not found"
- exit 1
-fi
-
-docker run \
- -e VSTS_ACCOUNT="monacotools" \
- -e VSTS_TOKEN="$(cat pat)" \
- -e VSTS_AGENT="tb-lnx-ia32-local" \
- -e VSTS_POOL="linux-ia32" \
- -e VSTS_WORK="/var/vsts/work" \
- --name "tb-lnx-ia32-local" \
- -it joaomoreno/vscode-vso-agent-ia32:latest
\ No newline at end of file
diff --git a/build/tfs/linux/new_package.json.template b/build/tfs/linux/new_package.json.template
deleted file mode 100644
index 77e2ada92..000000000
--- a/build/tfs/linux/new_package.json.template
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "name": "PACKAGENAME",
- "version": "PACKAGEVERSION",
- "repositoryId": "REPOSITORYID",
- "sourceUrl": "PACKAGEURL"
-}
\ No newline at end of file
diff --git a/build/tfs/linux/repoapi_client.sh b/build/tfs/linux/repoapi_client.sh
deleted file mode 100755
index b700aceff..000000000
--- a/build/tfs/linux/repoapi_client.sh
+++ /dev/null
@@ -1,365 +0,0 @@
-#!/bin/bash -e
-# This is a VERY basic script for Create/Delete operations on repos and packages
-#
-cmd=$1
-docDir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # chrmarti: Changed to script's directory.
-packageJsonTemplate=$docDir/new_package.json.template
-repoJsonTemplate=$docDir/new_repo.json.template
-
-function Bail
-{
- echo "ERROR: $@"
- exit 1
-}
-
-function BailIfFileMissing {
- file="$1"
- if [ ! -f "$file" ]; then
- Bail "File $file does not exist"
- fi
-}
-
-function Usage {
- echo "USAGE: Manage repos and packages in an apt repository"
- echo "$0 -config FILENAME -listrepos | -listpkgs | -addrepo FILENAME | -addpkg FILENAME |"
- echo "-addpkgs FILENAME | -check ID | -delrepo REPOID | -delpkg PKGID"
- echo -e "\t-config FILENAME : JSON file containing API server name and creds"
- echo -e "Package Operations:"
- echo -e "\t-listpkgs [REGEX] : List packages, optionally filter by REGEX"
- echo -e "\t-addpkg FILENAME : Add package to repo using the specified JSON file"
- echo -e "\t-addpkgs FILENAME : Add packages to repo using urls contained in FILENAME"
- echo -e "\t-check ID : Check upload operation by ID"
- echo -e "\t-delpkg PKGID : Delete the specified package by ID"
- echo -e "File Operations:"
- echo -e "\t-uploadfile FILENAME: Upload FILENAME (does not publish) "
- echo -e "\t-addfile FILENAME : Upload FILENAME AND publish to the repo"
- echo -e "\t-listfiles : List uploaded files"
- echo -e "\t-delfile FILEID : Delete uploaded file by ID"
- echo -e "Repository Operations:"
- echo -e "\t-listrepos : List repositories"
- echo -e "\t-addrepo FILENAME : Create a new repo using the specified JSON file"
- echo -e "\t-delrepo REPOID : Delete the specified repo by ID"
- exit 1
-}
-
-function ParseFromJson {
- if [ -z "$secretContents" ]; then
- Bail "Unable to parse value because no JSON contents were specified"
- elif [ -z "$1" ]; then
- Bail "Unable to parse value from JSON because no key was specified"
- fi
- # Write value directly to stdout to be used by caller
- echo $secretContents | jq "$1" | tr -d '"'
-}
-
-function ParseConfigFile {
- configFile="$1"
- if [ -z "$configFile" ]; then
- echo "Must specify -config option"
- Usage
- fi
- BailIfFileMissing "$configFile"
- secretContents=$(cat "$configFile")
-
- server=$(ParseFromJson .server)
- protocol=$(ParseFromJson .protocol)
- port=$(ParseFromJson .port)
- repositoryId=$(ParseFromJson .repositoryId)
- user=$(ParseFromJson .username)
- pass=$(ParseFromJson .password)
- baseurl="$protocol://$user:$pass@$server:$port"
-}
-
-# List Repositories
-function ListRepositories
-{
- echo "Fetching repo list from $server..."
- curl -k "$baseurl/v1/repositories" | sed 's/,/,\n/g' | sed 's/^"/\t"/g'
- echo ""
-}
-
-# List packages, using $1 as a regex to filter results
-function ListPackages
-{
- echo "Fetching package list from $server"
- curl -k "$baseurl/v1/packages" | sed 's/{/\n{/g' | egrep "$1" | sed 's/,/,\n/g' | sed 's/^"/\t"/g'
- echo ""
-}
-
-# Create a new Repo using the specified JSON file
-function AddRepo
-{
- repoFile=$1
- if [ -z $repoFile ]; then
- Bail "Error: Must specify a JSON-formatted file. Reference $repoJsonTemplate"
- fi
- if [ ! -f $repoFile ]; then
- Bail "Error: Cannot create repo - $repoFile does not exist"
- fi
- packageUrl=$(grep "url" $repoFile | head -n 1 | awk '{print $2}' | tr -d ',')
- echo "Creating new repo on $server [$packageUrl]"
- curl -i -k "$baseurl/v1/repositories" --data @$repoFile -H "Content-Type: application/json"
- echo ""
-}
-
-# Upload AND publish the file
-function AddFile
-{
- packageFile=$1
- # Validity checks are performed by UploadFile
- echo "Uploading package to $server [$packageFile]"
- response=$(UploadFile $packageFile "true")
- id=$(echo $response | jq -r ".id")
-
- # Parse package metadata first to confirm it's a valid deb/rpm
- # Needs to be performed in this function so we can use it to publish the package
- jsonFile=$(WritePackageInfoToFile $packageFile)
-
- sed -i "s/REPOSITORYID/$repositoryId/g" $jsonFile
- # Replace the url field with fileId
- sed -i "s/PACKAGEURL/$id/g" $jsonFile
- sed -i "s/sourceUrl/fileId/g" $jsonFile
-
- AddPackage $jsonFile
- rm -f $jsonFile
- echo ""
-}
-
-# Upload a file
-function UploadFile
-{
- packageFile=$1
- quick=$2
- if [ -z $packageFile ]; then
- Bail "Error: Must specify the path to a file to upload "
- fi
- if [ ! -f $packageFile ]; then
- Bail "Error: Cannot upload - $packageFile does not exist"
- fi
-
- # Additional validation and output if quick mode isn't enabled
- # Basically, if this is part of a publish operation, these steps are handled elsewhere
- if [ "$quick" != "true" ]; then
- # Parse package metadata first to confirm it's a valid deb/rpm
- jsonFile=$(WritePackageInfoToFile $packageFile)
- rm -f $jsonFile
-
- echo "Uploading package to $server [$packageFile]"
- fi
- curl -s -k -X POST -F file=@$packageFile "$baseurl/v1/files"
- echo ""
-}
-
-function ListFiles
-{
- curl -s -k "$baseurl/v1/files" | jq
-}
-
-function DeleteFile
-{
- fileId=$1
- if [ -z "$fileId" ]; then
- Bail "Error: Must specify an ID to delete"
- fi
- curl -s -X DELETE "$baseurl/v1/files/$fileId"
-}
-
-# Upload a single package using the specified JSON file
-function AddPackage
-{
- packageFile=$1
- if [ -z $packageFile ]; then
- Bail "Error: Must specify a JSON-formatted file. Reference $packageJsonTemplate"
- fi
- if [ ! -f $packageFile ]; then
- Bail "Error: Cannot add package - $packageFile does not exist"
- fi
- packageUrl=$(grep "sourceUrl" $packageFile | head -n 1 | awk '{print $2}')
- echo "Adding package to $server [$packageUrl]"
- curl -i -k "$baseurl/v1/packages" --data @$packageFile -H "Content-Type: application/json"
- echo ""
-}
-
-# Gets the package name and version and writes it to a file
-function WritePackageInfoToFile
-{
- packageFile=$1
- tmpOut=$(mktemp)
- if [ -z "$packageFile" ]; then
- Bail "Error: Must specify path to a deb/rpm package"
- elif [ ! -f "$packageFile" ]; then
- Bail "Error: Specified file $packageFile does not exist"
- fi
- if dpkg -I $packageFile > $tmpOut 2> /dev/null; then
- >&2 echo "File is deb format"
- pkgName=$(grep "^\s*Package:" $tmpOut | awk '{print $2}')
- pkgVer=$(grep "^\s*Version:" $tmpOut | awk '{print $2}')
- elif rpm -qpi $packageFile > $tmpOut 2> /dev/null; then
- >&2 echo "File is rpm format"
- pkgName=$(egrep "^Name" $tmpOut | tr -d ':' | awk '{print $2}')
- pkgVer=$(egrep "^Version" $tmpOut | tr -d ':' | awk '{print $2}')
- else
- rm -f $tmpOut
- Bail "File is not a valid deb/rpm package $url"
- fi
-
- rm -f $tmpOut
- if [ -z "$pkgName" ]; then
- Bail "Unable to parse package name for $url"
- elif [ -z "$pkgVer" ]; then
- Bail "Unable to parse package version number for $url"
- fi
-
- # Create Package .json file
- outJson=$(mktemp)
- escapedUrl=$(echo "$url" | sed 's/\//\\\//g' | sed 's/\&/\\\&/g')
- cp $packageJsonTemplate $outJson
- sed -i "s/PACKAGENAME/$pkgName/g" $outJson
- sed -i "s/PACKAGEVERSION/$pkgVer/g" $outJson
-
- # Return path to json file
- echo $outJson
-}
-
-# Upload a single package by dynamically creating a JSON file using a provided URL
-function AddPackageByUrl
-{
- url=$(echo "$1")
- if [ -z "$url" ]; then
- Bail "Unable to publish package because no URL was specified"
- fi
- tmpFile=$(mktemp)
- if ! wget -q "$url" -O $tmpFile; then
- rm -f $tmpFile
- Bail "Unable to download URL $url"
- fi
-
- jsonFile=$(WritePackageInfoToFile $tmpFile)
- # Create Package .json file
- escapedUrl=$(echo "$url" | sed 's/\//\\\//g' | sed 's/\&/\\\&/g')
- sed -i "s/PACKAGEURL/$escapedUrl/g" $jsonFile
- sed -i "s/REPOSITORYID/$repositoryId/g" $jsonFile
- # Perform Upload
- AddPackage $jsonFile
- # Cleanup
- rm -f $jsonFile
-}
-
-# Upload multiple packages by reading urls line-by-line from the specified file
-function AddPackages
-{
- urlFile=$1
- if [ -z $urlFile ]; then
- Bail "Must specify a flat text file containing one or more URLs"
- fi
- if [ ! -f $urlFile ]; then
- Bail "Cannot add packages. File $urlFile does not exist"
- fi
- for url in $(cat $urlFile); do
- if [ -n "$url" ]; then
- AddPackageByUrl "$url"
- fi
- sleep 5
- done
-}
-
-# Check upload by ID
-function CheckUpload {
- id=$1
- if [ -z "$id" ]; then
- Bail "Must specify an ID"
- fi
- curl -s -k $baseurl/v1/packages/queue/$id | jq
- echo ""
-}
-
-# Delete the specified repo
-function DeleteRepo
-{
- repoId=$1
- if [ -z $repoId ]; then
- Bail "Please specify repository ID. Run -listrepos for a list of IDs"
- fi
- curl -I -k -X DELETE "$baseurl/v1/repositories/$repoId"
-}
-
-# Delete the specified package
-function DeletePackage
-{
- packageId=$1
- if [ -z $packageId ]; then
- Bail "Please specify package ID. Run -listpkgs for a list of IDs"
- fi
- echo Removing pkgId $packageId from repo $repositoryId
- curl -I -k -X DELETE "$baseurl/v1/packages/$packageId"
-}
-
-# Parse params
-# Not using getopts because this uses multi-char flags
-operation=
-while (( "$#" )); do
- if [[ "$1" == "-config" ]]; then
- shift
- configFile="$1"
- elif [[ "$1" == "-listrepos" ]]; then
- operation=ListRepositories
- elif [[ "$1" == "-listpkgs" ]]; then
- operation=ListPackages
- if [ -n "$2" ]; then
- shift
- operand="$1"
- fi
- elif [[ "$1" == "-addrepo" ]]; then
- operation=AddRepo
- shift
- operand="$1"
- elif [[ "$1" == "-addpkg" ]]; then
- operation=AddPackage
- shift
- operand="$1"
- elif [[ "$1" == "-addpkgs" ]]; then
- operation=AddPackages
- shift
- operand="$1"
- elif [[ "$1" == "-addfile" ]]; then
- operation=AddFile
- shift
- operand="$1"
- elif [[ "$1" == "-uploadfile" ]]; then
- operation=UploadFile
- shift
- operand="$1"
- elif [[ "$1" == "-listfiles" ]]; then
- operation=ListFiles
- elif [[ "$1" == "-delfile" ]]; then
- operation=DeleteFile
- shift
- operand="$1"
- elif [[ "$1" == "-check" ]]; then
- operation=CheckUpload
- shift
- operand="$1"
- elif [[ "$1" == "-delrepo" ]]; then
- operation=DeleteRepo
- shift
- operand="$1"
- elif [[ "$1" == "-delpkg" ]]; then
- operation=DeletePackage
- shift
- operand="$1"
- else
- Usage
- fi
- shift
-done
-
-echo "Performing $operation $operand"
-# Parse config file
-ParseConfigFile "$configFile"
-
-# Exit if no operation was specified
-if [ -z "operation" ]; then
- Usage
-fi
-
-$operation "$operand"
diff --git a/build/tfs/linux/x64/Dockerfile b/build/tfs/linux/x64/Dockerfile
deleted file mode 100644
index ae9190c29..000000000
--- a/build/tfs/linux/x64/Dockerfile
+++ /dev/null
@@ -1,46 +0,0 @@
-FROM microsoft/vsts-agent:ubuntu-14.04-standard
-MAINTAINER Joao Moreno
-
-ARG DEBIAN_FRONTEND=noninteractive
-RUN apt-get update
-
-# Dependencies
-RUN apt-get install -y build-essential
-RUN apt-get install -y gcc-multilib g++-multilib
-RUN apt-get install -y git
-RUN apt-get install -y dpkg-dev
-RUN apt-get install -y zip
-RUN apt-get install -y rpm
-RUN apt-get install -y createrepo
-RUN apt-get install -y python-gtk2
-RUN apt-get install -y jq
-RUN apt-get install -y xvfb
-RUN apt-get install -y fakeroot
-RUN apt-get install -y libgtk2.0-0
-RUN apt-get install -y libgconf-2-4
-RUN apt-get install -y libnss3
-RUN apt-get install -y libasound2
-RUN apt-get install -y libxtst6
-RUN apt-get install -y libfuse2
-RUN apt-get install -y libnotify-bin
-RUN apt-get install -y libx11-dev
-RUN apt-get install -y libxss1
-RUN apt-get install -y libx11-xcb-dev
-RUN apt-get install -y libxkbfile-dev
-RUN apt-get install -y bc bsdmainutils
-RUN apt-get install -y libsecret-1-dev
-
-# Xvfb
-# Thanks https://medium.com/@griggheo/running-headless-selenium-webdriver-tests-in-docker-containers-342fdbabf756
-ADD xvfb.init /etc/init.d/xvfb
-RUN chmod +x /etc/init.d/xvfb
-RUN update-rc.d xvfb defaults
-
-# dbus
-RUN ln -sf /bin/dbus-daemon /usr/bin/dbus-daemon
-
-# nvm
-ENV NVM_DIR /usr/local/nvm
-RUN curl https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
-
-CMD (service xvfb start; service dbus start; export DISPLAY=:10; ./start.sh)
\ No newline at end of file
diff --git a/build/tfs/linux/x64/run-agent.sh b/build/tfs/linux/x64/run-agent.sh
deleted file mode 100755
index 76978ce2b..000000000
--- a/build/tfs/linux/x64/run-agent.sh
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-
-if [ ! -f pat ]; then
- echo "Error: file pat not found"
- exit 1
-fi
-
-docker run \
- -e VSTS_ACCOUNT="monacotools" \
- -e VSTS_TOKEN="$(cat pat)" \
- -e VSTS_AGENT="tb-lnx-x64-local" \
- -e VSTS_POOL="linux-x64" \
- -e VSTS_WORK="/var/vsts/work" \
- --name "tb-lnx-x64-local" \
- -it joaomoreno/vscode-vso-agent-x64:latest
\ No newline at end of file
diff --git a/build/tfs/linux/x64/xvfb.init b/build/tfs/linux/x64/xvfb.init
deleted file mode 100644
index 4d77d253a..000000000
--- a/build/tfs/linux/x64/xvfb.init
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-#
-# /etc/rc.d/init.d/xvfbd
-#
-# chkconfig: 345 95 28
-# description: Starts/Stops X Virtual Framebuffer server
-# processname: Xvfb
-#
-### BEGIN INIT INFO
-# Provides: xvfb
-# Required-Start: $remote_fs $syslog
-# Required-Stop: $remote_fs $syslog
-# Default-Start: 2 3 4 5
-# Default-Stop: 0 1 6
-# Short-Description: Start xvfb at boot time
-# Description: Enable xvfb provided by daemon.
-### END INIT INFO
-
-[ "${NETWORKING}" = "no" ] && exit 0
-
-PROG="/usr/bin/Xvfb"
-PROG_OPTIONS=":10 -ac"
-PROG_OUTPUT="/tmp/Xvfb.out"
-
-case "$1" in
- start)
- echo "Starting : X Virtual Frame Buffer "
- $PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 &
- disown -ar
- ;;
- stop)
- echo "Shutting down : X Virtual Frame Buffer"
- killproc $PROG
- RETVAL=$?
- [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb
- /var/run/Xvfb.pid
- echo
- ;;
- restart|reload)
- $0 stop
- $0 start
- RETVAL=$?
- ;;
- status)
- status Xvfb
- RETVAL=$?
- ;;
- *)
- echo $"Usage: $0 (start|stop|restart|reload|status)"
- exit 1
-esac
-
-exit $RETVAL
\ No newline at end of file
diff --git a/build/win32/Cargo.lock b/build/win32/Cargo.lock
new file mode 100644
index 000000000..dcc1440b3
--- /dev/null
+++ b/build/win32/Cargo.lock
@@ -0,0 +1,256 @@
+[[package]]
+name = "build_const"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "byteorder"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "chrono"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
+ "time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "crc"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "inno_updater"
+version = "0.7.1"
+dependencies = [
+ "byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slog 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slog-async 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slog-term 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "isatty"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "kernel32-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "libc"
+version = "0.2.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "num"
+version = "0.1.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "redox_termios"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "slog"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "slog-async"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "slog 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "take_mut 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "slog-term"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "isatty 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slog 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "take_mut"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "term"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "termion"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "thread_local"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "time"
+version = "0.1.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unreachable"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-build"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum build_const 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e90dc84f5e62d2ebe7676b83c22d33b6db8bd27340fb6ffbff0a364efa0cb9c9"
+"checksum byteorder 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "652805b7e73fada9d85e9a6682a4abd490cb52d96aeecc12e33a0de34dfd0d23"
+"checksum chrono 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7c20ebe0b2b08b0aeddba49c609fe7957ba2e33449882cb186a180bc60682fa9"
+"checksum crc 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bd5d02c0aac6bd68393ed69e00bbc2457f3e89075c6349db7189618dc4ddc1d7"
+"checksum isatty 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "8f2a233726c7bb76995cec749d59582e5664823b7245d4970354408f1d79a7a2"
+"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
+"checksum lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c8f31047daa365f19be14b47c29df4f7c3b581832407daabe6ae77397619237d"
+"checksum libc 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1e5d97d6708edaa407429faa671b942dc0f2727222fb6b6539bf1db936e4b121"
+"checksum num 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "cc4083e14b542ea3eb9b5f33ff48bd373a92d78687e74f4cc0a30caeb754f0ca"
+"checksum num-integer 0.1.35 (registry+https://github.com/rust-lang/crates.io-index)" = "d1452e8b06e448a07f0e6ebb0bb1d92b8890eea63288c0b627331d53514d0fba"
+"checksum num-iter 0.1.34 (registry+https://github.com/rust-lang/crates.io-index)" = "7485fcc84f85b4ecd0ea527b14189281cf27d60e583ae65ebc9c088b13dffe01"
+"checksum num-traits 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "9936036cc70fe4a8b2d338ab665900323290efb03983c86cbe235ae800ad8017"
+"checksum redox_syscall 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)" = "0d92eecebad22b767915e4d529f89f28ee96dbbf5a4810d2b844373f136417fd"
+"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
+"checksum slog 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0a6b13b17f4225771f7f15cece704a4e68d3a5f31278ed26367f497133398a18"
+"checksum slog-async 2.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5e319a30c08b004618d5f7ca2f2b1dad7b4623ba7fcb1a12846fc3b01e9eaa10"
+"checksum slog-term 2.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5bb5d9360b2b279b326824b3b4ca2402ead8a8138f0e5ec1900605c861bb6671"
+"checksum take_mut 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "50b910a1174df4aeb5738e8a0e7253883cf7801de40d094175a5a557e487f4c5"
+"checksum term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1"
+"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
+"checksum thread_local 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "279ef31c19ededf577bfd12dfae728040a21f635b06a24cd670ff510edd38963"
+"checksum time 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "a15375f1df02096fb3317256ce2cee6a1f42fc84ea5ad5fc8c421cfe40c73098"
+"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
+"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
+"checksum winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "04e3bd221fcbe8a271359c04f21a76db7d0c6028862d1bb5512d85e1e2eb5bb3"
+"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/build/win32/OSSREADME.json b/build/win32/OSSREADME.json
deleted file mode 100755
index e895321f1..000000000
--- a/build/win32/OSSREADME.json
+++ /dev/null
@@ -1,1098 +0,0 @@
-[
- {
- "name": "Amanieu/thread_local-rs",
- "version": "0.3.5",
- "repositoryUrl": "https://github.com/Amanieu/thread_local-rs",
- "licenseDetail": [
- "Copyright (c) 2016 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "BurntSushi/byteorder",
- "version": "1.2.1",
- "repositoryUrl": "https://github.com/BurntSushi/byteorder",
- "licenseDetail": [
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2015 Andrew Gallant",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in",
- "all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN",
- "THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "Sgeo/take_mut",
- "version": "0.2.0",
- "repositoryUrl": "https://github.com/Sgeo/take_mut",
- "licenseDetail": [
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2016 Sgeo",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "Stebalien/term",
- "version": "0.4.6",
- "repositoryUrl": "https://github.com/Stebalien/term",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "chronotope/chrono",
- "version": "0.4.0",
- "repositoryUrl": "https://github.com/chronotope/chrono",
- "licenseDetail": [
- "Rust-chrono is dual-licensed under The MIT License [1] and",
- "Apache 2.0 License [2]. Copyright (c) 2014--2017, Kang Seonghoon and",
- "contributors.",
- "",
- "Nota Bene: This is same as the Rust Project's own license.",
- "",
- "",
- "[1]: , which is reproduced below:",
- "",
- "~~~~",
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2014, Kang Seonghoon.",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in",
- "all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN",
- "THE SOFTWARE.",
- "~~~~",
- "",
- "",
- "[2]: , which is reproduced below:",
- "",
- "~~~~",
- " Apache License",
- " Version 2.0, January 2004",
- " http://www.apache.org/licenses/",
- "",
- "TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION",
- "",
- "1. Definitions.",
- "",
- " \"License\" shall mean the terms and conditions for use, reproduction,",
- " and distribution as defined by Sections 1 through 9 of this document.",
- "",
- " \"Licensor\" shall mean the copyright owner or entity authorized by",
- " the copyright owner that is granting the License.",
- "",
- " \"Legal Entity\" shall mean the union of the acting entity and all",
- " other entities that control, are controlled by, or are under common",
- " control with that entity. For the purposes of this definition,",
- " \"control\" means (i) the power, direct or indirect, to cause the",
- " direction or management of such entity, whether by contract or",
- " otherwise, or (ii) ownership of fifty percent (50%) or more of the",
- " outstanding shares, or (iii) beneficial ownership of such entity.",
- "",
- " \"You\" (or \"Your\") shall mean an individual or Legal Entity",
- " exercising permissions granted by this License.",
- "",
- " \"Source\" form shall mean the preferred form for making modifications,",
- " including but not limited to software source code, documentation",
- " source, and configuration files.",
- "",
- " \"Object\" form shall mean any form resulting from mechanical",
- " transformation or translation of a Source form, including but",
- " not limited to compiled object code, generated documentation,",
- " and conversions to other media types.",
- "",
- " \"Work\" shall mean the work of authorship, whether in Source or",
- " Object form, made available under the License, as indicated by a",
- " copyright notice that is included in or attached to the work",
- " (an example is provided in the Appendix below).",
- "",
- " \"Derivative Works\" shall mean any work, whether in Source or Object",
- " form, that is based on (or derived from) the Work and for which the",
- " editorial revisions, annotations, elaborations, or other modifications",
- " represent, as a whole, an original work of authorship. For the purposes",
- " of this License, Derivative Works shall not include works that remain",
- " separable from, or merely link (or bind by name) to the interfaces of,",
- " the Work and Derivative Works thereof.",
- "",
- " \"Contribution\" shall mean any work of authorship, including",
- " the original version of the Work and any modifications or additions",
- " to that Work or Derivative Works thereof, that is intentionally",
- " submitted to Licensor for inclusion in the Work by the copyright owner",
- " or by an individual or Legal Entity authorized to submit on behalf of",
- " the copyright owner. For the purposes of this definition, \"submitted\"",
- " means any form of electronic, verbal, or written communication sent",
- " to the Licensor or its representatives, including but not limited to",
- " communication on electronic mailing lists, source code control systems,",
- " and issue tracking systems that are managed by, or on behalf of, the",
- " Licensor for the purpose of discussing and improving the Work, but",
- " excluding communication that is conspicuously marked or otherwise",
- " designated in writing by the copyright owner as \"Not a Contribution.\"",
- "",
- " \"Contributor\" shall mean Licensor and any individual or Legal Entity",
- " on behalf of whom a Contribution has been received by Licensor and",
- " subsequently incorporated within the Work.",
- "",
- "2. Grant of Copyright License. Subject to the terms and conditions of",
- " this License, each Contributor hereby grants to You a perpetual,",
- " worldwide, non-exclusive, no-charge, royalty-free, irrevocable",
- " copyright license to reproduce, prepare Derivative Works of,",
- " publicly display, publicly perform, sublicense, and distribute the",
- " Work and such Derivative Works in Source or Object form.",
- "",
- "3. Grant of Patent License. Subject to the terms and conditions of",
- " this License, each Contributor hereby grants to You a perpetual,",
- " worldwide, non-exclusive, no-charge, royalty-free, irrevocable",
- " (except as stated in this section) patent license to make, have made,",
- " use, offer to sell, sell, import, and otherwise transfer the Work,",
- " where such license applies only to those patent claims licensable",
- " by such Contributor that are necessarily infringed by their",
- " Contribution(s) alone or by combination of their Contribution(s)",
- " with the Work to which such Contribution(s) was submitted. If You",
- " institute patent litigation against any entity (including a",
- " cross-claim or counterclaim in a lawsuit) alleging that the Work",
- " or a Contribution incorporated within the Work constitutes direct",
- " or contributory patent infringement, then any patent licenses",
- " granted to You under this License for that Work shall terminate",
- " as of the date such litigation is filed.",
- "",
- "4. Redistribution. You may reproduce and distribute copies of the",
- " Work or Derivative Works thereof in any medium, with or without",
- " modifications, and in Source or Object form, provided that You",
- " meet the following conditions:",
- "",
- " (a) You must give any other recipients of the Work or",
- " Derivative Works a copy of this License; and",
- "",
- " (b) You must cause any modified files to carry prominent notices",
- " stating that You changed the files; and",
- "",
- " (c) You must retain, in the Source form of any Derivative Works",
- " that You distribute, all copyright, patent, trademark, and",
- " attribution notices from the Source form of the Work,",
- " excluding those notices that do not pertain to any part of",
- " the Derivative Works; and",
- "",
- " (d) If the Work includes a \"NOTICE\" text file as part of its",
- " distribution, then any Derivative Works that You distribute must",
- " include a readable copy of the attribution notices contained",
- " within such NOTICE file, excluding those notices that do not",
- " pertain to any part of the Derivative Works, in at least one",
- " of the following places: within a NOTICE text file distributed",
- " as part of the Derivative Works; within the Source form or",
- " documentation, if provided along with the Derivative Works; or,",
- " within a display generated by the Derivative Works, if and",
- " wherever such third-party notices normally appear. The contents",
- " of the NOTICE file are for informational purposes only and",
- " do not modify the License. You may add Your own attribution",
- " notices within Derivative Works that You distribute, alongside",
- " or as an addendum to the NOTICE text from the Work, provided",
- " that such additional attribution notices cannot be construed",
- " as modifying the License.",
- "",
- " You may add Your own copyright statement to Your modifications and",
- " may provide additional or different license terms and conditions",
- " for use, reproduction, or distribution of Your modifications, or",
- " for any such Derivative Works as a whole, provided Your use,",
- " reproduction, and distribution of the Work otherwise complies with",
- " the conditions stated in this License.",
- "",
- "5. Submission of Contributions. Unless You explicitly state otherwise,",
- " any Contribution intentionally submitted for inclusion in the Work",
- " by You to the Licensor shall be under the terms and conditions of",
- " this License, without any additional terms or conditions.",
- " Notwithstanding the above, nothing herein shall supersede or modify",
- " the terms of any separate license agreement you may have executed",
- " with Licensor regarding such Contributions.",
- "",
- "6. Trademarks. This License does not grant permission to use the trade",
- " names, trademarks, service marks, or product names of the Licensor,",
- " except as required for reasonable and customary use in describing the",
- " origin of the Work and reproducing the content of the NOTICE file.",
- "",
- "7. Disclaimer of Warranty. Unless required by applicable law or",
- " agreed to in writing, Licensor provides the Work (and each",
- " Contributor provides its Contributions) on an \"AS IS\" BASIS,",
- " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or",
- " implied, including, without limitation, any warranties or conditions",
- " of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A",
- " PARTICULAR PURPOSE. You are solely responsible for determining the",
- " appropriateness of using or redistributing the Work and assume any",
- " risks associated with Your exercise of permissions under this License.",
- "",
- "8. Limitation of Liability. In no event and under no legal theory,",
- " whether in tort (including negligence), contract, or otherwise,",
- " unless required by applicable law (such as deliberate and grossly",
- " negligent acts) or agreed to in writing, shall any Contributor be",
- " liable to You for damages, including any direct, indirect, special,",
- " incidental, or consequential damages of any character arising as a",
- " result of this License or out of the use or inability to use the",
- " Work (including but not limited to damages for loss of goodwill,",
- " work stoppage, computer failure or malfunction, or any and all",
- " other commercial damages or losses), even if such Contributor",
- " has been advised of the possibility of such damages.",
- "",
- "9. Accepting Warranty or Additional Liability. While redistributing",
- " the Work or Derivative Works thereof, You may choose to offer,",
- " and charge a fee for, acceptance of support, warranty, indemnity,",
- " or other liability obligations and/or rights consistent with this",
- " License. However, in accepting such obligations, You may act only",
- " on Your own behalf and on Your sole responsibility, not on behalf",
- " of any other Contributor, and only if You agree to indemnify,",
- " defend, and hold each Contributor harmless for any liability",
- " incurred by, or claims asserted against, such Contributor by reason",
- " of your accepting any such warranty or additional liability.",
- "",
- "END OF TERMS AND CONDITIONS",
- "",
- "APPENDIX: How to apply the Apache License to your work.",
- "",
- " To apply the Apache License to your work, attach the following",
- " boilerplate notice, with the fields enclosed by brackets \"[]\"",
- " replaced with your own identifying information. (Don't include",
- " the brackets!) The text should be enclosed in the appropriate",
- " comment syntax for the file format. We also recommend that a",
- " file or class name and description of purpose be included on the",
- " same \"printed page\" as the copyright notice for easier",
- " identification within third-party archives.",
- "",
- "Copyright [yyyy] [name of copyright owner]",
- "",
- "Licensed under the Apache License, Version 2.0 (the \"License\");",
- "you may not use this file except in compliance with the License.",
- "You may obtain a copy of the License at",
- "",
- "\thttp://www.apache.org/licenses/LICENSE-2.0",
- "",
- "Unless required by applicable law or agreed to in writing, software",
- "distributed under the License is distributed on an \"AS IS\" BASIS,",
- "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",
- "See the License for the specific language governing permissions and",
- "limitations under the License.",
- "~~~~"
- ],
- "isProd": true
- },
- {
- "name": "dtolnay/isatty",
- "version": "0.1.6",
- "repositoryUrl": "https://github.com/dtolnay/isatty",
- "licenseDetail": [
- "Copyright (c) 2016",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "mrhooray/crc-rs",
- "version": "1.7.0",
- "repositoryUrl": "https://github.com/mrhooray/crc-rs.git",
- "licenseDetail": [
- "MIT License",
- "",
- "Copyright (c) 2017 crc-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "redox-os/syscall",
- "version": "0.1.37",
- "repositoryUrl": "https://github.com/redox-os/syscall",
- "licenseDetail": [
- "Copyright (c) 2017 Redox OS Developers",
- "",
- "MIT License",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining",
- "a copy of this software and associated documentation files (the",
- "\"Software\"), to deal in the Software without restriction, including",
- "without limitation the rights to use, copy, modify, merge, publish,",
- "distribute, sublicense, and/or sell copies of the Software, and to",
- "permit persons to whom the Software is furnished to do so, subject to",
- "the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be",
- "included in all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,",
- "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF",
- "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND",
- "NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE",
- "LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION",
- "WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "redox-os/termios",
- "version": "0.1.1",
- "repositoryUrl": "https://github.com/redox-os/termios",
- "licenseDetail": [
- "MIT License",
- "",
- "Copyright (c) 2017 Redox OS",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "reem/rust-unreachable",
- "version": "1.0.0",
- "repositoryUrl": "https://github.com/reem/rust-unreachable.git",
- "licenseDetail": [
- "Copyright (c) 2015 The rust-unreachable Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "reem/rust-void",
- "version": "1.0.2",
- "repositoryUrl": "https://github.com/reem/rust-void.git",
- "licenseDetail": [
- "Copyright (c) 2015 The rust-void Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "retep998/winapi-rs",
- "version": "0.1.1",
- "repositoryUrl": "https://github.com/retep998/winapi-rs",
- "licenseDetail": [
- "Copyright (c) 2015 The winapi-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "retep998/winapi-rs",
- "version": "0.2.2",
- "repositoryUrl": "https://github.com/retep998/winapi-rs",
- "licenseDetail": [
- "Copyright (c) 2015 The winapi-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "retep998/winapi-rs",
- "version": "0.2.8",
- "repositoryUrl": "https://github.com/retep998/winapi-rs",
- "licenseDetail": [
- "Copyright (c) 2015 The winapi-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "retep998/winapi-rs",
- "version": "0.3.4",
- "repositoryUrl": "https://github.com/retep998/winapi-rs",
- "licenseDetail": [
- "Copyright (c) 2015 The winapi-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "retep998/winapi-rs",
- "version": "0.4.0",
- "repositoryUrl": "https://github.com/retep998/winapi-rs",
- "licenseDetail": [
- "Copyright (c) 2015 The winapi-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "retep998/winapi-rs",
- "version": "0.4.0",
- "repositoryUrl": "https://github.com/retep998/winapi-rs",
- "licenseDetail": [
- "Copyright (c) 2015 The winapi-rs Developers",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "rust-lang-nursery/lazy-static.rs",
- "version": "1.0.0",
- "repositoryUrl": "https://github.com/rust-lang-nursery/lazy-static.rs",
- "licenseDetail": [
- "Copyright (c) 2010 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "rust-lang/libc",
- "version": "0.2.36",
- "repositoryUrl": "https://github.com/rust-lang/libc",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "rust-lang/time",
- "version": "0.1.39",
- "repositoryUrl": "https://github.com/rust-lang/time",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "rust-num/num",
- "version": "0.1.41",
- "repositoryUrl": "https://github.com/rust-num/num",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "rust-num/num-integer",
- "version": "0.1.35",
- "repositoryUrl": "https://github.com/rust-num/num-integer",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "rust-num/num-iter",
- "version": "0.1.34",
- "repositoryUrl": "https://github.com/rust-num/num-iter",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "rust-num/num-traits",
- "version": "0.1.42",
- "repositoryUrl": "https://github.com/rust-num/num-traits",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "slog-rs/async",
- "version": "2.2.0",
- "repositoryUrl": "https://github.com/slog-rs/async",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "slog-rs/slog",
- "version": "2.1.1",
- "repositoryUrl": "https://github.com/slog-rs/slog",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "slog-rs/term",
- "version": "2.3.0",
- "repositoryUrl": "https://github.com/slog-rs/term",
- "licenseDetail": [
- "Copyright (c) 2014 The Rust Project Developers",
- "",
- "Permission is hereby granted, free of charge, to any",
- "person obtaining a copy of this software and associated",
- "documentation files (the \"Software\"), to deal in the",
- "Software without restriction, including without",
- "limitation the rights to use, copy, modify, merge,",
- "publish, distribute, sublicense, and/or sell copies of",
- "the Software, and to permit persons to whom the Software",
- "is furnished to do so, subject to the following",
- "conditions:",
- "",
- "The above copyright notice and this permission notice",
- "shall be included in all copies or substantial portions",
- "of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED",
- "TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A",
- "PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT",
- "SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY",
- "CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR",
- "IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER",
- "DEALINGS IN THE SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "ticki/termion",
- "version": "1.5.1",
- "repositoryUrl": "https://github.com/ticki/termion",
- "licenseDetail": [
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2016 Ticki",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE",
- "SOFTWARE."
- ],
- "isProd": true
- },
- {
- "name": "vitiral/build_const",
- "version": "0.2.0",
- "repositoryUrl": "https://github.com/vitiral/build_const",
- "licenseDetail": [
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2017 Garrett Berg, vitiral@gmail.com",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in",
- "all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN",
- "THE SOFTWARE."
- ],
- "isProd": true
- }
-]
diff --git a/build/yarn.lock b/build/yarn.lock
index 9ec0f9fe9..45a096572 100644
--- a/build/yarn.lock
+++ b/build/yarn.lock
@@ -151,6 +151,16 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
+"@types/minimist@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6"
+ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=
+
+"@types/mocha@2.2.39":
+ version "2.2.39"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.39.tgz#f68d63db8b69c38e9558b4073525cf96c4f7a829"
+ integrity sha1-9o1j24tpw46VWLQHNSXPlsT3qCk=
+
"@types/node@*":
version "8.0.51"
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.51.tgz#b31d716fb8d58eeb95c068a039b9b6292817d5fb"
@@ -318,6 +328,22 @@ ansi-wrap@0.1.0:
resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
integrity sha1-qCJQ3bABXponyoLoLqYDu/pF768=
+applicationinsights@1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.0.6.tgz#bc201810de91cea910dab34e8ad35ecde488edeb"
+ integrity sha512-VQT3kBpJVPw5fCO5n+WUeSx0VHjxFtD7znYbILBlVgOS9/cMDuGFmV2Br3ObzFyZUDGNbEfW36fD1y2/vAiCKw==
+ dependencies:
+ diagnostic-channel "0.2.0"
+ diagnostic-channel-publishers "0.2.1"
+ zone.js "0.7.6"
+
+argparse@^1.0.7:
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+ dependencies:
+ sprintf-js "~1.0.2"
+
array-differ@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
@@ -390,6 +416,15 @@ azure-storage@^2.1.0:
xml2js "0.2.7"
xmlbuilder "0.4.3"
+babel-code-frame@^6.22.0:
+ version "6.26.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
+ dependencies:
+ chalk "^1.1.3"
+ esutils "^2.0.2"
+ js-tokens "^3.0.2"
+
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
@@ -412,6 +447,11 @@ binary-search-bounds@2.0.3:
resolved "https://registry.yarnpkg.com/binary-search-bounds/-/binary-search-bounds-2.0.3.tgz#5ff8616d6dd2ca5388bc85b2d6266e2b9da502dc"
integrity sha1-X/hhbW3SylOIvIWy1iZuK52lAtw=
+boolbase@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
+
boom@2.x.x:
version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
@@ -446,12 +486,22 @@ browserify-mime@~1.2.9:
resolved "https://registry.yarnpkg.com/browserify-mime/-/browserify-mime-1.2.9.tgz#aeb1af28de6c0d7a6a2ce40adb68ff18422af31f"
integrity sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8=
+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=
+
+builtin-modules@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
+
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
-chalk@^1.0.0:
+chalk@^1.0.0, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
@@ -462,7 +512,7 @@ chalk@^1.0.0:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.2.0:
+chalk@^2.2.0, chalk@^2.3.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
@@ -471,6 +521,18 @@ chalk@^2.2.0:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
+cheerio@^1.0.0-rc.1:
+ version "1.0.0-rc.2"
+ resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
+ integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=
+ dependencies:
+ css-select "~1.2.0"
+ dom-serializer "~0.1.0"
+ entities "~1.1.1"
+ htmlparser2 "^3.9.1"
+ lodash "^4.15.0"
+ parse5 "^3.0.1"
+
clone-stats@^0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
@@ -522,6 +584,11 @@ combined-stream@^1.0.5, combined-stream@~1.0.5:
dependencies:
delayed-stream "~1.0.0"
+commander@^2.12.1, commander@^2.8.1:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+ integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -553,6 +620,21 @@ cryptiles@3.x.x:
dependencies:
boom "5.x.x"
+css-select@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
+ dependencies:
+ boolbase "~1.0.0"
+ css-what "2.1"
+ domutils "1.5.1"
+ nth-check "~1.0.1"
+
+css-what@2.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d"
+ integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==
+
css@2.X:
version "2.2.4"
resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
@@ -601,11 +683,33 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+denodeify@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631"
+ integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE=
+
detect-newline@2.X:
version "2.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=
+diagnostic-channel-publishers@0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz#8e2d607a8b6d79fe880b548bc58cc6beb288c4f3"
+ integrity sha1-ji1geottef6IC1SLxYzGvrKIxPM=
+
+diagnostic-channel@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz#cc99af9612c23fb1fff13612c72f2cbfaa8d5a17"
+ integrity sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=
+ dependencies:
+ semver "^5.3.0"
+
+diff@^3.2.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
+
documentdb@1.13.0:
version "1.13.0"
resolved "https://registry.yarnpkg.com/documentdb/-/documentdb-1.13.0.tgz#bba6f03150b2f42498cec4261bc439d834a33f8b"
@@ -616,6 +720,52 @@ documentdb@1.13.0:
semaphore "1.0.5"
underscore "1.8.3"
+dom-serializer@0, dom-serializer@~0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+ integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=
+ dependencies:
+ domelementtype "~1.1.1"
+ entities "~1.1.1"
+
+domelementtype@1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.2.1.tgz#578558ef23befac043a1abb0db07635509393479"
+ integrity sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==
+
+domelementtype@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+ integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=
+
+domelementtype@~1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+ integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=
+
+domhandler@^2.3.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
+ integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==
+ dependencies:
+ domelementtype "1"
+
+domutils@1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
+domutils@^1.5.1:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
+ integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==
+ dependencies:
+ dom-serializer "0"
+ domelementtype "1"
+
duplexer2@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
@@ -630,11 +780,26 @@ ecc-jsbn@~0.1.1:
dependencies:
jsbn "~0.1.0"
+entities@^1.1.1, entities@~1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
+
escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+esprima@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
+
extend@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-1.2.1.tgz#a0f5fd6cfc83a5fe49ef698d60ec8a624dd4576c"
@@ -669,6 +834,13 @@ fast-json-stable-stringify@^2.0.0:
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
+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"
+
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -692,6 +864,11 @@ form-data@~2.3.1:
combined-stream "1.0.6"
mime-types "^2.1.12"
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -709,6 +886,18 @@ github-releases@^0.4.1:
prettyjson "1.2.1"
request "2.81.0"
+glob@^7.0.6, glob@^7.1.1:
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
glogg@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810"
@@ -860,6 +1049,18 @@ hoek@4.x.x:
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==
+htmlparser2@^3.9.1:
+ version "3.10.0"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464"
+ integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==
+ dependencies:
+ domelementtype "^1.3.0"
+ domhandler "^2.3.0"
+ domutils "^1.5.1"
+ entities "^1.1.1"
+ inherits "^2.0.1"
+ readable-stream "^3.0.6"
+
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
@@ -878,7 +1079,22 @@ http-signature@~1.2.0:
jsprim "^1.2.2"
sshpk "^1.7.0"
-inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
+iconv-lite@0.4.23:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
+ integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
@@ -908,6 +1124,19 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
+js-tokens@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
+
+js-yaml@^3.7.0:
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
+ integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -967,6 +1196,13 @@ lazy-debug-legacy@0.0.X:
resolved "https://registry.yarnpkg.com/lazy-debug-legacy/-/lazy-debug-legacy-0.0.1.tgz#537716c0776e4cf79e3ed1b621f7658c2911b1b1"
integrity sha1-U3cWwHduTPeePtG2IfdljCkRsbE=
+linkify-it@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f"
+ integrity sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=
+ dependencies:
+ uc.micro "^1.0.1"
+
lodash._basecopy@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
@@ -1066,6 +1302,22 @@ lodash.templatesettings@^3.0.0:
lodash._reinterpolate "^3.0.0"
lodash.escape "^3.0.0"
+lodash@^4.15.0, lodash@^4.17.10:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
+markdown-it@^8.3.1:
+ version "8.4.2"
+ resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54"
+ integrity sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==
+ dependencies:
+ argparse "^1.0.7"
+ entities "~1.1.1"
+ linkify-it "^2.0.0"
+ mdurl "^1.0.1"
+ uc.micro "^1.0.5"
+
md5.js@1.3.4:
version "1.3.4"
resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
@@ -1074,6 +1326,11 @@ md5.js@1.3.4:
hash-base "^3.0.0"
inherits "^2.0.1"
+mdurl@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+ integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
mime-db@~1.30.0:
version "1.30.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
@@ -1103,7 +1360,7 @@ mime@^1.3.4:
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
-minimatch@3.0.4:
+minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
@@ -1132,6 +1389,11 @@ multipipe@^0.1.2:
dependencies:
duplexer2 "0.0.2"
+mute-stream@~0.0.4:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
normalize-path@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
@@ -1139,6 +1401,13 @@ normalize-path@^2.0.1:
dependencies:
remove-trailing-separator "^1.0.1"
+nth-check@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
+ dependencies:
+ boolbase "~1.0.0"
+
oauth-sign@~0.8.1, oauth-sign@~0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
@@ -1154,6 +1423,13 @@ object-assign@^3.0.0:
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
integrity sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+ dependencies:
+ wrappy "1"
+
optimist@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
@@ -1162,6 +1438,53 @@ optimist@0.6.1:
minimist "~0.0.1"
wordwrap "~0.0.2"
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
+
+os-tmpdir@^1.0.0, os-tmpdir@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
+
+osenv@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
+ dependencies:
+ os-homedir "^1.0.0"
+ os-tmpdir "^1.0.0"
+
+parse-semver@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/parse-semver/-/parse-semver-1.1.1.tgz#9a4afd6df063dc4826f93fba4a99cf223f666cb8"
+ integrity sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=
+ dependencies:
+ semver "^5.1.0"
+
+parse5@^3.0.1:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
+ integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
+ dependencies:
+ "@types/node" "*"
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-parse@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+pend@~1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+ integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
@@ -1200,6 +1523,11 @@ punycode@^1.4.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+q@^1.0.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
+
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
@@ -1210,6 +1538,13 @@ qs@~6.5.1:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==
+read@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
+ integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=
+ dependencies:
+ mute-stream "~0.0.4"
+
readable-stream@^2.1.5:
version "2.3.6"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
@@ -1223,6 +1558,15 @@ readable-stream@^2.1.5:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
+readable-stream@^3.0.6:
+ version "3.0.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.0.6.tgz#351302e4c68b5abd6a2ed55376a7f9a25be3057a"
+ integrity sha512-9E1oLoOWfhSXHGv6QlwXJim7uNzd9EVlWK+21tCU9Ju/kR0/p2AZYPz4qSchgO8PlLIH4FpZYfzwS+rEksZjIg==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
readable-stream@~1.1.9:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
@@ -1316,6 +1660,13 @@ resolve-url@^0.2.1:
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
+resolve@^1.3.2:
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
+ integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
+ dependencies:
+ path-parse "^1.0.5"
+
safe-buffer@^5.0.1, safe-buffer@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
@@ -1326,6 +1677,11 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
sax@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.2.tgz#735ffaa39a1cff8ffb9598f0223abdb03a9fb2ea"
@@ -1341,6 +1697,11 @@ semaphore@1.0.5:
resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.0.5.tgz#b492576e66af193db95d65e25ec53f5f19798d60"
integrity sha1-tJJXbmavGT25XWXiXsU/Xxl5jWA=
+semver@^5.1.0, semver@^5.3.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+ integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
+
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
@@ -1381,6 +1742,11 @@ sparkles@^1.0.0:
resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c"
integrity sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
+
sshpk@^1.7.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
@@ -1396,18 +1762,18 @@ sshpk@^1.7.0:
jsbn "~0.1.0"
tweetnacl "~0.14.0"
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
- integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
-
-string_decoder@~1.1.1:
+string_decoder@^1.1.1, string_decoder@~1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
dependencies:
safe-buffer "~5.1.0"
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
+
stringstream@~0.0.4, stringstream@~0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
@@ -1452,6 +1818,13 @@ time-stamp@^1.0.0:
resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
integrity sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=
+tmp@0.0.29:
+ version "0.0.29"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.29.tgz#f25125ff0dd9da3ccb0c2dd371ee1288bb9128c0"
+ integrity sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=
+ dependencies:
+ os-tmpdir "~1.0.1"
+
tough-cookie@~2.3.0:
version "2.3.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
@@ -1466,6 +1839,36 @@ tough-cookie@~2.3.3:
dependencies:
punycode "^1.4.1"
+tslib@^1.8.0, tslib@^1.8.1:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
+ integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
+
+tslint@^5.9.1:
+ version "5.11.0"
+ resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed"
+ integrity sha1-mPMMAurjzecAYgHkwzywi0hYHu0=
+ dependencies:
+ babel-code-frame "^6.22.0"
+ builtin-modules "^1.1.1"
+ chalk "^2.3.0"
+ commander "^2.12.1"
+ diff "^3.2.0"
+ glob "^7.1.1"
+ js-yaml "^3.7.0"
+ minimatch "^3.0.4"
+ resolve "^1.3.2"
+ semver "^5.3.0"
+ tslib "^1.8.0"
+ tsutils "^2.27.2"
+
+tsutils@^2.27.2:
+ version "2.29.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
+ integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==
+ dependencies:
+ tslib "^1.8.1"
+
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
@@ -1473,27 +1876,55 @@ tunnel-agent@^0.6.0:
dependencies:
safe-buffer "^5.0.1"
+tunnel@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.4.tgz#2d3785a158c174c9a16dc2c046ec5fc5f1742213"
+ integrity sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=
+
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
-typescript@3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.1.tgz#3362ba9dd1e482ebb2355b02dfe8bcd19a2c7c96"
- integrity sha512-Veu0w4dTc/9wlWNf2jeRInNodKlcdLgemvPsrNpfu5Pq39sgfFjvIIgTsvUHCoLBnMhPoUA+tFxsXjU6VexVRQ==
+typed-rest-client@^0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-0.9.0.tgz#f768cc0dc3f4e950f06e04825c36b3e7834aa1f2"
+ integrity sha1-92jMDcP06VDwbgSCXDaz54NKofI=
+ dependencies:
+ tunnel "0.0.4"
+ underscore "1.8.3"
+
+typescript@3.1.4:
+ version "3.1.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.4.tgz#c74ef7b3c2da65beff548b903022cb8c3cd997ed"
+ integrity sha512-JZHJtA6ZL15+Q3Dqkbh8iCUmvxD3iJ7ujXS+fVkKnwIVAdHc5BJTDNM0aTrnr2luKulFjU7W+SRhDZvi66Ru7Q==
+
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376"
+ integrity sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg==
underscore@1.8.3, underscore@~1.8.3:
version "1.8.3"
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=
+underscore@^1.8.3:
+ version "1.9.1"
+ resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
+ integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
+
urix@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
-util-deprecate@~1.0.1:
+url-join@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/url-join/-/url-join-1.1.0.tgz#741c6c2f4596c4830d6718460920d0c92202dc78"
+ integrity sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
@@ -1540,11 +1971,49 @@ vinyl@^0.5.0:
clone-stats "^0.0.1"
replace-ext "0.0.1"
+vsce@1.48.0:
+ version "1.48.0"
+ resolved "https://registry.yarnpkg.com/vsce/-/vsce-1.48.0.tgz#31c1a4c6909c3b8bdc48b3d32cc8c8e94c7113a2"
+ integrity sha512-1qJn6QLRTu26FIvvMbK/gzHLLdxJVTg9CUTSnCjJHObCCF5CQ0F3FUv7t+5cT7i0J5v5YljrsRY09u7dPBcEnA==
+ dependencies:
+ cheerio "^1.0.0-rc.1"
+ commander "^2.8.1"
+ denodeify "^1.2.1"
+ glob "^7.0.6"
+ lodash "^4.17.10"
+ markdown-it "^8.3.1"
+ mime "^1.3.4"
+ minimatch "^3.0.3"
+ osenv "^0.1.3"
+ parse-semver "^1.1.1"
+ read "^1.0.7"
+ semver "^5.1.0"
+ tmp "0.0.29"
+ url-join "^1.1.0"
+ vso-node-api "6.1.2-preview"
+ yauzl "^2.3.1"
+ yazl "^2.2.2"
+
+vso-node-api@6.1.2-preview:
+ version "6.1.2-preview"
+ resolved "https://registry.yarnpkg.com/vso-node-api/-/vso-node-api-6.1.2-preview.tgz#aab3546df2451ecd894e071bb99b5df19c5fa78f"
+ integrity sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=
+ dependencies:
+ q "^1.0.1"
+ tunnel "0.0.4"
+ typed-rest-client "^0.9.0"
+ underscore "^1.8.3"
+
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
xml2js@0.2.7:
version "0.2.7"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.2.7.tgz#1838518bb01741cae0878bab4915e494c32306af"
@@ -1574,3 +2043,23 @@ xtend@~4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
+
+yauzl@^2.3.1:
+ 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"
+
+yazl@^2.2.2:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.4.3.tgz#ec26e5cc87d5601b9df8432dbdd3cd2e5173a071"
+ integrity sha1-7CblzIfVYBud+EMtvdPNLlFzoHE=
+ dependencies:
+ buffer-crc32 "~0.2.3"
+
+zone.js@0.7.6:
+ version "0.7.6"
+ resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.7.6.tgz#fbbc39d3e0261d0986f1ba06306eb3aeb0d22009"
+ integrity sha1-+7w50+AmHQmG8boGMG6zrrDSIAk=
diff --git a/OSSREADME.json b/cglicenses.json
similarity index 62%
rename from OSSREADME.json
rename to cglicenses.json
index 0f9881512..3d96813f3 100644
--- a/OSSREADME.json
+++ b/cglicenses.json
@@ -1,117 +1,14 @@
-// Listing in here platform dependencies that come in at build time
+// -----------------------------------------------------------------------------------------
+// -----------------------------------------------------------------------------------------
+// This file overrides licenses only for OSS components which do not appear in `cgmanifest.json`.
+// i.e. for OSS components that are detected from `yarn.lock` or `Cargo.lock` files.
+//
+// DO NOT EDIT THIS FILE UNLESS THE OSS TOOL INDICATES THAT YOU SHOULD.
+//
[
-{
- "name": "chromium",
- "version": "61.0.3163.100",
- "repositoryURL": "http://www.chromium.org/Home",
- "licenseDetail": [
- "BSD License",
- "",
- "Copyright 2015 The Chromium Authors. All rights reserved.",
- "",
- "Redistribution and use in source and binary forms, with or without modification,",
- "are permitted provided that the following conditions are met:",
- "",
- " * Redistributions of source code must retain the above copyright notice, this",
- " list of conditions and the following disclaimer.",
- "",
- " * Redistributions in binary form must reproduce the above copyright notice,",
- " this list of conditions and the following disclaimer in the documentation",
- " and/or other materials provided with the distribution.",
- "",
- " * Neither the name Google Inc. nor the names of its contributors may be used to",
- " endorse or promote products derived from this software without specific",
- " prior written permission.",
- "",
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND",
- "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED",
- "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE",
- "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR",
- "ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES",
- "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;",
- "LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON",
- "ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT",
- "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS",
- "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
- ],
- "isProd": true
-},
-{
- "name": "libchromiumcontent",
- "version": "61.0.3163.100",
- "license": "MIT",
- "repositoryURL": "https://github.com/electron/libchromiumcontent",
- "isProd": true
-},
-{
- "name": "nodejs",
- "version": "8.9.3",
- "repositoryURL": "https://github.com/nodejs/node",
- "isProd": true
-},
-{
- "name": "electron",
- "version": "2.0.12",
- "license": "MIT",
- "repositoryURL": "https://github.com/electron/electron",
- "isProd": true
-},
-{
- "name": "inno setup",
- "version": "5.5.6",
- "repositoryURL": "https://github.com/jrsoftware/issrc",
- "isProd": true
-},
-{
- "name": "spdlog original",
- "version": "0.14.0",
- "repositoryURL": "https://github.com/gabime/spdlog",
- "license": "MIT",
- "isProd": true
-},
-
-// --------------------------------------------------------------------------------------
-// --------------------------------------------------------------------------------------
-// ONLY LICENSE TEXT AFTER THIS MARKER
-// Each license entry should contain precisely the following fields:
-// "isLicense": true
-// "name": string
-// "licenseDetail": string[]
-// Furthermore, each license entry should contain a clear reason for existance.
-
-{
- // Reason: Added here because the repo at https://github.com/paulmillr/async-each
- // does not include a LICENSE file that can be machine processed.
- "isLicense": true,
- "name": "async-each",
- "licenseDetail": [
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2016 Paul Miller [(paulmillr.com)](http://paulmillr.com)",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the “Software”), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in",
- "all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN",
- "THE SOFTWARE."
- ]
-},
{
// Reason: The license at https://github.com/aadsm/jschardet/blob/master/LICENSE
// does not include a clear Copyright statement and does not credit authors.
- "isLicense": true,
"name": "jschardet",
"licenseDetail": [
"Chardet was originally ported from C++ by Mark Pilgrim. It is now maintained",
@@ -632,7 +529,6 @@
// Added here because the module `parse5` has a dependency to it.
// The module `parse5` is shipped via the `extension-editing` built-in extension.
// The module `parse5` does not want to remove it https://github.com/inikulin/parse5/issues/225
- "isLicense": true,
"name": "@types/node",
"licenseDetail": [
"This project is licensed under the MIT license.",
@@ -649,7 +545,6 @@
// We override the license that gets discovered at
// https://github.com/Microsoft/TypeScript/blob/master/LICENSE.txt
// because it does not contain a Copyright statement
- "isLicense": true,
"name": "typescript",
"licenseDetail": [
"Copyright (c) Microsoft Corporation. All rights reserved.",
@@ -712,10 +607,8 @@
]
},
{
- "isLicense": true,
+ // This module comes in from https://github.com/Microsoft/vscode-node-debug2/blob/master/package-lock.json
"name": "@types/source-map",
- "repositoryURL": "https://www.github.com/DefinitelyTyped/DefinitelyTyped",
- "license": "MIT",
"licenseDetail": [
"This project is licensed under the MIT license.",
"Copyrights are respective of each contributor listed at the beginning of each definition file.",
@@ -728,508 +621,6 @@
]
},
{
- "isLicense": true,
- "name": "markdown-it-named-headers",
- "licenseDetail": [
- "Copyright (c) markdown-it-named-headers authors",
- "",
- "This is free and unencumbered software released into the public domain.",
- "",
- "Anyone is free to copy, modify, publish, use, compile, sell, or",
- "distribute this software, either in source code form or as a compiled",
- "binary, for any purpose, commercial or non-commercial, and by any",
- "means.",
- "",
- "In jurisdictions that recognize copyright laws, the author or authors",
- "of this software dedicate any and all copyright interest in the",
- "software to the public domain. We make this dedication for the benefit",
- "of the public at large and to the detriment of our heirs and",
- "successors. We intend this dedication to be an overt act of",
- "relinquishment in perpetuity of all present and future rights to this",
- "software under copyright law.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,",
- "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF",
- "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.",
- "IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR",
- "OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,",
- "ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR",
- "OTHER DEALINGS IN THE SOFTWARE.",
- "",
- "For more information, please refer to "
- ]
-},
-{
- "isLicense": true,
- "name": "uc.micro",
- "licenseDetail": [
- " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE",
- " Version 2, December 2004",
- "",
- " Copyright (C) 2004 Sam Hocevar ",
- "",
- " Everyone is permitted to copy and distribute verbatim or modified",
- " copies of this license document, and changing it is allowed as long",
- " as the name is changed.",
- "",
- " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE",
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION",
- "",
- " 0. You just DO WHAT THE FUCK YOU WANT TO."
- ]
-},
-{
- "name": "mdn-data",
- "version": "1.1.12",
- "repositoryURL": "https://github.com/mdn/data",
- "license": "MPL",
- "licenseDetail": [
- "Mozilla Public License Version 2.0",
- "",
- "Copyright (c) 2018 Mozilla Corporation",
- "",
- "==================================",
- "",
- "1. Definitions",
- "--------------",
- "",
- "1.1. \"Contributor\"",
- " means each individual or legal entity that creates, contributes to",
- " the creation of, or owns Covered Software.",
- "",
- "1.2. \"Contributor Version\"",
- " means the combination of the Contributions of others (if any) used",
- " by a Contributor and that particular Contributor's Contribution.",
- "",
- "1.3. \"Contribution\"",
- " means Covered Software of a particular Contributor.",
- "",
- "1.4. \"Covered Software\"",
- " means Source Code Form to which the initial Contributor has attached",
- " the notice in Exhibit A, the Executable Form of such Source Code",
- " Form, and Modifications of such Source Code Form, in each case",
- " including portions thereof.",
- "",
- "1.5. \"Incompatible With Secondary Licenses\"",
- " means",
- "",
- " (a) that the initial Contributor has attached the notice described",
- " in Exhibit B to the Covered Software; or",
- "",
- " (b) that the Covered Software was made available under the terms of",
- " version 1.1 or earlier of the License, but not also under the",
- " terms of a Secondary License.",
- "",
- "1.6. \"Executable Form\"",
- " means any form of the work other than Source Code Form.",
- "",
- "1.7. \"Larger Work\"",
- " means a work that combines Covered Software with other material, in",
- " a separate file or files, that is not Covered Software.",
- "",
- "1.8. \"License\"",
- " means this document.",
- "",
- "1.9. \"Licensable\"",
- " means having the right to grant, to the maximum extent possible,",
- " whether at the time of the initial grant or subsequently, any and",
- " all of the rights conveyed by this License.",
- "",
- "1.10. \"Modifications\"",
- " means any of the following:",
- "",
- " (a) any file in Source Code Form that results from an addition to,",
- " deletion from, or modification of the contents of Covered",
- " Software; or",
- "",
- " (b) any new file in Source Code Form that contains any Covered",
- " Software.",
- "",
- "1.11. \"Patent Claims\" of a Contributor",
- " means any patent claim(s), including without limitation, method,",
- " process, and apparatus claims, in any patent Licensable by such",
- " Contributor that would be infringed, but for the grant of the",
- " License, by the making, using, selling, offering for sale, having",
- " made, import, or transfer of either its Contributions or its",
- " Contributor Version.",
- "",
- "1.12. \"Secondary License\"",
- " means either the GNU General Public License, Version 2.0, the GNU",
- " Lesser General Public License, Version 2.1, the GNU Affero General",
- " Public License, Version 3.0, or any later versions of those",
- " licenses.",
- "",
- "1.13. \"Source Code Form\"",
- " means the form of the work preferred for making modifications.",
- "",
- "1.14. \"You\" (or \"Your\")",
- " means an individual or a legal entity exercising rights under this",
- " License. For legal entities, \"You\" includes any entity that",
- " controls, is controlled by, or is under common control with You. For",
- " purposes of this definition, \"control\" means (a) the power, direct",
- " or indirect, to cause the direction or management of such entity,",
- " whether by contract or otherwise, or (b) ownership of more than",
- " fifty percent (50%) of the outstanding shares or beneficial",
- " ownership of such entity.",
- "",
- "2. License Grants and Conditions",
- "--------------------------------",
- "",
- "2.1. Grants",
- "",
- "Each Contributor hereby grants You a world-wide, royalty-free,",
- "non-exclusive license:",
- "",
- "(a) under intellectual property rights (other than patent or trademark)",
- " Licensable by such Contributor to use, reproduce, make available,",
- " modify, display, perform, distribute, and otherwise exploit its",
- " Contributions, either on an unmodified basis, with Modifications, or",
- " as part of a Larger Work; and",
- "",
- "(b) under Patent Claims of such Contributor to make, use, sell, offer",
- " for sale, have made, import, and otherwise transfer either its",
- " Contributions or its Contributor Version.",
- "",
- "2.2. Effective Date",
- "",
- "The licenses granted in Section 2.1 with respect to any Contribution",
- "become effective for each Contribution on the date the Contributor first",
- "distributes such Contribution.",
- "",
- "2.3. Limitations on Grant Scope",
- "",
- "The licenses granted in this Section 2 are the only rights granted under",
- "this License. No additional rights or licenses will be implied from the",
- "distribution or licensing of Covered Software under this License.",
- "Notwithstanding Section 2.1(b) above, no patent license is granted by a",
- "Contributor:",
- "",
- "(a) for any code that a Contributor has removed from Covered Software;",
- " or",
- "",
- "(b) for infringements caused by: (i) Your and any other third party's",
- " modifications of Covered Software, or (ii) the combination of its",
- " Contributions with other software (except as part of its Contributor",
- " Version); or",
- "",
- "(c) under Patent Claims infringed by Covered Software in the absence of",
- " its Contributions.",
- "",
- "This License does not grant any rights in the trademarks, service marks,",
- "or logos of any Contributor (except as may be necessary to comply with",
- "the notice requirements in Section 3.4).",
- "",
- "2.4. Subsequent Licenses",
- "",
- "No Contributor makes additional grants as a result of Your choice to",
- "distribute the Covered Software under a subsequent version of this",
- "License (see Section 10.2) or under the terms of a Secondary License (if",
- "permitted under the terms of Section 3.3).",
- "",
- "2.5. Representation",
- "",
- "Each Contributor represents that the Contributor believes its",
- "Contributions are its original creation(s) or it has sufficient rights",
- "to grant the rights to its Contributions conveyed by this License.",
- "",
- "2.6. Fair Use",
- "",
- "This License is not intended to limit any rights You have under",
- "applicable copyright doctrines of fair use, fair dealing, or other",
- "equivalents.",
- "",
- "2.7. Conditions",
- "",
- "Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted",
- "in Section 2.1.",
- "",
- "3. Responsibilities",
- "-------------------",
- "",
- "3.1. Distribution of Source Form",
- "",
- "All distribution of Covered Software in Source Code Form, including any",
- "Modifications that You create or to which You contribute, must be under",
- "the terms of this License. You must inform recipients that the Source",
- "Code Form of the Covered Software is governed by the terms of this",
- "License, and how they can obtain a copy of this License. You may not",
- "attempt to alter or restrict the recipients' rights in the Source Code",
- "Form.",
- "",
- "3.2. Distribution of Executable Form",
- "",
- "If You distribute Covered Software in Executable Form then:",
- "",
- "(a) such Covered Software must also be made available in Source Code",
- " Form, as described in Section 3.1, and You must inform recipients of",
- " the Executable Form how they can obtain a copy of such Source Code",
- " Form by reasonable means in a timely manner, at a charge no more",
- " than the cost of distribution to the recipient; and",
- "",
- "(b) You may distribute such Executable Form under the terms of this",
- " License, or sublicense it under different terms, provided that the",
- " license for the Executable Form does not attempt to limit or alter",
- " the recipients' rights in the Source Code Form under this License.",
- "",
- "3.3. Distribution of a Larger Work",
- "",
- "You may create and distribute a Larger Work under terms of Your choice,",
- "provided that You also comply with the requirements of this License for",
- "the Covered Software. If the Larger Work is a combination of Covered",
- "Software with a work governed by one or more Secondary Licenses, and the",
- "Covered Software is not Incompatible With Secondary Licenses, this",
- "License permits You to additionally distribute such Covered Software",
- "under the terms of such Secondary License(s), so that the recipient of",
- "the Larger Work may, at their option, further distribute the Covered",
- "Software under the terms of either this License or such Secondary",
- "License(s).",
- "",
- "3.4. Notices",
- "",
- "You may not remove or alter the substance of any license notices",
- "(including copyright notices, patent notices, disclaimers of warranty,",
- "or limitations of liability) contained within the Source Code Form of",
- "the Covered Software, except that You may alter any license notices to",
- "the extent required to remedy known factual inaccuracies.",
- "",
- "3.5. Application of Additional Terms",
- "",
- "You may choose to offer, and to charge a fee for, warranty, support,",
- "indemnity or liability obligations to one or more recipients of Covered",
- "Software. However, You may do so only on Your own behalf, and not on",
- "behalf of any Contributor. You must make it absolutely clear that any",
- "such warranty, support, indemnity, or liability obligation is offered by",
- "You alone, and You hereby agree to indemnify every Contributor for any",
- "liability incurred by such Contributor as a result of warranty, support,",
- "indemnity or liability terms You offer. You may include additional",
- "disclaimers of warranty and limitations of liability specific to any",
- "jurisdiction.",
- "",
- "4. Inability to Comply Due to Statute or Regulation",
- "---------------------------------------------------",
- "",
- "If it is impossible for You to comply with any of the terms of this",
- "License with respect to some or all of the Covered Software due to",
- "statute, judicial order, or regulation then You must: (a) comply with",
- "the terms of this License to the maximum extent possible; and (b)",
- "describe the limitations and the code they affect. Such description must",
- "be placed in a text file included with all distributions of the Covered",
- "Software under this License. Except to the extent prohibited by statute",
- "or regulation, such description must be sufficiently detailed for a",
- "recipient of ordinary skill to be able to understand it.",
- "",
- "5. Termination",
- "--------------",
- "",
- "5.1. The rights granted under this License will terminate automatically",
- "if You fail to comply with any of its terms. However, if You become",
- "compliant, then the rights granted under this License from a particular",
- "Contributor are reinstated (a) provisionally, unless and until such",
- "Contributor explicitly and finally terminates Your grants, and (b) on an",
- "ongoing basis, if such Contributor fails to notify You of the",
- "non-compliance by some reasonable means prior to 60 days after You have",
- "come back into compliance. Moreover, Your grants from a particular",
- "Contributor are reinstated on an ongoing basis if such Contributor",
- "notifies You of the non-compliance by some reasonable means, this is the",
- "first time You have received notice of non-compliance with this License",
- "from such Contributor, and You become compliant prior to 30 days after",
- "Your receipt of the notice.",
- "",
- "5.2. If You initiate litigation against any entity by asserting a patent",
- "infringement claim (excluding declaratory judgment actions,",
- "counter-claims, and cross-claims) alleging that a Contributor Version",
- "directly or indirectly infringes any patent, then the rights granted to",
- "You by any and all Contributors for the Covered Software under Section",
- "2.1 of this License shall terminate.",
- "",
- "5.3. In the event of termination under Sections 5.1 or 5.2 above, all",
- "end user license agreements (excluding distributors and resellers) which",
- "have been validly granted by You or Your distributors under this License",
- "prior to termination shall survive termination.",
- "",
- "************************************************************************",
- "* *",
- "* 6. Disclaimer of Warranty *",
- "* ------------------------- *",
- "* *",
- "* Covered Software is provided under this License on an \"as is\" *",
- "* basis, without warranty of any kind, either expressed, implied, or *",
- "* statutory, including, without limitation, warranties that the *",
- "* Covered Software is free of defects, merchantable, fit for a *",
- "* particular purpose or non-infringing. The entire risk as to the *",
- "* quality and performance of the Covered Software is with You. *",
- "* Should any Covered Software prove defective in any respect, You *",
- "* (not any Contributor) assume the cost of any necessary servicing, *",
- "* repair, or correction. This disclaimer of warranty constitutes an *",
- "* essential part of this License. No use of any Covered Software is *",
- "* authorized under this License except under this disclaimer. *",
- "* *",
- "************************************************************************",
- "",
- "************************************************************************",
- "* *",
- "* 7. Limitation of Liability *",
- "* -------------------------- *",
- "* *",
- "* Under no circumstances and under no legal theory, whether tort *",
- "* (including negligence), contract, or otherwise, shall any *",
- "* Contributor, or anyone who distributes Covered Software as *",
- "* permitted above, be liable to You for any direct, indirect, *",
- "* special, incidental, or consequential damages of any character *",
- "* including, without limitation, damages for lost profits, loss of *",
- "* goodwill, work stoppage, computer failure or malfunction, or any *",
- "* and all other commercial damages or losses, even if such party *",
- "* shall have been informed of the possibility of such damages. This *",
- "* limitation of liability shall not apply to liability for death or *",
- "* personal injury resulting from such party's negligence to the *",
- "* extent applicable law prohibits such limitation. Some *",
- "* jurisdictions do not allow the exclusion or limitation of *",
- "* incidental or consequential damages, so this exclusion and *",
- "* limitation may not apply to You. *",
- "* *",
- "************************************************************************",
- "",
- "8. Litigation",
- "-------------",
- "",
- "Any litigation relating to this License may be brought only in the",
- "courts of a jurisdiction where the defendant maintains its principal",
- "place of business and such litigation shall be governed by laws of that",
- "jurisdiction, without reference to its conflict-of-law provisions.",
- "Nothing in this Section shall prevent a party's ability to bring",
- "cross-claims or counter-claims.",
- "",
- "9. Miscellaneous",
- "----------------",
- "",
- "This License represents the complete agreement concerning the subject",
- "matter hereof. If any provision of this License is held to be",
- "unenforceable, such provision shall be reformed only to the extent",
- "necessary to make it enforceable. Any law or regulation which provides",
- "that the language of a contract shall be construed against the drafter",
- "shall not be used to construe this License against a Contributor.",
- "",
- "10. Versions of the License",
- "---------------------------",
- "",
- "10.1. New Versions",
- "",
- "Mozilla Foundation is the license steward. Except as provided in Section",
- "10.3, no one other than the license steward has the right to modify or",
- "publish new versions of this License. Each version will be given a",
- "distinguishing version number.",
- "",
- "10.2. Effect of New Versions",
- "",
- "You may distribute the Covered Software under the terms of the version",
- "of the License under which You originally received the Covered Software,",
- "or under the terms of any subsequent version published by the license",
- "steward.",
- "",
- "10.3. Modified Versions",
- "",
- "If you create software not governed by this License, and you want to",
- "create a new license for such software, you may create and use a",
- "modified version of this License if you rename the license and remove",
- "any references to the name of the license steward (except to note that",
- "such modified license differs from this License).",
- "",
- "10.4. Distributing Source Code Form that is Incompatible With Secondary",
- "Licenses",
- "",
- "If You choose to distribute Source Code Form that is Incompatible With",
- "Secondary Licenses under the terms of this version of the License, the",
- "notice described in Exhibit B of this License must be attached.",
- "",
- "Exhibit A - Source Code Form License Notice",
- "-------------------------------------------",
- "",
- " This Source Code Form is subject to the terms of the Mozilla Public",
- " License, v. 2.0. If a copy of the MPL was not distributed with this",
- " file, You can obtain one at http://mozilla.org/MPL/2.0/.",
- "",
- "If it is not possible or desirable to put the notice in a particular",
- "file, then You may include the notice in a location (such as a LICENSE",
- "file in a relevant directory) where a recipient would be likely to look",
- "for such a notice.",
- "",
- "You may add additional accurate notices of copyright ownership.",
- "",
- "Exhibit B - \"Incompatible With Secondary Licenses\" Notice",
- "---------------------------------------------------------",
- "",
- " This Source Code Form is \"Incompatible With Secondary Licenses\", as",
- " defined by the Mozilla Public License, v. 2.0."
- ]
-},
-{
- "isLicense": true,
- "name": "devtools-protocol",
- "licenseDetail": [
- " Copyright 2015 The Chromium Authors. All rights reserved.",
- "",
- " Redistribution and use in source and binary forms, with or without",
- " modification, are permitted provided that the following conditions are",
- " met:",
- "",
- " * Redistributions of source code must retain the above copyright",
- " notice, this list of conditions and the following disclaimer.",
- " * Redistributions in binary form must reproduce the above",
- " copyright notice, this list of conditions and the following disclaimer",
- " in the documentation and/or other materials provided with the",
- " distribution.",
- " * Neither the name of Google Inc. nor the names of its",
- " contributors may be used to endorse or promote products derived from",
- " this software without specific prior written permission.",
- "",
- " THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS",
- " \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT",
- " LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR",
- " A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT",
- " OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,",
- " SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT",
- " LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,",
- " DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY",
- " THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT",
- " (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE",
- " OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
- ]
-},
-{
- "isLicense": true,
- "name": "buffer-alloc",
- "licenseDetail": [
- "This project is licensed under the MIT license.",
- "Copyrights are respective of each contributor listed at the beginning of each definition file.",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
-},
-{
- "isLicense": true,
- "name": "expand-template",
- "licenseDetail": [
- " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE",
- " Version 2, December 2004",
- "",
- " Copyright (C) 2004 Sam Hocevar ",
- "",
- " Everyone is permitted to copy and distribute verbatim or modified",
- " copies of this license document, and changing it is allowed as long",
- " as the name is changed.",
- "",
- " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE",
- " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION",
- "",
- " 0. You just DO WHAT THE FUCK YOU WANT TO."
- ]
-},
-{
- "isLicense": true,
"name": "tunnel-agent",
"licenseDetail": [
"Copyright (c) tunnel-agent authors",
@@ -1292,7 +683,7 @@
]
},
{
- "isLicense": true,
+ // Waiting for https://github.com/segmentio/noop-logger/issues/2
"name": "noop-logger",
"licenseDetail": [
"This project is licensed under the MIT license.",
@@ -1304,33 +695,5 @@
"",
"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
]
-},
-{
- "isLicense": true,
- "name": "buffer-alloc-unsafe",
- "licenseDetail": [
- "This project is licensed under the MIT license.",
- "Copyrights are respective of each contributor listed at the beginning of each definition file.",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
-},
-{
- "isLicense": true,
- "name": "buffer-fill",
- "licenseDetail": [
- "This project is licensed under the MIT license.",
- "Copyrights are respective of each contributor listed at the beginning of each definition file.",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
}
-]
+]
\ No newline at end of file
diff --git a/cgmanifest.json b/cgmanifest.json
new file mode 100644
index 000000000..637c7d2f5
--- /dev/null
+++ b/cgmanifest.json
@@ -0,0 +1,499 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "chromium",
+ "repositoryUrl": "https://chromium.googlesource.com/chromium/src",
+ "commitHash": "7accc8730b0f99b5e7c0702ea89d1fa7c17bfe33"
+ }
+ },
+ "licenseDetail": [
+ "BSD License",
+ "",
+ "Copyright 2015 The Chromium Authors. All rights reserved.",
+ "",
+ "Redistribution and use in source and binary forms, with or without modification,",
+ "are permitted provided that the following conditions are met:",
+ "",
+ " * Redistributions of source code must retain the above copyright notice, this",
+ " list of conditions and the following disclaimer.",
+ "",
+ " * Redistributions in binary form must reproduce the above copyright notice,",
+ " this list of conditions and the following disclaimer in the documentation",
+ " and/or other materials provided with the distribution.",
+ "",
+ " * Neither the name Google Inc. nor the names of its contributors may be used to",
+ " endorse or promote products derived from this software without specific",
+ " prior written permission.",
+ "",
+ "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND",
+ "ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED",
+ "WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE",
+ "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR",
+ "ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES",
+ "(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;",
+ "LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON",
+ "ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT",
+ "(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS",
+ "SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+ ],
+ "isOnlyProductionDependency": true,
+ "version": "61.0.3163.100"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "libchromiumcontent",
+ "repositoryUrl": "https://github.com/electron/libchromiumcontent",
+ "commitHash": "ccdb085454b0a387ee96e0f81a7ca9a8ce07a710"
+ }
+ },
+ "isOnlyProductionDependency": true,
+ "license": "MIT",
+ "version": "61.0.3163.100"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "nodejs",
+ "repositoryUrl": "https://github.com/nodejs/node",
+ "commitHash": "8a44289089a08b7b19fa3c4651b5f1f5d1edd71b"
+ }
+ },
+ "isOnlyProductionDependency": true,
+ "version": "8.9.3"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "electron",
+ "repositoryUrl": "https://github.com/electron/electron",
+ "commitHash": "d281859cf59f12c7107a540a9f4cba0ecf5eff41"
+ }
+ },
+ "isOnlyProductionDependency": true,
+ "license": "MIT",
+ "version": "2.0.12"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "inno setup",
+ "repositoryUrl": "https://github.com/jrsoftware/issrc",
+ "commitHash": "03fe8f4edb3e96c7835c9483052625bbedb160f2"
+ }
+ },
+ "isOnlyProductionDependency": true,
+ "version": "5.5.6"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "spdlog original",
+ "repositoryUrl": "https://github.com/gabime/spdlog",
+ "commitHash": "4fba14c79f356ae48d6141c561bf9fd7ba33fabd"
+ }
+ },
+ "isOnlyProductionDependency": true,
+ "license": "MIT",
+ "version": "0.14.0"
+ },
+ {
+ "component": {
+ "type": "npm",
+ "npm": {
+ "name": "mdn-data",
+ "version": "1.1.12"
+ }
+ },
+ "repositoryUrl": "https://github.com/mdn/data",
+ "licenseDetail": [
+ "Mozilla Public License Version 2.0",
+ "",
+ "Copyright (c) 2018 Mozilla Corporation",
+ "",
+ "==================================",
+ "",
+ "1. Definitions",
+ "--------------",
+ "",
+ "1.1. \"Contributor\"",
+ " means each individual or legal entity that creates, contributes to",
+ " the creation of, or owns Covered Software.",
+ "",
+ "1.2. \"Contributor Version\"",
+ " means the combination of the Contributions of others (if any) used",
+ " by a Contributor and that particular Contributor's Contribution.",
+ "",
+ "1.3. \"Contribution\"",
+ " means Covered Software of a particular Contributor.",
+ "",
+ "1.4. \"Covered Software\"",
+ " means Source Code Form to which the initial Contributor has attached",
+ " the notice in Exhibit A, the Executable Form of such Source Code",
+ " Form, and Modifications of such Source Code Form, in each case",
+ " including portions thereof.",
+ "",
+ "1.5. \"Incompatible With Secondary Licenses\"",
+ " means",
+ "",
+ " (a) that the initial Contributor has attached the notice described",
+ " in Exhibit B to the Covered Software; or",
+ "",
+ " (b) that the Covered Software was made available under the terms of",
+ " version 1.1 or earlier of the License, but not also under the",
+ " terms of a Secondary License.",
+ "",
+ "1.6. \"Executable Form\"",
+ " means any form of the work other than Source Code Form.",
+ "",
+ "1.7. \"Larger Work\"",
+ " means a work that combines Covered Software with other material, in",
+ " a separate file or files, that is not Covered Software.",
+ "",
+ "1.8. \"License\"",
+ " means this document.",
+ "",
+ "1.9. \"Licensable\"",
+ " means having the right to grant, to the maximum extent possible,",
+ " whether at the time of the initial grant or subsequently, any and",
+ " all of the rights conveyed by this License.",
+ "",
+ "1.10. \"Modifications\"",
+ " means any of the following:",
+ "",
+ " (a) any file in Source Code Form that results from an addition to,",
+ " deletion from, or modification of the contents of Covered",
+ " Software; or",
+ "",
+ " (b) any new file in Source Code Form that contains any Covered",
+ " Software.",
+ "",
+ "1.11. \"Patent Claims\" of a Contributor",
+ " means any patent claim(s), including without limitation, method,",
+ " process, and apparatus claims, in any patent Licensable by such",
+ " Contributor that would be infringed, but for the grant of the",
+ " License, by the making, using, selling, offering for sale, having",
+ " made, import, or transfer of either its Contributions or its",
+ " Contributor Version.",
+ "",
+ "1.12. \"Secondary License\"",
+ " means either the GNU General Public License, Version 2.0, the GNU",
+ " Lesser General Public License, Version 2.1, the GNU Affero General",
+ " Public License, Version 3.0, or any later versions of those",
+ " licenses.",
+ "",
+ "1.13. \"Source Code Form\"",
+ " means the form of the work preferred for making modifications.",
+ "",
+ "1.14. \"You\" (or \"Your\")",
+ " means an individual or a legal entity exercising rights under this",
+ " License. For legal entities, \"You\" includes any entity that",
+ " controls, is controlled by, or is under common control with You. For",
+ " purposes of this definition, \"control\" means (a) the power, direct",
+ " or indirect, to cause the direction or management of such entity,",
+ " whether by contract or otherwise, or (b) ownership of more than",
+ " fifty percent (50%) of the outstanding shares or beneficial",
+ " ownership of such entity.",
+ "",
+ "2. License Grants and Conditions",
+ "--------------------------------",
+ "",
+ "2.1. Grants",
+ "",
+ "Each Contributor hereby grants You a world-wide, royalty-free,",
+ "non-exclusive license:",
+ "",
+ "(a) under intellectual property rights (other than patent or trademark)",
+ " Licensable by such Contributor to use, reproduce, make available,",
+ " modify, display, perform, distribute, and otherwise exploit its",
+ " Contributions, either on an unmodified basis, with Modifications, or",
+ " as part of a Larger Work; and",
+ "",
+ "(b) under Patent Claims of such Contributor to make, use, sell, offer",
+ " for sale, have made, import, and otherwise transfer either its",
+ " Contributions or its Contributor Version.",
+ "",
+ "2.2. Effective Date",
+ "",
+ "The licenses granted in Section 2.1 with respect to any Contribution",
+ "become effective for each Contribution on the date the Contributor first",
+ "distributes such Contribution.",
+ "",
+ "2.3. Limitations on Grant Scope",
+ "",
+ "The licenses granted in this Section 2 are the only rights granted under",
+ "this License. No additional rights or licenses will be implied from the",
+ "distribution or licensing of Covered Software under this License.",
+ "Notwithstanding Section 2.1(b) above, no patent license is granted by a",
+ "Contributor:",
+ "",
+ "(a) for any code that a Contributor has removed from Covered Software;",
+ " or",
+ "",
+ "(b) for infringements caused by: (i) Your and any other third party's",
+ " modifications of Covered Software, or (ii) the combination of its",
+ " Contributions with other software (except as part of its Contributor",
+ " Version); or",
+ "",
+ "(c) under Patent Claims infringed by Covered Software in the absence of",
+ " its Contributions.",
+ "",
+ "This License does not grant any rights in the trademarks, service marks,",
+ "or logos of any Contributor (except as may be necessary to comply with",
+ "the notice requirements in Section 3.4).",
+ "",
+ "2.4. Subsequent Licenses",
+ "",
+ "No Contributor makes additional grants as a result of Your choice to",
+ "distribute the Covered Software under a subsequent version of this",
+ "License (see Section 10.2) or under the terms of a Secondary License (if",
+ "permitted under the terms of Section 3.3).",
+ "",
+ "2.5. Representation",
+ "",
+ "Each Contributor represents that the Contributor believes its",
+ "Contributions are its original creation(s) or it has sufficient rights",
+ "to grant the rights to its Contributions conveyed by this License.",
+ "",
+ "2.6. Fair Use",
+ "",
+ "This License is not intended to limit any rights You have under",
+ "applicable copyright doctrines of fair use, fair dealing, or other",
+ "equivalents.",
+ "",
+ "2.7. Conditions",
+ "",
+ "Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted",
+ "in Section 2.1.",
+ "",
+ "3. Responsibilities",
+ "-------------------",
+ "",
+ "3.1. Distribution of Source Form",
+ "",
+ "All distribution of Covered Software in Source Code Form, including any",
+ "Modifications that You create or to which You contribute, must be under",
+ "the terms of this License. You must inform recipients that the Source",
+ "Code Form of the Covered Software is governed by the terms of this",
+ "License, and how they can obtain a copy of this License. You may not",
+ "attempt to alter or restrict the recipients' rights in the Source Code",
+ "Form.",
+ "",
+ "3.2. Distribution of Executable Form",
+ "",
+ "If You distribute Covered Software in Executable Form then:",
+ "",
+ "(a) such Covered Software must also be made available in Source Code",
+ " Form, as described in Section 3.1, and You must inform recipients of",
+ " the Executable Form how they can obtain a copy of such Source Code",
+ " Form by reasonable means in a timely manner, at a charge no more",
+ " than the cost of distribution to the recipient; and",
+ "",
+ "(b) You may distribute such Executable Form under the terms of this",
+ " License, or sublicense it under different terms, provided that the",
+ " license for the Executable Form does not attempt to limit or alter",
+ " the recipients' rights in the Source Code Form under this License.",
+ "",
+ "3.3. Distribution of a Larger Work",
+ "",
+ "You may create and distribute a Larger Work under terms of Your choice,",
+ "provided that You also comply with the requirements of this License for",
+ "the Covered Software. If the Larger Work is a combination of Covered",
+ "Software with a work governed by one or more Secondary Licenses, and the",
+ "Covered Software is not Incompatible With Secondary Licenses, this",
+ "License permits You to additionally distribute such Covered Software",
+ "under the terms of such Secondary License(s), so that the recipient of",
+ "the Larger Work may, at their option, further distribute the Covered",
+ "Software under the terms of either this License or such Secondary",
+ "License(s).",
+ "",
+ "3.4. Notices",
+ "",
+ "You may not remove or alter the substance of any license notices",
+ "(including copyright notices, patent notices, disclaimers of warranty,",
+ "or limitations of liability) contained within the Source Code Form of",
+ "the Covered Software, except that You may alter any license notices to",
+ "the extent required to remedy known factual inaccuracies.",
+ "",
+ "3.5. Application of Additional Terms",
+ "",
+ "You may choose to offer, and to charge a fee for, warranty, support,",
+ "indemnity or liability obligations to one or more recipients of Covered",
+ "Software. However, You may do so only on Your own behalf, and not on",
+ "behalf of any Contributor. You must make it absolutely clear that any",
+ "such warranty, support, indemnity, or liability obligation is offered by",
+ "You alone, and You hereby agree to indemnify every Contributor for any",
+ "liability incurred by such Contributor as a result of warranty, support,",
+ "indemnity or liability terms You offer. You may include additional",
+ "disclaimers of warranty and limitations of liability specific to any",
+ "jurisdiction.",
+ "",
+ "4. Inability to Comply Due to Statute or Regulation",
+ "---------------------------------------------------",
+ "",
+ "If it is impossible for You to comply with any of the terms of this",
+ "License with respect to some or all of the Covered Software due to",
+ "statute, judicial order, or regulation then You must: (a) comply with",
+ "the terms of this License to the maximum extent possible; and (b)",
+ "describe the limitations and the code they affect. Such description must",
+ "be placed in a text file included with all distributions of the Covered",
+ "Software under this License. Except to the extent prohibited by statute",
+ "or regulation, such description must be sufficiently detailed for a",
+ "recipient of ordinary skill to be able to understand it.",
+ "",
+ "5. Termination",
+ "--------------",
+ "",
+ "5.1. The rights granted under this License will terminate automatically",
+ "if You fail to comply with any of its terms. However, if You become",
+ "compliant, then the rights granted under this License from a particular",
+ "Contributor are reinstated (a) provisionally, unless and until such",
+ "Contributor explicitly and finally terminates Your grants, and (b) on an",
+ "ongoing basis, if such Contributor fails to notify You of the",
+ "non-compliance by some reasonable means prior to 60 days after You have",
+ "come back into compliance. Moreover, Your grants from a particular",
+ "Contributor are reinstated on an ongoing basis if such Contributor",
+ "notifies You of the non-compliance by some reasonable means, this is the",
+ "first time You have received notice of non-compliance with this License",
+ "from such Contributor, and You become compliant prior to 30 days after",
+ "Your receipt of the notice.",
+ "",
+ "5.2. If You initiate litigation against any entity by asserting a patent",
+ "infringement claim (excluding declaratory judgment actions,",
+ "counter-claims, and cross-claims) alleging that a Contributor Version",
+ "directly or indirectly infringes any patent, then the rights granted to",
+ "You by any and all Contributors for the Covered Software under Section",
+ "2.1 of this License shall terminate.",
+ "",
+ "5.3. In the event of termination under Sections 5.1 or 5.2 above, all",
+ "end user license agreements (excluding distributors and resellers) which",
+ "have been validly granted by You or Your distributors under this License",
+ "prior to termination shall survive termination.",
+ "",
+ "************************************************************************",
+ "* *",
+ "* 6. Disclaimer of Warranty *",
+ "* ------------------------- *",
+ "* *",
+ "* Covered Software is provided under this License on an \"as is\" *",
+ "* basis, without warranty of any kind, either expressed, implied, or *",
+ "* statutory, including, without limitation, warranties that the *",
+ "* Covered Software is free of defects, merchantable, fit for a *",
+ "* particular purpose or non-infringing. The entire risk as to the *",
+ "* quality and performance of the Covered Software is with You. *",
+ "* Should any Covered Software prove defective in any respect, You *",
+ "* (not any Contributor) assume the cost of any necessary servicing, *",
+ "* repair, or correction. This disclaimer of warranty constitutes an *",
+ "* essential part of this License. No use of any Covered Software is *",
+ "* authorized under this License except under this disclaimer. *",
+ "* *",
+ "************************************************************************",
+ "",
+ "************************************************************************",
+ "* *",
+ "* 7. Limitation of Liability *",
+ "* -------------------------- *",
+ "* *",
+ "* Under no circumstances and under no legal theory, whether tort *",
+ "* (including negligence), contract, or otherwise, shall any *",
+ "* Contributor, or anyone who distributes Covered Software as *",
+ "* permitted above, be liable to You for any direct, indirect, *",
+ "* special, incidental, or consequential damages of any character *",
+ "* including, without limitation, damages for lost profits, loss of *",
+ "* goodwill, work stoppage, computer failure or malfunction, or any *",
+ "* and all other commercial damages or losses, even if such party *",
+ "* shall have been informed of the possibility of such damages. This *",
+ "* limitation of liability shall not apply to liability for death or *",
+ "* personal injury resulting from such party's negligence to the *",
+ "* extent applicable law prohibits such limitation. Some *",
+ "* jurisdictions do not allow the exclusion or limitation of *",
+ "* incidental or consequential damages, so this exclusion and *",
+ "* limitation may not apply to You. *",
+ "* *",
+ "************************************************************************",
+ "",
+ "8. Litigation",
+ "-------------",
+ "",
+ "Any litigation relating to this License may be brought only in the",
+ "courts of a jurisdiction where the defendant maintains its principal",
+ "place of business and such litigation shall be governed by laws of that",
+ "jurisdiction, without reference to its conflict-of-law provisions.",
+ "Nothing in this Section shall prevent a party's ability to bring",
+ "cross-claims or counter-claims.",
+ "",
+ "9. Miscellaneous",
+ "----------------",
+ "",
+ "This License represents the complete agreement concerning the subject",
+ "matter hereof. If any provision of this License is held to be",
+ "unenforceable, such provision shall be reformed only to the extent",
+ "necessary to make it enforceable. Any law or regulation which provides",
+ "that the language of a contract shall be construed against the drafter",
+ "shall not be used to construe this License against a Contributor.",
+ "",
+ "10. Versions of the License",
+ "---------------------------",
+ "",
+ "10.1. New Versions",
+ "",
+ "Mozilla Foundation is the license steward. Except as provided in Section",
+ "10.3, no one other than the license steward has the right to modify or",
+ "publish new versions of this License. Each version will be given a",
+ "distinguishing version number.",
+ "",
+ "10.2. Effect of New Versions",
+ "",
+ "You may distribute the Covered Software under the terms of the version",
+ "of the License under which You originally received the Covered Software,",
+ "or under the terms of any subsequent version published by the license",
+ "steward.",
+ "",
+ "10.3. Modified Versions",
+ "",
+ "If you create software not governed by this License, and you want to",
+ "create a new license for such software, you may create and use a",
+ "modified version of this License if you rename the license and remove",
+ "any references to the name of the license steward (except to note that",
+ "such modified license differs from this License).",
+ "",
+ "10.4. Distributing Source Code Form that is Incompatible With Secondary",
+ "Licenses",
+ "",
+ "If You choose to distribute Source Code Form that is Incompatible With",
+ "Secondary Licenses under the terms of this version of the License, the",
+ "notice described in Exhibit B of this License must be attached.",
+ "",
+ "Exhibit A - Source Code Form License Notice",
+ "-------------------------------------------",
+ "",
+ " This Source Code Form is subject to the terms of the Mozilla Public",
+ " License, v. 2.0. If a copy of the MPL was not distributed with this",
+ " file, You can obtain one at http://mozilla.org/MPL/2.0/.",
+ "",
+ "If it is not possible or desirable to put the notice in a particular",
+ "file, then You may include the notice in a location (such as a LICENSE",
+ "file in a relevant directory) where a recipient would be likely to look",
+ "for such a notice.",
+ "",
+ "You may add additional accurate notices of copyright ownership.",
+ "",
+ "Exhibit B - \"Incompatible With Secondary Licenses\" Notice",
+ "---------------------------------------------------------",
+ "",
+ " This Source Code Form is \"Incompatible With Secondary Licenses\", as",
+ " defined by the Mozilla Public License, v. 2.0."
+ ],
+ "license": "MPL"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/OSSREADME.json b/extensions/OSSREADME.json
deleted file mode 100644
index 518d360d2..000000000
--- a/extensions/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[{
- "name": "typescript",
- "version": "2.6.2",
- "license": "Apache-2.0",
- "repositoryURL": "https://github.com/Microsoft/TypeScript",
- "isProd": true
-}]
diff --git a/extensions/bat/.vscodeignore b/extensions/bat/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/bat/.vscodeignore
+++ b/extensions/bat/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/bat/OSSREADME.json b/extensions/bat/OSSREADME.json
deleted file mode 100644
index 58abee75f..000000000
--- a/extensions/bat/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "mmims/language-batchfile",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/mmims/language-batchfile"
-}]
diff --git a/extensions/bat/cgmanifest.json b/extensions/bat/cgmanifest.json
new file mode 100644
index 000000000..32d7db263
--- /dev/null
+++ b/extensions/bat/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "mmims/language-batchfile",
+ "repositoryUrl": "https://github.com/mmims/language-batchfile",
+ "commitHash": "4b67596631b4ecd2c89c2ec1b2e08a6623438903"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/cgmanifest.json b/extensions/cgmanifest.json
new file mode 100644
index 000000000..6c12dba86
--- /dev/null
+++ b/extensions/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "typescript",
+ "repositoryUrl": "https://github.com/Microsoft/TypeScript",
+ "commitHash": "54426a14f4c232da8e563d20ca8e71263e1c96b5"
+ }
+ },
+ "isOnlyProductionDependency": true,
+ "license": "Apache-2.0",
+ "version": "2.6.2"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/clojure/.vscodeignore b/extensions/clojure/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/clojure/.vscodeignore
+++ b/extensions/clojure/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/clojure/OSSREADME.json b/extensions/clojure/OSSREADME.json
deleted file mode 100644
index 61cc0b52b..000000000
--- a/extensions/clojure/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "atom/language-clojure",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-clojure",
- "description": "The file syntaxes/clojure.tmLanguage.json was derived from the Atom package https://github.com/atom/language-clojure which was originally converted from the TextMate bundle https://github.com/mmcgrana/textmate-clojure."
-}]
diff --git a/extensions/clojure/cgmanifest.json b/extensions/clojure/cgmanifest.json
new file mode 100644
index 000000000..bb14f456a
--- /dev/null
+++ b/extensions/clojure/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-clojure",
+ "repositoryUrl": "https://github.com/atom/language-clojure",
+ "commitHash": "ecc790326bc8e14220e4d2d72a392a30876c3219"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0",
+ "description": "The file syntaxes/clojure.tmLanguage.json was derived from the Atom package https://github.com/atom/language-clojure which was originally converted from the TextMate bundle https://github.com/mmcgrana/textmate-clojure."
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/coffeescript/.vscodeignore b/extensions/coffeescript/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/coffeescript/.vscodeignore
+++ b/extensions/coffeescript/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/coffeescript/OSSREADME.json b/extensions/coffeescript/OSSREADME.json
deleted file mode 100644
index 92bff23d0..000000000
--- a/extensions/coffeescript/OSSREADME.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "atom/language-coffee-script",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-coffee-script",
- "description": "The file syntaxes/coffeescript.tmLanguage.json was derived from the Atom package https://github.com/atom/language-coffee-script which was originally converted from the TextMate bundle https://github.com/jashkenas/coffee-script-tmbundle."
-
-}]
diff --git a/extensions/coffeescript/cgmanifest.json b/extensions/coffeescript/cgmanifest.json
new file mode 100644
index 000000000..b8f3fc4a7
--- /dev/null
+++ b/extensions/coffeescript/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-coffee-script",
+ "repositoryUrl": "https://github.com/atom/language-coffee-script",
+ "commitHash": "a0da2a73ad817e2fc13c2ef8fcd2624017c39610"
+ }
+ },
+ "license": "MIT",
+ "description": "The file syntaxes/coffeescript.tmLanguage.json was derived from the Atom package https://github.com/atom/language-coffee-script which was originally converted from the TextMate bundle https://github.com/jashkenas/coffee-script-tmbundle.",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/configuration-editing/src/extension.ts b/extensions/configuration-editing/src/extension.ts
index abc38585c..b0a083e7e 100644
--- a/extensions/configuration-editing/src/extension.ts
+++ b/extensions/configuration-editing/src/extension.ts
@@ -283,4 +283,4 @@ vscode.languages.registerDocumentSymbolProvider({ pattern: '**/launch.json', lan
return result;
}
-});
+}, { label: 'Launch Targets' });
diff --git a/extensions/cpp/.vscodeignore b/extensions/cpp/.vscodeignore
index d41e74d16..d42f161c7 100644
--- a/extensions/cpp/.vscodeignore
+++ b/extensions/cpp/.vscodeignore
@@ -1,3 +1,3 @@
build/**
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/cpp/OSSREADME.json b/extensions/cpp/OSSREADME.json
deleted file mode 100644
index 5137487d2..000000000
--- a/extensions/cpp/OSSREADME.json
+++ /dev/null
@@ -1,31 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
- {
- "name": "atom/language-c",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-c",
- "description": "The files syntaxes/c.json and syntaxes/c++.json were derived from the Atom package https://atom.io/packages/language-c which was originally converted from the C TextMate bundle https://github.com/textmate/c.tmbundle."
- },
- {
- "name": "textmate/c.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/c.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-c.tmbundle authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
- }
-]
\ No newline at end of file
diff --git a/extensions/cpp/cgmanifest.json b/extensions/cpp/cgmanifest.json
new file mode 100644
index 000000000..16d849387
--- /dev/null
+++ b/extensions/cpp/cgmanifest.json
@@ -0,0 +1,45 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-c",
+ "repositoryUrl": "https://github.com/atom/language-c",
+ "commitHash": "9c0c5f202741a5647025db8d5df5fefba47b036c"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0",
+ "description": "The files syntaxes/c.json and syntaxes/c++.json were derived from the Atom package https://atom.io/packages/language-c which was originally converted from the C TextMate bundle https://github.com/textmate/c.tmbundle."
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/c.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/c.tmbundle",
+ "commitHash": "9aa365882274ca52f01722f3dbb169b9539a20ee"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-c.tmbundle authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/csharp/.vscodeignore b/extensions/csharp/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/csharp/.vscodeignore
+++ b/extensions/csharp/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/csharp/OSSREADME.json b/extensions/csharp/OSSREADME.json
deleted file mode 100644
index f069b5f41..000000000
--- a/extensions/csharp/OSSREADME.json
+++ /dev/null
@@ -1,10 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
- {
- "name": "dotnet/csharp-tmLanguage",
- "version": "0.1.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/dotnet/csharp-tmLanguage",
- "description": "The file syntaxes/csharp.tmLanguage.json was derived from https://github.com/dotnet/csharp-tmLanguage"
- }
-]
\ No newline at end of file
diff --git a/extensions/csharp/cgmanifest.json b/extensions/csharp/cgmanifest.json
new file mode 100644
index 000000000..58cb2a2ce
--- /dev/null
+++ b/extensions/csharp/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "dotnet/csharp-tmLanguage",
+ "repositoryUrl": "https://github.com/dotnet/csharp-tmLanguage",
+ "commitHash": "b95e4044ff1ac52e03f622de76f459dc5388954c"
+ }
+ },
+ "license": "MIT",
+ "version": "0.1.0",
+ "description": "The file syntaxes/csharp.tmLanguage.json was derived from https://github.com/dotnet/csharp-tmLanguage"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/csharp/syntaxes/csharp.tmLanguage.json b/extensions/csharp/syntaxes/csharp.tmLanguage.json
index 358d1b76c..31fb9c6b8 100644
--- a/extensions/csharp/syntaxes/csharp.tmLanguage.json
+++ b/extensions/csharp/syntaxes/csharp.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/dotnet/csharp-tmLanguage/commit/822c147f65d9b009096d7163f7d624379812cd63",
+ "version": "https://github.com/dotnet/csharp-tmLanguage/commit/b95e4044ff1ac52e03f622de76f459dc5388954c",
"name": "C#",
"scopeName": "source.cs",
"patterns": [
@@ -2607,10 +2607,14 @@
},
"patterns": [
{
- "include": "#string-character-escape"
+ "include": "#char-character-escape"
}
]
},
+ "char-character-escape": {
+ "name": "constant.character.escape.cs",
+ "match": "\\\\(['\"\\\\0abfnrtv]|x[0-9a-fA-F]{1,4}|u[0-9a-fA-F]{4})"
+ },
"string-literal": {
"name": "string.quoted.double.cs",
"begin": "(? {
- registerCompletionProviders(context);
- resolveUpdateExtensionsPath();
+ context.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => {
+ if (e.affectsConfiguration('emmet.includeLanguages')) {
+ registerCompletionProviders(context);
+ }
+ if (e.affectsConfiguration('emmet.extensionsPath')) {
+ updateEmmetExtensionsPath();
+ }
}));
}
diff --git a/extensions/emmet/src/test/wrapWithAbbreviation.test.ts b/extensions/emmet/src/test/wrapWithAbbreviation.test.ts
index 910f6ef0d..9fc924508 100644
--- a/extensions/emmet/src/test/wrapWithAbbreviation.test.ts
+++ b/extensions/emmet/src/test/wrapWithAbbreviation.test.ts
@@ -349,18 +349,46 @@ suite('Tests for Wrap with Abbreviations', () => {
});
});
- test('Wrap individual lines with abbreviation and format set to false', () => {
+ test('Wrap with abbreviation and format set to false', () => {
return workspace.getConfiguration('emmet').update('syntaxProfiles',{ 'html' : { 'format': false } } , ConfigurationTarget.Global).then(() => {
return testWrapWithAbbreviation(multiCursors,'h1',wrapInlineElementExpectedFormatFalse).then(() => {
return workspace.getConfiguration('emmet').update('syntaxProfiles',oldValueForSyntaxProfiles ? oldValueForSyntaxProfiles.globalValue : undefined, ConfigurationTarget.Global);
});
});
});
+
+ test('Wrap multi line selections with abbreviation', () => {
+ const htmlContentsForWrapMultiLineTests = `
+
+ line1
+ line2
+
+ line3
+ line4
+
+ `;
+
+ const wrapMultiLineExpected = `
+
+
+ line1
+ line2
+
+
+
+ line3
+ line4
+
+
+ `;
+
+ return testWrapWithAbbreviation([new Selection(2, 4, 3, 9), new Selection(5, 4, 6, 9)], 'div', wrapMultiLineExpected, htmlContentsForWrapMultiLineTests);
+ });
});
-function testWrapWithAbbreviation(selections: Selection[], abbreviation: string, expectedContents: string): Thenable {
- return withRandomFileEditor(htmlContentsForWrapTests, 'html', (editor, _) => {
+function testWrapWithAbbreviation(selections: Selection[], abbreviation: string, expectedContents: string, input: string = htmlContentsForWrapTests): Thenable {
+ return withRandomFileEditor(input, 'html', (editor, _) => {
editor.selections = selections;
const promise = wrapWithAbbreviation({ abbreviation });
if (!promise) {
diff --git a/extensions/emmet/src/util.ts b/extensions/emmet/src/util.ts
index c74fb6511..6e2531c00 100644
--- a/extensions/emmet/src/util.ts
+++ b/extensions/emmet/src/util.ts
@@ -13,14 +13,19 @@ let _emmetHelper: any;
let _currentExtensionsPath: string | undefined = undefined;
export function getEmmetHelper() {
+ // Lazy load vscode-emmet-helper instead of importing it
+ // directly to reduce the start-up time of the extension
if (!_emmetHelper) {
_emmetHelper = require('vscode-emmet-helper');
}
- resolveUpdateExtensionsPath();
+ updateEmmetExtensionsPath();
return _emmetHelper;
}
-export function resolveUpdateExtensionsPath() {
+/**
+ * Update Emmet Helper to use user snippets from the extensionsPath setting
+ */
+export function updateEmmetExtensionsPath() {
if (!_emmetHelper) {
return;
}
@@ -31,7 +36,10 @@ export function resolveUpdateExtensionsPath() {
}
}
-export const LANGUAGE_MODES: any = {
+/**
+ * Mapping between languages that support Emmet and completion trigger characters
+ */
+export const LANGUAGE_MODES: { [id: string]: string[] } = {
'html': ['!', '.', '}', ':', '*', '$', ']', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
'jade': ['!', '.', '}', ':', '*', '$', ']', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
'slim': ['!', '.', '}', ':', '*', '$', ']', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
@@ -47,19 +55,6 @@ export const LANGUAGE_MODES: any = {
'typescriptreact': ['!', '.', '}', '*', '$', ']', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
};
-export const allowedMimeTypesInScriptTag = ['text/html', 'text/plain', 'text/x-template', 'text/template', 'text/ng-template'];
-
-const emmetModes = ['html', 'pug', 'slim', 'haml', 'xml', 'xsl', 'jsx', 'css', 'scss', 'sass', 'less', 'stylus'];
-
-// Explicitly map languages that have built-in grammar in VS Code to their parent language
-// to get emmet completion support
-// For other languages, users will have to use `emmet.includeLanguages` or
-// language specific extensions can provide emmet completion support
-export const MAPPED_MODES: Object = {
- 'handlebars': 'html',
- 'php': 'html'
-};
-
export function isStyleSheet(syntax: string): boolean {
let stylesheetSyntaxes = ['css', 'scss', 'sass', 'less', 'stylus'];
return (stylesheetSyntaxes.indexOf(syntax) > -1);
@@ -78,6 +73,15 @@ export function validate(allowStylesheet: boolean = true): boolean {
}
export function getMappingForIncludedLanguages(): any {
+ // Explicitly map languages that have built-in grammar in VS Code to their parent language
+ // to get emmet completion support
+ // For other languages, users will have to use `emmet.includeLanguages` or
+ // language specific extensions can provide emmet completion support
+ const MAPPED_MODES: Object = {
+ 'handlebars': 'html',
+ 'php': 'html'
+ };
+
const finalMappedModes = Object.create(null);
let includeLanguagesConfig = vscode.workspace.getConfiguration('emmet')['includeLanguages'];
let includeLanguages = Object.assign({}, MAPPED_MODES, includeLanguagesConfig ? includeLanguagesConfig : {});
@@ -111,6 +115,7 @@ export function getEmmetMode(language: string, excludedLanguages: string[]): str
if (language === 'jade') {
return 'pug';
}
+ const emmetModes = ['html', 'pug', 'slim', 'haml', 'xml', 'xsl', 'jsx', 'css', 'scss', 'sass', 'less', 'stylus'];
if (emmetModes.indexOf(language) > -1) {
return language;
}
@@ -137,6 +142,12 @@ const openBrace = 123;
const slash = 47;
const star = 42;
+/**
+ * Traverse the given document backward & forward from given position
+ * to find a complete ruleset, then parse just that to return a Stylesheet
+ * @param document vscode.TextDocument
+ * @param position vscode.Position
+ */
export function parsePartialStylesheet(document: vscode.TextDocument, position: vscode.Position): Stylesheet | undefined {
const isCSS = document.languageId === 'css';
let startPosition = new vscode.Position(0, 0);
@@ -145,6 +156,25 @@ export function parsePartialStylesheet(document: vscode.TextDocument, position:
const limitPosition = limitCharacter > 0 ? document.positionAt(limitCharacter) : startPosition;
const stream = new DocumentStreamReader(document, position);
+ function findOpeningCommentBeforePosition(pos: vscode.Position): vscode.Position | undefined {
+ let text = document.getText(new vscode.Range(0, 0, pos.line, pos.character));
+ let offset = text.lastIndexOf('/*');
+ if (offset === -1) {
+ return;
+ }
+ return document.positionAt(offset);
+ }
+
+ function findClosingCommentAfterPosition(pos: vscode.Position): vscode.Position | undefined {
+ let text = document.getText(new vscode.Range(pos.line, pos.character, document.lineCount - 1, document.lineAt(document.lineCount - 1).text.length));
+ let offset = text.indexOf('*/');
+ if (offset === -1) {
+ return;
+ }
+ offset += 2 + document.offsetAt(pos);
+ return document.positionAt(offset);
+ }
+
function consumeLineCommentBackwards() {
if (!isCSS && currentLine !== stream.pos.line) {
currentLine = stream.pos.line;
@@ -158,7 +188,7 @@ export function parsePartialStylesheet(document: vscode.TextDocument, position:
function consumeBlockCommentBackwards() {
if (stream.peek() === slash) {
if (stream.backUp(1) === star) {
- stream.pos = findOpeningCommentBeforePosition(document, stream.pos) || startPosition;
+ stream.pos = findOpeningCommentBeforePosition(stream.pos) || startPosition;
} else {
stream.next();
}
@@ -170,7 +200,7 @@ export function parsePartialStylesheet(document: vscode.TextDocument, position:
if (stream.eat(slash) && !isCSS) {
stream.pos = new vscode.Position(stream.pos.line + 1, 0);
} else if (stream.eat(star)) {
- stream.pos = findClosingCommentAfterPosition(document, stream.pos) || endPosition;
+ stream.pos = findClosingCommentAfterPosition(stream.pos) || endPosition;
}
}
}
@@ -264,25 +294,6 @@ export function parsePartialStylesheet(document: vscode.TextDocument, position:
}
}
-function findOpeningCommentBeforePosition(document: vscode.TextDocument, position: vscode.Position): vscode.Position | undefined {
- let text = document.getText(new vscode.Range(0, 0, position.line, position.character));
- let offset = text.lastIndexOf('/*');
- if (offset === -1) {
- return;
- }
- return document.positionAt(offset);
-}
-
-function findClosingCommentAfterPosition(document: vscode.TextDocument, position: vscode.Position): vscode.Position | undefined {
- let text = document.getText(new vscode.Range(position.line, position.character, document.lineCount - 1, document.lineAt(document.lineCount - 1).text.length));
- let offset = text.indexOf('*/');
- if (offset === -1) {
- return;
- }
- offset += 2 + document.offsetAt(position);
- return document.positionAt(offset);
-}
-
/**
* Returns node corresponding to given position in the given root node
*/
@@ -311,11 +322,22 @@ export function getNode(root: Node | undefined, position: vscode.Position, inclu
return foundNode;
}
+export const allowedMimeTypesInScriptTag = ['text/html', 'text/plain', 'text/x-template', 'text/template', 'text/ng-template'];
+
+/**
+ * Returns HTML node corresponding to given position in the given root node
+ * If position is inside a script tag of type template, then it will be parsed to find the inner HTML node as well
+ */
export function getHtmlNode(document: vscode.TextDocument, root: Node | undefined, position: vscode.Position, includeNodeBoundary: boolean): HtmlNode | undefined {
let currentNode = getNode(root, position, includeNodeBoundary);
if (!currentNode) { return; }
- if (isTemplateScript(currentNode) && currentNode.close &&
+ const isTemplateScript = currentNode.name === 'script' &&
+ (currentNode.attributes &&
+ currentNode.attributes.some(x => x.name.toString() === 'type'
+ && allowedMimeTypesInScriptTag.indexOf(x.value.toString()) > -1));
+
+ if (isTemplateScript && currentNode.close &&
(position.isAfter(currentNode.open.end) && position.isBefore(currentNode.close.start))) {
let buffer = new DocumentStreamReader(document, currentNode.open.end, new vscode.Range(currentNode.open.end, currentNode.close.start));
@@ -340,6 +362,10 @@ export function getInnerRange(currentNode: HtmlNode): vscode.Range | undefined {
return new vscode.Range(currentNode.open.end, currentNode.close.start);
}
+/**
+ * Returns the deepest non comment node under given node
+ * @param node
+ */
export function getDeepestNode(node: Node | undefined): Node | undefined {
if (!node || !node.children || node.children.length === 0 || !node.children.find(x => x.type !== 'comment')) {
return node;
@@ -434,37 +460,32 @@ export function getNodesInBetween(node1: Node, node2: Node): Node[] {
return [node1];
}
- // Same parent
- if (sameNodes(node1.parent, node2.parent)) {
- return getNextSiblingsTillPosition(node1, node2.end);
- }
-
- // node2 is ancestor of node1
- if (node2.start.isBefore(node1.start)) {
- return [node2];
- }
+ // Not siblings
+ if (!sameNodes(node1.parent, node2.parent)) {
+ // node2 is ancestor of node1
+ if (node2.start.isBefore(node1.start)) {
+ return [node2];
+ }
- // node1 is ancestor of node2
- if (node2.start.isBefore(node1.end)) {
- return [node1];
- }
+ // node1 is ancestor of node2
+ if (node2.start.isBefore(node1.end)) {
+ return [node1];
+ }
- // Get the highest ancestor of node1 that should be commented
- while (node1.parent && node1.parent.end.isBefore(node2.start)) {
- node1 = node1.parent;
- }
+ // Get the highest ancestor of node1 that should be commented
+ while (node1.parent && node1.parent.end.isBefore(node2.start)) {
+ node1 = node1.parent;
+ }
- // Get the highest ancestor of node2 that should be commented
- while (node2.parent && node2.parent.start.isAfter(node1.start)) {
- node2 = node2.parent;
+ // Get the highest ancestor of node2 that should be commented
+ while (node2.parent && node2.parent.start.isAfter(node1.start)) {
+ node2 = node2.parent;
+ }
}
- return getNextSiblingsTillPosition(node1, node2.end);
-}
-
-function getNextSiblingsTillPosition(node: Node, position: vscode.Position): Node[] {
- let siblings: Node[] = [];
- let currentNode = node;
+ const siblings: Node[] = [];
+ let currentNode = node1;
+ const position = node2.end;
while (currentNode && position.isAfter(currentNode.start)) {
siblings.push(currentNode);
currentNode = currentNode.nextSibling;
@@ -589,9 +610,4 @@ export function isStyleAttribute(currentNode: Node | null, position: vscode.Posi
return position.isAfterOrEqual(styleAttribute.value.start) && position.isBeforeOrEqual(styleAttribute.value.end);
}
-export function isTemplateScript(currentNode: HtmlNode): boolean {
- return currentNode.name === 'script' &&
- (currentNode.attributes &&
- currentNode.attributes.some(x => x.name.toString() === 'type'
- && allowedMimeTypesInScriptTag.indexOf(x.value.toString()) > -1));
-}
+
diff --git a/extensions/fsharp/.vscodeignore b/extensions/fsharp/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/fsharp/.vscodeignore
+++ b/extensions/fsharp/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/fsharp/OSSREADME.json b/extensions/fsharp/OSSREADME.json
deleted file mode 100644
index 95d6c5b02..000000000
--- a/extensions/fsharp/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "ionide/ionide-fsgrammar",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/ionide/ionide-fsgrammar",
- "description": "The file syntaxes/fsharp.json was included from https://github.com/ionide/ionide-fsgrammar/blob/master/grammar/fsharp.json."
-}]
diff --git a/extensions/fsharp/cgmanifest.json b/extensions/fsharp/cgmanifest.json
new file mode 100644
index 000000000..df594e070
--- /dev/null
+++ b/extensions/fsharp/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "ionide/ionide-fsgrammar",
+ "repositoryUrl": "https://github.com/ionide/ionide-fsgrammar",
+ "commitHash": "24c1588529af144d205f66fbcec6889500f9aaa9"
+ }
+ },
+ "license": "MIT",
+ "description": "The file syntaxes/fsharp.json was included from https://github.com/ionide/ionide-fsgrammar/blob/master/grammar/fsharp.json.",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/fsharp/syntaxes/fsharp.tmLanguage.json b/extensions/fsharp/syntaxes/fsharp.tmLanguage.json
index 32bcaa286..067389b16 100644
--- a/extensions/fsharp/syntaxes/fsharp.tmLanguage.json
+++ b/extensions/fsharp/syntaxes/fsharp.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/ionide/ionide-fsgrammar/commit/a20d836fa67d6daf81fd63e8baa97aa5e1516006",
+ "version": "https://github.com/ionide/ionide-fsgrammar/commit/24c1588529af144d205f66fbcec6889500f9aaa9",
"name": "fsharp",
"scopeName": "source.fsharp",
"patterns": [
@@ -276,6 +276,15 @@
}
}
},
+ {
+ "match": "(\\|)",
+ "comments": "Prevent captures of `|>` as a keyword when defining custom operator like `<|>`",
+ "captures": {
+ "1": {
+ "name": "keyword.symbol.fsharp"
+ }
+ }
+ },
{
"include": "#keywords"
}
diff --git a/extensions/git/.vscodeignore b/extensions/git/.vscodeignore
index 46f8dd110..7462f7448 100644
--- a/extensions/git/.vscodeignore
+++ b/extensions/git/.vscodeignore
@@ -4,5 +4,5 @@ out/**
tsconfig.json
build/**
extension.webpack.config.js
-OSSREADME.json
-yarn.lock
\ No newline at end of file
+cgmanifest.json
+yarn.lock
diff --git a/extensions/git/OSSREADME.json b/extensions/git/OSSREADME.json
deleted file mode 100644
index 533d6ea68..000000000
--- a/extensions/git/OSSREADME.json
+++ /dev/null
@@ -1,52 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
- {
- "name": "textmate/git.tmbundle",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/textmate/git.tmbundle",
- "licenseDetail": [
- "Copyright (c) 2008 Tim Harper",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining",
- "a copy of this software and associated documentation files (the\"",
- "Software\"), to deal in the Software without restriction, including",
- "without limitation the rights to use, copy, modify, merge, publish,",
- "distribute, sublicense, and/or sell copies of the Software, and to",
- "permit persons to whom the Software is furnished to do so, subject to",
- "the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be",
- "included in all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,",
- "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF",
- "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND",
- "NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE",
- "LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
- "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION",
- "WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
- },
- {
- "name": "textmate/diff.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/diff.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-diff.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
- }
-]
\ No newline at end of file
diff --git a/extensions/git/README.md b/extensions/git/README.md
index bd7a8ef26..a20f32075 100644
--- a/extensions/git/README.md
+++ b/extensions/git/README.md
@@ -4,4 +4,17 @@
## Features
-See [Git support in VS Code](https://code.visualstudio.com/docs/editor/versioncontrol#_git-support) to learn about the features of this extension.
\ No newline at end of file
+See [Git support in VS Code](https://code.visualstudio.com/docs/editor/versioncontrol#_git-support) to learn about the features of this extension.
+
+## API
+
+The Git extension exposes an API, reachable by any other extension.
+
+1. Copy `src/api/git.d.ts` to your extension's sources;
+2. Include `git.d.ts` in your extension's compilation.
+3. Get a hold of the API with the following snippet:
+
+ ```ts
+ const gitExtension = vscode.extensions.getExtension('vscode.git').exports;
+ const git = gitExtension.getAPI(1);
+ ```
\ No newline at end of file
diff --git a/extensions/git/cgmanifest.json b/extensions/git/cgmanifest.json
new file mode 100644
index 000000000..a7e0b63aa
--- /dev/null
+++ b/extensions/git/cgmanifest.json
@@ -0,0 +1,66 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/git.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/git.tmbundle",
+ "commitHash": "93897a78c6e52bef13dadc0d4091d203c5facb40"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) 2008 Tim Harper",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining",
+ "a copy of this software and associated documentation files (the\"",
+ "Software\"), to deal in the Software without restriction, including",
+ "without limitation the rights to use, copy, modify, merge, publish,",
+ "distribute, sublicense, and/or sell copies of the Software, and to",
+ "permit persons to whom the Software is furnished to do so, subject to",
+ "the following conditions:",
+ "",
+ "The above copyright notice and this permission notice shall be",
+ "included in all copies or substantial portions of the Software.",
+ "",
+ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,",
+ "EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF",
+ "MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND",
+ "NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE",
+ "LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION",
+ "OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION",
+ "WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+ ],
+ "license": "MIT",
+ "version": "0.0.0"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/diff.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/diff.tmbundle",
+ "commitHash": "0593bb775eab1824af97ef2172fd38822abd97d7"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-diff.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/git/package.json b/extensions/git/package.json
index 81734a94d..ef4385ef3 100644
--- a/extensions/git/package.json
+++ b/extensions/git/package.json
@@ -265,6 +265,11 @@
"title": "%command.fetch%",
"category": "Git"
},
+ {
+ "command": "git.fetchPrune",
+ "title": "%command.fetchPrune%",
+ "category": "Git"
+ },
{
"command": "git.fetchAll",
"title": "%command.fetchAll%",
@@ -533,6 +538,10 @@
"command": "git.fetch",
"when": "config.git.enabled && gitOpenRepositoryCount != 0"
},
+ {
+ "command": "git.fetchPrune",
+ "when": "config.git.enabled && gitOpenRepositoryCount != 0"
+ },
{
"command": "git.fetchAll",
"when": "config.git.enabled && gitOpenRepositoryCount != 0"
@@ -815,7 +824,12 @@
},
{
"command": "git.openFile2",
- "when": "scmProvider == git && scmResourceGroup == merge && config.git.showInlineOpenFileAction",
+ "when": "scmProvider == git && scmResourceGroup == merge && config.git.showInlineOpenFileAction && config.git.openDiffOnClick",
+ "group": "inline0"
+ },
+ {
+ "command": "git.openChange",
+ "when": "scmProvider == git && scmResourceGroup == merge && config.git.showInlineOpenFileAction && !config.git.openDiffOnClick",
"group": "inline0"
},
{
@@ -845,7 +859,12 @@
},
{
"command": "git.openFile2",
- "when": "scmProvider == git && scmResourceGroup == index && config.git.showInlineOpenFileAction",
+ "when": "scmProvider == git && scmResourceGroup == index && config.git.showInlineOpenFileAction && config.git.openDiffOnClick",
+ "group": "inline0"
+ },
+ {
+ "command": "git.openChange",
+ "when": "scmProvider == git && scmResourceGroup == index && config.git.showInlineOpenFileAction && !config.git.openDiffOnClick",
"group": "inline0"
},
{
@@ -885,7 +904,12 @@
},
{
"command": "git.openFile2",
- "when": "scmProvider == git && scmResourceGroup == workingTree && config.git.showInlineOpenFileAction",
+ "when": "scmProvider == git && scmResourceGroup == workingTree && config.git.showInlineOpenFileAction && config.git.openDiffOnClick",
+ "group": "inline0"
+ },
+ {
+ "command": "git.openChange",
+ "when": "scmProvider == git && scmResourceGroup == workingTree && config.git.showInlineOpenFileAction && !config.git.openDiffOnClick",
"group": "inline0"
},
{
@@ -1093,9 +1117,24 @@
"git.promptToSaveFilesBeforeCommit": {
"type": "boolean",
"scope": "resource",
- "default": false,
+ "default": true,
"description": "%config.promptToSaveFilesBeforeCommit%"
},
+ "git.postCommitCommand": {
+ "type": "string",
+ "enum": [
+ "none",
+ "push",
+ "sync"
+ ],
+ "enumDescriptions": [
+ "%config.postCommitCommand.none%",
+ "%config.postCommitCommand.push%",
+ "%config.postCommitCommand.sync%"
+ ],
+ "markdownDescription": "%config.postCommitCommand%",
+ "default": "none"
+ },
"git.showInlineOpenFileAction": {
"type": "boolean",
"default": true,
@@ -1189,6 +1228,11 @@
"type": "boolean",
"default": true,
"description": "%config.confirmForcePush%"
+ },
+ "git.openDiffOnClick": {
+ "type": "boolean",
+ "default": true,
+ "description": "%config.openDiffOnClick%"
}
}
},
@@ -1339,7 +1383,7 @@
"dependencies": {
"byline": "^5.0.0",
"file-type": "^7.2.0",
- "iconv-lite": "0.4.19",
+ "iconv-lite": "^0.4.24",
"jschardet": "^1.6.0",
"vscode-extension-telemetry": "0.1.0",
"vscode-nls": "^4.0.0",
@@ -1353,4 +1397,4 @@
"@types/which": "^1.0.28",
"mocha": "^3.2.0"
}
-}
+}
\ No newline at end of file
diff --git a/extensions/git/package.nls.json b/extensions/git/package.nls.json
index 4d73891f8..356d1473b 100644
--- a/extensions/git/package.nls.json
+++ b/extensions/git/package.nls.json
@@ -37,6 +37,7 @@
"command.merge": "Merge Branch...",
"command.createTag": "Create Tag",
"command.fetch": "Fetch",
+ "command.fetchPrune": "Fetch (Prune)",
"command.fetchAll": "Fetch From All Remotes",
"command.pull": "Pull",
"command.pullRebase": "Pull (Rebase)",
@@ -66,7 +67,7 @@
"config.autoRepositoryDetection.subFolders": "Scan for subfolders of the currently opened folder.",
"config.autoRepositoryDetection.openEditors": "Scan for parent folders of open files.",
"config.autorefresh": "Whether auto refreshing is enabled.",
- "config.autofetch": "Whether auto fetching is enabled.",
+ "config.autofetch": "When enabled, commits will automatically be fetched from the default remote of the current Git repository.",
"config.confirmSync": "Confirm before synchronizing git repositories.",
"config.countBadge": "Controls the git badge counter.",
"config.countBadge.all": "Count all changes.",
@@ -88,6 +89,10 @@
"config.discardAllScope": "Controls what changes are discarded by the `Discard all changes` command. `all` discards all changes. `tracked` discards only tracked files. `prompt` shows a prompt dialog every time the action is run.",
"config.decorations.enabled": "Controls whether Git contributes colors and badges to the explorer and the open editors view.",
"config.promptToSaveFilesBeforeCommit": "Controls whether Git should check for unsaved files before committing.",
+ "config.postCommitCommand": "Runs a git command after a successful commit.",
+ "config.postCommitCommand.none": "Don't run any command after a commit.",
+ "config.postCommitCommand.push": "Run 'Git Push' after a successful commit.",
+ "config.postCommitCommand.sync": "Run 'Git Sync' after a successful commit.",
"config.showInlineOpenFileAction": "Controls whether to show an inline Open File action in the Git changes view.",
"config.showPushSuccessNotification": "Controls whether to show a notification when a push is successful.",
"config.inputValidation": "Controls when to show commit message input validation.",
@@ -105,6 +110,7 @@
"config.allowForcePush": "Controls whether force push (with or without lease) is enabled.",
"config.useForcePushWithLease": "Controls whether force pushing uses the safer force-with-lease variant.",
"config.confirmForcePush": "Controls whether to ask for confirmation before force-pushing.",
+ "config.openDiffOnClick": "Controls whether the diff editor should be opened when clicking a change. Otherwise the regular editor will be opened.",
"colors.added": "Color for added resources.",
"colors.modified": "Color for modified resources.",
"colors.deleted": "Color for deleted resources.",
diff --git a/extensions/git/src/api/api1.ts b/extensions/git/src/api/api1.ts
index b12f5dcd6..9469580d9 100644
--- a/extensions/git/src/api/api1.ts
+++ b/extensions/git/src/api/api1.ts
@@ -60,6 +60,10 @@ export class ApiRepository implements Repository {
constructor(private _repository: BaseRepository) { }
+ apply(patch: string, reverse?: boolean): Promise {
+ return this._repository.apply(patch, reverse);
+ }
+
getConfigs(): Promise<{ key: string; value: string; }[]> {
return this._repository.getConfigs();
}
@@ -96,6 +100,10 @@ export class ApiRepository implements Repository {
return this._repository.clean(paths.map(p => Uri.file(p)));
}
+ diff(cached?: boolean) {
+ return this._repository.diff(cached);
+ }
+
diffWithHEAD(path: string): Promise {
return this._repository.diffWithHEAD(path);
}
@@ -128,8 +136,8 @@ export class ApiRepository implements Repository {
return this._repository.branch(name, checkout, ref);
}
- deleteBranch(name: string): Promise {
- return this._repository.deleteBranch(name);
+ deleteBranch(name: string, force?: boolean): Promise {
+ return this._repository.deleteBranch(name, force);
}
getBranch(name: string): Promise {
@@ -167,6 +175,10 @@ export class ApiRepository implements Repository {
pull(): Promise {
return this._repository.pull();
}
+
+ push(remoteName?: string, branchName?: string, setUpstream: boolean = false): Promise {
+ return this._repository.pushTo(remoteName, branchName, setUpstream);
+ }
}
export class ApiGit implements Git {
diff --git a/extensions/git/src/api/extension.ts b/extensions/git/src/api/extension.ts
index 1ca1892a7..8d7dc611e 100644
--- a/extensions/git/src/api/extension.ts
+++ b/extensions/git/src/api/extension.ts
@@ -6,6 +6,8 @@
import { Model } from '../model';
import { GitExtension, Repository, API } from './git';
import { ApiRepository, ApiImpl } from './api1';
+import { Event, EventEmitter } from 'vscode';
+import { latchEvent } from '../util';
export function deprecated(_target: any, key: string, descriptor: any): void {
if (typeof descriptor.value !== 'function') {
@@ -19,50 +21,56 @@ export function deprecated(_target: any, key: string, descriptor: any): void {
};
}
-class NoModelGitExtension implements GitExtension {
+export class GitExtensionImpl implements GitExtension {
- @deprecated
- async getGitPath(): Promise {
- throw new Error('Git model not found');
- }
+ enabled: boolean = false;
- @deprecated
- async getRepositories(): Promise {
- throw new Error('Git model not found');
- }
+ private _onDidChangeEnablement = new EventEmitter();
+ readonly onDidChangeEnablement: Event = latchEvent(this._onDidChangeEnablement.event);
- getAPI(): API {
- throw new Error('Git model not found');
- }
-}
+ private _model: Model | undefined = undefined;
+
+ set model(model: Model | undefined) {
+ this._model = model;
-class GitExtensionImpl implements GitExtension {
+ this.enabled = !!model;
+ this._onDidChangeEnablement.fire(this.enabled);
+ }
- constructor(private _model: Model) { }
+ constructor(model?: Model) {
+ if (model) {
+ this.enabled = true;
+ this._model = model;
+ }
+ }
@deprecated
async getGitPath(): Promise {
+ if (!this._model) {
+ throw new Error('Git model not found');
+ }
+
return this._model.git.path;
}
@deprecated
async getRepositories(): Promise {
+ if (!this._model) {
+ throw new Error('Git model not found');
+ }
+
return this._model.repositories.map(repository => new ApiRepository(repository));
}
getAPI(version: number): API {
+ if (!this._model) {
+ throw new Error('Git model not found');
+ }
+
if (version !== 1) {
throw new Error(`No API version ${version} found.`);
}
return new ApiImpl(this._model);
}
-}
-
-export function createGitExtension(model?: Model): GitExtension {
- if (!model) {
- return new NoModelGitExtension();
- }
-
- return new GitExtensionImpl(model);
-}
+}
\ No newline at end of file
diff --git a/extensions/git/src/api/git.d.ts b/extensions/git/src/api/git.d.ts
index ced0b597a..ea4d1f97d 100644
--- a/extensions/git/src/api/git.d.ts
+++ b/extensions/git/src/api/git.d.ts
@@ -128,6 +128,8 @@ export interface Repository {
clean(paths: string[]): Promise;
+ apply(patch: string, reverse?: boolean): Promise;
+ diff(cached?: boolean): Promise;
diffWithHEAD(path: string): Promise;
diffWith(ref: string, path: string): Promise;
diffIndexWithHEAD(path: string): Promise;
@@ -138,7 +140,7 @@ export interface Repository {
hashObject(data: string): Promise;
createBranch(name: string, checkout: boolean, ref?: string): Promise;
- deleteBranch(name: string): Promise;
+ deleteBranch(name: string, force?: boolean): Promise;
getBranch(name: string): Promise;
setBranchUpstream(name: string, upstream: string): Promise;
@@ -152,6 +154,7 @@ export interface Repository {
fetch(remote?: string, ref?: string): Promise;
pull(): Promise;
+ push(remoteName?: string, branchName?: string, setUpstream?: boolean): Promise;
}
export interface API {
@@ -163,9 +166,16 @@ export interface API {
export interface GitExtension {
+ readonly enabled: boolean;
+ readonly onDidChangeEnablement: Event;
+
/**
* Returns a specific API version.
*
+ * Throws error if git extension is disabled. You can listed to the
+ * [GitExtension.onDidChangeEnablement](#GitExtension.onDidChangeEnablement) event
+ * to know when the extension becomes enabled/disabled.
+ *
* @param version Version number.
* @returns API instance
*/
diff --git a/extensions/git/src/commands.ts b/extensions/git/src/commands.ts
index 10d296f5e..e41a8161c 100644
--- a/extensions/git/src/commands.ts
+++ b/extensions/git/src/commands.ts
@@ -163,6 +163,7 @@ enum PushType {
interface PushOptions {
pushType: PushType;
forcePush?: boolean;
+ silent?: boolean;
}
export class CommandCenter {
@@ -193,7 +194,20 @@ export class CommandCenter {
@command('git.openResource')
async openResource(resource: Resource): Promise {
- await this._openResource(resource, undefined, true, false);
+ const repository = this.model.getRepository(resource.resourceUri);
+
+ if (!repository) {
+ return;
+ }
+
+ const config = workspace.getConfiguration('git', Uri.file(repository.root));
+ const openDiffOnClick = config.get('openDiffOnClick');
+
+ if (openDiffOnClick) {
+ await this._openResource(resource, undefined, true, false);
+ } else {
+ await this.openFile(resource);
+ }
}
private async _openResource(resource: Resource, preview?: boolean, preserveFocus?: boolean, preserveSelection?: boolean): Promise {
@@ -646,6 +660,7 @@ export class CommandCenter {
@command('git.openHEADFile')
async openHEADFile(arg?: Resource | Uri): Promise {
let resource: Resource | undefined = undefined;
+ const preview = !(arg instanceof Resource);
if (arg instanceof Resource) {
resource = arg;
@@ -666,12 +681,18 @@ export class CommandCenter {
return;
}
- return await commands.executeCommand('vscode.open', HEAD);
+ const opts: TextDocumentShowOptions = {
+ preview
+ };
+
+ return await commands.executeCommand('vscode.open', HEAD, opts);
}
@command('git.openChange')
async openChange(arg?: Resource | Uri, ...resourceStates: SourceControlResourceState[]): Promise {
const preserveFocus = arg instanceof Resource;
+ const preview = !(arg instanceof Resource);
+
const preserveSelection = arg instanceof Uri || !arg;
let resources: Resource[] | undefined = undefined;
@@ -698,7 +719,6 @@ export class CommandCenter {
return;
}
- const preview = resources.length === 1 ? undefined : false;
for (const resource of resources) {
await this._openResource(resource, preview, preserveFocus, preserveSelection);
}
@@ -1219,6 +1239,17 @@ export class CommandCenter {
await repository.commit(message, opts);
+ const postCommitCommand = config.get<'none' | 'push' | 'sync'>('postCommitCommand');
+
+ switch (postCommitCommand) {
+ case 'push':
+ await this._push(repository, { pushType: PushType.Push, silent: true });
+ break;
+ case 'sync':
+ await this.sync(repository);
+ break;
+ }
+
return true;
}
@@ -1539,6 +1570,17 @@ export class CommandCenter {
await repository.fetchDefault();
}
+ @command('git.fetchPrune', { repository: true })
+ async fetchPrune(repository: Repository): Promise {
+ if (repository.remotes.length === 0) {
+ window.showWarningMessage(localize('no remotes to fetch', "This repository has no remotes configured to fetch from."));
+ return;
+ }
+
+ await repository.fetchPrune();
+ }
+
+
@command('git.fetchAll', { repository: true })
async fetchAll(repository: Repository): Promise {
if (repository.remotes.length === 0) {
@@ -1609,7 +1651,9 @@ export class CommandCenter {
const remotes = repository.remotes;
if (remotes.length === 0) {
- window.showWarningMessage(localize('no remotes to push', "Your repository has no remotes configured to push to."));
+ if (!pushOptions.silent) {
+ window.showWarningMessage(localize('no remotes to push', "Your repository has no remotes configured to push to."));
+ }
return;
}
@@ -1646,7 +1690,9 @@ export class CommandCenter {
}
if (!repository.HEAD || !repository.HEAD.name) {
- window.showWarningMessage(localize('nobranch', "Please check out a branch to push to a remote."));
+ if (!pushOptions.silent) {
+ window.showWarningMessage(localize('nobranch', "Please check out a branch to push to a remote."));
+ }
return;
}
@@ -1658,6 +1704,10 @@ export class CommandCenter {
throw err;
}
+ if (pushOptions.silent) {
+ return;
+ }
+
const branchName = repository.HEAD.name;
const message = localize('confirm publish branch', "The branch '{0}' has no upstream branch. Would you like to publish this branch?", branchName);
const yes = localize('ok', "OK");
diff --git a/extensions/git/src/git.ts b/extensions/git/src/git.ts
index 0deb723c9..ff7e7bdd6 100644
--- a/extensions/git/src/git.ts
+++ b/extensions/git/src/git.ts
@@ -822,15 +822,23 @@ export class Repository {
}
}
- async diff(path: string, cached = false): Promise {
+ async apply(patch: string, reverse?: boolean): Promise {
+ const args = ['apply', patch];
+
+ if (reverse) {
+ args.push('-R');
+ }
+
+ await this.run(args);
+ }
+
+ async diff(cached = false): Promise {
const args = ['diff'];
if (cached) {
args.push('--cached');
}
- args.push('--', path);
-
const result = await this.run(args);
return result.stdout;
}
@@ -1106,14 +1114,7 @@ export class Repository {
}
async reset(treeish: string, hard: boolean = false): Promise {
- const args = ['reset'];
-
- if (hard) {
- args.push('--hard');
- }
-
- args.push(treeish);
-
+ const args = ['reset', hard ? '--hard' : '--soft', treeish];
await this.run(args);
}
@@ -1157,7 +1158,7 @@ export class Repository {
await this.run(args);
}
- async fetch(options: { remote?: string, ref?: string, all?: boolean } = {}): Promise {
+ async fetch(options: { remote?: string, ref?: string, all?: boolean, prune?: boolean } = {}): Promise {
const args = ['fetch'];
if (options.remote) {
@@ -1170,6 +1171,11 @@ export class Repository {
args.push('--all');
}
+ if (options.prune) {
+ args.push('--prune');
+ }
+
+
try {
await this.run(args);
} catch (err) {
diff --git a/extensions/git/src/main.ts b/extensions/git/src/main.ts
index 1ff683150..52b7c3c10 100644
--- a/extensions/git/src/main.ts
+++ b/extensions/git/src/main.ts
@@ -17,7 +17,7 @@ import { toDisposable, filterEvent, eventToPromise } from './util';
import TelemetryReporter from 'vscode-extension-telemetry';
import { GitExtension } from './api/git';
import { GitProtocolHandler } from './protocolHandler';
-import { createGitExtension } from './api/extension';
+import { GitExtensionImpl } from './api/extension';
import * as path from 'path';
import * as fs from 'fs';
@@ -137,12 +137,15 @@ export async function activate(context: ExtensionContext): Promise
if (!enabled) {
const onConfigChange = filterEvent(workspace.onDidChangeConfiguration, e => e.affectsConfiguration('git'));
const onEnabled = filterEvent(onConfigChange, () => workspace.getConfiguration('git', null).get('enabled') === true);
- await eventToPromise(onEnabled);
+ const result = new GitExtensionImpl();
+
+ eventToPromise(onEnabled).then(async () => result.model = await createModel(context, outputChannel, telemetryReporter, disposables));
+ return result;
}
try {
const model = await createModel(context, outputChannel, telemetryReporter, disposables);
- return createGitExtension(model);
+ return new GitExtensionImpl(model);
} catch (err) {
if (!/Git installation not found/.test(err.message || '')) {
throw err;
@@ -151,9 +154,9 @@ export async function activate(context: ExtensionContext): Promise
console.warn(err.message);
outputChannel.appendLine(err.message);
- await warnAboutMissingGit();
+ warnAboutMissingGit();
- return createGitExtension();
+ return new GitExtensionImpl();
}
}
diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts
index 52bbb1ec6..d188eea02 100644
--- a/extensions/git/src/repository.ts
+++ b/extensions/git/src/repository.ts
@@ -295,6 +295,7 @@ export const enum Operation {
GetObjectDetails = 'GetObjectDetails',
SubmoduleUpdate = 'SubmoduleUpdate',
RebaseContinue = 'RebaseContinue',
+ Apply = 'Apply'
}
function isReadOnly(operation: Operation): boolean {
@@ -705,6 +706,10 @@ export class Repository implements Disposable {
await this.run(Operation.Status);
}
+ diff(cached?: boolean): Promise {
+ return this.run(Operation.Diff, () => this.repository.diff(cached));
+ }
+
diffWithHEAD(path: string): Promise {
return this.run(Operation.Diff, () => this.repository.diffWithHEAD(path));
}
@@ -829,7 +834,7 @@ export class Repository implements Disposable {
}
async branch(name: string, _checkout: boolean, _ref?: string): Promise {
- await this.run(Operation.Branch, () => this.repository.branch(name, true));
+ await this.run(Operation.Branch, () => this.repository.branch(name, _checkout, _ref));
}
async deleteBranch(name: string, force?: boolean): Promise {
@@ -889,6 +894,11 @@ export class Repository implements Disposable {
await this.run(Operation.Fetch, () => this.repository.fetch());
}
+ @throttle
+ async fetchPrune(): Promise {
+ await this.run(Operation.Fetch, () => this.repository.fetch({ prune: true }));
+ }
+
@throttle
async fetchAll(): Promise {
await this.run(Operation.Fetch, () => this.repository.fetch({ all: true }));
@@ -1050,6 +1060,10 @@ export class Repository implements Disposable {
return this.run(Operation.Show, () => this.repository.detectObjectType(object));
}
+ async apply(patch: string, reverse?: boolean): Promise {
+ return await this.run(Operation.Apply, () => this.repository.apply(patch, reverse));
+ }
+
async getStashes(): Promise {
return await this.repository.getStashes();
}
diff --git a/extensions/git/src/util.ts b/extensions/git/src/util.ts
index ea1ddb97a..14cbb0a65 100644
--- a/extensions/git/src/util.ts
+++ b/extensions/git/src/util.ts
@@ -33,7 +33,7 @@ export function combinedDisposable(disposables: IDisposable[]): IDisposable {
export const EmptyDisposable = toDisposable(() => null);
export function fireEvent(event: Event): Event {
- return (listener, thisArgs = null, disposables?) => event(_ => listener.call(thisArgs), null, disposables);
+ return (listener, thisArgs = null, disposables?) => event(_ => (listener as any).call(thisArgs), null, disposables);
}
export function mapEvent(event: Event, map: (i: I) => O): Event {
@@ -44,6 +44,18 @@ export function filterEvent(event: Event, filter: (e: T) => boolean): Even
return (listener, thisArgs = null, disposables?) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables);
}
+export function latchEvent(event: Event): Event {
+ let firstCall = true;
+ let cache: T;
+
+ return filterEvent(event, value => {
+ let shouldEmit = firstCall || value !== cache;
+ firstCall = false;
+ cache = value;
+ return shouldEmit;
+ });
+}
+
export function anyEvent(...events: Event[]): Event {
return (listener, thisArgs = null, disposables?) => {
const result = combinedDisposable(events.map(event => event(i => listener.call(thisArgs, i))));
diff --git a/extensions/git/yarn.lock b/extensions/git/yarn.lock
index 4a18c906e..616d42cad 100644
--- a/extensions/git/yarn.lock
+++ b/extensions/git/yarn.lock
@@ -151,10 +151,12 @@ he@1.1.1:
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
-iconv-lite@0.4.19:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
- integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==
+iconv-lite@^0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
inflight@^1.0.4:
version "1.0.6"
@@ -294,6 +296,11 @@ path-is-absolute@^1.0.0:
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+"safer-buffer@>= 2.1.2 < 3":
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
semver@^5.3.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
diff --git a/extensions/go/.vscodeignore b/extensions/go/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/go/.vscodeignore
+++ b/extensions/go/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/go/OSSREADME.json b/extensions/go/OSSREADME.json
deleted file mode 100644
index 389a61cdd..000000000
--- a/extensions/go/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "language-go",
- "version": "0.39.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-go",
- "description": "The file syntaxes/go.json was derived from the Atom package https://atom.io/packages/language-go."
-}]
diff --git a/extensions/go/cgmanifest.json b/extensions/go/cgmanifest.json
new file mode 100644
index 000000000..46b1c1c43
--- /dev/null
+++ b/extensions/go/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "language-go",
+ "repositoryUrl": "https://github.com/atom/language-go",
+ "commitHash": "b6fd68f74efa109679e31fe6f4a41ac105262d0e"
+ }
+ },
+ "license": "MIT",
+ "description": "The file syntaxes/go.json was derived from the Atom package https://atom.io/packages/language-go.",
+ "version": "0.39.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/groovy/.vscodeignore b/extensions/groovy/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/groovy/.vscodeignore
+++ b/extensions/groovy/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/groovy/OSSREADME.json b/extensions/groovy/OSSREADME.json
deleted file mode 100644
index 35222bdac..000000000
--- a/extensions/groovy/OSSREADME.json
+++ /dev/null
@@ -1,22 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "textmate/groovy.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/groovy.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-groovy.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/groovy/cgmanifest.json b/extensions/groovy/cgmanifest.json
new file mode 100644
index 000000000..07dec53a6
--- /dev/null
+++ b/extensions/groovy/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/groovy.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/groovy.tmbundle",
+ "commitHash": "85d8f7c97ae473ccb9473f6c8d27e4ec957f4be1"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-groovy.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/grunt/src/main.ts b/extensions/grunt/src/main.ts
index e90277cfe..38589e8a5 100644
--- a/extensions/grunt/src/main.ts
+++ b/extensions/grunt/src/main.ts
@@ -81,7 +81,7 @@ class FolderDetector {
}
public start(): void {
- let pattern = path.join(this._workspaceFolder.uri.fsPath, '[Gg]runtfile.js');
+ let pattern = path.join(this._workspaceFolder.uri.fsPath, '{node_modules,[Gg]runtfile.js}');
this.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern);
this.fileWatcher.onDidChange(() => this.promise = undefined);
this.fileWatcher.onDidCreate(() => this.promise = undefined);
diff --git a/extensions/gulp/images/gulp.png b/extensions/gulp/images/gulp.png
index 894ee2306..2aa531f22 100644
Binary files a/extensions/gulp/images/gulp.png and b/extensions/gulp/images/gulp.png differ
diff --git a/extensions/gulp/src/main.ts b/extensions/gulp/src/main.ts
index c5adf07d1..b8612d511 100644
--- a/extensions/gulp/src/main.ts
+++ b/extensions/gulp/src/main.ts
@@ -82,7 +82,7 @@ class FolderDetector {
}
public start(): void {
- let pattern = path.join(this._workspaceFolder.uri.fsPath, 'gulpfile{.babel.js,.js,.ts}');
+ let pattern = path.join(this._workspaceFolder.uri.fsPath, '{node_modules,gulpfile{.babel.js,.js,.ts}}');
this.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern);
this.fileWatcher.onDidChange(() => this.promise = undefined);
this.fileWatcher.onDidCreate(() => this.promise = undefined);
diff --git a/extensions/handlebars/.vscodeignore b/extensions/handlebars/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/handlebars/.vscodeignore
+++ b/extensions/handlebars/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/handlebars/OSSREADME.json b/extensions/handlebars/OSSREADME.json
deleted file mode 100644
index 619107dcf..000000000
--- a/extensions/handlebars/OSSREADME.json
+++ /dev/null
@@ -1,26 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "daaain/Handlebars",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/daaain/Handlebars",
- "licenseDetail": [
- "-- Credits",
- "",
- "Adapted from the great sublime-text-handlebars package by Nicholas Westlake.",
- "",
- "Thanks a lot to all the generous contributors (in alphabetical order): @bittersweetryan, @bradcliffe, @calumbrodie, @duncanbeevers, @hlvnst, @jonschlinkert, @Krutius, @samselikoff, @utkarshkukreti, @zeppelin",
- "",
- "-- License",
- "",
- "(The MIT License)",
- "",
- "Copyright (c) daaain/Handlebars project authors",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
-}]
diff --git a/extensions/handlebars/cgmanifest.json b/extensions/handlebars/cgmanifest.json
new file mode 100644
index 000000000..5befa41e2
--- /dev/null
+++ b/extensions/handlebars/cgmanifest.json
@@ -0,0 +1,36 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "daaain/Handlebars",
+ "repositoryUrl": "https://github.com/daaain/Handlebars",
+ "commitHash": "790f2b0222098a3a236bd9e91bb9a039eeca4d8e"
+ }
+ },
+ "licenseDetail": [
+ "-- Credits",
+ "",
+ "Adapted from the great sublime-text-handlebars package by Nicholas Westlake.",
+ "",
+ "Thanks a lot to all the generous contributors (in alphabetical order): @bittersweetryan, @bradcliffe, @calumbrodie, @duncanbeevers, @hlvnst, @jonschlinkert, @Krutius, @samselikoff, @utkarshkukreti, @zeppelin",
+ "",
+ "-- License",
+ "",
+ "(The MIT License)",
+ "",
+ "Copyright (c) daaain/Handlebars project authors",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",
+ "",
+ "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
+ "",
+ "THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+ ],
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/hlsl/.vscodeignore b/extensions/hlsl/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/hlsl/.vscodeignore
+++ b/extensions/hlsl/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/hlsl/OSSREADME.json b/extensions/hlsl/OSSREADME.json
deleted file mode 100644
index 5acab3453..000000000
--- a/extensions/hlsl/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "shaders-tmLanguage",
- "version": "0.1.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/tgjones/shaders-tmLanguage"
-}]
diff --git a/extensions/hlsl/cgmanifest.json b/extensions/hlsl/cgmanifest.json
new file mode 100644
index 000000000..92137372c
--- /dev/null
+++ b/extensions/hlsl/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "shaders-tmLanguage",
+ "repositoryUrl": "https://github.com/tgjones/shaders-tmLanguage",
+ "commitHash": "cd1ef40f549f9ce2b9e6b73498688de114a85382"
+ }
+ },
+ "license": "MIT",
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/html-language-features/.vscodeignore b/extensions/html-language-features/.vscodeignore
index 98555b677..4215adf6e 100644
--- a/extensions/html-language-features/.vscodeignore
+++ b/extensions/html-language-features/.vscodeignore
@@ -17,4 +17,4 @@ yarn.lock
server/extension.webpack.config.js
extension.webpack.config.js
CONTRIBUTING.md
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/html-language-features/OSSREADME.json b/extensions/html-language-features/OSSREADME.json
deleted file mode 100644
index 95ad98fd9..000000000
--- a/extensions/html-language-features/OSSREADME.json
+++ /dev/null
@@ -1,95 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "js-beautify",
- "version": "1.6.8",
- "license": "MIT",
- "repositoryURL": "https://github.com/beautify-web/js-beautify"
-},
-{
- "name": "HTML 5.1 W3C Working Draft",
- "version": "08 October 2015",
- "license": "W3C Document License",
- "repositoryURL": "http://www.w3.org/TR/2015/WD-html51-20151008/",
- "licenseDetail": [
- "Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang). This software or document includes material copied ",
- "from or derived from HTML 5.1 W3C Working Draft (http://www.w3.org/TR/2015/WD-html51-20151008/.)",
- "",
- "THIS DOCUMENT IS PROVIDED \"AS IS,\" AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT ",
- "NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF ",
- "THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY ",
- "PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.",
- "",
- "COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE ",
- "DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.",
- "",
- "The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to this document or its contents",
- "without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders."
- ]
-},
-{
- "name": "Ionic documentation",
- "version": "1.2.4",
- "license": "Apache2",
- "repositoryURL": "https://github.com/ionic-team/ionic-site",
- "licenseDetail": [
- "Copyright Drifty Co. http://drifty.com/.",
- "",
- "Apache License",
- "",
- "Version 2.0, January 2004",
- "",
- "http://www.apache.org/licenses/",
- "",
- "TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION",
- "",
- "1. Definitions.",
- "",
- "\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.",
- "",
- "\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.",
- "",
- "\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.",
- "",
- "\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.",
- "",
- "\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.",
- "",
- "\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.",
- "",
- "\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).",
- "",
- "\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.",
- "",
- "\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"",
- "",
- "\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.",
- "",
- "2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.",
- "",
- "3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.",
- "",
- "4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:",
- "",
- "You must give any other recipients of the Work or Derivative Works a copy of this License; and",
- "",
- "You must cause any modified files to carry prominent notices stating that You changed the files; and",
- "",
- "You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and",
- "",
- "If the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.",
- "",
- "5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.",
- "",
- "6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.",
- "",
- "7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.",
- "",
- "8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.",
- "",
- "9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.",
- "",
- "END OF TERMS AND CONDITIONS"
- ]
-}
-
-]
diff --git a/extensions/html-language-features/cgmanifest.json b/extensions/html-language-features/cgmanifest.json
new file mode 100644
index 000000000..7f57d61af
--- /dev/null
+++ b/extensions/html-language-features/cgmanifest.json
@@ -0,0 +1,115 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "js-beautify",
+ "repositoryUrl": "https://github.com/beautify-web/js-beautify",
+ "commitHash": "12e73365f9d0b203843c5b7c22d7017845a7c580"
+ }
+ },
+ "license": "MIT",
+ "version": "1.6.8"
+ },
+ {
+ "component": {
+ "type": "other",
+ "other": {
+ "name": "HTML 5.1 W3C Working Draft",
+ "downloadUrl": "http://www.w3.org/TR/2015/WD-html51-20151008/",
+ "version": "08 October 2015"
+ }
+ },
+ "licenseDetail": [
+ "Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang). This software or document includes material copied ",
+ "from or derived from HTML 5.1 W3C Working Draft (http://www.w3.org/TR/2015/WD-html51-20151008/.)",
+ "",
+ "THIS DOCUMENT IS PROVIDED \"AS IS,\" AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT ",
+ "NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF ",
+ "THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY ",
+ "PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.",
+ "",
+ "COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE ",
+ "DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF.",
+ "",
+ "The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to this document or its contents",
+ "without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders."
+ ],
+ "license": "W3C Document License",
+ "version": "08 October 2015"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Ionic documentation",
+ "repositoryUrl": "https://github.com/ionic-team/ionic-site",
+ "commitHash": "e952bde103470738e19a456ec4acb0f1e650b619"
+ }
+ },
+ "licenseDetail": [
+ "Copyright Drifty Co. http://drifty.com/.",
+ "",
+ "Apache License",
+ "",
+ "Version 2.0, January 2004",
+ "",
+ "http://www.apache.org/licenses/",
+ "",
+ "TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION",
+ "",
+ "1. Definitions.",
+ "",
+ "\"License\" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.",
+ "",
+ "\"Licensor\" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.",
+ "",
+ "\"Legal Entity\" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \"control\" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.",
+ "",
+ "\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising permissions granted by this License.",
+ "",
+ "\"Source\" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.",
+ "",
+ "\"Object\" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.",
+ "",
+ "\"Work\" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).",
+ "",
+ "\"Derivative Works\" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.",
+ "",
+ "\"Contribution\" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \"submitted\" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \"Not a Contribution.\"",
+ "",
+ "\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.",
+ "",
+ "2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.",
+ "",
+ "3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.",
+ "",
+ "4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:",
+ "",
+ "You must give any other recipients of the Work or Derivative Works a copy of this License; and",
+ "",
+ "You must cause any modified files to carry prominent notices stating that You changed the files; and",
+ "",
+ "You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and",
+ "",
+ "If the Work includes a \"NOTICE\" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.",
+ "",
+ "5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.",
+ "",
+ "6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.",
+ "",
+ "7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.",
+ "",
+ "8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.",
+ "",
+ "9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.",
+ "",
+ "END OF TERMS AND CONDITIONS"
+ ],
+ "license": "Apache2",
+ "version": "1.2.4"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/html-language-features/icons/html.png b/extensions/html-language-features/icons/html.png
index f3f6d91b2..0d2fbe31d 100644
Binary files a/extensions/html-language-features/icons/html.png and b/extensions/html-language-features/icons/html.png differ
diff --git a/extensions/html-language-features/server/lib/OSSREADME.json b/extensions/html-language-features/server/lib/OSSREADME.json
deleted file mode 100644
index e5dbcd89d..000000000
--- a/extensions/html-language-features/server/lib/OSSREADME.json
+++ /dev/null
@@ -1,6 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "definitelytyped",
- "repositoryURL": "https://github.com/DefinitelyTyped/DefinitelyTyped",
- "license": "MIT"
-}]
\ No newline at end of file
diff --git a/extensions/html-language-features/server/lib/cgmanifest.json b/extensions/html-language-features/server/lib/cgmanifest.json
new file mode 100644
index 000000000..6e529a79f
--- /dev/null
+++ b/extensions/html-language-features/server/lib/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "definitelytyped",
+ "repositoryUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped",
+ "commitHash": "69e3ac6bec3008271f76bbfa7cf69aa9198c4ff0"
+ }
+ },
+ "license": "MIT"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/html-language-features/server/package.json b/extensions/html-language-features/server/package.json
index c46f30cf5..93882a7ec 100644
--- a/extensions/html-language-features/server/package.json
+++ b/extensions/html-language-features/server/package.json
@@ -9,8 +9,8 @@
},
"main": "./out/htmlServerMain",
"dependencies": {
- "vscode-css-languageservice": "^3.0.12-next.1",
- "vscode-html-languageservice": "^2.1.9",
+ "vscode-css-languageservice": "^3.0.12",
+ "vscode-html-languageservice": "^2.1.10",
"vscode-languageserver": "^5.1.0",
"vscode-languageserver-types": "^3.13.0",
"vscode-nls": "^4.0.0",
diff --git a/extensions/html-language-features/server/yarn.lock b/extensions/html-language-features/server/yarn.lock
index 48ff5aef2..6530713c4 100644
--- a/extensions/html-language-features/server/yarn.lock
+++ b/extensions/html-language-features/server/yarn.lock
@@ -229,18 +229,18 @@ supports-color@5.4.0:
dependencies:
has-flag "^3.0.0"
-vscode-css-languageservice@^3.0.12-next.1:
- version "3.0.12-next.1"
- resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.12-next.1.tgz#1bc76d04f68b6d3d9b25cf01592ba46cea91c26c"
- integrity sha512-Be1pfmRlcRsKMl1O/5rci8lu8RlE5vwT8LOjUEfHZkz5eHL2n9rTLo3dzmbVGtSL7+T1XEArjqUks9MzzDUhcw==
+vscode-css-languageservice@^3.0.12:
+ version "3.0.12"
+ resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.12.tgz#fb4aac5ae3c5b761b1db1d7224b78ff824284dc3"
+ integrity sha512-+FLQ9LcukIhnxaGTjDOqb3Nb1hesz9BLXf5yeoZxUsuK7joADPLPdxLwlZugFcMAvgmtnaFIGnzkQhGOVqf5yw==
dependencies:
vscode-languageserver-types "^3.13.0"
vscode-nls "^4.0.0"
-vscode-html-languageservice@^2.1.9:
- version "2.1.9"
- resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.1.9.tgz#906f2f894b023d3a464739ebc5b4eb695ef1cf58"
- integrity sha512-zHb6zqt55THIkHjywsjBqGwBr9vCOmBDh6mGyyawGi/8XH2Y6yIAH7KXTxN4Ov9A2M0CT2mwSA3tl+IKtIJtjg==
+vscode-html-languageservice@^2.1.10:
+ version "2.1.10"
+ resolved "https://registry.yarnpkg.com/vscode-html-languageservice/-/vscode-html-languageservice-2.1.10.tgz#3433fd53e188cb25d5ea190b61a148fe9965ff91"
+ integrity sha512-nuzLd7a3J+Ttvk/9Pg2H0vS7rV2oZRfsQYPRheHnUNJNqivkcieSI8ZCGvZjmr3NDBG2QQaRFambnCtceYAj3A==
dependencies:
vscode-languageserver-types "^3.13.0"
vscode-nls "^4.0.0"
diff --git a/extensions/html/.vscodeignore b/extensions/html/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/html/.vscodeignore
+++ b/extensions/html/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/html/OSSREADME.json b/extensions/html/OSSREADME.json
deleted file mode 100644
index 6d2ab8bb1..000000000
--- a/extensions/html/OSSREADME.json
+++ /dev/null
@@ -1,22 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "textmate/html.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/html.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-html.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/html/cgmanifest.json b/extensions/html/cgmanifest.json
new file mode 100644
index 000000000..7f3cc9396
--- /dev/null
+++ b/extensions/html/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/html.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/html.tmbundle",
+ "commitHash": "390c8870273a2ae80244dae6db6ba064a802f407"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-html.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/ini/.vscodeignore b/extensions/ini/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/ini/.vscodeignore
+++ b/extensions/ini/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/ini/OSSREADME.json b/extensions/ini/OSSREADME.json
deleted file mode 100644
index 2a916c76b..000000000
--- a/extensions/ini/OSSREADME.json
+++ /dev/null
@@ -1,22 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "textmate/ini.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/ini.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-ini.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this folder fall under the following license: ",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information, ",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added ",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example ",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/ini/cgmanifest.json b/extensions/ini/cgmanifest.json
new file mode 100644
index 000000000..ef9fa28b5
--- /dev/null
+++ b/extensions/ini/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/ini.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/ini.tmbundle",
+ "commitHash": "2af0cbb0704940f967152616f2f1ff0aae6287a6"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-ini.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this folder fall under the following license: ",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information, ",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added ",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example ",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/jake/images/cowboy_hat.png b/extensions/jake/images/cowboy_hat.png
index 89c708be0..22bd74def 100644
Binary files a/extensions/jake/images/cowboy_hat.png and b/extensions/jake/images/cowboy_hat.png differ
diff --git a/extensions/jake/src/main.ts b/extensions/jake/src/main.ts
index c4e20edf1..938ca51be 100644
--- a/extensions/jake/src/main.ts
+++ b/extensions/jake/src/main.ts
@@ -81,7 +81,7 @@ class FolderDetector {
}
public start(): void {
- let pattern = path.join(this._workspaceFolder.uri.fsPath, '{Jakefile,Jakefile.js}');
+ let pattern = path.join(this._workspaceFolder.uri.fsPath, '{node_modules,Jakefile,Jakefile.js}');
this.fileWatcher = vscode.workspace.createFileSystemWatcher(pattern);
this.fileWatcher.onDidChange(() => this.promise = undefined);
this.fileWatcher.onDidCreate(() => this.promise = undefined);
diff --git a/extensions/java/.vscodeignore b/extensions/java/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/java/.vscodeignore
+++ b/extensions/java/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/java/OSSREADME.json b/extensions/java/OSSREADME.json
deleted file mode 100644
index c87e95751..000000000
--- a/extensions/java/OSSREADME.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "atom/language-java",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-java",
- "description": "The file syntaxes/java.tmLanguage.json was derived from the Atom package https://github.com/atom/language-java which was originally converted from the TextMate bundle https://github.com/textmate/java.tmbundle."
-
-}]
diff --git a/extensions/java/cgmanifest.json b/extensions/java/cgmanifest.json
new file mode 100644
index 000000000..cff02de7c
--- /dev/null
+++ b/extensions/java/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-java",
+ "repositoryUrl": "https://github.com/atom/language-java",
+ "commitHash": "95ebcd0b15c369666ecc4d1593495466132dd5bf"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/java/syntaxes/java.tmLanguage.json b/extensions/java/syntaxes/java.tmLanguage.json
index b0ecaec63..2ccdc0733 100644
--- a/extensions/java/syntaxes/java.tmLanguage.json
+++ b/extensions/java/syntaxes/java.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/atom/language-java/commit/295af4375e4a5da4a4352fa08a8bb3e17145ec47",
+ "version": "https://github.com/atom/language-java/commit/95ebcd0b15c369666ecc4d1593495466132dd5bf",
"name": "Java",
"scopeName": "source.java",
"patterns": [
@@ -373,7 +373,7 @@
"include": "#static-initializer"
},
{
- "include": "#methods"
+ "include": "#class-fields-and-methods"
},
{
"include": "#annotations"
@@ -389,6 +389,22 @@
}
]
},
+ "class-fields-and-methods": {
+ "patterns": [
+ {
+ "begin": "(?=\\=)",
+ "end": "(?=;)",
+ "patterns": [
+ {
+ "include": "#code"
+ }
+ ]
+ },
+ {
+ "include": "#methods"
+ }
+ ]
+ },
"code": {
"patterns": [
{
@@ -442,6 +458,9 @@
{
"include": "#variables"
},
+ {
+ "include": "#variables-local"
+ },
{
"include": "#objects"
},
@@ -479,9 +498,6 @@
"match": "/\\*\\*/",
"name": "comment.block.empty.java"
},
- {
- "include": "text.html.javadoc"
- },
{
"include": "#comments-inline"
}
@@ -911,7 +927,7 @@
"include": "#parens"
},
{
- "include": "#comments-inline"
+ "include": "#comments"
}
]
},
@@ -928,6 +944,9 @@
},
{
"include": "#parens"
+ },
+ {
+ "include": "#comments"
}
]
},
@@ -1496,12 +1515,12 @@
]
},
"variables": {
- "begin": "(?x)\n(?=\n (\n \\b(void|boolean|byte|char|short|int|float|long|double)\\b\n |\n (?>(\\w+\\.)*[A-Z]+\\w*) # e.g. `javax.ws.rs.Response`, or `String`\n )\n (\n <[\\w<>,\\.?\\s\\[\\]]*> # e.g. `HashMap`, or `List`\n )?\n (\n (\\[\\])* # int[][]\n )?\n \\s+\n [A-Za-z_$][\\w$]* # At least one identifier after space\n ([\\w\\[\\],$][\\w\\[\\],\\s]*)? # possibly primitive array or additional identifiers\n \\s*(=|;)\n)",
- "end": "(?=\\=|;)",
+ "begin": "(?x)\n(?=\n (\n \\b(void|boolean|byte|char|short|int|float|long|double)\\b\n |\n (?>(\\w+\\.)*[A-Z]+\\w*) # e.g. `javax.ws.rs.Response`, or `String`\n )\n (\n <[\\w<>,\\.?\\s\\[\\]]*> # e.g. `HashMap`, or `List`\n )?\n (\n (\\[\\])* # int[][]\n )?\n \\s+\n [A-Za-z_$][\\w$]* # At least one identifier after space\n ([\\w\\[\\],$][\\w\\[\\],\\s]*)? # possibly primitive array or additional identifiers\n \\s*(=|:|;)\n)",
+ "end": "(?=\\=|:|;)",
"name": "meta.definition.variable.java",
"patterns": [
{
- "match": "([A-Za-z$_][\\w$]*)(?=\\s*(\\[\\])*\\s*(;|=|,))",
+ "match": "([A-Za-z$_][\\w$]*)(?=\\s*(\\[\\])*\\s*(;|:|=|,))",
"captures": {
"1": {
"name": "variable.other.definition.java"
@@ -1515,6 +1534,28 @@
"include": "#code"
}
]
+ },
+ "variables-local": {
+ "begin": "(?=\\b(var)\\b\\s+[A-Za-z_$][\\w$]*\\s*(=|:|;))",
+ "end": "(?=\\=|:|;)",
+ "name": "meta.definition.variable.local.java",
+ "patterns": [
+ {
+ "match": "\\bvar\\b",
+ "name": "storage.type.local.java"
+ },
+ {
+ "match": "([A-Za-z$_][\\w$]*)(?=\\s*(\\[\\])*\\s*(=|:|;))",
+ "captures": {
+ "1": {
+ "name": "variable.other.definition.java"
+ }
+ }
+ },
+ {
+ "include": "#code"
+ }
+ ]
}
}
}
\ No newline at end of file
diff --git a/extensions/javascript/.vscodeignore b/extensions/javascript/.vscodeignore
index 80239a4dd..b93dc7566 100644
--- a/extensions/javascript/.vscodeignore
+++ b/extensions/javascript/.vscodeignore
@@ -1,4 +1,4 @@
test/**
src/**/*.ts
tsconfig.json
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/javascript/OSSREADME.json b/extensions/javascript/OSSREADME.json
deleted file mode 100644
index ad083ab87..000000000
--- a/extensions/javascript/OSSREADME.json
+++ /dev/null
@@ -1,30 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Microsoft/TypeScript-TmLanguage",
- "version": "0.0.1",
- "license": "MIT",
- "repositoryURL": "https://github.com/Microsoft/TypeScript-TmLanguage",
- "description": "The file syntaxes/JavaScript.tmLanguage.json was derived from TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage."
-},
-{
- "name": "textmate/javascript.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/javascript.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-javascript.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/javascript/cgmanifest.json b/extensions/javascript/cgmanifest.json
new file mode 100644
index 000000000..7053443ef
--- /dev/null
+++ b/extensions/javascript/cgmanifest.json
@@ -0,0 +1,45 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Microsoft/TypeScript-TmLanguage",
+ "repositoryUrl": "https://github.com/Microsoft/TypeScript-TmLanguage",
+ "commitHash": "3133e3d914db9a2bb8812119f9273727a305f16b"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.1",
+ "description": "The file syntaxes/JavaScript.tmLanguage.json was derived from TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage."
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/javascript.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/javascript.tmbundle",
+ "commitHash": "fccf0af0c95430a42e1bf98f0c7a4723a53283e7"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-javascript.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json
index e6a93b338..50fa8fca3 100644
--- a/extensions/javascript/syntaxes/JavaScript.tmLanguage.json
+++ b/extensions/javascript/syntaxes/JavaScript.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/a34cb117a38ac6f6eae0df88db984780c6b3df1e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/3133e3d914db9a2bb8812119f9273727a305f16b",
"name": "JavaScript (with React support)",
"scopeName": "source.js",
"patterns": [
@@ -1153,7 +1153,7 @@
"name": "meta.definition.function.js entity.name.function.js"
}
},
- "end": "(?=$|^|;)|(?<=\\})",
+ "end": "(?=;|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|(?<=\\})",
"patterns": [
{
"include": "#function-name"
@@ -1413,6 +1413,9 @@
},
{
"include": "#arrow-return-type"
+ },
+ {
+ "include": "#possibly-arrow-return-type"
}
]
},
@@ -1424,8 +1427,11 @@
"name": "storage.type.function.arrow.js"
}
},
- "end": "(?<=\\}|\\S)(?)|((?!\\{)(?=\\S))",
+ "end": "((?<=\\}|\\S)(?)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])",
"patterns": [
+ {
+ "include": "#single-line-comment-consuming-line-ending"
+ },
{
"include": "#decl-block"
},
@@ -2623,13 +2629,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.js",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -3505,7 +3511,7 @@
]
},
"possibly-arrow-return-type": {
- "begin": "(?<=\\))\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
+ "begin": "(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
"beginCaptures": {
"1": {
"name": "meta.arrow.js meta.return.type.arrow.js keyword.operator.type.annotation.js"
@@ -3587,6 +3593,14 @@
}
},
"patterns": [
+ {
+ "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))))",
"captures": {
@@ -3937,7 +3948,7 @@
"include": "#typeof-operator"
},
{
- "begin": "([&|\\*])(?=\\s*\\{)",
+ "begin": "([&|])(?=\\s*\\{)",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.js"
@@ -3951,7 +3962,7 @@
]
},
{
- "begin": "[&|\\*]",
+ "begin": "[&|]",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.js"
@@ -4089,7 +4100,7 @@
"patterns": [
{
"name": "string.template.js",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.js"
diff --git a/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json b/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json
index 9c78c7a3c..38aff6651 100644
--- a/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json
+++ b/extensions/javascript/syntaxes/JavaScriptReact.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/a34cb117a38ac6f6eae0df88db984780c6b3df1e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/3133e3d914db9a2bb8812119f9273727a305f16b",
"name": "JavaScript (with React support)",
"scopeName": "source.js.jsx",
"patterns": [
@@ -1153,7 +1153,7 @@
"name": "meta.definition.function.js.jsx entity.name.function.js.jsx"
}
},
- "end": "(?=$|^|;)|(?<=\\})",
+ "end": "(?=;|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|(?<=\\})",
"patterns": [
{
"include": "#function-name"
@@ -1413,6 +1413,9 @@
},
{
"include": "#arrow-return-type"
+ },
+ {
+ "include": "#possibly-arrow-return-type"
}
]
},
@@ -1424,8 +1427,11 @@
"name": "storage.type.function.arrow.js.jsx"
}
},
- "end": "(?<=\\}|\\S)(?)|((?!\\{)(?=\\S))",
+ "end": "((?<=\\}|\\S)(?)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])",
"patterns": [
+ {
+ "include": "#single-line-comment-consuming-line-ending"
+ },
{
"include": "#decl-block"
},
@@ -2623,13 +2629,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.js.jsx",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -3505,7 +3511,7 @@
]
},
"possibly-arrow-return-type": {
- "begin": "(?<=\\))\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
+ "begin": "(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
"beginCaptures": {
"1": {
"name": "meta.arrow.js.jsx meta.return.type.arrow.js.jsx keyword.operator.type.annotation.js.jsx"
@@ -3587,6 +3593,14 @@
}
},
"patterns": [
+ {
+ "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))))",
"captures": {
@@ -3937,7 +3948,7 @@
"include": "#typeof-operator"
},
{
- "begin": "([&|\\*])(?=\\s*\\{)",
+ "begin": "([&|])(?=\\s*\\{)",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.js.jsx"
@@ -3951,7 +3962,7 @@
]
},
{
- "begin": "[&|\\*]",
+ "begin": "[&|]",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.js.jsx"
@@ -4089,7 +4100,7 @@
"patterns": [
{
"name": "string.template.js.jsx",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.js.jsx"
diff --git a/extensions/json-language-features/.vscode/tasks.json b/extensions/json-language-features/.vscode/tasks.json
index 9e5593ade..390a93a3a 100644
--- a/extensions/json-language-features/.vscode/tasks.json
+++ b/extensions/json-language-features/.vscode/tasks.json
@@ -1,30 +1,11 @@
-// Available variables which can be used inside of strings.
-// ${workspaceFolder}: the root folder of the team
-// ${file}: the current opened file
-// ${fileBasename}: the current opened file's basename
-// ${fileDirname}: the current opened file's dirname
-// ${fileExtname}: the current opened file's extension
-// ${cwd}: the current working directory of the spawned process
-
-// A task runner that calls a custom npm script that compiles the extension.
{
- "version": "0.1.0",
-
- // we want to run npm
+ "version": "2.0.0",
"command": "npm",
-
- // the command is a shell script
- "isShellCommand": true,
-
- // show the output window only if unrecognized errors occur.
- "showOutput": "silent",
-
- // we run the custom script "compile" as defined in package.json
+ "type": "shell",
+ "presentation": {
+ "reveal": "silent"
+ },
"args": ["run", "compile"],
-
- // The tsc compiler is started in watching mode
- "isWatching": true,
-
- // use the standard tsc in watch mode problem matcher to find compile problems in the output.
+ "isBackground": true,
"problemMatcher": "$tsc-watch"
-}
\ No newline at end of file
+}
diff --git a/extensions/json-language-features/client/src/jsonMain.ts b/extensions/json-language-features/client/src/jsonMain.ts
index 8da28460f..759ef0381 100644
--- a/extensions/json-language-features/client/src/jsonMain.ts
+++ b/extensions/json-language-features/client/src/jsonMain.ts
@@ -8,8 +8,8 @@ import * as fs from 'fs';
import * as nls from 'vscode-nls';
const localize = nls.loadMessageBundle();
-import { workspace, languages, ExtensionContext, extensions, Uri, LanguageConfiguration } from 'vscode';
-import { LanguageClient, LanguageClientOptions, RequestType, ServerOptions, TransportKind, NotificationType, DidChangeConfigurationNotification } from 'vscode-languageclient';
+import { workspace, window, languages, commands, ExtensionContext, extensions, Uri, LanguageConfiguration, Diagnostic, StatusBarAlignment, TextEditor } from 'vscode';
+import { LanguageClient, LanguageClientOptions, RequestType, ServerOptions, TransportKind, NotificationType, DidChangeConfigurationNotification, HandleDiagnosticsSignature } from 'vscode-languageclient';
import TelemetryReporter from 'vscode-extension-telemetry';
import { hash } from './utils/hash';
@@ -22,6 +22,10 @@ namespace SchemaContentChangeNotification {
export const type: NotificationType = new NotificationType('json/schemaContent');
}
+namespace ForceValidateRequest {
+ export const type: RequestType = new RequestType('json/validate');
+}
+
export interface ISchemaAssociations {
[pattern: string]: string[];
}
@@ -77,6 +81,14 @@ export function activate(context: ExtensionContext) {
let documentSelector = ['json', 'jsonc'];
+ let schemaResolutionErrorStatusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0);
+ schemaResolutionErrorStatusBarItem.command = '_json.retryResolveSchema';
+ schemaResolutionErrorStatusBarItem.tooltip = localize('json.schemaResolutionErrorMessage', 'Unable to resolve schema.') + ' ' + localize('json.clickToRetry', 'Click to retry.');
+ schemaResolutionErrorStatusBarItem.text = '$(alert)';
+ toDispose.push(schemaResolutionErrorStatusBarItem);
+
+ let fileSchemaErrors = new Map();
+
// Options to control the language client
let clientOptions: LanguageClientOptions = {
// Register the server for json documents
@@ -89,6 +101,23 @@ export function activate(context: ExtensionContext) {
middleware: {
workspace: {
didChangeConfiguration: () => client.sendNotification(DidChangeConfigurationNotification.type, { settings: getSettings() })
+ },
+ handleDiagnostics: (uri: Uri, diagnostics: Diagnostic[], next: HandleDiagnosticsSignature) => {
+ const schemaErrorIndex = diagnostics.findIndex(candidate => candidate.code === /* SchemaResolveError */ 0x300);
+
+ if (schemaErrorIndex === -1) {
+ fileSchemaErrors.delete(uri.toString());
+ return next(uri, diagnostics);
+ }
+
+ const schemaResolveDiagnostic = diagnostics[schemaErrorIndex];
+ fileSchemaErrors.set(uri.toString(), schemaResolveDiagnostic.message);
+
+ if (window.activeTextEditor && window.activeTextEditor.document.uri.toString() === uri.toString()) {
+ schemaResolutionErrorStatusBarItem.show();
+ }
+
+ next(uri, diagnostics);
}
}
};
@@ -121,8 +150,47 @@ export function activate(context: ExtensionContext) {
client.sendNotification(SchemaContentChangeNotification.type, uri.toString());
}
};
+
+ let handleActiveEditorChange = (activeEditor?: TextEditor) => {
+ if (!activeEditor) {
+ return;
+ }
+
+ const activeDocUri = activeEditor.document.uri.toString();
+
+ if (activeDocUri && fileSchemaErrors.has(activeDocUri)) {
+ schemaResolutionErrorStatusBarItem.show();
+ } else {
+ schemaResolutionErrorStatusBarItem.hide();
+ }
+ };
+
toDispose.push(workspace.onDidChangeTextDocument(e => handleContentChange(e.document.uri)));
- toDispose.push(workspace.onDidCloseTextDocument(d => handleContentChange(d.uri)));
+ toDispose.push(workspace.onDidCloseTextDocument(d => {
+ handleContentChange(d.uri);
+ fileSchemaErrors.delete(d.uri.toString());
+ }));
+ toDispose.push(window.onDidChangeActiveTextEditor(handleActiveEditorChange));
+
+ let handleRetryResolveSchemaCommand = () => {
+ if (window.activeTextEditor) {
+ schemaResolutionErrorStatusBarItem.text = '$(watch)';
+ const activeDocUri = window.activeTextEditor.document.uri.toString();
+ client.sendRequest(ForceValidateRequest.type, activeDocUri).then((diagnostics) => {
+ const schemaErrorIndex = diagnostics.findIndex(candidate => candidate.code === /* SchemaResolveError */ 0x300);
+ if (schemaErrorIndex !== -1) {
+ // Show schema resolution errors in status bar only; ref: #51032
+ const schemaResolveDiagnostic = diagnostics[schemaErrorIndex];
+ fileSchemaErrors.set(activeDocUri, schemaResolveDiagnostic.message);
+ } else {
+ schemaResolutionErrorStatusBarItem.hide();
+ }
+ schemaResolutionErrorStatusBarItem.text = '$(alert)';
+ });
+ }
+ };
+
+ toDispose.push(commands.registerCommand('_json.retryResolveSchema', handleRetryResolveSchemaCommand));
client.sendNotification(SchemaAssociationNotification.type, getSchemaAssociation(context));
});
diff --git a/extensions/json-language-features/icons/json.png b/extensions/json-language-features/icons/json.png
index 777432542..c68dbac43 100644
Binary files a/extensions/json-language-features/icons/json.png and b/extensions/json-language-features/icons/json.png differ
diff --git a/extensions/json-language-features/package.json b/extensions/json-language-features/package.json
index b5df7479a..a1a5204c8 100644
--- a/extensions/json-language-features/package.json
+++ b/extensions/json-language-features/package.json
@@ -15,7 +15,8 @@
],
"main": "./client/out/jsonMain",
"scripts": {
- "compile": "gulp compile-extension:json-language-features-client && gulp compile-extension:json-language-features-server",
+ "compile": "gulp compile-extension:json-language-features-client compile-extension:json-language-features-server",
+ "watch": "gulp watch-extension:json-language-features-client watch-extension:json-language-features-server",
"postinstall": "cd server && yarn install",
"install-client-next": "yarn add vscode-languageclient@next"
},
diff --git a/extensions/json-language-features/package.nls.json b/extensions/json-language-features/package.nls.json
index 943de414e..c61e7b70e 100644
--- a/extensions/json-language-features/package.nls.json
+++ b/extensions/json-language-features/package.nls.json
@@ -9,5 +9,7 @@
"json.format.enable.desc": "Enable/disable default JSON formatter",
"json.tracing.desc": "Traces the communication between VS Code and the JSON language server.",
"json.colorDecorators.enable.desc": "Enables or disables color decorators",
- "json.colorDecorators.enable.deprecationMessage": "The setting `json.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`."
-}
\ No newline at end of file
+ "json.colorDecorators.enable.deprecationMessage": "The setting `json.colorDecorators.enable` has been deprecated in favor of `editor.colorDecorators`.",
+ "json.schemaResolutionErrorMessage": "Unable to resolve schema.",
+ "json.clickToRetry": "Click to retry."
+}
diff --git a/extensions/json-language-features/server/package.json b/extensions/json-language-features/server/package.json
index 5e7de8ed7..db0182fa0 100644
--- a/extensions/json-language-features/server/package.json
+++ b/extensions/json-language-features/server/package.json
@@ -14,7 +14,7 @@
"dependencies": {
"jsonc-parser": "^2.0.2",
"request-light": "^0.2.4",
- "vscode-json-languageservice": "^3.2.0",
+ "vscode-json-languageservice": "^3.2.1",
"vscode-languageserver": "^5.1.0",
"vscode-nls": "^4.0.0",
"vscode-uri": "^1.0.6"
diff --git a/extensions/json-language-features/server/src/jsonServerMain.ts b/extensions/json-language-features/server/src/jsonServerMain.ts
index 6eadf2403..8a8ce6423 100644
--- a/extensions/json-language-features/server/src/jsonServerMain.ts
+++ b/extensions/json-language-features/server/src/jsonServerMain.ts
@@ -6,7 +6,7 @@
import {
createConnection, IConnection,
TextDocuments, TextDocument, InitializeParams, InitializeResult, NotificationType, RequestType,
- DocumentRangeFormattingRequest, Disposable, ServerCapabilities
+ DocumentRangeFormattingRequest, Disposable, ServerCapabilities, Diagnostic
} from 'vscode-languageserver';
import { xhr, XHRResponse, configure as configureHttpRequests, getErrorStatusDescription } from 'request-light';
@@ -34,6 +34,10 @@ namespace SchemaContentChangeNotification {
export const type: NotificationType = new NotificationType('json/schemaContent');
}
+namespace ForceValidateRequest {
+ export const type: RequestType = new RequestType('json/validate');
+}
+
// Create a connection for the server
const connection: IConnection = createConnection();
@@ -207,6 +211,21 @@ connection.onNotification(SchemaContentChangeNotification.type, uri => {
languageService.resetSchema(uri);
});
+// Retry schema validation on all open documents
+connection.onRequest(ForceValidateRequest.type, uri => {
+ return new Promise(resolve => {
+ const document = documents.get(uri);
+ if (document) {
+ updateConfiguration();
+ validateTextDocument(document, diagnostics => {
+ resolve(diagnostics);
+ });
+ } else {
+ resolve([]);
+ }
+ });
+});
+
function updateConfiguration() {
const languageSettings = {
validate: true,
@@ -271,10 +290,15 @@ function triggerValidation(textDocument: TextDocument): void {
}, validationDelayMs);
}
-function validateTextDocument(textDocument: TextDocument): void {
+function validateTextDocument(textDocument: TextDocument, callback?: (diagnostics: Diagnostic[]) => void): void {
+ const respond = (diagnostics: Diagnostic[]) => {
+ connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
+ if (callback) {
+ callback(diagnostics);
+ }
+ };
if (textDocument.getText().length === 0) {
- // ignore empty documents
- connection.sendDiagnostics({ uri: textDocument.uri, diagnostics: [] });
+ respond([]); // ignore empty documents
return;
}
const jsonDocument = getJSONDocument(textDocument);
@@ -285,8 +309,7 @@ function validateTextDocument(textDocument: TextDocument): void {
setTimeout(() => {
const currDocument = documents.get(textDocument.uri);
if (currDocument && currDocument.version === version) {
- // Send the computed diagnostics to VSCode.
- connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
+ respond(diagnostics); // Send the computed diagnostics to VSCode.
}
}, 100);
}, error => {
@@ -405,4 +428,4 @@ connection.onFoldingRanges((params, token) => {
});
// Listen on the connection
-connection.listen();
\ No newline at end of file
+connection.listen();
diff --git a/extensions/json-language-features/server/yarn.lock b/extensions/json-language-features/server/yarn.lock
index e4c2fee15..012e34636 100644
--- a/extensions/json-language-features/server/yarn.lock
+++ b/extensions/json-language-features/server/yarn.lock
@@ -73,10 +73,10 @@ request-light@^0.2.4:
https-proxy-agent "^2.2.1"
vscode-nls "^4.0.0"
-vscode-json-languageservice@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.2.0.tgz#fe796c2ddbda966d87905442f9636f139e00f341"
- integrity sha512-tLAv9/D01fLAvnYnZ1OLy03HSHhVFjaSkUidEjfrwytHrxVDgqXLkHAJg+F6Q3mPYfpnPQvN2jTjiJ1yInuNVg==
+vscode-json-languageservice@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.2.1.tgz#991d51128ebd81c5525d0578cabfa5b03e3cba2a"
+ integrity sha512-ee9MJ70/xR55ywvm0bZsDLhA800HCRE27AYgMNTU14RSg20Y+ngHdQnUt6OmiTXrQDI/7sne6QUOtHIN0hPQYA==
dependencies:
jsonc-parser "^2.0.2"
vscode-languageserver-types "^3.13.0"
diff --git a/extensions/json/.vscodeignore b/extensions/json/.vscodeignore
index d41e74d16..d42f161c7 100644
--- a/extensions/json/.vscodeignore
+++ b/extensions/json/.vscodeignore
@@ -1,3 +1,3 @@
build/**
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/json/OSSREADME.json b/extensions/json/OSSREADME.json
deleted file mode 100644
index 391402b86..000000000
--- a/extensions/json/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "Microsoft/vscode-JSON.tmLanguage",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/Microsoft/vscode-JSON.tmLanguage"
-}]
\ No newline at end of file
diff --git a/extensions/json/cgmanifest.json b/extensions/json/cgmanifest.json
new file mode 100644
index 000000000..d0b23b7e0
--- /dev/null
+++ b/extensions/json/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Microsoft/vscode-JSON.tmLanguage",
+ "repositoryUrl": "https://github.com/Microsoft/vscode-JSON.tmLanguage",
+ "commitHash": "9bd83f1c252b375e957203f21793316203f61f70"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/less/.vscodeignore b/extensions/less/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/less/.vscodeignore
+++ b/extensions/less/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/less/OSSREADME.json b/extensions/less/OSSREADME.json
deleted file mode 100644
index d0dfbef7c..000000000
--- a/extensions/less/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "language-less",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-less"
-}]
diff --git a/extensions/less/cgmanifest.json b/extensions/less/cgmanifest.json
new file mode 100644
index 000000000..0b6d4d471
--- /dev/null
+++ b/extensions/less/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "language-less",
+ "repositoryUrl": "https://github.com/atom/language-less",
+ "commitHash": "87d4d59e8de6796b506b81a16e1dc1fafc99d30f"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/log/.vscodeignore b/extensions/log/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/log/.vscodeignore
+++ b/extensions/log/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/log/OSSREADME.json b/extensions/log/OSSREADME.json
deleted file mode 100644
index 048224ec0..000000000
--- a/extensions/log/OSSREADME.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
- {
- "name": "vscode-logfile-highlighter",
- "version": "1.2.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/emilast/vscode-logfile-highlighter"
- }
-]
\ No newline at end of file
diff --git a/extensions/log/cgmanifest.json b/extensions/log/cgmanifest.json
new file mode 100644
index 000000000..fc6eb3965
--- /dev/null
+++ b/extensions/log/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "vscode-logfile-highlighter",
+ "repositoryUrl": "https://github.com/emilast/vscode-logfile-highlighter",
+ "commitHash": "30a19d24b9a0070b0fab5eef45f89c92e7cd71ea"
+ }
+ },
+ "license": "MIT",
+ "version": "1.2.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/lua/.vscodeignore b/extensions/lua/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/lua/.vscodeignore
+++ b/extensions/lua/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/lua/OSSREADME.json b/extensions/lua/OSSREADME.json
deleted file mode 100644
index 792bc1d9c..000000000
--- a/extensions/lua/OSSREADME.json
+++ /dev/null
@@ -1,22 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "textmate/lua.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/lua.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-lua.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/lua/cgmanifest.json b/extensions/lua/cgmanifest.json
new file mode 100644
index 000000000..78d8538bf
--- /dev/null
+++ b/extensions/lua/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/lua.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/lua.tmbundle",
+ "commitHash": "8ae5641365b28f697121ba1133890e8d81f5b00e"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-lua.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/make/.vscodeignore b/extensions/make/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/make/.vscodeignore
+++ b/extensions/make/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/make/OSSREADME.json b/extensions/make/OSSREADME.json
deleted file mode 100644
index 504a7a260..000000000
--- a/extensions/make/OSSREADME.json
+++ /dev/null
@@ -1,24 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "fadeevab/make.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/fadeevab/make.tmbundle",
- "description": "The file syntaxes/Makefile.json was derived from Makefile.plist in https://github.com/fadeevab/make.tmbundle.",
- "licenseDetail": [
- "Copyright (c) textmate-make.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/make/cgmanifest.json b/extensions/make/cgmanifest.json
new file mode 100644
index 000000000..6ac84e7b1
--- /dev/null
+++ b/extensions/make/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "fadeevab/make.tmbundle",
+ "repositoryUrl": "https://github.com/fadeevab/make.tmbundle",
+ "commitHash": "c6b3ae6e4f22e01fc483be5bb34a9682c28f3219"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-make.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/make/syntaxes/make.tmLanguage.json b/extensions/make/syntaxes/make.tmLanguage.json
index acfd8adea..cae70e5ec 100644
--- a/extensions/make/syntaxes/make.tmLanguage.json
+++ b/extensions/make/syntaxes/make.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/fadeevab/make.tmbundle/commit/d94d403d6d31623763a4ff86b656886fa699ef60",
+ "version": "https://github.com/fadeevab/make.tmbundle/commit/c6b3ae6e4f22e01fc483be5bb34a9682c28f3219",
"name": "Makefile",
"scopeName": "source.makefile",
"patterns": [
@@ -17,6 +17,9 @@
{
"include": "#variable-assignment"
},
+ {
+ "include": "#target"
+ },
{
"include": "#recipe"
},
@@ -288,7 +291,7 @@
}
]
},
- "recipe": {
+ "target": {
"begin": "^(?!\\t)([^:]*)(:)(?!\\=)",
"beginCaptures": {
"1": {
@@ -344,37 +347,28 @@
"include": "#variables"
}
]
+ }
+ ]
+ },
+ "recipe": {
+ "begin": "^\\t",
+ "end": "[^\\\\]$",
+ "name": "meta.scope.recipe.makefile",
+ "patterns": [
+ {
+ "match": "\\\\\\n",
+ "name": "constant.character.escape.continuation.makefile"
},
{
- "begin": "^\\t",
- "name": "meta.scope.recipe.makefile",
- "patterns": [
- {
- "captures": {
- "0": {
- "patterns": [
- {
- "match": "\\\\\\n",
- "name": "constant.character.escape.continuation.makefile"
- },
- {
- "include": "#variables"
- },
- {
- "include": "source.shell"
- }
- ]
- }
- },
- "match": ".+\\n?"
- }
- ],
- "while": "^\\t"
+ "include": "#variables"
+ },
+ {
+ "include": "source.shell"
}
]
},
"variable-assignment": {
- "begin": "(^[ ]*|\\G\\s*)([^\\s]+)\\s*(=|\\?=|:=|\\+=)",
+ "begin": "(^[ ]*|\\G\\s*)([^\\s]+)\\s*((?= 40800",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
{
"c": ")",
"t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
@@ -1430,7 +2200,18 @@
}
},
{
- "c": "3rdparty.mk",
+ "c": "ok",
+ "t": "source.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": " ",
"t": "source.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
@@ -1441,19 +2222,19 @@
}
},
{
- "c": "ifeq",
- "t": "source.makefile meta.scope.conditional.makefile keyword.control.ifeq.makefile",
+ "c": ":=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
"r": {
- "dark_plus": "keyword.control: #C586C0",
- "light_plus": "keyword.control: #AF00DB",
- "dark_vs": "keyword.control: #569CD6",
- "light_vs": "keyword.control: #0000FF",
- "hc_black": "keyword.control: #C586C0"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
- "c": " (",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
+ "c": " ok",
+ "t": "source.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1464,7 +2245,7 @@
},
{
"c": "$(",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1474,8 +2255,8 @@
}
},
{
- "c": "strip",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.strip.makefile",
+ "c": "info",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.info.makefile",
"r": {
"dark_plus": "support.function: #DCDCAA",
"light_plus": "support.function: #795E26",
@@ -1485,8 +2266,8 @@
}
},
{
- "c": " ",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "c": " Braces {} in parentheses ({}): ",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1496,8 +2277,8 @@
}
},
{
- "c": "$(",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "${",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1507,30 +2288,19 @@
}
},
{
- "c": "call",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.call.makefile",
- "r": {
- "dark_plus": "support.function: #DCDCAA",
- "light_plus": "support.function: #795E26",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "support.function: #DCDCAA"
- }
- },
- {
- "c": " defined,CODIT_DIR",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "c": "ok",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
"dark_vs": "string: #CE9178",
"light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
+ "hc_black": "variable: #9CDCFE"
}
},
{
- "c": ")",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "}",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1541,7 +2311,7 @@
},
{
"c": ")",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1551,30 +2321,8 @@
}
},
{
- "c": ",0)",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
- "r": {
- "dark_plus": "default: #D4D4D4",
- "light_plus": "default: #000000",
- "dark_vs": "default: #D4D4D4",
- "light_vs": "default: #000000",
- "hc_black": "default: #FFFFFF"
- }
- },
- {
- "c": " ",
- "t": "source.makefile meta.scope.conditional.makefile",
- "r": {
- "dark_plus": "default: #D4D4D4",
- "light_plus": "default: #000000",
- "dark_vs": "default: #D4D4D4",
- "light_vs": "default: #000000",
- "hc_black": "default: #FFFFFF"
- }
- },
- {
- "c": "$(",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "${",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1585,7 +2333,7 @@
},
{
"c": "info",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.info.makefile",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.info.makefile",
"r": {
"dark_plus": "support.function: #DCDCAA",
"light_plus": "support.function: #795E26",
@@ -1595,8 +2343,8 @@
}
},
{
- "c": " CODIT_DIR must be set in ",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "c": " Parentheses () in braces {()}: ",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1607,7 +2355,7 @@
},
{
"c": "$(",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1617,8 +2365,8 @@
}
},
{
- "c": "TOP_DIR",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
+ "c": "ok",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
@@ -1629,18 +2377,7 @@
},
{
"c": ")",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
- "r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
- }
- },
- {
- "c": "3rdparty.mk",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1650,8 +2387,8 @@
}
},
{
- "c": ")",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "}",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1661,8 +2398,8 @@
}
},
{
- "c": "endif",
- "t": "source.makefile meta.scope.conditional.makefile keyword.control.endif.makefile",
+ "c": "ifeq",
+ "t": "source.makefile meta.scope.conditional.makefile keyword.control.ifeq.makefile",
"r": {
"dark_plus": "keyword.control: #C586C0",
"light_plus": "keyword.control: #AF00DB",
@@ -1672,30 +2409,52 @@
}
},
{
- "c": "CXXVER_GE480",
- "t": "source.makefile variable.other.makefile",
+ "c": " (\"",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
"r": {
- "dark_plus": "variable: #9CDCFE",
- "light_plus": "variable: #001080",
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
"dark_vs": "default: #D4D4D4",
"light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "${",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "r": {
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
+ }
+ },
+ {
+ "c": "ok",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
"hc_black": "variable: #9CDCFE"
}
},
{
- "c": " ",
- "t": "source.makefile",
+ "c": "}",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
- "dark_plus": "default: #D4D4D4",
- "light_plus": "default: #000000",
- "dark_vs": "default: #D4D4D4",
- "light_vs": "default: #000000",
- "hc_black": "default: #FFFFFF"
+ "dark_plus": "string: #CE9178",
+ "light_plus": "string: #A31515",
+ "dark_vs": "string: #CE9178",
+ "light_vs": "string: #A31515",
+ "hc_black": "string: #CE9178"
}
},
{
- "c": ":=",
- "t": "source.makefile punctuation.separator.key-value.makefile",
+ "c": "\", \"skip\")",
+ "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1705,8 +2464,8 @@
}
},
{
- "c": " ",
- "t": "source.makefile",
+ "c": " ",
+ "t": "source.makefile meta.scope.conditional.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -1717,7 +2476,7 @@
},
{
"c": "$(",
- "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1727,19 +2486,19 @@
}
},
{
- "c": "shell",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.shell.makefile",
+ "c": "ok",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile variable.other.makefile",
"r": {
- "dark_plus": "support.function: #DCDCAA",
- "light_plus": "support.function: #795E26",
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
"dark_vs": "string: #CE9178",
"light_vs": "string: #A31515",
- "hc_black": "support.function: #DCDCAA"
+ "hc_black": "variable: #9CDCFE"
}
},
{
- "c": " expr `",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "c": ")",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1749,30 +2508,30 @@
}
},
{
- "c": "$(",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": ")}",
+ "t": "source.makefile meta.scope.conditional.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
- "c": "CXX",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
+ "c": " ",
+ "t": "source.makefile meta.scope.conditional.makefile",
"r": {
- "dark_plus": "variable: #9CDCFE",
- "light_plus": "variable: #001080",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "variable: #9CDCFE"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
- "c": ")",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "${",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1782,30 +2541,19 @@
}
},
{
- "c": " -dumpversion | sed -e 's/\\.\\([0-9][0-9]\\)/\\1/g' -e 's/\\.\\([0-9]\\)/0\\1/g' -e 's/^[0-9]\\{3,4\\}",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "c": "ok",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile variable.other.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
"dark_vs": "string: #CE9178",
"light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
- }
- },
- {
- "c": "$$",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile variable.language.makefile",
- "r": {
- "dark_plus": "variable.language: #569CD6",
- "light_plus": "variable.language: #0000FF",
- "dark_vs": "variable.language: #569CD6",
- "light_vs": "variable.language: #0000FF",
"hc_black": "variable: #9CDCFE"
}
},
{
- "c": "/&00/'` \\>= 40800",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "c": "}",
+ "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1815,18 +2563,29 @@
}
},
{
- "c": ")",
- "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "})",
+ "t": "source.makefile meta.scope.conditional.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "endif",
+ "t": "source.makefile meta.scope.conditional.makefile keyword.control.endif.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
+ "dark_plus": "keyword.control: #C586C0",
+ "light_plus": "keyword.control: #AF00DB",
+ "dark_vs": "keyword.control: #569CD6",
+ "light_vs": "keyword.control: #0000FF",
+ "hc_black": "keyword.control: #C586C0"
}
},
{
- "c": "ok",
+ "c": "result",
"t": "source.makefile variable.other.makefile",
"r": {
"dark_plus": "variable: #9CDCFE",
@@ -1848,7 +2607,7 @@
}
},
{
- "c": ":=",
+ "c": "!=",
"t": "source.makefile punctuation.separator.key-value.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
@@ -1859,7 +2618,7 @@
}
},
{
- "c": " ok",
+ "c": " echo \"'",
"t": "source.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
@@ -1881,19 +2640,19 @@
}
},
{
- "c": "info",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.info.makefile",
+ "c": "ok",
+ "t": "source.makefile string.interpolated.makefile variable.other.makefile",
"r": {
- "dark_plus": "support.function: #DCDCAA",
- "light_plus": "support.function: #795E26",
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
"dark_vs": "string: #CE9178",
"light_vs": "string: #A31515",
- "hc_black": "support.function: #DCDCAA"
+ "hc_black": "variable: #9CDCFE"
}
},
{
- "c": " Braces {} in parentheses ({}): ",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
+ "c": ")",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1903,8 +2662,19 @@
}
},
{
- "c": "${",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "' ",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "$(",
+ "t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1914,19 +2684,19 @@
}
},
{
- "c": "ok",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
+ "c": "shell",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile support.function.shell.makefile",
"r": {
- "dark_plus": "variable: #9CDCFE",
- "light_plus": "variable: #001080",
+ "dark_plus": "support.function: #DCDCAA",
+ "light_plus": "support.function: #795E26",
"dark_vs": "string: #CE9178",
"light_vs": "string: #A31515",
- "hc_black": "variable: #9CDCFE"
+ "hc_black": "support.function: #DCDCAA"
}
},
{
- "c": "}",
- "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": " echo \"from inlined shell\"",
+ "t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
"r": {
"dark_plus": "string: #CE9178",
"light_plus": "string: #A31515",
@@ -1947,7 +2717,18 @@
}
},
{
- "c": "${",
+ "c": "\"",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
+ }
+ },
+ {
+ "c": "$(",
"t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
@@ -1969,7 +2750,7 @@
}
},
{
- "c": " Parentheses () in braces {()}: ",
+ "c": " ",
"t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile",
"r": {
"dark_plus": "string: #CE9178",
@@ -1991,7 +2772,7 @@
}
},
{
- "c": "ok",
+ "c": "result",
"t": "source.makefile string.interpolated.makefile meta.scope.function-call.makefile string.interpolated.makefile variable.other.makefile",
"r": {
"dark_plus": "variable: #9CDCFE",
@@ -2013,7 +2794,7 @@
}
},
{
- "c": "}",
+ "c": ")",
"t": "source.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
"r": {
"dark_plus": "string: #CE9178",
@@ -2024,19 +2805,41 @@
}
},
{
- "c": "ifeq",
- "t": "source.makefile meta.scope.conditional.makefile keyword.control.ifeq.makefile",
+ "c": "#",
+ "t": "source.makefile comment.line.number-sign.makefile punctuation.definition.comment.makefile",
"r": {
- "dark_plus": "keyword.control: #C586C0",
- "light_plus": "keyword.control: #AF00DB",
- "dark_vs": "keyword.control: #569CD6",
- "light_vs": "keyword.control: #0000FF",
- "hc_black": "keyword.control: #C586C0"
+ "dark_plus": "comment: #6A9955",
+ "light_plus": "comment: #008000",
+ "dark_vs": "comment: #6A9955",
+ "light_vs": "comment: #008000",
+ "hc_black": "comment: #7CA668"
}
},
{
- "c": " (\"",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
+ "c": " Below is a test of variable assignment without any spacing.",
+ "t": "source.makefile comment.line.number-sign.makefile",
+ "r": {
+ "dark_plus": "comment: #6A9955",
+ "light_plus": "comment: #008000",
+ "dark_vs": "comment: #6A9955",
+ "light_vs": "comment: #008000",
+ "hc_black": "comment: #7CA668"
+ }
+ },
+ {
+ "c": "var",
+ "t": "source.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2046,41 +2849,30 @@
}
},
{
- "c": "${",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "val",
+ "t": "source.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
- "c": "ok",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile variable.other.makefile",
+ "c": "var",
+ "t": "source.makefile variable.other.makefile",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
"hc_black": "variable: #9CDCFE"
}
},
{
- "c": "}",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
- "r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
- }
- },
- {
- "c": "\", \"skip\")",
- "t": "source.makefile meta.scope.conditional.makefile meta.scope.condition.makefile",
+ "c": "?=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2090,8 +2882,8 @@
}
},
{
- "c": " ",
- "t": "source.makefile meta.scope.conditional.makefile",
+ "c": "val",
+ "t": "source.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2101,41 +2893,30 @@
}
},
{
- "c": "$(",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
- "r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
- }
- },
- {
- "c": "ok",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile variable.other.makefile",
+ "c": "var",
+ "t": "source.makefile variable.other.makefile",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
"hc_black": "variable: #9CDCFE"
}
},
{
- "c": ")",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": ":=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
- "c": ")}",
- "t": "source.makefile meta.scope.conditional.makefile",
+ "c": "123",
+ "t": "source.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2145,8 +2926,19 @@
}
},
{
- "c": " ",
- "t": "source.makefile meta.scope.conditional.makefile",
+ "c": "var",
+ "t": "source.makefile variable.other.makefile",
+ "r": {
+ "dark_plus": "variable: #9CDCFE",
+ "light_plus": "variable: #001080",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "variable: #9CDCFE"
+ }
+ },
+ {
+ "c": "!=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2156,41 +2948,41 @@
}
},
{
- "c": "${",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": "echo val",
+ "t": "source.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
- "c": "ok",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile variable.other.makefile",
+ "c": "var",
+ "t": "source.makefile variable.other.makefile",
"r": {
"dark_plus": "variable: #9CDCFE",
"light_plus": "variable: #001080",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
"hc_black": "variable: #9CDCFE"
}
},
{
- "c": "}",
- "t": "source.makefile meta.scope.conditional.makefile string.interpolated.makefile punctuation.definition.variable.makefile",
+ "c": ":=",
+ "t": "source.makefile punctuation.separator.key-value.makefile",
"r": {
- "dark_plus": "string: #CE9178",
- "light_plus": "string: #A31515",
- "dark_vs": "string: #CE9178",
- "light_vs": "string: #A31515",
- "hc_black": "string: #CE9178"
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
},
{
- "c": "})",
- "t": "source.makefile meta.scope.conditional.makefile",
+ "c": "val ",
+ "t": "source.makefile",
"r": {
"dark_plus": "default: #D4D4D4",
"light_plus": "default: #000000",
@@ -2200,14 +2992,25 @@
}
},
{
- "c": "endif",
- "t": "source.makefile meta.scope.conditional.makefile keyword.control.endif.makefile",
+ "c": "\\",
+ "t": "source.makefile constant.character.escape.continuation.makefile",
"r": {
- "dark_plus": "keyword.control: #C586C0",
- "light_plus": "keyword.control: #AF00DB",
- "dark_vs": "keyword.control: #569CD6",
- "light_vs": "keyword.control: #0000FF",
- "hc_black": "keyword.control: #C586C0"
+ "dark_plus": "constant.character.escape: #D7BA7D",
+ "light_plus": "constant.character.escape: #FF0000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "constant.character: #569CD6"
+ }
+ },
+ {
+ "c": "notvar=butval",
+ "t": "source.makefile",
+ "r": {
+ "dark_plus": "default: #D4D4D4",
+ "light_plus": "default: #000000",
+ "dark_vs": "default: #D4D4D4",
+ "light_vs": "default: #000000",
+ "hc_black": "default: #FFFFFF"
}
}
]
\ No newline at end of file
diff --git a/extensions/markdown-basics/.vscodeignore b/extensions/markdown-basics/.vscodeignore
index 67b755fdc..89fb2149d 100644
--- a/extensions/markdown-basics/.vscodeignore
+++ b/extensions/markdown-basics/.vscodeignore
@@ -1,4 +1,4 @@
test/**
src/**
tsconfig.json
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/markdown-basics/OSSREADME.json b/extensions/markdown-basics/OSSREADME.json
deleted file mode 100644
index c34486f8a..000000000
--- a/extensions/markdown-basics/OSSREADME.json
+++ /dev/null
@@ -1,23 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
-{
- "name": "textmate/markdown.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/markdown.tmbundle",
- "licenseDetail": [
- "Copyright (c) markdown.tmbundle authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/markdown-basics/cgmanifest.json b/extensions/markdown-basics/cgmanifest.json
new file mode 100644
index 000000000..5e7930de0
--- /dev/null
+++ b/extensions/markdown-basics/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/markdown.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/markdown.tmbundle",
+ "commitHash": "11cf764606cb2cde54badb5d0e5a0758a8871c4b"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) markdown.tmbundle authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/markdown-basics/snippets/markdown.json b/extensions/markdown-basics/snippets/markdown.json
index 4a5152c18..6ee831ae4 100644
--- a/extensions/markdown-basics/snippets/markdown.json
+++ b/extensions/markdown-basics/snippets/markdown.json
@@ -23,14 +23,14 @@
"prefix": "fenced codeblock",
"body": [
"```${1:language}",
- "$0",
+ "${TM_SELECTED_TEXT}$0",
"```"
],
"description": "Insert fenced code block"
},
"Insert heading": {
"prefix": "heading",
- "body": "# ${1:text}",
+ "body": "# ${1:${TM_SELECTED_TEXT}}",
"description": "Insert heading"
},
"Insert unordered list": {
@@ -60,12 +60,12 @@
},
"Insert link": {
"prefix": "link",
- "body": "[${1:text}](https://${2:link})$0",
+ "body": "[${TM_SELECTED_TEXT:${1:text}}](https://${2:link})$0",
"description": "Insert link"
},
"Insert image": {
"prefix": "image",
- "body": "![${1:alt}](https://${2:link})$0",
+ "body": "![${TM_SELECTED_TEXT:${1:alt}}](https://${2:link})$0",
"description": "Insert image"
}
}
diff --git a/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json b/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json
index c74fb3ba7..d206f39db 100644
--- a/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json
+++ b/extensions/markdown-basics/syntaxes/markdown.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/ee6a11d0bbbe8ef6bcf8e664f446c00fb14212f2",
+ "version": "https://github.com/microsoft/vscode-markdown-tm-grammar/commit/47e0c947d0a8d13c07e06a086a5c0c9bbffc6cf6",
"name": "Markdown",
"scopeName": "text.html.markdown",
"patterns": [
@@ -120,6 +120,9 @@
{
"include": "#fenced_code_block_json"
},
+ {
+ "include": "#fenced_code_block_jsonc"
+ },
{
"include": "#fenced_code_block_less"
},
@@ -1196,6 +1199,39 @@
}
]
},
+ "fenced_code_block_jsonc": {
+ "begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(jsonc)(\\s+[^`~]*)?$)",
+ "name": "markup.fenced_code.block.markdown",
+ "end": "(^|\\G)(\\2|\\s{0,3})(\\3)\\s*$",
+ "beginCaptures": {
+ "3": {
+ "name": "punctuation.definition.markdown"
+ },
+ "5": {
+ "name": "fenced_code.block.language"
+ },
+ "6": {
+ "name": "fenced_code.block.language.attributes"
+ }
+ },
+ "endCaptures": {
+ "3": {
+ "name": "punctuation.definition.markdown"
+ }
+ },
+ "patterns": [
+ {
+ "begin": "(^|\\G)(\\s*)(.*)",
+ "while": "(^|\\G)(?!\\s*([`~]{3,})\\s*$)",
+ "contentName": "meta.embedded.block.jsonc",
+ "patterns": [
+ {
+ "include": "source.json.comments"
+ }
+ ]
+ }
+ ]
+ },
"fenced_code_block_less": {
"begin": "(^|\\G)(\\s*)(`{3,}|~{3,})\\s*(?i:(less)(\\s+[^`~]*)?$)",
"name": "markup.fenced_code.block.markdown",
@@ -1984,7 +2020,7 @@
"name": "punctuation.definition.string.end.markdown"
}
},
- "match": "(?x)\n \\s* # Leading whitespace\n (\\[)([\\w ]+?)(\\])(:) # Reference name\n [ \\t]* # Optional whitespace\n ()(\\S+?)(>?) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in quotes…\n | ((\").+?(\")) # or in parens.\n )? # Title is optional\n \\s* # Optional whitespace\n $\n",
+ "match": "(?x)\n \\s* # Leading whitespace\n (\\[)([^]]+?)(\\])(:) # Reference name\n [ \\t]* # Optional whitespace\n ()(\\S+?)(>?) # The url\n [ \\t]* # Optional whitespace\n (?:\n ((\\().+?(\\))) # Match title in quotes…\n | ((\").+?(\")) # or in parens.\n )? # Title is optional\n \\s* # Optional whitespace\n $\n",
"name": "meta.link.reference.def.markdown"
},
"list_paragraph": {
@@ -2079,7 +2115,7 @@
"include": "source.yaml"
}
],
- "end": "(^|\\G)-{3}|\\.{3}\\s*$\""
+ "end": "(^|\\G)-{3}|\\.{3}\\s*$"
},
"inline": {
"patterns": [
diff --git a/extensions/markdown-language-features/.vscodeignore b/extensions/markdown-language-features/.vscodeignore
index 28cda32ac..30d948fbc 100644
--- a/extensions/markdown-language-features/.vscodeignore
+++ b/extensions/markdown-language-features/.vscodeignore
@@ -4,7 +4,7 @@ tsconfig.json
out/test/**
out/**
extension.webpack.config.js
-OSSREADME.json
+cgmanifest.json
yarn.lock
preview-src/**
webpack.config.js
diff --git a/extensions/markdown-language-features/OSSREADME.json b/extensions/markdown-language-features/OSSREADME.json
deleted file mode 100644
index 33c460e00..000000000
--- a/extensions/markdown-language-features/OSSREADME.json
+++ /dev/null
@@ -1,38 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
-{
- "name": "chriskempson/tomorrow-theme",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/chriskempson/tomorrow-theme",
- "licenseDetail": [
- "Copyright (C) 2013 Chris Kempson",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,", "and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
-},
-{
- "name": "textmate/markdown.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/markdown.tmbundle",
- "licenseDetail": [
- "Copyright (c) markdown.tmbundle authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/markdown-language-features/cgmanifest.json b/extensions/markdown-language-features/cgmanifest.json
new file mode 100644
index 000000000..89c68532e
--- /dev/null
+++ b/extensions/markdown-language-features/cgmanifest.json
@@ -0,0 +1,55 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "chriskempson/tomorrow-theme",
+ "repositoryUrl": "https://github.com/chriskempson/tomorrow-theme",
+ "commitHash": "0e0d35ac303f99b8aa182091ebeaee81cf2183a0"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (C) 2013 Chris Kempson",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,",
+ "and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:",
+ "",
+ "The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.",
+ "",
+ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
+ "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+ ],
+ "license": "MIT",
+ "version": "0.0.0"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/markdown.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/markdown.tmbundle",
+ "commitHash": "11cf764606cb2cde54badb5d0e5a0758a8871c4b"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) markdown.tmbundle authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/markdown-language-features/icon.png b/extensions/markdown-language-features/icon.png
index 48e0f035e..cb3f50758 100644
Binary files a/extensions/markdown-language-features/icon.png and b/extensions/markdown-language-features/icon.png differ
diff --git a/extensions/markdown-language-features/media/index.js b/extensions/markdown-language-features/media/index.js
index 99e630835..25df5db9f 100644
--- a/extensions/markdown-language-features/media/index.js
+++ b/extensions/markdown-language-features/media/index.js
@@ -825,11 +825,11 @@ const getCodeLineElements = (() => {
let elements;
return () => {
if (!elements) {
- elements = Array.prototype.map.call(document.getElementsByClassName('code-line'), (element) => {
+ elements = ([{ element: document.body, line: 0 }]).concat(Array.prototype.map.call(document.getElementsByClassName('code-line'), (element) => {
const line = +element.getAttribute('data-line');
return { element, line };
})
- .filter((x) => !isNaN(x.line));
+ .filter((x) => !isNaN(x.line)));
}
return elements;
};
@@ -887,22 +887,30 @@ exports.getLineElementsAtPageOffset = getLineElementsAtPageOffset;
* Attempt to reveal the element for a source line in the editor.
*/
function scrollToRevealSourceLine(line) {
+ if (!settings_1.getSettings().scrollPreviewWithEditor) {
+ return;
+ }
+ if (line <= 0) {
+ window.scroll(window.scrollX, 0);
+ return;
+ }
const { previous, next } = getElementsForSourceLine(line);
- if (previous && settings_1.getSettings().scrollPreviewWithEditor) {
- let scrollTo = 0;
- const rect = previous.element.getBoundingClientRect();
- const previousTop = rect.top;
- if (next && next.line !== previous.line) {
- // Between two elements. Go to percentage offset between them.
- const betweenProgress = (line - previous.line) / (next.line - previous.line);
- const elementOffset = next.element.getBoundingClientRect().top - previousTop;
- scrollTo = previousTop + betweenProgress * elementOffset;
- }
- else {
- scrollTo = previousTop;
- }
- window.scroll(0, Math.max(1, window.scrollY + scrollTo));
+ if (!previous) {
+ return;
+ }
+ let scrollTo = 0;
+ const rect = previous.element.getBoundingClientRect();
+ const previousTop = rect.top;
+ if (next && next.line !== previous.line) {
+ // Between two elements. Go to percentage offset between them.
+ const betweenProgress = (line - previous.line) / (next.line - previous.line);
+ const elementOffset = next.element.getBoundingClientRect().top - previousTop;
+ scrollTo = previousTop + betweenProgress * elementOffset;
+ }
+ else {
+ scrollTo = previousTop;
}
+ window.scroll(window.scrollX, Math.max(1, window.scrollY + scrollTo));
}
exports.scrollToRevealSourceLine = scrollToRevealSourceLine;
function getEditorLineNumberForPageOffset(offset) {
@@ -970,4 +978,4 @@ exports.getSettings = getSettings;
/***/ })
/******/ });
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC50aHJvdHRsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3ByZXZpZXctc3JjL2FjdGl2ZUxpbmVNYXJrZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcHJldmlldy1zcmMvZXZlbnRzLnRzIiwid2VicGFjazovLy8uL3ByZXZpZXctc3JjL2luZGV4LnRzIiwid2VicGFjazovLy8uL3ByZXZpZXctc3JjL21lc3NhZ2luZy50cyIsIndlYnBhY2s6Ly8vLi9wcmV2aWV3LXNyYy9zY3JvbGwtc3luYy50cyIsIndlYnBhY2s6Ly8vLi9wcmV2aWV3LXNyYy9zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyxZQUFZO0FBQzlCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDhDQUE4QyxrQkFBa0I7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyxZQUFZO0FBQzlCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsb0JBQW9CO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDdGJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7Ozs7O0FDbkJBOzs7Z0dBR2dHO0FBQ2hHLCtGQUF5RDtBQUV6RDtJQUdDLDhCQUE4QixDQUFDLElBQVk7UUFDMUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLHNDQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQStCO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFnQztRQUNwRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQUM7UUFDUixDQUFDO1FBQ0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBZ0M7UUFDbEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDO1FBQ1IsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFTLElBQUksbUJBQW1CLENBQUM7SUFDMUMsQ0FBQztDQUNEO0FBM0JELDRDQTJCQzs7Ozs7Ozs7Ozs7Ozs7QUNqQ0Q7OztnR0FHZ0c7O0FBRWhHLDRCQUFtQyxDQUFhO0lBQy9DLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNsRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFFLENBQUM7SUFDTCxDQUFDO0FBQ0YsQ0FBQztBQU5ELGdEQU1DOzs7Ozs7Ozs7Ozs7OztBQ1hEOzs7Z0dBR2dHOztBQUVoRyw4R0FBc0Q7QUFDdEQsZ0ZBQThDO0FBQzlDLHlGQUFvRDtBQUNwRCwrRkFBMkY7QUFDM0Ysc0ZBQWtEO0FBQ2xELHVHQUE2QztBQUk3QyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQ0FBZ0IsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sUUFBUSxHQUFHLHNCQUFXLEVBQUUsQ0FBQztBQUUvQixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0FBRWxDLG9CQUFvQjtBQUNwQixNQUFNLEtBQUssR0FBRyxrQkFBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFdkIsTUFBTSxTQUFTLEdBQUcsaUNBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtJQUNwQixnQkFBZ0IsRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLDJCQUFrQixDQUFDLEdBQUcsRUFBRTtJQUN2QixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixzQ0FBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNGLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDMUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDMUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN0QixzQ0FBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxNQUFNLENBQUMsQ0FBQyxJQUFZLEVBQUUsUUFBYSxFQUFFLEVBQUU7UUFDdEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO0lBQ0YsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLElBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtJQUNwQyxNQUFNLFNBQVMsR0FBb0QsRUFBRSxDQUFDO0lBQ3RFLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUM7UUFDTixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUVELFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNWLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtnQkFDbEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2FBQ2hCLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7QUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFUCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUN0QyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLGdCQUFnQixFQUFFLENBQUM7QUFDcEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRVQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRTtJQUMxQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUM7SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssZ0NBQWdDO1lBQ3BDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELEtBQUssQ0FBQztRQUVQLEtBQUssWUFBWTtZQUNoQixZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEMsS0FBSyxDQUFDO0lBQ1IsQ0FBQztBQUNGLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUVWLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUU7SUFDN0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQztJQUNSLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQXFCLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsVUFBeUIsRUFBRSxDQUFDO1FBQzFGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLENBQUM7UUFDUixDQUFDO0lBQ0YsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDM0IsTUFBTSxJQUFJLEdBQUcsOENBQWdDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0FBQ0YsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFO0lBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQztJQUNSLENBQUM7SUFFRCxJQUFJLElBQUksR0FBUSxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsS0FBSyxDQUFDO1lBQ1AsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUYsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQztZQUNQLENBQUM7WUFDRCxLQUFLLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDeEIsQ0FBQztBQUNGLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVULEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDUCxNQUFNLElBQUksR0FBRyw4Q0FBZ0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDVCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQzdKRDs7O2dHQUdnRzs7QUFFaEcsc0ZBQXlDO0FBUzVCLDZCQUFxQixHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUU7SUFDcEQsTUFBTSxDQUFDLElBQUk7UUFDVixXQUFXLENBQUMsSUFBWSxFQUFFLElBQVk7WUFDckMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDbEIsSUFBSTtnQkFDSixNQUFNLEVBQUUsc0JBQVcsRUFBRSxDQUFDLE1BQU07Z0JBQzVCLElBQUk7YUFDSixDQUFDLENBQUM7UUFDSixDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUN4QkY7OztnR0FHZ0c7O0FBRWhHLHNGQUF5QztBQUd6QyxlQUFlLEdBQVcsRUFBRSxHQUFXLEVBQUUsS0FBYTtJQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsbUJBQW1CLElBQVk7SUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0JBQVcsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQVFELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDakMsSUFBSSxRQUEyQixDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZixRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNsQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLEVBQzVDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ2pCLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFTDs7Ozs7R0FLRztBQUNILGtDQUF5QyxVQUFrQjtJQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDcEMsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNoQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLENBQUM7SUFDRCxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBZEQsNERBY0M7QUFFRDs7R0FFRztBQUNILHFDQUE0QyxNQUFjO0lBQ3pELE1BQU0sS0FBSyxHQUFHLG1CQUFtQixFQUFFLENBQUM7SUFDcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDekMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDWixJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMxQixPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDMUQsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDNUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNWLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQztZQUNMLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDVixDQUFDO0lBQ0YsQ0FBQztJQUNELE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDM0QsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFDRCxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDaEMsQ0FBQztBQXRCRCxrRUFzQkM7QUFFRDs7R0FFRztBQUNILGtDQUF5QyxJQUFZO0lBQ3BELE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLHNCQUFXLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLDhEQUE4RDtZQUM5RCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztZQUM3RSxRQUFRLEdBQUcsV0FBVyxHQUFHLGVBQWUsR0FBRyxhQUFhLENBQUM7UUFDMUQsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDO1lBQ0wsUUFBUSxHQUFHLFdBQVcsQ0FBQztRQUN4QixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7QUFDRixDQUFDO0FBakJELDREQWlCQztBQUVELDBDQUFpRCxNQUFjO0lBQzlELE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNkLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNoRSxNQUFNLGtCQUFrQixHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVixNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckgsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyx1QkFBdUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25GLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDO1lBQ0wsTUFBTSxxQkFBcUIsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO1lBQ25ELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNGLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2IsQ0FBQztBQWpCRCw0RUFpQkM7Ozs7Ozs7Ozs7Ozs7O0FDOUhEOzs7Z0dBR2dHOztBQVloRyxJQUFJLGNBQWMsR0FBZ0MsU0FBUyxDQUFDO0FBRTVELGlCQUF3QixHQUFXO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN4RSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNGLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFWRCwwQkFVQztBQUVEO0lBQ0MsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLENBQUMsY0FBYyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxjQUFjLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFYRCxrQ0FXQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3ByZXZpZXctc3JjL2luZGV4LnRzXCIpO1xuIiwiLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICByZXN1bHQgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nID8gbmF0aXZlTWluKHJlc3VsdCwgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRocm90dGxlZCBmdW5jdGlvbiB0aGF0IG9ubHkgaW52b2tlcyBgZnVuY2AgYXQgbW9zdCBvbmNlIHBlclxuICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAqIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYFxuICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICogdGhyb3R0bGVkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICpcbiAqIC8vIEludm9rZSBgcmVuZXdUb2tlbmAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICdsZWFkaW5nJzogbGVhZGluZyxcbiAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocm90dGxlO1xuIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsIGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaCAoZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmltcG9ydCB7IGdldEVsZW1lbnRzRm9yU291cmNlTGluZSB9IGZyb20gJy4vc2Nyb2xsLXN5bmMnO1xuXG5leHBvcnQgY2xhc3MgQWN0aXZlTGluZU1hcmtlciB7XG5cdHByaXZhdGUgX2N1cnJlbnQ6IGFueTtcblxuXHRvbkRpZENoYW5nZVRleHRFZGl0b3JTZWxlY3Rpb24obGluZTogbnVtYmVyKSB7XG5cdFx0Y29uc3QgeyBwcmV2aW91cyB9ID0gZ2V0RWxlbWVudHNGb3JTb3VyY2VMaW5lKGxpbmUpO1xuXHRcdHRoaXMuX3VwZGF0ZShwcmV2aW91cyAmJiBwcmV2aW91cy5lbGVtZW50KTtcblx0fVxuXG5cdF91cGRhdGUoYmVmb3JlOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX3VubWFya0FjdGl2ZUVsZW1lbnQodGhpcy5fY3VycmVudCk7XG5cdFx0dGhpcy5fbWFya0FjdGl2ZUVsZW1lbnQoYmVmb3JlKTtcblx0XHR0aGlzLl9jdXJyZW50ID0gYmVmb3JlO1xuXHR9XG5cblx0X3VubWFya0FjdGl2ZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoIWVsZW1lbnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKC9cXGJjb2RlLWFjdGl2ZS1saW5lXFxiL2csICcnKTtcblx0fVxuXG5cdF9tYXJrQWN0aXZlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdGlmICghZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRlbGVtZW50LmNsYXNzTmFtZSArPSAnIGNvZGUtYWN0aXZlLWxpbmUnO1xuXHR9XG59IiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBmdW5jdGlvbiBvbmNlRG9jdW1lbnRMb2FkZWQoZjogKCkgPT4gdm9pZCkge1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICd1bmluaXRpYWxpemVkJykge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmKTtcblx0fSBlbHNlIHtcblx0XHRmKCk7XG5cdH1cbn0iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuaW1wb3J0IHsgQWN0aXZlTGluZU1hcmtlciB9IGZyb20gJy4vYWN0aXZlTGluZU1hcmtlcic7XG5pbXBvcnQgeyBvbmNlRG9jdW1lbnRMb2FkZWQgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyBjcmVhdGVQb3N0ZXJGb3JWc0NvZGUgfSBmcm9tICcuL21lc3NhZ2luZyc7XG5pbXBvcnQgeyBnZXRFZGl0b3JMaW5lTnVtYmVyRm9yUGFnZU9mZnNldCwgc2Nyb2xsVG9SZXZlYWxTb3VyY2VMaW5lIH0gZnJvbSAnLi9zY3JvbGwtc3luYyc7XG5pbXBvcnQgeyBnZXRTZXR0aW5ncywgZ2V0RGF0YSB9IGZyb20gJy4vc2V0dGluZ3MnO1xuaW1wb3J0IHRocm90dGxlID0gcmVxdWlyZSgnbG9kYXNoLnRocm90dGxlJyk7XG5cbmRlY2xhcmUgdmFyIGFjcXVpcmVWc0NvZGVBcGk6IGFueTtcblxudmFyIHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcbmNvbnN0IG1hcmtlciA9IG5ldyBBY3RpdmVMaW5lTWFya2VyKCk7XG5jb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7XG5cbmNvbnN0IHZzY29kZSA9IGFjcXVpcmVWc0NvZGVBcGkoKTtcblxuLy8gU2V0IFZTIENvZGUgc3RhdGVcbmNvbnN0IHN0YXRlID0gZ2V0RGF0YSgnZGF0YS1zdGF0ZScpO1xudnNjb2RlLnNldFN0YXRlKHN0YXRlKTtcblxuY29uc3QgbWVzc2FnaW5nID0gY3JlYXRlUG9zdGVyRm9yVnNDb2RlKHZzY29kZSk7XG5cbndpbmRvdy5jc3BBbGVydGVyLnNldFBvc3RlcihtZXNzYWdpbmcpO1xud2luZG93LnN0eWxlTG9hZGluZ01vbml0b3Iuc2V0UG9zdGVyKG1lc3NhZ2luZyk7XG5cbndpbmRvdy5vbmxvYWQgPSAoKSA9PiB7XG5cdHVwZGF0ZUltYWdlU2l6ZXMoKTtcbn07XG5cbm9uY2VEb2N1bWVudExvYWRlZCgoKSA9PiB7XG5cdGlmIChzZXR0aW5ncy5zY3JvbGxQcmV2aWV3V2l0aEVkaXRvcikge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaW5pdGlhbExpbmUgPSArc2V0dGluZ3MubGluZTtcblx0XHRcdGlmICghaXNOYU4oaW5pdGlhbExpbmUpKSB7XG5cdFx0XHRcdHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0c2Nyb2xsVG9SZXZlYWxTb3VyY2VMaW5lKGluaXRpYWxMaW5lKTtcblx0XHRcdH1cblx0XHR9LCAwKTtcblx0fVxufSk7XG5cbmNvbnN0IG9uVXBkYXRlVmlldyA9ICgoKSA9PiB7XG5cdGNvbnN0IGRvU2Nyb2xsID0gdGhyb3R0bGUoKGxpbmU6IG51bWJlcikgPT4ge1xuXHRcdHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcblx0XHRzY3JvbGxUb1JldmVhbFNvdXJjZUxpbmUobGluZSk7XG5cdH0sIDUwKTtcblxuXHRyZXR1cm4gKGxpbmU6IG51bWJlciwgc2V0dGluZ3M6IGFueSkgPT4ge1xuXHRcdGlmICghaXNOYU4obGluZSkpIHtcblx0XHRcdHNldHRpbmdzLmxpbmUgPSBsaW5lO1xuXHRcdFx0ZG9TY3JvbGwobGluZSk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxubGV0IHVwZGF0ZUltYWdlU2l6ZXMgPSB0aHJvdHRsZSgoKSA9PiB7XG5cdGNvbnN0IGltYWdlSW5mbzogeyBpZDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9W10gPSBbXTtcblx0bGV0IGltYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcblx0aWYgKGltYWdlcykge1xuXHRcdGxldCBpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGltZyA9IGltYWdlc1tpXTtcblxuXHRcdFx0aWYgKGltZy5jbGFzc0xpc3QuY29udGFpbnMoJ2xvYWRpbmcnKSkge1xuXHRcdFx0XHRpbWcuY2xhc3NMaXN0LnJlbW92ZSgnbG9hZGluZycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpbWFnZUluZm8ucHVzaCh7XG5cdFx0XHRcdGlkOiBpbWcuaWQsXG5cdFx0XHRcdGhlaWdodDogaW1nLmhlaWdodCxcblx0XHRcdFx0d2lkdGg6IGltZy53aWR0aFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bWVzc2FnaW5nLnBvc3RNZXNzYWdlKCdjYWNoZUltYWdlU2l6ZXMnLCBpbWFnZUluZm8pO1xuXHR9XG59LCA1MCk7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG5cdHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcblx0dXBkYXRlSW1hZ2VTaXplcygpO1xufSwgdHJ1ZSk7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnQgPT4ge1xuXHRpZiAoZXZlbnQuZGF0YS5zb3VyY2UgIT09IHNldHRpbmdzLnNvdXJjZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAoZXZlbnQuZGF0YS50eXBlKSB7XG5cdFx0Y2FzZSAnb25EaWRDaGFuZ2VUZXh0RWRpdG9yU2VsZWN0aW9uJzpcblx0XHRcdG1hcmtlci5vbkRpZENoYW5nZVRleHRFZGl0b3JTZWxlY3Rpb24oZXZlbnQuZGF0YS5saW5lKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAndXBkYXRlVmlldyc6XG5cdFx0XHRvblVwZGF0ZVZpZXcoZXZlbnQuZGF0YS5saW5lLCBzZXR0aW5ncyk7XG5cdFx0XHRicmVhaztcblx0fVxufSwgZmFsc2UpO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIGV2ZW50ID0+IHtcblx0aWYgKCFzZXR0aW5ncy5kb3VibGVDbGlja1RvU3dpdGNoVG9FZGl0b3IpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBJZ25vcmUgY2xpY2tzIG9uIGxpbmtzXG5cdGZvciAobGV0IG5vZGUgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAobm9kZS50YWdOYW1lID09PSAnQScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBvZmZzZXQgPSBldmVudC5wYWdlWTtcblx0Y29uc3QgbGluZSA9IGdldEVkaXRvckxpbmVOdW1iZXJGb3JQYWdlT2Zmc2V0KG9mZnNldCk7XG5cdGlmICh0eXBlb2YgbGluZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGxpbmUpKSB7XG5cdFx0bWVzc2FnaW5nLnBvc3RNZXNzYWdlKCdkaWRDbGljaycsIHsgbGluZTogTWF0aC5mbG9vcihsaW5lKSB9KTtcblx0fVxufSk7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuXHRpZiAoIWV2ZW50KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IG5vZGU6IGFueSA9IGV2ZW50LnRhcmdldDtcblx0d2hpbGUgKG5vZGUpIHtcblx0XHRpZiAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZSA9PT0gJ0EnICYmIG5vZGUuaHJlZikge1xuXHRcdFx0aWYgKG5vZGUuZ2V0QXR0cmlidXRlKCdocmVmJykuc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5vZGUuaHJlZi5zdGFydHNXaXRoKCdmaWxlOi8vJykgfHwgbm9kZS5ocmVmLnN0YXJ0c1dpdGgoJ3ZzY29kZS1yZXNvdXJjZTonKSkge1xuXHRcdFx0XHRjb25zdCBbcGF0aCwgZnJhZ21lbnRdID0gbm9kZS5ocmVmLnJlcGxhY2UoL14oZmlsZTpcXC9cXC98dnNjb2RlLXJlc291cmNlOikvaSwgJycpLnNwbGl0KCcjJyk7XG5cdFx0XHRcdG1lc3NhZ2luZy5wb3N0TWVzc2FnZSgnY2xpY2tMaW5rJywgeyBwYXRoLCBmcmFnbWVudCB9KTtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdH1cbn0sIHRydWUpO1xuXG5pZiAoc2V0dGluZ3Muc2Nyb2xsRWRpdG9yV2l0aFByZXZpZXcpIHtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRocm90dGxlKCgpID0+IHtcblx0XHRpZiAoc2Nyb2xsRGlzYWJsZWQpIHtcblx0XHRcdHNjcm9sbERpc2FibGVkID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGxpbmUgPSBnZXRFZGl0b3JMaW5lTnVtYmVyRm9yUGFnZU9mZnNldCh3aW5kb3cuc2Nyb2xsWSk7XG5cdFx0XHRpZiAodHlwZW9mIGxpbmUgPT09ICdudW1iZXInICYmICFpc05hTihsaW5lKSkge1xuXHRcdFx0XHRtZXNzYWdpbmcucG9zdE1lc3NhZ2UoJ3JldmVhbExpbmUnLCB7IGxpbmUgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCA1MCkpO1xufSIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5pbXBvcnQgeyBnZXRTZXR0aW5ncyB9IGZyb20gJy4vc2V0dGluZ3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VQb3N0ZXIge1xuXHQvKipcblx0ICogUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIG1hcmtkb3duIGV4dGVuc2lvblxuXHQgKi9cblx0cG9zdE1lc3NhZ2UodHlwZTogc3RyaW5nLCBib2R5OiBvYmplY3QpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdGVyRm9yVnNDb2RlID0gKHZzY29kZTogYW55KSA9PiB7XG5cdHJldHVybiBuZXcgY2xhc3MgaW1wbGVtZW50cyBNZXNzYWdlUG9zdGVyIHtcblx0XHRwb3N0TWVzc2FnZSh0eXBlOiBzdHJpbmcsIGJvZHk6IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0dnNjb2RlLnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0c291cmNlOiBnZXRTZXR0aW5ncygpLnNvdXJjZSxcblx0XHRcdFx0Ym9keVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmltcG9ydCB7IGdldFNldHRpbmdzIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5cblxuZnVuY3Rpb24gY2xhbXAobWluOiBudW1iZXIsIG1heDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG5cdHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gY2xhbXBMaW5lKGxpbmU6IG51bWJlcikge1xuXHRyZXR1cm4gY2xhbXAoMCwgZ2V0U2V0dGluZ3MoKS5saW5lQ291bnQgLSAxLCBsaW5lKTtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVMaW5lRWxlbWVudCB7XG5cdGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXHRsaW5lOiBudW1iZXI7XG59XG5cbmNvbnN0IGdldENvZGVMaW5lRWxlbWVudHMgPSAoKCkgPT4ge1xuXHRsZXQgZWxlbWVudHM6IENvZGVMaW5lRWxlbWVudFtdO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghZWxlbWVudHMpIHtcblx0XHRcdGVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKFxuXHRcdFx0XHRkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjb2RlLWxpbmUnKSxcblx0XHRcdFx0KGVsZW1lbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IGxpbmUgPSArZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtbGluZScpO1xuXHRcdFx0XHRcdHJldHVybiB7IGVsZW1lbnQsIGxpbmUgfTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbHRlcigoeDogYW55KSA9PiAhaXNOYU4oeC5saW5lKSk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtZW50cztcblx0fTtcbn0pKCk7XG5cbi8qKlxuICogRmluZCB0aGUgaHRtbCBlbGVtZW50cyB0aGF0IG1hcCB0byBhIHNwZWNpZmljIHRhcmdldCBsaW5lIGluIHRoZSBlZGl0b3IuXG4gKlxuICogSWYgYW4gZXhhY3QgbWF0Y2gsIHJldHVybnMgYSBzaW5nbGUgZWxlbWVudC4gSWYgdGhlIGxpbmUgaXMgYmV0d2VlbiBlbGVtZW50cyxcbiAqIHJldHVybnMgdGhlIGVsZW1lbnQgcHJpb3IgdG8gYW5kIHRoZSBlbGVtZW50IGFmdGVyIHRoZSBnaXZlbiBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudHNGb3JTb3VyY2VMaW5lKHRhcmdldExpbmU6IG51bWJlcik6IHsgcHJldmlvdXM6IENvZGVMaW5lRWxlbWVudDsgbmV4dD86IENvZGVMaW5lRWxlbWVudDsgfSB7XG5cdGNvbnN0IGxpbmVOdW1iZXIgPSBNYXRoLmZsb29yKHRhcmdldExpbmUpO1xuXHRjb25zdCBsaW5lcyA9IGdldENvZGVMaW5lRWxlbWVudHMoKTtcblx0bGV0IHByZXZpb3VzID0gbGluZXNbMF0gfHwgbnVsbDtcblx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5lcykge1xuXHRcdGlmIChlbnRyeS5saW5lID09PSBsaW5lTnVtYmVyKSB7XG5cdFx0XHRyZXR1cm4geyBwcmV2aW91czogZW50cnksIG5leHQ6IHVuZGVmaW5lZCB9O1xuXHRcdH1cblx0XHRlbHNlIGlmIChlbnRyeS5saW5lID4gbGluZU51bWJlcikge1xuXHRcdFx0cmV0dXJuIHsgcHJldmlvdXMsIG5leHQ6IGVudHJ5IH07XG5cdFx0fVxuXHRcdHByZXZpb3VzID0gZW50cnk7XG5cdH1cblx0cmV0dXJuIHsgcHJldmlvdXMgfTtcbn1cblxuLyoqXG4gKiBGaW5kIHRoZSBodG1sIGVsZW1lbnRzIHRoYXQgYXJlIGF0IGEgc3BlY2lmaWMgcGl4ZWwgb2Zmc2V0IG9uIHRoZSBwYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGluZUVsZW1lbnRzQXRQYWdlT2Zmc2V0KG9mZnNldDogbnVtYmVyKTogeyBwcmV2aW91czogQ29kZUxpbmVFbGVtZW50OyBuZXh0PzogQ29kZUxpbmVFbGVtZW50OyB9IHtcblx0Y29uc3QgbGluZXMgPSBnZXRDb2RlTGluZUVsZW1lbnRzKCk7XG5cdGNvbnN0IHBvc2l0aW9uID0gb2Zmc2V0IC0gd2luZG93LnNjcm9sbFk7XG5cdGxldCBsbyA9IC0xO1xuXHRsZXQgaGkgPSBsaW5lcy5sZW5ndGggLSAxO1xuXHR3aGlsZSAobG8gKyAxIDwgaGkpIHtcblx0XHRjb25zdCBtaWQgPSBNYXRoLmZsb29yKChsbyArIGhpKSAvIDIpO1xuXHRcdGNvbnN0IGJvdW5kcyA9IGxpbmVzW21pZF0uZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRpZiAoYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgPj0gcG9zaXRpb24pIHtcblx0XHRcdGhpID0gbWlkO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGxvID0gbWlkO1xuXHRcdH1cblx0fVxuXHRjb25zdCBoaUVsZW1lbnQgPSBsaW5lc1toaV07XG5cdGNvbnN0IGhpQm91bmRzID0gaGlFbGVtZW50LmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGlmIChoaSA+PSAxICYmIGhpQm91bmRzLnRvcCA+IHBvc2l0aW9uKSB7XG5cdFx0Y29uc3QgbG9FbGVtZW50ID0gbGluZXNbbG9dO1xuXHRcdHJldHVybiB7IHByZXZpb3VzOiBsb0VsZW1lbnQsIG5leHQ6IGhpRWxlbWVudCB9O1xuXHR9XG5cdHJldHVybiB7IHByZXZpb3VzOiBoaUVsZW1lbnQgfTtcbn1cblxuLyoqXG4gKiBBdHRlbXB0IHRvIHJldmVhbCB0aGUgZWxlbWVudCBmb3IgYSBzb3VyY2UgbGluZSBpbiB0aGUgZWRpdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9SZXZlYWxTb3VyY2VMaW5lKGxpbmU6IG51bWJlcikge1xuXHRjb25zdCB7IHByZXZpb3VzLCBuZXh0IH0gPSBnZXRFbGVtZW50c0ZvclNvdXJjZUxpbmUobGluZSk7XG5cdGlmIChwcmV2aW91cyAmJiBnZXRTZXR0aW5ncygpLnNjcm9sbFByZXZpZXdXaXRoRWRpdG9yKSB7XG5cdFx0bGV0IHNjcm9sbFRvID0gMDtcblx0XHRjb25zdCByZWN0ID0gcHJldmlvdXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBwcmV2aW91c1RvcCA9IHJlY3QudG9wO1xuXHRcdGlmIChuZXh0ICYmIG5leHQubGluZSAhPT0gcHJldmlvdXMubGluZSkge1xuXHRcdFx0Ly8gQmV0d2VlbiB0d28gZWxlbWVudHMuIEdvIHRvIHBlcmNlbnRhZ2Ugb2Zmc2V0IGJldHdlZW4gdGhlbS5cblx0XHRcdGNvbnN0IGJldHdlZW5Qcm9ncmVzcyA9IChsaW5lIC0gcHJldmlvdXMubGluZSkgLyAobmV4dC5saW5lIC0gcHJldmlvdXMubGluZSk7XG5cdFx0XHRjb25zdCBlbGVtZW50T2Zmc2V0ID0gbmV4dC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHByZXZpb3VzVG9wO1xuXHRcdFx0c2Nyb2xsVG8gPSBwcmV2aW91c1RvcCArIGJldHdlZW5Qcm9ncmVzcyAqIGVsZW1lbnRPZmZzZXQ7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0c2Nyb2xsVG8gPSBwcmV2aW91c1RvcDtcblx0XHR9XG5cdFx0d2luZG93LnNjcm9sbCgwLCBNYXRoLm1heCgxLCB3aW5kb3cuc2Nyb2xsWSArIHNjcm9sbFRvKSk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRvckxpbmVOdW1iZXJGb3JQYWdlT2Zmc2V0KG9mZnNldDogbnVtYmVyKSB7XG5cdGNvbnN0IHsgcHJldmlvdXMsIG5leHQgfSA9IGdldExpbmVFbGVtZW50c0F0UGFnZU9mZnNldChvZmZzZXQpO1xuXHRpZiAocHJldmlvdXMpIHtcblx0XHRjb25zdCBwcmV2aW91c0JvdW5kcyA9IHByZXZpb3VzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3Qgb2Zmc2V0RnJvbVByZXZpb3VzID0gKG9mZnNldCAtIHdpbmRvdy5zY3JvbGxZIC0gcHJldmlvdXNCb3VuZHMudG9wKTtcblx0XHRpZiAobmV4dCkge1xuXHRcdFx0Y29uc3QgcHJvZ3Jlc3NCZXR3ZWVuRWxlbWVudHMgPSBvZmZzZXRGcm9tUHJldmlvdXMgLyAobmV4dC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHByZXZpb3VzQm91bmRzLnRvcCk7XG5cdFx0XHRjb25zdCBsaW5lID0gcHJldmlvdXMubGluZSArIHByb2dyZXNzQmV0d2VlbkVsZW1lbnRzICogKG5leHQubGluZSAtIHByZXZpb3VzLmxpbmUpO1xuXHRcdFx0cmV0dXJuIGNsYW1wTGluZShsaW5lKTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRjb25zdCBwcm9ncmVzc1dpdGhpbkVsZW1lbnQgPSBvZmZzZXRGcm9tUHJldmlvdXMgLyAocHJldmlvdXNCb3VuZHMuaGVpZ2h0KTtcblx0XHRcdGNvbnN0IGxpbmUgPSBwcmV2aW91cy5saW5lICsgcHJvZ3Jlc3NXaXRoaW5FbGVtZW50O1xuXHRcdFx0cmV0dXJuIGNsYW1wTGluZShsaW5lKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3U2V0dGluZ3Mge1xuXHRzb3VyY2U6IHN0cmluZztcblx0bGluZTogbnVtYmVyO1xuXHRsaW5lQ291bnQ6IG51bWJlcjtcblx0c2Nyb2xsUHJldmlld1dpdGhFZGl0b3I/OiBib29sZWFuO1xuXHRzY3JvbGxFZGl0b3JXaXRoUHJldmlldzogYm9vbGVhbjtcblx0ZGlzYWJsZVNlY3VyaXR5V2FybmluZ3M6IGJvb2xlYW47XG5cdGRvdWJsZUNsaWNrVG9Td2l0Y2hUb0VkaXRvcjogYm9vbGVhbjtcbn1cblxubGV0IGNhY2hlZFNldHRpbmdzOiBQcmV2aWV3U2V0dGluZ3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRhKGtleTogc3RyaW5nKTogUHJldmlld1NldHRpbmdzIHtcblx0Y29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd2c2NvZGUtbWFya2Rvd24tcHJldmlldy1kYXRhJyk7XG5cdGlmIChlbGVtZW50KSB7XG5cdFx0Y29uc3QgZGF0YSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSk7XG5cdFx0aWYgKGRhdGEpIHtcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuXHRcdH1cblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGxvYWQgZGF0YSBmb3IgJHtrZXl9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5ncygpOiBQcmV2aWV3U2V0dGluZ3Mge1xuXHRpZiAoY2FjaGVkU2V0dGluZ3MpIHtcblx0XHRyZXR1cm4gY2FjaGVkU2V0dGluZ3M7XG5cdH1cblxuXHRjYWNoZWRTZXR0aW5ncyA9IGdldERhdGEoJ2RhdGEtc2V0dGluZ3MnKTtcblx0aWYgKGNhY2hlZFNldHRpbmdzKSB7XG5cdFx0cmV0dXJuIGNhY2hlZFNldHRpbmdzO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgbG9hZCBzZXR0aW5ncycpO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC50aHJvdHRsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3ByZXZpZXctc3JjL2FjdGl2ZUxpbmVNYXJrZXIudHMiLCJ3ZWJwYWNrOi8vLy4vcHJldmlldy1zcmMvZXZlbnRzLnRzIiwid2VicGFjazovLy8uL3ByZXZpZXctc3JjL2luZGV4LnRzIiwid2VicGFjazovLy8uL3ByZXZpZXctc3JjL21lc3NhZ2luZy50cyIsIndlYnBhY2s6Ly8vLi9wcmV2aWV3LXNyYy9zY3JvbGwtc3luYy50cyIsIndlYnBhY2s6Ly8vLi9wcmV2aWV3LXNyYy9zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDbkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyxZQUFZO0FBQzlCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLDhDQUE4QyxrQkFBa0I7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFNBQVM7QUFDcEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTyxZQUFZO0FBQzlCLFdBQVcsUUFBUTtBQUNuQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBLGFBQWEsU0FBUztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsb0JBQW9CO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxFQUFFO0FBQ2IsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDdGJBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7Ozs7O0FDbkJBOzs7Z0dBR2dHO0FBQ2hHLCtGQUF5RDtBQUV6RDtJQUdDLDhCQUE4QixDQUFDLElBQVk7UUFDMUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLHNDQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQStCO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFnQztRQUNwRCxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDZCxNQUFNLENBQUM7UUFDUixDQUFDO1FBQ0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsT0FBZ0M7UUFDbEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ2QsTUFBTSxDQUFDO1FBQ1IsQ0FBQztRQUNELE9BQU8sQ0FBQyxTQUFTLElBQUksbUJBQW1CLENBQUM7SUFDMUMsQ0FBQztDQUNEO0FBM0JELDRDQTJCQzs7Ozs7Ozs7Ozs7Ozs7QUNqQ0Q7OztnR0FHZ0c7O0FBRWhHLDRCQUFtQyxDQUFhO0lBQy9DLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNsRixRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFFLENBQUM7SUFDTCxDQUFDO0FBQ0YsQ0FBQztBQU5ELGdEQU1DOzs7Ozs7Ozs7Ozs7OztBQ1hEOzs7Z0dBR2dHOztBQUVoRyw4R0FBc0Q7QUFDdEQsZ0ZBQThDO0FBQzlDLHlGQUFvRDtBQUNwRCwrRkFBMkY7QUFDM0Ysc0ZBQWtEO0FBQ2xELHVHQUE2QztBQUk3QyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxtQ0FBZ0IsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sUUFBUSxHQUFHLHNCQUFXLEVBQUUsQ0FBQztBQUUvQixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0FBRWxDLG9CQUFvQjtBQUNwQixNQUFNLEtBQUssR0FBRyxrQkFBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFdkIsTUFBTSxTQUFTLEdBQUcsaUNBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFaEQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtJQUNwQixnQkFBZ0IsRUFBRSxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVGLDJCQUFrQixDQUFDLEdBQUcsRUFBRTtJQUN2QixFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZixNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDbkMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixjQUFjLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixzQ0FBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxDQUFDO1FBQ0YsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztBQUNGLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDMUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7UUFDMUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN0QixzQ0FBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFUCxNQUFNLENBQUMsQ0FBQyxJQUFZLEVBQUUsUUFBYSxFQUFFLEVBQUU7UUFDdEMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDO0lBQ0YsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMLElBQUksZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtJQUNwQyxNQUFNLFNBQVMsR0FBb0QsRUFBRSxDQUFDO0lBQ3RFLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1osSUFBSSxDQUFDLENBQUM7UUFDTixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXRCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUVELFNBQVMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNWLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtnQkFDbEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2FBQ2hCLENBQUMsQ0FBQztRQUNKLENBQUM7UUFFRCxTQUFTLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7QUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFFUCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtJQUN0QyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLGdCQUFnQixFQUFFLENBQUM7QUFDcEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRVQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRTtJQUMxQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUM7SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssZ0NBQWdDO1lBQ3BDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3ZELEtBQUssQ0FBQztRQUVQLEtBQUssWUFBWTtZQUNoQixZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDeEMsS0FBSyxDQUFDO0lBQ1IsQ0FBQztBQUNGLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUVWLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUU7SUFDN0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQztJQUNSLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLE1BQXFCLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxJQUFJLENBQUMsVUFBeUIsRUFBRSxDQUFDO1FBQzFGLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQixNQUFNLENBQUM7UUFDUixDQUFDO0lBQ0YsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDM0IsTUFBTSxJQUFJLEdBQUcsOENBQWdDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEQsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0FBQ0YsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFO0lBQzFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sQ0FBQztJQUNSLENBQUM7SUFFRCxJQUFJLElBQUksR0FBUSxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzdCLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDYixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0MsS0FBSyxDQUFDO1lBQ1AsQ0FBQztZQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNqRixNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUYsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssQ0FBQztZQUNQLENBQUM7WUFDRCxLQUFLLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDeEIsQ0FBQztBQUNGLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVULEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUN4QixDQUFDO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDUCxNQUFNLElBQUksR0FBRyw4Q0FBZ0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9DLENBQUM7UUFDRixDQUFDO0lBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDVCxDQUFDOzs7Ozs7Ozs7Ozs7OztBQzdKRDs7O2dHQUdnRzs7QUFFaEcsc0ZBQXlDO0FBUzVCLDZCQUFxQixHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUU7SUFDcEQsTUFBTSxDQUFDLElBQUk7UUFDVixXQUFXLENBQUMsSUFBWSxFQUFFLElBQVk7WUFDckMsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDbEIsSUFBSTtnQkFDSixNQUFNLEVBQUUsc0JBQVcsRUFBRSxDQUFDLE1BQU07Z0JBQzVCLElBQUk7YUFDSixDQUFDLENBQUM7UUFDSixDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUN4QkY7OztnR0FHZ0c7O0FBRWhHLHNGQUF5QztBQUd6QyxlQUFlLEdBQVcsRUFBRSxHQUFXLEVBQUUsS0FBYTtJQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsbUJBQW1CLElBQVk7SUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsc0JBQVcsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQVFELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLEVBQUU7SUFDakMsSUFBSSxRQUEyQixDQUFDO0lBQ2hDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDWCxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZixRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNqRixRQUFRLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLEVBQzVDLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzFCLENBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUNELE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFDakIsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUVMOzs7OztHQUtHO0FBQ0gsa0NBQXlDLFVBQWtCO0lBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUNwQyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0IsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzdDLENBQUM7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDbEIsQ0FBQztJQUNELE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ3JCLENBQUM7QUFiRCw0REFhQztBQUVEOztHQUVHO0FBQ0gscUNBQTRDLE1BQWM7SUFDekQsTUFBTSxLQUFLLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztJQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUN6QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNaLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMxRCxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztZQUM1QyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ1YsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDO1lBQ0wsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNWLENBQUM7SUFDRixDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMzRCxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDakQsQ0FBQztJQUNELE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNoQyxDQUFDO0FBdEJELGtFQXNCQztBQUVEOztHQUVHO0FBQ0gsa0NBQXlDLElBQVk7SUFDcEQsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBVyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQztJQUNSLENBQUM7SUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUM7SUFDUixDQUFDO0lBRUQsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxRCxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDZixNQUFNLENBQUM7SUFDUixDQUFDO0lBQ0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUN0RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQzdCLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLDhEQUE4RDtRQUM5RCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztRQUM3RSxRQUFRLEdBQUcsV0FBVyxHQUFHLGVBQWUsR0FBRyxhQUFhLENBQUM7SUFDMUQsQ0FBQztJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ1AsUUFBUSxHQUFHLFdBQVcsQ0FBQztJQUN4QixDQUFDO0lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBMUJELDREQTBCQztBQUVELDBDQUFpRCxNQUFjO0lBQzlELE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0QsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNkLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNoRSxNQUFNLGtCQUFrQixHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVixNQUFNLHVCQUF1QixHQUFHLGtCQUFrQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckgsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyx1QkFBdUIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25GLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDO1lBQ0wsTUFBTSxxQkFBcUIsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMzRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO1lBQ25ELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsQ0FBQztJQUNGLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2IsQ0FBQztBQWpCRCw0RUFpQkM7Ozs7Ozs7Ozs7Ozs7O0FDdElEOzs7Z0dBR2dHOztBQVloRyxJQUFJLGNBQWMsR0FBZ0MsU0FBUyxDQUFDO0FBRTVELGlCQUF3QixHQUFXO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUN4RSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ1YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNGLENBQUM7SUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFWRCwwQkFVQztBQUVEO0lBQ0MsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNwQixNQUFNLENBQUMsY0FBYyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxjQUFjLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFDLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN2QixDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFYRCxrQ0FXQyIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3ByZXZpZXctc3JjL2luZGV4LnRzXCIpO1xuIiwiLyoqXG4gKiBsb2Rhc2ggKEN1c3RvbSBCdWlsZCkgPGh0dHBzOi8vbG9kYXNoLmNvbS8+XG4gKiBCdWlsZDogYGxvZGFzaCBtb2R1bGFyaXplIGV4cG9ydHM9XCJucG1cIiAtbyAuL2BcbiAqIENvcHlyaWdodCBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIDxodHRwczovL2pxdWVyeS5vcmcvPlxuICogUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UgPGh0dHBzOi8vbG9kYXNoLmNvbS9saWNlbnNlPlxuICogQmFzZWQgb24gVW5kZXJzY29yZS5qcyAxLjguMyA8aHR0cDovL3VuZGVyc2NvcmVqcy5vcmcvTElDRU5TRT5cbiAqIENvcHlyaWdodCBKZXJlbXkgQXNoa2VuYXMsIERvY3VtZW50Q2xvdWQgYW5kIEludmVzdGlnYXRpdmUgUmVwb3J0ZXJzICYgRWRpdG9yc1xuICovXG5cbi8qKiBVc2VkIGFzIHRoZSBgVHlwZUVycm9yYCBtZXNzYWdlIGZvciBcIkZ1bmN0aW9uc1wiIG1ldGhvZHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKiogVXNlZCB0byBtYXRjaCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbSA9IC9eXFxzK3xcXHMrJC9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmFkIHNpZ25lZCBoZXhhZGVjaW1hbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCYWRIZXggPSAvXlstK10weFswLTlhLWZdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJpbmFyeSBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNCaW5hcnkgPSAvXjBiWzAxXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvY3RhbCBzdHJpbmcgdmFsdWVzLiAqL1xudmFyIHJlSXNPY3RhbCA9IC9eMG9bMC03XSskL2k7XG5cbi8qKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB3aXRob3V0IGEgZGVwZW5kZW5jeSBvbiBgcm9vdGAuICovXG52YXIgZnJlZVBhcnNlSW50ID0gcGFyc2VJbnQ7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heCxcbiAgICBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBHZXRzIHRoZSB0aW1lc3RhbXAgb2YgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdGhhdCBoYXZlIGVsYXBzZWQgc2luY2VcbiAqIHRoZSBVbml4IGVwb2NoICgxIEphbnVhcnkgMTk3MCAwMDowMDowMCBVVEMpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi40LjBcbiAqIEBjYXRlZ29yeSBEYXRlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSB0aW1lc3RhbXAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZGVmZXIoZnVuY3Rpb24oc3RhbXApIHtcbiAqICAgY29uc29sZS5sb2coXy5ub3coKSAtIHN0YW1wKTtcbiAqIH0sIF8ubm93KCkpO1xuICogLy8gPT4gTG9ncyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBpdCB0b29rIGZvciB0aGUgZGVmZXJyZWQgaW52b2NhdGlvbi5cbiAqL1xudmFyIG5vdyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gcm9vdC5EYXRlLm5vdygpO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVib3VuY2VkIGZ1bmN0aW9uIHRoYXQgZGVsYXlzIGludm9raW5nIGBmdW5jYCB1bnRpbCBhZnRlciBgd2FpdGBcbiAqIG1pbGxpc2Vjb25kcyBoYXZlIGVsYXBzZWQgc2luY2UgdGhlIGxhc3QgdGltZSB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uIHdhc1xuICogaW52b2tlZC4gVGhlIGRlYm91bmNlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGAgbWV0aG9kIHRvIGNhbmNlbFxuICogZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG8gaW1tZWRpYXRlbHkgaW52b2tlIHRoZW0uXG4gKiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYCBzaG91bGQgYmUgaW52b2tlZCBvbiB0aGVcbiAqIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YCB0aW1lb3V0LiBUaGUgYGZ1bmNgIGlzIGludm9rZWRcbiAqIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24uIFN1YnNlcXVlbnRcbiAqIGNhbGxzIHRvIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gcmV0dXJuIHRoZSByZXN1bHQgb2YgdGhlIGxhc3QgYGZ1bmNgXG4gKiBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgZGVib3VuY2VkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLmRlYm91bmNlYCBhbmQgYF8udGhyb3R0bGVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gZGVib3VuY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSBsZWFkaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQuXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubWF4V2FpdF1cbiAqICBUaGUgbWF4aW11bSB0aW1lIGBmdW5jYCBpcyBhbGxvd2VkIHRvIGJlIGRlbGF5ZWQgYmVmb3JlIGl0J3MgaW52b2tlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZGVib3VuY2VkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBjb3N0bHkgY2FsY3VsYXRpb25zIHdoaWxlIHRoZSB3aW5kb3cgc2l6ZSBpcyBpbiBmbHV4LlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Jlc2l6ZScsIF8uZGVib3VuY2UoY2FsY3VsYXRlTGF5b3V0LCAxNTApKTtcbiAqXG4gKiAvLyBJbnZva2UgYHNlbmRNYWlsYCB3aGVuIGNsaWNrZWQsIGRlYm91bmNpbmcgc3Vic2VxdWVudCBjYWxscy5cbiAqIGpRdWVyeShlbGVtZW50KS5vbignY2xpY2snLCBfLmRlYm91bmNlKHNlbmRNYWlsLCAzMDAsIHtcbiAqICAgJ2xlYWRpbmcnOiB0cnVlLFxuICogICAndHJhaWxpbmcnOiBmYWxzZVxuICogfSkpO1xuICpcbiAqIC8vIEVuc3VyZSBgYmF0Y2hMb2dgIGlzIGludm9rZWQgb25jZSBhZnRlciAxIHNlY29uZCBvZiBkZWJvdW5jZWQgY2FsbHMuXG4gKiB2YXIgZGVib3VuY2VkID0gXy5kZWJvdW5jZShiYXRjaExvZywgMjUwLCB7ICdtYXhXYWl0JzogMTAwMCB9KTtcbiAqIHZhciBzb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9zdHJlYW0nKTtcbiAqIGpRdWVyeShzb3VyY2UpLm9uKCdtZXNzYWdlJywgZGVib3VuY2VkKTtcbiAqXG4gKiAvLyBDYW5jZWwgdGhlIHRyYWlsaW5nIGRlYm91bmNlZCBpbnZvY2F0aW9uLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3BvcHN0YXRlJywgZGVib3VuY2VkLmNhbmNlbCk7XG4gKi9cbmZ1bmN0aW9uIGRlYm91bmNlKGZ1bmMsIHdhaXQsIG9wdGlvbnMpIHtcbiAgdmFyIGxhc3RBcmdzLFxuICAgICAgbGFzdFRoaXMsXG4gICAgICBtYXhXYWl0LFxuICAgICAgcmVzdWx0LFxuICAgICAgdGltZXJJZCxcbiAgICAgIGxhc3RDYWxsVGltZSxcbiAgICAgIGxhc3RJbnZva2VUaW1lID0gMCxcbiAgICAgIGxlYWRpbmcgPSBmYWxzZSxcbiAgICAgIG1heGluZyA9IGZhbHNlLFxuICAgICAgdHJhaWxpbmcgPSB0cnVlO1xuXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHdhaXQgPSB0b051bWJlcih3YWl0KSB8fCAwO1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gISFvcHRpb25zLmxlYWRpbmc7XG4gICAgbWF4aW5nID0gJ21heFdhaXQnIGluIG9wdGlvbnM7XG4gICAgbWF4V2FpdCA9IG1heGluZyA/IG5hdGl2ZU1heCh0b051bWJlcihvcHRpb25zLm1heFdhaXQpIHx8IDAsIHdhaXQpIDogbWF4V2FpdDtcbiAgICB0cmFpbGluZyA9ICd0cmFpbGluZycgaW4gb3B0aW9ucyA/ICEhb3B0aW9ucy50cmFpbGluZyA6IHRyYWlsaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52b2tlRnVuYyh0aW1lKSB7XG4gICAgdmFyIGFyZ3MgPSBsYXN0QXJncyxcbiAgICAgICAgdGhpc0FyZyA9IGxhc3RUaGlzO1xuXG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICBsYXN0SW52b2tlVGltZSA9IHRpbWU7XG4gICAgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzQXJnLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gbGVhZGluZ0VkZ2UodGltZSkge1xuICAgIC8vIFJlc2V0IGFueSBgbWF4V2FpdGAgdGltZXIuXG4gICAgbGFzdEludm9rZVRpbWUgPSB0aW1lO1xuICAgIC8vIFN0YXJ0IHRoZSB0aW1lciBmb3IgdGhlIHRyYWlsaW5nIGVkZ2UuXG4gICAgdGltZXJJZCA9IHNldFRpbWVvdXQodGltZXJFeHBpcmVkLCB3YWl0KTtcbiAgICAvLyBJbnZva2UgdGhlIGxlYWRpbmcgZWRnZS5cbiAgICByZXR1cm4gbGVhZGluZyA/IGludm9rZUZ1bmModGltZSkgOiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1haW5pbmdXYWl0KHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lLFxuICAgICAgICByZXN1bHQgPSB3YWl0IC0gdGltZVNpbmNlTGFzdENhbGw7XG5cbiAgICByZXR1cm4gbWF4aW5nID8gbmF0aXZlTWluKHJlc3VsdCwgbWF4V2FpdCAtIHRpbWVTaW5jZUxhc3RJbnZva2UpIDogcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkSW52b2tlKHRpbWUpIHtcbiAgICB2YXIgdGltZVNpbmNlTGFzdENhbGwgPSB0aW1lIC0gbGFzdENhbGxUaW1lLFxuICAgICAgICB0aW1lU2luY2VMYXN0SW52b2tlID0gdGltZSAtIGxhc3RJbnZva2VUaW1lO1xuXG4gICAgLy8gRWl0aGVyIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGFjdGl2aXR5IGhhcyBzdG9wcGVkIGFuZCB3ZSdyZSBhdCB0aGVcbiAgICAvLyB0cmFpbGluZyBlZGdlLCB0aGUgc3lzdGVtIHRpbWUgaGFzIGdvbmUgYmFja3dhcmRzIGFuZCB3ZSdyZSB0cmVhdGluZ1xuICAgIC8vIGl0IGFzIHRoZSB0cmFpbGluZyBlZGdlLCBvciB3ZSd2ZSBoaXQgdGhlIGBtYXhXYWl0YCBsaW1pdC5cbiAgICByZXR1cm4gKGxhc3RDYWxsVGltZSA9PT0gdW5kZWZpbmVkIHx8ICh0aW1lU2luY2VMYXN0Q2FsbCA+PSB3YWl0KSB8fFxuICAgICAgKHRpbWVTaW5jZUxhc3RDYWxsIDwgMCkgfHwgKG1heGluZyAmJiB0aW1lU2luY2VMYXN0SW52b2tlID49IG1heFdhaXQpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVyRXhwaXJlZCgpIHtcbiAgICB2YXIgdGltZSA9IG5vdygpO1xuICAgIGlmIChzaG91bGRJbnZva2UodGltZSkpIHtcbiAgICAgIHJldHVybiB0cmFpbGluZ0VkZ2UodGltZSk7XG4gICAgfVxuICAgIC8vIFJlc3RhcnQgdGhlIHRpbWVyLlxuICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgcmVtYWluaW5nV2FpdCh0aW1lKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFpbGluZ0VkZ2UodGltZSkge1xuICAgIHRpbWVySWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBPbmx5IGludm9rZSBpZiB3ZSBoYXZlIGBsYXN0QXJnc2Agd2hpY2ggbWVhbnMgYGZ1bmNgIGhhcyBiZWVuXG4gICAgLy8gZGVib3VuY2VkIGF0IGxlYXN0IG9uY2UuXG4gICAgaWYgKHRyYWlsaW5nICYmIGxhc3RBcmdzKSB7XG4gICAgICByZXR1cm4gaW52b2tlRnVuYyh0aW1lKTtcbiAgICB9XG4gICAgbGFzdEFyZ3MgPSBsYXN0VGhpcyA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICB9XG4gICAgbGFzdEludm9rZVRpbWUgPSAwO1xuICAgIGxhc3RBcmdzID0gbGFzdENhbGxUaW1lID0gbGFzdFRoaXMgPSB0aW1lcklkID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgcmV0dXJuIHRpbWVySWQgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IHRyYWlsaW5nRWRnZShub3coKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWJvdW5jZWQoKSB7XG4gICAgdmFyIHRpbWUgPSBub3coKSxcbiAgICAgICAgaXNJbnZva2luZyA9IHNob3VsZEludm9rZSh0aW1lKTtcblxuICAgIGxhc3RBcmdzID0gYXJndW1lbnRzO1xuICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICBsYXN0Q2FsbFRpbWUgPSB0aW1lO1xuXG4gICAgaWYgKGlzSW52b2tpbmcpIHtcbiAgICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGxlYWRpbmdFZGdlKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgICBpZiAobWF4aW5nKSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbnZvY2F0aW9ucyBpbiBhIHRpZ2h0IGxvb3AuXG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgICAgIHJldHVybiBpbnZva2VGdW5jKGxhc3RDYWxsVGltZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aW1lcklkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KHRpbWVyRXhwaXJlZCwgd2FpdCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgZGVib3VuY2VkLmNhbmNlbCA9IGNhbmNlbDtcbiAgZGVib3VuY2VkLmZsdXNoID0gZmx1c2g7XG4gIHJldHVybiBkZWJvdW5jZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHRocm90dGxlZCBmdW5jdGlvbiB0aGF0IG9ubHkgaW52b2tlcyBgZnVuY2AgYXQgbW9zdCBvbmNlIHBlclxuICogZXZlcnkgYHdhaXRgIG1pbGxpc2Vjb25kcy4gVGhlIHRocm90dGxlZCBmdW5jdGlvbiBjb21lcyB3aXRoIGEgYGNhbmNlbGBcbiAqIG1ldGhvZCB0byBjYW5jZWwgZGVsYXllZCBgZnVuY2AgaW52b2NhdGlvbnMgYW5kIGEgYGZsdXNoYCBtZXRob2QgdG9cbiAqIGltbWVkaWF0ZWx5IGludm9rZSB0aGVtLiBQcm92aWRlIGBvcHRpb25zYCB0byBpbmRpY2F0ZSB3aGV0aGVyIGBmdW5jYFxuICogc2hvdWxkIGJlIGludm9rZWQgb24gdGhlIGxlYWRpbmcgYW5kL29yIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIGB3YWl0YFxuICogdGltZW91dC4gVGhlIGBmdW5jYCBpcyBpbnZva2VkIHdpdGggdGhlIGxhc3QgYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZVxuICogdGhyb3R0bGVkIGZ1bmN0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSB0aHJvdHRsZWQgZnVuY3Rpb24gcmV0dXJuIHRoZVxuICogcmVzdWx0IG9mIHRoZSBsYXN0IGBmdW5jYCBpbnZvY2F0aW9uLlxuICpcbiAqICoqTm90ZToqKiBJZiBgbGVhZGluZ2AgYW5kIGB0cmFpbGluZ2Agb3B0aW9ucyBhcmUgYHRydWVgLCBgZnVuY2AgaXNcbiAqIGludm9rZWQgb24gdGhlIHRyYWlsaW5nIGVkZ2Ugb2YgdGhlIHRpbWVvdXQgb25seSBpZiB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uXG4gKiBpcyBpbnZva2VkIG1vcmUgdGhhbiBvbmNlIGR1cmluZyB0aGUgYHdhaXRgIHRpbWVvdXQuXG4gKlxuICogSWYgYHdhaXRgIGlzIGAwYCBhbmQgYGxlYWRpbmdgIGlzIGBmYWxzZWAsIGBmdW5jYCBpbnZvY2F0aW9uIGlzIGRlZmVycmVkXG4gKiB1bnRpbCB0byB0aGUgbmV4dCB0aWNrLCBzaW1pbGFyIHRvIGBzZXRUaW1lb3V0YCB3aXRoIGEgdGltZW91dCBvZiBgMGAuXG4gKlxuICogU2VlIFtEYXZpZCBDb3JiYWNobydzIGFydGljbGVdKGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vZGVib3VuY2luZy10aHJvdHRsaW5nLWV4cGxhaW5lZC1leGFtcGxlcy8pXG4gKiBmb3IgZGV0YWlscyBvdmVyIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIGBfLnRocm90dGxlYCBhbmQgYF8uZGVib3VuY2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXG4gKiBAcGFyYW0ge251bWJlcn0gW3dhaXQ9MF0gVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gdGhyb3R0bGUgaW52b2NhdGlvbnMgdG8uXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zIG9iamVjdC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz10cnVlXVxuICogIFNwZWNpZnkgaW52b2tpbmcgb24gdGhlIGxlYWRpbmcgZWRnZSBvZiB0aGUgdGltZW91dC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudHJhaWxpbmc9dHJ1ZV1cbiAqICBTcGVjaWZ5IGludm9raW5nIG9uIHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSB0aW1lb3V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgdGhyb3R0bGVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiAvLyBBdm9pZCBleGNlc3NpdmVseSB1cGRhdGluZyB0aGUgcG9zaXRpb24gd2hpbGUgc2Nyb2xsaW5nLlxuICogalF1ZXJ5KHdpbmRvdykub24oJ3Njcm9sbCcsIF8udGhyb3R0bGUodXBkYXRlUG9zaXRpb24sIDEwMCkpO1xuICpcbiAqIC8vIEludm9rZSBgcmVuZXdUb2tlbmAgd2hlbiB0aGUgY2xpY2sgZXZlbnQgaXMgZmlyZWQsIGJ1dCBub3QgbW9yZSB0aGFuIG9uY2UgZXZlcnkgNSBtaW51dGVzLlxuICogdmFyIHRocm90dGxlZCA9IF8udGhyb3R0bGUocmVuZXdUb2tlbiwgMzAwMDAwLCB7ICd0cmFpbGluZyc6IGZhbHNlIH0pO1xuICogalF1ZXJ5KGVsZW1lbnQpLm9uKCdjbGljaycsIHRocm90dGxlZCk7XG4gKlxuICogLy8gQ2FuY2VsIHRoZSB0cmFpbGluZyB0aHJvdHRsZWQgaW52b2NhdGlvbi5cbiAqIGpRdWVyeSh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIHRocm90dGxlZC5jYW5jZWwpO1xuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmdW5jLCB3YWl0LCBvcHRpb25zKSB7XG4gIHZhciBsZWFkaW5nID0gdHJ1ZSxcbiAgICAgIHRyYWlsaW5nID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICBpZiAoaXNPYmplY3Qob3B0aW9ucykpIHtcbiAgICBsZWFkaW5nID0gJ2xlYWRpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMubGVhZGluZyA6IGxlYWRpbmc7XG4gICAgdHJhaWxpbmcgPSAndHJhaWxpbmcnIGluIG9wdGlvbnMgPyAhIW9wdGlvbnMudHJhaWxpbmcgOiB0cmFpbGluZztcbiAgfVxuICByZXR1cm4gZGVib3VuY2UoZnVuYywgd2FpdCwge1xuICAgICdsZWFkaW5nJzogbGVhZGluZyxcbiAgICAnbWF4V2FpdCc6IHdhaXQsXG4gICAgJ3RyYWlsaW5nJzogdHJhaWxpbmdcbiAgfSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocmVUcmltLCAnJyk7XG4gIHZhciBpc0JpbmFyeSA9IHJlSXNCaW5hcnkudGVzdCh2YWx1ZSk7XG4gIHJldHVybiAoaXNCaW5hcnkgfHwgcmVJc09jdGFsLnRlc3QodmFsdWUpKVxuICAgID8gZnJlZVBhcnNlSW50KHZhbHVlLnNsaWNlKDIpLCBpc0JpbmFyeSA/IDIgOiA4KVxuICAgIDogKHJlSXNCYWRIZXgudGVzdCh2YWx1ZSkgPyBOQU4gOiArdmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocm90dGxlO1xuIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsIGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaCAoZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG4iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmltcG9ydCB7IGdldEVsZW1lbnRzRm9yU291cmNlTGluZSB9IGZyb20gJy4vc2Nyb2xsLXN5bmMnO1xuXG5leHBvcnQgY2xhc3MgQWN0aXZlTGluZU1hcmtlciB7XG5cdHByaXZhdGUgX2N1cnJlbnQ6IGFueTtcblxuXHRvbkRpZENoYW5nZVRleHRFZGl0b3JTZWxlY3Rpb24obGluZTogbnVtYmVyKSB7XG5cdFx0Y29uc3QgeyBwcmV2aW91cyB9ID0gZ2V0RWxlbWVudHNGb3JTb3VyY2VMaW5lKGxpbmUpO1xuXHRcdHRoaXMuX3VwZGF0ZShwcmV2aW91cyAmJiBwcmV2aW91cy5lbGVtZW50KTtcblx0fVxuXG5cdF91cGRhdGUoYmVmb3JlOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdHRoaXMuX3VubWFya0FjdGl2ZUVsZW1lbnQodGhpcy5fY3VycmVudCk7XG5cdFx0dGhpcy5fbWFya0FjdGl2ZUVsZW1lbnQoYmVmb3JlKTtcblx0XHR0aGlzLl9jdXJyZW50ID0gYmVmb3JlO1xuXHR9XG5cblx0X3VubWFya0FjdGl2ZUVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQpIHtcblx0XHRpZiAoIWVsZW1lbnQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0ZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZS5yZXBsYWNlKC9cXGJjb2RlLWFjdGl2ZS1saW5lXFxiL2csICcnKTtcblx0fVxuXG5cdF9tYXJrQWN0aXZlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCkge1xuXHRcdGlmICghZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRlbGVtZW50LmNsYXNzTmFtZSArPSAnIGNvZGUtYWN0aXZlLWxpbmUnO1xuXHR9XG59IiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBmdW5jdGlvbiBvbmNlRG9jdW1lbnRMb2FkZWQoZjogKCkgPT4gdm9pZCkge1xuXHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICd1bmluaXRpYWxpemVkJykge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmKTtcblx0fSBlbHNlIHtcblx0XHRmKCk7XG5cdH1cbn0iLCIvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIExpY2Vuc2UudHh0IGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuaW1wb3J0IHsgQWN0aXZlTGluZU1hcmtlciB9IGZyb20gJy4vYWN0aXZlTGluZU1hcmtlcic7XG5pbXBvcnQgeyBvbmNlRG9jdW1lbnRMb2FkZWQgfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgeyBjcmVhdGVQb3N0ZXJGb3JWc0NvZGUgfSBmcm9tICcuL21lc3NhZ2luZyc7XG5pbXBvcnQgeyBnZXRFZGl0b3JMaW5lTnVtYmVyRm9yUGFnZU9mZnNldCwgc2Nyb2xsVG9SZXZlYWxTb3VyY2VMaW5lIH0gZnJvbSAnLi9zY3JvbGwtc3luYyc7XG5pbXBvcnQgeyBnZXRTZXR0aW5ncywgZ2V0RGF0YSB9IGZyb20gJy4vc2V0dGluZ3MnO1xuaW1wb3J0IHRocm90dGxlID0gcmVxdWlyZSgnbG9kYXNoLnRocm90dGxlJyk7XG5cbmRlY2xhcmUgdmFyIGFjcXVpcmVWc0NvZGVBcGk6IGFueTtcblxudmFyIHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcbmNvbnN0IG1hcmtlciA9IG5ldyBBY3RpdmVMaW5lTWFya2VyKCk7XG5jb25zdCBzZXR0aW5ncyA9IGdldFNldHRpbmdzKCk7XG5cbmNvbnN0IHZzY29kZSA9IGFjcXVpcmVWc0NvZGVBcGkoKTtcblxuLy8gU2V0IFZTIENvZGUgc3RhdGVcbmNvbnN0IHN0YXRlID0gZ2V0RGF0YSgnZGF0YS1zdGF0ZScpO1xudnNjb2RlLnNldFN0YXRlKHN0YXRlKTtcblxuY29uc3QgbWVzc2FnaW5nID0gY3JlYXRlUG9zdGVyRm9yVnNDb2RlKHZzY29kZSk7XG5cbndpbmRvdy5jc3BBbGVydGVyLnNldFBvc3RlcihtZXNzYWdpbmcpO1xud2luZG93LnN0eWxlTG9hZGluZ01vbml0b3Iuc2V0UG9zdGVyKG1lc3NhZ2luZyk7XG5cbndpbmRvdy5vbmxvYWQgPSAoKSA9PiB7XG5cdHVwZGF0ZUltYWdlU2l6ZXMoKTtcbn07XG5cbm9uY2VEb2N1bWVudExvYWRlZCgoKSA9PiB7XG5cdGlmIChzZXR0aW5ncy5zY3JvbGxQcmV2aWV3V2l0aEVkaXRvcikge1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaW5pdGlhbExpbmUgPSArc2V0dGluZ3MubGluZTtcblx0XHRcdGlmICghaXNOYU4oaW5pdGlhbExpbmUpKSB7XG5cdFx0XHRcdHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0c2Nyb2xsVG9SZXZlYWxTb3VyY2VMaW5lKGluaXRpYWxMaW5lKTtcblx0XHRcdH1cblx0XHR9LCAwKTtcblx0fVxufSk7XG5cbmNvbnN0IG9uVXBkYXRlVmlldyA9ICgoKSA9PiB7XG5cdGNvbnN0IGRvU2Nyb2xsID0gdGhyb3R0bGUoKGxpbmU6IG51bWJlcikgPT4ge1xuXHRcdHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcblx0XHRzY3JvbGxUb1JldmVhbFNvdXJjZUxpbmUobGluZSk7XG5cdH0sIDUwKTtcblxuXHRyZXR1cm4gKGxpbmU6IG51bWJlciwgc2V0dGluZ3M6IGFueSkgPT4ge1xuXHRcdGlmICghaXNOYU4obGluZSkpIHtcblx0XHRcdHNldHRpbmdzLmxpbmUgPSBsaW5lO1xuXHRcdFx0ZG9TY3JvbGwobGluZSk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxubGV0IHVwZGF0ZUltYWdlU2l6ZXMgPSB0aHJvdHRsZSgoKSA9PiB7XG5cdGNvbnN0IGltYWdlSW5mbzogeyBpZDogc3RyaW5nLCBoZWlnaHQ6IG51bWJlciwgd2lkdGg6IG51bWJlciB9W10gPSBbXTtcblx0bGV0IGltYWdlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcblx0aWYgKGltYWdlcykge1xuXHRcdGxldCBpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGltZyA9IGltYWdlc1tpXTtcblxuXHRcdFx0aWYgKGltZy5jbGFzc0xpc3QuY29udGFpbnMoJ2xvYWRpbmcnKSkge1xuXHRcdFx0XHRpbWcuY2xhc3NMaXN0LnJlbW92ZSgnbG9hZGluZycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpbWFnZUluZm8ucHVzaCh7XG5cdFx0XHRcdGlkOiBpbWcuaWQsXG5cdFx0XHRcdGhlaWdodDogaW1nLmhlaWdodCxcblx0XHRcdFx0d2lkdGg6IGltZy53aWR0aFxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0bWVzc2FnaW5nLnBvc3RNZXNzYWdlKCdjYWNoZUltYWdlU2l6ZXMnLCBpbWFnZUluZm8pO1xuXHR9XG59LCA1MCk7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XG5cdHNjcm9sbERpc2FibGVkID0gdHJ1ZTtcblx0dXBkYXRlSW1hZ2VTaXplcygpO1xufSwgdHJ1ZSk7XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZXZlbnQgPT4ge1xuXHRpZiAoZXZlbnQuZGF0YS5zb3VyY2UgIT09IHNldHRpbmdzLnNvdXJjZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHN3aXRjaCAoZXZlbnQuZGF0YS50eXBlKSB7XG5cdFx0Y2FzZSAnb25EaWRDaGFuZ2VUZXh0RWRpdG9yU2VsZWN0aW9uJzpcblx0XHRcdG1hcmtlci5vbkRpZENoYW5nZVRleHRFZGl0b3JTZWxlY3Rpb24oZXZlbnQuZGF0YS5saW5lKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSAndXBkYXRlVmlldyc6XG5cdFx0XHRvblVwZGF0ZVZpZXcoZXZlbnQuZGF0YS5saW5lLCBzZXR0aW5ncyk7XG5cdFx0XHRicmVhaztcblx0fVxufSwgZmFsc2UpO1xuXG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsIGV2ZW50ID0+IHtcblx0aWYgKCFzZXR0aW5ncy5kb3VibGVDbGlja1RvU3dpdGNoVG9FZGl0b3IpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBJZ25vcmUgY2xpY2tzIG9uIGxpbmtzXG5cdGZvciAobGV0IG5vZGUgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAobm9kZS50YWdOYW1lID09PSAnQScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBvZmZzZXQgPSBldmVudC5wYWdlWTtcblx0Y29uc3QgbGluZSA9IGdldEVkaXRvckxpbmVOdW1iZXJGb3JQYWdlT2Zmc2V0KG9mZnNldCk7XG5cdGlmICh0eXBlb2YgbGluZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKGxpbmUpKSB7XG5cdFx0bWVzc2FnaW5nLnBvc3RNZXNzYWdlKCdkaWRDbGljaycsIHsgbGluZTogTWF0aC5mbG9vcihsaW5lKSB9KTtcblx0fVxufSk7XG5cbmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZXZlbnQgPT4ge1xuXHRpZiAoIWV2ZW50KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IG5vZGU6IGFueSA9IGV2ZW50LnRhcmdldDtcblx0d2hpbGUgKG5vZGUpIHtcblx0XHRpZiAobm9kZS50YWdOYW1lICYmIG5vZGUudGFnTmFtZSA9PT0gJ0EnICYmIG5vZGUuaHJlZikge1xuXHRcdFx0aWYgKG5vZGUuZ2V0QXR0cmlidXRlKCdocmVmJykuc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG5vZGUuaHJlZi5zdGFydHNXaXRoKCdmaWxlOi8vJykgfHwgbm9kZS5ocmVmLnN0YXJ0c1dpdGgoJ3ZzY29kZS1yZXNvdXJjZTonKSkge1xuXHRcdFx0XHRjb25zdCBbcGF0aCwgZnJhZ21lbnRdID0gbm9kZS5ocmVmLnJlcGxhY2UoL14oZmlsZTpcXC9cXC98dnNjb2RlLXJlc291cmNlOikvaSwgJycpLnNwbGl0KCcjJyk7XG5cdFx0XHRcdG1lc3NhZ2luZy5wb3N0TWVzc2FnZSgnY2xpY2tMaW5rJywgeyBwYXRoLCBmcmFnbWVudCB9KTtcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG5cdH1cbn0sIHRydWUpO1xuXG5pZiAoc2V0dGluZ3Muc2Nyb2xsRWRpdG9yV2l0aFByZXZpZXcpIHtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRocm90dGxlKCgpID0+IHtcblx0XHRpZiAoc2Nyb2xsRGlzYWJsZWQpIHtcblx0XHRcdHNjcm9sbERpc2FibGVkID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGxpbmUgPSBnZXRFZGl0b3JMaW5lTnVtYmVyRm9yUGFnZU9mZnNldCh3aW5kb3cuc2Nyb2xsWSk7XG5cdFx0XHRpZiAodHlwZW9mIGxpbmUgPT09ICdudW1iZXInICYmICFpc05hTihsaW5lKSkge1xuXHRcdFx0XHRtZXNzYWdpbmcucG9zdE1lc3NhZ2UoJ3JldmVhbExpbmUnLCB7IGxpbmUgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCA1MCkpO1xufSIsIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiAgQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgTGljZW5zZS50eHQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5pbXBvcnQgeyBnZXRTZXR0aW5ncyB9IGZyb20gJy4vc2V0dGluZ3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VQb3N0ZXIge1xuXHQvKipcblx0ICogUG9zdCBhIG1lc3NhZ2UgdG8gdGhlIG1hcmtkb3duIGV4dGVuc2lvblxuXHQgKi9cblx0cG9zdE1lc3NhZ2UodHlwZTogc3RyaW5nLCBib2R5OiBvYmplY3QpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdGVyRm9yVnNDb2RlID0gKHZzY29kZTogYW55KSA9PiB7XG5cdHJldHVybiBuZXcgY2xhc3MgaW1wbGVtZW50cyBNZXNzYWdlUG9zdGVyIHtcblx0XHRwb3N0TWVzc2FnZSh0eXBlOiBzdHJpbmcsIGJvZHk6IG9iamVjdCk6IHZvaWQge1xuXHRcdFx0dnNjb2RlLnBvc3RNZXNzYWdlKHtcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0c291cmNlOiBnZXRTZXR0aW5ncygpLnNvdXJjZSxcblx0XHRcdFx0Ym9keVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmltcG9ydCB7IGdldFNldHRpbmdzIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5cblxuZnVuY3Rpb24gY2xhbXAobWluOiBudW1iZXIsIG1heDogbnVtYmVyLCB2YWx1ZTogbnVtYmVyKSB7XG5cdHJldHVybiBNYXRoLm1pbihtYXgsIE1hdGgubWF4KG1pbiwgdmFsdWUpKTtcbn1cblxuZnVuY3Rpb24gY2xhbXBMaW5lKGxpbmU6IG51bWJlcikge1xuXHRyZXR1cm4gY2xhbXAoMCwgZ2V0U2V0dGluZ3MoKS5saW5lQ291bnQgLSAxLCBsaW5lKTtcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVMaW5lRWxlbWVudCB7XG5cdGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXHRsaW5lOiBudW1iZXI7XG59XG5cbmNvbnN0IGdldENvZGVMaW5lRWxlbWVudHMgPSAoKCkgPT4ge1xuXHRsZXQgZWxlbWVudHM6IENvZGVMaW5lRWxlbWVudFtdO1xuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghZWxlbWVudHMpIHtcblx0XHRcdGVsZW1lbnRzID0gKFt7IGVsZW1lbnQ6IGRvY3VtZW50LmJvZHksIGxpbmU6IDAgfV0pLmNvbmNhdChBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoXG5cdFx0XHRcdGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2NvZGUtbGluZScpLFxuXHRcdFx0XHQoZWxlbWVudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbGluZSA9ICtlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1saW5lJyk7XG5cdFx0XHRcdFx0cmV0dXJuIHsgZWxlbWVudCwgbGluZSB9O1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmlsdGVyKCh4OiBhbnkpID0+ICFpc05hTih4LmxpbmUpKSk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtZW50cztcblx0fTtcbn0pKCk7XG5cbi8qKlxuICogRmluZCB0aGUgaHRtbCBlbGVtZW50cyB0aGF0IG1hcCB0byBhIHNwZWNpZmljIHRhcmdldCBsaW5lIGluIHRoZSBlZGl0b3IuXG4gKlxuICogSWYgYW4gZXhhY3QgbWF0Y2gsIHJldHVybnMgYSBzaW5nbGUgZWxlbWVudC4gSWYgdGhlIGxpbmUgaXMgYmV0d2VlbiBlbGVtZW50cyxcbiAqIHJldHVybnMgdGhlIGVsZW1lbnQgcHJpb3IgdG8gYW5kIHRoZSBlbGVtZW50IGFmdGVyIHRoZSBnaXZlbiBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RWxlbWVudHNGb3JTb3VyY2VMaW5lKHRhcmdldExpbmU6IG51bWJlcik6IHsgcHJldmlvdXM6IENvZGVMaW5lRWxlbWVudDsgbmV4dD86IENvZGVMaW5lRWxlbWVudDsgfSB7XG5cdGNvbnN0IGxpbmVOdW1iZXIgPSBNYXRoLmZsb29yKHRhcmdldExpbmUpO1xuXHRjb25zdCBsaW5lcyA9IGdldENvZGVMaW5lRWxlbWVudHMoKTtcblx0bGV0IHByZXZpb3VzID0gbGluZXNbMF0gfHwgbnVsbDtcblx0Zm9yIChjb25zdCBlbnRyeSBvZiBsaW5lcykge1xuXHRcdGlmIChlbnRyeS5saW5lID09PSBsaW5lTnVtYmVyKSB7XG5cdFx0XHRyZXR1cm4geyBwcmV2aW91czogZW50cnksIG5leHQ6IHVuZGVmaW5lZCB9O1xuXHRcdH0gZWxzZSBpZiAoZW50cnkubGluZSA+IGxpbmVOdW1iZXIpIHtcblx0XHRcdHJldHVybiB7IHByZXZpb3VzLCBuZXh0OiBlbnRyeSB9O1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IGVudHJ5O1xuXHR9XG5cdHJldHVybiB7IHByZXZpb3VzIH07XG59XG5cbi8qKlxuICogRmluZCB0aGUgaHRtbCBlbGVtZW50cyB0aGF0IGFyZSBhdCBhIHNwZWNpZmljIHBpeGVsIG9mZnNldCBvbiB0aGUgcGFnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpbmVFbGVtZW50c0F0UGFnZU9mZnNldChvZmZzZXQ6IG51bWJlcik6IHsgcHJldmlvdXM6IENvZGVMaW5lRWxlbWVudDsgbmV4dD86IENvZGVMaW5lRWxlbWVudDsgfSB7XG5cdGNvbnN0IGxpbmVzID0gZ2V0Q29kZUxpbmVFbGVtZW50cygpO1xuXHRjb25zdCBwb3NpdGlvbiA9IG9mZnNldCAtIHdpbmRvdy5zY3JvbGxZO1xuXHRsZXQgbG8gPSAtMTtcblx0bGV0IGhpID0gbGluZXMubGVuZ3RoIC0gMTtcblx0d2hpbGUgKGxvICsgMSA8IGhpKSB7XG5cdFx0Y29uc3QgbWlkID0gTWF0aC5mbG9vcigobG8gKyBoaSkgLyAyKTtcblx0XHRjb25zdCBib3VuZHMgPSBsaW5lc1ttaWRdLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0aWYgKGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0ID49IHBvc2l0aW9uKSB7XG5cdFx0XHRoaSA9IG1pZDtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRsbyA9IG1pZDtcblx0XHR9XG5cdH1cblx0Y29uc3QgaGlFbGVtZW50ID0gbGluZXNbaGldO1xuXHRjb25zdCBoaUJvdW5kcyA9IGhpRWxlbWVudC5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRpZiAoaGkgPj0gMSAmJiBoaUJvdW5kcy50b3AgPiBwb3NpdGlvbikge1xuXHRcdGNvbnN0IGxvRWxlbWVudCA9IGxpbmVzW2xvXTtcblx0XHRyZXR1cm4geyBwcmV2aW91czogbG9FbGVtZW50LCBuZXh0OiBoaUVsZW1lbnQgfTtcblx0fVxuXHRyZXR1cm4geyBwcmV2aW91czogaGlFbGVtZW50IH07XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byByZXZlYWwgdGhlIGVsZW1lbnQgZm9yIGEgc291cmNlIGxpbmUgaW4gdGhlIGVkaXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUmV2ZWFsU291cmNlTGluZShsaW5lOiBudW1iZXIpIHtcblx0aWYgKCFnZXRTZXR0aW5ncygpLnNjcm9sbFByZXZpZXdXaXRoRWRpdG9yKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGxpbmUgPD0gMCkge1xuXHRcdHdpbmRvdy5zY3JvbGwod2luZG93LnNjcm9sbFgsIDApO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IHsgcHJldmlvdXMsIG5leHQgfSA9IGdldEVsZW1lbnRzRm9yU291cmNlTGluZShsaW5lKTtcblx0aWYgKCFwcmV2aW91cykge1xuXHRcdHJldHVybjtcblx0fVxuXHRsZXQgc2Nyb2xsVG8gPSAwO1xuXHRjb25zdCByZWN0ID0gcHJldmlvdXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0Y29uc3QgcHJldmlvdXNUb3AgPSByZWN0LnRvcDtcblx0aWYgKG5leHQgJiYgbmV4dC5saW5lICE9PSBwcmV2aW91cy5saW5lKSB7XG5cdFx0Ly8gQmV0d2VlbiB0d28gZWxlbWVudHMuIEdvIHRvIHBlcmNlbnRhZ2Ugb2Zmc2V0IGJldHdlZW4gdGhlbS5cblx0XHRjb25zdCBiZXR3ZWVuUHJvZ3Jlc3MgPSAobGluZSAtIHByZXZpb3VzLmxpbmUpIC8gKG5leHQubGluZSAtIHByZXZpb3VzLmxpbmUpO1xuXHRcdGNvbnN0IGVsZW1lbnRPZmZzZXQgPSBuZXh0LmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gcHJldmlvdXNUb3A7XG5cdFx0c2Nyb2xsVG8gPSBwcmV2aW91c1RvcCArIGJldHdlZW5Qcm9ncmVzcyAqIGVsZW1lbnRPZmZzZXQ7XG5cdH0gZWxzZSB7XG5cdFx0c2Nyb2xsVG8gPSBwcmV2aW91c1RvcDtcblx0fVxuXHR3aW5kb3cuc2Nyb2xsKHdpbmRvdy5zY3JvbGxYLCBNYXRoLm1heCgxLCB3aW5kb3cuc2Nyb2xsWSArIHNjcm9sbFRvKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0b3JMaW5lTnVtYmVyRm9yUGFnZU9mZnNldChvZmZzZXQ6IG51bWJlcikge1xuXHRjb25zdCB7IHByZXZpb3VzLCBuZXh0IH0gPSBnZXRMaW5lRWxlbWVudHNBdFBhZ2VPZmZzZXQob2Zmc2V0KTtcblx0aWYgKHByZXZpb3VzKSB7XG5cdFx0Y29uc3QgcHJldmlvdXNCb3VuZHMgPSBwcmV2aW91cy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IG9mZnNldEZyb21QcmV2aW91cyA9IChvZmZzZXQgLSB3aW5kb3cuc2Nyb2xsWSAtIHByZXZpb3VzQm91bmRzLnRvcCk7XG5cdFx0aWYgKG5leHQpIHtcblx0XHRcdGNvbnN0IHByb2dyZXNzQmV0d2VlbkVsZW1lbnRzID0gb2Zmc2V0RnJvbVByZXZpb3VzIC8gKG5leHQuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBwcmV2aW91c0JvdW5kcy50b3ApO1xuXHRcdFx0Y29uc3QgbGluZSA9IHByZXZpb3VzLmxpbmUgKyBwcm9ncmVzc0JldHdlZW5FbGVtZW50cyAqIChuZXh0LmxpbmUgLSBwcmV2aW91cy5saW5lKTtcblx0XHRcdHJldHVybiBjbGFtcExpbmUobGluZSk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0Y29uc3QgcHJvZ3Jlc3NXaXRoaW5FbGVtZW50ID0gb2Zmc2V0RnJvbVByZXZpb3VzIC8gKHByZXZpb3VzQm91bmRzLmhlaWdodCk7XG5cdFx0XHRjb25zdCBsaW5lID0gcHJldmlvdXMubGluZSArIHByb2dyZXNzV2l0aGluRWxlbWVudDtcblx0XHRcdHJldHVybiBjbGFtcExpbmUobGluZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBudWxsO1xufVxuIiwiLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSBMaWNlbnNlLnR4dCBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld1NldHRpbmdzIHtcblx0c291cmNlOiBzdHJpbmc7XG5cdGxpbmU6IG51bWJlcjtcblx0bGluZUNvdW50OiBudW1iZXI7XG5cdHNjcm9sbFByZXZpZXdXaXRoRWRpdG9yPzogYm9vbGVhbjtcblx0c2Nyb2xsRWRpdG9yV2l0aFByZXZpZXc6IGJvb2xlYW47XG5cdGRpc2FibGVTZWN1cml0eVdhcm5pbmdzOiBib29sZWFuO1xuXHRkb3VibGVDbGlja1RvU3dpdGNoVG9FZGl0b3I6IGJvb2xlYW47XG59XG5cbmxldCBjYWNoZWRTZXR0aW5nczogUHJldmlld1NldHRpbmdzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0YShrZXk6IHN0cmluZyk6IFByZXZpZXdTZXR0aW5ncyB7XG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndnNjb2RlLW1hcmtkb3duLXByZXZpZXctZGF0YScpO1xuXHRpZiAoZWxlbWVudCkge1xuXHRcdGNvbnN0IGRhdGEgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpO1xuXHRcdGlmIChkYXRhKSB7XG5cdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcblx0XHR9XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBsb2FkIGRhdGEgZm9yICR7a2V5fWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ3MoKTogUHJldmlld1NldHRpbmdzIHtcblx0aWYgKGNhY2hlZFNldHRpbmdzKSB7XG5cdFx0cmV0dXJuIGNhY2hlZFNldHRpbmdzO1xuXHR9XG5cblx0Y2FjaGVkU2V0dGluZ3MgPSBnZXREYXRhKCdkYXRhLXNldHRpbmdzJyk7XG5cdGlmIChjYWNoZWRTZXR0aW5ncykge1xuXHRcdHJldHVybiBjYWNoZWRTZXR0aW5ncztcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGxvYWQgc2V0dGluZ3MnKTtcbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
\ No newline at end of file
diff --git a/extensions/markdown-language-features/preview-src/scroll-sync.ts b/extensions/markdown-language-features/preview-src/scroll-sync.ts
index dacc14a86..3bd2939e0 100644
--- a/extensions/markdown-language-features/preview-src/scroll-sync.ts
+++ b/extensions/markdown-language-features/preview-src/scroll-sync.ts
@@ -24,13 +24,13 @@ const getCodeLineElements = (() => {
let elements: CodeLineElement[];
return () => {
if (!elements) {
- elements = Array.prototype.map.call(
+ elements = ([{ element: document.body, line: 0 }]).concat(Array.prototype.map.call(
document.getElementsByClassName('code-line'),
(element: any) => {
const line = +element.getAttribute('data-line');
return { element, line };
})
- .filter((x: any) => !isNaN(x.line));
+ .filter((x: any) => !isNaN(x.line)));
}
return elements;
};
@@ -49,8 +49,7 @@ export function getElementsForSourceLine(targetLine: number): { previous: CodeLi
for (const entry of lines) {
if (entry.line === lineNumber) {
return { previous: entry, next: undefined };
- }
- else if (entry.line > lineNumber) {
+ } else if (entry.line > lineNumber) {
return { previous, next: entry };
}
previous = entry;
@@ -89,22 +88,31 @@ export function getLineElementsAtPageOffset(offset: number): { previous: CodeLin
* Attempt to reveal the element for a source line in the editor.
*/
export function scrollToRevealSourceLine(line: number) {
+ if (!getSettings().scrollPreviewWithEditor) {
+ return;
+ }
+
+ if (line <= 0) {
+ window.scroll(window.scrollX, 0);
+ return;
+ }
+
const { previous, next } = getElementsForSourceLine(line);
- if (previous && getSettings().scrollPreviewWithEditor) {
- let scrollTo = 0;
- const rect = previous.element.getBoundingClientRect();
- const previousTop = rect.top;
- if (next && next.line !== previous.line) {
- // Between two elements. Go to percentage offset between them.
- const betweenProgress = (line - previous.line) / (next.line - previous.line);
- const elementOffset = next.element.getBoundingClientRect().top - previousTop;
- scrollTo = previousTop + betweenProgress * elementOffset;
- }
- else {
- scrollTo = previousTop;
- }
- window.scroll(0, Math.max(1, window.scrollY + scrollTo));
+ if (!previous) {
+ return;
+ }
+ let scrollTo = 0;
+ const rect = previous.element.getBoundingClientRect();
+ const previousTop = rect.top;
+ if (next && next.line !== previous.line) {
+ // Between two elements. Go to percentage offset between them.
+ const betweenProgress = (line - previous.line) / (next.line - previous.line);
+ const elementOffset = next.element.getBoundingClientRect().top - previousTop;
+ scrollTo = previousTop + betweenProgress * elementOffset;
+ } else {
+ scrollTo = previousTop;
}
+ window.scroll(window.scrollX, Math.max(1, window.scrollY + scrollTo));
}
export function getEditorLineNumberForPageOffset(offset: number) {
diff --git a/extensions/markdown-language-features/src/features/foldingProvider.ts b/extensions/markdown-language-features/src/features/foldingProvider.ts
index 2de47bd78..594baaadb 100644
--- a/extensions/markdown-language-features/src/features/foldingProvider.ts
+++ b/extensions/markdown-language-features/src/features/foldingProvider.ts
@@ -53,7 +53,7 @@ export default class MarkdownFoldingProvider implements vscode.FoldingRangeProvi
this.getRegions(document),
this.getHeaderFoldingRanges(document),
this.getBlockFoldingRanges(document)]);
- return [].concat.apply([], foldables).slice(0, rangeLimit);
+ return ([] as vscode.FoldingRange[]).concat.apply([], foldables).slice(0, rangeLimit);
}
private async getHeaderFoldingRanges(document: vscode.TextDocument) {
diff --git a/extensions/markdown-language-features/src/util/links.ts b/extensions/markdown-language-features/src/util/links.ts
index e1fc274d0..1afcbff83 100644
--- a/extensions/markdown-language-features/src/util/links.ts
+++ b/extensions/markdown-language-features/src/util/links.ts
@@ -5,7 +5,7 @@
import * as vscode from 'vscode';
-const knownSchemes = ['http:', 'https:', 'file:', 'mailto:'];
+const knownSchemes = ['http:', 'https:', 'file:', 'mailto:', 'data:', 'vscode-resource:'];
export function getUriForLinkWithKnownExternalScheme(
link: string,
diff --git a/extensions/merge-conflict/resources/icons/merge-conflict.png b/extensions/merge-conflict/resources/icons/merge-conflict.png
index ec6930bcf..3cf8d7b80 100644
Binary files a/extensions/merge-conflict/resources/icons/merge-conflict.png and b/extensions/merge-conflict/resources/icons/merge-conflict.png differ
diff --git a/extensions/npm/images/npm_icon.png b/extensions/npm/images/npm_icon.png
index f7f18b560..9fb9cf100 100644
Binary files a/extensions/npm/images/npm_icon.png and b/extensions/npm/images/npm_icon.png differ
diff --git a/extensions/npm/src/main.ts b/extensions/npm/src/main.ts
index bc40b996a..5903d6ebb 100644
--- a/extensions/npm/src/main.ts
+++ b/extensions/npm/src/main.ts
@@ -11,9 +11,11 @@ import { invalidateTasksCache, NpmTaskProvider } from './tasks';
import { invalidateHoverScriptsCache, NpmScriptHoverProvider } from './scriptHover';
import { runSelectedScript } from './commands';
+let treeDataProvider: NpmScriptsTreeDataProvider | undefined;
+
export async function activate(context: vscode.ExtensionContext): Promise {
registerTaskProvider(context);
- const treeDataProvider = registerExplorer(context);
+ treeDataProvider = registerExplorer(context);
registerHoverProvider(context);
configureHttpRequest();
@@ -46,6 +48,9 @@ function registerTaskProvider(context: vscode.ExtensionContext): vscode.Disposab
function invalidateScriptCaches() {
invalidateHoverScriptsCache();
invalidateTasksCache();
+ if (treeDataProvider) {
+ treeDataProvider.refresh();
+ }
}
if (vscode.workspace.workspaceFolders) {
diff --git a/extensions/npm/src/npmView.ts b/extensions/npm/src/npmView.ts
index 2a7fd2956..9bcd272a9 100644
--- a/extensions/npm/src/npmView.ts
+++ b/extensions/npm/src/npmView.ts
@@ -108,6 +108,13 @@ class NpmScript extends TreeItem {
dark: context.asAbsolutePath(path.join('resources', 'dark', 'script.svg'))
};
}
+
+ let uri = getPackageJsonUriFromTask(task);
+ getScripts(uri!).then(scripts => {
+ if (scripts && scripts[task.definition['script']]) {
+ this.tooltip = scripts[task.definition['script']];
+ }
+ });
}
getFolder(): WorkspaceFolder {
diff --git a/extensions/objective-c/.vscodeignore b/extensions/objective-c/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/objective-c/.vscodeignore
+++ b/extensions/objective-c/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/objective-c/OSSREADME.json b/extensions/objective-c/OSSREADME.json
deleted file mode 100644
index a67e4bcec..000000000
--- a/extensions/objective-c/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "atom/language-objective-c",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-objective-c",
- "description": "The files syntaxes/objective-c.tmLanguage.json and syntaxes/objective-c++.tmLanguage.json were derived from the Atom package https://github.com/atom/language-objective-c which was originally converted from the TextMate bundle https://github.com/textmate/objective-c.tmbundle."
-}]
diff --git a/extensions/objective-c/cgmanifest.json b/extensions/objective-c/cgmanifest.json
new file mode 100644
index 000000000..58d211c8f
--- /dev/null
+++ b/extensions/objective-c/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-objective-c",
+ "repositoryUrl": "https://github.com/atom/language-objective-c",
+ "commitHash": "0727e04544f3414c1c339cf15a39a05ea3938cb4"
+ }
+ },
+ "license": "MIT",
+ "description": "The files syntaxes/objective-c.tmLanguage.json and syntaxes/objective-c++.tmLanguage.json were derived from the Atom package https://github.com/atom/language-objective-c which was originally converted from the TextMate bundle https://github.com/textmate/objective-c.tmbundle.",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/package.json b/extensions/package.json
index 10a06e899..af0de2f61 100644
--- a/extensions/package.json
+++ b/extensions/package.json
@@ -3,7 +3,7 @@
"version": "0.0.1",
"description": "Dependencies shared by all extensions",
"dependencies": {
- "typescript": "3.1.3"
+ "typescript": "3.2.0-rc"
},
"scripts": {
"postinstall": "node ./postinstall"
diff --git a/extensions/perl/.vscodeignore b/extensions/perl/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/perl/.vscodeignore
+++ b/extensions/perl/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/perl/OSSREADME.json b/extensions/perl/OSSREADME.json
deleted file mode 100644
index f7bae4f23..000000000
--- a/extensions/perl/OSSREADME.json
+++ /dev/null
@@ -1,23 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "textmate/perl.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/perl.tmbundle",
- "description": "The files syntaxes/perl.tmLanguage.json and syntaxes/perl6.tmLanguage.json were derived from Perl.plist and Perl 6.tmLanguage from https://github.com/textmate/perl.tmbundle.",
- "licenseDetail": [
- "Copyright (c) textmate-perl.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this repository fall under the following license:",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information,",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/perl/cgmanifest.json b/extensions/perl/cgmanifest.json
new file mode 100644
index 000000000..6338921e7
--- /dev/null
+++ b/extensions/perl/cgmanifest.json
@@ -0,0 +1,33 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/perl.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/perl.tmbundle",
+ "commitHash": "80826abe75250286c2a1a07958e50e8551d3f50c"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-perl.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this repository fall under the following license:",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information,",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "description": "The files syntaxes/perl.tmLanguage.json and syntaxes/perl6.tmLanguage.json were derived from Perl.plist and Perl 6.tmLanguage from https://github.com/textmate/perl.tmbundle.",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/php-language-features/icons/logo.png b/extensions/php-language-features/icons/logo.png
index 80a219c56..332e417a8 100644
Binary files a/extensions/php-language-features/icons/logo.png and b/extensions/php-language-features/icons/logo.png differ
diff --git a/extensions/php/.vscode/tasks.json b/extensions/php/.vscode/tasks.json
index 9e5593ade..390a93a3a 100644
--- a/extensions/php/.vscode/tasks.json
+++ b/extensions/php/.vscode/tasks.json
@@ -1,30 +1,11 @@
-// Available variables which can be used inside of strings.
-// ${workspaceFolder}: the root folder of the team
-// ${file}: the current opened file
-// ${fileBasename}: the current opened file's basename
-// ${fileDirname}: the current opened file's dirname
-// ${fileExtname}: the current opened file's extension
-// ${cwd}: the current working directory of the spawned process
-
-// A task runner that calls a custom npm script that compiles the extension.
{
- "version": "0.1.0",
-
- // we want to run npm
+ "version": "2.0.0",
"command": "npm",
-
- // the command is a shell script
- "isShellCommand": true,
-
- // show the output window only if unrecognized errors occur.
- "showOutput": "silent",
-
- // we run the custom script "compile" as defined in package.json
+ "type": "shell",
+ "presentation": {
+ "reveal": "silent"
+ },
"args": ["run", "compile"],
-
- // The tsc compiler is started in watching mode
- "isWatching": true,
-
- // use the standard tsc in watch mode problem matcher to find compile problems in the output.
+ "isBackground": true,
"problemMatcher": "$tsc-watch"
-}
\ No newline at end of file
+}
diff --git a/extensions/php/.vscodeignore b/extensions/php/.vscodeignore
index a377c213f..98efc0327 100644
--- a/extensions/php/.vscodeignore
+++ b/extensions/php/.vscodeignore
@@ -3,4 +3,4 @@ build/**
out/test/**
src/**
tsconfig.json
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/php/OSSREADME.json b/extensions/php/OSSREADME.json
deleted file mode 100644
index 132d1967f..000000000
--- a/extensions/php/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "language-php",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-php",
- "description": "The files snippets/php.json & syntaxes/php.tmLanguage.json were derived from the Atom package https://atom.io/packages/language-php which was originally converted from the PHP TextMate bundle https://github.com/textmate/php.tmbundle."
-}]
diff --git a/extensions/php/cgmanifest.json b/extensions/php/cgmanifest.json
new file mode 100644
index 000000000..63002fc56
--- /dev/null
+++ b/extensions/php/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "language-php",
+ "repositoryUrl": "https://github.com/atom/language-php",
+ "commitHash": "b6c5e83016b52311cdc622c2579462861ee91587"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/php/syntaxes/html.tmLanguage.json b/extensions/php/syntaxes/html.tmLanguage.json
index 59db289a2..809b11205 100644
--- a/extensions/php/syntaxes/html.tmLanguage.json
+++ b/extensions/php/syntaxes/html.tmLanguage.json
@@ -4,10 +4,17 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/atom/language-php/commit/72bfa9592e689fdcb70562ff7d882ad5308e79f7",
+ "version": "https://github.com/atom/language-php/commit/b6c5e83016b52311cdc622c2579462861ee91587",
"name": "PHP",
"scopeName": "text.html.php",
"injections": {
+ "text.html.php - (meta.embedded | meta.tag), L:((text.html.php meta.tag) - (meta.embedded.block.php | meta.embedded.line.php)), L:(source.js.embedded.html - (meta.embedded.block.php | meta.embedded.line.php))": {
+ "patterns": [
+ {
+ "include": "#php-tag"
+ }
+ ]
+ },
"L:source.php string.quoted.single.sql.php source.sql.embedded.php": {
"patterns": [
{
@@ -108,13 +115,6 @@
"include": "source.php#interpolation_double_quoted"
}
]
- },
- "text.html.php - (meta.embedded | meta.tag), L:text.html.php meta.tag, L:text.html.php source.js": {
- "patterns": [
- {
- "include": "#php-tag"
- }
- ]
}
},
"patterns": [
diff --git a/extensions/php/test/colorize-results/issue-28354_php.json b/extensions/php/test/colorize-results/issue-28354_php.json
index 12e439430..329c9d6f9 100644
--- a/extensions/php/test/colorize-results/issue-28354_php.json
+++ b/extensions/php/test/colorize-results/issue-28354_php.json
@@ -66,19 +66,41 @@
}
},
{
- "c": "",
+ "t": "text.html.php meta.embedded.block.html source.js meta.objectliteral.js meta.object.member.js meta.object-literal.key.js",
"r": {
- "dark_plus": "meta.embedded: #D4D4D4",
- "light_plus": "meta.embedded: #000000",
+ "dark_plus": "meta.object-literal.key: #9CDCFE",
+ "light_plus": "meta.object-literal.key: #001080",
"dark_vs": "meta.embedded: #D4D4D4",
"light_vs": "meta.embedded: #000000",
- "hc_black": "meta.embedded: #FFFFFF"
+ "hc_black": "meta.object-literal.key: #9CDCFE"
}
},
{
- "c": " ",
- "t": "text.html.php meta.embedded.block.html source.js meta.embedded.block.php source.php",
+ "c": " ...",
+ "t": "text.html.php meta.embedded.block.html source.js meta.objectliteral.js meta.object.member.js meta.object-literal.key.js",
"r": {
- "dark_plus": "meta.embedded: #D4D4D4",
- "light_plus": "meta.embedded: #000000",
+ "dark_plus": "meta.object-literal.key: #9CDCFE",
+ "light_plus": "meta.object-literal.key: #001080",
"dark_vs": "meta.embedded: #D4D4D4",
"light_vs": "meta.embedded: #000000",
- "hc_black": "meta.embedded: #FFFFFF"
- }
- },
- {
- "c": "?",
- "t": "text.html.php meta.embedded.block.html source.js meta.embedded.block.php punctuation.section.embedded.end.php source.php",
- "r": {
- "dark_plus": "punctuation.section.embedded.end.php: #569CD6",
- "light_plus": "punctuation.section.embedded.end.php: #800000",
- "dark_vs": "punctuation.section.embedded.end.php: #569CD6",
- "light_vs": "punctuation.section.embedded.end.php: #800000",
- "hc_black": "punctuation.section.embedded: #569CD6"
+ "hc_black": "meta.object-literal.key: #9CDCFE"
}
},
{
- "c": ">",
- "t": "text.html.php meta.embedded.block.html source.js meta.embedded.block.php punctuation.section.embedded.end.php",
+ "c": "",
+ "t": "text.html.php meta.embedded.block.html source.js meta.objectliteral.js meta.object.member.js meta.object-literal.key.js",
"r": {
- "dark_plus": "punctuation.section.embedded.end.php: #569CD6",
- "light_plus": "punctuation.section.embedded.end.php: #800000",
- "dark_vs": "punctuation.section.embedded.end.php: #569CD6",
- "light_vs": "punctuation.section.embedded.end.php: #800000",
- "hc_black": "punctuation.section.embedded: #569CD6"
- }
- },
- {
- "c": " ",
- "t": "text.html.php meta.embedded.block.html source.js",
- "r": {
- "dark_plus": "meta.embedded: #D4D4D4",
- "light_plus": "meta.embedded: #000000",
+ "dark_plus": "meta.object-literal.key: #9CDCFE",
+ "light_plus": "meta.object-literal.key: #001080",
"dark_vs": "meta.embedded: #D4D4D4",
"light_vs": "meta.embedded: #000000",
- "hc_black": "meta.embedded: #FFFFFF"
- }
- },
- {
- "c": "...",
- "t": "text.html.php meta.embedded.block.html source.js keyword.operator.spread.js",
- "r": {
- "dark_plus": "keyword.operator: #D4D4D4",
- "light_plus": "keyword.operator: #000000",
- "dark_vs": "keyword.operator: #D4D4D4",
- "light_vs": "keyword.operator: #000000",
- "hc_black": "keyword.operator: #D4D4D4"
- }
- },
- {
- "c": "<",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html source.js",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "/",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.begin.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
- }
- },
- {
- "c": "script",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html entity.name.tag.html",
- "r": {
- "dark_plus": "entity.name.tag: #569CD6",
- "light_plus": "entity.name.tag: #800000",
- "dark_vs": "entity.name.tag: #569CD6",
- "light_vs": "entity.name.tag: #800000",
- "hc_black": "entity.name.tag: #569CD6"
- }
- },
- {
- "c": ">",
- "t": "text.html.php meta.embedded.block.html meta.tag.metadata.script.end.html punctuation.definition.tag.end.html",
- "r": {
- "dark_plus": "punctuation.definition.tag: #808080",
- "light_plus": "punctuation.definition.tag: #800000",
- "dark_vs": "punctuation.definition.tag: #808080",
- "light_vs": "punctuation.definition.tag: #800000",
- "hc_black": "punctuation.definition.tag: #808080"
+ "hc_black": "meta.object-literal.key: #9CDCFE"
}
}
]
\ No newline at end of file
diff --git a/extensions/powershell/.vscodeignore b/extensions/powershell/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/powershell/.vscodeignore
+++ b/extensions/powershell/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/powershell/OSSREADME.json b/extensions/powershell/OSSREADME.json
deleted file mode 100644
index b6eb8cf04..000000000
--- a/extensions/powershell/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "PowerShell/EditorSyntax",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/powershell/editorsyntax"
-}]
diff --git a/extensions/powershell/cgmanifest.json b/extensions/powershell/cgmanifest.json
new file mode 100644
index 000000000..9c01a619c
--- /dev/null
+++ b/extensions/powershell/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "PowerShell/EditorSyntax",
+ "repositoryUrl": "https://github.com/powershell/editorsyntax",
+ "commitHash": "12b7d7257eb493e45a9af0af9094ec0c2a996712"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/pug/.vscodeignore b/extensions/pug/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/pug/.vscodeignore
+++ b/extensions/pug/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/pug/OSSREADME.json b/extensions/pug/OSSREADME.json
deleted file mode 100644
index 37b45142c..000000000
--- a/extensions/pug/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "davidrios/pug-tmbundle",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/davidrios/pug-tmbundle",
- "description": "The file syntaxes/pug.tmLanguage.json was derived from Syntaxes/Pug.JSON-tmLanguage in https://github.com/davidrios/pug-tmbundle."
-}]
diff --git a/extensions/pug/cgmanifest.json b/extensions/pug/cgmanifest.json
new file mode 100644
index 000000000..cdfc2ded9
--- /dev/null
+++ b/extensions/pug/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "davidrios/pug-tmbundle",
+ "repositoryUrl": "https://github.com/davidrios/pug-tmbundle",
+ "commitHash": "e67e895f6fb64932aa122e471000fa55d826bff6"
+ }
+ },
+ "license": "MIT",
+ "description": "The file syntaxes/pug.tmLanguage.json was derived from Syntaxes/Pug.JSON-tmLanguage in https://github.com/davidrios/pug-tmbundle.",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/python/.vscodeignore b/extensions/python/.vscodeignore
index 67b755fdc..89fb2149d 100644
--- a/extensions/python/.vscodeignore
+++ b/extensions/python/.vscodeignore
@@ -1,4 +1,4 @@
test/**
src/**
tsconfig.json
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/python/OSSREADME.json b/extensions/python/OSSREADME.json
deleted file mode 100644
index cf4449588..000000000
--- a/extensions/python/OSSREADME.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
- {
- "name": "MagicStack/MagicPython",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/MagicStack/MagicPython"
- }
-]
\ No newline at end of file
diff --git a/extensions/python/cgmanifest.json b/extensions/python/cgmanifest.json
new file mode 100644
index 000000000..4f5dbadab
--- /dev/null
+++ b/extensions/python/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "MagicStack/MagicPython",
+ "repositoryUrl": "https://github.com/MagicStack/MagicPython",
+ "commitHash": "8ff35b3e5fcde471fae62a57ea1ae1c7cd34c9fc"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/r/.vscodeignore b/extensions/r/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/r/.vscodeignore
+++ b/extensions/r/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/r/OSSREADME.json b/extensions/r/OSSREADME.json
deleted file mode 100644
index bd7a0cab2..000000000
--- a/extensions/r/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "Ikuyadeu/vscode-R",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/Ikuyadeu/vscode-R"
-}]
diff --git a/extensions/r/cgmanifest.json b/extensions/r/cgmanifest.json
new file mode 100644
index 000000000..f520a2df9
--- /dev/null
+++ b/extensions/r/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Ikuyadeu/vscode-R",
+ "repositoryUrl": "https://github.com/Ikuyadeu/vscode-R",
+ "commitHash": "1cd3d42a6b2e54276ef2d71fe33bb3fefb1d6cff"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/razor/.vscodeignore b/extensions/razor/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/razor/.vscodeignore
+++ b/extensions/razor/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/razor/OSSREADME.json b/extensions/razor/OSSREADME.json
deleted file mode 100644
index 383a46dd4..000000000
--- a/extensions/razor/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "demyte/language-cshtml",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/demyte/language-cshtml"
-}]
diff --git a/extensions/razor/cgmanifest.json b/extensions/razor/cgmanifest.json
new file mode 100644
index 000000000..532a4c401
--- /dev/null
+++ b/extensions/razor/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "demyte/language-cshtml",
+ "repositoryUrl": "https://github.com/demyte/language-cshtml",
+ "commitHash": "e6e54d5a86a28cc1e44609a32aaa10a244cd3f81"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/ruby/.vscodeignore b/extensions/ruby/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/ruby/.vscodeignore
+++ b/extensions/ruby/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/ruby/OSSREADME.json b/extensions/ruby/OSSREADME.json
deleted file mode 100644
index b4af78a03..000000000
--- a/extensions/ruby/OSSREADME.json
+++ /dev/null
@@ -1,22 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[{
- "name": "textmate/ruby.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/ruby.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-ruby.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this folder fall under the following license: ",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information, ",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added ",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example ",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/ruby/cgmanifest.json b/extensions/ruby/cgmanifest.json
new file mode 100644
index 000000000..dd4b29e51
--- /dev/null
+++ b/extensions/ruby/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/ruby.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/ruby.tmbundle",
+ "commitHash": "74713556df10fbc7b1f9e99013ab1e34cd836f56"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-ruby.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this folder fall under the following license: ",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information, ",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added ",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example ",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/rust/.vscodeignore b/extensions/rust/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/rust/.vscodeignore
+++ b/extensions/rust/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/rust/OSSREADME.json b/extensions/rust/OSSREADME.json
deleted file mode 100644
index 3b68ecda9..000000000
--- a/extensions/rust/OSSREADME.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "language-rust",
- "version": "0.4.9",
- "license": "MIT",
- "repositoryURL": "https://github.com/zargony/atom-language-rust",
- "description": "The files syntaxes/rust.tmLanguage.json was derived from the Atom package https://atom.io/packages/language-rust."
-}]
diff --git a/extensions/rust/cgmanifest.json b/extensions/rust/cgmanifest.json
new file mode 100644
index 000000000..640d650cf
--- /dev/null
+++ b/extensions/rust/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "language-rust",
+ "repositoryUrl": "https://github.com/zargony/atom-language-rust",
+ "commitHash": "179f449a69182cae4fcdf644d59d842b7e445f89"
+ }
+ },
+ "license": "MIT",
+ "description": "The files syntaxes/rust.tmLanguage.json was derived from the Atom package https://atom.io/packages/language-rust.",
+ "version": "0.4.9"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/scss/.vscodeignore b/extensions/scss/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/scss/.vscodeignore
+++ b/extensions/scss/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/scss/OSSREADME.json b/extensions/scss/OSSREADME.json
deleted file mode 100644
index b2d456ed5..000000000
--- a/extensions/scss/OSSREADME.json
+++ /dev/null
@@ -1,10 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-[
- {
- "name": "atom/language-sass",
- "version": "0.52.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-sass",
- "description": "The file syntaxes/scss.json was derived from the Atom package https://github.com/atom/language-sass which was originally converted from the TextMate bundle https://github.com/alexsancho/SASS.tmbundle."
- }
-]
\ No newline at end of file
diff --git a/extensions/scss/cgmanifest.json b/extensions/scss/cgmanifest.json
new file mode 100644
index 000000000..05499284d
--- /dev/null
+++ b/extensions/scss/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-sass",
+ "repositoryUrl": "https://github.com/atom/language-sass",
+ "commitHash": "303bbf0c250fe380b9e57375598cfd916110758b"
+ }
+ },
+ "license": "MIT",
+ "description": "The file syntaxes/scss.json was derived from the Atom package https://github.com/atom/language-sass which was originally converted from the TextMate bundle https://github.com/alexsancho/SASS.tmbundle.",
+ "version": "0.52.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/shaderlab/.vscodeignore b/extensions/shaderlab/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/shaderlab/.vscodeignore
+++ b/extensions/shaderlab/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/shaderlab/OSSREADME.json b/extensions/shaderlab/OSSREADME.json
deleted file mode 100644
index 5acab3453..000000000
--- a/extensions/shaderlab/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "shaders-tmLanguage",
- "version": "0.1.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/tgjones/shaders-tmLanguage"
-}]
diff --git a/extensions/shaderlab/cgmanifest.json b/extensions/shaderlab/cgmanifest.json
new file mode 100644
index 000000000..3558286bc
--- /dev/null
+++ b/extensions/shaderlab/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "shaders-tmLanguage",
+ "repositoryUrl": "https://github.com/tgjones/shaders-tmLanguage",
+ "commitHash": "c72c8b39380ba5a86c58ceed053b5d965ebf38b3"
+ }
+ },
+ "license": "MIT",
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/shellscript/.vscodeignore b/extensions/shellscript/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/shellscript/.vscodeignore
+++ b/extensions/shellscript/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/shellscript/OSSREADME.json b/extensions/shellscript/OSSREADME.json
deleted file mode 100644
index 3776c2af3..000000000
--- a/extensions/shellscript/OSSREADME.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "atom/language-shellscript",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-shellscript",
- "description": "The file syntaxes/shell-unix-bash.tmLanguage.json was derived from the Atom package https://github.com/atom/language-shellscript which was originally converted from the TextMate bundle https://github.com/textmate/shellscript.tmbundle."
-}]
diff --git a/extensions/shellscript/cgmanifest.json b/extensions/shellscript/cgmanifest.json
new file mode 100644
index 000000000..0eee972fc
--- /dev/null
+++ b/extensions/shellscript/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-shellscript",
+ "repositoryUrl": "https://github.com/atom/language-shellscript",
+ "commitHash": "4c3711edbe8eac6f501976893976b1ac6a043d50"
+ }
+ },
+ "license": "MIT",
+ "description": "The file syntaxes/shell-unix-bash.tmLanguage.json was derived from the Atom package https://github.com/atom/language-shellscript which was originally converted from the TextMate bundle https://github.com/textmate/shellscript.tmbundle.",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/shellscript/package.json b/extensions/shellscript/package.json
index 446e98b07..b3c234638 100644
--- a/extensions/shellscript/package.json
+++ b/extensions/shellscript/package.json
@@ -11,10 +11,10 @@
"contributes": {
"languages": [{
"id": "shellscript",
- "aliases": ["Shell Script", "shellscript", "bash", "sh", "zsh"],
- "extensions": [".sh", ".bash", ".bashrc", ".bash_aliases", ".bash_profile", ".bash_login", ".ebuild", ".install", ".profile", ".bash_logout", ".zsh", ".zshrc", ".zprofile", ".zlogin", ".zlogout", ".zshenv", ".zsh-theme"],
+ "aliases": ["Shell Script", "shellscript", "bash", "sh", "zsh", "ksh"],
+ "extensions": [".sh", ".bash", ".bashrc", ".bash_aliases", ".bash_profile", ".bash_login", ".ebuild", ".install", ".profile", ".bash_logout", ".zsh", ".zshrc", ".zprofile", ".zlogin", ".zlogout", ".zshenv", ".zsh-theme", ".ksh"],
"filenames": ["PKGBUILD"],
- "firstLine": "^#!.*\\b(bash|zsh|sh|tcsh).*|^#\\s*-\\*-[^*]*mode:\\s*shell-script[^*]*-\\*-",
+ "firstLine": "^#!.*\\b(bash|zsh|sh|tcsh|ksh).*|^#\\s*-\\*-[^*]*mode:\\s*shell-script[^*]*-\\*-",
"configuration": "./language-configuration.json",
"mimetypes": ["text/x-shellscript"]
}],
diff --git a/extensions/sql/.vscodeignore b/extensions/sql/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/sql/.vscodeignore
+++ b/extensions/sql/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/sql/OSSREADME.json b/extensions/sql/OSSREADME.json
deleted file mode 100644
index 0fc48ab93..000000000
--- a/extensions/sql/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Microsoft/vscode-mssql",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/Microsoft/vscode-mssql"
-}]
diff --git a/extensions/sql/cgmanifest.json b/extensions/sql/cgmanifest.json
new file mode 100644
index 000000000..a40abdb6d
--- /dev/null
+++ b/extensions/sql/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Microsoft/vscode-mssql",
+ "repositoryUrl": "https://github.com/Microsoft/vscode-mssql",
+ "commitHash": "68d4b740b6a9e12592a32f1c0c8a0dd987f19da8"
+ }
+ },
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/swift/.vscodeignore b/extensions/swift/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/swift/.vscodeignore
+++ b/extensions/swift/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/swift/OSSREADME.json b/extensions/swift/OSSREADME.json
deleted file mode 100644
index 335e66618..000000000
--- a/extensions/swift/OSSREADME.json
+++ /dev/null
@@ -1,61 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "vscode-swift",
- "license": "MIT",
- "licenseDetail": [
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2015 David Owens II",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ],
- "version": "0.0.1",
- "repositoryURL": "https://github.com/owensd/vscode-swift",
- "description": "The files in this folder are based on https://github.com/owensd/vscode-swift."
-},
-{
- "name": "freebroccolo/atom-language-swift",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/freebroccolo/atom-language-swift",
- "licenseDetail": [
- "The MIT License (MIT)",
- "",
- "Copyright (c) 2014 Darin Morrison",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
-}
-
-]
diff --git a/extensions/swift/cgmanifest.json b/extensions/swift/cgmanifest.json
new file mode 100644
index 000000000..a3f7977cb
--- /dev/null
+++ b/extensions/swift/cgmanifest.json
@@ -0,0 +1,74 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "vscode-swift",
+ "repositoryUrl": "https://github.com/owensd/vscode-swift",
+ "commitHash": "cec27af6662e3799120b208e64483efdfe5521f5"
+ }
+ },
+ "licenseDetail": [
+ "The MIT License (MIT)",
+ "",
+ "Copyright (c) 2015 David Owens II",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining a copy",
+ "of this software and associated documentation files (the \"Software\"), to deal",
+ "in the Software without restriction, including without limitation the rights",
+ "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
+ "copies of the Software, and to permit persons to whom the Software is",
+ "furnished to do so, subject to the following conditions:",
+ "",
+ "The above copyright notice and this permission notice shall be included in all",
+ "copies or substantial portions of the Software.",
+ "",
+ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
+ "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
+ "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
+ "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
+ "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
+ "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+ ],
+ "license": "MIT",
+ "description": "The files in this folder are based on https://github.com/owensd/vscode-swift.",
+ "version": "0.0.1"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "freebroccolo/atom-language-swift",
+ "repositoryUrl": "https://github.com/freebroccolo/atom-language-swift",
+ "commitHash": "d8f4ed1f79cbb4d5d215e7a68fa8cc6b618e16e0"
+ }
+ },
+ "licenseDetail": [
+ "The MIT License (MIT)",
+ "",
+ "Copyright (c) 2014 Darin Morrison",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining a copy",
+ "of this software and associated documentation files (the \"Software\"), to deal",
+ "in the Software without restriction, including without limitation the rights",
+ "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
+ "copies of the Software, and to permit persons to whom the Software is",
+ "furnished to do so, subject to the following conditions:",
+ "",
+ "The above copyright notice and this permission notice shall be included in all",
+ "copies or substantial portions of the Software.",
+ "",
+ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
+ "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
+ "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
+ "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
+ "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
+ "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+ ],
+ "license": "MIT",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-abyss/.vscodeignore b/extensions/theme-abyss/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-abyss/.vscodeignore
+++ b/extensions/theme-abyss/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-abyss/OSSREADME.json b/extensions/theme-abyss/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-abyss/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-abyss/cgmanifest.json b/extensions/theme-abyss/cgmanifest.json
new file mode 100644
index 000000000..f3bd1db12
--- /dev/null
+++ b/extensions/theme-abyss/cgmanifest.json
@@ -0,0 +1,17 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "description": "The themes in this folders are copied from colorsublime.com. <<>>",
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-defaults/themes/light_defaults.json b/extensions/theme-defaults/themes/light_defaults.json
index dc53cbfb1..91c5fb1d9 100644
--- a/extensions/theme-defaults/themes/light_defaults.json
+++ b/extensions/theme-defaults/themes/light_defaults.json
@@ -7,7 +7,7 @@
"editor.inactiveSelectionBackground": "#E5EBF1",
"editorIndentGuide.background": "#D3D3D3",
"editorIndentGuide.activeBackground": "#939393",
- "editor.selectionHighlightBackground": "#ADD6FF4D",
+ "editor.selectionHighlightBackground": "#ADD6FF80",
"editorSuggestWidget.background": "#F3F3F3",
"activityBarBadge.background": "#007ACC",
"sideBarTitle.foreground": "#6F6F6F",
diff --git a/extensions/theme-kimbie-dark/.vscodeignore b/extensions/theme-kimbie-dark/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-kimbie-dark/.vscodeignore
+++ b/extensions/theme-kimbie-dark/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-kimbie-dark/OSSREADME.json b/extensions/theme-kimbie-dark/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-kimbie-dark/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-kimbie-dark/cgmanifest.json b/extensions/theme-kimbie-dark/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-kimbie-dark/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-monokai-dimmed/.vscodeignore b/extensions/theme-monokai-dimmed/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-monokai-dimmed/.vscodeignore
+++ b/extensions/theme-monokai-dimmed/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-monokai-dimmed/OSSREADME.json b/extensions/theme-monokai-dimmed/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-monokai-dimmed/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-monokai-dimmed/cgmanifest.json b/extensions/theme-monokai-dimmed/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-monokai-dimmed/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-monokai/.vscodeignore b/extensions/theme-monokai/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-monokai/.vscodeignore
+++ b/extensions/theme-monokai/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-monokai/OSSREADME.json b/extensions/theme-monokai/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-monokai/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-monokai/cgmanifest.json b/extensions/theme-monokai/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-monokai/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-quietlight/.vscodeignore b/extensions/theme-quietlight/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-quietlight/.vscodeignore
+++ b/extensions/theme-quietlight/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-quietlight/OSSREADME.json b/extensions/theme-quietlight/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-quietlight/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-quietlight/cgmanifest.json b/extensions/theme-quietlight/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-quietlight/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-red/.vscodeignore b/extensions/theme-red/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-red/.vscodeignore
+++ b/extensions/theme-red/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-red/OSSREADME.json b/extensions/theme-red/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-red/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-red/cgmanifest.json b/extensions/theme-red/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-red/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-seti/.vscodeignore b/extensions/theme-seti/.vscodeignore
index 02a2d5ede..d9011becf 100644
--- a/extensions/theme-seti/.vscodeignore
+++ b/extensions/theme-seti/.vscodeignore
@@ -1,2 +1,2 @@
build/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-seti/OSSREADME.json b/extensions/theme-seti/OSSREADME.json
deleted file mode 100644
index 7601d594b..000000000
--- a/extensions/theme-seti/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "seti-ui",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/jesseweed/seti-ui",
- "description": "The file ./icons/seti.woff has been copied from https://github.com/jesseweed/seti-ui/blob/master/styles/_fonts/seti/seti.woff"
-}]
diff --git a/extensions/theme-seti/build/update-icon-theme.js b/extensions/theme-seti/build/update-icon-theme.js
index 318ba18d0..c875a47c1 100644
--- a/extensions/theme-seti/build/update-icon-theme.js
+++ b/extensions/theme-seti/build/update-icon-theme.js
@@ -33,7 +33,7 @@ let nonBuiltInLanguages = { // { fileNames, extensions }
"stylus": { extensions: ['styl'] },
"vala": { extensions: ['vala'] },
"todo": { fileNames: ['todo'] }
-}
+};
function getCommitSha(repoId, repoPath) {
let commitInfo = 'https://api.github.com/repos/' + repoId + '/commits?path=' + repoPath;
diff --git a/extensions/theme-seti/cgmanifest.json b/extensions/theme-seti/cgmanifest.json
new file mode 100644
index 000000000..98fcf55e0
--- /dev/null
+++ b/extensions/theme-seti/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "seti-ui",
+ "repositoryUrl": "https://github.com/jesseweed/seti-ui",
+ "commitHash": "0b576faae405d3cd8df6ac1a397f287aa6d8b3fe"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-seti/icons/seti-circular-128x128.png b/extensions/theme-seti/icons/seti-circular-128x128.png
index 37c689939..fbe533bba 100644
Binary files a/extensions/theme-seti/icons/seti-circular-128x128.png and b/extensions/theme-seti/icons/seti-circular-128x128.png differ
diff --git a/extensions/theme-solarized-dark/.vscodeignore b/extensions/theme-solarized-dark/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-solarized-dark/.vscodeignore
+++ b/extensions/theme-solarized-dark/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-solarized-dark/OSSREADME.json b/extensions/theme-solarized-dark/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-solarized-dark/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-solarized-dark/cgmanifest.json b/extensions/theme-solarized-dark/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-solarized-dark/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-solarized-light/.vscodeignore b/extensions/theme-solarized-light/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-solarized-light/.vscodeignore
+++ b/extensions/theme-solarized-light/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-solarized-light/OSSREADME.json b/extensions/theme-solarized-light/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-solarized-light/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-solarized-light/cgmanifest.json b/extensions/theme-solarized-light/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-solarized-light/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/theme-tomorrow-night-blue/.vscodeignore b/extensions/theme-tomorrow-night-blue/.vscodeignore
index eb66319db..a0100f8d7 100644
--- a/extensions/theme-tomorrow-night-blue/.vscodeignore
+++ b/extensions/theme-tomorrow-night-blue/.vscodeignore
@@ -1 +1 @@
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/theme-tomorrow-night-blue/OSSREADME.json b/extensions/theme-tomorrow-night-blue/OSSREADME.json
deleted file mode 100644
index ddb630bfd..000000000
--- a/extensions/theme-tomorrow-night-blue/OSSREADME.json
+++ /dev/null
@@ -1,8 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "Colorsublime-Themes",
- "version": "0.1.0",
- "repositoryURL": "https://github.com/Colorsublime/Colorsublime-Themes",
- "description": "The themes in this folders are copied from colorsublime.com. <<>>"
-}]
diff --git a/extensions/theme-tomorrow-night-blue/cgmanifest.json b/extensions/theme-tomorrow-night-blue/cgmanifest.json
new file mode 100644
index 000000000..6c169cecb
--- /dev/null
+++ b/extensions/theme-tomorrow-night-blue/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Colorsublime-Themes",
+ "repositoryUrl": "https://github.com/Colorsublime/Colorsublime-Themes",
+ "commitHash": "d7401929c97c5fe78319b424f575ddce3f05da81"
+ }
+ },
+ "version": "0.1.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/typescript-basics/.vscodeignore b/extensions/typescript-basics/.vscodeignore
index d6f32d256..06c7b11c5 100644
--- a/extensions/typescript-basics/.vscodeignore
+++ b/extensions/typescript-basics/.vscodeignore
@@ -2,4 +2,4 @@ build/**
src/**
test/**
tsconfig.json
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/typescript-basics/OSSREADME.json b/extensions/typescript-basics/OSSREADME.json
deleted file mode 100644
index 160da003c..000000000
--- a/extensions/typescript-basics/OSSREADME.json
+++ /dev/null
@@ -1,7 +0,0 @@
-[{
- "name": "TypeScript-TmLanguage",
- "version": "0.1.8",
- "license": "MIT",
- "repositoryURL": "https://github.com/Microsoft/TypeScript-TmLanguage",
- "description": "The files syntaxes/TypeScript.tmLanguage.json and syntaxes/TypeScriptReact.tmLanguage.json were derived from TypeScript.tmLanguage and TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage."
-}]
diff --git a/extensions/typescript-basics/cgmanifest.json b/extensions/typescript-basics/cgmanifest.json
new file mode 100644
index 000000000..d6220176f
--- /dev/null
+++ b/extensions/typescript-basics/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "TypeScript-TmLanguage",
+ "repositoryUrl": "https://github.com/Microsoft/TypeScript-TmLanguage",
+ "commitHash": "3133e3d914db9a2bb8812119f9273727a305f16b"
+ }
+ },
+ "license": "MIT",
+ "description": "The files syntaxes/TypeScript.tmLanguage.json and syntaxes/TypeScriptReact.tmLanguage.json were derived from TypeScript.tmLanguage and TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage.",
+ "version": "0.1.8"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/typescript-basics/language-configuration.json b/extensions/typescript-basics/language-configuration.json
index b41053843..ee4e295af 100644
--- a/extensions/typescript-basics/language-configuration.json
+++ b/extensions/typescript-basics/language-configuration.json
@@ -23,7 +23,8 @@
["(", ")"],
["'", "'"],
["\"", "\""],
- ["`", "`"]
+ ["`", "`"],
+ ["<", ">"],
],
"autoCloseBefore": ";:.,=}])>` \n\t",
"folding": {
diff --git a/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json b/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json
index 428fbe65f..70f6d36f8 100644
--- a/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json
+++ b/extensions/typescript-basics/syntaxes/TypeScript.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/a34cb117a38ac6f6eae0df88db984780c6b3df1e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/3133e3d914db9a2bb8812119f9273727a305f16b",
"name": "TypeScript",
"scopeName": "source.ts",
"patterns": [
@@ -1150,7 +1150,7 @@
"name": "meta.definition.function.ts entity.name.function.ts"
}
},
- "end": "(?=$|^|;)|(?<=\\})",
+ "end": "(?=;|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|(?<=\\})",
"patterns": [
{
"include": "#function-name"
@@ -1410,6 +1410,9 @@
},
{
"include": "#arrow-return-type"
+ },
+ {
+ "include": "#possibly-arrow-return-type"
}
]
},
@@ -1421,8 +1424,11 @@
"name": "storage.type.function.arrow.ts"
}
},
- "end": "(?<=\\}|\\S)(?)|((?!\\{)(?=\\S))",
+ "end": "((?<=\\}|\\S)(?)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])",
"patterns": [
+ {
+ "include": "#single-line-comment-consuming-line-ending"
+ },
{
"include": "#decl-block"
},
@@ -2620,13 +2626,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.ts",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -3539,7 +3545,7 @@
]
},
"possibly-arrow-return-type": {
- "begin": "(?<=\\))\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
+ "begin": "(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
"beginCaptures": {
"1": {
"name": "meta.arrow.ts meta.return.type.arrow.ts keyword.operator.type.annotation.ts"
@@ -3621,6 +3627,14 @@
}
},
"patterns": [
+ {
+ "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|((<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<]|\\<\\s*([_$[:alpha:]]|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\]))([^=<>]|=[^<])*\\>)*>\\s*)?[\\(]\\s*([\\{\\[]\\s*)?$))))",
"captures": {
@@ -3971,7 +3982,7 @@
"include": "#typeof-operator"
},
{
- "begin": "([&|\\*])(?=\\s*\\{)",
+ "begin": "([&|])(?=\\s*\\{)",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.ts"
@@ -3985,7 +3996,7 @@
]
},
{
- "begin": "[&|\\*]",
+ "begin": "[&|]",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.ts"
@@ -4123,7 +4134,7 @@
"patterns": [
{
"name": "string.template.ts",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.ts"
diff --git a/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json b/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json
index a12c5b2eb..6d39e0862 100644
--- a/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json
+++ b/extensions/typescript-basics/syntaxes/TypeScriptReact.tmLanguage.json
@@ -4,7 +4,7 @@
"If you want to provide a fix or improvement, please create a pull request against the original repository.",
"Once accepted there, we are happy to receive an update request."
],
- "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/a34cb117a38ac6f6eae0df88db984780c6b3df1e",
+ "version": "https://github.com/Microsoft/TypeScript-TmLanguage/commit/3133e3d914db9a2bb8812119f9273727a305f16b",
"name": "TypeScriptReact",
"scopeName": "source.tsx",
"patterns": [
@@ -1153,7 +1153,7 @@
"name": "meta.definition.function.tsx entity.name.function.tsx"
}
},
- "end": "(?=$|^|;)|(?<=\\})",
+ "end": "(?=;|(?:^\\s*(?:abstract|async|class|const|declare|enum|export|function|import|interface|let|module|namespace|return|type|var)\\b))|(?<=\\})",
"patterns": [
{
"include": "#function-name"
@@ -1413,6 +1413,9 @@
},
{
"include": "#arrow-return-type"
+ },
+ {
+ "include": "#possibly-arrow-return-type"
}
]
},
@@ -1424,8 +1427,11 @@
"name": "storage.type.function.arrow.tsx"
}
},
- "end": "(?<=\\}|\\S)(?)|((?!\\{)(?=\\S))",
+ "end": "((?<=\\}|\\S)(?)|((?!\\{)(?=\\S)))(?!\\/[\\/\\*])",
"patterns": [
+ {
+ "include": "#single-line-comment-consuming-line-ending"
+ },
{
"include": "#decl-block"
},
@@ -2623,13 +2629,13 @@
]
},
"function-call": {
- "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
- "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?<=\\))(?!(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*)\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"name": "meta.function-call.tsx",
"begin": "(?=(([_$[:alpha:]][_$[:alnum:]]*\\s*\\??\\.\\s*)*|(\\??\\.\\s*)?)([_$[:alpha:]][_$[:alnum:]]*))",
- "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
+ "end": "(?=\\s*(\\?\\.\\s*)?(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)?\\()",
"patterns": [
{
"include": "#literal"
@@ -3505,7 +3511,7 @@
]
},
"possibly-arrow-return-type": {
- "begin": "(?<=\\))\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
+ "begin": "(?<=\\)|^)\\s*(:)(?=\\s*([^<>\\(\\)\\{\\}]|\\<[^<>]+\\>|\\([^\\(\\)]+\\)|\\{[^\\{\\}]+\\})+\\s*=>)",
"beginCaptures": {
"1": {
"name": "meta.arrow.tsx meta.return.type.arrow.tsx keyword.operator.type.annotation.tsx"
@@ -3587,6 +3593,14 @@
}
},
"patterns": [
+ {
+ "match": "(?)\n ))\n ))\n)) |\n(:\\s*((<\\s*$)|([\\(]\\s*([\\{\\[]\\s*)?$))))",
"captures": {
@@ -3937,7 +3948,7 @@
"include": "#typeof-operator"
},
{
- "begin": "([&|\\*])(?=\\s*\\{)",
+ "begin": "([&|])(?=\\s*\\{)",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.tsx"
@@ -3951,7 +3962,7 @@
]
},
{
- "begin": "[&|\\*]",
+ "begin": "[&|]",
"beginCaptures": {
"0": {
"name": "keyword.operator.type.tsx"
@@ -4089,7 +4100,7 @@
"patterns": [
{
"name": "string.template.tsx",
- "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(\\*(?=\\s*[,>]))|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
+ "begin": "([_$[:alpha:]][_$[:alnum:]]*)\\s*(?=(<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>|\\<\\s*(((keyof|infer)\\s+)|(([_$[:alpha:]][_$[:alnum:]]*|(\\{([^\\{\\}]|(\\{[^\\{\\}]*\\}))*\\})|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(\\[([^\\[\\]]|(\\[[^\\[\\]]*\\]))*\\])|(\\'[^\\']*\\')|(\\\"[^\\\"]*\\\")|(\\`[^\\`]*\\`))(?=\\s*([\\<\\>\\,\\.\\[]|=>|&(?!&)|\\|(?!\\|)))))([^<>\\(]|(\\(([^\\(\\)]|(\\([^\\(\\)]*\\)))*\\))|(?<==)\\>)*(?!=)\\>)*(?!=)>\\s*)`)",
"beginCaptures": {
"1": {
"name": "entity.name.function.tagged-template.tsx"
diff --git a/extensions/typescript-language-features/.vscodeignore b/extensions/typescript-language-features/.vscodeignore
index 7b229b61f..1edbc2a7b 100644
--- a/extensions/typescript-language-features/.vscodeignore
+++ b/extensions/typescript-language-features/.vscodeignore
@@ -4,5 +4,5 @@ test/**
out/**
tsconfig.json
extension.webpack.config.js
-OSSREADME.json
-yarn.lock
\ No newline at end of file
+cgmanifest.json
+yarn.lock
diff --git a/extensions/typescript-language-features/OSSREADME.json b/extensions/typescript-language-features/OSSREADME.json
deleted file mode 100644
index 692c0592a..000000000
--- a/extensions/typescript-language-features/OSSREADME.json
+++ /dev/null
@@ -1,106 +0,0 @@
-[
- {
- "name": "TypeScript-TmLanguage",
- "version": "0.1.8",
- "license": "MIT",
- "repositoryURL": "https://github.com/Microsoft/TypeScript-TmLanguage",
- "description": "The files syntaxes/TypeScript.tmLanguage.json and syntaxes/TypeScriptReact.tmLanguage.json were derived from TypeScript.tmLanguage and TypeScriptReact.tmLanguage in https://github.com/Microsoft/TypeScript-TmLanguage."
- },
- {
- "name": "definitelytyped",
- "license": "MIT",
- "repositoryURL": "https://github.com/DefinitelyTyped/DefinitelyTyped",
- "description": "Typings files that are downloaded by TypeScript. These typings power IntelliSense for JavaScript and TypeScript."
- },
- {
- "name": "Unicode",
- "license": "UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE",
- "description": "These files are included by TypeScript.Ø",
- "licenseDetail": [
- "Unicode Data Files include all data files under the directories",
- "http://www.unicode.org/Public/, http://www.unicode.org/reports/,",
- "http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and",
- "http://www.unicode.org/utility/trac/browser/.",
- "",
- "Unicode Data Files do not include PDF online code charts under the",
- "directory http://www.unicode.org/Public/.",
- "",
- "Software includes any source code published in the Unicode Standard",
- "or under the directories",
- "http://www.unicode.org/Public/, http://www.unicode.org/reports/,",
- "http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and",
- "http://www.unicode.org/utility/trac/browser/.",
- "",
- "NOTICE TO USER: Carefully read the following legal agreement.",
- "BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S",
- "DATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),",
- "YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE",
- "TERMS AND CONDITIONS OF THIS AGREEMENT.",
- "IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE",
- "THE DATA FILES OR SOFTWARE.",
- "",
- "COPYRIGHT AND PERMISSION NOTICE",
- "",
- "Copyright (c) 1991-2017 Unicode, Inc. All rights reserved.",
- "Distributed under the Terms of Use in http://www.unicode.org/copyright.html.",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining",
- "a copy of the Unicode data files and any associated documentation",
- "(the \"Data Files\") or Unicode software and any associated documentation",
- "(the \"Software\") to deal in the Data Files or Software",
- "without restriction, including without limitation the rights to use,",
- "copy, modify, merge, publish, distribute, and/or sell copies of",
- "the Data Files or Software, and to permit persons to whom the Data Files",
- "or Software are furnished to do so, provided that either",
- "(a) this copyright and permission notice appear with all copies",
- "of the Data Files or Software, or",
- "(b) this copyright and permission notice appear in associated",
- "Documentation.",
- "",
- "THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
- "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE",
- "WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND",
- "NONINFRINGEMENT OF THIRD PARTY RIGHTS.",
- "IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS",
- "NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL",
- "DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,",
- "DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER",
- "TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR",
- "PERFORMANCE OF THE DATA FILES OR SOFTWARE.",
- "",
- "Except as contained in this notice, the name of a copyright holder",
- "shall not be used in advertising or otherwise to promote the sale,",
- "use or other dealings in these Data Files or Software without prior",
- "written authorization of the copyright holder."
- ]
- },
- {
- "name": "Document Object Model",
- "license": "W3C License",
- "description": "These files",
- "licenseDetail": [
- "W3C License",
- "This work is being provided by the copyright holders under the following license.",
- "By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.",
- "Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following ",
- "on ALL copies of the work or portions thereof, including modifications:",
- "* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.",
- "* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.",
- "* Notice of any changes or modifications, through a copyright statement on the new code or document such as \"This software or document includes material copied from or derived ",
- "from Document Object Model. Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang).\" ",
- "Disclaimers",
- "THIS WORK IS PROVIDED \"AS IS",
- " AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR ",
- "FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.",
- "COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.",
- "The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. ",
- "Title to copyright in this work will at all times remain with copyright holders."
- ]
- },
- {
- "name": "Web Background Synchronization",
- "license": "Apache2",
- "repositoryURL": "https://github.com/WICG/BackgroundSync",
- "description": "TypeScript includes files related to this specification"
- }
-]
\ No newline at end of file
diff --git a/extensions/typescript-language-features/cgmanifest.json b/extensions/typescript-language-features/cgmanifest.json
new file mode 100644
index 000000000..b0a573534
--- /dev/null
+++ b/extensions/typescript-language-features/cgmanifest.json
@@ -0,0 +1,134 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "TypeScript-TmLanguage",
+ "repositoryUrl": "https://github.com/Microsoft/TypeScript-TmLanguage",
+ "commitHash": "3133e3d914db9a2bb8812119f9273727a305f16b"
+ }
+ },
+ "license": "MIT",
+ "version": "0.1.8"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "definitelytyped",
+ "repositoryUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped",
+ "commitHash": "69e3ac6bec3008271f76bbfa7cf69aa9198c4ff0"
+ }
+ },
+ "license": "MIT"
+ },
+ {
+ "component": {
+ "type": "other",
+ "other": {
+ "name": "Unicode",
+ "downloadUrl": "http://www.unicode.org/"
+ }
+ },
+ "licenseDetail": [
+ "Unicode Data Files include all data files under the directories",
+ "http://www.unicode.org/Public/, http://www.unicode.org/reports/,",
+ "http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and",
+ "http://www.unicode.org/utility/trac/browser/.",
+ "",
+ "Unicode Data Files do not include PDF online code charts under the",
+ "directory http://www.unicode.org/Public/.",
+ "",
+ "Software includes any source code published in the Unicode Standard",
+ "or under the directories",
+ "http://www.unicode.org/Public/, http://www.unicode.org/reports/,",
+ "http://www.unicode.org/cldr/data/, http://source.icu-project.org/repos/icu/, and",
+ "http://www.unicode.org/utility/trac/browser/.",
+ "",
+ "NOTICE TO USER: Carefully read the following legal agreement.",
+ "BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING UNICODE INC.'S",
+ "DATA FILES (\"DATA FILES\"), AND/OR SOFTWARE (\"SOFTWARE\"),",
+ "YOU UNEQUIVOCALLY ACCEPT, AND AGREE TO BE BOUND BY, ALL OF THE",
+ "TERMS AND CONDITIONS OF THIS AGREEMENT.",
+ "IF YOU DO NOT AGREE, DO NOT DOWNLOAD, INSTALL, COPY, DISTRIBUTE OR USE",
+ "THE DATA FILES OR SOFTWARE.",
+ "",
+ "COPYRIGHT AND PERMISSION NOTICE",
+ "",
+ "Copyright (c) 1991-2017 Unicode, Inc. All rights reserved.",
+ "Distributed under the Terms of Use in http://www.unicode.org/copyright.html.",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining",
+ "a copy of the Unicode data files and any associated documentation",
+ "(the \"Data Files\") or Unicode software and any associated documentation",
+ "(the \"Software\") to deal in the Data Files or Software",
+ "without restriction, including without limitation the rights to use,",
+ "copy, modify, merge, publish, distribute, and/or sell copies of",
+ "the Data Files or Software, and to permit persons to whom the Data Files",
+ "or Software are furnished to do so, provided that either",
+ "(a) this copyright and permission notice appear with all copies",
+ "of the Data Files or Software, or",
+ "(b) this copyright and permission notice appear in associated",
+ "Documentation.",
+ "",
+ "THE DATA FILES AND SOFTWARE ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF",
+ "ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE",
+ "WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND",
+ "NONINFRINGEMENT OF THIRD PARTY RIGHTS.",
+ "IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS",
+ "NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL",
+ "DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,",
+ "DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER",
+ "TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR",
+ "PERFORMANCE OF THE DATA FILES OR SOFTWARE.",
+ "",
+ "Except as contained in this notice, the name of a copyright holder",
+ "shall not be used in advertising or otherwise to promote the sale,",
+ "use or other dealings in these Data Files or Software without prior",
+ "written authorization of the copyright holder."
+ ],
+ "license": "UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE"
+ },
+ {
+ "component": {
+ "type": "other",
+ "other": {
+ "name": "Document Object Model",
+ "downloadUrl": "https://www.w3.org/DOM/"
+ }
+ },
+ "licenseDetail": [
+ "W3C License",
+ "This work is being provided by the copyright holders under the following license.",
+ "By obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.",
+ "Permission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following ",
+ "on ALL copies of the work or portions thereof, including modifications:",
+ "* The full text of this NOTICE in a location viewable to users of the redistributed or derivative work.",
+ "* Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.",
+ "* Notice of any changes or modifications, through a copyright statement on the new code or document such as \"This software or document includes material copied from or derived ",
+ "from Document Object Model. Copyright © 2015 W3C® (MIT, ERCIM, Keio, Beihang).\" ",
+ "Disclaimers",
+ "THIS WORK IS PROVIDED \"AS IS",
+ " AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR ",
+ "FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.",
+ "COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.",
+ "The name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. ",
+ "Title to copyright in this work will at all times remain with copyright holders."
+ ],
+ "license": "W3C License"
+ },
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "Web Background Synchronization",
+ "repositoryUrl": "https://github.com/WICG/BackgroundSync",
+ "commitHash": "10778afe95b5d46c99f7a77565328b7108091510"
+ }
+ },
+ "license": "Apache2"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/typescript-language-features/icon.png b/extensions/typescript-language-features/icon.png
index c2e186fdc..b57f88660 100644
Binary files a/extensions/typescript-language-features/icon.png and b/extensions/typescript-language-features/icon.png differ
diff --git a/extensions/typescript-language-features/package.json b/extensions/typescript-language-features/package.json
index 048c8d669..92160253e 100644
--- a/extensions/typescript-language-features/package.json
+++ b/extensions/typescript-language-features/package.json
@@ -42,6 +42,7 @@
"onCommand:typescript.goToProjectConfig",
"onCommand:typescript.openTsServerLog",
"onCommand:workbench.action.tasks.runTask",
+ "onCommand:_typescript.configurePlugin",
"onLanguage:jsonc"
],
"main": "./out/extension",
diff --git a/extensions/typescript-language-features/src/api.ts b/extensions/typescript-language-features/src/api.ts
new file mode 100644
index 000000000..6afc92166
--- /dev/null
+++ b/extensions/typescript-language-features/src/api.ts
@@ -0,0 +1,36 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as vscode from 'vscode';
+import { PluginManager } from './utils/plugins';
+
+class ApiV0 {
+ public constructor(
+ public readonly onCompletionAccepted: vscode.Event,
+ private readonly _pluginManager: PluginManager,
+ ) { }
+
+ configurePlugin(pluginId: string, configuration: {}): void {
+ this._pluginManager.setConfiguration(pluginId, configuration);
+ }
+}
+
+export interface Api {
+ getAPI(version: 0): ApiV0 | undefined;
+}
+
+export function getExtensionApi(
+ onCompletionAccepted: vscode.Event,
+ pluginManager: PluginManager,
+): Api {
+ return {
+ getAPI(version) {
+ if (version === 0) {
+ return new ApiV0(onCompletionAccepted, pluginManager);
+ }
+ return undefined;
+ }
+ };
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/commands/configurePlugin.ts b/extensions/typescript-language-features/src/commands/configurePlugin.ts
new file mode 100644
index 000000000..8af85d8b9
--- /dev/null
+++ b/extensions/typescript-language-features/src/commands/configurePlugin.ts
@@ -0,0 +1,19 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import { Command } from '../utils/commandManager';
+import { PluginManager } from '../utils/plugins';
+
+export class ConfigurePluginCommand implements Command {
+ public readonly id = '_typescript.configurePlugin';
+
+ public constructor(
+ private readonly pluginManager: PluginManager,
+ ) { }
+
+ public execute(pluginId: string, configuration: any) {
+ this.pluginManager.setConfiguration(pluginId, configuration);
+ }
+}
diff --git a/extensions/typescript-language-features/src/commands.ts b/extensions/typescript-language-features/src/commands/goToProjectConfiguration.ts
similarity index 67%
rename from extensions/typescript-language-features/src/commands.ts
rename to extensions/typescript-language-features/src/commands/goToProjectConfiguration.ts
index 2c40c512e..61729eafa 100644
--- a/extensions/typescript-language-features/src/commands.ts
+++ b/extensions/typescript-language-features/src/commands/goToProjectConfiguration.ts
@@ -5,76 +5,14 @@
import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
-import TypeScriptServiceClientHost from './typeScriptServiceClientHost';
-import { Command } from './utils/commandManager';
-import { Lazy } from './utils/lazy';
-import { isImplicitProjectConfigFile, openOrCreateConfigFile } from './utils/tsconfig';
-import { nulToken } from './utils/cancellation';
-
+import TypeScriptServiceClientHost from '../typeScriptServiceClientHost';
+import { nulToken } from '../utils/cancellation';
+import { Command } from '../utils/commandManager';
+import { Lazy } from '../utils/lazy';
+import { isImplicitProjectConfigFile, openOrCreateConfigFile } from '../utils/tsconfig';
const localize = nls.loadMessageBundle();
-
-export class ReloadTypeScriptProjectsCommand implements Command {
- public readonly id = 'typescript.reloadProjects';
-
- public constructor(
- private readonly lazyClientHost: Lazy
- ) { }
-
- public execute() {
- this.lazyClientHost.value.reloadProjects();
- }
-}
-
-export class ReloadJavaScriptProjectsCommand implements Command {
- public readonly id = 'javascript.reloadProjects';
-
- public constructor(
- private readonly lazyClientHost: Lazy
- ) { }
-
- public execute() {
- this.lazyClientHost.value.reloadProjects();
- }
-}
-
-export class SelectTypeScriptVersionCommand implements Command {
- public readonly id = 'typescript.selectTypeScriptVersion';
-
- public constructor(
- private readonly lazyClientHost: Lazy
- ) { }
-
- public execute() {
- this.lazyClientHost.value.serviceClient.onVersionStatusClicked();
- }
-}
-
-export class OpenTsServerLogCommand implements Command {
- public readonly id = 'typescript.openTsServerLog';
-
- public constructor(
- private readonly lazyClientHost: Lazy
- ) { }
-
- public execute() {
- this.lazyClientHost.value.serviceClient.openTsServerLogFile();
- }
-}
-
-export class RestartTsServerCommand implements Command {
- public readonly id = 'typescript.restartTsServer';
-
- public constructor(
- private readonly lazyClientHost: Lazy
- ) { }
-
- public execute() {
- this.lazyClientHost.value.serviceClient.restartTsServer();
- }
-}
-
export class TypeScriptGoToProjectConfigCommand implements Command {
public readonly id = 'typescript.goToProjectConfig';
@@ -130,7 +68,7 @@ async function goToProjectConfig(
return;
}
- let res: protocol.ProjectInfoResponse | undefined = undefined;
+ let res: protocol.ProjectInfoResponse | undefined;
try {
res = await client.execute('projectInfo', { file, needFileNameList: false }, nulToken);
} catch {
@@ -151,7 +89,7 @@ async function goToProjectConfig(
enum ProjectConfigAction {
None,
CreateConfig,
- LearnMore
+ LearnMore,
}
interface ProjectConfigMessageItem extends vscode.MessageItem {
@@ -166,7 +104,7 @@ async function goToProjectConfig(
title: isTypeScriptProject
? localize('typescript.configureTsconfigQuickPick', 'Configure tsconfig.json')
: localize('typescript.configureJsconfigQuickPick', 'Configure jsconfig.json'),
- id: ProjectConfigAction.CreateConfig
+ id: ProjectConfigAction.CreateConfig,
});
switch (selected && selected.id) {
diff --git a/extensions/typescript-language-features/src/commands/index.ts b/extensions/typescript-language-features/src/commands/index.ts
new file mode 100644
index 000000000..f22b3e448
--- /dev/null
+++ b/extensions/typescript-language-features/src/commands/index.ts
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import TypeScriptServiceClientHost from '../typeScriptServiceClientHost';
+import { CommandManager } from '../utils/commandManager';
+import { Lazy } from '../utils/lazy';
+import { PluginManager } from '../utils/plugins';
+import { ConfigurePluginCommand } from './configurePlugin';
+import { JavaScriptGoToProjectConfigCommand, TypeScriptGoToProjectConfigCommand } from './goToProjectConfiguration';
+import { OpenTsServerLogCommand } from './openTsServerLog';
+import { ReloadJavaScriptProjectsCommand, ReloadTypeScriptProjectsCommand } from './reloadProject';
+import { RestartTsServerCommand } from './restartTsServer';
+import { SelectTypeScriptVersionCommand } from './selectTypeScriptVersion';
+
+export function registerCommands(
+ commandManager: CommandManager,
+ lazyClientHost: Lazy,
+ pluginManager: PluginManager
+) {
+ commandManager.register(new ReloadTypeScriptProjectsCommand(lazyClientHost));
+ commandManager.register(new ReloadJavaScriptProjectsCommand(lazyClientHost));
+ commandManager.register(new SelectTypeScriptVersionCommand(lazyClientHost));
+ commandManager.register(new OpenTsServerLogCommand(lazyClientHost));
+ commandManager.register(new RestartTsServerCommand(lazyClientHost));
+ commandManager.register(new TypeScriptGoToProjectConfigCommand(lazyClientHost));
+ commandManager.register(new JavaScriptGoToProjectConfigCommand(lazyClientHost));
+ commandManager.register(new ConfigurePluginCommand(pluginManager));
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/commands/openTsServerLog.ts b/extensions/typescript-language-features/src/commands/openTsServerLog.ts
new file mode 100644
index 000000000..be47a985c
--- /dev/null
+++ b/extensions/typescript-language-features/src/commands/openTsServerLog.ts
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import TypeScriptServiceClientHost from '../typeScriptServiceClientHost';
+import { Command } from '../utils/commandManager';
+import { Lazy } from '../utils/lazy';
+
+export class OpenTsServerLogCommand implements Command {
+ public readonly id = 'typescript.openTsServerLog';
+
+ public constructor(
+ private readonly lazyClientHost: Lazy
+ ) { }
+
+ public execute() {
+ this.lazyClientHost.value.serviceClient.openTsServerLogFile();
+ }
+}
diff --git a/extensions/typescript-language-features/src/commands/reloadProject.ts b/extensions/typescript-language-features/src/commands/reloadProject.ts
new file mode 100644
index 000000000..fbba68eb9
--- /dev/null
+++ b/extensions/typescript-language-features/src/commands/reloadProject.ts
@@ -0,0 +1,32 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import TypeScriptServiceClientHost from '../typeScriptServiceClientHost';
+import { Command } from '../utils/commandManager';
+import { Lazy } from '../utils/lazy';
+
+export class ReloadTypeScriptProjectsCommand implements Command {
+ public readonly id = 'typescript.reloadProjects';
+
+ public constructor(
+ private readonly lazyClientHost: Lazy
+ ) { }
+
+ public execute() {
+ this.lazyClientHost.value.reloadProjects();
+ }
+}
+
+export class ReloadJavaScriptProjectsCommand implements Command {
+ public readonly id = 'javascript.reloadProjects';
+
+ public constructor(
+ private readonly lazyClientHost: Lazy
+ ) { }
+
+ public execute() {
+ this.lazyClientHost.value.reloadProjects();
+ }
+}
diff --git a/extensions/typescript-language-features/src/commands/restartTsServer.ts b/extensions/typescript-language-features/src/commands/restartTsServer.ts
new file mode 100644
index 000000000..a357224d3
--- /dev/null
+++ b/extensions/typescript-language-features/src/commands/restartTsServer.ts
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import TypeScriptServiceClientHost from '../typeScriptServiceClientHost';
+import { Command } from '../utils/commandManager';
+import { Lazy } from '../utils/lazy';
+
+export class RestartTsServerCommand implements Command {
+ public readonly id = 'typescript.restartTsServer';
+
+ public constructor(
+ private readonly lazyClientHost: Lazy
+ ) { }
+
+ public execute() {
+ this.lazyClientHost.value.serviceClient.restartTsServer();
+ }
+}
diff --git a/extensions/typescript-language-features/src/commands/selectTypeScriptVersion.ts b/extensions/typescript-language-features/src/commands/selectTypeScriptVersion.ts
new file mode 100644
index 000000000..dc771df8b
--- /dev/null
+++ b/extensions/typescript-language-features/src/commands/selectTypeScriptVersion.ts
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import TypeScriptServiceClientHost from '../typeScriptServiceClientHost';
+import { Command } from '../utils/commandManager';
+import { Lazy } from '../utils/lazy';
+
+export class SelectTypeScriptVersionCommand implements Command {
+ public readonly id = 'typescript.selectTypeScriptVersion';
+
+ public constructor(
+ private readonly lazyClientHost: Lazy
+ ) { }
+
+ public execute() {
+ this.lazyClientHost.value.serviceClient.onVersionStatusClicked();
+ }
+}
diff --git a/extensions/typescript-language-features/src/extension.ts b/extensions/typescript-language-features/src/extension.ts
index 48415ef1f..782aa9810 100644
--- a/extensions/typescript-language-features/src/extension.ts
+++ b/extensions/typescript-language-features/src/extension.ts
@@ -4,7 +4,8 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-import * as commands from './commands';
+import { Api, getExtensionApi } from './api';
+import { registerCommands } from './commands/index';
import { LanguageConfigurationManager } from './features/languageConfiguration';
import TypeScriptTaskProviderManager from './features/task';
import TypeScriptServiceClientHost from './typeScriptServiceClientHost';
@@ -15,22 +16,27 @@ import { standardLanguageDescriptions } from './utils/languageDescription';
import { lazy, Lazy } from './utils/lazy';
import LogDirectoryProvider from './utils/logDirectoryProvider';
import ManagedFileContextManager from './utils/managedFileContext';
-import { getContributedTypeScriptServerPlugins, TypeScriptServerPlugin } from './utils/plugins';
+import { PluginManager } from './utils/plugins';
import * as ProjectStatus from './utils/projectStatus';
import { Surveyor } from './utils/surveyor';
-
export function activate(
context: vscode.ExtensionContext
-): void {
- const plugins = getContributedTypeScriptServerPlugins();
+): Api {
+ const pluginManager = new PluginManager();
+ context.subscriptions.push(pluginManager);
const commandManager = new CommandManager();
context.subscriptions.push(commandManager);
- const lazyClientHost = createLazyClientHost(context, plugins, commandManager);
+ const onCompletionAccepted = new vscode.EventEmitter();
+ context.subscriptions.push(onCompletionAccepted);
+
+ const lazyClientHost = createLazyClientHost(context, pluginManager, commandManager, item => {
+ onCompletionAccepted.fire(item);
+ });
- registerCommands(commandManager, lazyClientHost);
+ registerCommands(commandManager, lazyClientHost, pluginManager);
context.subscriptions.push(new TypeScriptTaskProviderManager(lazyClientHost.map(x => x.serviceClient)));
context.subscriptions.push(new LanguageConfigurationManager());
@@ -38,36 +44,16 @@ export function activate(
context.subscriptions.push(module.register());
});
- const supportedLanguage = flatten([
- ...standardLanguageDescriptions.map(x => x.modeIds),
- ...plugins.map(x => x.languages)
- ]);
- function didOpenTextDocument(textDocument: vscode.TextDocument): boolean {
- if (isSupportedDocument(supportedLanguage, textDocument)) {
- openListener.dispose();
- // Force activation
- // tslint:disable-next-line:no-unused-expression
- void lazyClientHost.value;
+ context.subscriptions.push(lazilyActivateClient(lazyClientHost, pluginManager));
- context.subscriptions.push(new ManagedFileContextManager(resource => {
- return lazyClientHost.value.serviceClient.toPath(resource);
- }));
- return true;
- }
- return false;
- }
- const openListener = vscode.workspace.onDidOpenTextDocument(didOpenTextDocument, undefined, context.subscriptions);
- for (const textDocument of vscode.workspace.textDocuments) {
- if (didOpenTextDocument(textDocument)) {
- break;
- }
- }
+ return getExtensionApi(onCompletionAccepted.event, pluginManager);
}
function createLazyClientHost(
context: vscode.ExtensionContext,
- plugins: TypeScriptServerPlugin[],
- commandManager: CommandManager
+ pluginManager: PluginManager,
+ commandManager: CommandManager,
+ onCompletionAccepted: (item: vscode.CompletionItem) => void,
): Lazy {
return lazy(() => {
const logDirectoryProvider = new LogDirectoryProvider(context);
@@ -75,16 +61,14 @@ function createLazyClientHost(
const clientHost = new TypeScriptServiceClientHost(
standardLanguageDescriptions,
context.workspaceState,
- plugins,
+ pluginManager,
commandManager,
- logDirectoryProvider);
+ logDirectoryProvider,
+ onCompletionAccepted);
context.subscriptions.push(clientHost);
- const surveyor = new Surveyor(context.globalState);
- context.subscriptions.push(clientHost.serviceClient.onSurveyReady(e => surveyor.surveyReady(e.surveyId)));
-
-
+ context.subscriptions.push(new Surveyor(context.globalState, clientHost.serviceClient));
clientHost.serviceClient.onReady(() => {
context.subscriptions.push(
@@ -97,17 +81,43 @@ function createLazyClientHost(
});
}
-function registerCommands(
- commandManager: CommandManager,
- lazyClientHost: Lazy
+function lazilyActivateClient(
+ lazyClientHost: Lazy,
+ pluginManager: PluginManager,
) {
- commandManager.register(new commands.ReloadTypeScriptProjectsCommand(lazyClientHost));
- commandManager.register(new commands.ReloadJavaScriptProjectsCommand(lazyClientHost));
- commandManager.register(new commands.SelectTypeScriptVersionCommand(lazyClientHost));
- commandManager.register(new commands.OpenTsServerLogCommand(lazyClientHost));
- commandManager.register(new commands.RestartTsServerCommand(lazyClientHost));
- commandManager.register(new commands.TypeScriptGoToProjectConfigCommand(lazyClientHost));
- commandManager.register(new commands.JavaScriptGoToProjectConfigCommand(lazyClientHost));
+ const disposables: vscode.Disposable[] = [];
+
+ const supportedLanguage = flatten([
+ ...standardLanguageDescriptions.map(x => x.modeIds),
+ ...pluginManager.plugins.map(x => x.languages)
+ ]);
+
+ let hasActivated = false;
+ const maybeActivate = (textDocument: vscode.TextDocument): boolean => {
+ if (!hasActivated && isSupportedDocument(supportedLanguage, textDocument)) {
+ hasActivated = true;
+ // Force activation
+ // tslint:disable-next-line:no-unused-expression
+ void lazyClientHost.value;
+
+ disposables.push(new ManagedFileContextManager(resource => {
+ return lazyClientHost.value.serviceClient.toPath(resource);
+ }));
+ return true;
+ }
+ return false;
+ };
+
+ const didActivate = vscode.workspace.textDocuments.some(maybeActivate);
+ if (!didActivate) {
+ const openListener = vscode.workspace.onDidOpenTextDocument(doc => {
+ if (maybeActivate(doc)) {
+ openListener.dispose();
+ }
+ }, undefined, disposables);
+ }
+
+ return vscode.Disposable.from(...disposables);
}
function isSupportedDocument(
diff --git a/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts b/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts
index 6ed458083..ba25a71bc 100644
--- a/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts
+++ b/extensions/typescript-language-features/src/features/baseCodeLensProvider.ts
@@ -9,7 +9,6 @@ import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService';
import { escapeRegExp } from '../utils/regexp';
import * as typeConverters from '../utils/typeConverters';
-
export class ReferencesCodeLens extends vscode.CodeLens {
constructor(
public document: vscode.Uri,
@@ -20,14 +19,14 @@ export class ReferencesCodeLens extends vscode.CodeLens {
}
}
-export class CachedNavTreeResponse {
- private response?: Promise>;
+export class CachedResponse {
+ private response?: Promise>;
private version: number = -1;
private document: string = '';
public execute(
document: vscode.TextDocument,
- f: () => Promise>
+ f: () => Promise>
) {
if (this.matches(document)) {
return this.response;
@@ -42,8 +41,8 @@ export class CachedNavTreeResponse {
private update(
document: vscode.TextDocument,
- response: Promise>
- ): Promise> {
+ response: Promise>
+ ): Promise> {
this.response = response;
this.version = document.version;
this.document = document.uri.toString();
@@ -56,7 +55,7 @@ export abstract class TypeScriptBaseCodeLensProvider implements vscode.CodeLensP
public constructor(
protected client: ITypeScriptServiceClient,
- private cachedResponse: CachedNavTreeResponse
+ private cachedResponse: CachedResponse
) { }
public get onDidChangeCodeLenses(): vscode.Event {
@@ -105,31 +104,31 @@ export abstract class TypeScriptBaseCodeLensProvider implements vscode.CodeLensP
(item.childItems || []).forEach(child => this.walkNavTree(document, child, item, results));
}
- protected getSymbolRange(document: vscode.TextDocument, item: Proto.NavigationTree): vscode.Range | null {
- if (!item) {
- return null;
- }
+}
- // TS 3.0+ provides a span for just the symbol
- if (item.nameSpan) {
- return typeConverters.Range.fromTextSpan((item as any).nameSpan);
- }
+export function getSymbolRange(
+ document: vscode.TextDocument,
+ item: Proto.NavigationTree
+): vscode.Range | null {
+ // TS 3.0+ provides a span for just the symbol
+ if (item.nameSpan) {
+ return typeConverters.Range.fromTextSpan(item.nameSpan);
+ }
- // In older versions, we have to calculate this manually. See #23924
- const span = item.spans && item.spans[0];
- if (!span) {
- return null;
- }
+ // In older versions, we have to calculate this manually. See #23924
+ const span = item.spans && item.spans[0];
+ if (!span) {
+ return null;
+ }
- const range = typeConverters.Range.fromTextSpan(span);
- const text = document.getText(range);
+ const range = typeConverters.Range.fromTextSpan(span);
+ const text = document.getText(range);
- const identifierMatch = new RegExp(`^(.*?(\\b|\\W))${escapeRegExp(item.text || '')}(\\b|\\W)`, 'gm');
- const match = identifierMatch.exec(text);
- const prefixLength = match ? match.index + match[1].length : 0;
- const startOffset = document.offsetAt(new vscode.Position(range.start.line, range.start.character)) + prefixLength;
- return new vscode.Range(
- document.positionAt(startOffset),
- document.positionAt(startOffset + item.text.length));
- }
+ const identifierMatch = new RegExp(`^(.*?(\\b|\\W))${escapeRegExp(item.text || '')}(\\b|\\W)`, 'gm');
+ const match = identifierMatch.exec(text);
+ const prefixLength = match ? match.index + match[1].length : 0;
+ const startOffset = document.offsetAt(new vscode.Position(range.start.line, range.start.character)) + prefixLength;
+ return new vscode.Range(
+ document.positionAt(startOffset),
+ document.positionAt(startOffset + item.text.length));
}
diff --git a/extensions/typescript-language-features/src/features/bufferSyncSupport.ts b/extensions/typescript-language-features/src/features/bufferSyncSupport.ts
index d31b83970..f84f9d31a 100644
--- a/extensions/typescript-language-features/src/features/bufferSyncSupport.ts
+++ b/extensions/typescript-language-features/src/features/bufferSyncSupport.ts
@@ -55,7 +55,7 @@ class SyncedBuffer {
}
if (this.client.apiVersion.gte(API.v240)) {
- const tsPluginsForDocument = this.client.plugins
+ const tsPluginsForDocument = this.client.pluginManager.plugins
.filter(x => x.languages.indexOf(this.document.languageId) >= 0);
if (tsPluginsForDocument.length) {
diff --git a/extensions/typescript-language-features/src/features/completions.ts b/extensions/typescript-language-features/src/features/completions.ts
index 01f598b5b..bc1a27d63 100644
--- a/extensions/typescript-language-features/src/features/completions.ts
+++ b/extensions/typescript-language-features/src/features/completions.ts
@@ -21,7 +21,6 @@ import FileConfigurationManager from './fileConfigurationManager';
const localize = nls.loadMessageBundle();
-
interface CommitCharactersSettings {
readonly isNewIdentifierLocation: boolean;
readonly isInValidCommitCharacterContext: boolean;
@@ -37,7 +36,8 @@ class MyCompletionItem extends vscode.CompletionItem {
line: string,
public readonly tsEntry: Proto.CompletionEntry,
useCodeSnippetsOnMethodSuggest: boolean,
- public readonly commitCharactersSettings: CommitCharactersSettings
+ public readonly commitCharactersSettings: CommitCharactersSettings,
+ public readonly metadata: any | undefined,
) {
super(tsEntry.name, MyCompletionItem.convertKind(tsEntry.kind));
@@ -76,15 +76,36 @@ class MyCompletionItem extends vscode.CompletionItem {
}
}
- if (tsEntry.kindModifiers && tsEntry.kindModifiers.match(/\boptional\b/)) {
- if (!this.insertText) {
- this.insertText = this.label;
+ if (tsEntry.kindModifiers) {
+ const kindModifiers = new Set(tsEntry.kindModifiers.split(/\s+/g));
+
+ if (kindModifiers.has(PConst.KindModifiers.optional)) {
+ if (!this.insertText) {
+ this.insertText = this.label;
+ }
+
+ if (!this.filterText) {
+ this.filterText = this.label;
+ }
+ this.label += '?';
}
- if (!this.filterText) {
- this.filterText = this.label;
+ if (kindModifiers.has(PConst.KindModifiers.color)) {
+ this.kind = vscode.CompletionItemKind.Color;
+ }
+
+ if (tsEntry.kind === PConst.Kind.script) {
+ for (const extModifier of PConst.KindModifiers.fileExtensionKindModifiers) {
+ if (kindModifiers.has(extModifier)) {
+ if (tsEntry.name.toLowerCase().endsWith(extModifier)) {
+ this.detail = tsEntry.name;
+ } else {
+ this.detail = tsEntry.name + extModifier;
+ }
+ break;
+ }
+ }
}
- this.label += '?';
}
this.resolveRange(line);
}
@@ -191,6 +212,30 @@ class MyCompletionItem extends vscode.CompletionItem {
}
}
+class CompositeCommand implements Command {
+ public static readonly ID = '_typescript.composite';
+ public readonly id = CompositeCommand.ID;
+
+ public execute(...commands: vscode.Command[]) {
+ for (const command of commands) {
+ vscode.commands.executeCommand(command.command, ...(command.arguments || []));
+ }
+ }
+}
+
+class CompletionAcceptedCommand implements Command {
+ public static readonly ID = '_typescript.onCompletionAccepted';
+ public readonly id = CompletionAcceptedCommand.ID;
+
+ public constructor(
+ private readonly onCompletionAccepted: (item: vscode.CompletionItem) => void,
+ ) { }
+
+ public execute(item: vscode.CompletionItem) {
+ this.onCompletionAccepted(item);
+ }
+}
+
class ApplyCompletionCodeActionCommand implements Command {
public static readonly ID = '_typescript.applyCompletionCodeAction';
public readonly id = ApplyCompletionCodeActionCommand.ID;
@@ -270,9 +315,12 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
private readonly modeId: string,
private readonly typingsStatus: TypingsStatus,
private readonly fileConfigurationManager: FileConfigurationManager,
- commandManager: CommandManager
+ commandManager: CommandManager,
+ onCompletionAccepted: (item: vscode.CompletionItem) => void
) {
commandManager.register(new ApplyCompletionCodeActionCommand(this.client));
+ commandManager.register(new CompositeCommand());
+ commandManager.register(new CompletionAcceptedCommand(onCompletionAccepted));
}
public async provideCompletionItems(
@@ -280,9 +328,9 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
position: vscode.Position,
token: vscode.CancellationToken,
context: vscode.CompletionContext
- ): Promise {
+ ): Promise {
if (this.typingsStatus.isAcquiringTypings) {
- return Promise.reject({
+ return Promise.reject({
label: localize(
{ key: 'acquiringTypingsLabel', comment: ['Typings refers to the *.d.ts typings files that power our IntelliSense. It should not be localized'] },
'Acquiring typings...'),
@@ -310,35 +358,41 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
...typeConverters.Position.toFileLocationRequestArgs(file, position),
includeExternalModuleExports: completionConfiguration.autoImportSuggestions,
includeInsertTextCompletions: true,
- triggerCharacter: this.getTsTriggerCharacter(context)
+ triggerCharacter: this.getTsTriggerCharacter(context),
};
let isNewIdentifierLocation = true;
- let msg: ReadonlyArray | undefined = undefined;
+ let isIncomplete = false;
+ let entries: ReadonlyArray;
+ let metadata: any | undefined;
if (this.client.apiVersion.gte(API.v300)) {
const response = await this.client.interuptGetErr(() => this.client.execute('completionInfo', args, token));
if (response.type !== 'response' || !response.body) {
return null;
}
isNewIdentifierLocation = response.body.isNewIdentifierLocation;
- msg = response.body.entries;
+ isIncomplete = (response as any).metadata && (response as any).metadata.isIncomplete;
+ entries = response.body.entries;
+ metadata = response.metadata;
} else {
const response = await this.client.interuptGetErr(() => this.client.execute('completions', args, token));
if (response.type !== 'response' || !response.body) {
return null;
}
- msg = response.body;
+ entries = response.body;
+ metadata = response.metadata;
}
const isInValidCommitCharacterContext = this.isInValidCommitCharacterContext(document, position);
- return msg
+ const items = entries
.filter(entry => !shouldExcludeCompletionEntry(entry, completionConfiguration))
.map(entry => new MyCompletionItem(position, document, line.text, entry, completionConfiguration.useCodeSnippetsOnMethodSuggest, {
isNewIdentifierLocation,
isInValidCommitCharacterContext,
enableCallCompletions: !completionConfiguration.useCodeSnippetsOnMethodSuggest
- }));
+ }, metadata));
+ return new vscode.CompletionList(items, isIncomplete);
}
private getTsTriggerCharacter(context: vscode.CompletionContext): Proto.CompletionsTriggerCharacter | undefined {
@@ -372,30 +426,46 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
]
};
- let details: Proto.CompletionEntryDetails[] | undefined;
const response = await this.client.execute('completionEntryDetails', args, token);
- if (response.type !== 'response') {
+ if (response.type !== 'response' || !response.body) {
return item;
}
- const { body } = response;
- details = body;
- if (!details || !details.length || !details[0]) {
- return item;
+ const detail = response.body[0];
+
+ if (!item.detail && detail.displayParts.length) {
+ item.detail = Previewer.plain(detail.displayParts);
}
- const detail = details[0];
- item.detail = detail.displayParts.length ? Previewer.plain(detail.displayParts) : undefined;
item.documentation = this.getDocumentation(detail, item);
- const { command, additionalTextEdits } = this.getCodeActions(detail, filepath);
- item.command = command;
- item.additionalTextEdits = additionalTextEdits;
+ const codeAction = this.getCodeActions(detail, filepath);
+ const commands: vscode.Command[] = [{
+ command: CompletionAcceptedCommand.ID,
+ title: '',
+ arguments: [item]
+ }];
+ if (codeAction.command) {
+ commands.push(codeAction.command);
+ }
+ item.additionalTextEdits = codeAction.additionalTextEdits;
if (detail && item.useCodeSnippet) {
const shouldCompleteFunction = await this.isValidFunctionCompletionContext(filepath, item.position, token);
if (shouldCompleteFunction) {
item.insertText = this.snippetForFunctionCall(item, detail);
- item.command = { title: 'triggerParameterHints', command: 'editor.action.triggerParameterHints' };
+ commands.push({ title: 'triggerParameterHints', command: 'editor.action.triggerParameterHints' });
+ }
+ }
+
+ if (commands.length) {
+ if (commands.length === 1) {
+ item.command = commands[0];
+ } else {
+ item.command = {
+ command: CompositeCommand.ID,
+ title: '',
+ arguments: commands
+ };
}
}
@@ -456,14 +526,16 @@ class TypeScriptCompletionItemProvider implements vscode.CompletionItemProvider
document: vscode.TextDocument,
position: vscode.Position
): boolean {
- // TODO: Workaround for https://github.com/Microsoft/TypeScript/issues/13456
- // Only enable dot completions when previous character is an identifier.
- // Prevents incorrectly completing while typing spread operators.
- if (position.character > 1) {
- const preText = document.getText(new vscode.Range(
- position.line, 0,
- position.line, position.character));
- return preText.match(/(^|[a-z_$\(\)\[\]\{\}]|[^.]\.)\s*$/ig) !== null;
+ if (this.client.apiVersion.lt(API.v320)) {
+ // Workaround for https://github.com/Microsoft/TypeScript/issues/27742
+ // Only enable dot completions when previous character not a dot preceeded by whitespace.
+ // Prevents incorrectly completing while typing spread operators.
+ if (position.character > 1) {
+ const preText = document.getText(new vscode.Range(
+ position.line, 0,
+ position.line, position.character));
+ return preText.match(/(\s|^)\.$/ig) === null;
+ }
}
return true;
@@ -628,9 +700,10 @@ export function register(
typingsStatus: TypingsStatus,
fileConfigurationManager: FileConfigurationManager,
commandManager: CommandManager,
+ onCompletionAccepted: (item: vscode.CompletionItem) => void
) {
return new ConfigurationDependentRegistration(modeId, 'suggest.enabled', () =>
vscode.languages.registerCompletionItemProvider(selector,
- new TypeScriptCompletionItemProvider(client, modeId, typingsStatus, fileConfigurationManager, commandManager),
+ new TypeScriptCompletionItemProvider(client, modeId, typingsStatus, fileConfigurationManager, commandManager, onCompletionAccepted),
...TypeScriptCompletionItemProvider.triggerCharacters));
}
diff --git a/extensions/typescript-language-features/src/features/definitions.ts b/extensions/typescript-language-features/src/features/definitions.ts
index 94ad4593e..7f085ef93 100644
--- a/extensions/typescript-language-features/src/features/definitions.ts
+++ b/extensions/typescript-language-features/src/features/definitions.ts
@@ -37,11 +37,11 @@ export default class TypeScriptDefinitionProvider extends DefinitionProviderBase
return response.body.definitions
.map(location => {
const target = typeConverters.Location.fromTextSpan(this.client.toResource(location.file), location);
- return {
+ return {
originSelectionRange: span,
targetRange: target.range,
targetUri: target.uri,
- };
+ } as vscode.DefinitionLink;
});
}
diff --git a/extensions/typescript-language-features/src/features/diagnostics.ts b/extensions/typescript-language-features/src/features/diagnostics.ts
index a37cd310c..4dc7a5272 100644
--- a/extensions/typescript-language-features/src/features/diagnostics.ts
+++ b/extensions/typescript-language-features/src/features/diagnostics.ts
@@ -10,7 +10,7 @@ import { DiagnosticLanguage, allDiagnosticLangauges } from '../utils/languageDes
export const enum DiagnosticKind {
Syntax,
Semantic,
- Suggestion
+ Suggestion,
}
class FileDiagnostics {
@@ -97,7 +97,7 @@ class DiagnosticSettings {
public setValidate(language: DiagnosticLanguage, value: boolean): boolean {
return this.update(language, settings => ({
validate: value,
- enableSuggestions: settings.enableSuggestions
+ enableSuggestions: settings.enableSuggestions,
}));
}
diff --git a/extensions/typescript-language-features/src/features/documentHighlight.ts b/extensions/typescript-language-features/src/features/documentHighlight.ts
index 15a94df2c..b81ead9e0 100644
--- a/extensions/typescript-language-features/src/features/documentHighlight.ts
+++ b/extensions/typescript-language-features/src/features/documentHighlight.ts
@@ -8,8 +8,6 @@ import * as Proto from '../protocol';
import { ITypeScriptServiceClient } from '../typescriptService';
import * as typeConverters from '../utils/typeConverters';
-
-
class TypeScriptDocumentHighlightProvider implements vscode.DocumentHighlightProvider {
public constructor(
private readonly client: ITypeScriptServiceClient
@@ -26,21 +24,21 @@ class TypeScriptDocumentHighlightProvider implements vscode.DocumentHighlightPro
}
const args = typeConverters.Position.toFileLocationRequestArgs(file, position);
- const response = await this.client.execute('occurrences', args, token);
+ const response = await this.client.execute('references', args, token);
if (response.type !== 'response' || !response.body) {
return [];
}
- return response.body
- .filter(x => !x.isInString)
- .map(documentHighlightFromOccurance);
+ return response.body.refs
+ .filter(ref => ref.file === file)
+ .map(documentHighlightFromReference);
}
}
-function documentHighlightFromOccurance(occurrence: Proto.OccurrencesResponseItem): vscode.DocumentHighlight {
+function documentHighlightFromReference(reference: Proto.ReferencesResponseItem): vscode.DocumentHighlight {
return new vscode.DocumentHighlight(
- typeConverters.Range.fromTextSpan(occurrence),
- occurrence.isWriteAccess ? vscode.DocumentHighlightKind.Write : vscode.DocumentHighlightKind.Read);
+ typeConverters.Range.fromTextSpan(reference),
+ reference.isWriteAccess ? vscode.DocumentHighlightKind.Write : vscode.DocumentHighlightKind.Read);
}
export function register(
diff --git a/extensions/typescript-language-features/src/features/documentSymbol.ts b/extensions/typescript-language-features/src/features/documentSymbol.ts
index a0222683f..cc66470ee 100644
--- a/extensions/typescript-language-features/src/features/documentSymbol.ts
+++ b/extensions/typescript-language-features/src/features/documentSymbol.ts
@@ -99,5 +99,5 @@ export function register(
client: ITypeScriptServiceClient,
) {
return vscode.languages.registerDocumentSymbolProvider(selector,
- new TypeScriptDocumentSymbolProvider(client));
+ new TypeScriptDocumentSymbolProvider(client), { label: 'TypeScript' });
}
diff --git a/extensions/typescript-language-features/src/features/fileConfigurationManager.ts b/extensions/typescript-language-features/src/features/fileConfigurationManager.ts
index 043a6009a..64c0324cf 100644
--- a/extensions/typescript-language-features/src/features/fileConfigurationManager.ts
+++ b/extensions/typescript-language-features/src/features/fileConfigurationManager.ts
@@ -41,7 +41,7 @@ export default class FileConfigurationManager {
public constructor(
private readonly client: ITypeScriptServiceClient
) {
- this.onDidCloseTextDocumentSub = vscode.workspace.onDidCloseTextDocument((textDocument) => {
+ this.onDidCloseTextDocumentSub = vscode.workspace.onDidCloseTextDocument(textDocument => {
// When a document gets closed delete the cached formatting options.
// This is necessary since the tsserver now closed a project when its
// last file in it closes which drops the stored formatting options
diff --git a/extensions/typescript-language-features/src/features/implementationsCodeLens.ts b/extensions/typescript-language-features/src/features/implementationsCodeLens.ts
index 32559e09e..1d352dc4f 100644
--- a/extensions/typescript-language-features/src/features/implementationsCodeLens.ts
+++ b/extensions/typescript-language-features/src/features/implementationsCodeLens.ts
@@ -10,7 +10,7 @@ import * as PConst from '../protocol.const';
import { ITypeScriptServiceClient } from '../typescriptService';
import API from '../utils/api';
import { ConfigurationDependentRegistration, VersionDependentRegistration } from '../utils/dependentRegistration';
-import { CachedNavTreeResponse, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider';
+import { CachedResponse, ReferencesCodeLens, TypeScriptBaseCodeLensProvider, getSymbolRange } from './baseCodeLensProvider';
const localize = nls.loadMessageBundle();
export default class TypeScriptImplementationsCodeLensProvider extends TypeScriptBaseCodeLensProvider {
@@ -58,7 +58,7 @@ export default class TypeScriptImplementationsCodeLensProvider extends TypeScrip
): vscode.Range | null {
switch (item.kind) {
case PConst.Kind.interface:
- return super.getSymbolRange(document, item);
+ return getSymbolRange(document, item);
case PConst.Kind.class:
case PConst.Kind.memberFunction:
@@ -66,7 +66,7 @@ export default class TypeScriptImplementationsCodeLensProvider extends TypeScrip
case PConst.Kind.memberGetAccessor:
case PConst.Kind.memberSetAccessor:
if (item.kindModifiers.match(/\babstract\b/g)) {
- return super.getSymbolRange(document, item);
+ return getSymbolRange(document, item);
}
break;
}
@@ -78,7 +78,7 @@ export function register(
selector: vscode.DocumentSelector,
modeId: string,
client: ITypeScriptServiceClient,
- cachedResponse: CachedNavTreeResponse,
+ cachedResponse: CachedResponse,
) {
return new VersionDependentRegistration(client, API.v220, () =>
new ConfigurationDependentRegistration(modeId, 'implementationsCodeLens.enabled', () => {
diff --git a/extensions/typescript-language-features/src/features/languageConfiguration.ts b/extensions/typescript-language-features/src/features/languageConfiguration.ts
index 99515964e..33691a615 100644
--- a/extensions/typescript-language-features/src/features/languageConfiguration.ts
+++ b/extensions/typescript-language-features/src/features/languageConfiguration.ts
@@ -23,25 +23,25 @@ const jsTsLanguageConfiguration: vscode.LanguageConfiguration = {
// e.g. /** | */
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
afterText: /^\s*\*\/$/,
- action: { indentAction: vscode.IndentAction.IndentOutdent, appendText: ' * ' }
+ action: { indentAction: vscode.IndentAction.IndentOutdent, appendText: ' * ' },
}, {
// e.g. /** ...|
beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/,
- action: { indentAction: vscode.IndentAction.None, appendText: ' * ' }
+ action: { indentAction: vscode.IndentAction.None, appendText: ' * ' },
}, {
// e.g. * ...|
beforeText: /^(\t|[ ])*[ ]\*([ ]([^\*]|\*(?!\/))*)?$/,
oneLineAboveText: /^(\s*(\/\*\*|\*)).*/,
- action: { indentAction: vscode.IndentAction.None, appendText: '* ' }
+ action: { indentAction: vscode.IndentAction.None, appendText: '* ' },
}, {
// e.g. */|
beforeText: /^(\t|[ ])*[ ]\*\/\s*$/,
- action: { indentAction: vscode.IndentAction.None, removeText: 1 }
+ action: { indentAction: vscode.IndentAction.None, removeText: 1 },
},
{
// e.g. *-----*/|
beforeText: /^(\t|[ ])*[ ]\*[^/]*\*\/\s*$/,
- action: { indentAction: vscode.IndentAction.None, removeText: 1 }
+ action: { indentAction: vscode.IndentAction.None, removeText: 1 },
}
]
};
diff --git a/extensions/typescript-language-features/src/features/quickFix.ts b/extensions/typescript-language-features/src/features/quickFix.ts
index 1dd8135ad..23f428092 100644
--- a/extensions/typescript-language-features/src/features/quickFix.ts
+++ b/extensions/typescript-language-features/src/features/quickFix.ts
@@ -82,7 +82,7 @@ class ApplyFixAllCodeAction implements Command {
type: 'file',
args: { file }
},
- fixId: tsAction.fixId
+ fixId: tsAction.fixId,
};
const response = await this.client.execute('getCombinedCodeFix', args, nulToken);
diff --git a/extensions/typescript-language-features/src/features/refactor.ts b/extensions/typescript-language-features/src/features/refactor.ts
index 3e49abaae..c0ad9cb63 100644
--- a/extensions/typescript-language-features/src/features/refactor.ts
+++ b/extensions/typescript-language-features/src/features/refactor.ts
@@ -40,13 +40,13 @@ class ApplyRefactoringCommand implements Command {
}
*/
this.telemetryReporter.logTelemetry('refactor.execute', {
- action: action
+ action: action,
});
const args: Proto.GetEditsForRefactorRequestArgs = {
...typeConverters.Range.toFileRangeRequestArgs(file, range),
refactor,
- action
+ action,
};
const response = await this.client.execute('getEditsForRefactor', args, nulToken);
if (response.type !== 'response' || !response.body || !response.body.edits.length) {
@@ -94,7 +94,7 @@ class SelectRefactorCommand implements Command {
): Promise {
const selected = await vscode.window.showQuickPick(info.actions.map((action): vscode.QuickPickItem => ({
label: action.name,
- description: action.description
+ description: action.description,
})));
if (!selected) {
return false;
@@ -119,7 +119,7 @@ class TypeScriptRefactorProvider implements vscode.CodeActionProvider {
}
public static readonly metadata: vscode.CodeActionProviderMetadata = {
- providedCodeActionKinds: [vscode.CodeActionKind.Refactor]
+ providedCodeActionKinds: [vscode.CodeActionKind.Refactor],
};
public async provideCodeActions(
diff --git a/extensions/typescript-language-features/src/features/referencesCodeLens.ts b/extensions/typescript-language-features/src/features/referencesCodeLens.ts
index ea227ac99..2fecabafb 100644
--- a/extensions/typescript-language-features/src/features/referencesCodeLens.ts
+++ b/extensions/typescript-language-features/src/features/referencesCodeLens.ts
@@ -10,7 +10,7 @@ import * as PConst from '../protocol.const';
import { ITypeScriptServiceClient } from '../typescriptService';
import API from '../utils/api';
import { ConfigurationDependentRegistration, VersionDependentRegistration } from '../utils/dependentRegistration';
-import { CachedNavTreeResponse, ReferencesCodeLens, TypeScriptBaseCodeLensProvider } from './baseCodeLensProvider';
+import { CachedResponse, ReferencesCodeLens, TypeScriptBaseCodeLensProvider, getSymbolRange } from './baseCodeLensProvider';
const localize = nls.loadMessageBundle();
@@ -51,7 +51,7 @@ class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLensProvide
parent: Proto.NavigationTree | null
): vscode.Range | null {
if (parent && parent.kind === PConst.Kind.enum) {
- return super.getSymbolRange(document, item);
+ return getSymbolRange(document, item);
}
switch (item.kind) {
@@ -79,7 +79,7 @@ class TypeScriptReferencesCodeLensProvider extends TypeScriptBaseCodeLensProvide
case PConst.Kind.interface:
case PConst.Kind.type:
case PConst.Kind.enum:
- return super.getSymbolRange(document, item);
+ return getSymbolRange(document, item);
}
return null;
@@ -90,7 +90,7 @@ export function register(
selector: vscode.DocumentSelector,
modeId: string,
client: ITypeScriptServiceClient,
- cachedResponse: CachedNavTreeResponse,
+ cachedResponse: CachedResponse,
) {
return new VersionDependentRegistration(client, API.v206, () =>
new ConfigurationDependentRegistration(modeId, 'referencesCodeLens.enabled', () => {
diff --git a/extensions/typescript-language-features/src/features/rename.ts b/extensions/typescript-language-features/src/features/rename.ts
index 8d0ceeeff..a82bcb6cc 100644
--- a/extensions/typescript-language-features/src/features/rename.ts
+++ b/extensions/typescript-language-features/src/features/rename.ts
@@ -11,14 +11,6 @@ import { ITypeScriptServiceClient, ServerResponse } from '../typescriptService';
import API from '../utils/api';
import * as typeConverters from '../utils/typeConverters';
-// TODO: Remove when we pick up TS 3.2
-declare module '../protocol' {
- interface RenameTextSpan extends Proto.TextSpan {
- readonly prefixText?: string;
- readonly suffixText?: string;
- }
-}
-
const localize = nls.loadMessageBundle();
class TypeScriptRenameProvider implements vscode.RenameProvider {
diff --git a/extensions/typescript-language-features/src/features/signatureHelp.ts b/extensions/typescript-language-features/src/features/signatureHelp.ts
index 001155c7e..8eac3a9ca 100644
--- a/extensions/typescript-language-features/src/features/signatureHelp.ts
+++ b/extensions/typescript-language-features/src/features/signatureHelp.ts
@@ -73,16 +73,20 @@ class TypeScriptSignatureHelpProvider implements vscode.SignatureHelpProvider {
function toTsTriggerReason(context: vscode.SignatureHelpContext): Proto.SignatureHelpTriggerReason {
switch (context.triggerReason) {
- case vscode.SignatureHelpTriggerReason.Retrigger:
- return { kind: 'retrigger' };
-
case vscode.SignatureHelpTriggerReason.TriggerCharacter:
if (context.triggerCharacter) {
- return { kind: 'characterTyped', triggerCharacter: context.triggerCharacter as any };
+ if (context.isRetrigger) {
+ return { kind: 'retrigger', triggerCharacter: context.triggerCharacter as any };
+ } else {
+ return { kind: 'characterTyped', triggerCharacter: context.triggerCharacter as any };
+ }
} else {
return { kind: 'invoked' };
}
+ case vscode.SignatureHelpTriggerReason.ContentChange:
+ return context.isRetrigger ? { kind: 'retrigger' } : { kind: 'invoked' };
+
case vscode.SignatureHelpTriggerReason.Invoke:
default:
return { kind: 'invoked' };
diff --git a/extensions/typescript-language-features/src/features/tagClosing.ts b/extensions/typescript-language-features/src/features/tagClosing.ts
index b9e59c4cd..c854db7d6 100644
--- a/extensions/typescript-language-features/src/features/tagClosing.ts
+++ b/extensions/typescript-language-features/src/features/tagClosing.ts
@@ -80,7 +80,6 @@ class TagClosing extends Disposable {
return;
}
- const rangeStart = lastChange.range.start;
const version = document.version;
this._timeout = setTimeout(async () => {
this._timeout = undefined;
@@ -89,9 +88,12 @@ class TagClosing extends Disposable {
return;
}
- let position = new vscode.Position(rangeStart.line, rangeStart.character + lastChange.text.length);
- const args: Proto.JsxClosingTagRequestArgs = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
+ const addedLines = lastChange.text.split(/\r\n|\n/g);
+ const position = addedLines.length <= 1
+ ? lastChange.range.start.translate({ characterDelta: lastChange.text.length })
+ : new vscode.Position(lastChange.range.start.line + addedLines.length - 1, addedLines[addedLines.length - 1].length);
+ const args: Proto.JsxClosingTagRequestArgs = typeConverters.Position.toFileLocationRequestArgs(filepath, position);
this._cancel = new vscode.CancellationTokenSource();
const response = await this.client.execute('jsxClosingTag', args, this._cancel.token);
if (response.type !== 'response' || !response.body) {
diff --git a/extensions/typescript-language-features/src/features/task.ts b/extensions/typescript-language-features/src/features/task.ts
index 62d36fbb7..6d6f1e04f 100644
--- a/extensions/typescript-language-features/src/features/task.ts
+++ b/extensions/typescript-language-features/src/features/task.ts
@@ -230,19 +230,7 @@ class TscTaskProvider implements vscode.TaskProvider {
private getLabelForTasks(project: TSConfig): string {
if (project.workspaceFolder) {
- const projectFolder = project.workspaceFolder;
- const workspaceFolders = vscode.workspace.workspaceFolders;
- const relativePath = path.relative(project.workspaceFolder.uri.fsPath, project.path);
- if (workspaceFolders && workspaceFolders.length > 1) {
- // Use absolute path when we have multiple folders with the same name
- if (workspaceFolders.filter(x => x.name === projectFolder.name).length > 1) {
- return path.join(project.workspaceFolder.uri.fsPath, relativePath);
- } else {
- return path.join(project.workspaceFolder.name, relativePath);
- }
- } else {
- return relativePath;
- }
+ return path.relative(project.workspaceFolder.uri.fsPath, project.path);
}
return project.path;
}
diff --git a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts
index f91ad2aa4..66425a7c2 100644
--- a/extensions/typescript-language-features/src/features/updatePathsOnRename.ts
+++ b/extensions/typescript-language-features/src/features/updatePathsOnRename.ts
@@ -296,14 +296,14 @@ class UpdateImportsOnFileRenameHandler {
start: change.start,
end: {
line: change.end.line,
- offset: change.end.offset - match[1].length
- }
+ offset: change.end.offset - match[1].length,
+ },
};
});
return {
fileName: edit.fileName,
- textChanges
+ textChanges,
};
}
}
diff --git a/extensions/typescript-language-features/src/languageProvider.ts b/extensions/typescript-language-features/src/languageProvider.ts
index 25cb080ec..e447baf09 100644
--- a/extensions/typescript-language-features/src/languageProvider.ts
+++ b/extensions/typescript-language-features/src/languageProvider.ts
@@ -5,7 +5,7 @@
import { basename } from 'path';
import * as vscode from 'vscode';
-import { CachedNavTreeResponse } from './features/baseCodeLensProvider';
+import { CachedResponse } from './features/baseCodeLensProvider';
import { DiagnosticKind } from './features/diagnostics';
import FileConfigurationManager from './features/fileConfigurationManager';
import TypeScriptServiceClient from './typescriptServiceClient';
@@ -29,18 +29,16 @@ export default class LanguageProvider extends Disposable {
private readonly commandManager: CommandManager,
private readonly telemetryReporter: TelemetryReporter,
private readonly typingsStatus: TypingsStatus,
- private readonly fileConfigurationManager: FileConfigurationManager
+ private readonly fileConfigurationManager: FileConfigurationManager,
+ private readonly onCompletionAccepted: (item: vscode.CompletionItem) => void,
) {
super();
vscode.workspace.onDidChangeConfiguration(this.configurationChanged, this, this._disposables);
this.configurationChanged();
- client.onReady(async () => {
- await this.registerProviders();
- });
+ client.onReady(() => this.registerProviders());
}
-
@memoize
private get documentSelector(): vscode.DocumentFilter[] {
const documentSelector = [];
@@ -55,9 +53,9 @@ export default class LanguageProvider extends Disposable {
private async registerProviders(): Promise {
const selector = this.documentSelector;
- const cachedResponse = new CachedNavTreeResponse();
+ const cachedResponse = new CachedResponse();
- this._register((await import('./features/completions')).register(selector, this.description.id, this.client, this.typingsStatus, this.fileConfigurationManager, this.commandManager));
+ this._register((await import('./features/completions')).register(selector, this.description.id, this.client, this.typingsStatus, this.fileConfigurationManager, this.commandManager, this.onCompletionAccepted));
this._register((await import('./features/definitions')).register(selector, this.client));
this._register((await import('./features/directiveCommentCompletions')).register(selector, this.client));
this._register((await import('./features/documentHighlight')).register(selector, this.client));
diff --git a/extensions/typescript-language-features/src/protocol.const.ts b/extensions/typescript-language-features/src/protocol.const.ts
index 241bffd24..dcb1b33e1 100644
--- a/extensions/typescript-language-features/src/protocol.const.ts
+++ b/extensions/typescript-language-features/src/protocol.const.ts
@@ -39,4 +39,25 @@ export class DiagnosticCategory {
public static readonly error = 'error';
public static readonly warning = 'warning';
public static readonly suggestion = 'suggestion';
+}
+
+export class KindModifiers {
+ public static readonly optional = 'optional';
+ public static readonly color = 'color';
+
+ public static readonly dtsFile = '.d.ts';
+ public static readonly tsFile = '.ts';
+ public static readonly tsxFile = '.tsx';
+ public static readonly jsFile = '.js';
+ public static readonly jsxFile = '.jsx';
+ public static readonly jsonFile = '.json';
+
+ public static readonly fileExtensionKindModifiers = [
+ KindModifiers.dtsFile,
+ KindModifiers.tsFile,
+ KindModifiers.tsxFile,
+ KindModifiers.jsFile,
+ KindModifiers.jsxFile,
+ KindModifiers.jsonFile,
+ ];
}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/test/jsdocSnippet.test.ts b/extensions/typescript-language-features/src/test/jsdocSnippet.test.ts
index 2f796161c..7446a1500 100644
--- a/extensions/typescript-language-features/src/test/jsdocSnippet.test.ts
+++ b/extensions/typescript-language-features/src/test/jsdocSnippet.test.ts
@@ -75,4 +75,3 @@ suite('typescript.jsDocSnippet', () => {
].join('\n'));
});
});
-
diff --git a/extensions/typescript-language-features/src/test/requestQueue.test.ts b/extensions/typescript-language-features/src/test/requestQueue.test.ts
new file mode 100644
index 000000000..910379268
--- /dev/null
+++ b/extensions/typescript-language-features/src/test/requestQueue.test.ts
@@ -0,0 +1,122 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as assert from 'assert';
+import 'mocha';
+import { RequestQueue, RequestQueueingType } from '../tsServer/requestQueue';
+
+suite('RequestQueue', () => {
+ test('should be empty on creation', async () => {
+ const queue = new RequestQueue();
+ assert.strictEqual(queue.length, 0);
+ assert.strictEqual(queue.dequeue(), undefined);
+ });
+
+ suite('RequestQueue.createRequest', () => {
+ test('should create items with increasing sequence numbers', async () => {
+ const queue = new RequestQueue();
+
+ for (let i = 0; i < 100; ++i) {
+ const command = `command-${i}`;
+ const request = queue.createRequest(command, i);
+ assert.strictEqual(request.seq, i);
+ assert.strictEqual(request.command, command);
+ assert.strictEqual(request.arguments, i);
+ }
+ });
+ });
+
+ test('should queue normal requests in first in first out order', async () => {
+ const queue = new RequestQueue();
+ assert.strictEqual(queue.length, 0);
+
+ const request1 = queue.createRequest('a', 1);
+ queue.enqueue({ request: request1, expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.Normal });
+ assert.strictEqual(queue.length, 1);
+
+ const request2 = queue.createRequest('b', 2);
+ queue.enqueue({ request: request2, expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.Normal });
+ assert.strictEqual(queue.length, 2);
+
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 1);
+ assert.strictEqual(item!.request.command, 'a');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 0);
+ assert.strictEqual(item!.request.command, 'b');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(item, undefined);
+ assert.strictEqual(queue.length, 0);
+ }
+ });
+
+ test('should put normal requests in front of low priority requests', async () => {
+ const queue = new RequestQueue();
+ assert.strictEqual(queue.length, 0);
+
+ queue.enqueue({ request: queue.createRequest('low-1', 1), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.LowPriority });
+ queue.enqueue({ request: queue.createRequest('low-2', 1), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.LowPriority });
+ queue.enqueue({ request: queue.createRequest('normal-1', 2), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.Normal });
+ queue.enqueue({ request: queue.createRequest('normal-2', 2), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.Normal });
+
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 3);
+ assert.strictEqual(item!.request.command, 'normal-1');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 2);
+ assert.strictEqual(item!.request.command, 'normal-2');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 1);
+ assert.strictEqual(item!.request.command, 'low-1');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 0);
+ assert.strictEqual(item!.request.command, 'low-2');
+ }
+ });
+
+ test('should not push fence requests front of low priority requests', async () => {
+ const queue = new RequestQueue();
+ assert.strictEqual(queue.length, 0);
+
+ queue.enqueue({ request: queue.createRequest('low-1', 0), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.LowPriority });
+ queue.enqueue({ request: queue.createRequest('fence', 0), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.Fence });
+ queue.enqueue({ request: queue.createRequest('low-2', 0), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.LowPriority });
+ queue.enqueue({ request: queue.createRequest('normal', 0), expectsResponse: true, isAsync: false, queueingType: RequestQueueingType.Normal });
+
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 3);
+ assert.strictEqual(item!.request.command, 'low-1');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 2);
+ assert.strictEqual(item!.request.command, 'fence');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 1);
+ assert.strictEqual(item!.request.command, 'normal');
+ }
+ {
+ const item = queue.dequeue();
+ assert.strictEqual(queue.length, 0);
+ assert.strictEqual(item!.request.command, 'low-2');
+ }
+ });
+});
+
diff --git a/extensions/typescript-language-features/src/tsServer/callbackMap.ts b/extensions/typescript-language-features/src/tsServer/callbackMap.ts
new file mode 100644
index 000000000..5c187ec14
--- /dev/null
+++ b/extensions/typescript-language-features/src/tsServer/callbackMap.ts
@@ -0,0 +1,51 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as Proto from '../protocol';
+import { CancelledResponse, ServerResponse } from '../typescriptService';
+
+export interface CallbackItem {
+ readonly onSuccess: (value: R) => void;
+ readonly onError: (err: any) => void;
+ readonly startTime: number;
+ readonly isAsync: boolean;
+}
+
+export class CallbackMap {
+ private readonly _callbacks = new Map | undefined>>();
+ private readonly _asyncCallbacks = new Map | undefined>>();
+
+ public destroy(cause: string): void {
+ const cancellation = new CancelledResponse(cause);
+ for (const callback of this._callbacks.values()) {
+ callback.onSuccess(cancellation);
+ }
+ this._callbacks.clear();
+ for (const callback of this._asyncCallbacks.values()) {
+ callback.onSuccess(cancellation);
+ }
+ this._asyncCallbacks.clear();
+ }
+
+ public add(seq: number, callback: CallbackItem | undefined>, isAsync: boolean) {
+ if (isAsync) {
+ this._asyncCallbacks.set(seq, callback);
+ } else {
+ this._callbacks.set(seq, callback);
+ }
+ }
+
+ public fetch(seq: number): CallbackItem | undefined> | undefined {
+ const callback = this._callbacks.get(seq) || this._asyncCallbacks.get(seq);
+ this.delete(seq);
+ return callback;
+ }
+
+ private delete(seq: number) {
+ if (!this._callbacks.delete(seq)) {
+ this._asyncCallbacks.delete(seq);
+ }
+ }
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/tsServer/requestQueue.ts b/extensions/typescript-language-features/src/tsServer/requestQueue.ts
new file mode 100644
index 000000000..33dceef83
--- /dev/null
+++ b/extensions/typescript-language-features/src/tsServer/requestQueue.ts
@@ -0,0 +1,81 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as Proto from '../protocol';
+
+export enum RequestQueueingType {
+ /**
+ * Normal request that is executed in order.
+ */
+ Normal = 1,
+
+ /**
+ * Request that normal requests jump in front of in the queue.
+ */
+ LowPriority = 2,
+
+ /**
+ * A fence that blocks request reordering.
+ *
+ * Fences are not reordered. Unlike a normal request, a fence will never jump in front of a low priority request
+ * in the request queue.
+ */
+ Fence = 3,
+}
+
+export interface RequestItem {
+ readonly request: Proto.Request;
+ readonly expectsResponse: boolean;
+ readonly isAsync: boolean;
+ readonly queueingType: RequestQueueingType;
+}
+
+export class RequestQueue {
+ private readonly queue: RequestItem[] = [];
+ private sequenceNumber: number = 0;
+
+ public get length(): number {
+ return this.queue.length;
+ }
+
+ public enqueue(item: RequestItem): void {
+ if (item.queueingType === RequestQueueingType.Normal) {
+ let index = this.queue.length - 1;
+ while (index >= 0) {
+ if (this.queue[index].queueingType !== RequestQueueingType.LowPriority) {
+ break;
+ }
+ --index;
+ }
+ this.queue.splice(index + 1, 0, item);
+ } else {
+ // Only normal priority requests can be reordered. All other requests just go to the end.
+ this.queue.push(item);
+ }
+ }
+
+ public dequeue(): RequestItem | undefined {
+ return this.queue.shift();
+ }
+
+ public tryDeletePendingRequest(seq: number): boolean {
+ for (let i = 0; i < this.queue.length; i++) {
+ if (this.queue[i].request.seq === seq) {
+ this.queue.splice(i, 1);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public createRequest(command: string, args: any): Proto.Request {
+ return {
+ seq: this.sequenceNumber++,
+ type: 'request',
+ command: command,
+ arguments: args
+ };
+ }
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/server.ts b/extensions/typescript-language-features/src/tsServer/server.ts
similarity index 74%
rename from extensions/typescript-language-features/src/server.ts
rename to extensions/typescript-language-features/src/tsServer/server.ts
index 38325a8d0..cde2df2c2 100644
--- a/extensions/typescript-language-features/src/server.ts
+++ b/extensions/typescript-language-features/src/tsServer/server.ts
@@ -7,122 +7,22 @@ import * as cp from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
import * as vscode from 'vscode';
-import * as Proto from './protocol';
-import { CancelledResponse, NoContentResponse, ServerResponse } from './typescriptService';
-import API from './utils/api';
-import { TsServerLogLevel, TypeScriptServiceConfiguration } from './utils/configuration';
-import { Disposable } from './utils/dispose';
-import * as electron from './utils/electron';
-import LogDirectoryProvider from './utils/logDirectoryProvider';
-import Logger from './utils/logger';
-import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider';
-import { TypeScriptServerPlugin } from './utils/plugins';
-import TelemetryReporter from './utils/telemetry';
-import Tracer from './utils/tracer';
-import { TypeScriptVersion, TypeScriptVersionProvider } from './utils/versionProvider';
-import { Reader } from './utils/wireProtocol';
-
-interface CallbackItem {
- readonly onSuccess: (value: R) => void;
- readonly onError: (err: any) => void;
- readonly startTime: number;
- readonly isAsync: boolean;
-}
-
-class CallbackMap {
- private readonly _callbacks = new Map | undefined>>();
- private readonly _asyncCallbacks = new Map | undefined>>();
-
- public destroy(cause: string): void {
- const cancellation = new CancelledResponse(cause);
- for (const callback of this._callbacks.values()) {
- callback.onSuccess(cancellation);
- }
- this._callbacks.clear();
-
- for (const callback of this._asyncCallbacks.values()) {
- callback.onSuccess(cancellation);
- }
- this._asyncCallbacks.clear();
- }
-
- public add(seq: number, callback: CallbackItem | undefined>, isAsync: boolean) {
- if (isAsync) {
- this._asyncCallbacks.set(seq, callback);
- } else {
- this._callbacks.set(seq, callback);
- }
- }
-
-
- public fetch(seq: number): CallbackItem | undefined> | undefined {
- const callback = this._callbacks.get(seq) || this._asyncCallbacks.get(seq);
- this.delete(seq);
- return callback;
- }
-
- private delete(seq: number) {
- if (!this._callbacks.delete(seq)) {
- this._asyncCallbacks.delete(seq);
- }
- }
-}
-
-interface RequestItem {
- readonly request: Proto.Request;
- readonly expectsResponse: boolean;
- readonly isAsync: boolean;
- readonly lowPriority?: boolean;
-}
-
-class RequestQueue {
- private readonly queue: RequestItem[] = [];
- private sequenceNumber: number = 0;
-
- public get length(): number {
- return this.queue.length;
- }
-
- public push(item: RequestItem): void {
- // insert before existing lowPriority requestItems in the queue.
- if (!item.lowPriority && this.length) {
- for (let i = this.length - 1; i > -1; i--) {
- if (!this.queue[i].lowPriority) {
- this.queue.splice(i + 1, 0, item);
- return;
- }
- }
- //if all of the items are lowPriority insert at top
- this.queue.unshift(item);
- return;
- }
- //if none is low priority just push to end
- this.queue.push(item);
- }
-
- public shift(): RequestItem | undefined {
- return this.queue.shift();
- }
-
- public tryCancelPendingRequest(seq: number): boolean {
- for (let i = 0; i < this.queue.length; i++) {
- if (this.queue[i].request.seq === seq) {
- this.queue.splice(i, 1);
- return true;
- }
- }
- return false;
- }
-
- public createRequest(command: string, args: any): Proto.Request {
- return {
- seq: this.sequenceNumber++,
- type: 'request',
- command: command,
- arguments: args
- };
- }
-}
+import * as Proto from '../protocol';
+import { CancelledResponse, NoContentResponse } from '../typescriptService';
+import API from '../utils/api';
+import { TsServerLogLevel, TypeScriptServiceConfiguration } from '../utils/configuration';
+import { Disposable } from '../utils/dispose';
+import * as electron from '../utils/electron';
+import LogDirectoryProvider from '../utils/logDirectoryProvider';
+import Logger from '../utils/logger';
+import { TypeScriptPluginPathsProvider } from '../utils/pluginPathsProvider';
+import { PluginManager } from '../utils/plugins';
+import TelemetryReporter from '../utils/telemetry';
+import Tracer from '../utils/tracer';
+import { TypeScriptVersion, TypeScriptVersionProvider } from '../utils/versionProvider';
+import { Reader } from '../utils/wireProtocol';
+import { CallbackMap } from './callbackMap';
+import { RequestItem, RequestQueue, RequestQueueingType } from './requestQueue';
export class TypeScriptServerSpawner {
public constructor(
@@ -137,11 +37,11 @@ export class TypeScriptServerSpawner {
public spawn(
version: TypeScriptVersion,
configuration: TypeScriptServiceConfiguration,
- plugins: ReadonlyArray
+ pluginManager: PluginManager
): TypeScriptServer {
const apiVersion = version.version || API.defaultVersion;
- const { args, cancellationPipeName, tsServerLogFile } = this.getTsServerArgs(configuration, version, plugins);
+ const { args, cancellationPipeName, tsServerLogFile } = this.getTsServerArgs(configuration, version, pluginManager);
if (TypeScriptServerSpawner.isLoggingEnabled(apiVersion, configuration)) {
if (tsServerLogFile) {
@@ -160,7 +60,7 @@ export class TypeScriptServerSpawner {
private getForkOptions() {
const debugPort = TypeScriptServerSpawner.getDebugPort();
- const tsServerForkOptions: electron.IForkOptions = {
+ const tsServerForkOptions: electron.ForkOptions = {
execArgv: debugPort ? [`--inspect=${debugPort}`] : [],
};
return tsServerForkOptions;
@@ -169,11 +69,11 @@ export class TypeScriptServerSpawner {
private getTsServerArgs(
configuration: TypeScriptServiceConfiguration,
currentVersion: TypeScriptVersion,
- plugins: ReadonlyArray,
+ pluginManager: PluginManager,
): { args: string[], cancellationPipeName: string | undefined, tsServerLogFile: string | undefined } {
const args: string[] = [];
- let cancellationPipeName: string | undefined = undefined;
- let tsServerLogFile: string | undefined = undefined;
+ let cancellationPipeName: string | undefined;
+ let tsServerLogFile: string | undefined;
const apiVersion = currentVersion.version || API.defaultVersion;
@@ -210,11 +110,11 @@ export class TypeScriptServerSpawner {
if (apiVersion.gte(API.v230)) {
const pluginPaths = this._pluginPathsProvider.getPluginPaths();
- if (plugins.length) {
- args.push('--globalPlugins', plugins.map(x => x.name).join(','));
+ if (pluginManager.plugins.length) {
+ args.push('--globalPlugins', pluginManager.plugins.map(x => x.name).join(','));
if (currentVersion.path === this._versionProvider.defaultVersion.path) {
- pluginPaths.push(...plugins.map(x => x.path));
+ pluginPaths.push(...pluginManager.plugins.map(x => x.path));
}
}
@@ -278,7 +178,7 @@ export class TypeScriptServer extends Disposable {
private readonly _tracer: Tracer,
) {
super();
- this._reader = new Reader(this._childProcess.stdout);
+ this._reader = this._register(new Reader(this._childProcess.stdout));
this._reader.onData(msg => this.dispatchMessage(msg));
this._childProcess.on('exit', code => this.handleExit(code));
this._childProcess.on('error', error => this.handleError(error));
@@ -353,7 +253,7 @@ export class TypeScriptServer extends Disposable {
private tryCancelRequest(seq: number, command: string): boolean {
try {
- if (this._requestQueue.tryCancelPendingRequest(seq)) {
+ if (this._requestQueue.tryDeletePendingRequest(seq)) {
this._tracer.logTrace(`TypeScript Server: canceled request with sequence number ${seq}`);
return true;
}
@@ -398,10 +298,10 @@ export class TypeScriptServer extends Disposable {
public executeImpl(command: string, args: any, executeInfo: { isAsync: boolean, token?: vscode.CancellationToken, expectsResult: boolean, lowPriority?: boolean }): Promise {
const request = this._requestQueue.createRequest(command, args);
const requestInfo: RequestItem = {
- request: request,
+ request,
expectsResponse: executeInfo.expectsResult,
isAsync: executeInfo.isAsync,
- lowPriority: executeInfo.lowPriority
+ queueingType: getQueueingType(command, executeInfo.lowPriority)
};
let result: Promise;
if (executeInfo.expectsResult) {
@@ -437,7 +337,7 @@ export class TypeScriptServer extends Disposable {
} else {
result = Promise.resolve(null);
}
- this._requestQueue.push(requestInfo);
+ this._requestQueue.enqueue(requestInfo);
this.sendNextRequests();
return result;
@@ -469,7 +369,7 @@ export class TypeScriptServer extends Disposable {
private sendNextRequests(): void {
while (this._pendingResponses.size === 0 && this._requestQueue.length > 0) {
- const item = this._requestQueue.shift();
+ const item = this._requestQueue.dequeue();
if (item) {
this.sendRequest(item);
}
@@ -505,3 +405,15 @@ export class TypeScriptServer extends Disposable {
}
}
+const fenceCommands = new Set(['change', 'close', 'open']);
+
+function getQueueingType(
+ command: string,
+ lowPriority?: boolean
+): RequestQueueingType {
+ if (fenceCommands.has(command)) {
+ return RequestQueueingType.Fence;
+ }
+ return lowPriority ? RequestQueueingType.LowPriority : RequestQueueingType.Normal;
+}
+
diff --git a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts
index df5613d84..9c76d5e50 100644
--- a/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts
+++ b/extensions/typescript-language-features/src/typeScriptServiceClientHost.ts
@@ -18,9 +18,9 @@ import TypeScriptServiceClient from './typescriptServiceClient';
import API from './utils/api';
import { CommandManager } from './utils/commandManager';
import { Disposable } from './utils/dispose';
-import { LanguageDescription, DiagnosticLanguage } from './utils/languageDescription';
+import { DiagnosticLanguage, LanguageDescription } from './utils/languageDescription';
import LogDirectoryProvider from './utils/logDirectoryProvider';
-import { TypeScriptServerPlugin } from './utils/plugins';
+import { PluginManager } from './utils/plugins';
import * as typeConverters from './utils/typeConverters';
import TypingsStatus, { AtaProgressReporter } from './utils/typingsStatus';
import VersionStatus from './utils/versionStatus';
@@ -48,9 +48,10 @@ export default class TypeScriptServiceClientHost extends Disposable {
constructor(
descriptions: LanguageDescription[],
workspaceState: vscode.Memento,
- plugins: TypeScriptServerPlugin[],
+ pluginManager: PluginManager,
private readonly commandManager: CommandManager,
- logDirectoryProvider: LogDirectoryProvider
+ logDirectoryProvider: LogDirectoryProvider,
+ onCompletionAccepted: (item: vscode.CompletionItem) => void,
) {
super();
const handleProjectCreateOrDelete = () => {
@@ -71,7 +72,7 @@ export default class TypeScriptServiceClientHost extends Disposable {
this.client = this._register(new TypeScriptServiceClient(
workspaceState,
version => this.versionStatus.onDidChangeTypeScriptVersion(version),
- plugins,
+ pluginManager,
logDirectoryProvider,
allModeIds));
@@ -89,7 +90,7 @@ export default class TypeScriptServiceClientHost extends Disposable {
this.fileConfigurationManager = this._register(new FileConfigurationManager(this.client));
for (const description of descriptions) {
- const manager = new LanguageProvider(this.client, description, this.commandManager, this.client.telemetryReporter, this.typingsStatus, this.fileConfigurationManager);
+ const manager = new LanguageProvider(this.client, description, this.commandManager, this.client.telemetryReporter, this.typingsStatus, this.fileConfigurationManager, onCompletionAccepted);
this.languages.push(manager);
this._register(manager);
this.languagePerId.set(description.id, manager);
@@ -108,7 +109,7 @@ export default class TypeScriptServiceClientHost extends Disposable {
}
const languages = new Set();
- for (const plugin of plugins) {
+ for (const plugin of pluginManager.plugins) {
for (const language of plugin.languages) {
languages.add(language);
}
@@ -122,7 +123,7 @@ export default class TypeScriptServiceClientHost extends Disposable {
diagnosticOwner: 'typescript',
isExternal: true
};
- const manager = new LanguageProvider(this.client, description, this.commandManager, this.client.telemetryReporter, this.typingsStatus, this.fileConfigurationManager);
+ const manager = new LanguageProvider(this.client, description, this.commandManager, this.client.telemetryReporter, this.typingsStatus, this.fileConfigurationManager, onCompletionAccepted);
this.languages.push(manager);
this._register(manager);
this.languagePerId.set(description.id, manager);
diff --git a/extensions/typescript-language-features/src/typescriptService.ts b/extensions/typescript-language-features/src/typescriptService.ts
index d14201af7..ef6b7d31c 100644
--- a/extensions/typescript-language-features/src/typescriptService.ts
+++ b/extensions/typescript-language-features/src/typescriptService.ts
@@ -9,10 +9,10 @@ import * as Proto from './protocol';
import API from './utils/api';
import { TypeScriptServiceConfiguration } from './utils/configuration';
import Logger from './utils/logger';
-import { TypeScriptServerPlugin } from './utils/plugins';
+import { PluginManager } from './utils/plugins';
export class CancelledResponse {
- readonly type: 'cancelled' = 'cancelled';
+ public readonly type: 'cancelled' = 'cancelled';
constructor(
public readonly reason: string
@@ -20,7 +20,7 @@ export class CancelledResponse {
}
export class NoContentResponse {
- readonly type: 'noContent' = 'noContent';
+ public readonly type: 'noContent' = 'noContent';
}
export type ServerResponse = T | CancelledResponse | NoContentResponse;
@@ -57,7 +57,6 @@ interface TypeScriptRequestTypes {
'typeDefinition': [Proto.FileLocationRequestArgs, Proto.TypeDefinitionResponse];
}
-
export interface ITypeScriptServiceClient {
/**
* Convert a resource (VS Code) to a normalized path (TypeScript).
@@ -87,7 +86,7 @@ export interface ITypeScriptServiceClient {
readonly onTypesInstallerInitializationFailed: vscode.Event;
readonly apiVersion: API;
- readonly plugins: TypeScriptServerPlugin[];
+ readonly pluginManager: PluginManager;
readonly configuration: TypeScriptServiceConfiguration;
readonly logger: Logger;
readonly bufferSyncSupport: BufferSyncSupport;
diff --git a/extensions/typescript-language-features/src/typescriptServiceClient.ts b/extensions/typescript-language-features/src/typescriptServiceClient.ts
index 233f0112d..4e275b7db 100644
--- a/extensions/typescript-language-features/src/typescriptServiceClient.ts
+++ b/extensions/typescript-language-features/src/typescriptServiceClient.ts
@@ -10,17 +10,16 @@ import * as nls from 'vscode-nls';
import BufferSyncSupport from './features/bufferSyncSupport';
import { DiagnosticKind, DiagnosticsManager } from './features/diagnostics';
import * as Proto from './protocol';
-import { TypeScriptServer, TypeScriptServerSpawner } from './server';
+import { TypeScriptServer, TypeScriptServerSpawner } from './tsServer/server';
import { ITypeScriptServiceClient } from './typescriptService';
import API from './utils/api';
import { TsServerLogLevel, TypeScriptServiceConfiguration } from './utils/configuration';
import { Disposable } from './utils/dispose';
import * as fileSchemes from './utils/fileSchemes';
-import * as is from './utils/is';
import LogDirectoryProvider from './utils/logDirectoryProvider';
import Logger from './utils/logger';
import { TypeScriptPluginPathsProvider } from './utils/pluginPathsProvider';
-import { TypeScriptServerPlugin } from './utils/plugins';
+import { PluginManager } from './utils/plugins';
import TelemetryReporter from './utils/telemetry';
import Tracer from './utils/tracer';
import { inferredProjectConfig } from './utils/tsconfig';
@@ -55,7 +54,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
private lastStart: number;
private numberRestarts: number;
private isRestarting: boolean = false;
- private _tsServerLoading: { resolve: () => void, reject: () => void } | undefined;
+ private loadingIndicator = new ServerInitializingIndicator();
public readonly telemetryReporter: TelemetryReporter;
/**
@@ -74,7 +73,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
constructor(
private readonly workspaceState: vscode.Memento,
private readonly onDidChangeTypeScriptVersion: (version: TypeScriptVersion) => void,
- public readonly plugins: TypeScriptServerPlugin[],
+ public readonly pluginManager: PluginManager,
private readonly logDirectoryProvider: LogDirectoryProvider,
allModeIds: string[]
) {
@@ -132,6 +131,10 @@ export default class TypeScriptServiceClient extends Disposable implements IType
this.telemetryReporter = this._register(new TelemetryReporter(() => this._tsserverVersion || this._apiVersion.versionString));
this.typescriptServerSpawner = new TypeScriptServerSpawner(this.versionProvider, this.logDirectoryProvider, this.pluginPathsProvider, this.logger, this.telemetryReporter, this.tracer);
+
+ this._register(this.pluginManager.onDidUpdateConfig(update => {
+ this.configurePlugin(update.pluginId, update.config);
+ }));
}
public get configuration() {
@@ -147,10 +150,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
this.forkedTsServer.kill();
}
- if (this._tsServerLoading) {
- this._tsServerLoading.reject();
- this._tsServerLoading = undefined;
- }
+ this.loadingIndicator.reset();
}
public restartTsServer(): void {
@@ -253,7 +253,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
this.lastError = null;
let mytoken = ++this.token;
- const handle = this.typescriptServerSpawner.spawn(currentVersion, this.configuration, this.plugins);
+ const handle = this.typescriptServerSpawner.spawn(currentVersion, this.configuration, this.pluginManager);
this.lastStart = Date.now();
handle.onError((err: Error) => {
@@ -319,16 +319,8 @@ export default class TypeScriptServiceClient extends Disposable implements IType
this.forkedTsServer = handle;
this._onTsServerStarted.fire(currentVersion.version);
- if (this._tsServerLoading) {
- this._tsServerLoading.reject();
- }
if (this._apiVersion.gte(API.v300)) {
- vscode.window.withProgress({
- location: vscode.ProgressLocation.Window,
- title: localize('serverLoading.progress', "Initializing JS/TS language features"),
- }, () => new Promise((resolve, reject) => {
- this._tsServerLoading = { resolve, reject };
- }));
+ this.loadingIndicator.startedLoadingProject(undefined /* projectName */);
}
this.serviceStarted(resendModels);
@@ -399,13 +391,18 @@ export default class TypeScriptServiceClient extends Disposable implements IType
private serviceStarted(resendModels: boolean): void {
const configureOptions: Proto.ConfigureRequestArguments = {
- hostInfo: 'vscode'
+ hostInfo: 'vscode',
};
this.executeWithoutWaitingForResponse('configure', configureOptions);
this.setCompilerOptionsForInferredProjects(this._configuration);
if (resendModels) {
this._onResendModelsRequested.fire();
}
+
+ // Reconfigure any plugins
+ for (const [config, pluginName] of this.pluginManager.configurations()) {
+ this.configurePlugin(config, pluginName);
+ }
}
private setCompilerOptionsForInferredProjects(configuration: TypeScriptServiceConfiguration): void {
@@ -429,10 +426,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
}
private serviceExited(restart: boolean): void {
- if (this._tsServerLoading) {
- this._tsServerLoading.reject();
- this._tsServerLoading = undefined;
- }
+ this.loadingIndicator.reset();
enum MessageAction {
reportIssue
@@ -459,7 +453,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
localize('serverDiedAfterStart', 'The TypeScript language service died 5 times right after it got started. The service will not be restarted.'),
{
title: localize('serverDiedReportIssue', 'Report Issue'),
- id: MessageAction.reportIssue
+ id: MessageAction.reportIssue,
});
/* __GDPR__
"serviceExited" : {
@@ -602,13 +596,10 @@ export default class TypeScriptServiceClient extends Disposable implements IType
case 'syntaxDiag':
case 'semanticDiag':
case 'suggestionDiag':
- // This event also roughly signals that project has been loaded successfully
- if (this._tsServerLoading) {
- this._tsServerLoading.resolve();
- this._tsServerLoading = undefined;
- }
+ // This event also roughly signals that the global project has been loaded successfully
+ this.loadingIndicator.finishedLoadingProject(undefined /* projectName */);
- const diagnosticEvent: Proto.DiagnosticEvent = event;
+ const diagnosticEvent = event as Proto.DiagnosticEvent;
if (diagnosticEvent.body && diagnosticEvent.body.diagnostics) {
this._onDiagnosticsReceived.fire({
kind: getDignosticsKind(event),
@@ -628,41 +619,37 @@ export default class TypeScriptServiceClient extends Disposable implements IType
break;
case 'projectLanguageServiceState':
- if (event.body) {
- this._onProjectLanguageServiceStateChanged.fire((event as Proto.ProjectLanguageServiceStateEvent).body);
- }
+ this._onProjectLanguageServiceStateChanged.fire((event as Proto.ProjectLanguageServiceStateEvent).body);
break;
case 'projectsUpdatedInBackground':
- if (event.body) {
- const body = (event as Proto.ProjectsUpdatedInBackgroundEvent).body;
- const resources = body.openFiles.map(vscode.Uri.file);
- this.bufferSyncSupport.getErr(resources);
- }
+ const body = (event as Proto.ProjectsUpdatedInBackgroundEvent).body;
+ const resources = body.openFiles.map(vscode.Uri.file);
+ this.bufferSyncSupport.getErr(resources);
break;
case 'beginInstallTypes':
- if (event.body) {
- this._onDidBeginInstallTypings.fire((event as Proto.BeginInstallTypesEvent).body);
- }
+ this._onDidBeginInstallTypings.fire((event as Proto.BeginInstallTypesEvent).body);
break;
case 'endInstallTypes':
- if (event.body) {
- this._onDidEndInstallTypings.fire((event as Proto.EndInstallTypesEvent).body);
- }
+ this._onDidEndInstallTypings.fire((event as Proto.EndInstallTypesEvent).body);
break;
case 'typesInstallerInitializationFailed':
- if (event.body) {
- this._onTypesInstallerInitializationFailed.fire((event as Proto.TypesInstallerInitializationFailedEvent).body);
- }
+ this._onTypesInstallerInitializationFailed.fire((event as Proto.TypesInstallerInitializationFailedEvent).body);
break;
case 'surveyReady':
- if (event.body) {
- this._onSurveyReady.fire((event as Proto.SurveyReadyEvent).body);
- }
+ this._onSurveyReady.fire((event as Proto.SurveyReadyEvent).body);
+ break;
+
+ case 'projectLoadingStart':
+ this.loadingIndicator.startedLoadingProject((event as Proto.ProjectLoadingStartEvent).body.projectName);
+ break;
+
+ case 'projectLoadingFinish':
+ this.loadingIndicator.finishedLoadingProject((event as Proto.ProjectLoadingFinishEvent).body.projectName);
break;
}
}
@@ -674,10 +661,10 @@ export default class TypeScriptServiceClient extends Disposable implements IType
const typingsInstalledPayload: Proto.TypingsInstalledTelemetryEventPayload = (telemetryData.payload as Proto.TypingsInstalledTelemetryEventPayload);
properties['installedPackages'] = typingsInstalledPayload.installedPackages;
- if (is.defined(typingsInstalledPayload.installSuccess)) {
+ if (typeof typingsInstalledPayload.installSuccess === 'boolean') {
properties['installSuccess'] = typingsInstalledPayload.installSuccess.toString();
}
- if (is.string(typingsInstalledPayload.typingsInstallerVersion)) {
+ if (typeof typingsInstalledPayload.typingsInstallerVersion === 'string') {
properties['typingsInstallerVersion'] = typingsInstalledPayload.typingsInstallerVersion;
}
break;
@@ -688,7 +675,7 @@ export default class TypeScriptServiceClient extends Disposable implements IType
Object.keys(payload).forEach((key) => {
try {
if (payload.hasOwnProperty(key)) {
- properties[key] = is.string(payload[key]) ? payload[key] : JSON.stringify(payload[key]);
+ properties[key] = typeof payload[key] === 'string' ? payload[key] : JSON.stringify(payload[key]);
}
} catch (e) {
// noop
@@ -719,8 +706,13 @@ export default class TypeScriptServiceClient extends Disposable implements IType
this._apiVersion = API.defaultVersion;
this._tsserverVersion = undefined;
}
-}
+ private configurePlugin(pluginName: string, configuration: {}): any {
+ if (this._apiVersion.gte(API.v314)) {
+ this.executeWithoutWaitingForResponse('configurePlugin', { pluginName, configuration });
+ }
+ }
+}
function getDignosticsKind(event: Proto.Event) {
switch (event.event) {
@@ -730,3 +722,38 @@ function getDignosticsKind(event: Proto.Event) {
}
throw new Error('Unknown dignostics kind');
}
+
+class ServerInitializingIndicator extends Disposable {
+ private _task?: { project: string | undefined, resolve: () => void, reject: () => void };
+
+ public reset(): void {
+ if (this._task) {
+ this._task.reject();
+ this._task = undefined;
+ }
+ }
+
+ /**
+ * Signal that a project has started loading.
+ */
+ public startedLoadingProject(projectName: string | undefined): void {
+ // TS projects are loaded sequentially. Cancel existing task because it should always be resolved before
+ // the incoming project loading task is.
+ this.reset();
+
+ vscode.window.withProgress({
+ location: vscode.ProgressLocation.Window,
+ title: localize('serverLoading.progress', "Initializing JS/TS language features"),
+ }, () => new Promise((resolve, reject) => {
+ this._task = { project: projectName, resolve, reject };
+ }));
+ }
+
+ public finishedLoadingProject(projectName: string | undefined): void {
+ if (this._task && this._task.project === projectName) {
+ this._task.resolve();
+ this._task = undefined;
+ }
+ }
+}
+
diff --git a/extensions/typescript-language-features/src/utils/api.ts b/extensions/typescript-language-features/src/utils/api.ts
index 9bcab14cf..0c7f5b9ff 100644
--- a/extensions/typescript-language-features/src/utils/api.ts
+++ b/extensions/typescript-language-features/src/utils/api.ts
@@ -31,6 +31,7 @@ export default class API {
public static readonly v292 = API.fromSimpleString('2.9.2');
public static readonly v300 = API.fromSimpleString('3.0.0');
public static readonly v310 = API.fromSimpleString('3.1.0');
+ public static readonly v314 = API.fromSimpleString('3.1.4');
public static readonly v320 = API.fromSimpleString('3.2.0');
diff --git a/extensions/typescript-language-features/src/utils/arrays.ts b/extensions/typescript-language-features/src/utils/arrays.ts
index 3a15e3898..e8aa98a75 100644
--- a/extensions/typescript-language-features/src/utils/arrays.ts
+++ b/extensions/typescript-language-features/src/utils/arrays.ts
@@ -2,7 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-export function equals(one: T[], other: T[], itemEquals: (a: T, b: T) => boolean = (a, b) => a === b): boolean {
+export function equals(one: ReadonlyArray, other: ReadonlyArray, itemEquals: (a: T, b: T) => boolean = (a, b) => a === b): boolean {
if (one.length !== other.length) {
return false;
}
@@ -16,6 +16,6 @@ export function equals(one: T[], other: T[], itemEquals: (a: T, b: T) => bool
return true;
}
-export function flatten(arr: T[][]): T[] {
- return [].concat.apply([], arr);
+export function flatten(arr: ReadonlyArray>): T[] {
+ return ([] as T[]).concat.apply([], arr);
}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/utils/electron.ts b/extensions/typescript-language-features/src/utils/electron.ts
index da11362b4..88fc9a999 100644
--- a/extensions/typescript-language-features/src/utils/electron.ts
+++ b/extensions/typescript-language-features/src/utils/electron.ts
@@ -38,7 +38,7 @@ function generatePatchedEnv(env: any, modulePath: string): any {
return newEnv;
}
-export interface IForkOptions {
+export interface ForkOptions {
readonly cwd?: string;
readonly execArgv?: string[];
}
@@ -46,7 +46,7 @@ export interface IForkOptions {
export function fork(
modulePath: string,
args: string[],
- options: IForkOptions,
+ options: ForkOptions,
): cp.ChildProcess {
const newEnv = generatePatchedEnv(process.env, modulePath);
return cp.fork(modulePath, args, {
diff --git a/extensions/typescript-language-features/src/utils/is.ts b/extensions/typescript-language-features/src/utils/is.ts
deleted file mode 100644
index fc6fd6ad2..000000000
--- a/extensions/typescript-language-features/src/utils/is.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-const toString = Object.prototype.toString;
-
-export function defined(value: any): boolean {
- return typeof value !== 'undefined';
-}
-
-export function boolean(value: any): value is boolean {
- return value === true || value === false;
-}
-
-export function string(value: any): value is string {
- return toString.call(value) === '[object String]';
-}
diff --git a/extensions/typescript-language-features/src/utils/logger.ts b/extensions/typescript-language-features/src/utils/logger.ts
index 7ba79adad..991e9d52b 100644
--- a/extensions/typescript-language-features/src/utils/logger.ts
+++ b/extensions/typescript-language-features/src/utils/logger.ts
@@ -5,11 +5,12 @@
import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
-import * as is from './is';
import { memoize } from './memoize';
const localize = nls.loadMessageBundle();
+type LogLevel = 'Trace' | 'Info' | 'Error';
+
export default class Logger {
@memoize
@@ -19,17 +20,11 @@ export default class Logger {
private data2String(data: any): string {
if (data instanceof Error) {
- if (is.string(data.stack)) {
- return data.stack;
- }
- return (data as Error).message;
+ return data.stack || data.message;
}
- if (is.boolean(data.success) && !data.success && is.string(data.message)) {
+ if (data.success === false && data.message) {
return data.message;
}
- if (is.string(data)) {
- return data;
- }
return data.toString();
}
@@ -37,10 +32,6 @@ export default class Logger {
this.logLevel('Info', message, data);
}
- public warn(message: string, data?: any): void {
- this.logLevel('Warn', message, data);
- }
-
public error(message: string, data?: any): void {
// See https://github.com/Microsoft/TypeScript/issues/10496
if (data && data.message === 'No content available.') {
@@ -49,7 +40,7 @@ export default class Logger {
this.logLevel('Error', message, data);
}
- public logLevel(level: string, message: string, data?: any): void {
+ public logLevel(level: LogLevel, message: string, data?: any): void {
this.output.appendLine(`[${level} - ${(new Date().toLocaleTimeString())}] ${message}`);
if (data) {
this.output.appendLine(this.data2String(data));
diff --git a/extensions/typescript-language-features/src/utils/memoize.ts b/extensions/typescript-language-features/src/utils/memoize.ts
index beeb0035b..12ce836dd 100644
--- a/extensions/typescript-language-features/src/utils/memoize.ts
+++ b/extensions/typescript-language-features/src/utils/memoize.ts
@@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/
export function memoize(_target: any, key: string, descriptor: any) {
- let fnKey: string | undefined = undefined;
- let fn: Function | undefined = undefined;
+ let fnKey: string | undefined;
+ let fn: Function | undefined;
if (typeof descriptor.value === 'function') {
fnKey = 'value';
diff --git a/extensions/typescript-language-features/src/utils/plugins.ts b/extensions/typescript-language-features/src/utils/plugins.ts
index e67df651b..9b398d963 100644
--- a/extensions/typescript-language-features/src/utils/plugins.ts
+++ b/extensions/typescript-language-features/src/utils/plugins.ts
@@ -4,26 +4,45 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
+import { Disposable } from './dispose';
+import { memoize } from './memoize';
export interface TypeScriptServerPlugin {
readonly path: string;
readonly name: string;
- readonly languages: string[];
+ readonly languages: ReadonlyArray;
}
-export function getContributedTypeScriptServerPlugins(): TypeScriptServerPlugin[] {
- const plugins: TypeScriptServerPlugin[] = [];
- for (const extension of vscode.extensions.all) {
- const pack = extension.packageJSON;
- if (pack.contributes && pack.contributes.typescriptServerPlugins && Array.isArray(pack.contributes.typescriptServerPlugins)) {
- for (const plugin of pack.contributes.typescriptServerPlugins) {
- plugins.push({
- name: plugin.name,
- path: extension.extensionPath,
- languages: Array.isArray(plugin.languages) ? plugin.languages : [],
- });
+export class PluginManager extends Disposable {
+ private readonly _pluginConfigurations = new Map();
+
+ @memoize
+ public get plugins(): ReadonlyArray {
+ const plugins: TypeScriptServerPlugin[] = [];
+ for (const extension of vscode.extensions.all) {
+ const pack = extension.packageJSON;
+ if (pack.contributes && Array.isArray(pack.contributes.typescriptServerPlugins)) {
+ for (const plugin of pack.contributes.typescriptServerPlugins) {
+ plugins.push({
+ name: plugin.name,
+ path: extension.extensionPath,
+ languages: Array.isArray(plugin.languages) ? plugin.languages : [],
+ });
+ }
}
}
+ return plugins;
}
- return plugins;
-}
+
+ private readonly _onDidUpdateConfig = this._register(new vscode.EventEmitter<{ pluginId: string, config: {} }>());
+ public readonly onDidUpdateConfig = this._onDidUpdateConfig.event;
+
+ public setConfiguration(pluginId: string, config: {}) {
+ this._pluginConfigurations.set(pluginId, config);
+ this._onDidUpdateConfig.fire({ pluginId, config });
+ }
+
+ public configurations(): IterableIterator<[string, {}]> {
+ return this._pluginConfigurations.entries();
+ }
+}
\ No newline at end of file
diff --git a/extensions/typescript-language-features/src/utils/surveyor.ts b/extensions/typescript-language-features/src/utils/surveyor.ts
index da05db553..bf3ba4ad6 100644
--- a/extensions/typescript-language-features/src/utils/surveyor.ts
+++ b/extensions/typescript-language-features/src/utils/surveyor.ts
@@ -5,6 +5,9 @@
import * as vscode from 'vscode';
import * as nls from 'vscode-nls';
+import TypeScriptServiceClient from '../typescriptServiceClient';
+import { Disposable } from './dispose';
+import { memoize } from './memoize';
const localize = nls.loadMessageBundle();
@@ -121,18 +124,24 @@ class Survey {
}
}
-export class Surveyor {
-
- private readonly surveys: Map;
+export class Surveyor extends Disposable {
public constructor(
- memento: vscode.Memento
+ private readonly memento: vscode.Memento,
+ serviceClient: TypeScriptServiceClient,
) {
- this.surveys = new Map(allSurveys.map(data =>
- [data.id, new Survey(data, memento)] as [string, Survey]));
+ super();
+
+ this._register(serviceClient.onSurveyReady(e => this.surveyReady(e.surveyId)));
+ }
+
+ @memoize
+ private get surveys(): Map {
+ return new Map(
+ allSurveys.map(data => [data.id, new Survey(data, this.memento)] as [string, Survey]));
}
- public surveyReady(surveyId: string): void {
+ private surveyReady(surveyId: string): void {
const survey = this.tryGetActiveSurvey(surveyId);
if (survey && survey.trigger()) {
survey.willShow();
diff --git a/extensions/typescript-language-features/src/utils/telemetry.ts b/extensions/typescript-language-features/src/utils/telemetry.ts
index 4ac7a9539..e3b5f09ad 100644
--- a/extensions/typescript-language-features/src/utils/telemetry.ts
+++ b/extensions/typescript-language-features/src/utils/telemetry.ts
@@ -7,7 +7,7 @@ import * as vscode from 'vscode';
import VsCodeTelemetryReporter from 'vscode-extension-telemetry';
import { memoize } from './memoize';
-interface IPackageInfo {
+interface PackageInfo {
readonly name: string;
readonly version: string;
readonly aiKey: string;
@@ -58,7 +58,7 @@ export default class TelemetryReporter {
}
@memoize
- private get packageInfo(): IPackageInfo | null {
+ private get packageInfo(): PackageInfo | null {
const { packageJSON } = vscode.extensions.getExtension('vscode.typescript-language-features')!;
if (packageJSON) {
return {
diff --git a/extensions/typescript-language-features/src/utils/tracer.ts b/extensions/typescript-language-features/src/utils/tracer.ts
index 2f2394dca..c80254c79 100644
--- a/extensions/typescript-language-features/src/utils/tracer.ts
+++ b/extensions/typescript-language-features/src/utils/tracer.ts
@@ -10,7 +10,7 @@ import Logger from './logger';
enum Trace {
Off,
Messages,
- Verbose
+ Verbose,
}
namespace Trace {
diff --git a/extensions/typescript-language-features/src/utils/tsconfig.ts b/extensions/typescript-language-features/src/utils/tsconfig.ts
index bc2f9c232..994292dd6 100644
--- a/extensions/typescript-language-features/src/utils/tsconfig.ts
+++ b/extensions/typescript-language-features/src/utils/tsconfig.ts
@@ -8,7 +8,6 @@ import * as vscode from 'vscode';
import * as Proto from '../protocol';
import { TypeScriptServiceConfiguration } from './configuration';
-
export function isImplicitProjectConfigFile(configFileName: string) {
return configFileName.indexOf('/dev/null/') === 0;
}
diff --git a/extensions/typescript-language-features/src/utils/tsconfigProvider.ts b/extensions/typescript-language-features/src/utils/tsconfigProvider.ts
index 851786d29..7e2b85ef2 100644
--- a/extensions/typescript-language-features/src/utils/tsconfigProvider.ts
+++ b/extensions/typescript-language-features/src/utils/tsconfigProvider.ts
@@ -5,8 +5,8 @@
import * as vscode from 'vscode';
export interface TSConfig {
- path: string;
- workspaceFolder?: vscode.WorkspaceFolder;
+ readonly path: string;
+ readonly workspaceFolder?: vscode.WorkspaceFolder;
}
export default class TsConfigProvider {
diff --git a/extensions/typescript-language-features/src/utils/typeConverters.ts b/extensions/typescript-language-features/src/utils/typeConverters.ts
index 44ad7f4ae..36a20544f 100644
--- a/extensions/typescript-language-features/src/utils/typeConverters.ts
+++ b/extensions/typescript-language-features/src/utils/typeConverters.ts
@@ -41,7 +41,7 @@ export namespace Position {
export const toFileLocationRequestArgs = (file: string, position: vscode.Position): Proto.FileLocationRequestArgs => ({
file,
line: position.line + 1,
- offset: position.character + 1
+ offset: position.character + 1,
});
}
diff --git a/extensions/typescript-language-features/src/utils/versionPicker.ts b/extensions/typescript-language-features/src/utils/versionPicker.ts
index bf81cb5c4..afbda6ef2 100644
--- a/extensions/typescript-language-features/src/utils/versionPicker.ts
+++ b/extensions/typescript-language-features/src/utils/versionPicker.ts
@@ -19,7 +19,7 @@ interface MyQuickPickItem extends vscode.QuickPickItem {
enum MessageAction {
useLocal,
useBundled,
- learnMore
+ learnMore,
}
export class TypeScriptVersionPicker {
@@ -61,7 +61,7 @@ export class TypeScriptVersionPicker {
: '') + localize('useVSCodeVersionOption', 'Use VS Code\'s Version'),
description: shippedVersion.versionString,
detail: shippedVersion.pathLabel,
- id: MessageAction.useBundled
+ id: MessageAction.useBundled,
});
for (const version of this.versionProvider.localVersions) {
@@ -72,7 +72,7 @@ export class TypeScriptVersionPicker {
description: version.versionString,
detail: version.pathLabel,
id: MessageAction.useLocal,
- version: version
+ version
});
}
@@ -86,7 +86,7 @@ export class TypeScriptVersionPicker {
placeHolder: localize(
'selectTsVersion',
'Select the TypeScript version used for JavaScript and TypeScript language features'),
- ignoreFocusOut: firstRun
+ ignoreFocusOut: firstRun,
});
if (!selected) {
@@ -112,7 +112,6 @@ export class TypeScriptVersionPicker {
this._currentVersion = shippedVersion;
return { oldVersion: previousVersion, newVersion: shippedVersion };
-
case MessageAction.learnMore:
vscode.commands.executeCommand('vscode.open', vscode.Uri.parse('https://go.microsoft.com/fwlink/?linkid=839919'));
return { oldVersion: this.currentVersion };
diff --git a/extensions/typescript-language-features/src/utils/versionProvider.ts b/extensions/typescript-language-features/src/utils/versionProvider.ts
index 8787d1746..eb50009cf 100644
--- a/extensions/typescript-language-features/src/utils/versionProvider.ts
+++ b/extensions/typescript-language-features/src/utils/versionProvider.ts
@@ -87,7 +87,6 @@ export class TypeScriptVersion {
}
}
-
export class TypeScriptVersionProvider {
private readonly relativePathResolver: RelativeWorkspacePathResolver = new RelativeWorkspacePathResolver();
diff --git a/extensions/typescript-language-features/src/utils/versionStatus.ts b/extensions/typescript-language-features/src/utils/versionStatus.ts
index 450b50a2d..2b6901ee3 100644
--- a/extensions/typescript-language-features/src/utils/versionStatus.ts
+++ b/extensions/typescript-language-features/src/utils/versionStatus.ts
@@ -18,7 +18,7 @@ export default class VersionStatus {
this._onChangeEditorSub = vscode.window.onDidChangeActiveTextEditor(this.showHideStatus, this);
}
- dispose() {
+ public dispose() {
this._versionBarEntry.dispose();
this._onChangeEditorSub.dispose();
}
diff --git a/extensions/typescript-language-features/src/utils/wireProtocol.ts b/extensions/typescript-language-features/src/utils/wireProtocol.ts
index 6de9d9d5e..64450f142 100644
--- a/extensions/typescript-language-features/src/utils/wireProtocol.ts
+++ b/extensions/typescript-language-features/src/utils/wireProtocol.ts
@@ -7,29 +7,29 @@ import * as stream from 'stream';
import * as vscode from 'vscode';
import { Disposable } from './dispose';
-const DefaultSize: number = 8192;
-const ContentLength: string = 'Content-Length: ';
-const ContentLengthSize: number = Buffer.byteLength(ContentLength, 'utf8');
-const Blank: number = Buffer.from(' ', 'utf8')[0];
-const BackslashR: number = Buffer.from('\r', 'utf8')[0];
-const BackslashN: number = Buffer.from('\n', 'utf8')[0];
+const defaultSize: number = 8192;
+const contentLength: string = 'Content-Length: ';
+const contentLengthSize: number = Buffer.byteLength(contentLength, 'utf8');
+const blank: number = Buffer.from(' ', 'utf8')[0];
+const backslashR: number = Buffer.from('\r', 'utf8')[0];
+const backslashN: number = Buffer.from('\n', 'utf8')[0];
class ProtocolBuffer {
private index: number = 0;
- private buffer: Buffer = Buffer.allocUnsafe(DefaultSize);
+ private buffer: Buffer = Buffer.allocUnsafe(defaultSize);
public append(data: string | Buffer): void {
let toAppend: Buffer | null = null;
if (Buffer.isBuffer(data)) {
- toAppend = data;
+ toAppend = data;
} else {
- toAppend = Buffer.from(data, 'utf8');
+ toAppend = Buffer.from(data, 'utf8');
}
if (this.buffer.length - this.index >= toAppend.length) {
toAppend.copy(this.buffer, this.index, 0, toAppend.length);
} else {
- let newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
+ let newSize = (Math.ceil((this.index + toAppend.length) / defaultSize) + 1) * defaultSize;
if (this.index === 0) {
this.buffer = Buffer.allocUnsafe(newSize);
toAppend.copy(this.buffer, 0, 0, toAppend.length);
@@ -44,18 +44,18 @@ class ProtocolBuffer {
let result = -1;
let current = 0;
// we are utf8 encoding...
- while (current < this.index && (this.buffer[current] === Blank || this.buffer[current] === BackslashR || this.buffer[current] === BackslashN)) {
+ while (current < this.index && (this.buffer[current] === blank || this.buffer[current] === backslashR || this.buffer[current] === backslashN)) {
current++;
}
- if (this.index < current + ContentLengthSize) {
+ if (this.index < current + contentLengthSize) {
return result;
}
- current += ContentLengthSize;
+ current += contentLengthSize;
let start = current;
- while (current < this.index && this.buffer[current] !== BackslashR) {
+ while (current < this.index && this.buffer[current] !== backslashR) {
current++;
}
- if (current + 3 >= this.index || this.buffer[current + 1] !== BackslashN || this.buffer[current + 2] !== BackslashR || this.buffer[current + 3] !== BackslashN) {
+ if (current + 3 >= this.index || this.buffer[current + 1] !== backslashN || this.buffer[current + 2] !== backslashR || this.buffer[current + 3] !== backslashN) {
return result;
}
let data = this.buffer.toString('utf8', start, current);
@@ -71,7 +71,7 @@ class ProtocolBuffer {
}
let result = this.buffer.toString('utf8', 0, length);
let sourceStart = length;
- while (sourceStart < this.index && (this.buffer[sourceStart] === BackslashR || this.buffer[sourceStart] === BackslashN)) {
+ while (sourceStart < this.index && (this.buffer[sourceStart] === backslashR || this.buffer[sourceStart] === backslashN)) {
sourceStart++;
}
this.buffer.copy(this.buffer, 0, sourceStart);
diff --git a/extensions/vb/.vscodeignore b/extensions/vb/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/vb/.vscodeignore
+++ b/extensions/vb/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/vb/OSSREADME.json b/extensions/vb/OSSREADME.json
deleted file mode 100644
index 94faeb1d4..000000000
--- a/extensions/vb/OSSREADME.json
+++ /dev/null
@@ -1,23 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "textmate/asp.vb.net.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/asp.vb.net.tmbundle",
- "licenseDetail": [
- "Copyright (c) textmate-asp.vb.net.tmbundle project authors",
- "",
- "If not otherwise specified (see below), files in this folder fall under the following license: ",
- "",
- "Permission to copy, use, modify, sell and distribute this",
- "software is granted. This software is provided \"as is\" without",
- "express or implied warranty, and with no claim as to its",
- "suitability for any purpose.",
- "",
- "An exception is made for files in readable text which contain their own license information, ",
- "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added ",
- "to the base-name name of the original file, and an extension of txt, html, or similar. For example ",
- "\"tidy\" is accompanied by \"tidy-license.txt\"."
- ]
-}]
diff --git a/extensions/vb/cgmanifest.json b/extensions/vb/cgmanifest.json
new file mode 100644
index 000000000..4cb7d33e0
--- /dev/null
+++ b/extensions/vb/cgmanifest.json
@@ -0,0 +1,32 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/asp.vb.net.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/asp.vb.net.tmbundle",
+ "commitHash": "72d44550b3286d0382d7be0624140cf97857ff69"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) textmate-asp.vb.net.tmbundle project authors",
+ "",
+ "If not otherwise specified (see below), files in this folder fall under the following license: ",
+ "",
+ "Permission to copy, use, modify, sell and distribute this",
+ "software is granted. This software is provided \"as is\" without",
+ "express or implied warranty, and with no claim as to its",
+ "suitability for any purpose.",
+ "",
+ "An exception is made for files in readable text which contain their own license information, ",
+ "or files where an accompanying file exists (in the same directory) with a \"-license\" suffix added ",
+ "to the base-name name of the original file, and an extension of txt, html, or similar. For example ",
+ "\"tidy\" is accompanied by \"tidy-license.txt\"."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/vscode-api-tests/.vscode/tasks.json b/extensions/vscode-api-tests/.vscode/tasks.json
index e2a020d06..390a93a3a 100644
--- a/extensions/vscode-api-tests/.vscode/tasks.json
+++ b/extensions/vscode-api-tests/.vscode/tasks.json
@@ -1,30 +1,11 @@
-// Available variables which can be used inside of strings.
-// ${workspaceFolder}: the root folder of the team
-// ${file}: the current opened file
-// ${fileBasename}: the current opened file's basename
-// ${fileDirname}: the current opened file's dirname
-// ${fileExtname}: the current opened file's extension
-// ${cwd}: the current working directory of the spawned process
-
-// A task runner that calls a custom npm script that compiles the extension.
{
- "version": "0.1.0",
-
- // we want to run npm
+ "version": "2.0.0",
"command": "npm",
-
- // the command is a shell script
- "isShellCommand": true,
-
- // show the output window only if unrecognized errors occur.
- "showOutput": "silent",
-
- // we run the custom script "compile" as defined in package.json
- "args": ["run", "compile", "--loglevel", "silent"],
-
- // The tsc compiler is started in watching mode
- "isWatching": true,
-
- // use the standard tsc in watch mode problem matcher to find compile problems in the output.
+ "type": "shell",
+ "presentation": {
+ "reveal": "silent"
+ },
+ "args": ["run", "compile"],
+ "isBackground": true,
"problemMatcher": "$tsc-watch"
-}
\ No newline at end of file
+}
diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts
index 1913342c7..1ed84272d 100644
--- a/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts
+++ b/extensions/vscode-api-tests/src/singlefolder-tests/window.test.ts
@@ -422,6 +422,7 @@ suite('window namespace tests', () => {
canPickMany: true
});
const first = new Promise(resolve => resolves.push(resolve));
+ await new Promise(resolve => setTimeout(resolve, 10)); // Allow UI to update.
await commands.executeCommand('workbench.action.quickOpenSelectNext');
assert.equal(await first, 'eins');
await commands.executeCommand('workbench.action.quickPickManyToggle');
@@ -520,6 +521,7 @@ suite('window namespace tests', () => {
test('showWorkspaceFolderPick', async function () {
const p = window.showWorkspaceFolderPick(undefined);
+ await timeout(10);
await commands.executeCommand('workbench.action.acceptSelectedQuickOpenItem');
try {
await p;
@@ -696,3 +698,7 @@ suite('window namespace tests', () => {
});
});
});
+
+async function timeout(ms = 0): Promise {
+ return new Promise(resolve => setTimeout(() => resolve(), ms));
+}
\ No newline at end of file
diff --git a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts
index 7af7b00b6..8921b4aee 100644
--- a/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts
+++ b/extensions/vscode-api-tests/src/singlefolder-tests/workspace.test.ts
@@ -520,8 +520,9 @@ suite('workspace-namespace', () => {
});
assert.equal(results.length, 1);
- assert(results[0].preview.text.indexOf('foo') >= 0);
- assert.equal(vscode.workspace.asRelativePath(results[0].uri), '10linefile.ts');
+ const match = results[0];
+ assert(match.preview.text.indexOf('foo') >= 0);
+ assert.equal(vscode.workspace.asRelativePath(match.uri), '10linefile.ts');
});
test('findTextInFiles, cancellation', async () => {
diff --git a/extensions/vscode-api-tests/testWorkspace/image.png b/extensions/vscode-api-tests/testWorkspace/image.png
index ff8b42295..15b462975 100644
Binary files a/extensions/vscode-api-tests/testWorkspace/image.png and b/extensions/vscode-api-tests/testWorkspace/image.png differ
diff --git a/extensions/vscode-api-tests/testWorkspace/sub/image.png b/extensions/vscode-api-tests/testWorkspace/sub/image.png
index ff8b42295..15b462975 100644
Binary files a/extensions/vscode-api-tests/testWorkspace/sub/image.png and b/extensions/vscode-api-tests/testWorkspace/sub/image.png differ
diff --git a/extensions/vscode-colorize-tests/.vscode/tasks.json b/extensions/vscode-colorize-tests/.vscode/tasks.json
index 3b6c357da..390a93a3a 100644
--- a/extensions/vscode-colorize-tests/.vscode/tasks.json
+++ b/extensions/vscode-colorize-tests/.vscode/tasks.json
@@ -1,31 +1,11 @@
-// Available variables which can be used inside of strings.
-// ${workspaceFolder}: the root folder of the team
-// ${file}: the current opened file
-// ${relativeFile}: the current opened file relative to cwd
-// ${fileBasename}: the current opened file's basename
-// ${fileDirname}: the current opened file's dirname
-// ${fileExtname}: the current opened file's extension
-// ${cwd}: the current working directory of the spawned process
-
-// A task runner that calls a custom npm script that compiles the extension.
{
- "version": "0.1.0",
-
- // we want to run npm
+ "version": "2.0.0",
"command": "npm",
-
- // the command is a shell script
- "isShellCommand": true,
-
- // show the output window only if unrecognized errors occur.
- "showOutput": "silent",
-
- // we run the custom script "compile" as defined in package.json
- "args": ["run", "compile", "--loglevel", "silent"],
-
- // The tsc compiler is started in watching mode
- "isWatching": true,
-
- // use the standard tsc in watch mode problem matcher to find compile problems in the output.
+ "type": "shell",
+ "presentation": {
+ "reveal": "silent"
+ },
+ "args": ["run", "compile"],
+ "isBackground": true,
"problemMatcher": "$tsc-watch"
-}
\ No newline at end of file
+}
diff --git a/extensions/xml/.vscodeignore b/extensions/xml/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/xml/.vscodeignore
+++ b/extensions/xml/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/xml/OSSREADME.json b/extensions/xml/OSSREADME.json
deleted file mode 100644
index accbe0749..000000000
--- a/extensions/xml/OSSREADME.json
+++ /dev/null
@@ -1,10 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "atom/language-xml",
- "version": "0.0.0",
- "license": "MIT",
- "repositoryURL": "https://github.com/atom/language-xml",
- "description": "The files syntaxes/xml.json and syntaxes/xsl.json were derived from the Atom package https://github.com/atom/language-xml which were originally converted from the TextMate bundle https://github.com/textmate/xml.tmbundle."
-
-}]
diff --git a/extensions/xml/cgmanifest.json b/extensions/xml/cgmanifest.json
new file mode 100644
index 000000000..b209abe6e
--- /dev/null
+++ b/extensions/xml/cgmanifest.json
@@ -0,0 +1,18 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "atom/language-xml",
+ "repositoryUrl": "https://github.com/atom/language-xml",
+ "commitHash": "7bc75dfe779ad5b35d9bf4013d9181864358cb49"
+ }
+ },
+ "license": "MIT",
+ "description": "The files syntaxes/xml.json and syntaxes/xsl.json were derived from the Atom package https://github.com/atom/language-xml which were originally converted from the TextMate bundle https://github.com/textmate/xml.tmbundle.",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/yaml/.vscodeignore b/extensions/yaml/.vscodeignore
index e51fa33d1..0a622e7e3 100644
--- a/extensions/yaml/.vscodeignore
+++ b/extensions/yaml/.vscodeignore
@@ -1,2 +1,2 @@
test/**
-OSSREADME.json
\ No newline at end of file
+cgmanifest.json
diff --git a/extensions/yaml/OSSREADME.json b/extensions/yaml/OSSREADME.json
deleted file mode 100644
index bcdae2a4c..000000000
--- a/extensions/yaml/OSSREADME.json
+++ /dev/null
@@ -1,28 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-[{
- "name": "textmate/yaml.tmbundle",
- "version": "0.0.0",
- "license": "TextMate Bundle License",
- "repositoryURL": "https://github.com/textmate/yaml.tmbundle",
- "licenseDetail": [
- "Copyright (c) 2015 FichteFoll ",
- "",
- "Permission is hereby granted, free of charge, to any person obtaining a copy",
- "of this software and associated documentation files (the \"Software\"), to deal",
- "in the Software without restriction, including without limitation the rights",
- "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
- "copies of the Software, and to permit persons to whom the Software is",
- "furnished to do so, subject to the following conditions:",
- "",
- "The above copyright notice and this permission notice shall be included in all",
- "copies or substantial portions of the Software.",
- "",
- "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
- "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
- "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
- "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
- "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
- "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
- ]
-}]
diff --git a/extensions/yaml/cgmanifest.json b/extensions/yaml/cgmanifest.json
new file mode 100644
index 000000000..80ba8ae52
--- /dev/null
+++ b/extensions/yaml/cgmanifest.json
@@ -0,0 +1,37 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "textmate/yaml.tmbundle",
+ "repositoryUrl": "https://github.com/textmate/yaml.tmbundle",
+ "commitHash": "e54ceae3b719506dba7e481a77cea4a8b576ae46"
+ }
+ },
+ "licenseDetail": [
+ "Copyright (c) 2015 FichteFoll ",
+ "",
+ "Permission is hereby granted, free of charge, to any person obtaining a copy",
+ "of this software and associated documentation files (the \"Software\"), to deal",
+ "in the Software without restriction, including without limitation the rights",
+ "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell",
+ "copies of the Software, and to permit persons to whom the Software is",
+ "furnished to do so, subject to the following conditions:",
+ "",
+ "The above copyright notice and this permission notice shall be included in all",
+ "copies or substantial portions of the Software.",
+ "",
+ "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR",
+ "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,",
+ "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE",
+ "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER",
+ "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,",
+ "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
+ ],
+ "license": "TextMate Bundle License",
+ "version": "0.0.0"
+ }
+ ],
+ "version": 1
+}
diff --git a/extensions/yarn.lock b/extensions/yarn.lock
index 0630b4a19..7dfb337bf 100644
--- a/extensions/yarn.lock
+++ b/extensions/yarn.lock
@@ -2,7 +2,7 @@
# yarn lockfile v1
-typescript@3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.1.3.tgz#01b70247a6d3c2467f70c45795ef5ea18ce191d5"
- integrity sha512-+81MUSyX+BaSo+u2RbozuQk/UWx6hfG0a5gHu4ANEM4sU96XbuIyAB+rWBW1u70c6a5QuZfuYICn3s2UjuHUpA==
+typescript@3.2.0-rc:
+ version "3.2.0-rc"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.2.0-rc.tgz#7c3816f1c761b096f4f1712382e872f4da8f263e"
+ integrity sha512-RgKDOpEdbU9dAkB4TzxWy46wiyNUKQo0NM0bB7WfvEFw50yu046ldQXpOUYMUTLIAHnToOCtHsu39MYE8o6NCw==
diff --git a/package.json b/package.json
index 042693afa..cdda5dbcb 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "code-oss-dev",
- "version": "1.29.0",
- "distro": "eceef408e99ace55c0a17a2a90b88e46a8c9090a",
+ "version": "1.30.0",
+ "distro": "cedfc514fbce202dad3ec5f86033796d70369b2a",
"author": {
"name": "Microsoft Corporation"
},
@@ -28,7 +28,6 @@
},
"dependencies": {
"applicationinsights": "1.0.6",
- "electron-proxy-agent": "^1.0.2",
"fast-plist": "0.1.2",
"gc-signals": "^0.0.1",
"getmac": "1.4.1",
@@ -46,14 +45,15 @@
"semver": "^5.5.0",
"spdlog": "0.7.2",
"sudo-prompt": "8.2.0",
- "v8-inspect-profiler": "^0.0.8",
- "vscode-chokidar": "1.6.4",
- "vscode-debugprotocol": "1.32.0",
+ "v8-inspect-profiler": "^0.0.13",
+ "vscode-chokidar": "1.6.5",
+ "vscode-debugprotocol": "1.33.0-pre.0",
"vscode-nsfw": "1.1.1",
+ "vscode-proxy-agent": "0.1.1",
"vscode-ripgrep": "^1.2.4",
- "vscode-sqlite3": "4.0.2",
+ "vscode-sqlite3": "4.0.5",
"vscode-textmate": "^4.0.1",
- "vscode-xterm": "3.9.0-beta11",
+ "vscode-xterm": "3.9.0-beta13",
"winreg": "^1.2.4",
"yauzl": "^2.9.1",
"yazl": "^2.4.3"
@@ -124,9 +124,10 @@
"sinon": "^1.17.2",
"source-map": "^0.4.4",
"ts-loader": "^4.4.2",
- "tslint": "^5.9.1",
- "typescript": "3.1.1",
+ "tslint": "^5.11.0",
+ "typescript": "3.1.4",
"typescript-formatter": "7.1.0",
+ "typescript-tslint-plugin": "^0.0.7",
"uglify-es": "^3.0.18",
"underscore": "^1.8.2",
"vinyl": "^0.4.5",
diff --git a/product.json b/product.json
index e95e36c0e..eb6526c2d 100644
--- a/product.json
+++ b/product.json
@@ -17,5 +17,8 @@
"win32ShellNameShort": "C&ode - OSS",
"darwinBundleIdentifier": "com.visualstudio.code.oss",
"reportIssueUrl": "https://github.com/Microsoft/vscode/issues/new",
- "urlProtocol": "code-oss"
+ "urlProtocol": "code-oss",
+ "extensionAllowedProposedApi": [
+ "ms-vscode.references-view"
+ ]
}
diff --git a/resources/linux/code.png b/resources/linux/code.png
index a7b64b954..8d8646f82 100644
Binary files a/resources/linux/code.png and b/resources/linux/code.png differ
diff --git a/resources/linux/snap/electron-launch b/resources/linux/snap/electron-launch
index 65c91d6fc..6fdd68a34 100644
--- a/resources/linux/snap/electron-launch
+++ b/resources/linux/snap/electron-launch
@@ -1,3 +1,6 @@
#!/bin/sh
-exec "$@" --executed-from="$(pwd)" --pid=$$
+# Create $XDG_RUNTIME_DIR if it doesn't exist
+[ -n "$XDG_RUNTIME_DIR" ] && mkdir -p $XDG_RUNTIME_DIR -m 700
+
+exec "$@"
diff --git a/resources/linux/snap/snapUpdate.sh b/resources/linux/snap/snapUpdate.sh
new file mode 100644
index 000000000..d9299ca4d
--- /dev/null
+++ b/resources/linux/snap/snapUpdate.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+sleep 2
+@@NAME@@
\ No newline at end of file
diff --git a/resources/linux/snap/snapcraft.yaml b/resources/linux/snap/snapcraft.yaml
index e8a5d48fd..e07723086 100644
--- a/resources/linux/snap/snapcraft.yaml
+++ b/resources/linux/snap/snapcraft.yaml
@@ -15,6 +15,7 @@ parts:
source: .
stage-packages:
- libasound2
+ - libc++1
- libgconf2-4
- libnotify4
- libnspr4
@@ -23,20 +24,21 @@ parts:
- libpulse0
- libxss1
- libxtst6
- # desktop-gtk2 deps below
- libxkbcommon0
- - libgtk2.0-0
- # - unity-gtk2-module
+ - libgtk-3-0
+ - libgdk-pixbuf2.0-0
+ - libglib2.0-bin
+ - unity-gtk2-module
- libappindicator1
+ - xdg-user-dirs
+ - libsecret-1-0
+ # TODO@joao @Tyriar check these deps
+ # - libatomic1
+ # - libgtk2.0-bin
prime:
- -usr/share/dh-python
- electron-launch:
- plugin: dump
- source: .
- organize:
- electron-launch: bin/electron-launch
apps:
@@NAME@@:
- command: bin/electron-launch ${SNAP}/usr/share/@@NAME@@/bin/@@NAME@@
+ command: electron-launch ${SNAP}/usr/share/@@NAME@@/bin/@@NAME@@
desktop: usr/share/applications/@@NAME@@.desktop
\ No newline at end of file
diff --git a/resources/win32/code_150x150.png b/resources/win32/code_150x150.png
index 72fc85119..55e9f8f30 100644
Binary files a/resources/win32/code_150x150.png and b/resources/win32/code_150x150.png differ
diff --git a/scripts/test-integration.bat b/scripts/test-integration.bat
index ba810088f..fc13a2d99 100644
--- a/scripts/test-integration.bat
+++ b/scripts/test-integration.bat
@@ -5,6 +5,10 @@ pushd %~dp0\..
set VSCODEUSERDATADIR=%TMP%\vscodeuserfolder-%RANDOM%-%TIME:~6,5%
+:: Integration & performance tests in AMD
+call .\scripts\test.bat --runGlob **\*.integrationTest.js %*
+if %errorlevel% neq 0 exit /b %errorlevel%
+
:: Tests in the extension host
REM call .\scripts\code.bat %~dp0\..\extensions\vscode-api-tests\testWorkspace --extensionDevelopmentPath=%~dp0\..\extensions\vscode-api-tests --extensionTestsPath=%~dp0\..\extensions\vscode-api-tests\out\singlefolder-tests --disableExtensions --user-data-dir=%VSCODEUSERDATADIR%
REM if %errorlevel% neq 0 exit /b %errorlevel%
@@ -18,10 +22,6 @@ if %errorlevel% neq 0 exit /b %errorlevel%
call .\scripts\code.bat $%~dp0\..\extensions\emmet\test-fixtures --extensionDevelopmentPath=%~dp0\..\extensions\emmet --extensionTestsPath=%~dp0\..\extensions\emmet\out\test --disableExtensions --user-data-dir=%VSCODEUSERDATADIR% .
if %errorlevel% neq 0 exit /b %errorlevel%
-:: Integration & performance tests in AMD
-call .\scripts\test.bat --runGlob **\*.integrationTest.js %*
-if %errorlevel% neq 0 exit /b %errorlevel%
-
# Tests in commonJS (HTML, CSS, JSON language server tests...)
call .\scripts\node-electron.bat .\node_modules\mocha\bin\_mocha .\extensions\*\server\out\test\**\*.test.js
if %errorlevel% neq 0 exit /b %errorlevel%
diff --git a/scripts/test-integration.sh b/scripts/test-integration.sh
index d2225c447..a51f3ee17 100755
--- a/scripts/test-integration.sh
+++ b/scripts/test-integration.sh
@@ -12,6 +12,9 @@ fi
cd $ROOT
+# Integration tests in AMD
+./scripts/test.sh --runGlob **/*.integrationTest.js "$@"
+
# Tests in the extension host
./scripts/code.sh $ROOT/extensions/vscode-api-tests/testWorkspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/singlefolder-tests --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started
./scripts/code.sh $ROOT/extensions/vscode-api-tests/testworkspace.code-workspace --extensionDevelopmentPath=$ROOT/extensions/vscode-api-tests --extensionTestsPath=$ROOT/extensions/vscode-api-tests/out/workspace-tests --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started
@@ -22,9 +25,6 @@ mkdir $ROOT/extensions/emmet/test-fixtures
./scripts/code.sh $ROOT/extensions/emmet/test-fixtures --extensionDevelopmentPath=$ROOT/extensions/emmet --extensionTestsPath=$ROOT/extensions/emmet/out/test --disableExtensions --user-data-dir=$VSCODEUSERDATADIR --skip-getting-started .
rm -r $ROOT/extensions/emmet/test-fixtures
-# Integration tests in AMD
-./scripts/test.sh --runGlob **/*.integrationTest.js "$@"
-
# Tests in commonJS
cd $ROOT/extensions/css-language-features/server && $ROOT/scripts/node-electron.sh test/index.js
cd $ROOT/extensions/html-language-features/server && $ROOT/scripts/node-electron.sh test/index.js
diff --git a/src/main.js b/src/main.js
index bc430b9c6..a551417c8 100644
--- a/src/main.js
+++ b/src/main.js
@@ -81,7 +81,7 @@ function onReady() {
nlsConfiguration = Promise.resolve(undefined);
}
- // We first need to test a user defined locale. If it fails we try the app locale.
+ // First, we need to test a user defined locale. If it fails we try the app locale.
// If that fails we fall back to English.
nlsConfiguration.then((nlsConfig) => {
@@ -404,7 +404,7 @@ function rimraf(location) {
});
}
-// Language tags are case insensitve however an amd loader is case sensitive
+// Language tags are case insensitive however an amd loader is case sensitive
// To make this work on case preserving & insensitive FS we do the following:
// the language bundles have lower case language tags and we always lower case
// the locale we receive from the user or OS.
@@ -605,4 +605,4 @@ function getNLSConfiguration(locale) {
return defaultResult(locale);
}
}
-//#endregion
\ No newline at end of file
+//#endregion
diff --git a/src/tsconfig.monaco.json b/src/tsconfig.monaco.json
index 9e295f406..1bf4732a4 100644
--- a/src/tsconfig.monaco.json
+++ b/src/tsconfig.monaco.json
@@ -1,5 +1,4 @@
{
- "$schema": "https://schemastore.azurewebsites.net/schemas/json/tsconfig.json",
"compilerOptions": {
"noEmit": true,
"module": "amd",
diff --git a/src/tsconfig.strictNullChecks.json b/src/tsconfig.strictNullChecks.json
index 8c0d4a340..d537b38d2 100644
--- a/src/tsconfig.strictNullChecks.json
+++ b/src/tsconfig.strictNullChecks.json
@@ -27,11 +27,15 @@
"./vs/base/browser/ui/centered/centeredViewLayout.ts",
"./vs/base/browser/ui/contextview/contextview.ts",
"./vs/base/browser/ui/countBadge/countBadge.ts",
+ "./vs/base/browser/ui/grid/grid.ts",
"./vs/base/browser/ui/grid/gridview.ts",
"./vs/base/browser/ui/highlightedlabel/highlightedLabel.ts",
"./vs/base/browser/ui/iconLabel/iconLabel.ts",
"./vs/base/browser/ui/keybindingLabel/keybindingLabel.ts",
"./vs/base/browser/ui/list/list.ts",
+ "./vs/base/browser/ui/list/listPaging.ts",
+ "./vs/base/browser/ui/list/listView.ts",
+ "./vs/base/browser/ui/list/listWidget.ts",
"./vs/base/browser/ui/list/rangeMap.ts",
"./vs/base/browser/ui/list/rowCache.ts",
"./vs/base/browser/ui/list/splice.ts",
@@ -49,20 +53,32 @@
"./vs/base/browser/ui/scrollbar/verticalScrollbar.ts",
"./vs/base/browser/ui/splitview/panelview.ts",
"./vs/base/browser/ui/splitview/splitview.ts",
+ "./vs/base/browser/ui/tree/abstractTree.ts",
+ "./vs/base/browser/ui/tree/dataTree.ts",
+ "./vs/base/browser/ui/tree/indexTree.ts",
+ "./vs/base/browser/ui/tree/indexTreeModel.ts",
+ "./vs/base/browser/ui/tree/objectTree.ts",
+ "./vs/base/browser/ui/tree/objectTreeModel.ts",
"./vs/base/browser/ui/tree/tree.ts",
"./vs/base/browser/ui/widget.ts",
"./vs/base/common/json.ts",
"./vs/base/common/jsonEdit.ts",
"./vs/base/common/jsonFormatter.ts",
+ "./vs/base/common/paths.ts",
+ "./vs/base/common/uriIpc.ts",
"./vs/base/node/console.ts",
"./vs/base/node/crypto.ts",
"./vs/base/node/decoder.ts",
+ "./vs/base/node/encoding.ts",
+ "./vs/base/node/extfs.ts",
"./vs/base/node/flow.ts",
"./vs/base/node/id.ts",
"./vs/base/node/paths.ts",
+ "./vs/base/node/pfs.ts",
"./vs/base/node/ports.ts",
"./vs/base/node/processes.ts",
"./vs/base/node/proxy.ts",
+ "./vs/base/node/ps.ts",
"./vs/base/node/request.ts",
"./vs/base/node/stats.ts",
"./vs/base/node/storage.ts",
@@ -70,30 +86,46 @@
"./vs/base/parts/contextmenu/common/contextmenu.ts",
"./vs/base/parts/contextmenu/electron-browser/contextmenu.ts",
"./vs/base/parts/contextmenu/electron-main/contextmenu.ts",
+ "./vs/base/parts/ipc/electron-browser/ipc.electron-browser.ts",
+ "./vs/base/parts/ipc/electron-main/ipc.electron-main.ts",
"./vs/base/parts/ipc/node/ipc.cp.ts",
+ "./vs/base/parts/ipc/node/ipc.electron.ts",
"./vs/base/parts/ipc/node/ipc.net.ts",
"./vs/base/parts/ipc/node/ipc.ts",
"./vs/base/parts/ipc/test/node/testApp.ts",
"./vs/base/parts/ipc/test/node/testService.ts",
"./vs/base/parts/quickopen/common/quickOpen.ts",
+ "./vs/base/parts/quickopen/common/quickOpenScorer.ts",
"./vs/base/test/browser/ui/grid/util.ts",
"./vs/base/test/common/json.test.ts",
"./vs/base/test/common/jsonEdit.test.ts",
"./vs/base/test/common/jsonFormatter.test.ts",
+ "./vs/base/test/common/paths.test.ts",
"./vs/base/test/common/utils.ts",
"./vs/base/test/node/processes/fixtures/fork.ts",
"./vs/base/test/node/processes/fixtures/fork_large.ts",
"./vs/base/test/node/uri.test.perf.ts",
+ "./vs/base/test/node/utils.ts",
"./vs/base/worker/defaultWorkerFactory.ts",
"./vs/base/worker/workerMain.ts",
"./vs/code/code.main.ts",
"./vs/code/electron-browser/issue/issueReporterModel.ts",
"./vs/code/electron-browser/issue/issueReporterPage.ts",
"./vs/code/electron-browser/issue/issueReporterUtil.ts",
+ "./vs/code/electron-browser/processExplorer/processExplorerMain.ts",
+ "./vs/code/electron-browser/sharedProcess/contrib/contributions.ts",
+ "./vs/code/electron-browser/sharedProcess/contrib/languagePackCachedDataCleaner.ts",
+ "./vs/code/electron-browser/sharedProcess/contrib/nodeCachedDataCleaner.ts",
"./vs/code/electron-main/auth.ts",
"./vs/code/electron-main/keyboard.ts",
+ "./vs/code/electron-main/logUploader.ts",
+ "./vs/code/electron-main/sharedProcess.ts",
"./vs/code/electron-main/theme.ts",
+ "./vs/code/node/cli.ts",
+ "./vs/code/node/paths.ts",
"./vs/code/node/shellEnv.ts",
+ "./vs/code/node/wait.ts",
+ "./vs/code/node/windowsFinder.ts",
"./vs/editor/browser/config/charWidthReader.ts",
"./vs/editor/browser/config/configuration.ts",
"./vs/editor/browser/config/elementSizeObserver.ts",
@@ -259,9 +291,11 @@
"./vs/editor/contrib/codeAction/codeActionModel.ts",
"./vs/editor/contrib/codeAction/codeActionTrigger.ts",
"./vs/editor/contrib/codeAction/lightBulbWidget.ts",
+ "./vs/editor/contrib/codelens/codelens.ts",
"./vs/editor/contrib/colorPicker/color.ts",
"./vs/editor/contrib/colorPicker/colorDetector.ts",
"./vs/editor/contrib/colorPicker/colorPickerModel.ts",
+ "./vs/editor/contrib/colorPicker/colorPickerWidget.ts",
"./vs/editor/contrib/comment/blockCommentCommand.ts",
"./vs/editor/contrib/comment/comment.ts",
"./vs/editor/contrib/comment/lineCommentCommand.ts",
@@ -288,29 +322,41 @@
"./vs/editor/contrib/folding/test/indentRangeProvider.test.ts",
"./vs/editor/contrib/folding/test/syntaxFold.test.ts",
"./vs/editor/contrib/fontZoom/fontZoom.ts",
+ "./vs/editor/contrib/format/format.ts",
+ "./vs/editor/contrib/format/formattingEdit.ts",
"./vs/editor/contrib/goToDefinition/clickLinkGesture.ts",
"./vs/editor/contrib/goToDefinition/goToDefinition.ts",
+ "./vs/editor/contrib/gotoError/gotoError.ts",
+ "./vs/editor/contrib/gotoError/gotoErrorWidget.ts",
"./vs/editor/contrib/hover/getHover.ts",
"./vs/editor/contrib/hover/hoverOperation.ts",
"./vs/editor/contrib/hover/hoverWidgets.ts",
"./vs/editor/contrib/hover/modesGlyphHover.ts",
+ "./vs/editor/contrib/inPlaceReplace/inPlaceReplace.ts",
"./vs/editor/contrib/inPlaceReplace/inPlaceReplaceCommand.ts",
"./vs/editor/contrib/indentation/indentUtils.ts",
+ "./vs/editor/contrib/indentation/indentation.ts",
"./vs/editor/contrib/linesOperations/copyLinesCommand.ts",
"./vs/editor/contrib/linesOperations/deleteLinesCommand.ts",
+ "./vs/editor/contrib/linesOperations/linesOperations.ts",
"./vs/editor/contrib/linesOperations/moveLinesCommand.ts",
"./vs/editor/contrib/linesOperations/sortLinesCommand.ts",
"./vs/editor/contrib/links/getLinks.ts",
"./vs/editor/contrib/links/links.ts",
"./vs/editor/contrib/markdown/markdownRenderer.ts",
"./vs/editor/contrib/message/messageController.ts",
+ "./vs/editor/contrib/parameterHints/parameterHints.ts",
+ "./vs/editor/contrib/parameterHints/parameterHintsWidget.ts",
"./vs/editor/contrib/parameterHints/provideSignatureHelp.ts",
"./vs/editor/contrib/quickOpen/quickOpen.ts",
"./vs/editor/contrib/referenceSearch/referencesModel.ts",
"./vs/editor/contrib/rename/rename.ts",
"./vs/editor/contrib/rename/renameInputField.ts",
+ "./vs/editor/contrib/smartSelect/smartSelect.ts",
+ "./vs/editor/contrib/smartSelect/tokenSelectionSupport.ts",
"./vs/editor/contrib/smartSelect/tokenTree.ts",
"./vs/editor/contrib/snippet/snippetParser.ts",
+ "./vs/editor/contrib/snippet/snippetVariables.ts",
"./vs/editor/contrib/suggest/suggest.ts",
"./vs/editor/contrib/suggest/wordContextKey.ts",
"./vs/editor/contrib/suggest/wordDistance.ts",
@@ -335,6 +381,7 @@
"./vs/editor/test/browser/controller/imeTester.ts",
"./vs/editor/test/browser/editorTestServices.ts",
"./vs/editor/test/browser/testCodeEditor.ts",
+ "./vs/editor/test/browser/testCommand.ts",
"./vs/editor/test/browser/view/minimapFontCreator.ts",
"./vs/editor/test/common/commentMode.ts",
"./vs/editor/test/common/core/viewLineToken.ts",
@@ -357,7 +404,9 @@
"./vs/nls.mock.ts",
"./vs/platform/actions/common/actions.ts",
"./vs/platform/actions/common/menu.ts",
+ "./vs/platform/actions/common/menuService.ts",
"./vs/platform/backup/common/backup.ts",
+ "./vs/platform/backup/electron-main/backupMainService.ts",
"./vs/platform/broadcast/electron-browser/broadcastService.ts",
"./vs/platform/clipboard/common/clipboardService.ts",
"./vs/platform/clipboard/electron-browser/clipboardService.ts",
@@ -367,12 +416,19 @@
"./vs/platform/configuration/common/configurationRegistry.ts",
"./vs/platform/contextkey/browser/contextKeyService.ts",
"./vs/platform/contextkey/common/contextkey.ts",
+ "./vs/platform/diagnostics/electron-main/diagnosticsService.ts",
"./vs/platform/dialogs/common/dialogs.ts",
+ "./vs/platform/dialogs/node/dialogIpc.ts",
"./vs/platform/dialogs/node/dialogService.ts",
"./vs/platform/download/common/download.ts",
+ "./vs/platform/download/node/downloadIpc.ts",
+ "./vs/platform/download/node/downloadService.ts",
+ "./vs/platform/driver/electron-main/driver.ts",
+ "./vs/platform/driver/node/driver.ts",
"./vs/platform/editor/common/editor.ts",
"./vs/platform/environment/common/environment.ts",
"./vs/platform/environment/node/argv.ts",
+ "./vs/platform/environment/node/environmentService.ts",
"./vs/platform/extensionManagement/common/extensionEnablementService.ts",
"./vs/platform/extensionManagement/common/extensionManagement.ts",
"./vs/platform/extensionManagement/common/extensionManagementUtil.ts",
@@ -380,12 +436,14 @@
"./vs/platform/extensionManagement/node/extensionLifecycle.ts",
"./vs/platform/extensionManagement/node/extensionManagementIpc.ts",
"./vs/platform/extensionManagement/node/extensionManagementUtil.ts",
+ "./vs/platform/extensionManagement/node/extensionsManifestCache.ts",
"./vs/platform/extensions/common/extensionHost.ts",
"./vs/platform/extensions/common/extensions.ts",
"./vs/platform/extensions/node/extensionValidator.ts",
"./vs/platform/files/common/files.ts",
"./vs/platform/files/node/files.ts",
"./vs/platform/history/common/history.ts",
+ "./vs/platform/history/electron-main/historyMainService.ts",
"./vs/platform/instantiation/common/descriptors.ts",
"./vs/platform/instantiation/common/extensions.ts",
"./vs/platform/instantiation/common/graph.ts",
@@ -396,6 +454,8 @@
"./vs/platform/integrity/common/integrity.ts",
"./vs/platform/integrity/node/integrityServiceImpl.ts",
"./vs/platform/issue/common/issue.ts",
+ "./vs/platform/issue/electron-main/issueService.ts",
+ "./vs/platform/issue/node/issueIpc.ts",
"./vs/platform/jsonschemas/common/jsonContributionRegistry.ts",
"./vs/platform/keybinding/common/abstractKeybindingService.ts",
"./vs/platform/keybinding/common/keybinding.ts",
@@ -406,19 +466,24 @@
"./vs/platform/keybinding/test/common/mockKeybindingService.ts",
"./vs/platform/label/common/label.ts",
"./vs/platform/label/electron-browser/label.contribution.ts",
+ "./vs/platform/launch/electron-main/launchService.ts",
"./vs/platform/lifecycle/common/lifecycle.ts",
"./vs/platform/lifecycle/electron-browser/lifecycleService.ts",
"./vs/platform/lifecycle/electron-main/lifecycleMain.ts",
"./vs/platform/localizations/common/localizations.ts",
+ "./vs/platform/localizations/node/localizationsIpc.ts",
"./vs/platform/log/common/bufferLog.ts",
"./vs/platform/log/common/log.ts",
+ "./vs/platform/log/node/logIpc.ts",
"./vs/platform/log/node/spdlogService.ts",
"./vs/platform/markers/common/markerService.ts",
"./vs/platform/markers/common/markers.ts",
"./vs/platform/menubar/common/menubar.ts",
+ "./vs/platform/menubar/node/menubarIpc.ts",
"./vs/platform/node/minimalTranslations.ts",
"./vs/platform/node/package.ts",
"./vs/platform/node/product.ts",
+ "./vs/platform/node/zip.ts",
"./vs/platform/notification/common/notification.ts",
"./vs/platform/notification/test/common/testNotificationService.ts",
"./vs/platform/opener/common/opener.ts",
@@ -427,20 +492,33 @@
"./vs/platform/quickOpen/common/quickOpen.ts",
"./vs/platform/quickinput/common/quickInput.ts",
"./vs/platform/registry/common/platform.ts",
+ "./vs/platform/remote/common/remoteAuthorityResolver.ts",
+ "./vs/platform/remote/common/remoteHosts.ts",
+ "./vs/platform/remote/node/remoteAgentConnection.ts",
+ "./vs/platform/remote/node/remoteAgentFileSystemChannel.ts",
+ "./vs/platform/remote/node/remoteAuthorityResolverChannel.ts",
+ "./vs/platform/remote/node/remoteAuthorityResolverService.ts",
"./vs/platform/request/electron-browser/requestService.ts",
"./vs/platform/request/electron-main/requestService.ts",
"./vs/platform/request/node/request.ts",
"./vs/platform/request/node/requestService.ts",
+ "./vs/platform/search/common/replace.ts",
"./vs/platform/search/common/search.ts",
+ "./vs/platform/search/test/common/replace.test.ts",
"./vs/platform/state/common/state.ts",
+ "./vs/platform/state/node/stateService.ts",
"./vs/platform/statusbar/common/statusbar.ts",
"./vs/platform/storage/common/storage.ts",
"./vs/platform/storage/common/storageLegacyService.ts",
+ "./vs/platform/storage/node/storageService.ts",
"./vs/platform/telemetry/browser/errorTelemetry.ts",
"./vs/platform/telemetry/common/telemetry.ts",
"./vs/platform/telemetry/common/telemetryService.ts",
"./vs/platform/telemetry/common/telemetryUtils.ts",
+ "./vs/platform/telemetry/node/commonProperties.ts",
+ "./vs/platform/telemetry/node/telemetryIpc.ts",
"./vs/platform/telemetry/node/telemetryNodeUtils.ts",
+ "./vs/platform/telemetry/node/workbenchCommonProperties.ts",
"./vs/platform/theme/common/colorRegistry.ts",
"./vs/platform/theme/common/styler.ts",
"./vs/platform/theme/common/themeService.ts",
@@ -449,19 +527,25 @@
"./vs/platform/update/electron-main/abstractUpdateService.ts",
"./vs/platform/update/electron-main/updateService.darwin.ts",
"./vs/platform/update/electron-main/updateService.linux.ts",
+ "./vs/platform/update/electron-main/updateService.snap.ts",
"./vs/platform/update/node/update.config.contribution.ts",
+ "./vs/platform/update/node/updateIpc.ts",
"./vs/platform/url/common/url.ts",
"./vs/platform/url/common/urlService.ts",
"./vs/platform/url/electron-main/electronUrlListener.ts",
+ "./vs/platform/url/node/urlIpc.ts",
"./vs/platform/widget/common/contextScopedWidget.ts",
"./vs/platform/windows/common/windows.ts",
"./vs/platform/windows/electron-browser/windowService.ts",
"./vs/platform/windows/electron-main/windows.ts",
+ "./vs/platform/windows/node/windowsIpc.ts",
"./vs/platform/workbench/common/contextkeys.ts",
"./vs/platform/workspace/common/workspace.ts",
"./vs/platform/workspace/test/common/testWorkspace.ts",
"./vs/platform/workspaces/common/workspaces.ts",
+ "./vs/platform/workspaces/electron-main/workspacesMainService.ts",
"./vs/platform/workspaces/node/workspaces.ts",
+ "./vs/platform/workspaces/node/workspacesIpc.ts",
"./vs/vscode.d.ts",
"./vs/vscode.proposed.d.ts",
"./vs/workbench/api/node/extHostExtensionActivator.ts",
@@ -474,6 +558,7 @@
"./vs/workbench/browser/actions/toggleTabsVisibility.ts",
"./vs/workbench/browser/actions/toggleZenMode.ts",
"./vs/workbench/browser/part.ts",
+ "./vs/workbench/browser/parts/editor/editorWidgets.ts",
"./vs/workbench/browser/parts/notifications/notificationsAlerts.ts",
"./vs/workbench/browser/parts/quickinput/quickInputUtils.ts",
"./vs/workbench/browser/parts/quickopen/quickopen.ts",
@@ -491,6 +576,7 @@
"./vs/workbench/common/theme.ts",
"./vs/workbench/common/viewlet.ts",
"./vs/workbench/common/views.ts",
+ "./vs/workbench/parts/cli/electron-browser/cli.contribution.ts",
"./vs/workbench/parts/codeEditor/browser/menuPreventer.ts",
"./vs/workbench/parts/codeEditor/browser/simpleEditorOptions.ts",
"./vs/workbench/parts/codeEditor/electron-browser/accessibility.ts",
@@ -510,10 +596,13 @@
"./vs/workbench/parts/emmet/electron-browser/emmetActions.ts",
"./vs/workbench/parts/emmet/test/electron-browser/emmetAction.test.ts",
"./vs/workbench/parts/execution/common/execution.ts",
+ "./vs/workbench/parts/execution/electron-browser/terminal.ts",
+ "./vs/workbench/parts/execution/electron-browser/terminalService.ts",
"./vs/workbench/parts/extensions/common/extensionQuery.ts",
"./vs/workbench/parts/extensions/common/extensions.ts",
"./vs/workbench/parts/extensions/common/extensionsFileTemplate.ts",
"./vs/workbench/parts/extensions/electron-browser/extensionsActivationProgress.ts",
+ "./vs/workbench/parts/extensions/electron-browser/extensionsAutoProfiler.ts",
"./vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts",
"./vs/workbench/parts/logs/common/logConstants.ts",
"./vs/workbench/parts/logs/electron-browser/logs.contribution.ts",
@@ -527,20 +616,28 @@
"./vs/workbench/parts/outline/electron-browser/outline.ts",
"./vs/workbench/parts/output/common/output.ts",
"./vs/workbench/parts/output/common/outputLinkComputer.ts",
+ "./vs/workbench/parts/output/common/outputLinkProvider.ts",
"./vs/workbench/parts/performance/electron-browser/stats.ts",
"./vs/workbench/parts/preferences/common/smartSnippetInserter.ts",
+ "./vs/workbench/parts/relauncher/electron-browser/relauncher.contribution.ts",
"./vs/workbench/parts/scm/common/scm.ts",
"./vs/workbench/parts/scm/electron-browser/scmUtil.ts",
"./vs/workbench/parts/search/common/constants.ts",
"./vs/workbench/parts/search/common/queryBuilder.ts",
+ "./vs/workbench/parts/snippets/electron-browser/configureSnippets.ts",
+ "./vs/workbench/parts/snippets/electron-browser/snippetCompletionProvider.ts",
+ "./vs/workbench/parts/snippets/electron-browser/snippets.contribution.ts",
+ "./vs/workbench/parts/snippets/electron-browser/snippetsFile.ts",
"./vs/workbench/parts/surveys/electron-browser/nps.contribution.ts",
"./vs/workbench/parts/tasks/common/problemCollectors.ts",
"./vs/workbench/parts/tasks/common/problemMatcher.ts",
+ "./vs/workbench/parts/tasks/common/taskDefinitionRegistry.ts",
"./vs/workbench/parts/tasks/common/taskService.ts",
"./vs/workbench/parts/tasks/common/taskSystem.ts",
"./vs/workbench/parts/tasks/common/taskTemplates.ts",
"./vs/workbench/parts/tasks/common/tasks.ts",
"./vs/workbench/parts/tasks/electron-browser/jsonSchemaCommon.ts",
+ "./vs/workbench/parts/tasks/node/tasks.ts",
"./vs/workbench/parts/terminal/browser/terminalTab.ts",
"./vs/workbench/parts/terminal/browser/terminalWidgetManager.ts",
"./vs/workbench/parts/terminal/common/terminal.ts",
@@ -548,24 +645,31 @@
"./vs/workbench/parts/terminal/common/terminalCommands.ts",
"./vs/workbench/parts/terminal/common/terminalMenu.ts",
"./vs/workbench/parts/terminal/common/terminalService.ts",
+ "./vs/workbench/parts/terminal/node/terminal.ts",
"./vs/workbench/parts/terminal/node/terminalCommandTracker.ts",
"./vs/workbench/parts/terminal/node/terminalEnvironment.ts",
+ "./vs/workbench/parts/terminal/node/terminalProcess.ts",
+ "./vs/workbench/parts/terminal/node/terminalProcessExtHostProxy.ts",
+ "./vs/workbench/parts/terminal/node/windowsShellHelper.ts",
"./vs/workbench/parts/url/electron-browser/url.contribution.ts",
"./vs/workbench/parts/webview/electron-browser/webviewProtocols.ts",
"./vs/workbench/parts/welcome/gettingStarted/electron-browser/gettingStarted.ts",
"./vs/workbench/parts/welcome/page/electron-browser/vs_code_welcome_page.ts",
"./vs/workbench/parts/welcome/walkThrough/node/walkThroughUtils.ts",
- "./vs/workbench/services/actions/common/menuService.ts",
+ "./vs/workbench/services/actions/electron-browser/menusExtensionPoint.ts",
"./vs/workbench/services/activity/common/activity.ts",
"./vs/workbench/services/backup/common/backup.ts",
+ "./vs/workbench/services/backup/node/backupFileService.ts",
"./vs/workbench/services/commands/common/commandService.ts",
"./vs/workbench/services/configuration/common/configuration.ts",
"./vs/workbench/services/configuration/common/configurationExtensionPoint.ts",
"./vs/workbench/services/configuration/common/configurationModels.ts",
"./vs/workbench/services/configuration/common/jsonEditing.ts",
"./vs/workbench/services/configurationResolver/common/configurationResolver.ts",
+ "./vs/workbench/services/configurationResolver/common/configurationResolverUtils.ts",
"./vs/workbench/services/crashReporter/electron-browser/crashReporterService.ts",
"./vs/workbench/services/decorations/browser/decorations.ts",
+ "./vs/workbench/services/decorations/browser/decorationsService.ts",
"./vs/workbench/services/extensions/common/extensions.ts",
"./vs/workbench/services/extensions/common/extensionsRegistry.ts",
"./vs/workbench/services/extensions/electron-browser/inactiveExtensionUrlHandler.ts",
@@ -574,9 +678,16 @@
"./vs/workbench/services/extensions/node/lazyPromise.ts",
"./vs/workbench/services/extensions/node/proxyIdentifier.ts",
"./vs/workbench/services/extensions/node/rpcProtocol.ts",
+ "./vs/workbench/services/files/electron-browser/encoding.ts",
"./vs/workbench/services/files/node/watcher/common.ts",
"./vs/workbench/services/files/node/watcher/nsfw/watcher.ts",
+ "./vs/workbench/services/files/node/watcher/nsfw/watcherIpc.ts",
+ "./vs/workbench/services/files/node/watcher/nsfw/watcherService.ts",
+ "./vs/workbench/services/files/node/watcher/unix/chokidarWatcherService.ts",
"./vs/workbench/services/files/node/watcher/unix/watcher.ts",
+ "./vs/workbench/services/files/node/watcher/unix/watcherApp.ts",
+ "./vs/workbench/services/files/node/watcher/unix/watcherIpc.ts",
+ "./vs/workbench/services/files/node/watcher/unix/watcherService.ts",
"./vs/workbench/services/files/node/watcher/win32/csharpWatcherService.ts",
"./vs/workbench/services/files/node/watcher/win32/watcherService.ts",
"./vs/workbench/services/files/test/electron-browser/utils.ts",
@@ -589,15 +700,30 @@
"./vs/workbench/services/keybinding/common/macLinuxFallbackKeyboardMapper.ts",
"./vs/workbench/services/keybinding/common/macLinuxKeyboardMapper.ts",
"./vs/workbench/services/keybinding/common/windowsKeyboardMapper.ts",
+ "./vs/workbench/services/keybinding/test/keyboardMapperTestUtils.ts",
"./vs/workbench/services/mode/common/workbenchModeService.ts",
+ "./vs/workbench/services/notification/common/notificationService.ts",
"./vs/workbench/services/panel/common/panelService.ts",
"./vs/workbench/services/part/common/partService.ts",
+ "./vs/workbench/services/remote/electron-browser/remoteAgentServiceImpl.ts",
+ "./vs/workbench/services/remote/node/remoteAgentEnvironmentChannel.ts",
+ "./vs/workbench/services/remote/node/remoteAgentService.ts",
"./vs/workbench/services/scm/common/scm.ts",
"./vs/workbench/services/scm/common/scmService.ts",
+ "./vs/workbench/services/search/common/searchHelpers.ts",
+ "./vs/workbench/services/search/node/fileSearchManager.ts",
"./vs/workbench/services/search/node/legacy/search.ts",
+ "./vs/workbench/services/search/node/ripgrepFileSearch.ts",
+ "./vs/workbench/services/search/node/ripgrepSearchProvider.ts",
+ "./vs/workbench/services/search/node/ripgrepSearchUtils.ts",
+ "./vs/workbench/services/search/node/ripgrepTextSearchEngine.ts",
"./vs/workbench/services/search/node/search.ts",
"./vs/workbench/services/search/node/searchHistoryService.ts",
"./vs/workbench/services/search/node/searchIpc.ts",
+ "./vs/workbench/services/search/node/textSearchAdapter.ts",
+ "./vs/workbench/services/search/node/textSearchManager.ts",
+ "./vs/workbench/services/search/test/node/ripgrepTextSearchEngine.test.ts",
+ "./vs/workbench/services/search/test/node/textSearchManager.test.ts",
"./vs/workbench/services/textMate/electron-browser/TMGrammars.ts",
"./vs/workbench/services/textMate/electron-browser/TMHelper.ts",
"./vs/workbench/services/textMate/electron-browser/textMateService.ts",
@@ -611,7 +737,6 @@
"./vs/workbench/test/electron-browser/api/mock.ts"
],
"exclude": [
- "./typings/require-monaco.d.ts",
- "../node_modules/windows-process-tree/typings/windows-process-tree.d.ts"
+ "./typings/require-monaco.d.ts"
]
}
\ No newline at end of file
diff --git a/src/typings/OSSREADME.json b/src/typings/OSSREADME.json
deleted file mode 100644
index 63488ec55..000000000
--- a/src/typings/OSSREADME.json
+++ /dev/null
@@ -1,9 +0,0 @@
-// ATTENTION - THIS DIRECTORY CONTAINS THIRD PARTY OPEN SOURCE MATERIALS:
-
-// All OSS in this folder is development time only
-[{
- "name": "definitelytyped",
- "repositoryURL": "https://github.com/DefinitelyTyped/DefinitelyTyped",
- "license": "MIT",
- "isDev": true
-}]
\ No newline at end of file
diff --git a/src/typings/cgmanifest.json b/src/typings/cgmanifest.json
new file mode 100644
index 000000000..6e529a79f
--- /dev/null
+++ b/src/typings/cgmanifest.json
@@ -0,0 +1,16 @@
+{
+ "registrations": [
+ {
+ "component": {
+ "type": "git",
+ "git": {
+ "name": "definitelytyped",
+ "repositoryUrl": "https://github.com/DefinitelyTyped/DefinitelyTyped",
+ "commitHash": "69e3ac6bec3008271f76bbfa7cf69aa9198c4ff0"
+ }
+ },
+ "license": "MIT"
+ }
+ ],
+ "version": 1
+}
diff --git a/src/typings/node-pty.d.ts b/src/typings/node-pty.d.ts
index e3ee561a6..2fdb9dff9 100644
--- a/src/typings/node-pty.d.ts
+++ b/src/typings/node-pty.d.ts
@@ -11,7 +11,7 @@ declare module 'node-pty' {
* escaped properly.
* @param options The options of the terminal.
* @see CommandLineToArgvW https://msdn.microsoft.com/en-us/library/windows/desktop/bb776391(v=vs.85).aspx
- * @see Parsing C++ Comamnd-Line Arguments https://msdn.microsoft.com/en-us/library/17w5ykft.aspx
+ * @see Parsing C++ Command-Line Arguments https://msdn.microsoft.com/en-us/library/17w5ykft.aspx
* @see GetCommandLine https://msdn.microsoft.com/en-us/library/windows/desktop/ms683156.aspx
*/
export function spawn(file: string, args: string[] | string, options: IPtyForkOptions): IPty;
@@ -58,7 +58,7 @@ declare module 'node-pty' {
/**
* Resizes the dimensions of the pty.
- * @param columns THe number of columns to use.
+ * @param columns The number of columns to use.
* @param rows The number of rows to use.
*/
resize(columns: number, rows: number): void;
diff --git a/src/typings/v8-inspect-profiler.d.ts b/src/typings/v8-inspect-profiler.d.ts
index 50449c7ae..c60190b3f 100644
--- a/src/typings/v8-inspect-profiler.d.ts
+++ b/src/typings/v8-inspect-profiler.d.ts
@@ -31,7 +31,17 @@ declare module 'v8-inspect-profiler' {
stop(afterDelay?: number): PromiseLike;
}
- export function startProfiling(options: { port: number, tries?: number, retyWait?: number }): PromiseLike;
+ export interface Target {
+ description: string,
+ devtoolsFrontendUrl: string,
+ id: string,
+ title: string,
+ type: string,
+ url: string,
+ webSocketDebuggerUrl: string
+ }
+
+ export function startProfiling(options: { port: number, tries?: number, retyWait?: number, target?: (targets: Target[]) => Target }): PromiseLike;
export function writeProfile(profile: ProfileResult, name?: string): PromiseLike;
- export function rewriteAbsolutePaths(profile, replaceWith?);
+ export function rewriteAbsolutePaths(profile: ProfileResult, replaceWith?: string): ProfileResult;
}
diff --git a/src/vs/base/test/node/storage/broken.db b/src/typings/vscode-proxy-agent.d.ts
similarity index 90%
rename from src/vs/base/test/node/storage/broken.db
rename to src/typings/vscode-proxy-agent.d.ts
index 7762a2f10..a997fa978 100644
--- a/src/vs/base/test/node/storage/broken.db
+++ b/src/typings/vscode-proxy-agent.d.ts
@@ -3,4 +3,4 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-this is not a sqlite DB
\ No newline at end of file
+declare module 'vscode-proxy-agent';
diff --git a/src/vs/base/browser/contextmenu.ts b/src/vs/base/browser/contextmenu.ts
index 92e1e6d85..c45ef765e 100644
--- a/src/vs/base/browser/contextmenu.ts
+++ b/src/vs/base/browser/contextmenu.ts
@@ -7,6 +7,7 @@ import { IAction, IActionRunner } from 'vs/base/common/actions';
import { IActionItem } from 'vs/base/browser/ui/actionbar/actionbar';
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
import { SubmenuAction } from 'vs/base/browser/ui/menu/menu';
+import { AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
export interface IContextMenuEvent {
shiftKey?: boolean;
@@ -23,7 +24,7 @@ export class ContextSubMenu extends SubmenuAction {
export interface IContextMenuDelegate {
getAnchor(): HTMLElement | { x: number; y: number; width?: number; height?: number; };
- getActions(): Thenable<(IAction | ContextSubMenu)[]>;
+ getActions(): (IAction | ContextSubMenu)[];
getActionItem?(action: IAction): IActionItem;
getActionsContext?(event?: IContextMenuEvent): any;
getKeyBinding?(action: IAction): ResolvedKeybinding;
@@ -31,4 +32,5 @@ export interface IContextMenuDelegate {
onHide?(didCancel: boolean): void;
actionRunner?: IActionRunner;
autoSelectFirstItem?: boolean;
+ anchorAlignment?: AnchorAlignment;
}
diff --git a/src/vs/base/browser/dom.ts b/src/vs/base/browser/dom.ts
index d1628b42d..4e5530e52 100644
--- a/src/vs/base/browser/dom.ts
+++ b/src/vs/base/browser/dom.ts
@@ -20,6 +20,12 @@ export function clearNode(node: HTMLElement): void {
}
}
+export function removeNode(node: HTMLElement): void {
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+}
+
export function isInDOM(node: Node | null): boolean {
while (node) {
if (node === document.body) {
diff --git a/src/vs/base/browser/htmlContentRenderer.ts b/src/vs/base/browser/htmlContentRenderer.ts
index cf346270d..5e0c45a56 100644
--- a/src/vs/base/browser/htmlContentRenderer.ts
+++ b/src/vs/base/browser/htmlContentRenderer.ts
@@ -6,11 +6,12 @@
import * as DOM from 'vs/base/browser/dom';
import { defaultGenerator } from 'vs/base/common/idGenerator';
import { escape } from 'vs/base/common/strings';
-import { removeMarkdownEscapes, IMarkdownString } from 'vs/base/common/htmlContent';
+import { removeMarkdownEscapes, IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent';
import * as marked from 'vs/base/common/marked/marked';
import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import { IDisposable } from 'vs/base/common/lifecycle';
import { onUnexpectedError } from 'vs/base/common/errors';
+import { URI } from 'vs/base/common/uri';
export interface IContentActionHandler {
callback: (content: string, event?: IMouseEvent) => void;
@@ -52,6 +53,14 @@ export function renderFormattedText(formattedText: string, options: RenderOption
export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions = {}): HTMLElement {
const element = createElement(options);
+ const _href = function (href: string): string {
+ const data = markdown.uris && markdown.uris[href];
+ if (data) {
+ href = URI.revive(data).toString(true);
+ }
+ return href;
+ };
+
// signal to code-block render that the
// element has been created
let signalInnerHTML: Function;
@@ -59,6 +68,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions
const renderer = new marked.Renderer();
renderer.image = (href: string, title: string, text: string) => {
+ href = _href(href);
let dimensions: string[] = [];
if (href) {
const splitted = href.split('|').map(s => s.trim());
@@ -99,6 +109,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions
if (href === text) { // raw link case
text = removeMarkdownEscapes(text);
}
+ href = _href(href);
title = removeMarkdownEscapes(title);
href = removeMarkdownEscapes(href);
if (
@@ -111,6 +122,12 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions
return text;
} else {
+ // HTML Encode href
+ href = href.replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
return `${text}`;
}
};
@@ -165,11 +182,11 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions
}
const markedOptions: marked.MarkedOptions = {
- sanitize: true,
+ sanitize: markdown instanceof MarkdownString ? markdown.sanitize : true,
renderer
};
- element.innerHTML = marked(markdown.value, markedOptions);
+ element.innerHTML = marked.parse(markdown.value, markedOptions);
signalInnerHTML!();
return element;
diff --git a/src/vs/base/browser/mouseEvent.ts b/src/vs/base/browser/mouseEvent.ts
index ab32deee7..89ff65ec4 100644
--- a/src/vs/base/browser/mouseEvent.ts
+++ b/src/vs/base/browser/mouseEvent.ts
@@ -113,6 +113,10 @@ export class DragMouseEvent extends StandardMouseEvent {
}
+export interface IMouseWheelEvent extends MouseEvent {
+ readonly wheelDelta: number;
+}
+
interface IWebKitMouseWheelEvent {
wheelDeltaY: number;
wheelDeltaX: number;
@@ -125,14 +129,14 @@ interface IGeckoMouseWheelEvent {
detail: number;
}
-export class StandardMouseWheelEvent {
+export class StandardWheelEvent {
- public readonly browserEvent: MouseWheelEvent | null;
+ public readonly browserEvent: IMouseWheelEvent | null;
public readonly deltaY: number;
public readonly deltaX: number;
public readonly target: Node;
- constructor(e: MouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {
+ constructor(e: IMouseWheelEvent | null, deltaX: number = 0, deltaY: number = 0) {
this.browserEvent = e || null;
this.target = e ? (e.target || (e).targetNode || e.srcElement) : null;
diff --git a/src/vs/base/browser/ui/actionbar/actionbar.ts b/src/vs/base/browser/ui/actionbar/actionbar.ts
index d07946d2a..e8b648a34 100644
--- a/src/vs/base/browser/ui/actionbar/actionbar.ts
+++ b/src/vs/base/browser/ui/actionbar/actionbar.ts
@@ -206,7 +206,7 @@ export class BaseActionItem extends Disposable implements IActionItem {
dispose(): void {
if (this.element) {
- this.element.remove();
+ DOM.removeNode(this.element);
this.element = null;
}
@@ -726,7 +726,7 @@ export class ActionBar extends Disposable implements IActionRunner {
for (let i = 0; i < this.items.length; i++) {
let item = this.items[i];
- let actionItem = item;
+ let actionItem = item;
if (i === this.focusedItem) {
if (types.isFunction(actionItem.isEnabled)) {
@@ -775,7 +775,7 @@ export class ActionBar extends Disposable implements IActionRunner {
}
this.items = null;
- this.getContainer().remove();
+ DOM.removeNode(this.getContainer());
super.dispose();
}
diff --git a/src/vs/base/browser/ui/centered/centeredViewLayout.ts b/src/vs/base/browser/ui/centered/centeredViewLayout.ts
index 0da0a7f3b..7964af23c 100644
--- a/src/vs/base/browser/ui/centered/centeredViewLayout.ts
+++ b/src/vs/base/browser/ui/centered/centeredViewLayout.ts
@@ -58,7 +58,7 @@ export class CenteredViewLayout {
private emptyViews: ISplitViewView[] | undefined;
private splitViewDisposables: IDisposable[] = [];
- constructor(private container: HTMLElement, private view: IView, public readonly state: CenteredViewState = GOLDEN_RATIO) {
+ constructor(private container: HTMLElement, private view: IView, public readonly state: CenteredViewState = { leftMarginRatio: GOLDEN_RATIO.leftMarginRatio, rightMarginRatio: GOLDEN_RATIO.rightMarginRatio }) {
this.container.appendChild(this.view.element);
// Make sure to hide the split view overflow like sashes #52892
this.container.style.overflow = 'hidden';
diff --git a/src/vs/base/browser/ui/contextview/contextview.ts b/src/vs/base/browser/ui/contextview/contextview.ts
index 1c44f12d2..55384d0bb 100644
--- a/src/vs/base/browser/ui/contextview/contextview.ts
+++ b/src/vs/base/browser/ui/contextview/contextview.ts
@@ -26,6 +26,7 @@ export const enum AnchorPosition {
export interface IDelegate {
getAnchor(): HTMLElement | IAnchor;
render(container: HTMLElement): IDisposable;
+ focus?(): void;
layout?(): void;
anchorAlignment?: AnchorAlignment; // default: left
anchorPosition?: AnchorPosition; // default: below
@@ -165,6 +166,11 @@ export class ContextView extends Disposable {
// Layout
this.doLayout();
+
+ // Focus
+ if (this.delegate.focus) {
+ this.delegate.focus();
+ }
}
public layout(): void {
@@ -212,8 +218,8 @@ export class ContextView extends Disposable {
around = {
top: realAnchor.y,
left: realAnchor.x,
- width: realAnchor.width || 0,
- height: realAnchor.height || 0
+ width: realAnchor.width || 1,
+ height: realAnchor.height || 2
};
}
@@ -223,7 +229,7 @@ export class ContextView extends Disposable {
const anchorPosition = this.delegate!.anchorPosition || AnchorPosition.BELOW;
const anchorAlignment = this.delegate!.anchorAlignment || AnchorAlignment.LEFT;
- const verticalAnchor: ILayoutAnchor = { offset: around.top, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };
+ const verticalAnchor: ILayoutAnchor = { offset: around.top - window.pageYOffset, size: around.height, position: anchorPosition === AnchorPosition.BELOW ? LayoutAnchorPosition.Before : LayoutAnchorPosition.After };
let horizontalAnchor: ILayoutAnchor;
@@ -233,7 +239,7 @@ export class ContextView extends Disposable {
horizontalAnchor = { offset: around.left + around.width, size: 0, position: LayoutAnchorPosition.After };
}
- const top = layout(window.innerHeight, viewSizeHeight, verticalAnchor);
+ const top = layout(window.innerHeight, viewSizeHeight, verticalAnchor) + window.pageYOffset;
// if view intersects vertically with anchor, shift it horizontally
if (Range.intersects({ start: top, end: top + viewSizeHeight }, { start: verticalAnchor.offset, end: verticalAnchor.offset + verticalAnchor.size })) {
diff --git a/src/vs/base/browser/ui/dropdown/dropdown.ts b/src/vs/base/browser/ui/dropdown/dropdown.ts
index dc82ccd5b..49f01b74c 100644
--- a/src/vs/base/browser/ui/dropdown/dropdown.ts
+++ b/src/vs/base/browser/ui/dropdown/dropdown.ts
@@ -8,7 +8,7 @@ import { Gesture, EventType as GestureEventType } from 'vs/base/browser/touch';
import { ActionRunner, IAction, IActionRunner } from 'vs/base/common/actions';
import { BaseActionItem, IActionItemProvider } from 'vs/base/browser/ui/actionbar/actionbar';
import { IDisposable } from 'vs/base/common/lifecycle';
-import { IContextViewProvider, IAnchor } from 'vs/base/browser/ui/contextview/contextview';
+import { IContextViewProvider, IAnchor, AnchorAlignment } from 'vs/base/browser/ui/contextview/contextview';
import { IMenuOptions } from 'vs/base/browser/ui/menu/menu';
import { ResolvedKeybinding, KeyCode } from 'vs/base/common/keyCodes';
import { EventHelper, EventType, removeClass, addClass, append, $, addDisposableListener, addClasses } from 'vs/base/browser/dom';
@@ -243,13 +243,14 @@ export class DropdownMenu extends BaseDropdown {
this._contextMenuProvider.showContextMenu({
getAnchor: () => this.element,
- getActions: () => Promise.resolve(this.actions),
+ getActions: () => this.actions,
getActionsContext: () => this.menuOptions ? this.menuOptions.context : null,
getActionItem: action => this.menuOptions && this.menuOptions.actionItemProvider ? this.menuOptions.actionItemProvider(action) : null,
getKeyBinding: action => this.menuOptions && this.menuOptions.getKeyBinding ? this.menuOptions.getKeyBinding(action) : null,
getMenuClassName: () => this.menuClassName,
onHide: () => this.onHide(),
- actionRunner: this.menuOptions ? this.menuOptions.actionRunner : null
+ actionRunner: this.menuOptions ? this.menuOptions.actionRunner : null,
+ anchorAlignment: this.menuOptions.anchorAlignment
});
}
@@ -270,10 +271,11 @@ export class DropdownMenuActionItem extends BaseActionItem {
private actionItemProvider: IActionItemProvider;
private keybindings: (action: IAction) => ResolvedKeybinding;
private clazz: string;
+ private anchorAlignmentProvider: (() => AnchorAlignment) | undefined;
- constructor(action: IAction, menuActions: IAction[], contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string);
- constructor(action: IAction, actionProvider: IActionProvider, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string);
- constructor(action: IAction, menuActionsOrProvider: any, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string) {
+ constructor(action: IAction, menuActions: IAction[], contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string, anchorAlignmentProvider?: () => AnchorAlignment);
+ constructor(action: IAction, actionProvider: IActionProvider, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string, anchorAlignmentProvider?: () => AnchorAlignment);
+ constructor(action: IAction, menuActionsOrProvider: any, contextMenuProvider: IContextMenuProvider, actionItemProvider: IActionItemProvider, actionRunner: IActionRunner, keybindings: (action: IAction) => ResolvedKeybinding, clazz: string, anchorAlignmentProvider?: () => AnchorAlignment) {
super(null, action);
this.menuActionsOrProvider = menuActionsOrProvider;
@@ -282,6 +284,7 @@ export class DropdownMenuActionItem extends BaseActionItem {
this.actionRunner = actionRunner;
this.keybindings = keybindings;
this.clazz = clazz;
+ this.anchorAlignmentProvider = anchorAlignmentProvider;
}
render(container: HTMLElement): void {
@@ -317,6 +320,17 @@ export class DropdownMenuActionItem extends BaseActionItem {
getKeyBinding: this.keybindings,
context: this._context
};
+
+ if (this.anchorAlignmentProvider) {
+ const that = this;
+
+ this.dropdownMenu.menuOptions = {
+ ...this.dropdownMenu.menuOptions,
+ get anchorAlignment(): AnchorAlignment {
+ return that.anchorAlignmentProvider();
+ }
+ };
+ }
}
setActionContext(newContext: any): void {
@@ -332,4 +346,4 @@ export class DropdownMenuActionItem extends BaseActionItem {
this.dropdownMenu.show();
}
}
-}
\ No newline at end of file
+}
diff --git a/src/vs/base/browser/ui/findinput/findInput.css b/src/vs/base/browser/ui/findinput/findInput.css
index c659f260e..4bb6b8cec 100644
--- a/src/vs/base/browser/ui/findinput/findInput.css
+++ b/src/vs/base/browser/ui/findinput/findInput.css
@@ -11,7 +11,6 @@
.monaco-findInput .monaco-inputbox {
font-size: 13px;
width: 100%;
- height: 25px;
}
.monaco-findInput > .controls {
diff --git a/src/vs/base/browser/ui/findinput/findInput.ts b/src/vs/base/browser/ui/findinput/findInput.ts
index 4ab22a349..50116b7f9 100644
--- a/src/vs/base/browser/ui/findinput/findInput.ts
+++ b/src/vs/base/browser/ui/findinput/findInput.ts
@@ -23,6 +23,7 @@ export interface IFindInputOptions extends IFindInputStyles {
readonly width?: number;
readonly validation?: IInputValidator;
readonly label: string;
+ readonly flexibleHeight?: boolean;
readonly appendCaseSensitiveLabel?: string;
readonly appendWholeWordsLabel?: string;
@@ -118,7 +119,7 @@ export class FindInput extends Widget {
this.domNode = null;
this.inputBox = null;
- this.buildDomNode(options.appendCaseSensitiveLabel || '', options.appendWholeWordsLabel || '', options.appendRegexLabel || '', options.history);
+ this.buildDomNode(options.appendCaseSensitiveLabel || '', options.appendWholeWordsLabel || '', options.appendRegexLabel || '', options.history, options.flexibleHeight);
if (Boolean(parent)) {
parent.appendChild(this.domNode);
@@ -181,6 +182,10 @@ export class FindInput extends Widget {
}
}
+ public onSearchSubmit(): void {
+ this.inputBox.addToHistory();
+ }
+
public style(styles: IFindInputStyles): void {
this.inputActiveOptionBorder = styles.inputActiveOptionBorder;
this.inputBackground = styles.inputBackground;
@@ -283,7 +288,7 @@ export class FindInput extends Widget {
this.inputBox.width = w;
}
- private buildDomNode(appendCaseSensitiveLabel: string, appendWholeWordsLabel: string, appendRegexLabel: string, history: string[]): void {
+ private buildDomNode(appendCaseSensitiveLabel: string, appendWholeWordsLabel: string, appendRegexLabel: string, history: string[], flexibleHeight: boolean): void {
this.domNode = document.createElement('div');
this.domNode.style.width = this.width + 'px';
dom.addClass(this.domNode, 'monaco-findInput');
@@ -306,7 +311,8 @@ export class FindInput extends Widget {
inputValidationErrorBackground: this.inputValidationErrorBackground,
inputValidationErrorForeground: this.inputValidationErrorForeground,
inputValidationErrorBorder: this.inputValidationErrorBorder,
- history
+ history,
+ flexibleHeight
}));
this.regex = this._register(new RegexCheckbox({
diff --git a/src/vs/base/browser/ui/grid/grid.ts b/src/vs/base/browser/ui/grid/grid.ts
index f09231bc0..336329a05 100644
--- a/src/vs/base/browser/ui/grid/grid.ts
+++ b/src/vs/base/browser/ui/grid/grid.ts
@@ -139,10 +139,15 @@ export function getRelativeLocation(rootOrientation: Orientation, location: numb
function indexInParent(element: HTMLElement): number {
const parentElement = element.parentElement;
+
+ if (!parentElement) {
+ throw new Error('Invalid grid element');
+ }
+
let el = parentElement.firstElementChild;
let index = 0;
- while (el !== element && el !== parentElement.lastElementChild) {
+ while (el !== element && el !== parentElement.lastElementChild && el) {
el = el.nextElementSibling;
index++;
}
@@ -157,12 +162,18 @@ function indexInParent(element: HTMLElement): number {
* This will break as soon as DOM structures of the Splitview or Gridview change.
*/
function getGridLocation(element: HTMLElement): number[] {
- if (/\bmonaco-grid-view\b/.test(element.parentElement.className)) {
+ const parentElement = element.parentElement;
+
+ if (!parentElement) {
+ throw new Error('Invalid grid element');
+ }
+
+ if (/\bmonaco-grid-view\b/.test(parentElement.className)) {
return [];
}
- const index = indexInParent(element.parentElement);
- const ancestor = element.parentElement.parentElement.parentElement.parentElement;
+ const index = indexInParent(parentElement);
+ const ancestor = parentElement.parentElement!.parentElement!.parentElement!;
return [...getGridLocation(ancestor), index];
}
@@ -193,7 +204,7 @@ export class Grid implements IDisposable {
get minimumHeight(): number { return this.gridview.minimumHeight; }
get maximumWidth(): number { return this.gridview.maximumWidth; }
get maximumHeight(): number { return this.gridview.maximumHeight; }
- get onDidChange(): Event<{ width: number; height: number; }> { return this.gridview.onDidChange; }
+ get onDidChange(): Event<{ width: number; height: number; } | undefined> { return this.gridview.onDidChange; }
get element(): HTMLElement { return this.gridview.element; }
@@ -368,7 +379,7 @@ export interface ISerializableView extends IView {
}
export interface IViewDeserializer {
- fromJSON(json: object): T;
+ fromJSON(json: object | null): T;
}
interface InitialLayoutContext {
@@ -379,7 +390,7 @@ interface InitialLayoutContext {
export interface ISerializedLeafNode {
type: 'leaf';
- data: object;
+ data: object | null;
size: number;
}
@@ -415,18 +426,15 @@ export class SerializableGrid extends Grid {
throw new Error('Invalid JSON');
}
- const type = json.type;
- const data = json.data;
-
- if (type === 'branch') {
- if (!Array.isArray(data)) {
+ if (json.type === 'branch') {
+ if (!Array.isArray(json.data)) {
throw new Error('Invalid JSON: \'data\' property of branch must be an array.');
}
const children: GridNode[] = [];
let offset = 0;
- for (const child of data) {
+ for (const child of json.data) {
if (typeof child.size !== 'number') {
throw new Error('Invalid JSON: \'size\' property of node must be a number.');
}
@@ -441,8 +449,8 @@ export class SerializableGrid extends Grid {
return { children, box };
- } else if (type === 'leaf') {
- const view = deserializer.fromJSON(data) as T;
+ } else if (json.type === 'leaf') {
+ const view = deserializer.fromJSON(json.data) as T;
return { view, box };
}
@@ -527,13 +535,13 @@ export class SerializableGrid extends Grid {
const firstLeaves = node.children.map(c => SerializableGrid.getFirstLeaf(c));
for (let i = 1; i < firstLeaves.length; i++) {
- const size = orientation === Orientation.VERTICAL ? firstLeaves[i].box.height : firstLeaves[i].box.width;
- this.addView(firstLeaves[i].view, size, referenceView, direction);
- referenceView = firstLeaves[i].view;
+ const size = orientation === Orientation.VERTICAL ? firstLeaves[i]!.box.height : firstLeaves[i]!.box.width;
+ this.addView(firstLeaves[i]!.view, size, referenceView, direction);
+ referenceView = firstLeaves[i]!.view;
}
for (let i = 0; i < node.children.length; i++) {
- this.restoreViews(firstLeaves[i].view, orthogonal(orientation), node.children[i]);
+ this.restoreViews(firstLeaves[i]!.view, orthogonal(orientation), node.children[i]);
}
}
@@ -611,10 +619,10 @@ function getDimensions(node: ISerializedNode, orientation: Orientation): { width
if (orientation === Orientation.VERTICAL) {
const width = node.size || (childrenDimensions.length === 0 ? undefined : Math.max(...childrenDimensions.map(d => d.width || 0)));
- const height = childrenDimensions.length === 0 ? undefined : childrenDimensions.reduce((r, d) => r + d.height, 0);
+ const height = childrenDimensions.length === 0 ? undefined : childrenDimensions.reduce((r, d) => r + (d.height || 0), 0);
return { width, height };
} else {
- const width = childrenDimensions.length === 0 ? undefined : childrenDimensions.reduce((r, d) => r + d.width, 0);
+ const width = childrenDimensions.length === 0 ? undefined : childrenDimensions.reduce((r, d) => r + (d.width || 0), 0);
const height = node.size || (childrenDimensions.length === 0 ? undefined : Math.max(...childrenDimensions.map(d => d.height || 0)));
return { width, height };
}
diff --git a/src/vs/base/browser/ui/grid/gridview.ts b/src/vs/base/browser/ui/grid/gridview.ts
index 2892dde50..f0ac2e098 100644
--- a/src/vs/base/browser/ui/grid/gridview.ts
+++ b/src/vs/base/browser/ui/grid/gridview.ts
@@ -6,13 +6,13 @@
import 'vs/css!./gridview';
import { Event, anyEvent, Emitter, mapEvent, Relay } from 'vs/base/common/event';
import { Orientation, Sash } from 'vs/base/browser/ui/sash/sash';
-import { SplitView, IView as ISplitView, Sizing, ISplitViewStyles } from 'vs/base/browser/ui/splitview/splitview';
+import { SplitView, IView as ISplitView, Sizing, LayoutPriority, ISplitViewStyles } from 'vs/base/browser/ui/splitview/splitview';
import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
import { $ } from 'vs/base/browser/dom';
import { tail2 as tail } from 'vs/base/common/arrays';
import { Color } from 'vs/base/common/color';
-export { Sizing } from 'vs/base/browser/ui/splitview/splitview';
+export { Sizing, LayoutPriority } from 'vs/base/browser/ui/splitview/splitview';
export { Orientation } from 'vs/base/browser/ui/sash/sash';
export interface IView {
@@ -22,6 +22,8 @@ export interface IView {
readonly minimumHeight: number;
readonly maximumHeight: number;
readonly onDidChange: Event<{ width: number; height: number; }>;
+ readonly priority?: LayoutPriority;
+ readonly snapSize?: number;
layout(width: number, height: number): void;
}
@@ -60,6 +62,7 @@ const defaultStyles: IGridViewStyles = {
export interface IGridViewOptions {
styles?: IGridViewStyles;
+ proportionalLayout?: boolean; // default true
}
class BranchNode implements ISplitView, IDisposable {
@@ -135,6 +138,7 @@ class BranchNode implements ISplitView, IDisposable {
constructor(
readonly orientation: Orientation,
styles: IGridViewStyles,
+ readonly proportionalLayout: boolean,
size: number = 0,
orthogonalSize: number = 0
) {
@@ -450,6 +454,14 @@ class LeafNode implements ISplitView, IDisposable {
return this.orientation === Orientation.HORIZONTAL ? this.maximumHeight : this.maximumWidth;
}
+ get priority(): LayoutPriority | undefined {
+ return this.view.priority;
+ }
+
+ get snapSize(): number | undefined {
+ return this.view.snapSize;
+ }
+
get minimumOrthogonalSize(): number {
return this.orientation === Orientation.HORIZONTAL ? this.minimumWidth : this.minimumHeight;
}
@@ -483,7 +495,7 @@ type Node = BranchNode | LeafNode;
function flipNode(node: T, size: number, orthogonalSize: number): T {
if (node instanceof BranchNode) {
- const result = new BranchNode(orthogonal(node.orientation), node.styles, size, orthogonalSize);
+ const result = new BranchNode(orthogonal(node.orientation), node.styles, node.proportionalLayout, size, orthogonalSize);
let totalSize = 0;
@@ -512,6 +524,7 @@ export class GridView implements IDisposable {
readonly element: HTMLElement;
private styles: IGridViewStyles;
+ private proportionalLayout: boolean;
private _root: BranchNode;
private onDidSashResetRelay = new Relay();
@@ -566,7 +579,8 @@ export class GridView implements IDisposable {
constructor(options: IGridViewOptions = {}) {
this.element = $('.monaco-grid-view');
this.styles = options.styles || defaultStyles;
- this.root = new BranchNode(Orientation.VERTICAL, this.styles);
+ this.proportionalLayout = typeof options.proportionalLayout !== 'undefined' ? !!options.proportionalLayout : true;
+ this.root = new BranchNode(Orientation.VERTICAL, this.styles, this.proportionalLayout);
}
style(styles: IGridViewStyles): void {
@@ -596,7 +610,7 @@ export class GridView implements IDisposable {
const [, parentIndex] = tail(rest);
grandParent.removeChild(parentIndex);
- const newParent = new BranchNode(parent.orientation, this.styles, parent.size, parent.orthogonalSize);
+ const newParent = new BranchNode(parent.orientation, this.styles, this.proportionalLayout, parent.size, parent.orthogonalSize);
grandParent.addChild(newParent, parent.size, parentIndex);
newParent.orthogonalLayout(parent.orthogonalSize);
diff --git a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts
index c6f06f0f9..a8e3d6c32 100644
--- a/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts
+++ b/src/vs/base/browser/ui/highlightedlabel/highlightedLabel.ts
@@ -21,7 +21,7 @@ export class HighlightedLabel implements IDisposable {
private highlights: IHighlight[];
private didEverRender: boolean;
- constructor(container: HTMLElement) {
+ constructor(container: HTMLElement, private supportOcticons: boolean) {
this.domNode = document.createElement('span');
this.domNode.className = 'monaco-highlighted-label';
this.didEverRender = false;
@@ -68,19 +68,22 @@ export class HighlightedLabel implements IDisposable {
}
if (pos < highlight.start) {
htmlContent.push('');
- htmlContent.push(renderOcticons(this.text.substring(pos, highlight.start)));
+ const substring = this.text.substring(pos, highlight.start);
+ htmlContent.push(this.supportOcticons ? renderOcticons(substring) : substring);
htmlContent.push('');
pos = highlight.end;
}
htmlContent.push('');
- htmlContent.push(renderOcticons(this.text.substring(highlight.start, highlight.end)));
+ const substring = this.text.substring(highlight.start, highlight.end);
+ htmlContent.push(this.supportOcticons ? renderOcticons(substring) : substring);
htmlContent.push('');
pos = highlight.end;
}
if (pos < this.text.length) {
htmlContent.push('');
- htmlContent.push(renderOcticons(this.text.substring(pos)));
+ const substring = this.text.substring(pos);
+ htmlContent.push(this.supportOcticons ? renderOcticons(substring) : substring);
htmlContent.push('');
}
diff --git a/src/vs/base/browser/ui/iconLabel/iconLabel.ts b/src/vs/base/browser/ui/iconLabel/iconLabel.ts
index a2af0b7e7..752437df1 100644
--- a/src/vs/base/browser/ui/iconLabel/iconLabel.ts
+++ b/src/vs/base/browser/ui/iconLabel/iconLabel.ts
@@ -12,6 +12,7 @@ import { IDisposable, combinedDisposable, Disposable } from 'vs/base/common/life
export interface IIconLabelCreationOptions {
supportHighlights?: boolean;
supportDescriptionHighlights?: boolean;
+ donotSupportOcticons?: boolean;
}
export interface IIconLabelValueOptions {
@@ -99,13 +100,13 @@ export class IconLabel extends Disposable {
this.labelDescriptionContainer = this._register(new FastLabelNode(dom.append(this.domNode.element, dom.$('.monaco-icon-label-description-container'))));
if (options && options.supportHighlights) {
- this.labelNode = this._register(new HighlightedLabel(dom.append(this.labelDescriptionContainer.element, dom.$('a.label-name'))));
+ this.labelNode = this._register(new HighlightedLabel(dom.append(this.labelDescriptionContainer.element, dom.$('a.label-name')), !options.donotSupportOcticons));
} else {
this.labelNode = this._register(new FastLabelNode(dom.append(this.labelDescriptionContainer.element, dom.$('a.label-name'))));
}
if (options && options.supportDescriptionHighlights) {
- this.descriptionNodeFactory = () => this._register(new HighlightedLabel(dom.append(this.labelDescriptionContainer.element, dom.$('span.label-description'))));
+ this.descriptionNodeFactory = () => this._register(new HighlightedLabel(dom.append(this.labelDescriptionContainer.element, dom.$('span.label-description')), !options.donotSupportOcticons));
} else {
this.descriptionNodeFactory = () => this._register(new FastLabelNode(dom.append(this.labelDescriptionContainer.element, dom.$('span.label-description'))));
}
@@ -137,7 +138,7 @@ export class IconLabel extends Disposable {
this.domNode.title = options && options.title ? options.title : '';
if (this.labelNode instanceof HighlightedLabel) {
- this.labelNode.set(label || '', options ? options.matches : void 0, void 0, options && options.labelEscapeNewLines);
+ this.labelNode.set(label || '', options ? options.matches : void 0, options && options.title ? options.title : void 0, options && options.labelEscapeNewLines);
} else {
this.labelNode.textContent = label || '';
}
diff --git a/src/vs/base/browser/ui/inputbox/inputBox.ts b/src/vs/base/browser/ui/inputbox/inputBox.ts
index 947e36a2c..7b9a9cdb3 100644
--- a/src/vs/base/browser/ui/inputbox/inputBox.ts
+++ b/src/vs/base/browser/ui/inputbox/inputBox.ts
@@ -291,6 +291,9 @@ export class InputBox extends Widget {
public set width(width: number) {
this.input.style.width = width + 'px';
+ if (this.mirror) {
+ this.mirror.style.width = width + 'px';
+ }
}
public showMessage(message: IMessage, force?: boolean): void {
diff --git a/src/vs/base/browser/ui/list/list.ts b/src/vs/base/browser/ui/list/list.ts
index b9815b6ef..1af9112d4 100644
--- a/src/vs/base/browser/ui/list/list.ts
+++ b/src/vs/base/browser/ui/list/list.ts
@@ -8,6 +8,7 @@ import { GestureEvent } from 'vs/base/browser/touch';
export interface IListVirtualDelegate {
getHeight(element: T): number;
getTemplateId(element: T): string;
+ hasDynamicHeight?(element: T): boolean;
}
export interface IListRenderer {
@@ -44,7 +45,7 @@ export interface IListGestureEvent {
export interface IListContextMenuEvent {
browserEvent: UIEvent;
- element: T;
+ element: T | undefined;
index: number;
- anchor: HTMLElement | { x: number; y: number; };
+ anchor: HTMLElement | { x: number; y: number; } | undefined;
}
diff --git a/src/vs/base/browser/ui/list/listPaging.ts b/src/vs/base/browser/ui/list/listPaging.ts
index 1317c4f5b..d4491cece 100644
--- a/src/vs/base/browser/ui/list/listPaging.ts
+++ b/src/vs/base/browser/ui/list/listPaging.ts
@@ -17,8 +17,8 @@ export interface IPagedRenderer extends IListRenderer {
- data: T;
- disposable: IDisposable;
+ data?: T;
+ disposable?: IDisposable;
}
class PagedRenderer implements IListRenderer> {
@@ -36,7 +36,13 @@ class PagedRenderer implements IListRenderer): void {
- data.disposable.dispose();
+ if (data.disposable) {
+ data.disposable.dispose();
+ }
+
+ if (!data.data) {
+ return;
+ }
const model = this.modelProvider();
@@ -49,7 +55,7 @@ class PagedRenderer implements IListRenderer cts.cancel() };
this.renderer.renderPlaceholder(index, data.data);
- promise.then(entry => this.renderer.renderElement(entry, index, data.data));
+ promise.then(entry => this.renderer.renderElement(entry, index, data.data!));
}
disposeElement(): void {
@@ -57,10 +63,14 @@ class PagedRenderer implements IListRenderer): void {
- data.disposable.dispose();
- data.disposable = null;
- this.renderer.disposeTemplate(data.data);
- data.data = null;
+ if (data.disposable) {
+ data.disposable.dispose();
+ data.disposable = undefined;
+ }
+ if (data.data) {
+ this.renderer.disposeTemplate(data.data);
+ data.data = undefined;
+ }
}
}
@@ -124,7 +134,7 @@ export class PagedList implements IDisposable {
}
get onContextMenu(): Event> {
- return mapEvent(this.list.onContextMenu, ({ element, index, anchor, browserEvent }) => ({ element: this._model.get(element), index, anchor, browserEvent }));
+ return mapEvent(this.list.onContextMenu, ({ element, index, anchor, browserEvent }) => ({ element: this._model.get(element!), index, anchor, browserEvent }));
}
get model(): IPagedModel {
diff --git a/src/vs/base/browser/ui/list/listView.ts b/src/vs/base/browser/ui/list/listView.ts
index 61b6d478b..0a96472db 100644
--- a/src/vs/base/browser/ui/list/listView.ts
+++ b/src/vs/base/browser/ui/list/listView.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { getOrDefault } from 'vs/base/common/objects';
+import { getOrDefault2 } from 'vs/base/common/objects';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { Gesture, EventType as TouchEventType, GestureEvent } from 'vs/base/browser/touch';
import * as DOM from 'vs/base/browser/dom';
@@ -33,29 +33,34 @@ function canUseTranslate3d(): boolean {
return true;
}
-
interface IItem {
- id: string;
- element: T;
+ readonly id: string;
+ readonly element: T;
+ readonly templateId: string;
+ row: IRow | null;
size: number;
- templateId: string;
- row: IRow;
+ hasDynamicHeight: boolean;
+ renderWidth: number | undefined;
}
export interface IListViewOptions {
- useShadows?: boolean;
- verticalScrollMode?: ScrollbarVisibility;
- setRowLineHeight?: boolean;
+ readonly useShadows?: boolean;
+ readonly verticalScrollMode?: ScrollbarVisibility;
+ readonly setRowLineHeight?: boolean;
+ readonly supportDynamicHeights?: boolean;
}
-const DefaultOptions: IListViewOptions = {
+const DefaultOptions = {
useShadows: true,
verticalScrollMode: ScrollbarVisibility.Auto,
- setRowLineHeight: true
+ setRowLineHeight: true,
+ supportDynamicHeights: false
};
export class ListView implements ISpliceable, IDisposable {
+ readonly domNode: HTMLElement;
+
private items: IItem[];
private itemId: number;
private rangeMap: RangeMap;
@@ -63,7 +68,7 @@ export class ListView implements ISpliceable, IDisposable {
private renderers = new Map>();
private lastRenderTop: number;
private lastRenderHeight: number;
- private _domNode: HTMLElement;
+ private renderWidth = 0;
private gesture: Gesture;
private rowsContainer: HTMLElement;
private scrollableElement: ScrollableElement;
@@ -74,6 +79,7 @@ export class ListView implements ISpliceable, IDisposable {
private dragAndDropScrollTimeout: number;
private dragAndDropMouseY: number;
private setRowLineHeight: boolean;
+ private supportDynamicHeights: boolean;
private disposables: IDisposable[];
constructor(
@@ -95,8 +101,8 @@ export class ListView implements ISpliceable, IDisposable {
this.lastRenderTop = 0;
this.lastRenderHeight = 0;
- this._domNode = document.createElement('div');
- this._domNode.className = 'monaco-list';
+ this.domNode = document.createElement('div');
+ this.domNode.className = 'monaco-list';
this.rowsContainer = document.createElement('div');
this.rowsContainer.className = 'monaco-list-rows';
@@ -105,12 +111,12 @@ export class ListView implements ISpliceable, IDisposable {
this.scrollableElement = new ScrollableElement(this.rowsContainer, {
alwaysConsumeMouseWheel: true,
horizontal: ScrollbarVisibility.Hidden,
- vertical: getOrDefault(options, o => o.verticalScrollMode, DefaultOptions.verticalScrollMode),
- useShadows: getOrDefault(options, o => o.useShadows, DefaultOptions.useShadows)
+ vertical: getOrDefault2(options, o => o.verticalScrollMode, DefaultOptions.verticalScrollMode),
+ useShadows: getOrDefault2(options, o => o.useShadows, DefaultOptions.useShadows)
});
- this._domNode.appendChild(this.scrollableElement.getDomNode());
- container.appendChild(this._domNode);
+ this.domNode.appendChild(this.scrollableElement.getDomNode());
+ container.appendChild(this.domNode);
this.disposables = [this.rangeMap, this.gesture, this.scrollableElement, this.cache];
@@ -125,15 +131,12 @@ export class ListView implements ISpliceable, IDisposable {
const onDragOver = mapEvent(domEvent(this.rowsContainer, 'dragover'), e => new DragMouseEvent(e));
onDragOver(this.onDragOver, this, this.disposables);
- this.setRowLineHeight = getOrDefault(options, o => o.setRowLineHeight, DefaultOptions.setRowLineHeight);
+ this.setRowLineHeight = getOrDefault2(options, o => o.setRowLineHeight, DefaultOptions.setRowLineHeight);
+ this.supportDynamicHeights = getOrDefault2(options, o => o.supportDynamicHeights, DefaultOptions.supportDynamicHeights);
this.layout();
}
- get domNode(): HTMLElement {
- return this._domNode;
- }
-
splice(start: number, deleteCount: number, elements: T[] = []): T[] {
if (this.splicing) {
throw new Error('Can\'t run recursive splices.');
@@ -164,13 +167,25 @@ export class ListView implements ISpliceable, IDisposable {
const inserted = elements.map>(element => ({
id: String(this.itemId++),
element,
- size: this.virtualDelegate.getHeight(element),
templateId: this.virtualDelegate.getTemplateId(element),
+ size: this.virtualDelegate.getHeight(element),
+ hasDynamicHeight: !!this.virtualDelegate.hasDynamicHeight && this.virtualDelegate.hasDynamicHeight(element),
+ renderWidth: undefined,
row: null
}));
- this.rangeMap.splice(start, deleteCount, ...inserted);
- const deleted = this.items.splice(start, deleteCount, ...inserted);
+ let deleted: IItem[];
+
+ // TODO@joao: improve this optimization to catch even more cases
+ if (start === 0 && deleteCount >= this.items.length) {
+ this.rangeMap = new RangeMap();
+ this.rangeMap.splice(0, 0, inserted);
+ this.items = inserted;
+ deleted = [];
+ } else {
+ this.rangeMap.splice(start, deleteCount, inserted);
+ deleted = this.items.splice(start, deleteCount, ...inserted);
+ }
const delta = elements.length - deleteCount;
const renderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);
@@ -183,10 +198,8 @@ export class ListView implements ISpliceable, IDisposable {
const removeRanges = Range.relativeComplement(renderedRestRange, renderRange);
- for (let r = 0; r < removeRanges.length; r++) {
- const removeRange = removeRanges[r];
-
- for (let i = removeRange.start; i < removeRange.end; i++) {
+ for (const range of removeRanges) {
+ for (let i = range.start; i < range.end; i++) {
this.removeItemFromDOM(i);
}
}
@@ -196,14 +209,22 @@ export class ListView implements ISpliceable, IDisposable {
const insertRanges = [elementsRange, ...unrenderedRestRanges].map(r => Range.intersect(renderRange, r));
const beforeElement = this.getNextToLastElement(insertRanges);
- for (let r = 0; r < insertRanges.length; r++) {
- const insertRange = insertRanges[r];
-
- for (let i = insertRange.start; i < insertRange.end; i++) {
+ for (const range of insertRanges) {
+ for (let i = range.start; i < range.end; i++) {
this.insertItemInDOM(i, beforeElement);
}
}
+ this.updateScrollHeight();
+
+ if (this.supportDynamicHeights) {
+ this.rerender(this.scrollTop, this.renderHeight);
+ }
+
+ return deleted.map(i => i.element);
+ }
+
+ private updateScrollHeight(): void {
this.scrollHeight = this.getContentHeight();
this.rowsContainer.style.height = `${this.scrollHeight}px`;
@@ -215,8 +236,6 @@ export class ListView implements ISpliceable, IDisposable {
this.didRequestScrollableElementUpdate = true;
}
-
- return deleted.map(i => i.element);
}
get length(): number {
@@ -232,7 +251,7 @@ export class ListView implements ISpliceable, IDisposable {
return this.items[index].element;
}
- domElement(index: number): HTMLElement {
+ domElement(index: number): HTMLElement | null {
const row = this.items[index].row;
return row && row.domNode;
}
@@ -255,10 +274,18 @@ export class ListView