From da8140dc9ff38013b3d41d40da0e34603352ad19 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Sat, 22 Jul 2017 14:50:15 +0100 Subject: [PATCH 01/35] Update README.md --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index d6d99aa7..b8125796 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,21 @@ This addin brings language support for [Cake](http://cakebuild.net) build script In addition to integrated editing features, the extension also provides commands in the Command Palette for working with Cake files: +* `Cake: Download Debug Dependencies` to download the Cake.CoreCLR NuGet Package into the tools folder, ready for enabling debugging * `Cake: Install a bootstrapper` to install a Cake bootstrapper for Windows, OS X or Linux in the root folder. * `Cake: Install a configuration file` to install the default Cake Configuration file for controlling internal components of Cake. +### Task Provider + +The extension will also parse all `*.cake` files in the workspace and make them executable via the built in `Tasks: Run Task` command. + +There are a number of configuration options which allow you to control how the Task Provider works: + +* `cake.taskRunner.autoDetect`: a boolean value which toggles auto detection of Tasks on or off. Default value is `true` +* `cake.taskRunner.scriptsIncludePattern`: a glob pattern which specifies how to detect `.cake` files in the current workspace. Default value is `**/*.cake`. +* `cake.taskRunner.scriptsExcludePattan`: a glob pattern which specifies all files and folders that shouldn't be included in search of current workspace. Default value is `""`. +* `cake.taskRunner.taskRegularExpression` a regular expression pattern which is used to identify Tasks within the `*.cake` files. Default value is `Task\\s*?\\(\\s*?\"(.*?)\"\\s*?\\)` + ## What is Cake? Cake (C# Make) is a cross platform build automation system with a C# DSL to do things like compiling code, copy files/folders, running unit tests, compress files and build NuGet packages. @@ -16,3 +28,9 @@ Cake (C# Make) is a cross platform build automation system with a C# DSL to do t ## Learn more For more information about Cake, please see the [Cake website](http://cakebuild.net) or the Cake [source code repository](https://github.com/cake-build/cake). + +## Resource Video + +There is a short introduction video to the Visual Studio Code Extension for Cake here: + +[![Introduction to Visual Studio Extension for Cake](https://img.youtube.com/vi/zzZuysl3xSg/0.jpg)](https://www.youtube.com/watch?v=zzZuysl3xSg) From a7ea0a40c4994f82b65a1b6d9949a88220196c1a Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 26 Jul 2017 12:27:03 +0100 Subject: [PATCH 02/35] (maint) Updated to latest bootstrapper --- build.ps1 | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/build.ps1 b/build.ps1 index 44de5793..7495727f 100644 --- a/build.ps1 +++ b/build.ps1 @@ -87,11 +87,15 @@ if(!$PSScriptRoot){ } $TOOLS_DIR = Join-Path $PSScriptRoot "tools" +$ADDINS_DIR = Join-Path $TOOLS_DIR "Addins" +$MODULES_DIR = Join-Path $TOOLS_DIR "Modules" $NUGET_EXE = Join-Path $TOOLS_DIR "nuget.exe" $CAKE_EXE = Join-Path $TOOLS_DIR "Cake/Cake.exe" $NUGET_URL = "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" $PACKAGES_CONFIG = Join-Path $TOOLS_DIR "packages.config" $PACKAGES_CONFIG_MD5 = Join-Path $TOOLS_DIR "packages.config.md5sum" +$ADDINS_PACKAGES_CONFIG = Join-Path $ADDINS_DIR "packages.config" +$MODULES_PACKAGES_CONFIG = Join-Path $MODULES_DIR "packages.config" # Should we use mono? $UseMono = ""; @@ -130,7 +134,7 @@ if (!(Test-Path $PACKAGES_CONFIG)) { # Try find NuGet.exe in path if not exists if (!(Test-Path $NUGET_EXE)) { Write-Verbose -Message "Trying to find nuget.exe in PATH..." - $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_) } + $existingPaths = $Env:Path -Split ';' | Where-Object { (![string]::IsNullOrEmpty($_)) -and (Test-Path $_ -PathType Container) } $NUGET_EXE_IN_PATH = Get-ChildItem -Path $existingPaths -Filter "nuget.exe" | Select -First 1 if ($NUGET_EXE_IN_PATH -ne $null -and (Test-Path $NUGET_EXE_IN_PATH.FullName)) { Write-Verbose -Message "Found in PATH at $($NUGET_EXE_IN_PATH.FullName)." @@ -175,6 +179,41 @@ if(-Not $SkipToolPackageRestore.IsPresent) { $md5Hash | Out-File $PACKAGES_CONFIG_MD5 -Encoding "ASCII" } Write-Verbose -Message ($NuGetOutput | out-string) + + Pop-Location +} + +# Restore addins from NuGet +if (Test-Path $ADDINS_PACKAGES_CONFIG) { + Push-Location + Set-Location $ADDINS_DIR + + Write-Verbose -Message "Restoring addins from NuGet..." + $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$ADDINS_DIR`"" + + if ($LASTEXITCODE -ne 0) { + Throw "An error occured while restoring NuGet addins." + } + + Write-Verbose -Message ($NuGetOutput | out-string) + + Pop-Location +} + +# Restore modules from NuGet +if (Test-Path $MODULES_PACKAGES_CONFIG) { + Push-Location + Set-Location $MODULES_DIR + + Write-Verbose -Message "Restoring modules from NuGet..." + $NuGetOutput = Invoke-Expression "&`"$NUGET_EXE`" install -ExcludeVersion -OutputDirectory `"$MODULES_DIR`"" + + if ($LASTEXITCODE -ne 0) { + Throw "An error occured while restoring NuGet modules." + } + + Write-Verbose -Message ($NuGetOutput | out-string) + Pop-Location } @@ -186,4 +225,4 @@ if (!(Test-Path $CAKE_EXE)) { # Start Cake Write-Host "Running build script..." Invoke-Expression "& `"$CAKE_EXE`" `"$Script`" -target=`"$Target`" -configuration=`"$Configuration`" -verbosity=`"$Verbosity`" $UseMono $UseDryRun $UseExperimental $ScriptArgs" -exit $LASTEXITCODE \ No newline at end of file +exit $LASTEXITCODE From 430b00a7c2cf401c0837819e9fb31b247ef20289 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 26 Jul 2017 12:31:12 +0100 Subject: [PATCH 03/35] (GH-33) Corrected whitespace --- snippets/snippets.json | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/snippets/snippets.json b/snippets/snippets.json index a2e22672..1403b58f 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -1,20 +1,20 @@ { "Cake Task": { - "prefix": "task", - "body": [ - "Task(\"${1:name}\");" - ], - "description": "Cake task" - }, + "prefix": "task", + "body": [ + "Task(\"${1:name}\");" + ], + "description": "Cake task" + }, "Cake Task With Action": { - "prefix": "task", - "body": [ - "Task(\"${1:name}\")", - "\t.Does(() =>", - "{", - "\t$0", - "});" - ], - "description": "Cake task (with action)" - } -} + "prefix": "task", + "body": [ + "Task(\"${1:name}\")", + "\t.Does(() =>", + "{", + "\t$0", + "});" + ], + "description": "Cake task (with action)" + } +} \ No newline at end of file From 7793e98feec3c517b510e918ec6fd252b66d90c7 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 26 Jul 2017 12:35:21 +0100 Subject: [PATCH 04/35] (GH-33) Added snippet for Cake sample script - This uses the example that is shown here: http://cakebuild.net/docs/tutorials/setting-up-a-new-project --- snippets/snippets.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/snippets/snippets.json b/snippets/snippets.json index 1403b58f..6e621f81 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -16,5 +16,19 @@ "});" ], "description": "Cake task (with action)" + }, + "Sample Cake Script": { + "prefix": "cake-sample", + "body": [ + "var target = Argument(\"target\", \"Default\");", + "", + "Task(\"Default\")", + "\t.Does(() =>", + "{", + "\tInformation(\"Hello World!\");", + "});", + "", + "RunTarget(target);" + ] } } \ No newline at end of file From b82a9bd78288f17b0c4ff5e19caf23eaca0febd3 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 26 Jul 2017 12:42:16 +0100 Subject: [PATCH 05/35] (GH-34) Added Snippet for script argument --- snippets/snippets.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/snippets/snippets.json b/snippets/snippets.json index 6e621f81..6ae238db 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -30,5 +30,12 @@ "", "RunTarget(target);" ] + }, + "Cake Script Argument": { + "prefix": "cake-argument", + "body": [ + "var ${1:target} = Argument(\"${2:target}\", \"${3:Default}\");", + "$0" + ] } } \ No newline at end of file From b3a8f18ca6275634e50f6bc2992ec2dcb37cfa89 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 12:34:16 +0100 Subject: [PATCH 06/35] (GH-33) Extended sample script - To make it the same as what is included in the yeoman generator for Cake. --- snippets/snippets.json | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/snippets/snippets.json b/snippets/snippets.json index 6ae238db..d01c70af 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -20,12 +20,37 @@ "Sample Cake Script": { "prefix": "cake-sample", "body": [ + "///////////////////////////////////////////////////////////////////////////////", + "// ARGUMENTS", + "///////////////////////////////////////////////////////////////////////////////", + "", "var target = Argument(\"target\", \"Default\");", + "var configuration = Argument(\"configuration\", \"Release\");", + "", + "///////////////////////////////////////////////////////////////////////////////", + "// SETUP / TEARDOWN", + "///////////////////////////////////////////////////////////////////////////////", + "", + "Setup(ctx =>", + "{", + "\t// Executed BEFORE the first task.", + "\tInformation(\"Running tasks...\");", + "});", + "", + "Teardown(ctx =>", + "{", + "\t// Executed AFTER the last task.", + "\tInformation(\"Finished running tasks.\");", + "});", + "", + "///////////////////////////////////////////////////////////////////////////////", + "// TASKS", + "///////////////////////////////////////////////////////////////////////////////", "", "Task(\"Default\")", "\t.Does(() =>", "{", - "\tInformation(\"Hello World!\");", + "\tInformation(\"Hello Cake!\");", "});", "", "RunTarget(target);" From a34bebb04896fce1720b4cd68b23fe38d060e60e Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 12:35:25 +0100 Subject: [PATCH 07/35] (GH-36) Added MIT license --- LICENSE | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..abd51eb4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) .NET Foundation and Contributors + +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 From f69bd826d2564f2f770f4c541a0bdfa81e9f579a Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 12:44:20 +0100 Subject: [PATCH 08/35] (GH-38) Added snippet for addin directive --- snippets/snippets.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/snippets/snippets.json b/snippets/snippets.json index d01c70af..ff4e8b26 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -62,5 +62,19 @@ "var ${1:target} = Argument(\"${2:target}\", \"${3:Default}\");", "$0" ] + }, + "Cake Addin Preprocessor Directive": { + "prefix": "cake-addin", + "body": [ + "#addin \"nuget:?package=${1:Cake.Foo}&version=${2:1.2.3}\"", + "$0" + ] + }, + "Cake Addin Preprocessor Directive - Full": { + "prefix": "cake-addin-full", + "body": [ + "#addin \"nuget:${1:https://www.nuget.org/api/v2}?package=${2:Cake.Foo}&version=${3:1.2.3}\"", + "$0" + ] } } \ No newline at end of file From 26ca1dce3e12679cea1e6f2536ba0a965afd5301 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 12:49:46 +0100 Subject: [PATCH 09/35] (GH-39) Added snippet for load directive --- snippets/snippets.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/snippets/snippets.json b/snippets/snippets.json index ff4e8b26..3ecb42fd 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -76,5 +76,19 @@ "#addin \"nuget:${1:https://www.nuget.org/api/v2}?package=${2:Cake.Foo}&version=${3:1.2.3}\"", "$0" ] + }, + "Cake Load Preprocessor Directive": { + "prefix": "cake-load", + "body": [ + "#load \"${1:scripts/utilities.cake}\"", + "$0" + ] + }, + "Cake Load Preprocessor Directive - NuGet": { + "prefix": "cake-load-nuget", + "body": [ + "#load \"nuget:${1:https://www.nuget.org/api/v2}?package=${2:Cake.Foo}&version=${3:1.2.3}\"", + "$0" + ] } } \ No newline at end of file From 71929c86e70ae1d105b524b1cb3a4fae2c3350d5 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 12:51:38 +0100 Subject: [PATCH 10/35] (GH-40) Added snippet for reference directive --- snippets/snippets.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/snippets/snippets.json b/snippets/snippets.json index 3ecb42fd..5aca0945 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -90,5 +90,12 @@ "#load \"nuget:${1:https://www.nuget.org/api/v2}?package=${2:Cake.Foo}&version=${3:1.2.3}\"", "$0" ] + }, + "Cake Reference Preprocessor Directive": { + "prefix": "cake-reference", + "body": [ + "#reference \"${1:bin/myassembly.dll}\"", + "$0" + ] } } \ No newline at end of file From 4647366004dedc9b598a2992c99470069bdde5cc Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 12:53:43 +0100 Subject: [PATCH 11/35] (GH-41) Added snippet for tool directive --- snippets/snippets.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/snippets/snippets.json b/snippets/snippets.json index 5aca0945..e9253b53 100644 --- a/snippets/snippets.json +++ b/snippets/snippets.json @@ -97,5 +97,19 @@ "#reference \"${1:bin/myassembly.dll}\"", "$0" ] + }, + "Cake Tool Preprocessor Directive": { + "prefix": "cake-tool", + "body": [ + "#tool \"nuget:?package=${1:Cake.Foo}&version=${2:1.2.3}\"", + "$0" + ] + }, + "Cake Tool Preprocessor Directive - Full": { + "prefix": "cake-tool-full", + "body": [ + "#tool \"nuget:${1:https://www.nuget.org/api/v2}?package=${2:Cake.Foo}&version=${3:1.2.3}\"", + "$0" + ] } } \ No newline at end of file From b6df345d7e5089a72dc651ee1f9da670ef9d2cae Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 14:02:14 +0100 Subject: [PATCH 12/35] (GH-37) Added command to create sample build.cake --- package.json | 5 +++ src/buildFile/cakeBuildFile.ts | 62 +++++++++++++++++++++++++++ src/buildFile/cakeBuildFileCommand.ts | 28 ++++++++++++ src/cakeMain.ts | 5 +++ 4 files changed, 100 insertions(+) create mode 100644 src/buildFile/cakeBuildFile.ts create mode 100644 src/buildFile/cakeBuildFileCommand.ts diff --git a/package.json b/package.json index c0478119..57e26534 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "onCommand:cake.bootstrapper", "onCommand:cake.configuration", "onCommand:cake.debug", + "onCommand:cake.buildFile", "onCommand:workbench.action.tasks.runTask", "onCommand:cake.provideInitialConfigurations" ], @@ -80,6 +81,10 @@ { "command": "cake.debug", "title": "Cake: Download Debug Dependencies" + }, + { + "command": "cake.buildFile", + "title": "Cake: Install Sample Build Cake File" } ], "outputChannels": [ diff --git a/src/buildFile/cakeBuildFile.ts b/src/buildFile/cakeBuildFile.ts new file mode 100644 index 00000000..aeecbcbe --- /dev/null +++ b/src/buildFile/cakeBuildFile.ts @@ -0,0 +1,62 @@ +'use strict'; + +import * as vscode from 'vscode'; +import * as path from 'path'; +import * as fs from 'fs'; + +export class CakeBuildFile { + public getTargetPath(): string { + if (vscode.workspace.rootPath) { + return path.join(vscode.workspace.rootPath, "build.cake"); + } + + return ""; + } + + public create(): Thenable { + return new Promise((resolve, reject) => { + try { + let buildFile = fs.createWriteStream(this.getTargetPath(), { + flags: 'a' + }); + + buildFile.write('///////////////////////////////////////////////////////////////////////////////\n'); + buildFile.write('// ARGUMENTS\n'); + buildFile.write('///////////////////////////////////////////////////////////////////////////////\n'); + buildFile.write('\n'); + buildFile.write('var target = Argument("target", "Default");\n'); + buildFile.write('var configuration = Argument("configuration", "Release");\n'); + buildFile.write('\n'); + buildFile.write('///////////////////////////////////////////////////////////////////////////////\n'); + buildFile.write('// SETUP / TEARDOWN\n'); + buildFile.write('///////////////////////////////////////////////////////////////////////////////\n'); + buildFile.write('\n'); + buildFile.write('Setup(ctx =>\n'); + buildFile.write('{\n'); + buildFile.write(' // Executed BEFORE the first task.\n'); + buildFile.write(' Information("Running tasks...");\n'); + buildFile.write('});\n'); + buildFile.write('\n'); + buildFile.write('Teardown(ctx =>\n'); + buildFile.write('\n'); + buildFile.write(' // Executed AFTER the last task.\n'); + buildFile.write(' Information("Finished running tasks.");\n'); + buildFile.write('});\n'); + buildFile.write('\n'); + buildFile.write('///////////////////////////////////////////////////////////////////////////////\n'); + buildFile.write('// TASKS\n'); + buildFile.write('///////////////////////////////////////////////////////////////////////////////\n'); + buildFile.write('\n'); + buildFile.write('Task("Default")\n'); + buildFile.write('.Does(() => {\n'); + buildFile.write(' Information("Hello Cake!");\n'); + buildFile.write('});\n'); + buildFile.write('\n'); + buildFile.write('RunTarget(target);'); + resolve(true); + } catch(error) { + reject(false); + } + }); + } +} \ No newline at end of file diff --git a/src/buildFile/cakeBuildFileCommand.ts b/src/buildFile/cakeBuildFileCommand.ts new file mode 100644 index 00000000..b0ab08b6 --- /dev/null +++ b/src/buildFile/cakeBuildFileCommand.ts @@ -0,0 +1,28 @@ +import { window, workspace } from 'vscode'; +import * as fs from 'fs'; +import { CakeBuildFile } from './cakeBuildFile'; + +export async function installBuildFile() { + // Check if there is an open folder in workspace + if (workspace.rootPath === undefined) { + window.showErrorMessage('You have not yet opened a folder.'); + return; + } + + // Create the debug object + let buildFile = new CakeBuildFile(); + + var targetPath = buildFile.getTargetPath(); + if (fs.existsSync(targetPath)) { + window.showWarningMessage("build.cake file has already been installed."); + return; + } + + var result = await buildFile.create(); + + if(result) { + window.showInformationMessage("Sample Build Cake File successfully created."); + } else { + window.showErrorMessage("Error creating Sample Build Cake File."); + } +} \ No newline at end of file diff --git a/src/cakeMain.ts b/src/cakeMain.ts index 9f688d1c..9152cf11 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -4,6 +4,7 @@ import * as vscode from 'vscode'; import { installCakeBootstrapper } from './bootstrapper/cakeBootstrapperCommand'; import { installCakeConfiguration } from './configuration/cakeConfigurationCommand'; import { installCakeDebug} from './debug/cakeDebugCommand'; +import { installBuildFile } from './buildFile/cakeBuildFileCommand'; import * as fs from 'fs'; import * as os from 'os'; @@ -21,6 +22,10 @@ export function activate(context: vscode.ExtensionContext): void { // Register the debug command. context.subscriptions.push(vscode.commands.registerCommand('cake.debug', async() => { installCakeDebug(); + })); + // Register the build file command. + context.subscriptions.push(vscode.commands.registerCommand('cake.buildFile', async() => { + installBuildFile(); })) const initialConfigurations = { From ff1dd7351c608a0e9c7846e9bb3f5b5f87a000ad Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 27 Jul 2017 14:06:24 +0100 Subject: [PATCH 13/35] (GH-37) Corrected typo --- src/buildFile/cakeBuildFileCommand.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/buildFile/cakeBuildFileCommand.ts b/src/buildFile/cakeBuildFileCommand.ts index b0ab08b6..a6448f88 100644 --- a/src/buildFile/cakeBuildFileCommand.ts +++ b/src/buildFile/cakeBuildFileCommand.ts @@ -9,7 +9,7 @@ export async function installBuildFile() { return; } - // Create the debug object + // Create the buildFile object let buildFile = new CakeBuildFile(); var targetPath = buildFile.getTargetPath(); From 7fef5fa7b678f9d8039d81ff65d24c1fbfa75059 Mon Sep 17 00:00:00 2001 From: Alistair Chapman Date: Thu, 27 Jul 2017 23:56:40 +1000 Subject: [PATCH 14/35] (GH-42) Add initial aggregate command functionality --- .gitignore | 5 ++- src/install/actions/index.ts | 69 +++++++++++++++++++++++++++++++ src/install/cakeInstallCommand.ts | 25 +++++++++++ src/install/constants.ts | 3 ++ src/install/installOptions.ts | 5 +++ src/install/messages.ts | 3 ++ 6 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/install/actions/index.ts create mode 100644 src/install/cakeInstallCommand.ts create mode 100644 src/install/constants.ts create mode 100644 src/install/installOptions.ts create mode 100644 src/install/messages.ts diff --git a/.gitignore b/.gitignore index 9516e0b5..2fd9200a 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,7 @@ tools/nuget.exe tools/gitreleasemanager/ tools/GitVersion.CommandLine/ tools/Addins/ -tools/packages.config.md5sum \ No newline at end of file +tools/packages.config.md5sum + +# until we move to Yarn +yarn.lock \ No newline at end of file diff --git a/src/install/actions/index.ts b/src/install/actions/index.ts new file mode 100644 index 00000000..04f34594 --- /dev/null +++ b/src/install/actions/index.ts @@ -0,0 +1,69 @@ +import * as vscode from 'vscode'; +import { DEFAULT_SCRIPT_NAME, CANCEL, OUTPUT_CHANNEL_NAME } from '../constants'; +import * as messages from '../messages'; +import InstallOptions from "../installOptions"; + +export function showScriptNameBox(): Thenable { + return vscode.window.showInputBox({ + placeHolder: messages.PROMPT_SCRIPT_NAME, + value: DEFAULT_SCRIPT_NAME + }); +} + +export function handleScriptNameResponse(scriptName: string): Thenable | Thenable { + if (!scriptName) { + // user cancelled + return Promise.reject(CANCEL); + } + return Promise.resolve(new InstallOptions(scriptName)); +} + +export function showBootstrapperOption(installOpts: InstallOptions): Thenable { + /*return vscode.window.showQuickPick([' Yes', 'No'], { + placeHolder: messages.CONFIRM_INSTALL_BOOTSTRAPPERS, + }).then((value) => { + if (!value) { + Promise.reject(CANCEL); + } + installOpts.installBootstrappers = value == 'Yes'; + return installOpts; + }); */ + if (!installOpts) { + Promise.reject(CANCEL); + } + return getOption(messages.CONFIRM_INSTALL_BOOTSTRAPPERS, installOpts, (opts, value) => opts.installBootstrappers = value); +} + +export function showConfigOption(installOpts: InstallOptions): Thenable { + if (!installOpts) { + Promise.reject(CANCEL); + } + return getOption(messages.CONFIRM_INSTALL_CONFIG, installOpts, (opts, value) => opts.installConfig = value); +} + +export function installCake(installOpts: InstallOptions): Thenable { + return new Promise((resolve) => { + var channel = vscode.window.createOutputChannel(OUTPUT_CHANNEL_NAME); + channel.show(); + channel.appendLine(JSON.stringify(installOpts)); + return resolve('Successfully installed Cake to current workspace'); + }); +} + +function getOption( + message: string, + options: InstallOptions, + callback: (opts: InstallOptions, value: boolean) => void +): Thenable { + return new Promise((resolve, reject) => { + vscode.window.showQuickPick(['Yes', 'No'], { + placeHolder: message + }).then((value: string | undefined) => { + if (!value) { + reject(CANCEL) + } + callback(options, value == 'Yes'); + resolve(options); + }); + }); +} \ No newline at end of file diff --git a/src/install/cakeInstallCommand.ts b/src/install/cakeInstallCommand.ts new file mode 100644 index 00000000..2a9de2e9 --- /dev/null +++ b/src/install/cakeInstallCommand.ts @@ -0,0 +1,25 @@ +import * as vscode from 'vscode'; +import { + showScriptNameBox, showBootstrapperOption, handleScriptNameResponse, showConfigOption, installCake +} from './actions' + +import { CANCEL } from './constants' + +export function installCakeToWorkspace() { + showScriptNameBox() + .then(handleScriptNameResponse) + .then(showBootstrapperOption) + .then(showConfigOption) + .then(installCake) + .then((value: string) => { + vscode.window.showInformationMessage(value); + }) + .then(undefined, (err) => { + vscode.window.setStatusBarMessage(''); + if (err !== CANCEL) { + vscode.window.showErrorMessage(err.message || err || 'We encountered an unknown error! Please try again.'); + } else { + vscode.window.setStatusBarMessage('Cake installation cancelled!'); + } + }); +} \ No newline at end of file diff --git a/src/install/constants.ts b/src/install/constants.ts new file mode 100644 index 00000000..a9c70e33 --- /dev/null +++ b/src/install/constants.ts @@ -0,0 +1,3 @@ +export const CANCEL = '__CANCEL__'; +export const DEFAULT_SCRIPT_NAME = 'build.cake' +export const OUTPUT_CHANNEL_NAME = 'Cake Workspace'; \ No newline at end of file diff --git a/src/install/installOptions.ts b/src/install/installOptions.ts new file mode 100644 index 00000000..eedaecde --- /dev/null +++ b/src/install/installOptions.ts @@ -0,0 +1,5 @@ +export default class InstallOptions { + constructor(public scriptName: string) {} + installBootstrappers: boolean; + installConfig: boolean; +} \ No newline at end of file diff --git a/src/install/messages.ts b/src/install/messages.ts new file mode 100644 index 00000000..c2924a35 --- /dev/null +++ b/src/install/messages.ts @@ -0,0 +1,3 @@ +export const PROMPT_SCRIPT_NAME = 'Enter the name for your new build script'; +export const CONFIRM_INSTALL_BOOTSTRAPPERS = 'Do you want to install the bootstrappers?'; +export const CONFIRM_INSTALL_CONFIG = 'Do you want to install a cake.config file?'; \ No newline at end of file From 9b15c1d37a3ac54f491ed45bc1430aa93ac5eb56 Mon Sep 17 00:00:00 2001 From: Alistair Chapman Date: Fri, 28 Jul 2017 02:40:36 +1000 Subject: [PATCH 15/35] (GH-42) New commands and improvements for aggregate command support --- package.json | 5 ++ src/bootstrapper/cakeBootstrapperCommand.ts | 8 +- src/buildFile/cakeBuildFile.ts | 6 +- src/buildFile/cakeBuildFileCommand.ts | 53 ++++++++++--- src/cakeMain.ts | 15 ++-- src/configuration/cakeConfigurationCommand.ts | 59 ++++++++------- src/constants.ts | 5 ++ src/install/actions/bootstrapper.ts | 7 ++ src/install/actions/index.ts | 16 ++-- src/install/actions/installCake.ts | 74 +++++++++++++++++++ src/install/cakeInstallCommand.ts | 2 +- src/install/constants.ts | 3 - src/shared/index.ts | 5 ++ src/shared/log.ts | 27 +++++++ src/{install => shared}/messages.ts | 0 src/shared/utility.ts | 11 +++ 16 files changed, 237 insertions(+), 59 deletions(-) create mode 100644 src/constants.ts create mode 100644 src/install/actions/bootstrapper.ts create mode 100644 src/install/actions/installCake.ts delete mode 100644 src/install/constants.ts create mode 100644 src/shared/index.ts create mode 100644 src/shared/log.ts rename src/{install => shared}/messages.ts (100%) create mode 100644 src/shared/utility.ts diff --git a/package.json b/package.json index 57e26534..7f235b33 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "onCommand:cake.configuration", "onCommand:cake.debug", "onCommand:cake.buildFile", + "onCommand:cake.install", "onCommand:workbench.action.tasks.runTask", "onCommand:cake.provideInitialConfigurations" ], @@ -85,6 +86,10 @@ { "command": "cake.buildFile", "title": "Cake: Install Sample Build Cake File" + }, + { + "command": "cake.install", + "title": "Cake: Install Cake to workspace" } ], "outputChannels": [ diff --git a/src/bootstrapper/cakeBootstrapperCommand.ts b/src/bootstrapper/cakeBootstrapperCommand.ts index 9289ad40..d85b5057 100644 --- a/src/bootstrapper/cakeBootstrapperCommand.ts +++ b/src/bootstrapper/cakeBootstrapperCommand.ts @@ -1,6 +1,7 @@ import {window, workspace} from 'vscode'; import * as fs from 'fs'; import {CakeBootstrapper} from './cakeBootstrapper'; +import { CakeBootstrapperInfo } from "./cakeBootstrapperInfo"; export async function installCakeBootstrapper() { @@ -19,7 +20,10 @@ export async function installCakeBootstrapper() window.showErrorMessage('You have not yet opened a folder.'); return; } + installCakeBootstrapperFile(info); +} +export async function installCakeBootstrapperFile(info: CakeBootstrapperInfo, notifyOnCompletion: boolean = true) { // Create the bootstrapper from the platform. let bootstrapper = new CakeBootstrapper(info); @@ -40,7 +44,9 @@ export async function installCakeBootstrapper() if (process.platform !== 'win32' && info.posix) { fs.chmod(buildFilePath, 0o755); } - window.showInformationMessage('Cake bootstrapper downloaded successfully.'); + if (notifyOnCompletion) { + window.showInformationMessage('Cake bootstrapper downloaded successfully.'); + } } else { window.showErrorMessage('Error downloading Cake bootstrapper.'); } diff --git a/src/buildFile/cakeBuildFile.ts b/src/buildFile/cakeBuildFile.ts index aeecbcbe..bba35d79 100644 --- a/src/buildFile/cakeBuildFile.ts +++ b/src/buildFile/cakeBuildFile.ts @@ -3,11 +3,15 @@ import * as vscode from 'vscode'; import * as path from 'path'; import * as fs from 'fs'; +import { DEFAULT_SCRIPT_NAME } from "../constants"; export class CakeBuildFile { + + constructor(public scriptName: string = DEFAULT_SCRIPT_NAME) {} + public getTargetPath(): string { if (vscode.workspace.rootPath) { - return path.join(vscode.workspace.rootPath, "build.cake"); + return path.join(vscode.workspace.rootPath, this.scriptName); } return ""; diff --git a/src/buildFile/cakeBuildFileCommand.ts b/src/buildFile/cakeBuildFileCommand.ts index a6448f88..35d55468 100644 --- a/src/buildFile/cakeBuildFileCommand.ts +++ b/src/buildFile/cakeBuildFileCommand.ts @@ -1,28 +1,63 @@ import { window, workspace } from 'vscode'; -import * as fs from 'fs'; import { CakeBuildFile } from './cakeBuildFile'; +import { messages, utils } from "../shared"; +import { DEFAULT_SCRIPT_NAME, CANCEL } from "../constants"; -export async function installBuildFile() { +export async function installBuildFileCommand() { // Check if there is an open folder in workspace if (workspace.rootPath === undefined) { window.showErrorMessage('You have not yet opened a folder.'); return; } - // Create the buildFile object - let buildFile = new CakeBuildFile(); + var name = await window.showInputBox({ + placeHolder: messages.PROMPT_SCRIPT_NAME, + value: DEFAULT_SCRIPT_NAME + }); - var targetPath = buildFile.getTargetPath(); - if (fs.existsSync(targetPath)) { - window.showWarningMessage("build.cake file has already been installed."); + if (!name) { + window.showWarningMessage('No script name provided! Try again and make sure to provide a file name.'); return; } - var result = await buildFile.create(); + var result = await installBuildFile(name); if(result) { window.showInformationMessage("Sample Build Cake File successfully created."); } else { window.showErrorMessage("Error creating Sample Build Cake File."); } -} \ No newline at end of file +} + +export async function installBuildFile(fileName: string): Promise { + // Create the buildFile object + let buildFile = new CakeBuildFile(fileName); + + var targetPath = buildFile.getTargetPath(); + var ready = await utils.checkForExisting(targetPath); + if (!ready) { + Promise.reject(CANCEL); + } + var result = await buildFile.create(); + return result; +} + +/* +export function installBuildFile(fileName: string): Thenable { + return new Promise((resolve, reject) => { + // Create the buildFile object + let buildFile = new CakeBuildFile(fileName); + + var targetPath = buildFile.getTargetPath(); + utils.checkForExisting(targetPath) + .then(v => { + if (!v) { + reject(CANCEL); + } + buildFile.create() + .then(_ => resolve(true), _ => reject(false)); + }, _ => reject(false)); + }) + +} +*/ \ No newline at end of file diff --git a/src/cakeMain.ts b/src/cakeMain.ts index 9152cf11..11debda0 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -2,9 +2,10 @@ import * as vscode from 'vscode'; import { installCakeBootstrapper } from './bootstrapper/cakeBootstrapperCommand'; -import { installCakeConfiguration } from './configuration/cakeConfigurationCommand'; +import { installCakeConfigurationCommand } from './configuration/cakeConfigurationCommand'; import { installCakeDebug} from './debug/cakeDebugCommand'; -import { installBuildFile } from './buildFile/cakeBuildFileCommand'; +import { installBuildFileCommand } from './buildFile/cakeBuildFileCommand'; +import { installCakeToWorkspace } from './install/cakeInstallCommand'; import * as fs from 'fs'; import * as os from 'os'; @@ -17,7 +18,7 @@ export function activate(context: vscode.ExtensionContext): void { })); // Register the configuration command. context.subscriptions.push(vscode.commands.registerCommand('cake.configuration', async () => { - installCakeConfiguration(); + installCakeConfigurationCommand(); })); // Register the debug command. context.subscriptions.push(vscode.commands.registerCommand('cake.debug', async() => { @@ -25,8 +26,12 @@ export function activate(context: vscode.ExtensionContext): void { })); // Register the build file command. context.subscriptions.push(vscode.commands.registerCommand('cake.buildFile', async() => { - installBuildFile(); - })) + installBuildFileCommand(); + })); + // Register the interactive install command. + context.subscriptions.push(vscode.commands.registerCommand('cake.install', async() => { + installCakeToWorkspace(); + })); const initialConfigurations = { version: '0.2.0', diff --git a/src/configuration/cakeConfigurationCommand.ts b/src/configuration/cakeConfigurationCommand.ts index eac78a2b..a282016c 100644 --- a/src/configuration/cakeConfigurationCommand.ts +++ b/src/configuration/cakeConfigurationCommand.ts @@ -1,34 +1,37 @@ -import {window, workspace} from 'vscode'; +import { window, workspace } from 'vscode'; import * as fs from 'fs'; -import {CakeConfiguration} from './cakeConfiguration'; +import { CakeConfiguration } from './cakeConfiguration'; +import { utils } from "../shared"; +import { CANCEL } from "../constants"; -export async function installCakeConfiguration() -{ - // Check if there is an open folder in workspace - if (workspace.rootPath === undefined) { - window.showErrorMessage('You have not yet opened a folder.'); - return; - } +export async function installCakeConfigurationCommand() { + // Check if there is an open folder in workspace + if (workspace.rootPath === undefined) { + window.showErrorMessage('You have not yet opened a folder.'); + return; + } - // Create the configuration object - let configuration = new CakeConfiguration(); + var result = await installCakeConfiguration(); + if (result) { + window.showInformationMessage('Cake configuration downloaded successfully.'); + } else { + window.showErrorMessage('Error downloading Cake configuration.'); + } +} - // Does the configuration already exist? - var targetPath = configuration.getTargetPath(); - if (fs.existsSync(targetPath)) { - var message = `Overwrite the existing cake.config file in this folder?`; - var option = await window.showWarningMessage(message, 'Overwrite'); - if (option !== 'Overwrite') { - return; - } - } +export async function installCakeConfiguration(): Promise { + // Create the configuration object + let configuration = new CakeConfiguration(); - // Download the configuration and save it to disk. - var file = fs.createWriteStream(targetPath); - var result = await configuration.download(file); - if (result) { - window.showInformationMessage('Cake configuration downloaded successfully.'); - } else { - window.showErrorMessage('Error downloading Cake configuration.'); - } + // Does the configuration already exist? + var targetPath = configuration.getTargetPath(); + var ready = utils.checkForExisting(targetPath); + if (!ready) { + Promise.reject(CANCEL); + } + + // Download the configuration and save it to disk. + var file = fs.createWriteStream(targetPath); + var result = await configuration.download(file); + return result; } \ No newline at end of file diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 00000000..7b6485d5 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,5 @@ +export const CANCEL = '__CANCEL__'; +export const DEFAULT_SCRIPT_NAME = 'build.cake'; +export const OUTPUT_CHANNEL_NAME = 'Cake Workspace'; +export const ERROR_INVALID_SETTINGS = 'Invalid installation options! Please try again.'; +export const ERROR_NO_WORKSPACE = 'You have not yet opened a folder.'; \ No newline at end of file diff --git a/src/install/actions/bootstrapper.ts b/src/install/actions/bootstrapper.ts new file mode 100644 index 00000000..f3c63d32 --- /dev/null +++ b/src/install/actions/bootstrapper.ts @@ -0,0 +1,7 @@ +import { installCakeBootstrapperFile } from '../../bootstrapper/cakeBootstrapperCommand'; +import { CakeBootstrapper } from '../../bootstrapper/cakeBootstrapper'; + +export function installBootstrappers(): Promise { + var infos = CakeBootstrapper.getBootstrappers(); + return Promise.all(infos.map(i => installCakeBootstrapperFile(i, false))); +} \ No newline at end of file diff --git a/src/install/actions/index.ts b/src/install/actions/index.ts index 04f34594..5f27e4fb 100644 --- a/src/install/actions/index.ts +++ b/src/install/actions/index.ts @@ -1,7 +1,10 @@ import * as vscode from 'vscode'; -import { DEFAULT_SCRIPT_NAME, CANCEL, OUTPUT_CHANNEL_NAME } from '../constants'; -import * as messages from '../messages'; +import { DEFAULT_SCRIPT_NAME, CANCEL } from '../../constants'; +import { messages } from "../../shared"; import InstallOptions from "../installOptions"; +import { installCake } from './installCake'; + +export {installCake} export function showScriptNameBox(): Thenable { return vscode.window.showInputBox({ @@ -41,15 +44,6 @@ export function showConfigOption(installOpts: InstallOptions): Thenable opts.installConfig = value); } -export function installCake(installOpts: InstallOptions): Thenable { - return new Promise((resolve) => { - var channel = vscode.window.createOutputChannel(OUTPUT_CHANNEL_NAME); - channel.show(); - channel.appendLine(JSON.stringify(installOpts)); - return resolve('Successfully installed Cake to current workspace'); - }); -} - function getOption( message: string, options: InstallOptions, diff --git a/src/install/actions/installCake.ts b/src/install/actions/installCake.ts new file mode 100644 index 00000000..9eab0a44 --- /dev/null +++ b/src/install/actions/installCake.ts @@ -0,0 +1,74 @@ +import * as vscode from 'vscode'; +import { logger } from "../../shared"; +import InstallOptions from "../installOptions"; +import { ERROR_INVALID_SETTINGS, ERROR_NO_WORKSPACE } from "../../constants"; +import { installBootstrappers } from "./bootstrapper"; +import { installBuildFile } from "../../buildFile/cakeBuildFileCommand"; +import { installCakeConfiguration } from '../../configuration/cakeConfigurationCommand'; + +export function installCake(installOpts: InstallOptions): Promise { + return new Promise((resolve, reject) => { + if (!installOpts) { + logger.logError(ERROR_INVALID_SETTINGS, true); + reject(ERROR_INVALID_SETTINGS) + } + // Check if there is an open folder in workspace + if (vscode.workspace.rootPath === undefined) { + vscode.window.showErrorMessage(ERROR_NO_WORKSPACE); + reject(ERROR_NO_WORKSPACE); + } + logSettingsToOutput(installOpts); + var results = new Array>(); + results.push(installBuildFile(installOpts.scriptName) + .then(v => { + logResult( + v, + `Cake script successfully created at '${installOpts.scriptName}'`, + 'Error encountered while creating default build script' + ); + }, err => { + logResult(false, '', err); + })); + if (installOpts.installBootstrappers) { + results.push(installBootstrappers() + .then(_ => logResult(true, 'Bootstrappers successfully created')) + .catch(err => logResult(false, '', `Error encountered while creating bootstrappers (${err})`)) + ); + } + if (installOpts.installConfig) { + results.push(installCakeConfiguration() + .then(v => { + logResult( + v, + 'Configuration file successfully created at \'cake.config\'', + 'Error encountered while creating configuration file' + ); + })); + } + Promise.all(results) + .then(_ => { + resolve('Successfully installed Cake to current workspace'); + }, + err => { + reject(err); + }) + .catch(err => reject(err)); + }) +} + +function logResult(result: boolean, success: string, failure?: string) { + failure = failure ? failure : 'An error has occurred!'; + if (result) { + logger.logToOutput(success); + } else { + logger.logError(failure, true); + } +} + +function logSettingsToOutput(installOpts: InstallOptions): void { + logger.logToOutput( + 'Installing Cake to current workspace:', + ` - Script name: '${installOpts.scriptName}'`, + ` - Installing: script${installOpts.installBootstrappers ? ', bootstrappers' : ''}${installOpts.installConfig ? ', cake.config' : ''}` + ); +} \ No newline at end of file diff --git a/src/install/cakeInstallCommand.ts b/src/install/cakeInstallCommand.ts index 2a9de2e9..39ebb184 100644 --- a/src/install/cakeInstallCommand.ts +++ b/src/install/cakeInstallCommand.ts @@ -3,7 +3,7 @@ import { showScriptNameBox, showBootstrapperOption, handleScriptNameResponse, showConfigOption, installCake } from './actions' -import { CANCEL } from './constants' +import { CANCEL } from '../constants' export function installCakeToWorkspace() { showScriptNameBox() diff --git a/src/install/constants.ts b/src/install/constants.ts deleted file mode 100644 index a9c70e33..00000000 --- a/src/install/constants.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const CANCEL = '__CANCEL__'; -export const DEFAULT_SCRIPT_NAME = 'build.cake' -export const OUTPUT_CHANNEL_NAME = 'Cake Workspace'; \ No newline at end of file diff --git a/src/shared/index.ts b/src/shared/index.ts new file mode 100644 index 00000000..946c2490 --- /dev/null +++ b/src/shared/index.ts @@ -0,0 +1,5 @@ +import * as logger from './log'; +import * as utils from './utility'; +import * as messages from './messages'; + +export {logger, messages, utils}; \ No newline at end of file diff --git a/src/shared/log.ts b/src/shared/log.ts new file mode 100644 index 00000000..8768ad28 --- /dev/null +++ b/src/shared/log.ts @@ -0,0 +1,27 @@ +import { window, OutputChannel } from 'vscode'; +import { OUTPUT_CHANNEL_NAME } from "../constants"; + +let channel: OutputChannel; + +export function logToOutput(...items: string[]): void { + var channel = getChannel(OUTPUT_CHANNEL_NAME); + items.forEach(item => { + channel.appendLine(item); + }); +} + +export function logError(error: string, notify: boolean = true) { + var channel = getChannel(OUTPUT_CHANNEL_NAME); + channel.appendLine('Error encountered during Cake operation!') + channel.appendLine(`E: ${error}`); + if (notify) { + window.showErrorMessage(error); + } +} + +function getChannel(name: string): OutputChannel { + if (!channel) { + channel = window.createOutputChannel(name); + } + return channel; +} \ No newline at end of file diff --git a/src/install/messages.ts b/src/shared/messages.ts similarity index 100% rename from src/install/messages.ts rename to src/shared/messages.ts diff --git a/src/shared/utility.ts b/src/shared/utility.ts new file mode 100644 index 00000000..b2720e01 --- /dev/null +++ b/src/shared/utility.ts @@ -0,0 +1,11 @@ +import { window } from 'vscode'; +import * as fs from 'fs'; + +export async function checkForExisting(path: string): Promise { + if (fs.existsSync(path)) { + var message = `Overwrite the existing \'${path}\' file in this folder?`; + var option = await window.showWarningMessage(message, 'Overwrite'); + return option === 'Overwrite'; + } + return true; +} \ No newline at end of file From 4ebfbc65dcce7fdcaaef2953d795beb54ba87809 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Fri, 28 Jul 2017 20:06:12 +0100 Subject: [PATCH 16/35] (maint) whitespace changes - Using Alt-Shift-F across all project files --- src/bootstrapper/cakeBootstrapperCommand.ts | 85 ++++++++++----------- src/buildFile/cakeBuildFile.ts | 4 +- src/buildFile/cakeBuildFileCommand.ts | 2 +- src/cakeMain.ts | 18 ++--- src/debug/cakeDebug.ts | 2 +- src/debug/cakeDebugCommand.ts | 13 ++-- src/install/actions/index.ts | 2 +- src/install/actions/installCake.ts | 30 ++++---- src/install/installOptions.ts | 2 +- src/shared/index.ts | 2 +- 10 files changed, 79 insertions(+), 81 deletions(-) diff --git a/src/bootstrapper/cakeBootstrapperCommand.ts b/src/bootstrapper/cakeBootstrapperCommand.ts index d85b5057..6ee28cea 100644 --- a/src/bootstrapper/cakeBootstrapperCommand.ts +++ b/src/bootstrapper/cakeBootstrapperCommand.ts @@ -1,53 +1,52 @@ -import {window, workspace} from 'vscode'; +import { window, workspace } from 'vscode'; import * as fs from 'fs'; -import {CakeBootstrapper} from './cakeBootstrapper'; +import { CakeBootstrapper } from './cakeBootstrapper'; import { CakeBootstrapperInfo } from "./cakeBootstrapperInfo"; -export async function installCakeBootstrapper() -{ - // Let the user select the bootstrapper. - var info = await window.showQuickPick(CakeBootstrapper.getBootstrappers(), { - "placeHolder": "Select the bootstrapper that you want to install", - "matchOnDetail": true, - "matchOnDescription": true - }); - if (!info) { - return; - } +export async function installCakeBootstrapper() { + // Let the user select the bootstrapper. + var info = await window.showQuickPick(CakeBootstrapper.getBootstrappers(), { + "placeHolder": "Select the bootstrapper that you want to install", + "matchOnDetail": true, + "matchOnDescription": true + }); + if (!info) { + return; + } - // Check if there is an open folder in workspace - if (workspace.rootPath === undefined) { - window.showErrorMessage('You have not yet opened a folder.'); - return; - } - installCakeBootstrapperFile(info); + // Check if there is an open folder in workspace + if (workspace.rootPath === undefined) { + window.showErrorMessage('You have not yet opened a folder.'); + return; + } + installCakeBootstrapperFile(info); } export async function installCakeBootstrapperFile(info: CakeBootstrapperInfo, notifyOnCompletion: boolean = true) { - // Create the bootstrapper from the platform. - let bootstrapper = new CakeBootstrapper(info); + // Create the bootstrapper from the platform. + let bootstrapper = new CakeBootstrapper(info); - // Does the bootstrapper already exist? - var buildFilePath = bootstrapper.getTargetPath(); - if (fs.existsSync(buildFilePath)) { - var message = `Overwrite the existing \'${info.fileName}\' file in this folder?`; - var option = await window.showWarningMessage(message, 'Overwrite'); - if (option !== 'Overwrite') { - return; - } - } + // Does the bootstrapper already exist? + var buildFilePath = bootstrapper.getTargetPath(); + if (fs.existsSync(buildFilePath)) { + var message = `Overwrite the existing \'${info.fileName}\' file in this folder?`; + var option = await window.showWarningMessage(message, 'Overwrite'); + if (option !== 'Overwrite') { + return; + } + } - // Download the bootstrapper and save it to disk. - var file = fs.createWriteStream(buildFilePath); - var result = await bootstrapper.download(file); - if (result) { - if (process.platform !== 'win32' && info.posix) { - fs.chmod(buildFilePath, 0o755); - } - if (notifyOnCompletion) { - window.showInformationMessage('Cake bootstrapper downloaded successfully.'); - } - } else { - window.showErrorMessage('Error downloading Cake bootstrapper.'); - } + // Download the bootstrapper and save it to disk. + var file = fs.createWriteStream(buildFilePath); + var result = await bootstrapper.download(file); + if (result) { + if (process.platform !== 'win32' && info.posix) { + fs.chmod(buildFilePath, 0o755); + } + if (notifyOnCompletion) { + window.showInformationMessage('Cake bootstrapper downloaded successfully.'); + } + } else { + window.showErrorMessage('Error downloading Cake bootstrapper.'); + } } \ No newline at end of file diff --git a/src/buildFile/cakeBuildFile.ts b/src/buildFile/cakeBuildFile.ts index bba35d79..e0cb7017 100644 --- a/src/buildFile/cakeBuildFile.ts +++ b/src/buildFile/cakeBuildFile.ts @@ -7,7 +7,7 @@ import { DEFAULT_SCRIPT_NAME } from "../constants"; export class CakeBuildFile { - constructor(public scriptName: string = DEFAULT_SCRIPT_NAME) {} + constructor(public scriptName: string = DEFAULT_SCRIPT_NAME) { } public getTargetPath(): string { if (vscode.workspace.rootPath) { @@ -58,7 +58,7 @@ export class CakeBuildFile { buildFile.write('\n'); buildFile.write('RunTarget(target);'); resolve(true); - } catch(error) { + } catch (error) { reject(false); } }); diff --git a/src/buildFile/cakeBuildFileCommand.ts b/src/buildFile/cakeBuildFileCommand.ts index 35d55468..9266ca44 100644 --- a/src/buildFile/cakeBuildFileCommand.ts +++ b/src/buildFile/cakeBuildFileCommand.ts @@ -22,7 +22,7 @@ export async function installBuildFileCommand() { var result = await installBuildFile(name); - if(result) { + if (result) { window.showInformationMessage("Sample Build Cake File successfully created."); } else { window.showErrorMessage("Error creating Sample Build Cake File."); diff --git a/src/cakeMain.ts b/src/cakeMain.ts index 11debda0..b991008d 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -3,7 +3,7 @@ import * as vscode from 'vscode'; import { installCakeBootstrapper } from './bootstrapper/cakeBootstrapperCommand'; import { installCakeConfigurationCommand } from './configuration/cakeConfigurationCommand'; -import { installCakeDebug} from './debug/cakeDebugCommand'; +import { installCakeDebug } from './debug/cakeDebugCommand'; import { installBuildFileCommand } from './buildFile/cakeBuildFileCommand'; import { installCakeToWorkspace } from './install/cakeInstallCommand'; import * as fs from 'fs'; @@ -21,15 +21,15 @@ export function activate(context: vscode.ExtensionContext): void { installCakeConfigurationCommand(); })); // Register the debug command. - context.subscriptions.push(vscode.commands.registerCommand('cake.debug', async() => { + context.subscriptions.push(vscode.commands.registerCommand('cake.debug', async () => { installCakeDebug(); })); // Register the build file command. - context.subscriptions.push(vscode.commands.registerCommand('cake.buildFile', async() => { + context.subscriptions.push(vscode.commands.registerCommand('cake.buildFile', async () => { installBuildFileCommand(); })); // Register the interactive install command. - context.subscriptions.push(vscode.commands.registerCommand('cake.install', async() => { + context.subscriptions.push(vscode.commands.registerCommand('cake.install', async () => { installCakeToWorkspace(); })); @@ -42,9 +42,9 @@ export function activate(context: vscode.ExtensionContext): void { "request": "launch", "program": "${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll", "args": [ - "${workspaceRoot}/build.cake", - "--debug", - "--verbosity=diagnostic" + "${workspaceRoot}/build.cake", + "--debug", + "--verbosity=diagnostic" ], "cwd": "${workspaceRoot}", "stopAtEntry": true, @@ -61,7 +61,7 @@ export function activate(context: vscode.ExtensionContext): void { function onConfigurationChanged() { let autoDetect = vscode.workspace.getConfiguration('cake').get('taskRunner.autoDetect'); - if (taskProvider && !autoDetect) { + if (taskProvider && !autoDetect) { taskProvider.dispose(); taskProvider = undefined; } else if (!taskProvider && autoDetect) { @@ -101,7 +101,7 @@ async function getCakeScriptsAsTasks(): Promise { try { let cakeConfig = vscode.workspace.getConfiguration('cake'); - let files = await vscode.workspace.findFiles(cakeConfig.taskRunner.scriptsIncludePattern, cakeConfig.taskRunner.scriptsExcludePattern ); + let files = await vscode.workspace.findFiles(cakeConfig.taskRunner.scriptsIncludePattern, cakeConfig.taskRunner.scriptsExcludePattern); if (files.length === 0) { return emptyTasks; } diff --git a/src/debug/cakeDebug.ts b/src/debug/cakeDebug.ts index 5a2ea838..392681ae 100644 --- a/src/debug/cakeDebug.ts +++ b/src/debug/cakeDebug.ts @@ -39,7 +39,7 @@ export class CakeDebug { fs.mkdirSync(vm.getToolFolderPath()); } - var data:any[] = [], dataLen = 0; + var data: any[] = [], dataLen = 0; request.get("http://nuget.org/api/v2/package/Cake.CoreCLR/", { timeout: 10000 }) .on('data', function (chunk: any) { diff --git a/src/debug/cakeDebugCommand.ts b/src/debug/cakeDebugCommand.ts index 3e2ec771..8dd25c20 100644 --- a/src/debug/cakeDebugCommand.ts +++ b/src/debug/cakeDebugCommand.ts @@ -1,11 +1,10 @@ -import {window, workspace} from 'vscode'; +import { window, workspace } from 'vscode'; import * as fs from 'fs'; -import {CakeDebug} from './cakeDebug'; +import { CakeDebug } from './cakeDebug'; -export async function installCakeDebug() -{ +export async function installCakeDebug() { // Check if there is an open folder in workspace - if(workspace.rootPath === undefined) { + if (workspace.rootPath === undefined) { window.showErrorMessage('You have not yet opened a folder.'); return; } @@ -14,14 +13,14 @@ export async function installCakeDebug() let debug = new CakeDebug(); var targetPath = debug.getTargetPath(); - if(fs.existsSync(targetPath)) { + if (fs.existsSync(targetPath)) { window.showWarningMessage("Cake.CoreCLR package has already been installed."); return; } var result = await debug.downloadAndExtract(); - if(result) { + if (result) { window.showInformationMessage("Cake Debug Dependencies correctly downloaded."); } else { window.showErrorMessage("Error downloading Cake Debug Dependencies"); diff --git a/src/install/actions/index.ts b/src/install/actions/index.ts index 5f27e4fb..5385267c 100644 --- a/src/install/actions/index.ts +++ b/src/install/actions/index.ts @@ -4,7 +4,7 @@ import { messages } from "../../shared"; import InstallOptions from "../installOptions"; import { installCake } from './installCake'; -export {installCake} +export { installCake } export function showScriptNameBox(): Thenable { return vscode.window.showInputBox({ diff --git a/src/install/actions/installCake.ts b/src/install/actions/installCake.ts index 9eab0a44..d7aec2d4 100644 --- a/src/install/actions/installCake.ts +++ b/src/install/actions/installCake.ts @@ -22,10 +22,10 @@ export function installCake(installOpts: InstallOptions): Promise { results.push(installBuildFile(installOpts.scriptName) .then(v => { logResult( - v, - `Cake script successfully created at '${installOpts.scriptName}'`, - 'Error encountered while creating default build script' - ); + v, + `Cake script successfully created at '${installOpts.scriptName}'`, + 'Error encountered while creating default build script' + ); }, err => { logResult(false, '', err); })); @@ -39,20 +39,20 @@ export function installCake(installOpts: InstallOptions): Promise { results.push(installCakeConfiguration() .then(v => { logResult( - v, - 'Configuration file successfully created at \'cake.config\'', - 'Error encountered while creating configuration file' - ); + v, + 'Configuration file successfully created at \'cake.config\'', + 'Error encountered while creating configuration file' + ); })); } Promise.all(results) - .then(_ => { - resolve('Successfully installed Cake to current workspace'); - }, - err => { - reject(err); - }) - .catch(err => reject(err)); + .then(_ => { + resolve('Successfully installed Cake to current workspace'); + }, + err => { + reject(err); + }) + .catch(err => reject(err)); }) } diff --git a/src/install/installOptions.ts b/src/install/installOptions.ts index eedaecde..9b829f8e 100644 --- a/src/install/installOptions.ts +++ b/src/install/installOptions.ts @@ -1,5 +1,5 @@ export default class InstallOptions { - constructor(public scriptName: string) {} + constructor(public scriptName: string) { } installBootstrappers: boolean; installConfig: boolean; } \ No newline at end of file diff --git a/src/shared/index.ts b/src/shared/index.ts index 946c2490..fa0b8a67 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -2,4 +2,4 @@ import * as logger from './log'; import * as utils from './utility'; import * as messages from './messages'; -export {logger, messages, utils}; \ No newline at end of file +export { logger, messages, utils }; \ No newline at end of file From b703b8fb7c64c11199009423a0d84e145dac317e Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Fri, 28 Jul 2017 20:09:02 +0100 Subject: [PATCH 17/35] (maint) Removed explicit use strict from files - This is set up in the tsconfig.json file --- src/bootstrapper/cakeBootstrapper.ts | 2 -- src/bootstrapper/cakeBootstrapperInfo.ts | 2 -- src/buildFile/cakeBuildFile.ts | 2 -- src/cakeMain.ts | 2 -- src/configuration/cakeConfiguration.ts | 2 -- src/debug/cakeDebug.ts | 2 -- test/memorystream.ts | 13 +++++-------- 7 files changed, 5 insertions(+), 20 deletions(-) diff --git a/src/bootstrapper/cakeBootstrapper.ts b/src/bootstrapper/cakeBootstrapper.ts index dd056d03..da428753 100644 --- a/src/bootstrapper/cakeBootstrapper.ts +++ b/src/bootstrapper/cakeBootstrapper.ts @@ -1,5 +1,3 @@ -'use strict'; - var request = require('request'); import vscode = require('vscode'); import * as path from 'path'; diff --git a/src/bootstrapper/cakeBootstrapperInfo.ts b/src/bootstrapper/cakeBootstrapperInfo.ts index 0d00f997..6dba3066 100644 --- a/src/bootstrapper/cakeBootstrapperInfo.ts +++ b/src/bootstrapper/cakeBootstrapperInfo.ts @@ -1,5 +1,3 @@ -'use strict'; - // This is an implementation of the QuickPickItem interface // that is used to show the available bootstrappers. // https://code.visualstudio.com/Docs/extensionAPI/vscode-api#QuickPickItem. diff --git a/src/buildFile/cakeBuildFile.ts b/src/buildFile/cakeBuildFile.ts index e0cb7017..f640db52 100644 --- a/src/buildFile/cakeBuildFile.ts +++ b/src/buildFile/cakeBuildFile.ts @@ -1,5 +1,3 @@ -'use strict'; - import * as vscode from 'vscode'; import * as path from 'path'; import * as fs from 'fs'; diff --git a/src/cakeMain.ts b/src/cakeMain.ts index b991008d..1c1d4383 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -1,5 +1,3 @@ -'use strict'; - import * as vscode from 'vscode'; import { installCakeBootstrapper } from './bootstrapper/cakeBootstrapperCommand'; import { installCakeConfigurationCommand } from './configuration/cakeConfigurationCommand'; diff --git a/src/configuration/cakeConfiguration.ts b/src/configuration/cakeConfiguration.ts index 8363a9aa..41246a16 100644 --- a/src/configuration/cakeConfiguration.ts +++ b/src/configuration/cakeConfiguration.ts @@ -1,5 +1,3 @@ -'use strict'; - var request = require('request'); import vscode = require('vscode'); import * as path from 'path'; diff --git a/src/debug/cakeDebug.ts b/src/debug/cakeDebug.ts index 392681ae..91b77415 100644 --- a/src/debug/cakeDebug.ts +++ b/src/debug/cakeDebug.ts @@ -1,5 +1,3 @@ -'use strict'; - var request = require('request'); var AdmZip = require('adm-zip'); import * as vscode from 'vscode'; diff --git a/test/memorystream.ts b/test/memorystream.ts index 670a9fd7..47034b0f 100644 --- a/test/memorystream.ts +++ b/test/memorystream.ts @@ -1,23 +1,20 @@ -'use strict'; - import * as stream from "stream"; export class MemoryStream extends stream.Writable { - - private memBuffer : Buffer; + private memBuffer : Buffer; constructor(opts?: stream.WritableOptions) { super(opts); this.memBuffer = new Buffer(""); } - + toString() : string { return this.memBuffer.toString(); } - + _write(chunk: any, encoding: string, callback: Function): void { let buffer = (Buffer.isBuffer(chunk)) ? chunk : new Buffer(chunk, encoding); - + this.memBuffer = Buffer.concat([this.memBuffer, buffer]); callback(); } -} \ No newline at end of file +} \ No newline at end of file From 2a518e4c6e22bd9f6872c538747d0abe791fad76 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Fri, 28 Jul 2017 20:11:14 +0100 Subject: [PATCH 18/35] (maint) Renamed functions for consistency --- src/bootstrapper/cakeBootstrapperCommand.ts | 2 +- src/cakeMain.ts | 12 ++++++------ src/debug/cakeDebugCommand.ts | 2 +- src/install/cakeInstallCommand.ts | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/bootstrapper/cakeBootstrapperCommand.ts b/src/bootstrapper/cakeBootstrapperCommand.ts index 6ee28cea..e10d8cee 100644 --- a/src/bootstrapper/cakeBootstrapperCommand.ts +++ b/src/bootstrapper/cakeBootstrapperCommand.ts @@ -3,7 +3,7 @@ import * as fs from 'fs'; import { CakeBootstrapper } from './cakeBootstrapper'; import { CakeBootstrapperInfo } from "./cakeBootstrapperInfo"; -export async function installCakeBootstrapper() { +export async function installCakeBootstrapperCommand() { // Let the user select the bootstrapper. var info = await window.showQuickPick(CakeBootstrapper.getBootstrappers(), { "placeHolder": "Select the bootstrapper that you want to install", diff --git a/src/cakeMain.ts b/src/cakeMain.ts index 1c1d4383..df87a8ab 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -1,9 +1,9 @@ import * as vscode from 'vscode'; -import { installCakeBootstrapper } from './bootstrapper/cakeBootstrapperCommand'; +import { installCakeBootstrapperCommand } from './bootstrapper/cakeBootstrapperCommand'; import { installCakeConfigurationCommand } from './configuration/cakeConfigurationCommand'; -import { installCakeDebug } from './debug/cakeDebugCommand'; +import { installCakeDebugCommand } from './debug/cakeDebugCommand'; import { installBuildFileCommand } from './buildFile/cakeBuildFileCommand'; -import { installCakeToWorkspace } from './install/cakeInstallCommand'; +import { installCakeToWorkspaceCommand} from './install/cakeInstallCommand'; import * as fs from 'fs'; import * as os from 'os'; @@ -12,7 +12,7 @@ let taskProvider: vscode.Disposable | undefined; export function activate(context: vscode.ExtensionContext): void { // Register the bootstrapper command. context.subscriptions.push(vscode.commands.registerCommand('cake.bootstrapper', async () => { - installCakeBootstrapper(); + installCakeBootstrapperCommand(); })); // Register the configuration command. context.subscriptions.push(vscode.commands.registerCommand('cake.configuration', async () => { @@ -20,7 +20,7 @@ export function activate(context: vscode.ExtensionContext): void { })); // Register the debug command. context.subscriptions.push(vscode.commands.registerCommand('cake.debug', async () => { - installCakeDebug(); + installCakeDebugCommand(); })); // Register the build file command. context.subscriptions.push(vscode.commands.registerCommand('cake.buildFile', async () => { @@ -28,7 +28,7 @@ export function activate(context: vscode.ExtensionContext): void { })); // Register the interactive install command. context.subscriptions.push(vscode.commands.registerCommand('cake.install', async () => { - installCakeToWorkspace(); + installCakeToWorkspaceCommand(); })); const initialConfigurations = { diff --git a/src/debug/cakeDebugCommand.ts b/src/debug/cakeDebugCommand.ts index 8dd25c20..6ca9e4ba 100644 --- a/src/debug/cakeDebugCommand.ts +++ b/src/debug/cakeDebugCommand.ts @@ -2,7 +2,7 @@ import { window, workspace } from 'vscode'; import * as fs from 'fs'; import { CakeDebug } from './cakeDebug'; -export async function installCakeDebug() { +export async function installCakeDebugCommand() { // Check if there is an open folder in workspace if (workspace.rootPath === undefined) { window.showErrorMessage('You have not yet opened a folder.'); diff --git a/src/install/cakeInstallCommand.ts b/src/install/cakeInstallCommand.ts index 39ebb184..8b4ecfe9 100644 --- a/src/install/cakeInstallCommand.ts +++ b/src/install/cakeInstallCommand.ts @@ -5,7 +5,7 @@ import { import { CANCEL } from '../constants' -export function installCakeToWorkspace() { +export function installCakeToWorkspaceCommand() { showScriptNameBox() .then(handleScriptNameResponse) .then(showBootstrapperOption) From 5919770a2b2767354ffba45c3aba611ba32f9b31 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Fri, 28 Jul 2017 20:18:43 +0100 Subject: [PATCH 19/35] (maint) Whitespace changes --- src/bootstrapper/cakeBootstrapperCommand.ts | 6 ++++++ src/buildFile/cakeBuildFileCommand.ts | 2 ++ src/cakeMain.ts | 4 ++++ src/configuration/cakeConfiguration.ts | 2 ++ src/configuration/cakeConfigurationCommand.ts | 2 ++ src/install/actions/index.ts | 6 +++++- src/install/actions/installCake.ts | 2 ++ src/shared/log.ts | 2 ++ src/shared/utility.ts | 1 + 9 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/bootstrapper/cakeBootstrapperCommand.ts b/src/bootstrapper/cakeBootstrapperCommand.ts index e10d8cee..940d70c0 100644 --- a/src/bootstrapper/cakeBootstrapperCommand.ts +++ b/src/bootstrapper/cakeBootstrapperCommand.ts @@ -10,6 +10,7 @@ export async function installCakeBootstrapperCommand() { "matchOnDetail": true, "matchOnDescription": true }); + if (!info) { return; } @@ -19,6 +20,7 @@ export async function installCakeBootstrapperCommand() { window.showErrorMessage('You have not yet opened a folder.'); return; } + installCakeBootstrapperFile(info); } @@ -28,9 +30,11 @@ export async function installCakeBootstrapperFile(info: CakeBootstrapperInfo, no // Does the bootstrapper already exist? var buildFilePath = bootstrapper.getTargetPath(); + if (fs.existsSync(buildFilePath)) { var message = `Overwrite the existing \'${info.fileName}\' file in this folder?`; var option = await window.showWarningMessage(message, 'Overwrite'); + if (option !== 'Overwrite') { return; } @@ -39,10 +43,12 @@ export async function installCakeBootstrapperFile(info: CakeBootstrapperInfo, no // Download the bootstrapper and save it to disk. var file = fs.createWriteStream(buildFilePath); var result = await bootstrapper.download(file); + if (result) { if (process.platform !== 'win32' && info.posix) { fs.chmod(buildFilePath, 0o755); } + if (notifyOnCompletion) { window.showInformationMessage('Cake bootstrapper downloaded successfully.'); } diff --git a/src/buildFile/cakeBuildFileCommand.ts b/src/buildFile/cakeBuildFileCommand.ts index 9266ca44..6d9f03f8 100644 --- a/src/buildFile/cakeBuildFileCommand.ts +++ b/src/buildFile/cakeBuildFileCommand.ts @@ -35,9 +35,11 @@ export async function installBuildFile(fileName: string): Promise { var targetPath = buildFile.getTargetPath(); var ready = await utils.checkForExisting(targetPath); + if (!ready) { Promise.reject(CANCEL); } + var result = await buildFile.create(); return result; } diff --git a/src/cakeMain.ts b/src/cakeMain.ts index df87a8ab..5b85da04 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -100,9 +100,11 @@ async function getCakeScriptsAsTasks(): Promise { try { let cakeConfig = vscode.workspace.getConfiguration('cake'); let files = await vscode.workspace.findFiles(cakeConfig.taskRunner.scriptsIncludePattern, cakeConfig.taskRunner.scriptsExcludePattern); + if (files.length === 0) { return emptyTasks; } + const result: vscode.Task[] = []; files.forEach(file => { @@ -111,6 +113,7 @@ async function getCakeScriptsAsTasks(): Promise { let taskRegularExpression = new RegExp(cakeConfig.taskRunner.taskRegularExpression, "g"); let matches, taskNames = []; + while (matches = taskRegularExpression.exec(contents)) { taskNames.push(matches[1]); } @@ -122,6 +125,7 @@ async function getCakeScriptsAsTasks(): Promise { }; let buildCommand = `./build.sh --target \"${taskName}\"`; + if (os.platform() === "win32") { buildCommand = `powershell -ExecutionPolicy ByPass -File build.ps1 -target \"${taskName}\"`; } diff --git a/src/configuration/cakeConfiguration.ts b/src/configuration/cakeConfiguration.ts index 41246a16..2f0601d7 100644 --- a/src/configuration/cakeConfiguration.ts +++ b/src/configuration/cakeConfiguration.ts @@ -17,6 +17,7 @@ export class CakeConfiguration { // Get the Cake configuration. var config = vscode.workspace.getConfiguration("cake"); + if (!config) { reject("Could not resolve configuration configuration."); return; @@ -24,6 +25,7 @@ export class CakeConfiguration { // Get the bootstrapper URI from the configuration. var uri = config['configuration']['config']; + if (!uri) { reject("Could not resolve configuration URI from configuration."); return; diff --git a/src/configuration/cakeConfigurationCommand.ts b/src/configuration/cakeConfigurationCommand.ts index a282016c..e817be2a 100644 --- a/src/configuration/cakeConfigurationCommand.ts +++ b/src/configuration/cakeConfigurationCommand.ts @@ -12,6 +12,7 @@ export async function installCakeConfigurationCommand() { } var result = await installCakeConfiguration(); + if (result) { window.showInformationMessage('Cake configuration downloaded successfully.'); } else { @@ -26,6 +27,7 @@ export async function installCakeConfiguration(): Promise { // Does the configuration already exist? var targetPath = configuration.getTargetPath(); var ready = utils.checkForExisting(targetPath); + if (!ready) { Promise.reject(CANCEL); } diff --git a/src/install/actions/index.ts b/src/install/actions/index.ts index 5385267c..f4462725 100644 --- a/src/install/actions/index.ts +++ b/src/install/actions/index.ts @@ -4,7 +4,7 @@ import { messages } from "../../shared"; import InstallOptions from "../installOptions"; import { installCake } from './installCake'; -export { installCake } +export {installCake} export function showScriptNameBox(): Thenable { return vscode.window.showInputBox({ @@ -18,6 +18,7 @@ export function handleScriptNameResponse(scriptName: string): Thenable opts.installBootstrappers = value); } @@ -41,6 +43,7 @@ export function showConfigOption(installOpts: InstallOptions): Thenable opts.installConfig = value); } @@ -56,6 +59,7 @@ function getOption( if (!value) { reject(CANCEL) } + callback(options, value == 'Yes'); resolve(options); }); diff --git a/src/install/actions/installCake.ts b/src/install/actions/installCake.ts index d7aec2d4..0a2652ec 100644 --- a/src/install/actions/installCake.ts +++ b/src/install/actions/installCake.ts @@ -12,11 +12,13 @@ export function installCake(installOpts: InstallOptions): Promise { logger.logError(ERROR_INVALID_SETTINGS, true); reject(ERROR_INVALID_SETTINGS) } + // Check if there is an open folder in workspace if (vscode.workspace.rootPath === undefined) { vscode.window.showErrorMessage(ERROR_NO_WORKSPACE); reject(ERROR_NO_WORKSPACE); } + logSettingsToOutput(installOpts); var results = new Array>(); results.push(installBuildFile(installOpts.scriptName) diff --git a/src/shared/log.ts b/src/shared/log.ts index 8768ad28..0b35038b 100644 --- a/src/shared/log.ts +++ b/src/shared/log.ts @@ -14,6 +14,7 @@ export function logError(error: string, notify: boolean = true) { var channel = getChannel(OUTPUT_CHANNEL_NAME); channel.appendLine('Error encountered during Cake operation!') channel.appendLine(`E: ${error}`); + if (notify) { window.showErrorMessage(error); } @@ -23,5 +24,6 @@ function getChannel(name: string): OutputChannel { if (!channel) { channel = window.createOutputChannel(name); } + return channel; } \ No newline at end of file diff --git a/src/shared/utility.ts b/src/shared/utility.ts index b2720e01..c1b88ad6 100644 --- a/src/shared/utility.ts +++ b/src/shared/utility.ts @@ -7,5 +7,6 @@ export async function checkForExisting(path: string): Promise { var option = await window.showWarningMessage(message, 'Overwrite'); return option === 'Overwrite'; } + return true; } \ No newline at end of file From a42647e09c7a574908a58616d11f9e54b2aa4cae Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Sun, 6 Aug 2017 17:54:43 +0100 Subject: [PATCH 20/35] (maint) Switch to https --- README.md | 4 ++-- build.ps1 | 4 ++-- package.json | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b8125796..0d830601 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Cake -This addin brings language support for [Cake](http://cakebuild.net) build scripts to Visual Studio Code. +This addin brings language support for [Cake](https://cakebuild.net) build scripts to Visual Studio Code. ### Commands @@ -27,7 +27,7 @@ Cake (C# Make) is a cross platform build automation system with a C# DSL to do t ## Learn more -For more information about Cake, please see the [Cake website](http://cakebuild.net) or the Cake [source code repository](https://github.com/cake-build/cake). +For more information about Cake, please see the [Cake website](https://cakebuild.net) or the Cake [source code repository](https://github.com/cake-build/cake). ## Resource Video diff --git a/build.ps1 b/build.ps1 index 7495727f..1d4173a4 100644 --- a/build.ps1 +++ b/build.ps1 @@ -34,7 +34,7 @@ Skips restoring of packages. Remaining arguments are added here. .LINK -http://cakebuild.net +https://cakebuild.net #> @@ -126,7 +126,7 @@ if ((Test-Path $PSScriptRoot) -and !(Test-Path $TOOLS_DIR)) { # Make sure that packages.config exist. if (!(Test-Path $PACKAGES_CONFIG)) { Write-Verbose -Message "Downloading packages.config..." - try { (New-Object System.Net.WebClient).DownloadFile("http://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { + try { (New-Object System.Net.WebClient).DownloadFile("https://cakebuild.net/download/bootstrapper/packages", $PACKAGES_CONFIG) } catch { Throw "Could not download packages.config." } } diff --git a/package.json b/package.json index 7f235b33..3df65305 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "bugs": { "url": "https://github.com/cake-build/cake-vscode/issues" }, - "homepage": "http://cakebuild.net", + "homepage": "https://cakebuild.net", "repository": { "type": "git", "url": "https://github.com/cake-build/cake-vscode.git" @@ -112,15 +112,15 @@ "cake.bootstrappers": { "type": "object", "default": { - "powershell": "http://cakebuild.net/download/bootstrapper/powershell", - "bash": "http://cakebuild.net/download/bootstrapper/bash" + "powershell": "https://cakebuild.net/download/bootstrapper/powershell", + "bash": "https://cakebuild.net/download/bootstrapper/bash" }, "description": "The Cake bootstrapper URIs." }, "cake.configuration": { "type": "object", "default": { - "config": "http://cakebuild.net/download/configuration" + "config": "https://cakebuild.net/download/configuration" }, "description": "The Cake configuration URI." } From 00ba6ace97236846e62b83afabc4fd6c1c4b4147 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Tue, 8 Aug 2017 21:20:36 +0100 Subject: [PATCH 21/35] (GH-50) Added Travis Yml File --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..05210839 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +language: node_js + +os: + - osx + - linux + +script: + - ./build.sh --verbosity diagnostic From 8d57961de31c7be084c43dafdb4e0a839b38f28a Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Tue, 8 Aug 2017 21:22:18 +0100 Subject: [PATCH 22/35] (GH-50) Added build.sh file --- build.sh | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 build.sh diff --git a/build.sh b/build.sh new file mode 100644 index 00000000..a1dfdc46 --- /dev/null +++ b/build.sh @@ -0,0 +1,131 @@ +#!/usr/bin/env bash + +########################################################################## +# This is the Cake bootstrapper script for Linux and OS X. +# This file was downloaded from https://github.com/cake-build/resources +# Feel free to change this file to fit your needs. +########################################################################## + +# Define directories. +SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +TOOLS_DIR=$SCRIPT_DIR/tools +ADDINS_DIR=$TOOLS_DIR/Addins +MODULES_DIR=$TOOLS_DIR/Modules +NUGET_EXE=$TOOLS_DIR/nuget.exe +CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe +PACKAGES_CONFIG=$TOOLS_DIR/packages.config +PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum +ADDINS_PACKAGES_CONFIG=$ADDINS_DIR/packages.config +MODULES_PACKAGES_CONFIG=$MODULES_DIR/packages.config + +# Define md5sum or md5 depending on Linux/OSX +MD5_EXE= +if [[ "$(uname -s)" == "Darwin" ]]; then + MD5_EXE="md5 -r" +else + MD5_EXE="md5sum" +fi + +# Define default arguments. +SCRIPT="build.cake" +TARGET="Default" +CONFIGURATION="Release" +VERBOSITY="verbose" +DRYRUN= +SHOW_VERSION=false +SCRIPT_ARGUMENTS=() + +# Parse arguments. +for i in "$@"; do + case $1 in + -s|--script) SCRIPT="$2"; shift ;; + -t|--target) TARGET="$2"; shift ;; + -c|--configuration) CONFIGURATION="$2"; shift ;; + -v|--verbosity) VERBOSITY="$2"; shift ;; + -d|--dryrun) DRYRUN="-dryrun" ;; + --version) SHOW_VERSION=true ;; + --) shift; SCRIPT_ARGUMENTS+=("$@"); break ;; + *) SCRIPT_ARGUMENTS+=("$1") ;; + esac + shift +done + +# Make sure the tools folder exist. +if [ ! -d "$TOOLS_DIR" ]; then + mkdir "$TOOLS_DIR" +fi + +# Make sure that packages.config exist. +if [ ! -f "$TOOLS_DIR/packages.config" ]; then + echo "Downloading packages.config..." + curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages + if [ $? -ne 0 ]; then + echo "An error occured while downloading packages.config." + exit 1 + fi +fi + +# Download NuGet if it does not exist. +if [ ! -f "$NUGET_EXE" ]; then + echo "Downloading NuGet..." + curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe + if [ $? -ne 0 ]; then + echo "An error occured while downloading nuget.exe." + exit 1 + fi +fi + +# Restore tools from NuGet. +pushd "$TOOLS_DIR" >/dev/null +if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then + find . -type d ! -name . | xargs rm -rf +fi + +mono "$NUGET_EXE" install -ExcludeVersion +if [ $? -ne 0 ]; then + echo "Could not restore NuGet tools." + exit 1 +fi + +$MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5" + +popd >/dev/null + +# Restore addins from NuGet. +if [ -f "$ADDINS_PACKAGES_CONFIG" ]; then + pushd "$ADDINS_DIR" >/dev/null + + mono "$NUGET_EXE" install -ExcludeVersion + if [ $? -ne 0 ]; then + echo "Could not restore NuGet addins." + exit 1 + fi + + popd >/dev/null +fi + +# Restore modules from NuGet. +if [ -f "$MODULES_PACKAGES_CONFIG" ]; then + pushd "$MODULES_DIR" >/dev/null + + mono "$NUGET_EXE" install -ExcludeVersion + if [ $? -ne 0 ]; then + echo "Could not restore NuGet modules." + exit 1 + fi + + popd >/dev/null +fi + +# Make sure that Cake has been installed. +if [ ! -f "$CAKE_EXE" ]; then + echo "Could not find Cake.exe at '$CAKE_EXE'." + exit 1 +fi + +# Start Cake +if $SHOW_VERSION; then + exec mono "$CAKE_EXE" -version +else + exec mono "$CAKE_EXE" $SCRIPT -verbosity=$VERBOSITY -configuration=$CONFIGURATION -target=$TARGET $DRYRUN "${SCRIPT_ARGUMENTS[@]}" +fi \ No newline at end of file From da40e4baba752ef5bebb899c65e876f6ca92fda0 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Tue, 8 Aug 2017 21:22:44 +0100 Subject: [PATCH 23/35] (GH-50) Made build.sh executable --- build.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 build.sh diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 From 426dd41815b0e6a1753046da5216b5787a1fbe15 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Tue, 8 Aug 2017 21:29:10 +0100 Subject: [PATCH 24/35] (GH-50) Switch language so that mono is installed --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 05210839..49ab5b8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -language: node_js +language: csharp os: - osx From 1e7d886251d67d1583988c7befb1323d0ed3c2da Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Tue, 8 Aug 2017 21:36:41 +0100 Subject: [PATCH 25/35] (GH-50) Removed usage of solutioninfo.cs --- build/version.cake | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/build/version.cake b/build/version.cake index 7b32dce6..4a2f514b 100644 --- a/build/version.cake +++ b/build/version.cake @@ -47,10 +47,9 @@ public class BuildVersion if (string.IsNullOrEmpty(version) || string.IsNullOrEmpty(semVersion)) { - context.Information("Fetching verson from SolutionInfo"); - var assemblyInfo = context.ParseAssemblyInfo("./src/SolutionInfo.cs"); - version = assemblyInfo.AssemblyVersion; - semVersion = assemblyInfo.AssemblyInformationalVersion; + context.Information("Hardcoding version number, as GitVersion didn't execute..."); + version = "0.1.0"; + semVersion = "0.1.0"; milestone = string.Concat("v", version); } From 5f45d76b4d69793f057ce48513985f000ee5524c Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Tue, 8 Aug 2017 22:46:34 +0100 Subject: [PATCH 26/35] (GH-50) Switch to prerelease version of Cake.VsCode - For testing purposes --- build.cake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.cake b/build.cake index e8655cde..ec725735 100644 --- a/build.cake +++ b/build.cake @@ -3,7 +3,7 @@ ////////////////////////////////////////////////////////////////////// #addin "nuget:?package=MagicChunks&version=1.2.0.58" -#addin "nuget:?package=Cake.VsCode&version=0.7.0" +#addin "nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.VsCode&prerelease" #addin "nuget:?package=Cake.Npm&version=0.10.0" ////////////////////////////////////////////////////////////////////// From 122264b06925302c6a082cc1b9e80c061279760f Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 9 Aug 2017 07:19:07 +0100 Subject: [PATCH 27/35] (maint) Switch to released version of Cake.VsCode --- build.cake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.cake b/build.cake index ec725735..5b19093e 100644 --- a/build.cake +++ b/build.cake @@ -3,7 +3,7 @@ ////////////////////////////////////////////////////////////////////// #addin "nuget:?package=MagicChunks&version=1.2.0.58" -#addin "nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.VsCode&prerelease" +#addin "nuget:?package=Cake.VsCode&version=0.8.0" #addin "nuget:?package=Cake.Npm&version=0.10.0" ////////////////////////////////////////////////////////////////////// @@ -177,4 +177,4 @@ Task("ReleaseNotes") // EXECUTION ////////////////////////////////////////////////////////////////////// -RunTarget(parameters.Target); \ No newline at end of file +RunTarget(parameters.Target); From f52561f122e42fc2e216e32ea981153011654013 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 23 Aug 2017 21:15:44 +0100 Subject: [PATCH 28/35] (GH-52) Removed syntax highlighting - Changed language used from cake to csharp where still required, i.e. breakpoints - Remove syntax, configuration, and grammar --- config/cake.configuration.json | 11 - package.json | 27 +- syntaxes/cake.json | 578 --------------------------------- 3 files changed, 4 insertions(+), 612 deletions(-) delete mode 100644 config/cake.configuration.json delete mode 100644 syntaxes/cake.json diff --git a/config/cake.configuration.json b/config/cake.configuration.json deleted file mode 100644 index ae321aa8..00000000 --- a/config/cake.configuration.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "comments": { - "lineComment": "//", - "blockComment": [ "/*", "*/" ] - }, - "brackets": [ - ["{", "}"], - ["[", "]"], - ["(", ")"] - ] -} \ No newline at end of file diff --git a/package.json b/package.json index bc76dba6..b04b197f 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ }, "categories": [ "Languages", - "Snippets" + "Snippets", + "Debuggers" ], "activationEvents": [ "onCommand:cake.bootstrapper", @@ -41,32 +42,12 @@ "contributes": { "breakpoints": [ { - "language": "cake" - } - ], - "languages": [ - { - "id": "cake", - "aliases": [ - "Cake Script", - "Cake" - ], - "extensions": [ - ".cake" - ], - "configuration": "./config/cake.configuration.json" - } - ], - "grammars": [ - { - "language": "cake", - "scopeName": "source.cake", - "path": "./syntaxes/cake.json" + "language": "csharp" } ], "snippets": [ { - "language": "cake", + "language": "csharp", "path": "./snippets/snippets.json" } ], diff --git a/syntaxes/cake.json b/syntaxes/cake.json deleted file mode 100644 index b4b09fbd..00000000 --- a/syntaxes/cake.json +++ /dev/null @@ -1,578 +0,0 @@ -{ - "scopeName": "source.cake", - "name": "Cake", - "fileTypes": [ - "cs", "cake" - ], - "foldingStartMarker": "^\\s*#\\s*region|^\\s*/\\*|^(?![^{]*?//|[^{]*?/\\*(?!.*?\\*/.*?\\{)).*?\\{\\s*($|//|/\\*(?!.*?\\*/.*\\S))", - "foldingStopMarker": "^\\s*#\\s*endregion|^\\s*\\*/|^\\s*\\}", - "patterns": [ - { - "captures": { - "1": { - "name": "keyword.other.using.cs" - } - }, - "begin": "^\\s*(using)\\b\\s*", - "end": "\\s*(?:$|(;))", - "name": "meta.keyword.using.cs" - }, - { - "begin": "^\\s*((namespace)\\s+([\\w.]+))", - "beginCaptures": { - "1": { - "name": "meta.namespace.identifier.cs" - }, - "2": { - "name": "keyword.other.namespace.cs" - }, - "3": { - "name": "entity.name.type.namespace.cs" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.namespace.end.cs" - } - }, - "name": "meta.namespace.cs", - "patterns": [ - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.namespace.begin.cs" - } - }, - "end": "(?=})", - "name": "meta.namespace.body.cs", - "patterns": [ - { - "include": "#code" - } - ] - } - ] - }, - { - "include": "#code" - } - ], - "repository": { - "block": { - "patterns": [ - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.block.begin.cs" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.block.end.cs" - } - }, - "name": "meta.block.cs", - "patterns": [ - { - "include": "#code" - } - ] - } - ] - }, - "builtinTypes": { - "patterns": [ - { - "match": "\\b(bool|byte|sbyte|char|decimal|double|float|int|uint|long|ulong|object|short|ushort|string|void|class|struct|enum|interface)\\b", - "name": "storage.type.cs" - } - ] - }, - "class": { - "begin": "(?=\\w?[\\w\\s]*(?:class|struct|interface|enum)\\s+\\w+)", - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.class.end.cs" - } - }, - "name": "meta.class.cs", - "patterns": [ - { - "include": "#storage-modifiers" - }, - { - "include": "#comments" - }, - { - "captures": { - "1": { - "name": "storage.modifier.cs" - }, - "2": { - "name": "entity.name.type.class.cs" - } - }, - "match": "(class|struct|interface|enum)\\s+(\\w+)", - "name": "meta.class.identifier.cs" - }, - { - "begin": ":", - "end": "(?={)", - "patterns": [ - { - "captures": { - "1": { - "name": "storage.type.cs" - } - }, - "match": "\\s*,?([A-Za-z_]\\w*)\\b" - } - ] - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.class.begin.cs" - } - }, - "end": "(?=})", - "name": "meta.class.body.cs", - "patterns": [ - { - "include": "#method" - }, - { - "include": "#code" - } - ] - } - ] - }, - "code": { - "patterns": [ - { - "include": "#block" - }, - { - "include": "#comments" - }, - { - "include": "#class" - }, - { - "include": "#constants" - }, - { - "include": "#storage-modifiers" - }, - { - "include": "#keywords" - }, - { - "include": "#preprocessor" - }, - { - "include": "#method-call" - }, - { - "include": "#builtinTypes" - }, - { - "include": "#documentation" - } - ] - }, - "comments": { - "patterns": [ - { - "begin": "///", - "captures": { - "0": { - "name": "punctuation.definition.comment.cs" - } - }, - "end": "$\\n?", - "name": "comment.block.documentation.cs", - "patterns": [ - { - "include": "text.xml" - } - ] - }, - { - "begin": "/\\*", - "captures": { - "0": { - "name": "punctuation.definition.comment.cs" - } - }, - "end": "\\*/\\n?", - "name": "comment.block.cs" - }, - { - "begin": "//", - "captures": { - "1": { - "name": "punctuation.definition.comment.cs" - } - }, - "end": "$\\n?", - "name": "comment.line.double-slash.cs" - } - ] - }, - "constants": { - "patterns": [ - { - "match": "\\b(true|false|null|this|base)\\b", - "name": "constant.language.cs" - }, - { - "match": "\\b((0(x|X)[0-9a-fA-F]*)|(([0-9]+\\.?[0-9]*)|(\\.[0-9]+))((e|E)(\\+|-)?[0-9]+)?)(L|l|UL|ul|u|U|F|f|ll|LL|ull|ULL)?\\b", - "name": "constant.numeric.cs" - }, - { - "captures": { - "0": { - "name": "punctuation.definition.string.begin.cs" - } - }, - "match": "@\"([^\"]|\"\")*\"", - "name": "string.quoted.double.literal.cs" - }, - { - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.cs" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.cs" - } - }, - "name": "string.quoted.double.cs", - "patterns": [ - { - "match": "\\\\.", - "name": "constant.character.escape.cs" - } - ] - }, - { - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.cs" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.cs" - } - }, - "name": "string.quoted.single.cs", - "patterns": [ - { - "match": "\\\\.", - "name": "constant.character.escape.cs" - } - ] - } - ] - }, - "keywords": { - "patterns": [ - { - "match": "\\b(if|else|while|for|foreach|in|do|return|continue|break|switch|case|default|goto|throw|try|catch|finally|lock|yield|await|params)\\b", - "name": "keyword.control.cs" - }, - { - "match": "(Task|WithCriteria|Does|IsDependentOn|OnError|ContinueOnError|ReportError|Finally|Setup|Teardown|TaskSetup|TaskTeardown|RunTarget)\\(", - "captures": { - "1": { - "name": "keyword.cake.cs" - } - } - }, - { - "match": "\\b(from|where|select|group|into|orderby|join|let|on|equals|by|ascending|descending)\\b", - "name": "keyword.linq.cs" - }, - { - "match": "\\b(new|is|as|using|checked|unchecked|typeof|sizeof|override|readonly|stackalloc)\\b", - "name": "keyword.operator.cs" - }, - { - "match": "\\b(event|delegate|fixed|add|remove|set|get|value)\\b", - "name": "keyword.other.cs" - }, - { - "match": "\\b(var)\\b", - "name": "storage.type.var.cs" - }, - { - "match": "[@]\\b(var|event|delegate|add|remove|set|get|value|new|is|as|using|checked|unchecked|typeof|sizeof |override|readonly|stackalloc|from|where|select|group|into|orderby|join|let|on|equals|by|ascending|descending |if|else|while|for|foreach|in|do|return|continue|break|switch|case|default|goto|throw|try|catch|finally|lock|yield|await)\\b", - "name": "meta.class.body.cs" - } - ] - }, - "method": { - "patterns": [ - { - "begin": "\\[", - "end": "\\]", - "name": "meta.method.annotation.cs", - "patterns": [ - { - "include": "#constants" - }, - { - "include": "#preprocessor" - }, - { - "include": "#builtinTypes" - } - ] - }, - { - "begin": "(?=\\bnew\\s+)(?=[\\w<].*\\s+)(?=[^=]+\\()", - "end": "(?={|;)", - "name": "meta.new-object.cs", - "patterns": [ - { - "include": "#code" - } - ] - }, - { - "begin": "(? Date: Sun, 30 Jul 2017 01:39:49 +1000 Subject: [PATCH 29/35] Adds debug command as option to guided install. Initial refactoring for opening gen'd file in workspace. --- src/debug/cakeDebugCommand.ts | 19 ++++++++++++------- src/install/actions/index.ts | 7 +++++++ src/install/actions/installCake.ts | 22 +++++++++++++++++++--- src/install/cakeInstallCommand.ts | 22 +++++++++++++++------- src/install/installOptions.ts | 1 + src/shared/messages.ts | 3 ++- 6 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src/debug/cakeDebugCommand.ts b/src/debug/cakeDebugCommand.ts index 6ca9e4ba..54d66d23 100644 --- a/src/debug/cakeDebugCommand.ts +++ b/src/debug/cakeDebugCommand.ts @@ -9,20 +9,25 @@ export async function installCakeDebugCommand() { return; } + var result = await installCakeDebug(); + + if(result) { + window.showInformationMessage("Cake Debug Dependencies correctly downloaded."); + } else { + window.showErrorMessage("Error downloading Cake Debug Dependencies"); + } +} + +export async function installCakeDebug(): Promise { // Create the debug object let debug = new CakeDebug(); var targetPath = debug.getTargetPath(); if (fs.existsSync(targetPath)) { window.showWarningMessage("Cake.CoreCLR package has already been installed."); - return; + return false; } var result = await debug.downloadAndExtract(); - - if (result) { - window.showInformationMessage("Cake Debug Dependencies correctly downloaded."); - } else { - window.showErrorMessage("Error downloading Cake Debug Dependencies"); - } + return result; } \ No newline at end of file diff --git a/src/install/actions/index.ts b/src/install/actions/index.ts index f4462725..209a76d4 100644 --- a/src/install/actions/index.ts +++ b/src/install/actions/index.ts @@ -47,6 +47,13 @@ export function showConfigOption(installOpts: InstallOptions): Thenable opts.installConfig = value); } +export function showDebugOption(installOpts: InstallOptions): Thenable { + if (!installOpts) { + Promise.reject(CANCEL); + } + return getOption(messages.CONFIRM_DEBUG_CONFIG, installOpts, (opts, value) => opts.installDebug = value); +} + function getOption( message: string, options: InstallOptions, diff --git a/src/install/actions/installCake.ts b/src/install/actions/installCake.ts index 0a2652ec..3c2c15f2 100644 --- a/src/install/actions/installCake.ts +++ b/src/install/actions/installCake.ts @@ -5,8 +5,9 @@ import { ERROR_INVALID_SETTINGS, ERROR_NO_WORKSPACE } from "../../constants"; import { installBootstrappers } from "./bootstrapper"; import { installBuildFile } from "../../buildFile/cakeBuildFileCommand"; import { installCakeConfiguration } from '../../configuration/cakeConfigurationCommand'; +import { installCakeDebug } from "../../debug/cakeDebugCommand"; -export function installCake(installOpts: InstallOptions): Promise { +export function installCake(installOpts: InstallOptions): Promise<{message: string, fileName: string}> { return new Promise((resolve, reject) => { if (!installOpts) { logger.logError(ERROR_INVALID_SETTINGS, true); @@ -20,6 +21,7 @@ export function installCake(installOpts: InstallOptions): Promise { } logSettingsToOutput(installOpts); + vscode.window.setStatusBarMessage('Installing Cake to workspace with requested options!'); var results = new Array>(); results.push(installBuildFile(installOpts.scriptName) .then(v => { @@ -47,9 +49,23 @@ export function installCake(installOpts: InstallOptions): Promise { ); })); } + if (installOpts.installDebug) { + results.push(installCakeDebug() + .then(v => { + logResult( + v, + 'Debug dependencies successfully installed!', + 'Error encountered while install debugging dependencies' + ); + vscode.window.showInformationMessage("Add a new 'Cake' debug configuration to get started debugging your script"); + })); + } Promise.all(results) .then(_ => { - resolve('Successfully installed Cake to current workspace'); + resolve({ + message: 'Successfully installed Cake to current workspace', + fileName: `./${installOpts.scriptName}` + }); }, err => { reject(err); @@ -71,6 +87,6 @@ function logSettingsToOutput(installOpts: InstallOptions): void { logger.logToOutput( 'Installing Cake to current workspace:', ` - Script name: '${installOpts.scriptName}'`, - ` - Installing: script${installOpts.installBootstrappers ? ', bootstrappers' : ''}${installOpts.installConfig ? ', cake.config' : ''}` + ` - Installing: script${installOpts.installBootstrappers ? ', bootstrappers' : ''}${installOpts.installConfig ? ', cake.config' : ''}${installOpts.installDebug ? ', debugging dependencies' : ''}` ); } \ No newline at end of file diff --git a/src/install/cakeInstallCommand.ts b/src/install/cakeInstallCommand.ts index 8b4ecfe9..ac57ec76 100644 --- a/src/install/cakeInstallCommand.ts +++ b/src/install/cakeInstallCommand.ts @@ -1,25 +1,33 @@ -import * as vscode from 'vscode'; +import { window } from 'vscode'; import { - showScriptNameBox, showBootstrapperOption, handleScriptNameResponse, showConfigOption, installCake + showScriptNameBox, + showBootstrapperOption, + handleScriptNameResponse, + showConfigOption, + showDebugOption, + installCake } from './actions' import { CANCEL } from '../constants' +import { logger } from "../shared"; export function installCakeToWorkspaceCommand() { showScriptNameBox() .then(handleScriptNameResponse) .then(showBootstrapperOption) .then(showConfigOption) + .then(showDebugOption) .then(installCake) - .then((value: string) => { - vscode.window.showInformationMessage(value); + .then(({message, fileName}) => { + window.showInformationMessage(message); + logger.logToOutput(fileName); // to suppress warnings }) .then(undefined, (err) => { - vscode.window.setStatusBarMessage(''); + window.setStatusBarMessage(''); if (err !== CANCEL) { - vscode.window.showErrorMessage(err.message || err || 'We encountered an unknown error! Please try again.'); + window.showErrorMessage(err.message || err || 'We encountered an unknown error! Please try again.'); } else { - vscode.window.setStatusBarMessage('Cake installation cancelled!'); + window.setStatusBarMessage('Cake installation cancelled!'); } }); } \ No newline at end of file diff --git a/src/install/installOptions.ts b/src/install/installOptions.ts index 9b829f8e..451e3bb1 100644 --- a/src/install/installOptions.ts +++ b/src/install/installOptions.ts @@ -2,4 +2,5 @@ export default class InstallOptions { constructor(public scriptName: string) { } installBootstrappers: boolean; installConfig: boolean; + installDebug: boolean; } \ No newline at end of file diff --git a/src/shared/messages.ts b/src/shared/messages.ts index c2924a35..4ec2e327 100644 --- a/src/shared/messages.ts +++ b/src/shared/messages.ts @@ -1,3 +1,4 @@ export const PROMPT_SCRIPT_NAME = 'Enter the name for your new build script'; export const CONFIRM_INSTALL_BOOTSTRAPPERS = 'Do you want to install the bootstrappers?'; -export const CONFIRM_INSTALL_CONFIG = 'Do you want to install a cake.config file?'; \ No newline at end of file +export const CONFIRM_INSTALL_CONFIG = 'Do you want to install a cake.config file?'; +export const CONFIRM_DEBUG_CONFIG = 'Do you want to install dependencies needed for debugging your script?'; \ No newline at end of file From 5d844f9eec3707b820853b4f83eb7d33e84e986c Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 23 Aug 2017 21:44:27 +0100 Subject: [PATCH 30/35] (GH-42) Minor tweaks - Correcting issue with locked cake file, preventing debugging - Minor grammar changes - Reset status bar text after completion --- src/buildFile/cakeBuildFile.ts | 3 ++- src/debug/cakeDebugCommand.ts | 2 +- src/install/actions/installCake.ts | 28 ++++++++++++++++------------ src/install/cakeInstallCommand.ts | 2 +- src/shared/log.ts | 2 +- 5 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/buildFile/cakeBuildFile.ts b/src/buildFile/cakeBuildFile.ts index f640db52..d109e082 100644 --- a/src/buildFile/cakeBuildFile.ts +++ b/src/buildFile/cakeBuildFile.ts @@ -40,7 +40,7 @@ export class CakeBuildFile { buildFile.write('});\n'); buildFile.write('\n'); buildFile.write('Teardown(ctx =>\n'); - buildFile.write('\n'); + buildFile.write('{\n'); buildFile.write(' // Executed AFTER the last task.\n'); buildFile.write(' Information("Finished running tasks.");\n'); buildFile.write('});\n'); @@ -55,6 +55,7 @@ export class CakeBuildFile { buildFile.write('});\n'); buildFile.write('\n'); buildFile.write('RunTarget(target);'); + buildFile.end(); resolve(true); } catch (error) { reject(false); diff --git a/src/debug/cakeDebugCommand.ts b/src/debug/cakeDebugCommand.ts index 54d66d23..46e65941 100644 --- a/src/debug/cakeDebugCommand.ts +++ b/src/debug/cakeDebugCommand.ts @@ -25,7 +25,7 @@ export async function installCakeDebug(): Promise { var targetPath = debug.getTargetPath(); if (fs.existsSync(targetPath)) { window.showWarningMessage("Cake.CoreCLR package has already been installed."); - return false; + return true; } var result = await debug.downloadAndExtract(); diff --git a/src/install/actions/installCake.ts b/src/install/actions/installCake.ts index 3c2c15f2..d9e3818b 100644 --- a/src/install/actions/installCake.ts +++ b/src/install/actions/installCake.ts @@ -21,22 +21,22 @@ export function installCake(installOpts: InstallOptions): Promise<{message: stri } logSettingsToOutput(installOpts); - vscode.window.setStatusBarMessage('Installing Cake to workspace with requested options!'); + vscode.window.setStatusBarMessage('Installing Cake to workspace with requested options...'); var results = new Array>(); results.push(installBuildFile(installOpts.scriptName) .then(v => { logResult( v, - `Cake script successfully created at '${installOpts.scriptName}'`, - 'Error encountered while creating default build script' + `Cake script successfully created at '${installOpts.scriptName}'.`, + 'Error encountered while creating default build script.' ); }, err => { logResult(false, '', err); })); if (installOpts.installBootstrappers) { results.push(installBootstrappers() - .then(_ => logResult(true, 'Bootstrappers successfully created')) - .catch(err => logResult(false, '', `Error encountered while creating bootstrappers (${err})`)) + .then(_ => logResult(true, 'Bootstrappers successfully created.')) + .catch(err => logResult(false, '', `Error encountered while creating bootstrappers (${err}).`)) ); } if (installOpts.installConfig) { @@ -44,8 +44,8 @@ export function installCake(installOpts: InstallOptions): Promise<{message: stri .then(v => { logResult( v, - 'Configuration file successfully created at \'cake.config\'', - 'Error encountered while creating configuration file' + 'Configuration file successfully created at \'cake.config\'.', + 'Error encountered while creating configuration file.' ); })); } @@ -54,16 +54,20 @@ export function installCake(installOpts: InstallOptions): Promise<{message: stri .then(v => { logResult( v, - 'Debug dependencies successfully installed!', - 'Error encountered while install debugging dependencies' + 'Debug dependencies successfully installed.', + 'Error encountered while install debugging dependencies.' ); - vscode.window.showInformationMessage("Add a new 'Cake' debug configuration to get started debugging your script"); + vscode.window.showInformationMessage("Add a new 'Cake' debug configuration to get started debugging your script."); })); } + Promise.all(results) .then(_ => { + // Clear the status bar, and display final notification + vscode.window.setStatusBarMessage(''); + resolve({ - message: 'Successfully installed Cake to current workspace', + message: 'Successfully installed Cake to current workspace.', fileName: `./${installOpts.scriptName}` }); }, @@ -75,7 +79,7 @@ export function installCake(installOpts: InstallOptions): Promise<{message: stri } function logResult(result: boolean, success: string, failure?: string) { - failure = failure ? failure : 'An error has occurred!'; + failure = failure ? failure : 'An error has occurred.'; if (result) { logger.logToOutput(success); } else { diff --git a/src/install/cakeInstallCommand.ts b/src/install/cakeInstallCommand.ts index ac57ec76..492f114f 100644 --- a/src/install/cakeInstallCommand.ts +++ b/src/install/cakeInstallCommand.ts @@ -27,7 +27,7 @@ export function installCakeToWorkspaceCommand() { if (err !== CANCEL) { window.showErrorMessage(err.message || err || 'We encountered an unknown error! Please try again.'); } else { - window.setStatusBarMessage('Cake installation cancelled!'); + window.setStatusBarMessage('Cake installation cancelled.'); } }); } \ No newline at end of file diff --git a/src/shared/log.ts b/src/shared/log.ts index 0b35038b..c0410ddb 100644 --- a/src/shared/log.ts +++ b/src/shared/log.ts @@ -12,7 +12,7 @@ export function logToOutput(...items: string[]): void { export function logError(error: string, notify: boolean = true) { var channel = getChannel(OUTPUT_CHANNEL_NAME); - channel.appendLine('Error encountered during Cake operation!') + channel.appendLine('Error encountered during Cake operation.') channel.appendLine(`E: ${error}`); if (notify) { From b0249a4b56908f4e0fdd573cf99b2710dad66981 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Wed, 23 Aug 2017 22:14:13 +0100 Subject: [PATCH 31/35] (GH-35) Added information to readme - To include information about what is included in the extension --- README.md | 38 +++++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0d830601..69a5101e 100644 --- a/README.md +++ b/README.md @@ -6,10 +6,46 @@ This addin brings language support for [Cake](https://cakebuild.net) build scrip In addition to integrated editing features, the extension also provides commands in the Command Palette for working with Cake files: -* `Cake: Download Debug Dependencies` to download the Cake.CoreCLR NuGet Package into the tools folder, ready for enabling debugging * `Cake: Install a bootstrapper` to install a Cake bootstrapper for Windows, OS X or Linux in the root folder. +* `Cake: Install Cake to workspace` will run through all of the available commands at once, to save having to run them one by one +* `Cake: Download Debug Dependencies` to download the Cake.CoreCLR NuGet Package into the tools folder, ready for enabling debugging +* `Cake: Install Sample Build Cake File` to install a sample Cake File that contains Setup and Teardown actions, a sample task, and argument parsing. * `Cake: Install a configuration file` to install the default Cake Configuration file for controlling internal components of Cake. +### Snippets + +* `cake-addin` + * Provides a basic addin pre-processor directive, where the package name and version can be changed + * Default Value: `#addin "nuget:?package=Cake.Foo&version=1.2.3"` +* `cake-addin-full` + * Provides a more complete addin pre-processor directive, where source, package name and version can be changed + * Default Value: `#addin "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` +* `cake-argument` + * Provides code for basic input argument parsing, where variable name, argument name and default value can be changed + * Default Value: `var target = Argument("target", "Default");` +* `cake-load` + * Provides a basic load pre-processor directive, where the path to the .cake file can be changed + * Default Value: `#load "scripts/utilities.cake"` +* `cake-load-nuget` + * Provides a more complex load pre-processor directive, where source, package name and version can be changed + * Default Value: `#load "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` +* `cake-reference` + * Provides a basic reference pre-processor directive, where path to the assembly can be changed + * Default Value: `#reference "bin/myassembly.dll"` +* `cake-sample` + * Provides a complete sample Build Cake Script including Setup and Teardown actions, a single task, and argument parsing +* `cake-tool` + * Provides a basic tool pre-processor directive, where the package name and version can be changed + * Default Value: `#tool "nuget:?package=Cake.Foo&version=1.2.3"` +* `cake-tool-full` + * Provides a more complete tool pre-processor directive, where source, package name and version can be changed + * Default Value: `#tool "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` +* `task` + * Provides a basic task definition, where the name of the task can be changed + * Default Value: `Task("name");` +* `task` (With Action) + * Provides a more complex task definition, including an .Does body, where the name of the task can be changed + ### Task Provider The extension will also parse all `*.cake` files in the workspace and make them executable via the built in `Tasks: Run Task` command. From 6d3be6ffe343623076948bc2d7297ead0fd4f40e Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Wed, 25 Oct 2017 17:00:02 +0200 Subject: [PATCH 32/35] Added support for installing Cake.Bakery. --- package.json | 11 ++++-- src/bakery/cakeBakery.ts | 62 +++++++++++++++++++++++++++++++++ src/bakery/cakeBakeryCommand.ts | 32 +++++++++++++++++ src/cakeMain.ts | 5 +++ 4 files changed, 107 insertions(+), 3 deletions(-) create mode 100644 src/bakery/cakeBakery.ts create mode 100644 src/bakery/cakeBakeryCommand.ts diff --git a/package.json b/package.json index b04b197f..1f562bd0 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "displayName": "Cake", "publisher": "cake-build", "description": "Cake build script language support.", - "version": "0.8.0", + "version": "0.9.0-unstable0037", "icon": "images/cake.png", "private": true, "author": { @@ -35,6 +35,7 @@ "onCommand:cake.debug", "onCommand:cake.buildFile", "onCommand:cake.install", + "onCommand:cake.intellisense", "onCommand:workbench.action.tasks.runTask", "onCommand:cake.provideInitialConfigurations" ], @@ -62,15 +63,19 @@ }, { "command": "cake.debug", - "title": "Cake: Download Debug Dependencies" + "title": "Cake: Download debug dependencies" }, { "command": "cake.buildFile", - "title": "Cake: Install Sample Build Cake File" + "title": "Cake: Install sample build Cake file" }, { "command": "cake.install", "title": "Cake: Install Cake to workspace" + }, + { + "command": "cake.intellisense", + "title": "Cake: Install intellisense support for Cake files" } ], "outputChannels": [ diff --git a/src/bakery/cakeBakery.ts b/src/bakery/cakeBakery.ts new file mode 100644 index 00000000..869e5d5d --- /dev/null +++ b/src/bakery/cakeBakery.ts @@ -0,0 +1,62 @@ +var request = require('request'); +var AdmZip = require('adm-zip'); +import * as vscode from 'vscode'; +import * as path from 'path'; +import * as fs from 'fs'; + +export class CakeBakery { + + public getTargetPath(): string { + if (vscode.workspace.rootPath) { + return path.join(vscode.workspace.rootPath, "tools/Cake.Bakery/tools/Cake.Bakery.exe"); + } + return ""; + } + + public getNupkgDestinationPath(): string { + if (vscode.workspace.rootPath) { + return path.join(vscode.workspace.rootPath, "tools/Cake.Bakery"); + } + return ""; + } + + public getToolFolderPath(): string { + if (vscode.workspace.rootPath) { + return path.join(vscode.workspace.rootPath, "tools"); + } + return ""; + } + + public downloadAndExtract(): Thenable { + return new Promise((resolve, reject) => { + // Download the NuGet Package + let vm = this; + if (!fs.existsSync(vm.getToolFolderPath())) { + fs.mkdirSync(vm.getToolFolderPath()); + } + + var data: any[] = [], dataLen = 0; + + request.get("http://nuget.org/api/v2/package/Cake.Bakery/", { timeout: 10000 }) + .on('data', function (chunk: any) { + data.push(chunk); + dataLen += chunk.length; + }) + .on('end', function () { + var buf = new Buffer(dataLen); + + for (var i = 0, len = data.length, pos = 0; i < len; i++) { + data[i].copy(buf, pos); + pos += data[i].length; + } + + var zip = new AdmZip(buf); + zip.extractAllTo(vm.getNupkgDestinationPath()); + resolve(true); + }) + .on('error', function (e: any) { + reject(`Failed to download Cake Bakery from NuGet: ${e}`); + }) + }); + } +} \ No newline at end of file diff --git a/src/bakery/cakeBakeryCommand.ts b/src/bakery/cakeBakeryCommand.ts new file mode 100644 index 00000000..4333b49a --- /dev/null +++ b/src/bakery/cakeBakeryCommand.ts @@ -0,0 +1,32 @@ +import { window, workspace } from 'vscode'; +import * as fs from 'fs'; +import { CakeBakery } from './cakeBakery'; + +export async function installCakeBakeryCommand() { + + // Make sure that we're in the correct place. + if (workspace.rootPath === undefined) { + window.showErrorMessage('You have not yet opened a folder.'); + return; + } + + // Install Cake Bakery + var result = await installCakeDebug(); + if(result) { + window.showInformationMessage("Intellisense support for Cake files was installed."); + } else { + window.showErrorMessage("Error downloading intellisense support for Cake files."); + } +} + +export async function installCakeDebug(): Promise { + let bakery = new CakeBakery(); + + var targetPath = bakery.getTargetPath(); + if (fs.existsSync(targetPath)) { + window.showWarningMessage("Intellisense support for Cake files has already been installed."); + return true; + } + + return await bakery.downloadAndExtract(); +} \ No newline at end of file diff --git a/src/cakeMain.ts b/src/cakeMain.ts index 5b85da04..d3469736 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -4,6 +4,7 @@ import { installCakeConfigurationCommand } from './configuration/cakeConfigurati import { installCakeDebugCommand } from './debug/cakeDebugCommand'; import { installBuildFileCommand } from './buildFile/cakeBuildFileCommand'; import { installCakeToWorkspaceCommand} from './install/cakeInstallCommand'; +import { installCakeBakeryCommand} from './bakery/cakeBakeryCommand'; import * as fs from 'fs'; import * as os from 'os'; @@ -30,6 +31,10 @@ export function activate(context: vscode.ExtensionContext): void { context.subscriptions.push(vscode.commands.registerCommand('cake.install', async () => { installCakeToWorkspaceCommand(); })); + // Register the interactive install command. + context.subscriptions.push(vscode.commands.registerCommand('cake.intellisense', async () => { + installCakeBakeryCommand(); + })); const initialConfigurations = { version: '0.2.0', From 70aafb695e8d4429afc99cda147af189e81dfcb7 Mon Sep 17 00:00:00 2001 From: Patrik Svensson Date: Wed, 25 Oct 2017 23:26:45 +0200 Subject: [PATCH 33/35] Updated command names. --- package-lock.json | 2665 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 320 +++--- 2 files changed, 2825 insertions(+), 160 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..ee9c48f8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2665 @@ +{ + "name": "cake-vscode", + "version": "0.9.0-GH-55-0001", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/mocha": { + "version": "2.2.43", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.43.tgz", + "integrity": "sha512-xNlAmH+lRJdUMXClMTI9Y0pRqIojdxfm7DHsIxoB2iTzu3fnPmSMEN8SsSx0cdwV36d02PWCWaDUoZPDSln+xw==", + "dev": true + }, + "@types/node": { + "version": "6.0.90", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.90.tgz", + "integrity": "sha512-tXoGRVdi7wZX7P1VWoV9Wfk0uYDOAHdEYXAttuWgSrN76Q32wQlSrMX0Rgyv3RTEaQY2ZLQrzYHVM2e8rfo8sA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=" + }, + "ajv": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", + "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.0" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-stdout": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", + "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.2", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "clone": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "cloneable-readable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", + "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "1.0.7", + "through2": "2.0.3" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", + "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "deep-assign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", + "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", + "dev": true, + "requires": { + "is-obj": "1.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "duplexify": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", + "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "escape-string-regexp": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz", + "integrity": "sha1-Tbwv5nTnGUnK8/smlc5/LcHZqNE=", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", + "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimatch": "0.3.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "3.0.1", + "glob": "5.0.15", + "glob-parent": "3.1.0", + "micromatch": "2.3.11", + "ordered-read-streams": "0.3.0", + "through2": "0.6.5", + "to-absolute-glob": "0.1.1", + "unique-stream": "2.2.1" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + } + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "gulp-chmod": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz", + "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=", + "dev": true, + "requires": { + "deep-assign": "1.0.0", + "stat-mode": "0.2.2", + "through2": "2.0.3" + } + }, + "gulp-filter": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.0.1.tgz", + "integrity": "sha512-5olRzAhFdXB2klCu1lnazP65aO9YdA/5WfC9VdInIc8PrUeDIoZfaA3Edb0yUBGhVdHv4eHKL9Fg5tUoEJ9z5A==", + "dev": true, + "requires": { + "gulp-util": "3.0.8", + "multimatch": "2.1.0", + "streamfilter": "1.0.5" + } + }, + "gulp-gunzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz", + "integrity": "sha1-FbdBFF6Dqcb1CIYkG1fMWHHxUak=", + "dev": true, + "requires": { + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "gulp-remote-src": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/gulp-remote-src/-/gulp-remote-src-0.4.3.tgz", + "integrity": "sha1-VyjP1kNDPdSEXd7wlp8PlxoqtKE=", + "dev": true, + "requires": { + "event-stream": "3.3.4", + "node.extend": "1.1.6", + "request": "2.79.0", + "through2": "2.0.3", + "vinyl": "2.0.2" + }, + "dependencies": { + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.11.0", + "is-my-json-valid": "2.16.1", + "pinkie-promise": "2.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "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", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.4.3", + "uuid": "3.1.0" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "vinyl": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.2.tgz", + "integrity": "sha1-CjcT2NTpIhxY8QyhbAEWyeJe2nw=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.0.0", + "is-stream": "1.1.0", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + } + } + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "dev": true, + "requires": { + "convert-source-map": "1.5.0", + "graceful-fs": "4.1.11", + "strip-bom": "2.0.0", + "through2": "2.0.3", + "vinyl": "1.2.0" + }, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "gulp-symdest": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-symdest/-/gulp-symdest-1.1.0.tgz", + "integrity": "sha1-wWUyBzLRks5W/ZQnH/oSMjS/KuA=", + "dev": true, + "requires": { + "event-stream": "3.3.4", + "mkdirp": "0.5.1", + "queue": "3.1.0", + "vinyl-fs": "2.4.4" + } + }, + "gulp-untar": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.6.tgz", + "integrity": "sha1-1r3v3n6ajgVMnxYjhaB4LEvnQAA=", + "dev": true, + "requires": { + "event-stream": "3.3.4", + "gulp-util": "3.0.8", + "streamifier": "0.1.1", + "tar": "2.2.1", + "through2": "2.0.3" + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.2.0", + "fancy-log": "1.3.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.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "gulp-vinyl-zip": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.0.tgz", + "integrity": "sha1-JOQGhdwFtxSZlSRQmeBZAmO+ja0=", + "dev": true, + "requires": { + "event-stream": "3.3.4", + "queue": "4.4.2", + "through2": "2.0.3", + "vinyl": "2.1.0", + "vinyl-fs": "2.4.4", + "yauzl": "2.8.0", + "yazl": "2.4.2" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "queue": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-4.4.2.tgz", + "integrity": "sha512-fSMRXbwhMwipcDZ08enW2vl+YDmAmhcNcr43sCJL8DIg+CFOsoRLG23ctxA+fwNk1w55SePSiS7oqQQSgQoVJQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.1", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.0.0", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.3.0", + "har-schema": "2.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.0.2" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is/-/is-3.2.1.tgz", + "integrity": "sha1-0Kwq1V63sL7JJqUmb2xmKqqD3KU=", + "dev": true + }, + "is-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-my-json-valid": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "jade": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz", + "integrity": "sha1-jxDXl32NefL2/4YqgbBRPMslaGw=", + "dev": true, + "requires": { + "commander": "0.6.1", + "mkdirp": "0.3.0" + }, + "dependencies": { + "commander": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz", + "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", + "dev": true + }, + "mkdirp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.0.tgz", + "integrity": "sha1-G79asbqCevI1dRQ0kEJkVfSB/h4=", + "dev": true + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "lru-cache": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", + "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "requires": { + "mime-db": "1.30.0" + } + }, + "minimatch": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", + "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", + "dev": true, + "requires": { + "lru-cache": "2.7.3", + "sigmund": "1.0.1" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "mocha": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-2.5.3.tgz", + "integrity": "sha1-FhvlvetJZ3HrmzV0UFC2IrWu/Fg=", + "dev": true, + "requires": { + "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": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "node.extend": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/node.extend/-/node.extend-1.1.6.tgz", + "integrity": "sha1-p7iCyC1sk6SGOlUEvV3o7IYli5Y=", + "dev": true, + "requires": { + "is": "3.2.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "readable-stream": "2.3.3" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + }, + "queue": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz", + "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.5" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "requires": { + "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" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "sigmund": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", + "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", + "dev": true + }, + "sntp": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", + "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", + "requires": { + "hoek": "4.2.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.0.tgz", + "integrity": "sha512-vUoN3I7fHQe0R/SJLKRdKYuEdRGogsviXFkHHo17AWaTGv17VLnxw+CFXvqy+y4ORZ3doWLQcxRYfwKrsd/H7Q==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "stat-mode": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "dev": true + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "streamfilter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", + "integrity": "sha1-h1BxEb644phFFxe1Ec/tjwAqv1M=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "streamifier": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", + "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=", + "dev": true + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "strip-bom": "2.0.0" + } + }, + "supports-color": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.2.0.tgz", + "integrity": "sha1-/x7R5hFp0Gs88tWI4YixjYhH4X4=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "xtend": "4.0.1" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1" + } + }, + "to-iso-string": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", + "integrity": "sha1-TcGeZk38y+Jb2NtQiwDG2hWCVdE=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "typescript": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.3.tgz", + "integrity": "sha512-ptLSQs2S4QuS6/OD1eAKG+S5G8QQtrU5RT32JULdZQtM1L3WTi34Wsu48Yndzi8xsObRAB9RPt/KhA9wlpEF6w==", + "dev": true + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "1.0.1", + "through2-filter": "2.0.0" + } + }, + "url-parse": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", + "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" + }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "requires": { + "duplexify": "3.5.1", + "glob-stream": "5.3.5", + "graceful-fs": "4.1.11", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "0.3.0", + "lazystream": "1.0.0", + "lodash.isequal": "4.5.0", + "merge-stream": "1.0.1", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "readable-stream": "2.3.3", + "strip-bom": "2.0.0", + "strip-bom-stream": "1.0.0", + "through2": "2.0.3", + "through2-filter": "2.0.0", + "vali-date": "1.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.2", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "vinyl-source-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", + "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", + "dev": true, + "requires": { + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "vscode": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.6.tgz", + "integrity": "sha1-Ru0a+iwbnWifY5TI8WvR1xkPdfs=", + "dev": true, + "requires": { + "glob": "7.1.2", + "gulp-chmod": "2.0.0", + "gulp-filter": "5.0.1", + "gulp-gunzip": "1.0.0", + "gulp-remote-src": "0.4.3", + "gulp-symdest": "1.1.0", + "gulp-untar": "0.0.6", + "gulp-vinyl-zip": "2.1.0", + "mocha": "4.0.1", + "request": "2.83.0", + "semver": "5.4.1", + "source-map-support": "0.5.0", + "url-parse": "1.1.9", + "vinyl-source-stream": "1.1.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "mocha": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", + "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.0", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.3.1", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "yauzl": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.8.0.tgz", + "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + }, + "yazl": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.4.2.tgz", + "integrity": "sha1-FMsZCD4eJacAksFYiqvg9OTdTYg=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13" + } + } + } +} diff --git a/package.json b/package.json index 1f562bd0..905c141c 100644 --- a/package.json +++ b/package.json @@ -1,160 +1,160 @@ -{ - "name": "cake-vscode", - "displayName": "Cake", - "publisher": "cake-build", - "description": "Cake build script language support.", - "version": "0.9.0-unstable0037", - "icon": "images/cake.png", - "private": true, - "author": { - "name": "Cake Build" - }, - "bugs": { - "url": "https://github.com/cake-build/cake-vscode/issues" - }, - "homepage": "https://cakebuild.net", - "repository": { - "type": "git", - "url": "https://github.com/cake-build/cake-vscode.git" - }, - "galleryBanner": { - "color": "#FFE05C", - "theme": "light" - }, - "engines": { - "vscode": "^1.14.0" - }, - "categories": [ - "Languages", - "Snippets", - "Debuggers" - ], - "activationEvents": [ - "onCommand:cake.bootstrapper", - "onCommand:cake.configuration", - "onCommand:cake.debug", - "onCommand:cake.buildFile", - "onCommand:cake.install", - "onCommand:cake.intellisense", - "onCommand:workbench.action.tasks.runTask", - "onCommand:cake.provideInitialConfigurations" - ], - "main": "./out/src/cakeMain", - "contributes": { - "breakpoints": [ - { - "language": "csharp" - } - ], - "snippets": [ - { - "language": "csharp", - "path": "./snippets/snippets.json" - } - ], - "commands": [ - { - "command": "cake.bootstrapper", - "title": "Cake: Install a bootstrapper" - }, - { - "command": "cake.configuration", - "title": "Cake: Install a configuration file" - }, - { - "command": "cake.debug", - "title": "Cake: Download debug dependencies" - }, - { - "command": "cake.buildFile", - "title": "Cake: Install sample build Cake file" - }, - { - "command": "cake.install", - "title": "Cake: Install Cake to workspace" - }, - { - "command": "cake.intellisense", - "title": "Cake: Install intellisense support for Cake files" - } - ], - "outputChannels": [ - "Cake" - ], - "configuration": { - "type": "object", - "title": "Cake configuration", - "properties": { - "cake.taskRunner": { - "type": "object", - "default": { - "autoDetect": true, - "scriptsIncludePattern": "**/*.cake", - "scriptsExcludePattern": "", - "taskRegularExpression": "Task\\s*?\\(\\s*?\"(.*?)\"\\s*?\\)" - }, - "description": "The Cake Task Runner settings" - }, - "cake.bootstrappers": { - "type": "object", - "default": { - "powershell": "https://cakebuild.net/download/bootstrapper/powershell", - "bash": "https://cakebuild.net/download/bootstrapper/bash" - }, - "description": "The Cake bootstrapper URIs." - }, - "cake.configuration": { - "type": "object", - "default": { - "config": "https://cakebuild.net/download/configuration" - }, - "description": "The Cake configuration URI." - } - } - }, - "debuggers": [ - { - "type": "cake", - "label": "Cake", - "initialConfigurations": "cake.provideInitialConfigurations", - "configurationSnippets": [ - { - "label": "Cake: Debug Script", - "description": "test", - "body": { - "name": "Cake: Debug Script", - "type": "coreclr", - "request": "launch", - "program": "^\"\\${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll\"", - "args": [ - "^\"\\${workspaceRoot}/build.cake\"", - "--debug", - "--verbosity=diagnostic" - ], - "cwd": "^\"\\${workspaceRoot}\"", - "stopAtEntry": true, - "externalConsole": false - } - } - ] - } - ] - }, - "scripts": { - "vscode:prepublish": "tsc -p ./", - "compile": "tsc -watch -p ./", - "postinstall": "node ./node_modules/vscode/bin/install", - "test": "node ./node_modules/vscode/bin/test" - }, - "dependencies": { - "request": "^2.67.0", - "adm-zip": "^0.4.7" - }, - "devDependencies": { - "typescript": "^2.0.3", - "vscode": "^1.0.0", - "mocha": "^2.3.3", - "@types/node": "^6.0.40", - "@types/mocha": "^2.2.32" - } -} \ No newline at end of file +{ + "name": "cake-vscode", + "displayName": "Cake", + "publisher": "cake-build", + "description": "Cake build script language support.", + "version": "0.9.0-GH-55-0001", + "icon": "images/cake.png", + "private": true, + "author": { + "name": "Cake Build" + }, + "bugs": { + "url": "https://github.com/cake-build/cake-vscode/issues" + }, + "homepage": "https://cakebuild.net", + "repository": { + "type": "git", + "url": "https://github.com/cake-build/cake-vscode.git" + }, + "galleryBanner": { + "color": "#FFE05C", + "theme": "light" + }, + "engines": { + "vscode": "^1.14.0" + }, + "categories": [ + "Languages", + "Snippets", + "Debuggers" + ], + "activationEvents": [ + "onCommand:cake.bootstrapper", + "onCommand:cake.configuration", + "onCommand:cake.debug", + "onCommand:cake.buildFile", + "onCommand:cake.install", + "onCommand:cake.intellisense", + "onCommand:workbench.action.tasks.runTask", + "onCommand:cake.provideInitialConfigurations" + ], + "main": "./out/src/cakeMain", + "contributes": { + "breakpoints": [ + { + "language": "csharp" + } + ], + "snippets": [ + { + "language": "csharp", + "path": "./snippets/snippets.json" + } + ], + "commands": [ + { + "command": "cake.bootstrapper", + "title": "Cake: Install a bootstrapper" + }, + { + "command": "cake.configuration", + "title": "Cake: Install a configuration file" + }, + { + "command": "cake.debug", + "title": "Cake: Install debug dependencies" + }, + { + "command": "cake.buildFile", + "title": "Cake: Install sample build file" + }, + { + "command": "cake.install", + "title": "Cake: Install to workspace" + }, + { + "command": "cake.intellisense", + "title": "Cake: Install intellisense support" + } + ], + "outputChannels": [ + "Cake" + ], + "configuration": { + "type": "object", + "title": "Cake configuration", + "properties": { + "cake.taskRunner": { + "type": "object", + "default": { + "autoDetect": true, + "scriptsIncludePattern": "**/*.cake", + "scriptsExcludePattern": "", + "taskRegularExpression": "Task\\s*?\\(\\s*?\"(.*?)\"\\s*?\\)" + }, + "description": "The Cake Task Runner settings" + }, + "cake.bootstrappers": { + "type": "object", + "default": { + "powershell": "https://cakebuild.net/download/bootstrapper/powershell", + "bash": "https://cakebuild.net/download/bootstrapper/bash" + }, + "description": "The Cake bootstrapper URIs." + }, + "cake.configuration": { + "type": "object", + "default": { + "config": "https://cakebuild.net/download/configuration" + }, + "description": "The Cake configuration URI." + } + } + }, + "debuggers": [ + { + "type": "cake", + "label": "Cake", + "initialConfigurations": "cake.provideInitialConfigurations", + "configurationSnippets": [ + { + "label": "Cake: Debug Script", + "description": "test", + "body": { + "name": "Cake: Debug Script", + "type": "coreclr", + "request": "launch", + "program": "^\"\\${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll\"", + "args": [ + "^\"\\${workspaceRoot}/build.cake\"", + "--debug", + "--verbosity=diagnostic" + ], + "cwd": "^\"\\${workspaceRoot}\"", + "stopAtEntry": true, + "externalConsole": false + } + } + ] + } + ] + }, + "scripts": { + "vscode:prepublish": "tsc -p ./", + "compile": "tsc -watch -p ./", + "postinstall": "node ./node_modules/vscode/bin/install", + "test": "node ./node_modules/vscode/bin/test" + }, + "dependencies": { + "request": "^2.67.0", + "adm-zip": "^0.4.7" + }, + "devDependencies": { + "typescript": "^2.0.3", + "vscode": "^1.0.0", + "mocha": "^2.3.3", + "@types/node": "^6.0.40", + "@types/mocha": "^2.2.32" + } +} From 3e264fe0e26e58ff2e336163793624899c3e1e73 Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 26 Oct 2017 20:39:24 +0100 Subject: [PATCH 34/35] (doc) Updated command information - Based on the addition of a new command for installation Cake.Bakery (GH-55) --- README.md | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 69a5101e..3eac61fd 100644 --- a/README.md +++ b/README.md @@ -7,42 +7,43 @@ This addin brings language support for [Cake](https://cakebuild.net) build scrip In addition to integrated editing features, the extension also provides commands in the Command Palette for working with Cake files: * `Cake: Install a bootstrapper` to install a Cake bootstrapper for Windows, OS X or Linux in the root folder. -* `Cake: Install Cake to workspace` will run through all of the available commands at once, to save having to run them one by one -* `Cake: Download Debug Dependencies` to download the Cake.CoreCLR NuGet Package into the tools folder, ready for enabling debugging -* `Cake: Install Sample Build Cake File` to install a sample Cake File that contains Setup and Teardown actions, a sample task, and argument parsing. +* `Cake: Install to workspace` will run through all of the available commands at once, to save having to run them one by one +* `Cake: Install debug dependencies` to download the Cake.CoreCLR NuGet Package into the tools folder, ready for enabling debugging +* `Cake: Install sample build file` to install a sample Cake File that contains Setup and Teardown actions, a sample task, and argument parsing. * `Cake: Install a configuration file` to install the default Cake Configuration file for controlling internal components of Cake. +* `Cake: Install intellisense support` to download the Cake.Bakery NuGet Package into the tools folder, which in conjunction with OmniSharp provides intellisense support for Cake Files. ### Snippets * `cake-addin` * Provides a basic addin pre-processor directive, where the package name and version can be changed - * Default Value: `#addin "nuget:?package=Cake.Foo&version=1.2.3"` + * **Default Value:** `#addin "nuget:?package=Cake.Foo&version=1.2.3"` * `cake-addin-full` * Provides a more complete addin pre-processor directive, where source, package name and version can be changed - * Default Value: `#addin "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` + * **Default Value:** `#addin "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` * `cake-argument` * Provides code for basic input argument parsing, where variable name, argument name and default value can be changed - * Default Value: `var target = Argument("target", "Default");` + * **Default Value:** `var target = Argument("target", "Default");` * `cake-load` * Provides a basic load pre-processor directive, where the path to the .cake file can be changed - * Default Value: `#load "scripts/utilities.cake"` + * **Default Value:** `#load "scripts/utilities.cake"` * `cake-load-nuget` * Provides a more complex load pre-processor directive, where source, package name and version can be changed - * Default Value: `#load "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` + * **Default Value:** `#load "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` * `cake-reference` * Provides a basic reference pre-processor directive, where path to the assembly can be changed - * Default Value: `#reference "bin/myassembly.dll"` + * **Default Value:** `#reference "bin/myassembly.dll"` * `cake-sample` * Provides a complete sample Build Cake Script including Setup and Teardown actions, a single task, and argument parsing * `cake-tool` * Provides a basic tool pre-processor directive, where the package name and version can be changed - * Default Value: `#tool "nuget:?package=Cake.Foo&version=1.2.3"` + * **Default Value:** `#tool "nuget:?package=Cake.Foo&version=1.2.3"` * `cake-tool-full` * Provides a more complete tool pre-processor directive, where source, package name and version can be changed - * Default Value: `#tool "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` + * **Default Value:** `#tool "nuget:https://www.nuget.org/api/v2?package=Cake.Foo&version=1.2.3"` * `task` * Provides a basic task definition, where the name of the task can be changed - * Default Value: `Task("name");` + * **Default Value:** `Task("name");` * `task` (With Action) * Provides a more complex task definition, including an .Does body, where the name of the task can be changed From aaa71121c6e9c26a37c137cc6abb339724776c2a Mon Sep 17 00:00:00 2001 From: Gary Ewan Park Date: Thu, 26 Oct 2017 21:07:49 +0100 Subject: [PATCH 35/35] (GH-58) Added Debug Configuration for Mono - This was taken directly from redth's blog post: https://redth.codes/debugging-cake-on-macos-with-mono/ - As a result, this may not work on other systems, possibly only Mac, but it is a starter for 10 --- package.json | 37 +++++++++++++++++++++++++++++++------ src/cakeMain.ts | 33 +++++++++++++++++++++++++++++---- 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 905c141c..b390a640 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "onCommand:cake.install", "onCommand:cake.intellisense", "onCommand:workbench.action.tasks.runTask", - "onCommand:cake.provideInitialConfigurations" + "onCommand:cake.provideInitialCoreClrConfigurations", + "onCommand:cake.provideInitialMonoConfigurations" ], "main": "./out/src/cakeMain", "contributes": { @@ -114,15 +115,15 @@ }, "debuggers": [ { - "type": "cake", - "label": "Cake", - "initialConfigurations": "cake.provideInitialConfigurations", + "type": "cake-coreclr", + "label": "Cake CoreCLR", + "initialConfigurations": "cake.provideInitialCoreClrConfigurations", "configurationSnippets": [ { - "label": "Cake: Debug Script", + "label": "Cake: Debug Script (CoreCLR)", "description": "test", "body": { - "name": "Cake: Debug Script", + "name": "Cake: Debug Script (CoreCLR)", "type": "coreclr", "request": "launch", "program": "^\"\\${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll\"", @@ -137,6 +138,30 @@ } } ] + }, + { + "type": "cake-mono", + "label": "Cake Mono", + "initialConfigurations": "cake.provideInitialMonoConfigurations", + "configurationSnippets": [ + { + "label": "Cake: Debug Script (Mono)", + "description": "test", + "body": { + "name": "Cake: Debug Script (Mono)", + "type": "mono", + "request": "launch", + "program": "${workspaceRoot}/tools/Cake/Cake.exe", + "args": [ + "${workspaceRoot}/build.cake", + "--debug", + "--verbosity=diagnostic" + ], + "cwd": "${workspaceRoot}", + "console": "internalConsole" + } + } + ] } ] }, diff --git a/src/cakeMain.ts b/src/cakeMain.ts index d3469736..6fae8e8d 100644 --- a/src/cakeMain.ts +++ b/src/cakeMain.ts @@ -36,11 +36,11 @@ export function activate(context: vscode.ExtensionContext): void { installCakeBakeryCommand(); })); - const initialConfigurations = { + const initialCakeCoreClrConfigurations = { version: '0.2.0', configurations: [ { - "name": "Cake: Debug Script", + "name": "Cake: Debug Script (CoreCLR)", "type": "coreclr", "request": "launch", "program": "${workspaceRoot}/tools/Cake.CoreCLR/Cake.dll", @@ -56,9 +56,34 @@ export function activate(context: vscode.ExtensionContext): void { ] }; - vscode.commands.registerCommand("cake.provideInitialConfigurations", () => { + const initialCakeMonoConfigurations = { + version: '0.2.0', + configurations: [ + { + "name": "Cake: Debug Script (mono)", + "type": "mono", + "request": "launch", + "program": "${workspaceRoot}/tools/Cake/Cake.exe", + "args": [ + "${workspaceRoot}/build.cake", + "--debug", + "--verbosity=diagnostic" + ], + "cwd": "${workspaceRoot}", + "console": "internalConsole" + } + ] + } + + vscode.commands.registerCommand("cake.provideInitialCoreClrConfigurations", () => { + return [ + JSON.stringify(initialCakeCoreClrConfigurations, null, '\t') + ].join('\n'); + }); + + vscode.commands.registerCommand("cake.provideInitialMonoConfigurations", () => { return [ - JSON.stringify(initialConfigurations, null, '\t') + JSON.stringify(initialCakeMonoConfigurations, null, '\t') ].join('\n'); });