From 6577293d91aede0054fd44957fa3ad9df7d7add7 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Fri, 13 Oct 2017 11:16:48 -0700 Subject: [PATCH 01/30] add ignore for psrelease module --- tools/releaseBuild/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 tools/releaseBuild/.gitignore diff --git a/tools/releaseBuild/.gitignore b/tools/releaseBuild/.gitignore new file mode 100644 index 0000000000..0ff566888a --- /dev/null +++ b/tools/releaseBuild/.gitignore @@ -0,0 +1 @@ +PSRelease/ From 9702c9dc004dbb344c70a5eb346fbc07cf4a7a02 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 16 Oct 2017 09:44:21 -0700 Subject: [PATCH 02/30] ignore mac finder files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0a35854e2e..fb8a287881 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ vscps-preview.zip *.vsix npm-debug.log .vscode-test/ +*.DS_Store From 171da65d4435997ef2b3d06ed6db3f010626d56b Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Fri, 13 Oct 2017 11:23:35 -0700 Subject: [PATCH 03/30] add build definition --- tools/releaseBuild/build.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 tools/releaseBuild/build.json diff --git a/tools/releaseBuild/build.json b/tools/releaseBuild/build.json new file mode 100644 index 0000000000..823a62392a --- /dev/null +++ b/tools/releaseBuild/build.json @@ -0,0 +1,19 @@ +{ + "Windows": [ + { + "Name": "win", + "RepoDestinationPath": "C:\\vscode-powershell", + "BuildCommand": "C:\\build.ps1 -location _RepoDestinationPath_ -destination _DockerVolume_", + "BuildDockerOptions": [ + "-m", + "3968m" + ], + "DockerFile": ".\\tools\\releaseBuild\\images\\microsoft_windowsservercore\\DockerFile", + "AdditionalContextFiles" :[ ".\\tools\\releaseBuild\\images\\microsoft_windowsservercore\\build.ps1"], + "DockerImageName": "psvsc-winsrvcore", + "BinaryBucket": "release" + } + ], + "Linux": [ + ] +} From b229307e385c87356da6332fec6d58d2faf6aafe Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Fri, 13 Oct 2017 11:17:14 -0700 Subject: [PATCH 04/30] add release build readme --- tools/releaseBuild/README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 tools/releaseBuild/README.md diff --git a/tools/releaseBuild/README.md b/tools/releaseBuild/README.md new file mode 100644 index 0000000000..845f106c7a --- /dev/null +++ b/tools/releaseBuild/README.md @@ -0,0 +1,14 @@ +# VSTS Release Builds + +## Requirements + +Docker must be installed to run any of the release builds. + +## Running Windows Release Builds + +From PowerShell on Windows, run `.\vstsbuild.ps1 -Name `. + +Windows Build Names: + + * `win` + * Builds on windows From c3933ccfef3451612e156d30d0fec6f4b14b08f9 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Fri, 13 Oct 2017 11:17:50 -0700 Subject: [PATCH 05/30] add release build entrypoint --- tools/releaseBuild/vstsbuild.ps1 | 55 ++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 tools/releaseBuild/vstsbuild.ps1 diff --git a/tools/releaseBuild/vstsbuild.ps1 b/tools/releaseBuild/vstsbuild.ps1 new file mode 100644 index 0000000000..12795ea5be --- /dev/null +++ b/tools/releaseBuild/vstsbuild.ps1 @@ -0,0 +1,55 @@ +param( + [ValidateSet('win')] + [String] + $Name +) + +$ErrorActionPreference = 'Stop' + +$psReleaseBranch = 'master' +$psReleaseFork = 'PowerShell' +$location = Join-Path -Path $PSScriptRoot -ChildPath 'PSRelease' +if(Test-Path $location) +{ + Remove-Item -Path $location -Recurse -Force +} + +$gitBinFullPath = (Get-Command -Name git).Source +if (-not $gitBinFullPath) +{ + throw "Git is required to proceed. Install from 'https://git-scm.com/download/win'" +} + +Write-Verbose "cloning -b $psReleaseBranch --quiet https://github.com/$psReleaseFork/PSRelease.git" -verbose +& $gitBinFullPath clone -b $psReleaseBranch --quiet https://github.com/$psReleaseFork/PSRelease.git $location + +Push-Location -Path $PWD.Path +try{ + Set-Location $location + & $gitBinFullPath submodule update --init --recursive --quiet +} +finally +{ + Pop-Location +} + +$unresolvedRepoRoot = Join-Path -Path $PSScriptRoot '../..' +$resolvedRepoRoot = (Resolve-Path -Path $unresolvedRepoRoot).ProviderPath + +try +{ + Write-Verbose "Starting build at $resolvedRepoRoot ..." -Verbose + Import-Module "$location/vstsBuild" -Force + Import-Module "$location/dockerBasedBuild" -Force + Clear-VstsTaskState + + Invoke-Build -RepoPath $resolvedRepoRoot -BuildJsonPath './tools/releaseBuild/build.json' -Name $Name -Parameters $PSBoundParameters +} +catch +{ + Write-VstsError -Error $_ +} +finally{ + Write-VstsTaskState + exit 0 +} From bd9f012fbfc88bc7ac53db62d87d7b4887325f61 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Mon, 16 Oct 2017 14:07:14 -0700 Subject: [PATCH 06/30] add windows server core image --- .../microsoft_windowsservercore/Build.ps1 | 66 +++++++++++++++++++ .../microsoft_windowsservercore/DockerFile | 18 +++++ 2 files changed, 84 insertions(+) create mode 100644 tools/releaseBuild/images/microsoft_windowsservercore/Build.ps1 create mode 100644 tools/releaseBuild/images/microsoft_windowsservercore/DockerFile diff --git a/tools/releaseBuild/images/microsoft_windowsservercore/Build.ps1 b/tools/releaseBuild/images/microsoft_windowsservercore/Build.ps1 new file mode 100644 index 0000000000..fbd973ab94 --- /dev/null +++ b/tools/releaseBuild/images/microsoft_windowsservercore/Build.ps1 @@ -0,0 +1,66 @@ +[cmdletbinding()] +# PowerShell Script to clone, build and package PowerShell from specified fork and branch +param ( + [string] $location = "$pwd\vscode-powershell", + [string] $destination = "$env:WORKSPACE", + [switch] $Wait +) + +if(-not $env:homedrive) +{ + Write-Verbose "fixing empty home paths..." -Verbose + $profileParts = $env:userprofile -split ':' + $env:homedrive = $profileParts[0]+':' + $env:homepath = $profileParts[1] +} + +if(! (Test-Path $destination)) +{ + Write-Verbose "Creating destination $destination" -Verbose + $null = New-Item -Path $destination -ItemType Directory +} + +#BUG BUG: External binaries should be retrieved via nuget package or similar +$editorServicesPath = Join-Path $location -ChildPath '..\PowerShellEditorServices' +git clone --quiet https://github.com/PowerShell/PowerShellEditorServices $editorServicesPath + +Write-Verbose "homedrive : ${env:homedrive}" +Write-Verbose "homepath : ${env:homepath}" + +# Don't use CIM_PhysicalMemory, docker containers may cache old values +$memoryMB = (Get-CimInstance win32_computersystem).TotalPhysicalMemory /1MB +$requiredMemoryMB = 2048 +if($memoryMB -lt $requiredMemoryMB) +{ + throw "Building powershell requires at least $requiredMemoryMB MiB of memory and only $memoryMB MiB is present." +} +Write-Verbose "Running with $memoryMB MB memory." -Verbose + +try{ + Install-Module InvokeBuild -Scope CurrentUser + Import-module InvokeBuild -Verbose + Set-Location $location + + Invoke-Build + + Get-ChildItem $location\PowerShell-*.vsix | Select-Object -ExpandProperty FullName | ForEach-Object { + $file = $_ + Write-Verbose "Copying $file to $destination" -verbose + Copy-Item -Path $file -Destination "$destination\" -Force + } +} +finally +{ + Write-Verbose "Beginning build clean-up..." -verbose + if($Wait.IsPresent) + { + $path = Join-Path $PSScriptRoot -ChildPath 'delete-to-continue.txt' + $null = New-Item -Path $path -ItemType File + Write-Verbose "Computer name: $env:COMPUTERNAME" -Verbose + Write-Verbose "Delete $path to exit." -Verbose + while(Test-Path -LiteralPath $path) + { + Start-Sleep -Seconds 60 + } + } +} diff --git a/tools/releaseBuild/images/microsoft_windowsservercore/DockerFile b/tools/releaseBuild/images/microsoft_windowsservercore/DockerFile new file mode 100644 index 0000000000..4a9e67831a --- /dev/null +++ b/tools/releaseBuild/images/microsoft_windowsservercore/DockerFile @@ -0,0 +1,18 @@ +# escape=` +FROM microsoft/windowsservercore +LABEL maintainer='PowerShell Team ' +LABEL version="0.3" + +SHELL ["PowerShell.exe", "-command"] + +RUN Set-ExecutionPolicy Unrestricted +RUN iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) +RUN Get-PackageProvider -Name nuget -ForceBootstrap +RUN Install-Module InvokeBuild -Force +RUN choco install -y nodejs.install --no-progress +RUN choco install -y git.install --no-progress +RUN choco install -y netfx-4.5.1-devpack --no-progress; exit 0 + +COPY ./Build.ps1 /build.ps1 + +ENTRYPOINT ["powershell", "-executionpolicy", "unrestricted"] From f70926958eeef779b301d002cb066808faf08692 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Sun, 22 Oct 2017 15:14:07 -0600 Subject: [PATCH 07/30] Give better error msg when attach to process w/PS Core The current approach spits out a message in the terminal about a missing wincore pkg. --- src/features/DebugSession.ts | 8 ++++++++ src/session.ts | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index 98a89c0808..7ca212e8d2 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -48,6 +48,14 @@ export class DebugSessionFeature implements IFeature { var settings = Settings.load(); let createNewIntegratedConsole = settings.debugging.createTemporaryIntegratedConsole; + if (config.request === "attach") { + let versionDetails = this.sessionManager.getPowerShellVersionDetais(); + if (versionDetails.edition.toLowerCase() === "core") { + vscode.window.showErrorMessage("PowerShell Core does not support attaching to a PowerShell host process."); + return; + } + } + if (generateLaunchConfig) { // No launch.json, create the default configuration for both unsaved (Untitled) and saved documents. config.type = 'PowerShell'; diff --git a/src/session.ts b/src/session.ts index 68479b92a5..931dc04b21 100644 --- a/src/session.ts +++ b/src/session.ts @@ -217,6 +217,10 @@ export class SessionManager implements Middleware { return this.sessionDetails; } + public getPowerShellVersionDetais() : PowerShellVersionDetails { + return this.versionDetails; + } + public dispose() : void { // Stop the current session this.stop(); From 9dcdc62507ae88a62284ab3b8c4c7c7f0f48f35d Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Mon, 23 Oct 2017 10:16:42 -0600 Subject: [PATCH 08/30] Return undefined when attach is not supported https://github.com/Microsoft/vscode/issues/33794#issuecomment-338586516 --- src/features/DebugSession.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index 7ca212e8d2..8efce23ebe 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -51,8 +51,10 @@ export class DebugSessionFeature implements IFeature { if (config.request === "attach") { let versionDetails = this.sessionManager.getPowerShellVersionDetais(); if (versionDetails.edition.toLowerCase() === "core") { - vscode.window.showErrorMessage("PowerShell Core does not support attaching to a PowerShell host process."); - return; + let msg = "PowerShell Core does not support attaching to a PowerShell host process."; + return vscode.window.showErrorMessage(msg).then(_ => { + return undefined; + }); } } From a6f4d053cd67dedaf2f59d11e14c82add78d7c20 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Sun, 22 Oct 2017 02:00:16 -0600 Subject: [PATCH 09/30] Fix tasks to run under VSCode 1.17.2 on Linux None of these were working correctly on Ubuntu 16.04. --- .vscode/tasks.json | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 28690bedf8..a1fcb638cc 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -17,48 +17,39 @@ "tasks": [ { "taskName": "Install", - "suppressTaskName": true, - "args": [ - "Invoke-Build Restore" - ] + "type": "shell", + "command": "Invoke-Build Restore" }, { "taskName": "CleanAll", - "suppressTaskName": true, - "args": [ - "Invoke-Build CleanAll" - ] + "type": "shell", + "command": "Invoke-Build CleanAll" }, { "taskName": "Clean", - "suppressTaskName": true, - "args": [ - "Invoke-Build Clean" - ] + "type": "shell", + "command": "Invoke-Build Clean" }, { "taskName": "BuildAll", - "suppressTaskName": true, - "isBuildCommand": true, - "args": [ - "Invoke-Build BuildAll" - ], + "type": "shell", + "command": "Invoke-Build BuildAll", "problemMatcher": [] }, { "taskName": "Build", - "suppressTaskName": true, - "args": [ - "Invoke-Build Build" - ], + "type": "shell", + "command": "Invoke-Build Build", + "group": { + "kind": "build", + "isDefault": true + }, "problemMatcher": [] }, { "taskName": "Test", - "suppressTaskName": true, - "args": [ - "Invoke-Build Test" - ], + "type": "shell", + "command": "Invoke-Build Test", "group": { "kind": "test", "isDefault": true From d57ab297cf6e71633649eb3ed7ac2f8d795a86bf Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Sun, 22 Oct 2017 17:35:58 -0600 Subject: [PATCH 10/30] This fix works on both Linux and Windows. --- .vscode/tasks.json | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index a1fcb638cc..e89c2ba23b 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -3,53 +3,54 @@ "windows": { "command": "${env:windir}/System32/WindowsPowerShell/v1.0/powershell.exe", - "args": [ "-NoProfile", "-ExecutionPolicy", "Bypass" ] + "args": [ "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command" ] }, "linux": { "command": "/usr/bin/powershell", - "args": [ "-NoProfile" ] + "args": [ "-NoProfile", "-Command" ] }, "osx": { "command": "/usr/local/bin/powershell", - "args": [ "-NoProfile" ] + "args": [ "-NoProfile", "-Command" ] }, "tasks": [ { "taskName": "Install", - "type": "shell", - "command": "Invoke-Build Restore" + "suppressTaskName": true, + "args": [ "Invoke-Build", "Restore" ] }, { "taskName": "CleanAll", - "type": "shell", - "command": "Invoke-Build CleanAll" + "suppressTaskName": true, + "args": [ "Invoke-Build", "CleanAll" ] }, { "taskName": "Clean", - "type": "shell", - "command": "Invoke-Build Clean" + "suppressTaskName": true, + "args": [ "Invoke-Build", "Clean" ] }, { "taskName": "BuildAll", - "type": "shell", - "command": "Invoke-Build BuildAll", - "problemMatcher": [] - }, - { - "taskName": "Build", - "type": "shell", - "command": "Invoke-Build Build", + "suppressTaskName": true, + "args": [ "Invoke-Build", "BuildAll" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": [] }, + { + "taskName": "Build", + "suppressTaskName": true, + "args": [ "Invoke-Build", "Build" ], + "group": "build", + "problemMatcher": [] + }, { "taskName": "Test", - "type": "shell", - "command": "Invoke-Build Test", + "suppressTaskName": true, + "args": [ "Invoke-Build", "Test" ], "group": { "kind": "test", "isDefault": true From f03a7508501e4da126e0d445a2eaab459b053e2e Mon Sep 17 00:00:00 2001 From: Mark SchillI Date: Thu, 6 Jul 2017 15:03:04 -0400 Subject: [PATCH 11/30] Adds the ability to create a bug report from within the extension --- README.md | 2 + package.json | 10 +++ src/features/GenerateBugReport.ts | 135 ++++++++++++++++++++++++++++++ src/main.ts | 2 + src/session.ts | 2 +- src/settings.ts | 12 ++- 6 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 src/features/GenerateBugReport.ts diff --git a/README.md b/README.md index 64f5ef8e2e..0b0c53055f 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,8 @@ to file an issue on our GitHub repository: Make sure to fill in the information that is requested in the issue template as it will help us investigate the problem more quickly. +> Note To automatically create a bug report from within the extension run the *"Report a problem on GitHub"* command. Some basic information about your instance and powershell versions will be collected and inserted into a new GitHub issue. + ### 2. Capture verbose logs and send them to us If you're having an issue with crashing or other erratic behavior, add the following diff --git a/package.json b/package.json index 072040e54c..b5d1baa796 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,11 @@ "title": "Open PowerShell Extension Logs Folder", "category": "PowerShell" }, + { + "command": "PowerShell.GenerateBugReport", + "title": "Upload Bug Report to Github", + "category": "PowerShell" + }, { "command": "PowerShell.OpenInISE", "title": "Open Current File in PowerShell ISE", @@ -404,6 +409,11 @@ "default": true, "description": "Loads user and system-wide PowerShell profiles (profile.ps1 and Microsoft.VSCode_profile.ps1) into the PowerShell session. This affects IntelliSense and interactive script execution, but it does not affect the debugger." }, + "powershell.bugReporting.project": { + "type": "string", + "default": "https://github.com/PowerShell/vscode-powershell", + "description": "Specifies the url of the GitHub project in which to generate bug reports." + }, "powershell.scriptAnalysis.enable": { "type": "boolean", "default": true, diff --git a/src/features/GenerateBugReport.ts b/src/features/GenerateBugReport.ts new file mode 100644 index 0000000000..e42f83eee6 --- /dev/null +++ b/src/features/GenerateBugReport.ts @@ -0,0 +1,135 @@ +import vscode = require('vscode'); +import { SessionManager } from '../session'; +import cp = require('child_process'); +import Settings = require('../settings'); + +import window = vscode.window; +const os = require("os"); + +import { IFeature, LanguageClient } from '../feature'; +// import { IExtensionManagementService, LocalExtensionType, ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement'; + +const extensionId: string = 'ms-vscode.PowerShell'; +const extensionVersion: string = vscode.extensions.getExtension(extensionId).packageJSON.version; + +const queryStringPrefix: string = '?' + +var settings = Settings.load(); +let project = settings.bugReporting.project; + +const issuesUrl: string = `${project}/issues/new` + +var extensions = vscode.extensions.all.filter(element => element.packageJSON.isBuiltin == false).sort((leftside, rightside): number => { + if (leftside.packageJSON.name.toLowerCase() < rightside.packageJSON.name.toLowerCase()) return -1; + if (leftside.packageJSON.name.toLowerCase() > rightside.packageJSON.name.toLowerCase()) return 1; + return 0; +}) + +export class GenerateBugReportFeature implements IFeature { + + private command: vscode.Disposable; + private powerShellProcess: cp.ChildProcess; + + constructor(private sessionManager: SessionManager) { + this.command = vscode.commands.registerCommand('PowerShell.GenerateBugReport', () => { + + + var OutputChannel = window.createOutputChannel('Debug'); + OutputChannel.show(); + + OutputChannel.appendLine('Starting Bug Report'); + + var body = encodeURIComponent(`## Issue Description ## + +I am experiencing a problem with... + +## Attached Logs ## + +Follow the instructions in the [README](https://github.com/PowerShell/vscode-powershell#reporting-problems) about capturing and sending logs. + +## Environment Information ## + +### Visual Studio Code ### + +| Name | Version | +| --- | --- | +| Operating System | ${os.type() + ' ' + os.arch() + ' ' + os.release()} | +| VSCode | ${vscode.version}| +| PowerShell Extension Version | ${extensionVersion} | +| PSES | | + +### PowerShell Information ### + +${this.getRuntimeInfo()} + +### Visual Studio Code Extensions ### + +
Visual Studio Code Extensions(Click to Expand) + +${this.generateExtensionTable(extensions)} +
+ +`); + + var encodedBody = encodeURIComponent(body); + var fullUrl = `${issuesUrl}${queryStringPrefix}body=${encodedBody}`; + vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(fullUrl)); + + }); + + } + + + public setLanguageClient(LanguageClient: LanguageClient) { + // Not needed for this feature. + } + + public dispose() { + this.command.dispose(); + } + + + private generateExtensionTable(extensions): string { + if (!extensions.length) { + return 'none'; + } + + let tableHeader = `|Extension|Author|Version|\n|---|---|---|`; + const table = extensions.map(e => { + + if (e.packageJSON.isBuiltin == false) { + return `|${e.packageJSON.name}|${e.packageJSON.publisher}|${e.packageJSON.version}|`; + } + }).join('\n'); + + const extensionTable = ` +${tableHeader}\n${table}; +`; + // 2000 chars is browsers de-facto limit for URLs, 400 chars are allowed for other string parts of the issue URL + // http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers + // if (encodeURIComponent(extensionTable).length > 1600) { + // return 'the listing length exceeds browsers\' URL characters limit'; + // } + + return extensionTable; + } + + private getRuntimeInfo() { + + var psOutput; + var powerShellExePath = this.sessionManager.getPowerShellExePath(); + var powerShellArgs = [ + "-NoProfile", + + "-Command", + '$PSVersionString = "|Name|Value|\n"; $PSVersionString += "|---|---|\n"; $PSVersionTable.keys | ForEach-Object { $PSVersionString += "|$_|$($PSVersionTable.Item($_))|\n" }; $PSVersionString' + ] + + var spawn = require('child_process').spawnSync; + var child = spawn(powerShellExePath, powerShellArgs); + return child.stdout.toString().replace(';', ','); + + } + +} + diff --git a/src/main.ts b/src/main.ts index 8204017626..0a61cfdafc 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,6 +15,7 @@ import { PowerShellLanguageId } from './utils'; import { ConsoleFeature } from './features/Console'; import { ExamplesFeature } from './features/Examples'; import { OpenInISEFeature } from './features/OpenInISE'; +import { GenerateBugReportFeature } from './features/GenerateBugReport'; import { CustomViewsFeature } from './features/CustomViews'; import { ExpandAliasFeature } from './features/ExpandAlias'; import { ShowHelpFeature } from './features/ShowOnlineHelp'; @@ -109,6 +110,7 @@ export function activate(context: vscode.ExtensionContext): void { new ConsoleFeature(), new ExamplesFeature(), new OpenInISEFeature(), + new GenerateBugReportFeature(sessionManager), new ExpandAliasFeature(), new ShowHelpFeature(), new FindModuleFeature(), diff --git a/src/session.ts b/src/session.ts index 931dc04b21..a31ea30cd6 100644 --- a/src/session.ts +++ b/src/session.ts @@ -519,7 +519,7 @@ export class SessionManager implements Middleware { SessionStatus.Failed); } - private getPowerShellExePath(): string { + public getPowerShellExePath(): string { if (!this.sessionSettings.powerShellExePath && this.sessionSettings.developer.powerShellExePath) diff --git a/src/settings.ts b/src/settings.ts index 7934789098..4f9e3a6ad9 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -14,6 +14,10 @@ enum CodeFormattingPreset { Stroustrup } +export interface IBugReportingSettings { + project: string; +} + export interface ICodeFormattingSettings { preset: CodeFormattingPreset; openBraceOnSameLine: boolean; @@ -55,6 +59,7 @@ export interface ISettings { developer?: IDeveloperSettings; codeFormatting?: ICodeFormattingSettings; integratedConsole?: IIntegratedConsoleSettings; + bugReporting?: IBugReportingSettings } export interface IIntegratedConsoleSettings { @@ -67,6 +72,10 @@ export function load(): ISettings { vscode.workspace.getConfiguration( utils.PowerShellLanguageId); + let defaultBugReportingSettings: IBugReportingSettings = { + project: "https://github.com/PowerShell/vscode-powershell" + }; + let defaultScriptAnalysisSettings: IScriptAnalysisSettings = { enable: true, settingsPath: "" @@ -112,7 +121,8 @@ export function load(): ISettings { debugging: configuration.get("debugging", defaultDebuggingSettings), developer: configuration.get("developer", defaultDeveloperSettings), codeFormatting: configuration.get("codeFormatting", defaultCodeFormattingSettings), - integratedConsole: configuration.get("integratedConsole", defaultIntegratedConsoleSettings) + integratedConsole: configuration.get("integratedConsole", defaultIntegratedConsoleSettings), + bugReporting: configuration.get("bugReporting", defaultBugReportingSettings) }; } From 06f3b6356f4a7e9b1cf5111c4b3e293025c134cf Mon Sep 17 00:00:00 2001 From: Mark SchillI Date: Tue, 18 Jul 2017 08:07:18 -0400 Subject: [PATCH 12/30] Removes PSES line from output --- src/features/GenerateBugReport.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/features/GenerateBugReport.ts b/src/features/GenerateBugReport.ts index e42f83eee6..a7c9c87e67 100644 --- a/src/features/GenerateBugReport.ts +++ b/src/features/GenerateBugReport.ts @@ -56,7 +56,6 @@ Follow the instructions in the [README](https://github.com/PowerShell/vscode-pow | Operating System | ${os.type() + ' ' + os.arch() + ' ' + os.release()} | | VSCode | ${vscode.version}| | PowerShell Extension Version | ${extensionVersion} | -| PSES | | ### PowerShell Information ### @@ -120,7 +119,6 @@ ${tableHeader}\n${table}; var powerShellExePath = this.sessionManager.getPowerShellExePath(); var powerShellArgs = [ "-NoProfile", - "-Command", '$PSVersionString = "|Name|Value|\n"; $PSVersionString += "|---|---|\n"; $PSVersionTable.keys | ForEach-Object { $PSVersionString += "|$_|$($PSVersionTable.Item($_))|\n" }; $PSVersionString' ] From 85b967a2322f248942fee634abfcd34a6df5a6f6 Mon Sep 17 00:00:00 2001 From: Mark SchillI Date: Thu, 27 Jul 2017 08:27:29 -0400 Subject: [PATCH 13/30] Removes unused output code used for debugging --- src/features/GenerateBugReport.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/features/GenerateBugReport.ts b/src/features/GenerateBugReport.ts index a7c9c87e67..33aeb96f69 100644 --- a/src/features/GenerateBugReport.ts +++ b/src/features/GenerateBugReport.ts @@ -3,7 +3,6 @@ import { SessionManager } from '../session'; import cp = require('child_process'); import Settings = require('../settings'); -import window = vscode.window; const os = require("os"); import { IFeature, LanguageClient } from '../feature'; @@ -33,12 +32,6 @@ export class GenerateBugReportFeature implements IFeature { constructor(private sessionManager: SessionManager) { this.command = vscode.commands.registerCommand('PowerShell.GenerateBugReport', () => { - - var OutputChannel = window.createOutputChannel('Debug'); - OutputChannel.show(); - - OutputChannel.appendLine('Starting Bug Report'); - var body = encodeURIComponent(`## Issue Description ## I am experiencing a problem with... From c10c792c79d326f705ef8d691d8ce54deee6c7a1 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Mon, 23 Oct 2017 21:06:32 -0600 Subject: [PATCH 14/30] Get VSCode to stop prompting about output options for tasks (#1066) --- .vscode/tasks.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index e89c2ba23b..0bb9f0175a 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -18,17 +18,20 @@ { "taskName": "Install", "suppressTaskName": true, - "args": [ "Invoke-Build", "Restore" ] + "args": [ "Invoke-Build", "Restore" ], + "problemMatcher": [] }, { "taskName": "CleanAll", "suppressTaskName": true, - "args": [ "Invoke-Build", "CleanAll" ] + "args": [ "Invoke-Build", "CleanAll" ], + "problemMatcher": [] }, { "taskName": "Clean", "suppressTaskName": true, - "args": [ "Invoke-Build", "Clean" ] + "args": [ "Invoke-Build", "Clean" ], + "problemMatcher": [] }, { "taskName": "BuildAll", From ccebc4d04ae1554551ed7a6a3e92bdf176085f84 Mon Sep 17 00:00:00 2001 From: "David Wilson (POWERSHELL)" Date: Wed, 25 Oct 2017 14:24:31 -0700 Subject: [PATCH 15/30] Fix #1060: .Workspace.NewFile doesn't work in VSC 1.18+ --- src/features/ExtensionCommands.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/ExtensionCommands.ts b/src/features/ExtensionCommands.ts index 91e8e1ea21..8cf49bcb76 100644 --- a/src/features/ExtensionCommands.ts +++ b/src/features/ExtensionCommands.ts @@ -354,7 +354,7 @@ export class ExtensionCommandsFeature implements IFeature { } private newFile(): Thenable { - return vscode.workspace.openTextDocument('') + return vscode.workspace.openTextDocument({ content: ''}) .then(doc => vscode.window.showTextDocument(doc)) .then(_ => EditorOperationResponse.Completed); } From e8c81986b92612468126715803827e9deaedf268 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Sat, 21 Oct 2017 01:26:58 -0600 Subject: [PATCH 16/30] Update to use DebugConfigurationProvider Fix #1046 Fix warning in status bar about ThemeColor This fix requires PSES PR 556 to eliminate one PSES cause of the debug adapter to crash. Also npm generated a package-lock.json file which, from what I've read, should be checked in. I haven't included it in this PR - yet. Thoughts? Also, I updated min VSCode version to 1.17.0. I'm not sure when the new DebugConfigurationProvider API was intro'd. I have tested with 1.17.2 and it works there so I'm reasonably confident it will work in 1.17.0. We might be able to reach back a bit further. We'd have to find out when this API was intro'd. --- .vscode/settings.json | 7 ++++ package.json | 37 ++++++++++--------- src/controls/animatedStatusBar.ts | 5 +-- src/features/DebugSession.ts | 60 ++++++++++++++----------------- src/main.ts | 2 +- 5 files changed, 58 insertions(+), 53 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index d5266bbbbc..e57ba5d71e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,6 +4,13 @@ "editor.insertSpaces": true, "files.trimTrailingWhitespace": true, + "search.exclude": { + "**/node_modules": true, + "**/bower_components": true, + "logs/": true, + "out/": true + }, + // Lock the TypeScript SDK path to the version we use "typescript.tsdk": "./node_modules/typescript/lib" } \ No newline at end of file diff --git a/package.json b/package.json index b5d1baa796..acb826254a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "publisher": "ms-vscode", "description": "Develop PowerShell scripts in Visual Studio Code!", "engines": { - "vscode": "^1.12.0" + "vscode": "^1.17.0" }, "license": "SEE LICENSE IN LICENSE.txt", "homepage": "https://github.com/PowerShell/vscode-powershell/blob/master/README.md", @@ -26,10 +26,10 @@ }, "main": "./out/src/main", "activationEvents": [ + "onDebug", "onLanguage:powershell", "onCommand:PowerShell.NewProjectFromTemplate", "onCommand:PowerShell.OpenExamplesFolder", - "onCommand:PowerShell.StartDebugSession", "onCommand:PowerShell.PickPSHostProcess", "onCommand:PowerShell.SpecifyScriptArgs", "onCommand:PowerShell.ShowSessionConsole", @@ -169,18 +169,20 @@ { "name": "pester", "owner": "powershell", - "fileLocation": ["absolute"], + "fileLocation": [ + "absolute" + ], "severity": "error", "pattern": [ - { - "regexp": "^\\s*(\\[-\\]\\s*.*?)(\\d+)ms\\s*$", - "message": 1 - }, - { - "regexp": "^\\s+at\\s+[^,]+,\\s*(.*?):\\s+line\\s+(\\d+)$", - "file": 1, - "line": 2 - } + { + "regexp": "^\\s*(\\[-\\]\\s*.*?)(\\d+)ms\\s*$", + "message": 1 + }, + { + "regexp": "^\\s+at\\s+[^,]+,\\s*(.*?):\\s+line\\s+(\\d+)$", + "file": 1, + "line": 2 + } ] } ], @@ -207,7 +209,6 @@ "languages": [ "powershell" ], - "startSessionCommand": "PowerShell.StartDebugSession", "configurationSnippets": [ { "label": "PowerShell: Launch Current File", @@ -242,7 +243,9 @@ "request": "launch", "name": "PowerShell Launch Current File w/Args Prompt", "script": "^\"\\${file}\"", - "args": [ "^\"\\${command:SpecifyScriptArgs}\"" ], + "args": [ + "^\"\\${command:SpecifyScriptArgs}\"" + ], "cwd": "^\"\\${file}\"" } }, @@ -365,7 +368,9 @@ "request": "launch", "name": "PowerShell Launch Current File w/Args Prompt", "script": "${file}", - "args": [ "${command:SpecifyScriptArgs}" ], + "args": [ + "${command:SpecifyScriptArgs}" + ], "cwd": "${file}" }, { @@ -425,7 +430,7 @@ "description": "Specifies the path to a PowerShell Script Analyzer settings file. To override the default settings for all projects, enter an absolute path, or enter a path relative to your workspace." }, "powershell.codeFormatting.preset": { - "type":"string", + "type": "string", "enum": [ "Custom", "Allman", diff --git a/src/controls/animatedStatusBar.ts b/src/controls/animatedStatusBar.ts index f933967104..4320bc9864 100644 --- a/src/controls/animatedStatusBar.ts +++ b/src/controls/animatedStatusBar.ts @@ -5,6 +5,7 @@ import { StatusBarItem, StatusBarAlignment, + ThemeColor, Disposable, window} from "vscode"; @@ -49,11 +50,11 @@ class AnimatedStatusBarItem implements StatusBarItem { this.statusBarItem.tooltip = value; } - public get color(): string { + public get color(): string | ThemeColor { return this.statusBarItem.color; } - public set color(value: string) { + public set color(value: string | ThemeColor) { this.statusBarItem.color = value; } diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index 8efce23ebe..5447f89b52 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -5,41 +5,45 @@ import vscode = require('vscode'); import utils = require('../utils'); import Settings = require('../settings'); +import { dirname } from 'path'; import { IFeature } from '../feature'; import { SessionManager } from '../session'; import { LanguageClient, RequestType, NotificationType } from 'vscode-languageclient'; +import { CancellationToken, DebugConfiguration, DebugConfigurationProvider, + ExtensionContext, ProviderResult, WorkspaceFolder } from 'vscode'; -export namespace StartDebuggerNotification { - export const type = new NotificationType('powerShell/startDebugger'); -} - -export class DebugSessionFeature implements IFeature { +export class DebugSessionFeature implements IFeature, DebugConfigurationProvider { private sessionCount: number = 1; private command: vscode.Disposable; private examplesPath: string; - constructor(private sessionManager: SessionManager) { - this.command = vscode.commands.registerCommand( - 'PowerShell.StartDebugSession', - config => { this.startDebugSession(config); }); + constructor(context: ExtensionContext, private sessionManager: SessionManager) { + // Register a debug configuration provider + context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider('PowerShell', this)); } public setLanguageClient(languageClient: LanguageClient) { - languageClient.onNotification( - StartDebuggerNotification.type, - none => this.startDebugSession({ - request: 'launch', - type: 'PowerShell', - name: 'PowerShell Interactive Session' - })); } public dispose() { this.command.dispose(); } - private startDebugSession(config: any) { + // DebugConfigurationProvider method + provideDebugConfigurations( + folder: WorkspaceFolder | undefined, + token?: CancellationToken): ProviderResult { + + // Currently all debugger initialConfigurations are specified in package.json + return []; + } + + // DebugConfigurationProvider method + resolveDebugConfiguration( + folder: WorkspaceFolder | undefined, + config: DebugConfiguration, + token?: CancellationToken): ProviderResult { let currentDocument = vscode.window.activeTextEditor.document; let debugCurrentScript = (config.script === "${file}") || !config.request; @@ -146,27 +150,14 @@ export class DebugSessionFeature implements IFeature { .start(`DebugSession-${this.sessionCount++}`) .then( sessionDetails => { - this.startDebugger( - config, - sessionFilePath, - sessionDetails); + utils.writeSessionFile(sessionFilePath, sessionDetails); }); } else { - this.startDebugger( - config, - sessionFilePath, - this.sessionManager.getSessionDetails()); + utils.writeSessionFile(sessionFilePath, this.sessionManager.getSessionDetails()); } - } - private startDebugger( - config: any, - sessionFilePath: string, - sessionDetails: utils.EditorServicesSessionDetails) { - - utils.writeSessionFile(sessionFilePath, sessionDetails); - vscode.commands.executeCommand('vscode.startDebug', config); + return config; } } @@ -204,7 +195,7 @@ export class SpecifyScriptArgsFeature implements IFeature { this.command.dispose(); } - private specifyScriptArguments(): Thenable { + private specifyScriptArguments(): Thenable { const powerShellDbgScriptArgsKey = 'powerShellDebugScriptArgs'; let options: vscode.InputBoxOptions = { @@ -225,6 +216,7 @@ export class SpecifyScriptArgsFeature implements IFeature { if (this.emptyInputBoxBugFixed) { this.context.workspaceState.update(powerShellDbgScriptArgsKey, text); } + return new Array(text); } diff --git a/src/main.ts b/src/main.ts index 0a61cfdafc..5230bf5de9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -121,7 +121,7 @@ export function activate(context: vscode.ExtensionContext): void { new NewFileOrProjectFeature(), new DocumentFormatterFeature(logger), new RemoteFilesFeature(), - new DebugSessionFeature(sessionManager), + new DebugSessionFeature(context, sessionManager), new PickPSHostProcessFeature(), new SpecifyScriptArgsFeature(context), new HelpCompletionFeature(), From b170ad69b1d706bb3d6fb46abf8325735307babd Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Mon, 23 Oct 2017 09:18:34 -0600 Subject: [PATCH 17/30] Do not impl provideDebugConfigurations when supplying these via package.json https://github.com/Microsoft/vscode/issues/33794#issuecomment-338586516 --- src/features/DebugSession.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index 5447f89b52..2cd64195da 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -30,15 +30,6 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider this.command.dispose(); } - // DebugConfigurationProvider method - provideDebugConfigurations( - folder: WorkspaceFolder | undefined, - token?: CancellationToken): ProviderResult { - - // Currently all debugger initialConfigurations are specified in package.json - return []; - } - // DebugConfigurationProvider method resolveDebugConfiguration( folder: WorkspaceFolder | undefined, From f944f4e5f13e0dbd37297cf7394cd0718d29aa52 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Mon, 23 Oct 2017 19:57:37 -0600 Subject: [PATCH 18/30] Add package-lock.json file Also update .gitattribtues to configure npm files to use LF since the newer version seems insistent about using LF. See https://github.com/npm/npm/issues/17161 --- .gitattributes | 5 + package-lock.json | 3102 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 3107 insertions(+) create mode 100644 package-lock.json diff --git a/.gitattributes b/.gitattributes index 4cab1f4d26..acd2115566 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,7 @@ # Set the default behavior, in case people don't have core.autocrlf set. * text=auto + +# .gitattributes in project root +# npm now seems to be insisting on LF - see https://github.com/npm/npm/issues/17161 +package.json text eol=lf +package-lock.json text eol=lf diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..d8913c6785 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3102 @@ +{ + "name": "PowerShell", + "version": "1.4.3", + "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 + }, + "ajv": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.4.tgz", + "integrity": "sha1-Pa+ai2ciEpn9ro2C0RftjmyAJEs=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "json-schema-traverse": "0.3.1", + "json-stable-stringify": "1.0.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 + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "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=", + "dev": true + }, + "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 + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "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 + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "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=", + "dev": true, + "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" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "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" + } + }, + "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.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "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 + } + } + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.4", + "parse5": "3.0.2" + } + }, + "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=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "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=", + "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" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "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=", + "dev": true + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "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=", + "dev": true, + "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" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "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" + } + }, + "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=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "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": { + "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 + }, + "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" + } + }, + "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.1", + "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.1", + "resolved": "https://registry.npmjs.org/queue/-/queue-4.4.1.tgz", + "integrity": "sha512-Lcs97MDk4ewesYBtC6P3hl+klvVmHN2PLzgsQcK29bVQ2+5T0Ef0ZmXhBIINkpJd3LzZK29MWjyTL2lGLYGOPA==", + "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=", + "dev": true + }, + "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" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + } + } + }, + "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": "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" + } + }, + "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": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "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" + } + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "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=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "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" + } + }, + "linkify-it": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.0.3.tgz", + "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=", + "dev": true, + "requires": { + "uc.micro": "1.0.3" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "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 + }, + "markdown-it": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.0.tgz", + "integrity": "sha512-tNuOCCfunY5v5uhcO2AUMArvKAyKMygX8tfup/JrgnsDqcCATQsAExBq7o5Ml9iMmO82bk6jYNLj6khcrl0JGA==", + "dev": true, + "requires": { + "argparse": "1.0.9", + "entities": "1.1.1", + "linkify-it": "2.0.3", + "mdurl": "1.0.1", + "uc.micro": "1.0.3" + } + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "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": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "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=", + "dev": true, + "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" + } + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "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" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "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" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "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" + } + } + } + }, + "parse5": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.2.tgz", + "integrity": "sha1-Be/1fw70V3+xRKefi5qWemzERRA=", + "dev": true, + "requires": { + "@types/node": "6.0.90" + } + }, + "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=", + "dev": true + }, + "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=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "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" + } + } + } + }, + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "requires": { + "mute-stream": "0.0.7" + } + }, + "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==", + "dev": true, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "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=", + "dev": true + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "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==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.2.4", + "har-schema": "2.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.0.2" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "sntp": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", + "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "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==", + "dev": true + }, + "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": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "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" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "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=", + "dev": true + }, + "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 + }, + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "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=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", + "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "typed-rest-client": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-0.9.0.tgz", + "integrity": "sha1-92jMDcP06VDwbgSCXDaz54NKofI=", + "dev": true, + "requires": { + "tunnel": "0.0.4", + "underscore": "1.8.3" + } + }, + "typescript": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", + "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=", + "dev": true + }, + "uc.micro": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.3.tgz", + "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=", + "dev": true + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", + "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-join": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", + "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", + "dev": true + }, + "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==", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "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" + } + } + } + }, + "vsce": { + "version": "1.31.1", + "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.31.1.tgz", + "integrity": "sha1-3F4eDkaZSdkJ/GshP4S1YqL06a8=", + "dev": true, + "requires": { + "cheerio": "1.0.0-rc.2", + "commander": "2.11.0", + "denodeify": "1.2.1", + "glob": "7.1.2", + "lodash": "4.17.4", + "markdown-it": "8.4.0", + "mime": "1.4.1", + "minimatch": "3.0.4", + "osenv": "0.1.4", + "read": "1.0.7", + "semver": "5.4.1", + "tmp": "0.0.29", + "url-join": "1.1.0", + "vso-node-api": "6.1.2-preview", + "yauzl": "2.8.0", + "yazl": "2.4.2" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "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" + } + }, + "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" + } + } + } + }, + "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" + } + } + } + }, + "vscode-jsonrpc": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-3.4.1.tgz", + "integrity": "sha1-4uC54SH3GitUSAWKNKOu+DdqXpE=" + }, + "vscode-languageclient": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-3.3.0.tgz", + "integrity": "sha512-4HVt0GorAV7lJfoT2C6qh/Fug9u/HSmKUa8u+y+Pte0HqvUtOwTI8qlX1vu8vyQ5OHD8t8pJad/9yIbYntwxCw==", + "requires": { + "vscode-jsonrpc": "3.4.1", + "vscode-languageserver-types": "3.4.0" + } + }, + "vscode-languageserver-types": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.4.0.tgz", + "integrity": "sha1-UEOuR+5KwWrwe7PQylYSNeDA0vo=" + }, + "vso-node-api": { + "version": "6.1.2-preview", + "resolved": "https://registry.npmjs.org/vso-node-api/-/vso-node-api-6.1.2-preview.tgz", + "integrity": "sha1-qrNUbfJFHs2JTgcbuZtd8Zxfp48=", + "dev": true, + "requires": { + "q": "1.5.1", + "tunnel": "0.0.4", + "typed-rest-client": "0.9.0", + "underscore": "1.8.3" + } + }, + "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" + } + } + } +} From a70a499e7b3480733b3b1775ebc38f6e1e24e0fa Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Wed, 25 Oct 2017 21:58:53 -0600 Subject: [PATCH 19/30] Update to handle PS Core binary name change Fix #1064 Also fixes case where the powerShellExePath setting is no longer valid. This happens when a Windows users installs an updated pre-release version of PS Core. That uninstalls previous versions. --- src/platform.ts | 19 ++++++++++++++----- src/session.ts | 8 ++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/platform.ts b/src/platform.ts index adcaae1294..7016da90fe 100644 --- a/src/platform.ts +++ b/src/platform.ts @@ -73,9 +73,15 @@ export function getDefaultPowerShellPath( } else if (platformDetails.operatingSystem == OperatingSystem.MacOS) { powerShellExePath = "/usr/local/bin/powershell"; + if (fs.existsSync("/usr/loca/bin/pwsh")) { + powerShellExePath = "/usr/local/bin/pwsh"; + } } else if (platformDetails.operatingSystem == OperatingSystem.Linux) { powerShellExePath = "/usr/bin/powershell"; + if (fs.existsSync("/usr/bin/pwsh")) { + powerShellExePath = "/usr/bin/pwsh"; + } } return powerShellExePath; @@ -146,9 +152,14 @@ export function getAvailablePowerShellExes(platformDetails: PlatformDetails): Po .map(item => path.join(psCoreInstallPath, item)) .filter(item => fs.lstatSync(item).isDirectory()) .map(item => { + let exePath = path.join(item, "pwsh.exe"); + if (!fs.existsSync(exePath)) { + exePath = path.join(item, "powershell.exe"); + } + return { versionName: `PowerShell Core ${path.parse(item).base}`, - exePath: path.join(item, "powershell.exe") + exePath: exePath }; }); @@ -158,12 +169,10 @@ export function getAvailablePowerShellExes(platformDetails: PlatformDetails): Po } } else { + paths.push({ versionName: "PowerShell Core", - exePath: - os.platform() === "darwin" - ? "/usr/local/bin/powershell" - : "/usr/bin/powershell" + exePath: this.getDefaultPowerShellPath(platformDetails) }); } diff --git a/src/session.ts b/src/session.ts index a31ea30cd6..ad3b0b83d7 100644 --- a/src/session.ts +++ b/src/session.ts @@ -560,6 +560,14 @@ export class SessionManager implements Middleware { this.sessionSettings.developer.powerShellExePath || "").trim(); + // New versions of PS Core uninstall the previous version + // so make sure the path stored in the settings exists. + if (!fs.existsSync(powerShellExePath)) { + this.log.write( + `Path specified by 'powerShellExePath' setting - '${powerShellExePath}' - not found, reverting to default PowerShell path.`); + powerShellExePath = ""; + } + if (this.platformDetails.operatingSystem === OperatingSystem.Windows && powerShellExePath.length > 0) { From 0def853c730722bb932c9b1cf87655bde1d3ddb6 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Thu, 26 Oct 2017 09:06:50 -0600 Subject: [PATCH 20/30] Add missing 'l' to path --- src/platform.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform.ts b/src/platform.ts index 7016da90fe..b1109f75de 100644 --- a/src/platform.ts +++ b/src/platform.ts @@ -73,7 +73,7 @@ export function getDefaultPowerShellPath( } else if (platformDetails.operatingSystem == OperatingSystem.MacOS) { powerShellExePath = "/usr/local/bin/powershell"; - if (fs.existsSync("/usr/loca/bin/pwsh")) { + if (fs.existsSync("/usr/local/bin/pwsh")) { powerShellExePath = "/usr/local/bin/pwsh"; } } From c08d7a2cb6cac47e62adfc88d42bf340b03571cd Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Tue, 24 Oct 2017 20:42:02 -0600 Subject: [PATCH 21/30] Attach to process does work on PS Core on windows Well actually we have some issues (step buttons are not enable) but you can drive it from PSIC. Fix typo in method name - man I'm going to have to up the font size on my hi-DPI laptop. Getting old man eyes. --- src/features/DebugSession.ts | 10 ++++++++-- src/session.ts | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index 2cd64195da..5deec92fd1 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -8,6 +8,8 @@ import Settings = require('../settings'); import { dirname } from 'path'; import { IFeature } from '../feature'; import { SessionManager } from '../session'; +import { OperatingSystem, PlatformDetails, getPlatformDetails } from '../platform'; + import { LanguageClient, RequestType, NotificationType } from 'vscode-languageclient'; import { CancellationToken, DebugConfiguration, DebugConfigurationProvider, ExtensionContext, ProviderResult, WorkspaceFolder } from 'vscode'; @@ -44,8 +46,12 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider let createNewIntegratedConsole = settings.debugging.createTemporaryIntegratedConsole; if (config.request === "attach") { - let versionDetails = this.sessionManager.getPowerShellVersionDetais(); - if (versionDetails.edition.toLowerCase() === "core") { + let platformDetails = getPlatformDetails(); + let versionDetails = this.sessionManager.getPowerShellVersionDetails(); + + if (versionDetails.edition.toLowerCase() === "core" && + platformDetails.operatingSystem !== OperatingSystem.Windows) { + let msg = "PowerShell Core does not support attaching to a PowerShell host process."; return vscode.window.showErrorMessage(msg).then(_ => { return undefined; diff --git a/src/session.ts b/src/session.ts index ad3b0b83d7..0688404d59 100644 --- a/src/session.ts +++ b/src/session.ts @@ -217,7 +217,7 @@ export class SessionManager implements Middleware { return this.sessionDetails; } - public getPowerShellVersionDetais() : PowerShellVersionDetails { + public getPowerShellVersionDetails() : PowerShellVersionDetails { return this.versionDetails; } From 26626edc12ac6c9ef530b9831693b2fbadbe39d4 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Tue, 24 Oct 2017 21:02:45 -0600 Subject: [PATCH 22/30] Update error msg to be more informative --- src/features/DebugSession.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index 5deec92fd1..fb349c9853 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -52,7 +52,7 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider if (versionDetails.edition.toLowerCase() === "core" && platformDetails.operatingSystem !== OperatingSystem.Windows) { - let msg = "PowerShell Core does not support attaching to a PowerShell host process."; + let msg = "PowerShell Core does not support attaching to a host process on non-Windows operating systems."; return vscode.window.showErrorMessage(msg).then(_ => { return undefined; }); From 725284fa130da83175f600c4ea878f48d318888d Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Wed, 25 Oct 2017 19:52:20 -0600 Subject: [PATCH 23/30] Bit better error messge - I think --- src/features/DebugSession.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index fb349c9853..7f1b7deb39 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -52,7 +52,7 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider if (versionDetails.edition.toLowerCase() === "core" && platformDetails.operatingSystem !== OperatingSystem.Windows) { - let msg = "PowerShell Core does not support attaching to a host process on non-Windows operating systems."; + let msg = "PowerShell Core does not support attaching to a host process except on Windows."; return vscode.window.showErrorMessage(msg).then(_ => { return undefined; }); From f070e358c46c59dc290b04a0295734c3792b95a2 Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Thu, 26 Oct 2017 09:09:34 -0600 Subject: [PATCH 24/30] Changed error message wording --- src/features/DebugSession.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index 7f1b7deb39..affda52110 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -52,7 +52,7 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider if (versionDetails.edition.toLowerCase() === "core" && platformDetails.operatingSystem !== OperatingSystem.Windows) { - let msg = "PowerShell Core does not support attaching to a host process except on Windows."; + let msg = "PowerShell Core only supports attaching to a host process on Windows."; return vscode.window.showErrorMessage(msg).then(_ => { return undefined; }); From 52041628aa77851051daf4d68a2b0f474d599964 Mon Sep 17 00:00:00 2001 From: "David Wilson (POWERSHELL)" Date: Thu, 26 Oct 2017 08:08:20 -0700 Subject: [PATCH 25/30] Fix #1040: Remote non-PowerShell files are not saved to server --- src/features/RemoteFiles.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/features/RemoteFiles.ts b/src/features/RemoteFiles.ts index ff837fa5eb..39ab7bc3c2 100644 --- a/src/features/RemoteFiles.ts +++ b/src/features/RemoteFiles.ts @@ -58,8 +58,7 @@ export class RemoteFilesFeature implements IFeature { } private isDocumentRemote(doc: vscode.TextDocument) { - return doc.languageId === "powershell" && - doc.fileName.toLowerCase().startsWith(this.tempSessionPathPrefix); + return doc.fileName.toLowerCase().startsWith(this.tempSessionPathPrefix); } private closeRemoteFiles() { From faa2e9b49467a7638d7e89a6479c16b058c5ce22 Mon Sep 17 00:00:00 2001 From: "David Wilson (POWERSHELL)" Date: Fri, 27 Oct 2017 11:07:51 -0700 Subject: [PATCH 26/30] Bump version to 1.5.0, update CHANGELOG.md --- CHANGELOG.md | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ appveyor.yml | 2 +- package.json | 2 +- src/main.ts | 2 +- 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1236954df2..e804ed4dcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,67 @@ # vscode-powershell Release History +## 1.5.0 +### Friday, October 27, 2017 + +#### Fixes and Improvements + +- [PowerShell/vscode-powershell #820](https://github.com/PowerShell/vscode-powershell/issues/820) - + Added new "Upload Bug Report to GitHub" command to make it easy to post an issue to the vscode-powershell GitHub repo. Thanks to [Mark Schill](https://github.com/PowerSchill)! + +- [PowerShell/vscode-powershell #910](https://github.com/PowerShell/vscode-powershell/issues/910) - + Set-VSCodeHtmlContentView cmdlet now exposes `JavaScriptPaths` and `StyleSheetPaths` parameters to allow using JavaScript code and CSS stylesheets in VS Code HTML preview views. + +- [PowerShell/vscode-powershell #909](https://github.com/PowerShell/vscode-powershell/issues/909) - + Write-VSCodeHtmlContentView's AppendBodyContent now accepts input from the pipeline + +- [PowerShell/vscode-powershell #1071](https://github.com/PowerShell/vscode-powershell/pull/1071) - + Updated session menu to find PowerShell Core installs with the new pwsh.exe path + +- [PowerShell/vscode-powershell #842](https://github.com/PowerShell/vscode-powershell/issues/842) - + psedit can now open empty files in remote sessions + +- [PowerShell/vscode-powershell #1040](https://github.com/PowerShell/vscode-powershell/issues/1040) - + Non-PowerShell files opened in remote sessions using psedit can now be saved back to the remote server + +- [PowerShell/vscode-powershell #660](https://github.com/PowerShell/vscode-powershell/issues/660) - + Set/Enable/Disable/Remove-PSBreakpoint commands now cause the VS Code breakpoint UI to be updated while the debugger is active + +- [PowerShell/vscode-powershell #625](https://github.com/PowerShell/vscode-powershell/issues/625) - + Breakpoints are now cleared from the session when the debugger starts so that stale breakpoints from previous sessions are not hit + +- [PowerShell/vscode-powershell #1004](https://github.com/PowerShell/vscode-powershell/issues/1004) - + Handle exception case when finding references of a symbol + +- [PowerShell/vscode-powershell #942](https://github.com/PowerShell/vscode-powershell/issues/942) - + Temporary debugging session now does not hang when running "PowerShell Interactive Session" debugging configuration + +- [PowerShell/vscode-powershell #917](https://github.com/PowerShell/vscode-powershell/issues/917) - + Added PowerShell.InvokeRegisteredEditorCommand command to be used from HTML preview views for invoking editor commands registered in PowerShell. Thanks to [Kamil Kosek](https://github.com/kamilkosek)! + +- [PowerShell/vscode-powershell #872](https://github.com/PowerShell/vscode-powershell/issues/872) - + Watch variables with children are now expandable + +- [PowerShell/vscode-powershell #1060](https://github.com/PowerShell/vscode-powershell/issues/1060) - + $psEditor.Workspace.NewFile() now works again in VSC 1.18.0 Insiders builds + +- [PowerShell/vscode-powershell #1046](https://github.com/PowerShell/vscode-powershell/issues/1046) - + Debugging now works again in VSC 1.18.0 Insiders builds + +- [PowerShell/PowerShellEditorServices #342](https://github.com/PowerShell/PowerShellEditorServices/issues/342) - + Unexpected file URI schemes are now handled more reliably + +- [PowerShell/PowerShellEditorServices #396](https://github.com/PowerShell/PowerShellEditorServices/issues/396) - + Resolved errors being written to Integrated Console when running native applications while transcription is turned on + +- [PowerShell/PowerShellEditorServices #529](https://github.com/PowerShell/PowerShellEditorServices/issues/529) - + Fixed an issue with loading the PowerShellEditorServices module in PowerShell Core 6.0.0-beta3 + +- [PowerShell/PowerShellEditorServices #533](https://github.com/PowerShell/PowerShellEditorServices/pull/533) - + Added new $psEditor.GetCommand() method for getting all registered editor commands. Thanks to [Kamil Kosek](https://github.com/kamilkosek)! + +- [PowerShell/PowerShellEditorServices #535](https://github.com/PowerShell/PowerShellEditorServices/pull/535) - + Type information is now exposed on hover for variables in the Variables view + ## 1.4.3 ### Wednesday, September 13, 2017 diff --git a/appveyor.yml b/appveyor.yml index 20546e1e20..bfe36a3f81 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.4.3-insiders-{build}' +version: '1.5.0-insiders-{build}' image: Visual Studio 2017 clone_depth: 10 skip_tags: true diff --git a/package.json b/package.json index acb826254a..52d47321a7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "PowerShell", "displayName": "PowerShell", - "version": "1.4.3", + "version": "1.5.0", "publisher": "ms-vscode", "description": "Develop PowerShell scripts in Visual Studio Code!", "engines": { diff --git a/src/main.ts b/src/main.ts index 5230bf5de9..13a85335dc 100644 --- a/src/main.ts +++ b/src/main.ts @@ -34,7 +34,7 @@ import { HelpCompletionFeature } from "./features/HelpCompletion"; // NOTE: We will need to find a better way to deal with the required // PS Editor Services version... -var requiredEditorServicesVersion = "1.4.1"; +var requiredEditorServicesVersion = "1.5.0"; var logger: Logger = undefined; var sessionManager: SessionManager = undefined; From 44a02d1bc6949ac7e6c672bd5c065bc7b84c17f1 Mon Sep 17 00:00:00 2001 From: Drew Anderson Date: Wed, 1 Nov 2017 00:30:00 -0400 Subject: [PATCH 27/30] Minor formatting changes (#1081) --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0b0c53055f..832cc6424a 100644 --- a/README.md +++ b/README.md @@ -81,11 +81,14 @@ check out the included [README.md](examples/README.md) file to learn more about how to use them. This folder can be found at the following path: + ``` -c:\Users\\.vscode\extensions\ms-vscode.PowerShell-\examples +C:\Users\\.vscode\extensions\ms-vscode.PowerShell-\examples ``` + To open/view the extension's examples in Visual Studio Code, run the following from your PowerShell command prompt: -``` + +```powershell code (Get-ChildItem $Home\.vscode\extensions\ms-vscode.PowerShell-*\examples)[-1] ``` @@ -125,7 +128,6 @@ You have two options for sending us the logs: 2. If you are editing scripts that don't contain sensitive information, you can drag and drop your logs ZIP file into the GitHub issue that you are creating. - ## Contributing to the Code Check out the [development documentation](docs/development.md) for more details From 82ca03c2e2abba9f818dafe56b9ff80a0aa9b4b9 Mon Sep 17 00:00:00 2001 From: Eric Loveland Date: Thu, 7 Sep 2017 19:10:46 -0400 Subject: [PATCH 28/30] Remove macOS OpenSSL Error for PS Core Beta .NET Core removed its dependency on OpenSSL on Mac in version 2.0. PowerShell Core Beta requires .NET Core 2.0 so it's safe to allow the PowerShell extension to launch if it detects the user is running PowerShell Core Beta --- .travis.yml | 7 ------- build/download.sh | 26 -------------------------- docs/troubleshooting.md | 9 ++++++--- src/session.ts | 38 +++++++++++++++++++++++++++++++++----- 4 files changed, 39 insertions(+), 41 deletions(-) diff --git a/.travis.yml b/.travis.yml index 56945e6b19..7b69987bbd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,13 +11,6 @@ dist: trusty osx_image: xcode8.3 before_install: - - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - brew update; - brew install openssl; - mkdir -p /usr/local/lib; - ln -s /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib /usr/local/lib/; - ln -s /usr/local/opt/openssl/lib/libssl.1.0.0.dylib /usr/local/lib/; - fi - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then nvm install v6.0.0; fi diff --git a/build/download.sh b/build/download.sh index 90310662db..77e908b8ab 100755 --- a/build/download.sh +++ b/build/download.sh @@ -113,34 +113,8 @@ case "$OSTYPE" in esac ;; darwin*) - patched=0 - if hash brew 2>/dev/null; then - brew update - if [[ ! -d $(brew --prefix openssl) ]]; then - echo "Installing OpenSSL with brew..." - if ! brew install openssl; then - echo "ERROR: OpenSSL failed to install! Crypto functions will not work..." >&2 - # Don't abort because it is not fatal - elif ! brew install curl --with-openssl; then - echo "ERROR: curl failed to build against OpenSSL; SSL functions will not work..." >&2 - # Still not fatal - else - # OpenSSL installation succeeded; reme mber to patch System.Net.Http after PowerShell installation - patched=1 - fi - fi - - else - echo "ERROR: brew not found! OpenSSL may not be available..." >&2 - # Don't abort because it is not fatal - fi - echo "Installing $package with sudo ..." sudo installer -pkg "./$package" -target / - if [[ $patched -eq 1 ]]; then - echo "Patching System.Net.Http for libcurl and OpenSSL..." - find /usr/local/microsoft/powershell -name System.Net.Http.Native.dylib | xargs sudo install_name_tool -change /usr/lib/libcurl.4.dylib /usr/local/opt/curl/lib/libcurl.4.dylib - fi ;; esac diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index a8ffbf1fda..b7fb7e8dd8 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -19,9 +19,12 @@ This issue has been resolved in PowerShell 5.1. ### 1. PowerShell IntelliSense does not work, can't debug scripts -The most common problem when the PowerShell extension doesn't work on macOS is that -OpenSSL is not installed. You can check for the installation of OpenSSL by looking for -the following files: +The most common problem when the PowerShell extension doesn't work on macOS is that you have +an alpha version of PowerShell installed. To upgrade to the latest beta, please follow the +[Install Instructions](https://github.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md#macos-1012). + +If you'd prefer to use an alpha version of PowerShell, then OpenSSL must be installed. +You can check for the installation of OpenSSL by looking for the following files: If installed using Homebrew: diff --git a/src/session.ts b/src/session.ts index 0688404d59..f5ab6760c1 100644 --- a/src/session.ts +++ b/src/session.ts @@ -105,16 +105,18 @@ export class SessionManager implements Middleware { this.createStatusBarItem(); - // Check for OpenSSL dependency on macOS. Look for the default Homebrew installation - // path and if that fails check the system-wide library path. - if (os.platform() == "darwin") { + this.powerShellExePath = this.getPowerShellExePath(); + + // Check for OpenSSL dependency on macOS when running PowerShell Core alpha. Look for the default + // Homebrew installation path and if that fails check the system-wide library path. + if (os.platform() == "darwin" && this.getPowerShellVersionLabel() == "alpha") { if (!(utils.checkIfFileExists("/usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib") && utils.checkIfFileExists("/usr/local/opt/openssl/lib/libssl.1.0.0.dylib")) && !(utils.checkIfFileExists("/usr/local/lib/libcrypto.1.0.0.dylib") && utils.checkIfFileExists("/usr/local/lib/libssl.1.0.0.dylib"))) { var thenable = vscode.window.showWarningMessage( - "The PowerShell extension will not work without OpenSSL on macOS and OS X", + "The PowerShell extension will not work without OpenSSL on macOS and OS X when using PowerShell alpha", "Show Documentation"); thenable.then( @@ -131,7 +133,6 @@ export class SessionManager implements Middleware { } this.suppressRestartPrompt = false; - this.powerShellExePath = this.getPowerShellExePath(); if (this.powerShellExePath) { @@ -638,6 +639,33 @@ export class SessionManager implements Middleware { return resolvedPath; } + private getPowerShellVersionLabel(): string { + if (this.powerShellExePath) { + var powerShellCommandLine = [ + this.powerShellExePath, + "-NoProfile", + "-NonInteractive" + ]; + + // Only add ExecutionPolicy param on Windows + if (utils.isWindowsOS()) { + powerShellCommandLine.push("-ExecutionPolicy", "Bypass") + } + + powerShellCommandLine.push( + "-Command", + "'$PSVersionTable | ConvertTo-Json'"); + + var powerShellOutput = cp.execSync(powerShellCommandLine.join(' ')); + var versionDetails = JSON.parse(powerShellOutput.toString()); + return versionDetails.PSVersion.Label; + } + else { + // TODO: throw instead? + return null; + } + } + private showSessionConsole(isExecute?: boolean) { if (this.languageServerProcess) { this.languageServerProcess.showConsole( From 706b5a5c3eb0d359fad3981f30a757bb6391fd4d Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Fri, 10 Nov 2017 19:14:19 -0700 Subject: [PATCH 29/30] Workaround VSCode bug where ${script} var not expanded (#1095) This happens when you start a debug session from a git diff window. --- src/features/DebugSession.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/features/DebugSession.ts b/src/features/DebugSession.ts index affda52110..11a8bdbdb7 100644 --- a/src/features/DebugSession.ts +++ b/src/features/DebugSession.ts @@ -121,9 +121,17 @@ export class DebugSessionFeature implements IFeature, DebugConfigurationProvider vscode.window.showErrorMessage(msg); return; } + + if (config.script === "${file}") { + config.script = currentDocument.fileName; + } } } + if (config.cwd === "${file}") { + config.cwd = currentDocument.fileName; + } + if (config.createTemporaryIntegratedConsole !== undefined) { createNewIntegratedConsole = config.createTemporaryIntegratedConsole; } From f198d98f86432b7434c410c38c2fe58b9dee9f2a Mon Sep 17 00:00:00 2001 From: Keith Hill Date: Sat, 11 Nov 2017 11:08:14 -0700 Subject: [PATCH 30/30] Update to latest tasks schema (#1098) Update to pwsh on Linux/macOS --- .vscode/tasks.json | 60 +++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 0bb9f0175a..b7cd201f60 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -2,41 +2,53 @@ "version": "2.0.0", "windows": { - "command": "${env:windir}/System32/WindowsPowerShell/v1.0/powershell.exe", - "args": [ "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command" ] + "options": { + "shell": { + "executable": "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", + "args": [ "-NoProfile", "-ExecutionPolicy", "Bypass", "-Command" ] + } + } }, "linux": { - "command": "/usr/bin/powershell", - "args": [ "-NoProfile", "-Command" ] + "options": { + "shell": { + "executable": "/usr/bin/pwsh", + "args": [ "-NoProfile", "-Command" ] + } + } }, "osx": { - "command": "/usr/local/bin/powershell", - "args": [ "-NoProfile", "-Command" ] + "options": { + "shell": { + "executable": "/usr/local/bin/pwsh", + "args": [ "-NoProfile", "-Command" ] + } + } }, "tasks": [ { - "taskName": "Install", - "suppressTaskName": true, - "args": [ "Invoke-Build", "Restore" ], + "label": "Install", + "type": "shell", + "command": "Invoke-Build Restore", "problemMatcher": [] }, { - "taskName": "CleanAll", - "suppressTaskName": true, - "args": [ "Invoke-Build", "CleanAll" ], + "label": "CleanAll", + "type": "shell", + "command": "Invoke-Build CleanAll", "problemMatcher": [] }, { - "taskName": "Clean", - "suppressTaskName": true, - "args": [ "Invoke-Build", "Clean" ], + "label": "Clean", + "type": "shell", + "command": "Invoke-Build Clean", "problemMatcher": [] }, { - "taskName": "BuildAll", - "suppressTaskName": true, - "args": [ "Invoke-Build", "BuildAll" ], + "label": "BuildAll", + "type": "shell", + "command": "Invoke-Build BuildAll", "group": { "kind": "build", "isDefault": true @@ -44,16 +56,16 @@ "problemMatcher": [] }, { - "taskName": "Build", - "suppressTaskName": true, - "args": [ "Invoke-Build", "Build" ], + "label": "Build", + "type": "shell", + "command": "Invoke-Build Build", "group": "build", "problemMatcher": [] }, { - "taskName": "Test", - "suppressTaskName": true, - "args": [ "Invoke-Build", "Test" ], + "label": "Test", + "type": "shell", + "command": "Invoke-Build Test", "group": { "kind": "test", "isDefault": true